test_bug1303704.html (3831B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=1303704 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <title>Test for Bug 1303704</title> 9 <script src="/tests/SimpleTest/SimpleTest.js"></script> 10 <script src="/tests/SimpleTest/EventUtils.js"></script> 11 <script type="text/javascript" src="/tests/gfx/layers/apz/test/mochitest/apz_test_utils.js"></script> 12 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 13 <style> 14 #scrollable { 15 height: 80px; 16 width: 200px; 17 overflow-y: scroll; 18 margin-bottom: 50px; 19 scroll-behavior: auto; 20 } 21 </style> 22 </head> 23 <body> 24 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1303704">Mozilla Bug 1303704</a> 25 <p id="display"></p> 26 <a id="link1" href="http://www.google.com">Link 1</a> 27 <div id="scrollable"> 28 <pre> 29 scroll 30 scroll 31 scroll 32 scroll 33 scroll 34 scroll 35 scroll 36 scroll 37 scroll 38 scroll 39 scroll 40 scroll 41 scroll 42 scroll 43 scroll 44 scroll 45 scroll 46 scroll 47 scroll 48 scroll 49 </pre> 50 </div> 51 <script type="text/javascript"> 52 53 /** Test for Bug 1303704 */ 54 SimpleTest.waitForExplicitFinish(); 55 56 function runTests() { 57 let link1 = window.document.getElementById("link1"); 58 let mouseEvents = ["mousedown", "mouseup", "mousemove"]; 59 60 link1.addEventListener("pointerdown", (e) => { 61 e.preventDefault(); 62 is(e.defaultPrevented, true, "defaultPrevented should be true"); 63 }); 64 65 mouseEvents.forEach((elm, index, arr) => { 66 link1.addEventListener(elm, () => { 67 ok(false, "Should not receive " + elm + " after preventDefault on pointerdown"); 68 }); 69 }); 70 71 link1.addEventListener("click", (e) => { 72 e.preventDefault(); 73 }); 74 75 synthesizeMouseAtCenter(link1, { type: "mousedown", 76 inputSource: MouseEvent.MOZ_SOURCE_MOUSE }); 77 synthesizeMouseAtCenter(link1, { type: "mousemove", 78 inputSource: MouseEvent.MOZ_SOURCE_MOUSE }); 79 synthesizeMouseAtCenter(link1, { type: "mouseup", 80 inputSource: MouseEvent.MOZ_SOURCE_MOUSE }); 81 82 if (navigator.userAgent.includes("Android") || 83 navigator.userAgent.includes("Mac") || 84 SpecialPowers.Cc["@mozilla.org/gfx/info;1"]. 85 getService(SpecialPowers.Ci.nsIGfxInfo).isHeadless) { 86 SimpleTest.finish(); 87 return; 88 } 89 90 async function scrollTest() { 91 var scrollable = document.getElementById("scrollable"); 92 scrollable.addEventListener('pointerdown', function(ev) { 93 ev.preventDefault(); 94 }, true); 95 var rect = scrollable.getBoundingClientRect(); 96 var offsetX = rect.width - 5; 97 var offsetY = rect.height - 5; 98 synthesizeMouse(scrollable, offsetX, offsetY, 99 { type: "mousedown", 100 inputSource: MouseEvent.MOZ_SOURCE_MOUSE }); 101 102 synthesizeMouse(scrollable, offsetX, offsetY, 103 { type: "mousemove", 104 inputSource: MouseEvent.MOZ_SOURCE_MOUSE }); 105 106 synthesizeMouse(scrollable, offsetX, offsetY, 107 { type: "mouseup", 108 inputSource: MouseEvent.MOZ_SOURCE_MOUSE }); 109 110 await waitToClearOutAnyPotentialScrolls(window); 111 112 if (scrollable.scrollTop != 0) { 113 isnot(scrollable.scrollTop, 0, 114 "Scrollable element should have been scrolled."); 115 SimpleTest.finish(); 116 } else { 117 setTimeout(scrollTest); 118 } 119 } 120 121 setTimeout(() => { 122 var scrollable = document.getElementById("scrollable"); 123 is(scrollable.scrollTop, 0, 124 "Scrollable element shouldn't be scrolled initially"); 125 scrollTest(); 126 }); 127 } 128 129 SimpleTest.waitForFocus(() => { 130 SpecialPowers.pushPrefEnv({"set": [["general.smoothScroll", false]]}, runTests); 131 }); 132 133 </script> 134 </body> 135 </html>