Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Minimally support iframes (nested browsing contexts) in selection event handling #12037

Merged
merged 29 commits into from Aug 2, 2018

Conversation

acusti
Copy link
Contributor

@acusti acusti commented Jan 18, 2018

As mentioned in #9184 (comment), this PR takes a minimal approach to making React work when rendering selectable elements across nested browsing contexts (iframes or browser windows opened via window.open). That means changing ReactDOMSelection and SelectEventPlugin to use the window and document objects relative to the DOM node being handled where possible, and updating ReactInputSelection to find and restore selection to the single active element on the page, even when that element is inside a nested browsing context. I did a quick test using the code in this PR of rendering a Draft editor into an iframe and it seems sufficient to make it all work without issue.

To try this out in your own project, update your react-dom dependency string to github:brandcast/react-dom-built#e673e48. Also make sure you are using latest React (16.2.0) to avoid a version mismatch.

I made additional fixes to ReactInputSelection’s hasSelectionCapabilities function in 82443f7 that I have not replicated here to avoid bloating the PR. If I should add that change to this PR, let me know and I’d be happy to do so.

@gaearon Attaching the full bundle size reporting table (note that the handling of the markdown table headers seems somewhat borked in master so the table is a bit unwieldy)

Bundle size reporting table
┌─────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────┬───────────────────────────────────────────────────────────────────────────────┬───────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────┬───────────────────────────────────────────────────────────────────────────────┬───────────────────────────────────────────────────────────────────────┐
│ Bundle 0 Bundle,Prev Size,Current Size,Diff,Prev Gzip,Current Gzip,Diff │ Prev Size 1 Bundle,Prev Size,Current Size,Diff,Prev Gzip,Current Gzip,Diff │ Current Size 2 Bundle,Prev Size,Current Size,Diff,Prev Gzip,Current Gzip,Diff │ Diff 3 Bundle,Prev Size,Current Size,Diff,Prev Gzip,Current Gzip,Diff │ Prev Gzip 4 Bundle,Prev Size,Current Size,Diff,Prev Gzip,Current Gzip,Diff │ Current Gzip 5 Bundle,Prev Size,Current Size,Diff,Prev Gzip,Current Gzip,Diff │ Diff 6 Bundle,Prev Size,Current Size,Diff,Prev Gzip,Current Gzip,Diff │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react.development.js  (UMD_DEV)                                         │ 54.08 KB                                                                   │ 54.08 KB                                                                      │ 0 %                                                                   │ 14.67 KB                                                                   │ 14.67 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react.production.min.js  (UMD_PROD)                                     │ 6.39 KB                                                                    │ 6.39 KB                                                                       │ 0 %                                                                   │ 2.72 KB                                                                    │ 2.72 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react.development.js  (NODE_DEV)                                        │ 44.72 KB                                                                   │ 44.72 KB                                                                      │ 0 %                                                                   │ 12.4 KB                                                                    │ 12.4 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react.production.min.js  (NODE_PROD)                                    │ 5.22 KB                                                                    │ 5.22 KB                                                                       │ 0 %                                                                   │ 2.29 KB                                                                    │ 2.29 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ React-dev.js  (FB_DEV)                                                  │ 44.07 KB                                                                   │ 44.07 KB                                                                      │ 0 %                                                                   │ 11.93 KB                                                                   │ 11.93 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ React-prod.js  (FB_PROD)                                                │ 12.38 KB                                                                   │ 12.38 KB                                                                      │ 0 %                                                                   │ 3.33 KB                                                                    │ 3.33 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom.development.js  (UMD_DEV)                                     │ 547.88 KB                                                                  │ 548.4 KB                                                                      │ 0 %                                                                   │ 129.64 KB                                                                  │ 129.71 KB                                                                     │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom.production.min.js  (UMD_PROD)                                 │ 91.55 KB                                                                   │ 91.41 KB                                                                      │ -1 %                                                                  │ 30.09 KB                                                                   │ 30.03 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom.development.js  (NODE_DEV)                                    │ 532.29 KB                                                                  │ 532.8 KB                                                                      │ 0 %                                                                   │ 126.01 KB                                                                  │ 126.03 KB                                                                     │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom.production.min.js  (NODE_PROD)                                │ 90.01 KB                                                                   │ 89.87 KB                                                                      │ -1 %                                                                  │ 29.22 KB                                                                   │ 29.1 KB                                                                       │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactDOM-dev.js  (FB_DEV)                                               │ 549.36 KB                                                                  │ 549.85 KB                                                                     │ 0 %                                                                   │ 128.2 KB                                                                   │ 128.26 KB                                                                     │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactDOM-prod.js  (FB_PROD)                                             │ 258.75 KB                                                                  │ 258.7 KB                                                                      │ -1 %                                                                  │ 50.02 KB                                                                   │ 49.89 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-test-utils.development.js  (UMD_DEV)                          │ 40.3 KB                                                                    │ 40.66 KB                                                                      │ 0 %                                                                   │ 11.47 KB                                                                   │ 11.66 KB                                                                      │ +1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-test-utils.production.min.js  (UMD_PROD)                      │ 10.32 KB                                                                   │ 10.37 KB                                                                      │ 0 %                                                                   │ 3.82 KB                                                                    │ 3.85 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-test-utils.development.js  (NODE_DEV)                         │ 35.16 KB                                                                   │ 35.52 KB                                                                      │ +1 %                                                                  │ 10.03 KB                                                                   │ 10.24 KB                                                                      │ +2 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-test-utils.production.min.js  (NODE_PROD)                     │ 9.9 KB                                                                     │ 9.92 KB                                                                       │ 0 %                                                                   │ 3.74 KB                                                                    │ 3.74 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactTestUtils-dev.js  (FB_DEV)                                         │ 35.86 KB                                                                   │ 36.23 KB                                                                      │ +1 %                                                                  │ 10.12 KB                                                                   │ 10.32 KB                                                                      │ +1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-unstable-native-dependencies.development.js  (UMD_DEV)        │ 61.64 KB                                                                   │ 61.74 KB                                                                      │ 0 %                                                                   │ 16.17 KB                                                                   │ 16.2 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-unstable-native-dependencies.production.min.js  (UMD_PROD)    │ 11.07 KB                                                                   │ 11.07 KB                                                                      │ 0 %                                                                   │ 3.82 KB                                                                    │ 3.82 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-unstable-native-dependencies.development.js  (NODE_DEV)       │ 57.31 KB                                                                   │ 57.4 KB                                                                       │ 0 %                                                                   │ 15.02 KB                                                                   │ 15.05 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-unstable-native-dependencies.production.min.js  (NODE_PROD)   │ 10.63 KB                                                                   │ 10.63 KB                                                                      │ 0 %                                                                   │ 3.69 KB                                                                    │ 3.69 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactDOMUnstableNativeDependencies-dev.js  (FB_DEV)                     │ 56.42 KB                                                                   │ 56.52 KB                                                                      │ 0 %                                                                   │ 14.41 KB                                                                   │ 14.46 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactDOMUnstableNativeDependencies-prod.js  (FB_PROD)                   │ 26.2 KB                                                                    │ 26.2 KB                                                                       │ 0 %                                                                   │ 5.28 KB                                                                    │ 5.28 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-server.browser.development.js  (UMD_DEV)                      │ 91.35 KB                                                                   │ 91.91 KB                                                                      │ 0 %                                                                   │ 24.47 KB                                                                   │ 24.6 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-server.browser.production.min.js  (UMD_PROD)                  │ 13.92 KB                                                                   │ 13.92 KB                                                                      │ 0 %                                                                   │ 5.61 KB                                                                    │ 5.61 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-server.browser.development.js  (NODE_DEV)                     │ 80.67 KB                                                                   │ 81.23 KB                                                                      │ 0 %                                                                   │ 21.83 KB                                                                   │ 21.96 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-server.browser.production.min.js  (NODE_PROD)                 │ 13.28 KB                                                                   │ 13.28 KB                                                                      │ 0 %                                                                   │ 5.37 KB                                                                    │ 5.37 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactDOMServer-dev.js  (FB_DEV)                                         │ 84.06 KB                                                                   │ 84.74 KB                                                                      │ 0 %                                                                   │ 21.85 KB                                                                   │ 21.97 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactDOMServer-prod.js  (FB_PROD)                                       │ 29.09 KB                                                                   │ 29.09 KB                                                                      │ 0 %                                                                   │ 7.53 KB                                                                    │ 7.53 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-server.node.development.js  (NODE_DEV)                        │ 82.59 KB                                                                   │ 83.15 KB                                                                      │ 0 %                                                                   │ 22.32 KB                                                                   │ 22.45 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-dom-server.node.production.min.js  (NODE_PROD)                    │ 14.09 KB                                                                   │ 14.09 KB                                                                      │ 0 %                                                                   │ 5.68 KB                                                                    │ 5.68 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-art.development.js  (UMD_DEV)                                     │ 349.57 KB                                                                  │ 349.64 KB                                                                     │ 0 %                                                                   │ 78.43 KB                                                                   │ 78.43 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-art.production.min.js  (UMD_PROD)                                 │ 81.61 KB                                                                   │ 81.55 KB                                                                      │ -1 %                                                                  │ 25.59 KB                                                                   │ 25.53 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-art.development.js  (NODE_DEV)                                    │ 275.44 KB                                                                  │ 275.51 KB                                                                     │ 0 %                                                                   │ 59.78 KB                                                                   │ 59.78 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-art.production.min.js  (NODE_PROD)                                │ 46.12 KB                                                                   │ 46.06 KB                                                                      │ -1 %                                                                  │ 14.84 KB                                                                   │ 14.79 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactART-dev.js  (FB_DEV)                                               │ 279.4 KB                                                                   │ 279.39 KB                                                                     │ -1 %                                                                  │ 59.53 KB                                                                   │ 59.5 KB                                                                       │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactART-prod.js  (FB_PROD)                                             │ 141.36 KB                                                                  │ 141.21 KB                                                                     │ -1 %                                                                  │ 24.75 KB                                                                   │ 24.71 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactNativeRenderer-dev.js  (RN_DEV)                                    │ 400.78 KB                                                                  │ 400.97 KB                                                                     │ 0 %                                                                   │ 89.22 KB                                                                   │ 89.25 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactNativeRenderer-prod.js  (RN_PROD)                                  │ 191.88 KB                                                                  │ 191.73 KB                                                                     │ -1 %                                                                  │ 33.59 KB                                                                   │ 33.54 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactRTRenderer-dev.js  (RN_DEV)                                        │ 279.79 KB                                                                  │ 279.87 KB                                                                     │ 0 %                                                                   │ 60.39 KB                                                                   │ 60.4 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactRTRenderer-prod.js  (RN_PROD)                                      │ 130.57 KB                                                                  │ 130.42 KB                                                                     │ -1 %                                                                  │ 22.5 KB                                                                    │ 22.46 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactCSRenderer-dev.js  (RN_DEV)                                        │ 270.63 KB                                                                  │ 270.72 KB                                                                     │ 0 %                                                                   │ 57.57 KB                                                                   │ 57.57 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactCSRenderer-prod.js  (RN_PROD)                                      │ 123.19 KB                                                                  │ 123.04 KB                                                                     │ -1 %                                                                  │ 21.17 KB                                                                   │ 21.14 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-test-renderer.development.js  (NODE_DEV)                          │ 272.09 KB                                                                  │ 272.16 KB                                                                     │ 0 %                                                                   │ 58.6 KB                                                                    │ 58.6 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-test-renderer.production.min.js  (NODE_PROD)                      │ 44.52 KB                                                                   │ 44.47 KB                                                                      │ -1 %                                                                  │ 14.19 KB                                                                   │ 14.16 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactTestRenderer-dev.js  (FB_DEV)                                      │ 276.15 KB                                                                  │ 276.14 KB                                                                     │ -1 %                                                                  │ 58.36 KB                                                                   │ 58.33 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-test-renderer-shallow.development.js  (NODE_DEV)                  │ 11.03 KB                                                                   │ 11.03 KB                                                                      │ 0 %                                                                   │ 3.02 KB                                                                    │ 3.02 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-test-renderer-shallow.production.min.js  (NODE_PROD)              │ 5.51 KB                                                                    │ 5.51 KB                                                                       │ 0 %                                                                   │ 2 KB                                                                       │ 2 KB                                                                          │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ ReactShallowRenderer-dev.js  (FB_DEV)                                   │ 11.26 KB                                                                   │ 11.26 KB                                                                      │ 0 %                                                                   │ 2.99 KB                                                                    │ 2.99 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-noop-renderer.development.js  (NODE_DEV)                          │ 17.79 KB                                                                   │ 17.79 KB                                                                      │ 0 %                                                                   │ 4.99 KB                                                                    │ 4.99 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-noop-renderer.production.min.js  (NODE_PROD)                      │ 6.23 KB                                                                    │ 6.23 KB                                                                       │ 0 %                                                                   │ 2.5 KB                                                                     │ 2.5 KB                                                                        │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-reconciler.development.js  (NODE_DEV)                             │ 254.36 KB                                                                  │ 254.46 KB                                                                     │ 0 %                                                                   │ 54.32 KB                                                                   │ 54.33 KB                                                                      │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-reconciler.production.min.js  (NODE_PROD)                         │ 37.99 KB                                                                   │ 37.95 KB                                                                      │ -1 %                                                                  │ 12.27 KB                                                                   │ 12.27 KB                                                                      │ -1 %                                                                  │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-reconciler-reflection.development.js  (NODE_DEV)                  │ 10.67 KB                                                                   │ 10.67 KB                                                                      │ 0 %                                                                   │ 3.3 KB                                                                     │ 3.3 KB                                                                        │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-reconciler-reflection.production.min.js  (NODE_PROD)              │ 2.35 KB                                                                    │ 2.35 KB                                                                       │ 0 %                                                                   │ 1.04 KB                                                                    │ 1.04 KB                                                                       │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-call-return.development.js  (NODE_DEV)                            │ 2.62 KB                                                                    │ 2.62 KB                                                                       │ 0 %                                                                   │ 958 B                                                                      │ 958 B                                                                         │ 0 %                                                                   │
├─────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ react-call-return.production.min.js  (NODE_PROD)                        │ 971 B                                                                      │ 971 B                                                                         │ 0 %                                                                   │ 525 B                                                                      │ 525 B                                                                         │ 0 %                                                                   │
└─────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────────────────────┘

