| <!DOCTYPE html> |
| <title>Test keyboard scroll bubbling from a fenced frame.</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-actions.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| <script src="/common/utils.js"></script> |
| <script src="/common/dispatcher/dispatcher.js"></script> |
| <script src="resources/utils.js"></script> |
| <style> |
| body { |
| /* Make main frame scrollable */ |
| width: 200vw; |
| height: 200vh; |
| } |
| </style> |
| |
| <body> |
| <script> |
| |
| // Ensure keyboard scrolling from inside a fenced frame is bubbled out to the |
| // embedding frame. |
| promise_test(async t => { |
| const frame = attachFencedFrameContext({html: ` |
| <!DOCTYPE html> |
| <style> |
| body { |
| /* Make fenced frame scrollable */ |
| width: 200vw; |
| height: 200vh; |
| } |
| </style> |
| <script src="/resources/testdriver.js"><\/script> |
| <script src="/resources/testdriver-actions.js"><\/script> |
| <script src="/resources/testdriver-vendor.js"><\/script> |
| `}); |
| |
| // Scroll the fenced frame to its full extent so that left/down arrow key |
| // scrolling will bubble to the embedder. |
| await frame.execute(async () => { |
| window.scrollTo(10000, 10000); |
| }); |
| |
| assert_equals(window.scrollX, 0, '[PRECONDITION] main frame has no x scroll.'); |
| assert_equals(window.scrollY, 0, '[PRECONDITION] main frame has no y scroll.'); |
| |
| // Simulate a right arrow and down arrow key in the fenced frame. |
| await frame.execute(async () => { |
| const arrow_right = "\uE014"; |
| const arrow_down = "\uE015"; |
| |
| test_driver.send_keys(document.body, arrow_right); |
| test_driver.send_keys(document.body, arrow_down); |
| }); |
| |
| // Use step_wait to poll since the scroll may be executed asynchronously |
| // (e.g. IPC to embedder, scroll animation). |
| await t.step_wait(() => window.scrollX > 0, "Wait for horizontal scroll."); |
| assert_greater_than(window.scrollX, 0, 'Horizontal scroll should bubble to main frame.'); |
| |
| await t.step_wait(() => window.scrollY > 0, "Wait for vertical scroll."); |
| assert_greater_than(window.scrollY, 0, 'Vertical scroll should bubble to main frame.'); |
| }, 'Keyboard scrolling bubbles out of fenced frame'); |
| |
| </script> |
| </body> |