scrollend-event-fired-to-document.html (3476B)
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 #hspacer { 11 height: 100px; 12 width: 100vw; 13 top: 0; 14 left: 200px; 15 /* on the right edge od targetDiv */ 16 position: absolute; 17 } 18 19 #vspacer { 20 height: 100vh; 21 width: 100px; 22 position: absolute; 23 } 24 25 #targetDiv { 26 width: 200px; 27 height: 200px; 28 overflow: scroll; 29 } 30 31 #innerDiv { 32 width: 400px; 33 height: 400px; 34 } 35 </style> 36 37 <body style="margin:0" onload=runTest()> 38 <div id="targetDiv"> 39 <div id="innerDiv"></div> 40 </div> 41 <div id="hspacer"></div> 42 <div id="vspacer"></div> 43 </body> 44 45 <script> 46 var target_div = document.getElementById('targetDiv'); 47 async function resetScrollers(test) { 48 await waitForScrollReset(test, target_div); 49 await waitForScrollReset(test, document.scrollingElement); 50 } 51 52 function fail() { 53 assert_true(false); 54 } 55 56 function runTest() { 57 promise_test(async (t) => { 58 await resetScrollers(t); 59 await waitForCompositorCommit(); 60 61 assert_equals(document.scrollingElement.scrollTop, 0, 62 "document should not be scrolled"); 63 64 let scrollend_promise = waitForScrollendEvent(t, target_div); 65 let max_target_div_scroll_top = target_div.scrollHeight - target_div.clientHeight; 66 target_div.scrollTo({ top: target_div.scrollHeight, left: 0 }); 67 await scrollend_promise; 68 assert_approx_equals(target_div.scrollTop, max_target_div_scroll_top, 1, 69 "target_div should be fully scrolled down"); 70 71 scrollend_promise = waitForScrollendEvent(t, document, 2000); 72 target_div.addEventListener("scrollend", fail); 73 // Scroll up on target div and wait for the doc to get scrollend event. 74 await scrollElementDown(target_div, target_div.clientHeight + 25); 75 await scrollend_promise; 76 77 target_div.removeEventListener("scrollend", fail); 78 assert_greater_than(document.scrollingElement.scrollTop, target_div.clientHeight - 1, 79 "document is scrolled by the height of target_div"); 80 }, "testing, vertical"); 81 82 promise_test(async (t) => { 83 await resetScrollers(t); 84 await waitForCompositorCommit(); 85 86 assert_equals(document.scrollingElement.scrollLeft, 0, 87 "document should not be scrolled"); 88 89 let scrollend_promise = waitForScrollendEvent(t, target_div); 90 let max_target_div_scroll_left = target_div.scrollWidth - target_div.clientWidth; 91 target_div.scrollTo({ left: target_div.scrollWidth, top: 0 }); 92 await scrollend_promise; 93 assert_approx_equals(target_div.scrollLeft, max_target_div_scroll_left, 1, 94 "target_div should be fully scrolled right"); 95 96 scrollend_promise = waitForScrollendEvent(t, document, 2000); 97 target_div.addEventListener("scrollend", fail); 98 await scrollElementLeft(target_div, target_div.clientWidth + 25); 99 await scrollend_promise; 100 101 target_div.removeEventListener("scrollend", fail); 102 assert_greater_than(document.scrollingElement.scrollLeft, target_div.clientWidth - 1, 103 "document is scrolled by the height of target_div"); 104 }, "testing, horizontal"); 105 } 106 </script>