@gaearon
Copy link
Collaborator

gaearon commented Jan 18, 2018

@orta Doesn't seem like the hook worked here either :-( I'm not sure I understood your message about the PR status earlier. Do you mean it's not always reliable? Is there any way to force-trigger it?

@aweary aweary self-assigned this Jan 18, 2018
@aweary
Copy link
Contributor

aweary commented Jan 18, 2018

I'll take a look at this within the next week or so. We should also implement a fixture that renders some text inputs (or maybe a Draft.js editor?) in an iframe to make it easy for contributors to validate the new behavior.

@orta
Copy link
Contributor

orta commented Jan 22, 2018

It should be reliable in cases like this (it's possibly unreliable on a same-repo PR, this is cross repo) (but you can re-run CI and it would fix it and by that point everything should be hooked up).

Those titles must have been my change, I can fix that too.

@gaearon
Copy link
Collaborator

gaearon commented Jan 22, 2018

(The above bot comment is wrong, sorry 😞 We'll fix that soon)

Copy link
Contributor

@aweary aweary left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@acusti could you provide a list of behaviors that currently don't work on master, which this PR would fix? I want to setup a DOM fixture set for this (here's some initial work on that) so it would be helpful to know exactly what we should be testing for.

return;
}

const selection = window.getSelection();
const selection = doc.defaultView.getSelection();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

