| <!DOCTYPE html> |
| <script src='../../resources/testharness.js'></script> |
| <script src='../../resources/testharnessreport.js'></script> |
| <script src='../../resources/gesture-util.js'></script> |
| |
| <style> |
| body, html { |
| margin: 0; |
| width: 100%; |
| height: 100%; |
| } |
| |
| iframe { |
| position: absolute; |
| top: 0; |
| left: 0; |
| width: 100%; |
| height: 100%; |
| border: 0; |
| } |
| pre { |
| /* Prevent test output from interfering with root scroller activation when |
| * running manually */ |
| position: absolute; |
| } |
| </style> |
| |
| <iframe id="rootscroller" srcdoc=" |
| <!DOCTYPE html> |
| <style> |
| body { |
| height: 2000px; |
| } |
| #scroller { |
| position: absolute; |
| clip: rect(0px, 1000px, 500px, 0px); |
| overflow: auto; |
| height: 500px; |
| width: 500px; |
| background-color: salmon; |
| padding: 20px; |
| box-sizing: border-box; |
| text-align: center; |
| } |
| </style> |
| <div id='scroller'> |
| <p> |
| This scroller is positioned and has a clip region so should be |
| non-composited. It is contained in a viewport-sized IFRAME which should |
| be the root scroller. |
| </p> |
| <p> |
| Attempt to scroll here with wheel or touch. If the colored box scrolls, |
| the test passes. The IFRAME must not scroll. |
| </p> |
| <div style='height: 1600px'></div> |
| </div>"> |
| </iframe> |
| |
| |
| <script> |
| if (window.internals) |
| window.internals.runtimeFlags.implicitRootScrollerEnabled = true; |
| |
| window.onload = async () => { |
| const iframe = document.getElementById('rootscroller'); |
| const scroller = iframe.contentDocument.getElementById('scroller'); |
| |
| promise_test(async () => { |
| await waitForCompositorCommit(); |
| |
| if (window.internals) { |
| assert_equals(window.internals.effectiveRootScroller(document), |
| iframe, |
| "IFrame must have been promoted to root scroller " + |
| "for this test to be effective"); |
| } |
| |
| assert_equals(iframe.scrollTop, 0, "IFRAME starts off unscrolled."); |
| assert_equals(scroller.scrollTop, 0, "Scroller starts off unscrolled."); |
| |
| // Scroll over the colored scrolling DIV. Ensure it's the one that gets |
| // scrolled. |
| { |
| const delta = 1000; |
| const location = { x: 100, y: 100 }; |
| await smoothScroll(delta, |
| location.x, |
| location.y, |
| GestureSourceType.TOUCH_INPUT, |
| 'down', |
| SPEED_INSTANT); |
| |
| // Make sure the scroll above went to the DIV and not the IFRAME. |
| assert_equals(iframe.contentWindow.scrollY, 0, |
| "|iframe| must not have scrolled.") |
| assert_greater_than(scroller.scrollTop, 150, |
| "|scroller| should have been scrolled."); |
| } |
| |
| }, 'NonFastScrollableRegion inside root scroller.'); |
| } |
| |
| </script> |