diff options
Diffstat (limited to 'testing/web-platform/tests/fenced-frame/key-scrolling.https.html')
-rw-r--r-- | testing/web-platform/tests/fenced-frame/key-scrolling.https.html | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/testing/web-platform/tests/fenced-frame/key-scrolling.https.html b/testing/web-platform/tests/fenced-frame/key-scrolling.https.html new file mode 100644 index 0000000000..7a23a72cb0 --- /dev/null +++ b/testing/web-platform/tests/fenced-frame/key-scrolling.https.html @@ -0,0 +1,67 @@ +<!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> |