scrollend-event-not-fired-on-no-scroll.html (3881B)
1 <!DOCTYPE HTML> 2 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/resources/testdriver.js"></script> 6 <script src="/resources/testdriver-actions.js"></script> 7 <script src="/resources/testdriver-vendor.js"></script> 8 <script src="scroll_support.js"></script> 9 <style> 10 #spacer { 11 height: 100vh; 12 width: 100px; 13 position: relative; 14 } 15 16 #targetDiv { 17 width: 200px; 18 height: 200px; 19 overflow: scroll; 20 } 21 22 #innerDiv { 23 width: 400px; 24 height: 400px; 25 } 26 </style> 27 28 <body style="margin:0"> 29 <div id="targetDiv"> 30 <!-- This test uses button elements as a consistent mechanism for 31 ensuring that focus is on the correct scrolling element when 32 scrolling via keys --> 33 <button id="targetButton">target</button> 34 <div id="innerDiv"></div> 35 </div> 36 <button id="docButton">doc</button> 37 <div id="spacer"></div> 38 </body> 39 40 <script> 41 var target_div = document.getElementById('targetDiv'); 42 43 async function resetScrollers(test) { 44 await waitForScrollReset(test, target_div); 45 await waitForScrollReset(test, document.scrollingElement); 46 } 47 48 function getBoundingClientRect(element) { 49 if (element == document) { 50 return document.documentElement.getBoundingClientRect(); 51 } 52 return element.getBoundingClientRect(); 53 } 54 55 async function upwardScroll(scrolling_element, button_element, scroll_type) { 56 if (scroll_type == "wheel") { 57 let x = 0; 58 let y = 0; 59 let delta_x = 0; 60 let delta_y = -50; 61 let actions = new test_driver.Actions() 62 .scroll(x, y, delta_x, delta_y, {origin: scrolling_element}); 63 await actions.send(); 64 } else if (scroll_type == "keys") { 65 const num_keydowns = 5; 66 const arrowUp = '\uE013'; 67 for (let i = 0; i < num_keydowns; i++) { 68 await test_driver.send_keys(button_element, arrowUp); 69 } 70 } 71 } 72 73 async function testScrollendNotFiredOnNoScroll(test, scrolling_element, 74 listening_element, 75 button_element, scroll_type) { 76 test.add_cleanup(async () => { 77 await resetScrollers(test); 78 await waitForCompositorCommit(); 79 }); 80 81 assert_greater_than(scrolling_element.scrollHeight, 82 scrolling_element.clientHeight); 83 assert_equals(scrolling_element.scrollTop, 0); 84 85 let scrollend_promise = waitForScrollendEvent(test, listening_element).then( 86 /* resolve */ test.unreached_func("no scroll, so no scrollend expected"), 87 /* reject */ () => { /* Did not see scrollend, which is okay. */ } 88 ); 89 await upwardScroll(scrolling_element, button_element, scroll_type); 90 await scrollend_promise; 91 } 92 93 function runTest() { 94 promise_test(async (t) => { 95 await testScrollendNotFiredOnNoScroll(t, target_div, target_div, 96 targetButton, "wheel"); 97 }, "No scroll via wheel on div shouldn't fire scrollend."); 98 99 promise_test(async (t) => { 100 await testScrollendNotFiredOnNoScroll(t, target_div, target_div, 101 targetButton, "keys"); 102 }, "No scroll via keys on div shouldn't fire scrollend."); 103 104 promise_test(async (t) => { 105 await testScrollendNotFiredOnNoScroll(t, document.scrollingElement, 106 document, docButton, "wheel"); 107 }, "No scroll via wheel on document shouldn't fire scrollend."); 108 109 promise_test(async (t) => { 110 await testScrollendNotFiredOnNoScroll(t, document.scrollingElement, 111 document, docButton, "keys"); 112 }, "No scroll via keys on document shouldn't fire scrollend.") 113 } 114 window.onload = runTest; 115 </script>