helper_scrollbarbutton_repeat.html (2778B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width; initial-scale=1.0"> 6 <title>Basic test that click and hold on a scrollbar button works as expected</title> 7 <script type="application/javascript" src="apz_test_native_event_utils.js"></script> 8 <script type="application/javascript" src="apz_test_utils.js"></script> 9 <script src="/tests/SimpleTest/paint_listener.js"></script> 10 <script type="text/javascript"> 11 12 13 async function test() { 14 let utils = SpecialPowers.getDOMWindowUtils(window); 15 let scroller = document.getElementById('scroller'); 16 let w = {}, h = {}; 17 utils.getScrollbarSizes(scroller, w, h); 18 let verticalScrollbarWidth = w.value; 19 if (verticalScrollbarWidth == 0) { 20 ok(false, "No scrollbar, test will fail"); 21 } 22 let downArrowHeight = verticalScrollbarWidth; // assume square scrollbar buttons 23 var mouseX = scroller.clientWidth + verticalScrollbarWidth / 2; 24 let mouseY = scroller.clientHeight - (downArrowHeight / 2); 25 26 let waitForScroll = waitForScrollEvent(scroller); 27 28 info("Synthesizing click at (" + mouseX + ", " + mouseY); 29 await promiseNativeMouseEventWithAPZ({ 30 type: "click", 31 target: scroller, 32 offsetX: mouseX, 33 offsetY: mouseY, 34 }); 35 36 await waitForScroll; 37 38 // Sanity-check: we should have scrolled. 39 ok(scroller.scrollTop > 0, "Should have scrolled by clicking the scrollbar button"); 40 41 let startPos = scroller.scrollTop; 42 43 info("scroller.scrollTop " + scroller.scrollTop); 44 45 // mouse move over the scrollbar button 46 await promiseNativeMouseEventWithAPZ({ 47 type: "mousemove", 48 target: scroller, 49 offsetX: mouseX, 50 offsetY: mouseY, 51 }); 52 // mouse down 53 await promiseNativeMouseEventWithAPZ({ 54 type: "mousedown", 55 target: scroller, 56 offsetX: mouseX, 57 offsetY: mouseY, 58 }); 59 60 info("sent mouse down"); 61 62 info("scroller.scrollTop " + scroller.scrollTop); 63 64 // mouse down on the scrollbar button and then wait until 65 // we scroll more 2x the distance of one click. 66 while ((scroller.scrollTop - startPos) < 2*startPos) { 67 let waitForScroll2 = waitForScrollEvent(scroller); 68 // Wait a bit 69 await SpecialPowers.promiseTimeout(50); 70 await waitForScroll2; 71 info("loop scroller.scrollTop " + scroller.scrollTop); 72 } 73 74 await promiseNativeMouseEventWithAPZ({ 75 type: "mouseup", 76 target: scroller, 77 offsetX: mouseX, 78 offsetY: mouseY, 79 }); 80 81 ok(true, "got enough scroll"); 82 } 83 84 waitUntilApzStable() 85 .then(test) 86 .then(subtestDone, subtestFailed); 87 88 </script> 89 <style> 90 .spacer { 91 background-color: #212121; 92 height: 9000vh; 93 } 94 </style> 95 </head> 96 <body> 97 <div id="scroller" style="overflow: auto; width: 200px; height: 200px;"> 98 <div class="spacer"></div> 99 </div> 100 </body> 101 </html>