overscroll-event-fired-to-element-with-overscroll-behavior.tentative.html (2882B)
1 <!DOCTYPE HTML> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="/resources/testdriver.js"></script> 5 <script src="/resources/testdriver-actions.js"></script> 6 <script src="/resources/testdriver-vendor.js"></script> 7 <script src="scroll_support.js"></script> 8 <style> 9 #overscrollXDiv { 10 width: 600px; 11 height: 600px; 12 overflow: scroll; 13 overscroll-behavior-x: contain; 14 } 15 #overscrollYDiv { 16 width: 500px; 17 height: 500px; 18 overflow: scroll; 19 overscroll-behavior-y: none; 20 } 21 #targetDiv { 22 width: 400px; 23 height: 400px; 24 overflow: scroll; 25 } 26 .content { 27 width:800px; 28 height:800px; 29 } 30 </style> 31 32 <body style="margin:0" onload=runTest()> 33 <div id="overscrollXDiv"> 34 <div class=content> 35 <div id="overscrollYDiv"> 36 <div class=content> 37 <div id="targetDiv"> 38 <div class="content"> 39 </div> 40 </div> 41 </div> 42 </div> 43 </div> 44 </div> 45 </body> 46 47 <script> 48 var target_div = document.getElementById('targetDiv'); 49 var overscrolled_x_delta = 0; 50 var overscrolled_y_delta = 0; 51 function onOverscrollX(event) { 52 assert_false(event.cancelable); 53 assert_false(event.bubbles); 54 overscrolled_x_delta = event.deltaX; 55 } 56 function onOverscrollY(event) { 57 assert_false(event.cancelable); 58 assert_false(event.bubbles); 59 overscrolled_y_delta = event.deltaY; 60 } 61 // Test that both "onoverscroll" and addEventListener("overscroll"... work. 62 document.getElementById('overscrollXDiv').onoverscroll = onOverscrollX; 63 document.getElementById('overscrollYDiv'). 64 addEventListener("overscroll", onOverscrollY); 65 66 function runTest() { 67 promise_test (async (t) => { 68 // Make sure that no overscroll event is sent to document or target_div. 69 document.addEventListener("overscroll", 70 t.unreached_func("Document got unexpected overscroll event.")); 71 target_div.addEventListener("overscroll", 72 t.unreached_func("target_div got unexpected overscroll event.")); 73 await waitForCompositorCommit(); 74 // Scroll up on target div and wait for the element with overscroll-y to get 75 // overscroll event. 76 await touchScrollInTarget(300, target_div, 'up'); 77 await waitFor(() => { return overscrolled_y_delta < 0; }, 78 'Expected element did not receive overscroll event after scroll up on ' + 79 'target.'); 80 assert_equals(target_div.scrollTop, 0); 81 82 // Scroll left on target div and wait for the element with overscroll-x to 83 // get overscroll event. 84 await touchScrollInTarget(300, target_div, 'left'); 85 await waitFor(() => { return overscrolled_x_delta < 0; }, 86 'Expected element did not receive overscroll event after scroll left ' + 87 'on target.'); 88 assert_equals(target_div.scrollLeft, 0); 89 }, 'Tests that the last element in the cut scroll chain gets overscroll ' + 90 'event when no element scrolls by touch.'); 91 } 92 </script>