defaultView is defined as a getter, and since we don't expect it to change within setOffsets maybe we should store the value in a local variable so we avoid triggering the getter twice.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I made that change (for this line and two other instances) in 51be426

@@ -12,7 +12,25 @@ import * as ReactDOMSelection from './ReactDOMSelection';
import {ELEMENT_NODE} from '../shared/HTMLNodeType';

function isInDocument(node) {
return containsNode(document.documentElement, node);
return (
node &&
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need to check if node exists? In what situation will node not be a DOM node?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The value that gets passed in comes from fbjs/lib/getActiveElement, which returns a nullable HTMLElement (https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/dom/getActiveElement.js#L21). The only instance where the return value would be null is if the util was unable to find a document object, which I think would only happen in SSR. But because it is theoretically nullable, all the operations in this file first confirm that node (or elem, in hasSelectionCapabilities) is truthy.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't use fbjs/lib/getActiveElement anymore, and have copied it in the repo. Let's tighten this up? Feel free to change getActiveElement as you see fit.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gaearon We can update getActiveElement.js to look like:

export default function getActiveElement(doc: ?Document): Element {
  doc = doc || document;
  try {
    return doc.activeElement || doc.body;
  } catch (e) {
    return doc.body;
  }
}

But strictly speaking, flow will still complain that document.body can be null (ref: facebook/flow#4783 (comment)), so strictly speaking, the Element return value still has to be ?Element, unless we did something like

export default function getActiveElement(doc: ?Document): Element {
  doc = doc || document;
  const body = doc.body || doc.createElement('body');
  try {
    return doc.activeElement || body;
  } catch (e) {
    return body;
  }
}

Do you have a preferred approach?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I want to lean towards the first, but I keep reasoning out of it in favor of the second. Body could be null, and it really it should never happen. But I've been surprised too much before :).

With the second example, do you need a try/catch?

Also: do you anticipate any problems with code downstream working with a document body that isn't attached?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nhunzaker No try/catch needed for the second example, and the ReactInputSelection plugin won’t have any issues; the code is already setup to handle detached DOM elements for a case where the active element becomes detached between when it is first read and cached and after React finishes committing an update. The second option has grown on me; I suggested it thinking it was silly, but now feel like it’s pretty reasonable. If we go with that one, should we add a comment explaining that document.body can be null?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The second option has grown on me; I suggested it thinking it was silly, but now feel like it’s pretty reasonable. If we go with that one, should we add a comment explaining that document.body can be null?

Let's go with it 👍

@acusti
Copy link
Contributor Author

acusti commented Jan 23, 2018

@aweary I created a version of my Draft.js in an iframe demo that uses the current stable release of React (as opposed to builds based upon my fork): https://codepen.io/acusti/pen/YYgmBE

If you start interacting with the draft editor in that demo (the primary text area), you will notice some things that don’t work:

  1. The selection continuously gets reset to the end of the editor as the user types, including when the user has highlighted text to replace it, or has changed the position of the cursor to the middle of the text block
  2. Cut, copy, and paste key commands are affected by the same problem. On cut or copy, the visible selection remains unchanged and nothing is copied. On paste, if there is anything in the clipboard, it’s pasted to the end of the contents (same as when typing with the selection anywhere in the editor). If nothing is in the clipboard, the existing visible selection remains unchanged.

My experience with these cross-iframe bugs has centered on using a Draft editor in the iframe, and the issues I have seen there (and described above) come from packages/react-dom/src/events/SelectEventPlugin.js, which currently relies on getActiveElement() without specifying the document where the select event originated to figure out what element to get the selection for. This results in always getting the parent document’s activeElement, which is the HTMLIframeElement, and as a result, the plugin doesn’t wind up firing a selection event when it should (the result of getSelection() is the same each time). You can test that behavior by having any input, textarea, or [contenteditable="true"] element that depends on receiving the onSelect event.

While the above example is a good practical illustration of the current issues, it isn’t a reduced test case, so I put together a much simpler example that increases the count of a state variable in an onSelect handler. The same handler is attached both to an input outside of the iframe, and one on a contenteditable div being rendered inside the iframe:

For all of the above examples, I used ReactDOM.createPortal to render a portion of the component tree into the iframe’s document.body. Here is the small <Iframe /> component I use:

class Iframe extends React.Component {
  iframeRef = null;

  handleRef = ref => {
    if (ref !== this.iframeRef) {
      this.iframeRef = ref;
      if (ref) {
        if (ref.contentDocument && this.props.head) {
          ref.contentDocument.head.innerHTML = this.props.head;
        }
        // Re-render must take place in the next tick (Firefox)
        setTimeout(() => {
          this.forceUpdate();
        });
      }
    }
  };

  render() {
    const ref = this.iframeRef;
    let portal;
    if (ref && ref.contentDocument) {
      portal = ReactDOM.createPortal(
        this.props.children,
        ref.contentDocument.body,
      );
    }

    return (
      <React.Fragment>
        <iframe ref={this.handleRef} />
        {portal}
      </React.Fragment>
    );
  }
}

It is used like so:

(
  <Iframe head="<style>input{font-size:24px}</style>">
    <input placeholder="An input inside an iframe!" />
  </Iframe>
)

Looking at your skeleton outline for the fixtures, I don’t know how to use <iframe src="/anything" /> to render an iframe in such a way that the components being rendered into the iframe as well as the parent document share the same window global / realm. Instead, I have been using variations of the above (the React 15.x version used unstable_renderSubtreeIntoContainer), and all the other examples I’ve seen of people following this pattern have worked the same way.


The other behavior that is currently broken in React is restoring selection to an active element inside an iframe, due to assumptions both in ReactInputSelection.js and in the getOffsets() function in ReactDOMSelection.js. @aweary If you extended the demo you shared with me where the rendering order of inputs changes but the active input stays selected, to one where the three inputs get rendered into an iframe (<Iframe><input />…</Iframe>), that would be enough to capture that behavior.

@aweary
Copy link
Contributor

aweary commented Jan 29, 2018

Thanks for the great writeup @acusti. I'm going to work on setting up a fixture for this using the Iframe component you provided. Then we can do some browser testing, and then hopefully get this merged if everything looks good!

@aweary
Copy link
Contributor

aweary commented Jan 30, 2018

OK, I implemented a couple basic fixtures for selection events in aweary@dff3e52.

I've deployed them here: http://react-fixtures-iframe-selection-events.surge.sh/selection-events

It's currently using your version of Draft.js so it works in iframes. If possible it would be nice to also add a test case for the same behavior without Draft.js, but for now I think it's fine. I'll run through these fixtures soon, and then I can just push the commit to your branch and include them as part of this PR.

If there are any other scenarios you think we should test @acusti let me know and I can add a test case for them!

@acusti
Copy link
Contributor Author

acusti commented Jan 30, 2018

@aweary Those fixtures look great! For the 2nd fixture’s description, I would suggest something like:

Draft.js is a rich text editor system for React. This verifies that the onSelect event it depends on to maintain selection state works in an iframe.

Agreed that it would be nice to have an example that tests selection event triggering without Draft.js, but I think it would likely wind up being a lot less practical.

As an aside, using the first “Reordered input elements in iframes” fixture illustrates well the difference between the set of changes implemented in this PR as opposed to the more complex changes in #9184. When you make a selection in one of those inputs and it remains the activeElement (the element that will receive keyboard input), the selection is maintained. However, once you go to select the checkbox for the fixture, the input remains visibly selected (because it’s in an iframe), but is no longer the activeElement. As a result, at the next interval in which its order is changed, the visible (inactive) selection disappears. That’s the behavior #9184 and its added complexity handles.

@acusti
Copy link
Contributor Author

acusti commented Feb 8, 2018

@aweary Would you like me to throw together a fixture that doesn’t rely on Draft.js? Or anything else I can help with to keep this moving along?

@aweary
Copy link
Contributor

aweary commented Feb 8, 2018

@acusti that would be great, feel free to build off of the fixtures I have in aweary@dff3e52. I'll go ahead and push those to this branch if they look OK to you. There's nothing blocking this other than testing the fixtures in our supported browsers. There's no definite list of those, but #9301 (comment) is a good starting point.

@acusti
Copy link
Contributor Author

acusti commented Feb 10, 2018

@aweary You should definitely push those to this branch, that would be great. I’ll go ahead and make the language change I suggested in #12037 (comment), then I’ll add a fixture that checks onSelect across iframes but doesn’t rely on Draft.js. For testing the fixtures in supported browsers, can I just create a checklist and check them off? Should I also do screenshots / gifs? Is that even something that would be helpful for me to do, or should I leave that to you all?

@aweary
Copy link
Contributor

aweary commented Feb 12, 2018

@acusti I've pushed the fixtures to your branch 👍 for now we can just test them with the version of Draft.js you provided, but we'll need to either get it working with an official release or remove Draft.js altogether before merging.

For testing the fixtures in supported browsers, can I just create a checklist and check them off? Should I also do screenshots / gifs? Is that even something that would be helpful for me to do, or should I leave that to you all?

We don't require any screenshots or anything, we just go through the list and manually verify everything is working as expected. You can write up a check list and share it with us afterwards if that works with you :) I'll start testing myself today.

The DraftJs fixture wasn't really working in all supported browsers anyways, so just drop it and try to cover our bases without using it directly
@gaearon gaearon merged commit b565f49 into facebook:master Aug 2, 2018
@gaearon
Copy link
Collaborator

gaearon commented Aug 2, 2018

All right. Thank you!

@nhunzaker
Copy link
Contributor

nhunzaker commented Aug 2, 2018

Woooo! Congrats @acusti and @wilsonhyng! And thanks for sticking with us! It's super exciting to get this merged!

@anthonychung14
Copy link

@acusti @wilsonhyng this is pretty sweet

@gaearon
Copy link
Collaborator

gaearon commented Sep 14, 2018

@acusti Looks like there's a new crash here, mind looking at this? #13648

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

10 participants