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 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

This comment has been minimized.

Copy link
Member

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

This comment has been minimized.

Copy link
Member

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

This comment has been minimized.

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

This comment has been minimized.

Copy link
Member

gaearon commented Jan 22, 2018

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

Copy link
Member

aweary left a comment

@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();

This comment has been minimized.

Copy link
@aweary

aweary Jan 22, 2018

Member

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.

This comment has been minimized.

Copy link
@acusti

acusti Jan 23, 2018

Author Contributor

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 &&

This comment has been minimized.

Copy link
@aweary

aweary Jan 22, 2018

Member

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

This comment has been minimized.

Copy link
@acusti

acusti Jan 23, 2018

Author Contributor

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.

This comment has been minimized.

Copy link
@gaearon

gaearon Jul 17, 2018

Member

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.

This comment has been minimized.

Copy link
@acusti

acusti Jul 17, 2018

Author Contributor

@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?

This comment has been minimized.

Copy link
@nhunzaker

nhunzaker Jul 18, 2018

Collaborator

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?

This comment has been minimized.

Copy link
@acusti

acusti Jul 18, 2018

Author Contributor

@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?

This comment has been minimized.

Copy link
@nhunzaker

nhunzaker Jul 20, 2018

Collaborator

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

This comment has been minimized.

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

This comment has been minimized.

Copy link
Member

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

This comment has been minimized.

Copy link
Member

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

This comment has been minimized.

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

This comment has been minimized.

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

This comment has been minimized.

Copy link
Member

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

This comment has been minimized.

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

This comment has been minimized.

Copy link
Member

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.

@aweary aweary force-pushed the brandcast:minimal-iframes branch from cdcd6f6 to fef8519 Feb 12, 2018
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

This comment has been minimized.

Copy link
Member

gaearon commented Aug 2, 2018

All right. Thank you!

@nhunzaker

This comment has been minimized.

Copy link
Collaborator

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

This comment has been minimized.

Copy link

anthonychung14 commented Aug 16, 2018

@acusti @wilsonhyng this is pretty sweet

TejasQ added a commit to TejasQ/react that referenced this pull request Aug 26, 2018
…nt handling (facebook#12037)

* Prefer node’s window and document over globals

* Support active elements in nested browsing contexts

* Avoid invoking defaultView getter unnecessarily

* Prefer node’s window and document over globals

* Support active elements in nested browsing contexts

* Avoid invoking defaultView getter unnecessarily

* Implement selection event fixtures

* Prefer node’s window and document over globals

* Avoid invoking defaultView getter unnecessarily

* Fix react-scripts to work with alphas after 16.0.0

The current logic just checks if the version is an alpha with a major version of 16 to account for weirdness with the 16 RC releases, but now we have alphas for newer minor releases that don't have weirdness

* Run prettier on new selection events fixtures

* Add fixture for onSelect in iframes, remove DraftJS fixture

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

* Purge remnants of draft.js from fixtures

* Use prop-types import instead of window global

* Make fixtures’ Iframe component Firefox-compatible

* Fix switch case for SelectionEventsFixture

* Remove draft.js / immutable.js dependencies

* Cache owner doc as var to avoid reading it twice

* Add documentation for getActiveElementDeep to explain try/catch

Add documentation for getActiveElementDeep to explain try/catch

* Ensure getActiveElement always returns DOM element

* Tighten up isNode and isTextNode

* Remove ie8 compatibility

* Specify cross-origin example in getActiveElementDeep

* Revert back to returning null if document is not defined
@gaearon gaearon mentioned this pull request Sep 5, 2018
@gaearon

This comment has been minimized.

Copy link
Member

gaearon commented Sep 14, 2018

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

iyegoroff added a commit to iyegoroff/react that referenced this pull request Mar 9, 2019
…nt handling (facebook#12037)

* Prefer node’s window and document over globals

* Support active elements in nested browsing contexts

* Avoid invoking defaultView getter unnecessarily

* Prefer node’s window and document over globals

* Support active elements in nested browsing contexts

* Avoid invoking defaultView getter unnecessarily

* Implement selection event fixtures

* Prefer node’s window and document over globals

* Avoid invoking defaultView getter unnecessarily

* Fix react-scripts to work with alphas after 16.0.0

The current logic just checks if the version is an alpha with a major version of 16 to account for weirdness with the 16 RC releases, but now we have alphas for newer minor releases that don't have weirdness

* Run prettier on new selection events fixtures

* Add fixture for onSelect in iframes, remove DraftJS fixture

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

* Purge remnants of draft.js from fixtures

* Use prop-types import instead of window global

* Make fixtures’ Iframe component Firefox-compatible

* Fix switch case for SelectionEventsFixture

* Remove draft.js / immutable.js dependencies

* Cache owner doc as var to avoid reading it twice

* Add documentation for getActiveElementDeep to explain try/catch

Add documentation for getActiveElementDeep to explain try/catch

* Ensure getActiveElement always returns DOM element

* Tighten up isNode and isTextNode

* Remove ie8 compatibility

* Specify cross-origin example in getActiveElementDeep

* Revert back to returning null if document is not defined
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
10 participants
You can’t perform that action at this time.