test_bug946632.html (4926B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=946632 5 --> 6 <head> 7 <title>Test for bug 946632 - propagate mouse-wheel vertical scroll events to container</title> 8 <script src="/tests/SimpleTest/SimpleTest.js"></script> 9 <script src="/tests/SimpleTest/EventUtils.js"></script> 10 <script src="/tests/SimpleTest/paint_listener.js"></script> 11 <script type="application/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 overflow: scroll; 16 height: 200px; 17 width: 200px; 18 } 19 input { 20 font-size: 72px; 21 height: 20px; 22 width: 20px; 23 } 24 </style> 25 </head> 26 <body> 27 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=946632">Mozilla Bug 946632</a> 28 <p id="display"></p> 29 <div id="container" class="scrollable"> 30 <input value="value"> 31 x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br> 32 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 33 </div> 34 <div id="content" style="display: none"> 35 36 </div> 37 <pre id="test"> 38 <script type="application/javascript"> 39 40 SimpleTest.waitForExplicitFinish(); 41 SimpleTest.waitForFocus(function() { 42 SpecialPowers.pushPrefEnv({ 43 "set":[["general.smoothScroll", false], 44 ["mousewheel.system_scroll_override.enabled", false], 45 ["test.events.async.enabled", true]] 46 }, runTests) 47 }, window); 48 49 var input = document.querySelector("input"); 50 var container = document.querySelector("#container"); 51 52 function reset() 53 { 54 container.scrollTop = 0; 55 container.scrollLeft = 0; 56 input.scrollTop = 0; 57 input.scrollLeft = 0; 58 container.style.display='none'; 59 container.getBoundingClientRect(); 60 } 61 62 function prepare(check) 63 { 64 return new Promise(resolve => { 65 container.style.display=''; 66 container.getBoundingClientRect(); 67 scrollHandler = function(event) { 68 window.removeEventListener("scroll", arguments.callee, true); 69 event.stopPropagation(); 70 check(event) 71 resolve(); 72 }; 73 window.addEventListener("scroll", scrollHandler, true); 74 }); 75 } 76 77 var tests = [ 78 { 79 check(event) { 80 is(event.target, container, "<input> vertical line scroll targets container"); 81 ok(container.scrollTop > 0, "<input> vertical line scroll container.scrollTop"); 82 is(container.scrollLeft, 0, "<input> vertical line scroll container.scrollLeft"); 83 is(input.scrollTop, 0, "<input> horizontal line scroll input.scrollTop"); 84 is(input.scrollLeft, 0, "<input> horizontal line scroll input.scrollLeft"); 85 }, 86 event: { 87 deltaMode: WheelEvent.DOM_DELTA_LINE, 88 deltaY: 1.0, 89 lineOrPageDeltaY: 1, 90 } 91 }, 92 { 93 check(event) { 94 is(event.target, input, "<input> horizontal line scroll targets <input>"); 95 is(input.scrollTop, 0, "<input> horizontal line scroll input.scrollTop"); 96 ok(input.scrollLeft > 0, "<input> horizontal line scroll input.scrollLeft"); 97 is(container.scrollTop, 0, "<input> horizontal line scroll container.scrollTop"); 98 is(container.scrollLeft, 0, "<input> horizontal line scroll container.scrollLeft"); 99 }, 100 event: { 101 deltaMode: WheelEvent.DOM_DELTA_LINE, 102 deltaX: 1.0, 103 lineOrPageDeltaX: 1 104 } 105 }, 106 { 107 check(event) { 108 is(event.target, container, "<input> vertical page scroll targets container"); 109 ok(container.scrollTop > 0, "<input> vertical line scroll container.scrollTop"); 110 is(container.scrollLeft, 0, "<input> vertical line scroll container.scrollLeft"); 111 is(input.scrollTop, 0, "<input> vertical page scroll input.scrollTop"); 112 is(input.scrollLeft, 0, "<input> vertical page scroll input.scrollLeft"); 113 }, 114 event: { 115 deltaMode: WheelEvent.DOM_DELTA_PAGE, 116 deltaY: 1.0, 117 lineOrPageDeltaY: 1 118 } 119 }, 120 { 121 check(event) { 122 is(event.target, input, "<input> horizontal page scroll targets <input>"); 123 is(input.scrollTop, 0, "<input> horizontal page scroll input.scrollTop"); 124 ok(input.scrollLeft > 0, "<input> horizontal page scroll input.scrollLeft"); 125 is(container.scrollTop, 0, "<input> horizontal page scroll container.scrollTop"); 126 is(container.scrollLeft, 0, "<input> horizontal page scroll container.scrollLeft"); 127 }, 128 event: { 129 deltaMode: WheelEvent.DOM_DELTA_PAGE, 130 deltaX: 1.0, 131 lineOrPageDeltaX: 1 132 } 133 }, 134 ]; 135 136 async function runTests() 137 { 138 for (var i = 0; i < tests.length; i++) { 139 var test = tests[i]; 140 reset(); 141 await promiseApzFlushedRepaints(); 142 let testEndPromise = prepare(test.check); 143 await new Promise(resolve => { 144 sendWheelAndPaint(input, 8, 6, test.event, resolve); 145 }); 146 await testEndPromise; 147 } 148 149 SpecialPowers.DOMWindowUtils.restoreNormalRefresh(); 150 SimpleTest.finish(); 151 } 152 153 </script> 154 </pre> 155 </body> 156 </html>