vertical-scroll-wheel-block-manual.tentative.html (4805B)
1 <!doctype html> 2 <title>vertical-scroll test for 'mousewheel'</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/feature-policy/experimental-features/resources/common.js"></script> 6 <script src="/feature-policy/experimental-features/resources/vertical-scroll.js"></script> 7 <style> 8 html, body { 9 height: 100%; 10 width: 100%; 11 } 12 13 iframe { 14 width: 90%; 15 height: 90%; 16 margin: 0; 17 padding: 0; 18 } 19 20 .spacer { 21 width: 100%; 22 height: 100%; 23 margin: 100%; 24 } 25 26 </style> 27 <iframe></iframe> 28 <br/> 29 <p>Spacers below to make page scrollable</p> 30 <br/> 31 <div class="spacer"></div> 32 <div class="spacer"></div> 33 <p> EOF </p> 34 <script> 35 "use strict"; 36 37 let url = url_base + "vertical-scroll-wheel-block.html"; 38 function iframeElement() { 39 return document.querySelector("iframe"); 40 } 41 42 // Used as the polling interval when waiting for a specific condition. 43 let verify_scroll_offset_delay = 5; 44 let no_scroll_timout = 50; 45 46 function waitUntilSatisfied(testInstance, predicate) { 47 return new Promise((r) => { 48 function testPredicate() { 49 if (predicate()) { 50 r(); 51 } else { 52 testInstance.step_timeout(testPredicate, verify_scroll_offset_delay); 53 } 54 } 55 testPredicate(); 56 }); 57 } 58 59 function resetScroll(testInstance) { 60 window.scrollTo({top: 0, left: 0, behavior: "instant"}); 61 return waitUntilSatisfied(testInstance, () => { 62 return window.scrollX === 0 && window.scrollY === 0; 63 }); 64 } 65 66 function waitForMinimumScrollOffset(testInstance, minX, minY) { 67 return waitUntilSatisfied(testInstance, () => { 68 return window.scrollX >= minX && window.scrollY >= minY; 69 }); 70 } 71 72 function waitFor(testInstance, delay) { 73 let checked_once = false; 74 return waitUntilSatisfied(testInstance, () => { 75 if (checked_once) 76 return true; 77 checked_once = true; 78 return false; 79 }); 80 } 81 82 // Wait for the helper scripts to load. 83 promise_test(async() => { 84 if (window.input_api_ready) 85 return Promise.resolve(); 86 await new Promise((r) => { 87 window.resolve_on_input_api_ready = r; 88 }); 89 }, "Make sure input injection API is ready."); 90 91 // Sanity-check: Test API for scrolling along y-axis works as expected. 92 promise_test(async(testInstance) => { 93 await resetScroll(testInstance); 94 await inject_wheel_scroll("down"); 95 await waitForMinimumScrollOffset(testInstance, 0, 1); 96 assert_greater_than(window.scrollY, 0, "Expected vertical scroll."); 97 }, "Sanity-check: the page scrolls vertically in response to vertical wheel."); 98 99 // Sanity-check: Test API for scrolling along x-axis works as expected. 100 promise_test(async(testInstance) => { 101 await resetScroll(testInstance); 102 await inject_wheel_scroll("right"); 103 await waitForMinimumScrollOffset(testInstance, 1, 0); 104 assert_greater_than(window.scrollX, 0, "Expected horizontal scroll."); 105 }, "Sanity-check: the page scrolls horizontally in response to horizontal wheel."); 106 107 // Test that when 'vertical-scroll' is enabled, vertical scroll can be 108 // blocked by canceling 'wheel' event. 109 promise_test(async(testInstance) => { 110 setFeatureState(iframeElement(), "vertical-scroll", "*"); 111 await loadUrlInIframe(iframeElement(), url); 112 113 await resetScroll(testInstance); 114 await inject_wheel_scroll("down") 115 await waitFor(testInstance, no_scroll_timout); 116 assert_equals(window.scrollY, 0, "Did not expected vertical scroll."); 117 }, "When 'vertical-scroll' is enabled canceling vertical 'wheel' " + 118 "blocks vertical scrolling."); 119 120 // Test that when 'vertical-scroll' is disabled, vertical scroll cannot 121 // be blocked by canceling 'wheel' event. 122 promise_test(async(testInstance) => { 123 setFeatureState(iframeElement(), "vertical-scroll", "'none'"); 124 await loadUrlInIframe(iframeElement(), url); 125 126 await resetScroll(testInstance); 127 await inject_wheel_scroll("down"); 128 await waitForMinimumScrollOffset(testInstance, 0, 1); 129 assert_greater_than(window.scrollY, 0, "Expected vertical scroll."); 130 }, "When 'vertical-scroll' is disabled canceling vertical 'wheel' " + 131 "does not block vertical scrolling."); 132 133 // Test that when 'vertical-scroll' is disabled, horizontal scroll can be 134 // blocked by canceling 'wheel' event. 135 promise_test(async(testInstance) => { 136 setFeatureState(iframeElement(), "vertical-scroll", "'none'"); 137 await loadUrlInIframe(iframeElement(), url); 138 139 await resetScroll(testInstance); 140 await inject_wheel_scroll("right"); 141 await waitFor(testInstance, no_scroll_timout); 142 assert_equals(window.scrollX, 0, "Did not expect horizontal scroll."); 143 }, "When 'vertical-scroll' is disabled canceling horizontal 'wheel' " + 144 "blocks horizontal scrolling."); 145 </script>