1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/events/test/window_wheel_default_action.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,1826 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<head> 1.7 + <title>Test for default action of WheelEvent</title> 1.8 + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.9 + <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script> 1.10 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 1.11 +</head> 1.12 +<body> 1.13 +<p id="display"></p> 1.14 +<div id="scrollable" style="overflow: auto; width: 200px; height: 200px;"> 1.15 + <div id="clipper" style="margin: 0; padding: 0; overflow: hidden; width: 3000px; height: 3000px;"> 1.16 + <div id="scrolled" style="width: 5000px; height: 5000px;"> 1.17 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.18 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.19 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.20 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.21 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.22 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.23 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.24 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.25 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.26 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.27 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.28 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.29 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.30 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.31 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.32 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.33 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.34 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.35 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.36 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.37 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.38 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.39 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.40 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.41 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.42 + Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text. Tere is a lot of text.<br> 1.43 + </div> 1.44 + </div> 1.45 +</div> 1.46 +<div id="spacerForBody"></div> 1.47 +<div id="content" style="display: none"> 1.48 + 1.49 +</div> 1.50 +<pre id="test"> 1.51 +<script type="application/javascript"> 1.52 + 1.53 +SimpleTest.waitForFocus(runTests, window); 1.54 + 1.55 +var winUtils = SpecialPowers.getDOMWindowUtils(window); 1.56 +// grab refresh driver 1.57 +winUtils.advanceTimeAndRefresh(100); 1.58 + 1.59 +var gScrollableElement = document.getElementById("scrollable"); 1.60 +var gScrolledElement = document.getElementById("scrolled"); 1.61 +var gSpacerForBodyElement = document.getElementById("spacerForBody"); 1.62 + 1.63 +function is() 1.64 +{ 1.65 + window.opener.is.apply(window.opener, arguments); 1.66 +} 1.67 + 1.68 +function ok() 1.69 +{ 1.70 + window.opener.ok.apply(window.opener, arguments); 1.71 +} 1.72 + 1.73 +function hitEventLoop(aFunc, aTimes) 1.74 +{ 1.75 + winUtils.advanceTimeAndRefresh(100); 1.76 + 1.77 + if (--aTimes) { 1.78 + setTimeout(hitEventLoop, 0, aFunc, aTimes); 1.79 + } else { 1.80 + setTimeout(aFunc, 20); 1.81 + } 1.82 +} 1.83 + 1.84 +function onZoomReset(aCallback) { 1.85 + var topic = "browser-fullZoom:zoomReset"; 1.86 + SpecialPowers.addObserver(function observe() { 1.87 + SpecialPowers.removeObserver(observe, topic); 1.88 + SimpleTest.executeSoon(aCallback); 1.89 + }, topic, false); 1.90 +} 1.91 + 1.92 +function setDeltaMultiplierSettings(aSettings) 1.93 +{ 1.94 + SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_x", aSettings.deltaMultiplierX * 100); 1.95 + SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_y", aSettings.deltaMultiplierY * 100); 1.96 + SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); 1.97 + SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_x", aSettings.deltaMultiplierX * 100); 1.98 + SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_y", aSettings.deltaMultiplierY * 100); 1.99 + SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); 1.100 + SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_x", aSettings.deltaMultiplierX * 100); 1.101 + SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_y", aSettings.deltaMultiplierY * 100); 1.102 + SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); 1.103 + SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_x", aSettings.deltaMultiplierX * 100); 1.104 + SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_y", aSettings.deltaMultiplierY * 100); 1.105 + SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); 1.106 + SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_x", aSettings.deltaMultiplierX * 100); 1.107 + SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_y", aSettings.deltaMultiplierY * 100); 1.108 + SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); 1.109 + SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_x", aSettings.deltaMultiplierX * 100); 1.110 + SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_y", aSettings.deltaMultiplierY * 100); 1.111 + SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); 1.112 +} 1.113 + 1.114 +function doTestScroll(aSettings, aCallback) 1.115 +{ 1.116 + const kNoScroll = 0x00; 1.117 + const kScrollUp = 0x01; 1.118 + const kScrollDown = 0x02; 1.119 + const kScrollLeft = 0x04; 1.120 + const kScrollRight = 0x08; 1.121 + 1.122 + const kTests = [ 1.123 + { description: "Scroll to bottom by pixel scroll even if lineOrPageDelta is 0", 1.124 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.125 + deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, 1.126 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.127 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.128 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.129 + expected: kScrollDown }, 1.130 + { description: "Scroll to bottom by pixel scroll when lineOrPageDelta is 1", 1.131 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.132 + deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, 1.133 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: false, 1.134 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.135 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.136 + expected: kScrollDown }, 1.137 + { description: "Scroll to top by pixel scroll even if lineOrPageDelta is 0", 1.138 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.139 + deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, 1.140 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.141 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.142 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.143 + expected: kScrollUp }, 1.144 + { description: "Scroll to top by pixel scroll when lineOrPageDelta is -1", 1.145 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.146 + deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, 1.147 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, isMomentum: false, 1.148 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.149 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.150 + expected: kScrollUp }, 1.151 + { description: "Scroll to right by pixel scroll even if lineOrPageDelta is 0", 1.152 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.153 + deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, 1.154 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.155 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.156 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.157 + expected: kScrollRight }, 1.158 + { description: "Scroll to right by pixel scroll when lineOrPageDelta is 1", 1.159 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.160 + deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, 1.161 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, isMomentum: false, 1.162 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.163 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.164 + expected: kScrollRight }, 1.165 + { description: "Scroll to left by pixel scroll even if lineOrPageDelta is 0", 1.166 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.167 + deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, 1.168 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.169 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.170 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.171 + expected: kScrollLeft }, 1.172 + { description: "Scroll to left by pixel scroll when lineOrPageDelta is -1", 1.173 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.174 + deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, 1.175 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, isMomentum: false, 1.176 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.177 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.178 + expected: kScrollLeft }, 1.179 + { description: "Scroll to bottom-right by pixel scroll", 1.180 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.181 + deltaX: 8.0, deltaY: 8.0, deltaZ: 0.0, 1.182 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.183 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.184 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.185 + expected: kScrollDown | kScrollRight }, 1.186 + { description: "Scroll to bottom-left by pixel scroll", 1.187 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.188 + deltaX: -8.0, deltaY: 8.0, deltaZ: 0.0, 1.189 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.190 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.191 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.192 + expected: kScrollDown | kScrollLeft }, 1.193 + { description: "Scroll to top-left by pixel scroll", 1.194 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.195 + deltaX: -8.0, deltaY: -8.0, deltaZ: 0.0, 1.196 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.197 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.198 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.199 + expected: kScrollUp | kScrollLeft }, 1.200 + { description: "Scroll to top-right by pixel scroll", 1.201 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.202 + deltaX: 8.0, deltaY: -8.0, deltaZ: 0.0, 1.203 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.204 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.205 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.206 + expected: kScrollUp | kScrollRight }, 1.207 + { description: "Not Scroll by pixel scroll for z", 1.208 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.209 + deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, 1.210 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.211 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.212 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.213 + expected: kNoScroll }, 1.214 + 1.215 + { description: "Scroll to bottom by line scroll even if lineOrPageDelta is 0", 1.216 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.217 + deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, 1.218 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: false, 1.219 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.220 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.221 + expected: kScrollDown }, 1.222 + { description: "Scroll to bottom by line scroll when lineOrPageDelta is 1", 1.223 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.224 + deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, 1.225 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: false, 1.226 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.227 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.228 + expected: kScrollDown }, 1.229 + { description: "Scroll to top by line scroll even if lineOrPageDelta is 0", 1.230 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.231 + deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, 1.232 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.233 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.234 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.235 + expected: kScrollUp }, 1.236 + { description: "Scroll to top by line scroll when lineOrPageDelta is -1", 1.237 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.238 + deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, 1.239 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, isMomentum: false, 1.240 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.241 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.242 + expected: kScrollUp }, 1.243 + { description: "Scroll to right by line scroll even if lineOrPageDelta is 0", 1.244 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.245 + deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, 1.246 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.247 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.248 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.249 + expected: kScrollRight }, 1.250 + { description: "Scroll to right by line scroll when lineOrPageDelta is 1", 1.251 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.252 + deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, 1.253 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, isMomentum: false, 1.254 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.255 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.256 + expected: kScrollRight }, 1.257 + { description: "Scroll to left by line scroll even if lineOrPageDelta is 0", 1.258 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.259 + deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, 1.260 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.261 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.262 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.263 + expected: kScrollLeft }, 1.264 + { description: "Scroll to left by line scroll when lineOrPageDelta is -1", 1.265 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.266 + deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, 1.267 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, isMomentum: false, 1.268 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.269 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.270 + expected: kScrollLeft }, 1.271 + { description: "Scroll to bottom-right by line scroll", 1.272 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.273 + deltaX: 0.5, deltaY: 0.5, deltaZ: 0.0, 1.274 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.275 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.276 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.277 + expected: kScrollDown | kScrollRight }, 1.278 + { description: "Scroll to bottom-left by line scroll", 1.279 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.280 + deltaX: -0.5, deltaY: 0.5, deltaZ: 0.0, 1.281 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.282 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.283 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.284 + expected: kScrollDown | kScrollLeft }, 1.285 + { description: "Scroll to top-left by line scroll", 1.286 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.287 + deltaX: -0.5, deltaY: -0.5, deltaZ: 0.0, 1.288 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.289 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.290 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.291 + expected: kScrollUp | kScrollLeft }, 1.292 + { description: "Scroll to top-right by line scroll", 1.293 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.294 + deltaX: 0.5, deltaY: -0.5, deltaZ: 0.0, 1.295 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.296 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.297 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.298 + expected: kScrollUp | kScrollRight }, 1.299 + { description: "Not Scroll by line scroll for z", 1.300 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.301 + deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, 1.302 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.303 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.304 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.305 + expected: kNoScroll }, 1.306 + 1.307 + { description: "Scroll to bottom by page scroll even if lineOrPageDelta is 0", 1.308 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.309 + deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, 1.310 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: false, 1.311 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.312 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.313 + expected: kScrollDown }, 1.314 + { description: "Scroll to bottom by page scroll when lineOrPageDelta is 1", 1.315 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.316 + deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, 1.317 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: false, 1.318 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.319 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.320 + expected: kScrollDown }, 1.321 + { description: "Scroll to top by page scroll even if lineOrPageDelta is 0", 1.322 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.323 + deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, 1.324 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.325 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.326 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.327 + expected: kScrollUp }, 1.328 + { description: "Scroll to top by page scroll when lineOrPageDelta is -1", 1.329 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.330 + deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, 1.331 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, isMomentum: false, 1.332 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.333 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.334 + expected: kScrollUp }, 1.335 + { description: "Scroll to right by page scroll even if lineOrPageDelta is 0", 1.336 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.337 + deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, 1.338 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.339 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.340 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.341 + expected: kScrollRight }, 1.342 + { description: "Scroll to right by page scroll when lineOrPageDelta is 1", 1.343 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.344 + deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, 1.345 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, isMomentum: false, 1.346 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.347 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.348 + expected: kScrollRight }, 1.349 + { description: "Scroll to left by page scroll even if lineOrPageDelta is 0", 1.350 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.351 + deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, 1.352 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.353 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.354 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.355 + expected: kScrollLeft }, 1.356 + { description: "Scroll to left by page scroll when lineOrPageDelta is -1", 1.357 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.358 + deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, 1.359 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, isMomentum: false, 1.360 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.361 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.362 + expected: kScrollLeft }, 1.363 + { description: "Scroll to bottom-right by page scroll", 1.364 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.365 + deltaX: 0.5, deltaY: 0.5, deltaZ: 0.0, 1.366 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.367 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.368 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.369 + expected: kScrollDown | kScrollRight }, 1.370 + { description: "Scroll to bottom-left by page scroll", 1.371 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.372 + deltaX: -0.5, deltaY: 0.5, deltaZ: 0.0, 1.373 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.374 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.375 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.376 + expected: kScrollDown | kScrollLeft }, 1.377 + { description: "Scroll to top-left by page scroll", 1.378 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.379 + deltaX: -0.5, deltaY: -0.5, deltaZ: 0.0, 1.380 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.381 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.382 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.383 + expected: kScrollUp | kScrollLeft }, 1.384 + { description: "Scroll to top-right by page scroll", 1.385 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.386 + deltaX: 0.5, deltaY: -0.5, deltaZ: 0.0, 1.387 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.388 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.389 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.390 + expected: kScrollUp | kScrollRight }, 1.391 + { description: "Not Scroll by page scroll for z", 1.392 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.393 + deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, 1.394 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, 1.395 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.396 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.397 + expected: kNoScroll }, 1.398 + 1.399 + // special cases. 1.400 + 1.401 + // momentum scroll should cause scroll even if the action is zoom, but if the default action is none, 1.402 + // shouldn't do it. 1.403 + { description: "Scroll to bottom by momentum pixel scroll when lineOrPageDelta is 0, even if the action is zoom", 1.404 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.405 + deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, 1.406 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.407 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.408 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.409 + expected: kScrollDown }, 1.410 + { description: "Scroll to bottom by momentum pixel scroll when lineOrPageDelta is 1, even if the action is zoom", 1.411 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.412 + deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, 1.413 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: true, 1.414 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.415 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.416 + expected: kScrollDown }, 1.417 + { description: "Scroll to top by momentum pixel scroll when lineOrPageDelta is 0, even if the action is zoom", 1.418 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.419 + deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, 1.420 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.421 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.422 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.423 + expected: kScrollUp }, 1.424 + { description: "Scroll to top by momentum pixel scroll when lineOrPageDelta is -1, even if the action is zoom", 1.425 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.426 + deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, 1.427 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, isMomentum: true, 1.428 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.429 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.430 + expected: kScrollUp }, 1.431 + { description: "Scroll to right by momentum pixel scroll when lineOrPageDelta is 0, even if the action is zoom", 1.432 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.433 + deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, 1.434 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.435 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.436 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.437 + expected: kScrollRight }, 1.438 + { description: "Scroll to right by momentum pixel scroll when lineOrPageDelta is 1, even if the action is zoom", 1.439 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.440 + deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, 1.441 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, isMomentum: true, 1.442 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.443 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.444 + expected: kScrollRight }, 1.445 + { description: "Scroll to left by momentum pixel scroll when lineOrPageDelta is 0, even if the action is zoom", 1.446 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.447 + deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, 1.448 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.449 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.450 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.451 + expected: kScrollLeft }, 1.452 + { description: "Scroll to left by momentum pixel scroll when lineOrPageDelta is -1, even if the action is zoom", 1.453 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.454 + deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, 1.455 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, isMomentum: true, 1.456 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.457 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.458 + expected: kScrollLeft }, 1.459 + { description: "Scroll to bottom-right by momentum pixel scroll even if the action is zoom", 1.460 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.461 + deltaX: 8.0, deltaY: 8.0, deltaZ: 0.0, 1.462 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.463 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.464 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.465 + expected: kScrollDown | kScrollRight }, 1.466 + { description: "Scroll to bottom-left by momentum pixel scroll even if the action is zoom", 1.467 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.468 + deltaX: -8.0, deltaY: 8.0, deltaZ: 0.0, 1.469 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.470 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.471 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.472 + expected: kScrollDown | kScrollLeft }, 1.473 + { description: "Scroll to top-left by momentum pixel scroll even if the action is zoom", 1.474 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.475 + deltaX: -8.0, deltaY: -8.0, deltaZ: 0.0, 1.476 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.477 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.478 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.479 + expected: kScrollUp | kScrollLeft }, 1.480 + { description: "Scroll to top-right by momentum pixel scroll even if the action is zoom", 1.481 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.482 + deltaX: 8.0, deltaY: -8.0, deltaZ: 0.0, 1.483 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.484 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.485 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.486 + expected: kScrollUp | kScrollRight }, 1.487 + { description: "Not Scroll by momentum pixel scroll for z (action is zoom)", 1.488 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.489 + deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, 1.490 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.491 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.492 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.493 + expected: kNoScroll }, 1.494 + { description: "Not Scroll by momentum pixel scroll if default action is none (action is zoom)", 1.495 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.496 + deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, 1.497 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.498 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.499 + shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, 1.500 + expected: kNoScroll, 1.501 + prepare: function () { SpecialPowers.setIntPref("mousewheel.default.action", 0); }, 1.502 + cleanup: function () { SpecialPowers.setIntPref("mousewheel.default.action", 1); } }, 1.503 + 1.504 + // momentum scroll should cause scroll even if the action is history, but if the default action is none, 1.505 + // shouldn't do it. 1.506 + { description: "Scroll to bottom by momentum pixel scroll when lineOrPageDelta is 0, even if the action is history", 1.507 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.508 + deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, 1.509 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.510 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.511 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.512 + expected: kScrollDown }, 1.513 + { description: "Scroll to bottom by momentum pixel scroll when lineOrPageDelta is 1, even if the action is history", 1.514 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.515 + deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, 1.516 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: true, 1.517 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.518 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.519 + expected: kScrollDown }, 1.520 + { description: "Scroll to top by momentum pixel scroll when lineOrPageDelta is 0, even if the action is history", 1.521 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.522 + deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, 1.523 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.524 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.525 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.526 + expected: kScrollUp }, 1.527 + { description: "Scroll to top by momentum pixel scroll when lineOrPageDelta is -1, even if the action is history", 1.528 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.529 + deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, 1.530 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, isMomentum: true, 1.531 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.532 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.533 + expected: kScrollUp }, 1.534 + { description: "Scroll to right by momentum pixel scroll when lineOrPageDelta is 0, even if the action is history", 1.535 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.536 + deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, 1.537 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.538 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.539 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.540 + expected: kScrollRight }, 1.541 + { description: "Scroll to right by momentum pixel scroll when lineOrPageDelta is 1, even if the action is history", 1.542 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.543 + deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, 1.544 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, isMomentum: true, 1.545 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.546 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.547 + expected: kScrollRight }, 1.548 + { description: "Scroll to left by momentum pixel scroll when lineOrPageDelta is 0, even if the action is history", 1.549 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.550 + deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, 1.551 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.552 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.553 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.554 + expected: kScrollLeft }, 1.555 + { description: "Scroll to left by momentum pixel scroll when lineOrPageDelta is -1, even if the action is history", 1.556 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.557 + deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, 1.558 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, isMomentum: true, 1.559 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.560 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.561 + expected: kScrollLeft }, 1.562 + { description: "Scroll to bottom-right by momentum pixel scroll even if the action is history", 1.563 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.564 + deltaX: 8.0, deltaY: 8.0, deltaZ: 0.0, 1.565 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.566 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.567 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.568 + expected: kScrollDown | kScrollRight }, 1.569 + { description: "Scroll to bottom-left by momentum pixel scroll even if the action is history", 1.570 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.571 + deltaX: -8.0, deltaY: 8.0, deltaZ: 0.0, 1.572 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.573 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.574 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.575 + expected: kScrollDown | kScrollLeft }, 1.576 + { description: "Scroll to top-left by momentum pixel scroll even if the action is history", 1.577 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.578 + deltaX: -8.0, deltaY: -8.0, deltaZ: 0.0, 1.579 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.580 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.581 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.582 + expected: kScrollUp | kScrollLeft }, 1.583 + { description: "Scroll to top-right by momentum pixel scroll even if the action is history", 1.584 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.585 + deltaX: 8.0, deltaY: -8.0, deltaZ: 0.0, 1.586 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.587 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.588 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.589 + expected: kScrollUp | kScrollRight }, 1.590 + { description: "Not Scroll by momentum pixel scroll for z (action is history)", 1.591 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.592 + deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, 1.593 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.594 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.595 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.596 + expected: kNoScroll }, 1.597 + { description: "Not Scroll by momentum pixel scroll if default action is none (action is history)", 1.598 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.599 + deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, 1.600 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, 1.601 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.602 + shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.603 + expected: kNoScroll, 1.604 + prepare: function () { SpecialPowers.setIntPref("mousewheel.default.action", 0); }, 1.605 + cleanup: function () { SpecialPowers.setIntPref("mousewheel.default.action", 1); } }, 1.606 + 1.607 + // Don't scroll along axis whose overflow style is hidden. 1.608 + { description: "Scroll to only bottom by oblique pixel wheel event with overflow-x: hidden", 1.609 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.610 + deltaX: 16.0, deltaY: 16.0, deltaZ: 0.0, 1.611 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.612 + expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 0, 1.613 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.614 + expected: kScrollDown, 1.615 + prepare: function() { gScrollableElement.style.overflowX = "hidden"; } }, 1.616 + { description: "Scroll to only bottom by oblique line wheel event with overflow-x: hidden", 1.617 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.618 + deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, 1.619 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.620 + expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 0, 1.621 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.622 + expected: kScrollDown }, 1.623 + { description: "Scroll to only bottom by oblique page wheel event with overflow-x: hidden", 1.624 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.625 + deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, 1.626 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.627 + expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 0, 1.628 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.629 + expected: kScrollDown }, 1.630 + { description: "Scroll to only top by oblique pixel wheel event with overflow-x: hidden", 1.631 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.632 + deltaX: -16.0, deltaY: -16.0, deltaZ: 0.0, 1.633 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.634 + expectedOverflowDeltaX: -1, expectedOverflowDeltaY: 0, 1.635 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.636 + expected: kScrollUp }, 1.637 + { description: "Scroll to only top by oblique line wheel event with overflow-x: hidden", 1.638 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.639 + deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, 1.640 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.641 + expectedOverflowDeltaX: -1, expectedOverflowDeltaY: 0, 1.642 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.643 + expected: kScrollUp }, 1.644 + { description: "Scroll to only top by oblique page wheel event with overflow-x: hidden", 1.645 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.646 + deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, 1.647 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.648 + expectedOverflowDeltaX: -1, expectedOverflowDeltaY: 0, 1.649 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.650 + expected: kScrollUp, 1.651 + cleanup: function () { gScrollableElement.style.overflowX = "auto"; } }, 1.652 + { description: "Scroll to only right by oblique pixel wheel event with overflow-y: hidden", 1.653 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.654 + deltaX: 16.0, deltaY: 16.0, deltaZ: 0.0, 1.655 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.656 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 1, 1.657 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.658 + expected: kScrollRight, 1.659 + prepare: function() { gScrollableElement.style.overflowY = "hidden"; } }, 1.660 + { description: "Scroll to only right by oblique line wheel event with overflow-y: hidden", 1.661 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.662 + deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, 1.663 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.664 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 1, 1.665 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.666 + expected: kScrollRight }, 1.667 + { description: "Scroll to only right by oblique page wheel event with overflow-y: hidden", 1.668 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.669 + deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, 1.670 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.671 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 1, 1.672 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.673 + expected: kScrollRight }, 1.674 + { description: "Scroll to only left by oblique pixel wheel event with overflow-y: hidden", 1.675 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.676 + deltaX: -16.0, deltaY: -16.0, deltaZ: 0.0, 1.677 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.678 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: -1, 1.679 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.680 + expected: kScrollLeft }, 1.681 + { description: "Scroll to only top by oblique line wheel event with overflow-y: hidden", 1.682 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.683 + deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, 1.684 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.685 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: -1, 1.686 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.687 + expected: kScrollLeft }, 1.688 + { description: "Scroll to only top by oblique page wheel event with overflow-y: hidden", 1.689 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.690 + deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, 1.691 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.692 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: -1, 1.693 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.694 + expected: kScrollLeft, 1.695 + cleanup: function () { gScrollableElement.style.overflowY = "auto"; } }, 1.696 + { description: "Don't be scrolled by oblique pixel wheel event with overflow: hidden", 1.697 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.698 + deltaX: 16.0, deltaY: 16.0, deltaZ: 0.0, 1.699 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.700 + expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 1, 1.701 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.702 + expected: kNoScroll, 1.703 + prepare: function() { gScrollableElement.style.overflow = "hidden"; } }, 1.704 + { description: "Don't be scrolled by oblique line wheel event with overflow: hidden", 1.705 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.706 + deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, 1.707 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.708 + expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 1, 1.709 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.710 + expected: kNoScroll }, 1.711 + { description: "Don't be scrolled by oblique page wheel event with overflow: hidden", 1.712 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.713 + deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, 1.714 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.715 + expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 1, 1.716 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.717 + expected: kNoScroll }, 1.718 + { description: "Don't be scrolled by oblique pixel wheel event with overflow: hidden", 1.719 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.720 + deltaX: -16.0, deltaY: -16.0, deltaZ: 0.0, 1.721 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.722 + expectedOverflowDeltaX: -1, expectedOverflowDeltaY: -1, 1.723 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.724 + expected: kNoScroll }, 1.725 + { description: "Don't be scrolled by oblique line wheel event with overflow: hidden", 1.726 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.727 + deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, 1.728 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.729 + expectedOverflowDeltaX: -1, expectedOverflowDeltaY: -1, 1.730 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.731 + expected: kNoScroll }, 1.732 + { description: "Don't be scrolled by oblique page wheel event with overflow: hidden", 1.733 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.734 + deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, 1.735 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.736 + expectedOverflowDeltaX: -1, expectedOverflowDeltaY: -1, 1.737 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.738 + expected: kNoScroll, 1.739 + cleanup: function () { gScrollableElement.style.overflow = "auto"; } }, 1.740 + 1.741 + // Don't scroll along axis whose overflow style is hidden and overflow delta values should 1.742 + // be zero if there is ancestor scrollable element. 1.743 + { description: "Scroll to only bottom by oblique pixel wheel event with overflow-x: hidden (body is scrollable)", 1.744 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.745 + deltaX: 16.0, deltaY: 16.0, deltaZ: 0.0, 1.746 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.747 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.748 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.749 + expected: kScrollDown, 1.750 + prepare: function() { 1.751 + gScrollableElement.style.overflowX = "hidden"; 1.752 + gScrollableElement.style.position = "fixed"; 1.753 + gScrollableElement.style.top = "30px"; 1.754 + gScrollableElement.style.left = "30px"; 1.755 + // Make body element scrollable. 1.756 + gSpacerForBodyElement.style.width = "5000px"; 1.757 + gSpacerForBodyElement.style.height = "5000px"; 1.758 + document.documentElement.scrollTop = 500; 1.759 + document.documentElement.scrollLeft = 500; 1.760 + } }, 1.761 + { description: "Scroll to only bottom by oblique line wheel event with overflow-x: hidden (body is scrollable)", 1.762 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.763 + deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, 1.764 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.765 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.766 + expected: kScrollDown }, 1.767 + { description: "Scroll to only bottom by oblique page wheel event with overflow-x: hidden (body is scrollable)", 1.768 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.769 + deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, 1.770 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.771 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.772 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.773 + expected: kScrollDown }, 1.774 + { description: "Scroll to only top by oblique pixel wheel event with overflow-x: hidden (body is scrollable)", 1.775 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.776 + deltaX: -16.0, deltaY: -16.0, deltaZ: 0.0, 1.777 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.778 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.779 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.780 + expected: kScrollUp }, 1.781 + { description: "Scroll to only top by oblique line wheel event with overflow-x: hidden (body is scrollable)", 1.782 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.783 + deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, 1.784 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.785 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.786 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.787 + expected: kScrollUp }, 1.788 + { description: "Scroll to only top by oblique page wheel event with overflow-x: hidden (body is scrollable)", 1.789 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.790 + deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, 1.791 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.792 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.793 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.794 + expected: kScrollUp, 1.795 + cleanup: function () { gScrollableElement.style.overflowX = "auto"; } }, 1.796 + { description: "Scroll to only right by oblique pixel wheel event with overflow-y: hidden (body is scrollable)", 1.797 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.798 + deltaX: 16.0, deltaY: 16.0, deltaZ: 0.0, 1.799 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.800 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.801 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.802 + expected: kScrollRight, 1.803 + prepare: function() { gScrollableElement.style.overflowY = "hidden"; } }, 1.804 + { description: "Scroll to only right by oblique line wheel event with overflow-y: hidden (body is scrollable)", 1.805 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.806 + deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, 1.807 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.808 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.809 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.810 + expected: kScrollRight }, 1.811 + { description: "Scroll to only right by oblique page wheel event with overflow-y: hidden (body is scrollable)", 1.812 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.813 + deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, 1.814 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, 1.815 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.816 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.817 + expected: kScrollRight }, 1.818 + { description: "Scroll to only left by oblique pixel wheel event with overflow-y: hidden (body is scrollable)", 1.819 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.820 + deltaX: -16.0, deltaY: -16.0, deltaZ: 0.0, 1.821 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.822 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.823 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.824 + expected: kScrollLeft }, 1.825 + { description: "Scroll to only top by oblique line wheel event with overflow-y: hidden (body is scrollable)", 1.826 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.827 + deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, 1.828 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.829 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.830 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.831 + expected: kScrollLeft }, 1.832 + { description: "Scroll to only top by oblique page wheel event with overflow-y: hidden (body is scrollable)", 1.833 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.834 + deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, 1.835 + lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, 1.836 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, 1.837 + shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, 1.838 + expected: kScrollLeft, 1.839 + cleanup: function () { 1.840 + gScrollableElement.style.overflowY = "auto"; 1.841 + gScrollableElement.style.position = "static"; 1.842 + gSpacerForBodyElement.style.width = ""; 1.843 + gSpacerForBodyElement.style.height = ""; 1.844 + } }, 1.845 + ]; 1.846 + 1.847 + var description; 1.848 + 1.849 + var currentTestIndex = -1; 1.850 + var isXReverted = (aSettings.deltaMultiplierX < 0); 1.851 + var isYReverted = (aSettings.deltaMultiplierY < 0); 1.852 + 1.853 + function doNextTest() 1.854 + { 1.855 + if (++currentTestIndex >= kTests.length) { 1.856 + SimpleTest.executeSoon(aCallback); 1.857 + return; 1.858 + } 1.859 + 1.860 + gScrollableElement.scrollTop = 1000; 1.861 + gScrollableElement.scrollLeft = 1000; 1.862 + 1.863 + var currentTest = kTests[currentTestIndex]; 1.864 + description = "doTestScroll(aSettings=" + aSettings.description + "), " + currentTest.description + ": "; 1.865 + if (currentTest.prepare) { 1.866 + currentTest.prepare(); 1.867 + } 1.868 + 1.869 + synthesizeWheel(gScrollableElement, 10, 10, currentTest.event); 1.870 + 1.871 + hitEventLoop(function () { 1.872 + if (currentTest.expected == kNoScroll) { 1.873 + is(gScrollableElement.scrollTop, 1000, description + "scrolled vertical"); 1.874 + is(gScrollableElement.scrollLeft, 1000, description + "scrolled horizontal"); 1.875 + } else { 1.876 + var scrollUp = !isYReverted ? (currentTest.expected & kScrollUp) : 1.877 + (currentTest.expected & kScrollDown); 1.878 + var scrollDown = !isYReverted ? (currentTest.expected & kScrollDown) : 1.879 + (currentTest.expected & kScrollUp); 1.880 + if (scrollUp) { 1.881 + ok(gScrollableElement.scrollTop < 1000, description + "not scrolled up, got " + gScrollableElement.scrollTop); 1.882 + } else if (scrollDown) { 1.883 + ok(gScrollableElement.scrollTop > 1000, description + "not scrolled down, got " + gScrollableElement.scrollTop); 1.884 + } else { 1.885 + is(gScrollableElement.scrollTop, 1000, description + "scrolled vertical"); 1.886 + } 1.887 + var scrollLeft = !isXReverted ? (currentTest.expected & kScrollLeft) : 1.888 + (currentTest.expected & kScrollRight); 1.889 + var scrollRight = !isXReverted ? (currentTest.expected & kScrollRight) : 1.890 + (currentTest.expected & kScrollLeft); 1.891 + if (scrollLeft) { 1.892 + ok(gScrollableElement.scrollLeft < 1000, description + "not scrolled to left, got " + gScrollableElement.scrollLeft); 1.893 + } else if (scrollRight) { 1.894 + ok(gScrollableElement.scrollLeft > 1000, description + "not scrolled to right, got " + gScrollableElement.scrollLeft); 1.895 + } else { 1.896 + is(gScrollableElement.scrollLeft, 1000, description + "scrolled horizontal"); 1.897 + } 1.898 + } 1.899 + if (currentTest.cleanup) { 1.900 + currentTest.cleanup(); 1.901 + } 1.902 + winUtils.advanceTimeAndRefresh(100); 1.903 + doNextTest(); 1.904 + }, 10); 1.905 + } 1.906 + doNextTest(); 1.907 +} 1.908 + 1.909 +function doTestZoom(aSettings, aCallback) 1.910 +{ 1.911 + if ((aSettings.deltaMultiplierX != 1.0 && aSettings.deltaMultiplierX != -1.0) || 1.912 + (aSettings.deltaMultiplierY != 1.0 && aSettings.deltaMultiplierY != -1.0)) { 1.913 + todo(false, "doTestZoom doesn't support to test with aSettings=" + aSettings.description); 1.914 + SimpleTest.executeSoon(aCallback); 1.915 + return; 1.916 + } 1.917 + 1.918 + const kNone = 0x00; 1.919 + const kPositive = 0x01; 1.920 + const kNegative = 0x02; 1.921 + const kUseX = 0x10; 1.922 + const kUseY = 0x20; 1.923 + const kTests = [ 1.924 + { description: "by vertical/positive pixel event when its lineOrPageDeltaY is 0", 1.925 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.926 + deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, 1.927 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.928 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.929 + expected: kNone }, 1.930 + { description: "by vertical/positive pixel event when its lineOrPageDeltaY is 1", 1.931 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.932 + deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, 1.933 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, 1.934 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.935 + expected: kPositive | kUseY }, 1.936 + { description: "by vertical/negative pixel event when its lineOrPageDeltaY is 0", 1.937 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.938 + deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, 1.939 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.940 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.941 + expected: kNone }, 1.942 + { description: "by vertical/negative pixel event when its lineOrPageDeltaY is -1", 1.943 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.944 + deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, 1.945 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, 1.946 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.947 + expected: kNegative | kUseY }, 1.948 + { description: "by horizotal/positive pixel event when its lineOrPageDeltaX is 0", 1.949 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.950 + deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, 1.951 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.952 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.953 + expected: kNone }, 1.954 + { description: "by horizotal/positive pixel event when its lineOrPageDeltaX is 1", 1.955 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.956 + deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, 1.957 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, 1.958 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.959 + expected: kPositive | kUseX }, 1.960 + { description: "by horizotal/negative pixel event when its lineOrPageDeltaX is 0", 1.961 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.962 + deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, 1.963 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.964 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.965 + expected: kNone }, 1.966 + { description: "by horizotal/negative pixel event when its lineOrPageDeltaX is -1", 1.967 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.968 + deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, 1.969 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, 1.970 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.971 + expected: kNegative | kUseX }, 1.972 + { description: "by z pixel event", 1.973 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.974 + deltaX: 0.0, deltaY: 0.0, deltaZ: 16.0, 1.975 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.976 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.977 + expected: kNone }, 1.978 + 1.979 + { description: "by vertical/positive line event when its lineOrPageDeltaY is 0", 1.980 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.981 + deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, 1.982 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.983 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.984 + expected: kNone }, 1.985 + { description: "by vertical/positive line event when its lineOrPageDeltaY is 1", 1.986 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.987 + deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, 1.988 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, 1.989 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.990 + expected: kPositive | kUseY }, 1.991 + { description: "by vertical/negative line event when its lineOrPageDeltaY is 0", 1.992 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.993 + deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, 1.994 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.995 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.996 + expected: kNone }, 1.997 + { description: "by vertical/negative line event when its lineOrPageDeltaY is -1", 1.998 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.999 + deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, 1.1000 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, 1.1001 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1002 + expected: kNegative | kUseY }, 1.1003 + { description: "by horizotal/positive line event when its lineOrPageDeltaX is 0", 1.1004 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1005 + deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, 1.1006 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.1007 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1008 + expected: kNone }, 1.1009 + { description: "by horizotal/positive line event when its lineOrPageDeltaX is 1", 1.1010 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1011 + deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, 1.1012 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, 1.1013 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1014 + expected: kPositive | kUseX }, 1.1015 + { description: "by horizotal/negative line event when its lineOrPageDeltaX is 0", 1.1016 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1017 + deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, 1.1018 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.1019 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1020 + expected: kNone }, 1.1021 + { description: "by horizotal/negative line event when its lineOrPageDeltaX is -1", 1.1022 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1023 + deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, 1.1024 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, 1.1025 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1026 + expected: kNegative | kUseX }, 1.1027 + { description: "by z line event", 1.1028 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1029 + deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, 1.1030 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.1031 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1032 + expected: kNone }, 1.1033 + 1.1034 + { description: "by vertical/positive page event when its lineOrPageDeltaY is 0", 1.1035 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1036 + deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, 1.1037 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.1038 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1039 + expected: kNone }, 1.1040 + { description: "by vertical/positive page event when its lineOrPageDeltaY is 1", 1.1041 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1042 + deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, 1.1043 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, 1.1044 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1045 + expected: kPositive | kUseY }, 1.1046 + { description: "by vertical/negative page event when its lineOrPageDeltaY is 0", 1.1047 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1048 + deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, 1.1049 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.1050 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1051 + expected: kNone }, 1.1052 + { description: "by vertical/negative page event when its lineOrPageDeltaY is -1", 1.1053 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1054 + deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, 1.1055 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, 1.1056 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1057 + expected: kNegative | kUseY }, 1.1058 + { description: "by horizotal/positive page event when its lineOrPageDeltaX is 0", 1.1059 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1060 + deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, 1.1061 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.1062 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1063 + expected: kNone }, 1.1064 + { description: "by horizotal/positive page event when its lineOrPageDeltaX is 1", 1.1065 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1066 + deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, 1.1067 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, 1.1068 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1069 + expected: kPositive | kUseX }, 1.1070 + { description: "by horizotal/negative page event when its lineOrPageDeltaX is 0", 1.1071 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1072 + deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, 1.1073 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.1074 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1075 + expected: kNone }, 1.1076 + { description: "by horizotal/negative page event when its lineOrPageDeltaX is -1", 1.1077 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1078 + deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, 1.1079 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, 1.1080 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1081 + expected: kNegative | kUseX }, 1.1082 + { description: "by z page event", 1.1083 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1084 + deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, 1.1085 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, 1.1086 + expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, 1.1087 + expected: kNone }, 1.1088 + ]; 1.1089 + 1.1090 + var description, currentTest; 1.1091 + var currentTestIndex = -1; 1.1092 + var isXReverted = (aSettings.deltaMultiplierX < 0); 1.1093 + var isYReverted = (aSettings.deltaMultiplierY < 0); 1.1094 + 1.1095 + function doNextTest() 1.1096 + { 1.1097 + if (++currentTestIndex >= kTests.length) { 1.1098 + SimpleTest.executeSoon(aCallback); 1.1099 + return; 1.1100 + } 1.1101 + 1.1102 + gScrollableElement.scrollTop = 1000; 1.1103 + gScrollableElement.scrollLeft = 1000; 1.1104 + 1.1105 + currentTest = kTests[currentTestIndex]; 1.1106 + description = "doTestZoom(aSettings=" + aSettings.description + "), "; 1.1107 + if (currentTest.expected == kNone) { 1.1108 + description += "Shouldn't "; 1.1109 + } else { 1.1110 + description += "Should "; 1.1111 + } 1.1112 + description += "zoom " + currentTest.description + ": "; 1.1113 + 1.1114 + var event = currentTest.event; 1.1115 + event.ctrlKey = true; 1.1116 + synthesizeWheel(gScrollableElement, 10, 10, event); 1.1117 + 1.1118 + // NOTE: Zooming might change scrollTop and scrollLeft by rounding fraction. 1.1119 + // This test assume that zoom happens synchronously and scrolling 1.1120 + // happens asynchronously. 1.1121 + var scrollTop = gScrollableElement.scrollTop; 1.1122 + var scrollLeft = gScrollableElement.scrollLeft; 1.1123 + 1.1124 + hitEventLoop(function () { 1.1125 + is(gScrollableElement.scrollTop, scrollTop, description + "scrolled vertical"); 1.1126 + is(gScrollableElement.scrollLeft, scrollLeft, description + "scrolled horizontal"); 1.1127 + if (!(currentTest.expected & (kNegative | kPositive))) { 1.1128 + is(SpecialPowers.getFullZoom(window), 1.0, description + "zoomed"); 1.1129 + } else { 1.1130 + var isReverted = (currentTest.expected & kUseX) ? isXReverted : 1.1131 + (currentTest.expected & kUseY) ? isYReverted : false; 1.1132 + if ((!isReverted && (currentTest.expected & kNegative)) || 1.1133 + (isReverted && (currentTest.expected & kPositive))) { 1.1134 + ok(SpecialPowers.getFullZoom(window) > 1.0, 1.1135 + description + "not zoomed in, got " + SpecialPowers.getFullZoom(window)); 1.1136 + } else { 1.1137 + ok(SpecialPowers.getFullZoom(window) < 1.0, 1.1138 + description + "not zoomed out, got " + SpecialPowers.getFullZoom(window)); 1.1139 + } 1.1140 + } 1.1141 + 1.1142 + synthesizeKey("0", { accelKey: true }); 1.1143 + onZoomReset(function () { 1.1144 + hitEventLoop(doNextTest, 20); 1.1145 + }); 1.1146 + }, 20); 1.1147 + } 1.1148 + doNextTest(); 1.1149 +} 1.1150 + 1.1151 +function doTestZoomedScroll(aCallback) 1.1152 +{ 1.1153 + var zoom = 1.0; 1.1154 + function setFullZoom(aWindow, aZoom) 1.1155 + { 1.1156 + zoom = aZoom; 1.1157 + SpecialPowers.setFullZoom(aWindow, aZoom); 1.1158 + } 1.1159 + 1.1160 + function prepareTestZoomedPixelScroll() 1.1161 + { 1.1162 + // Reset zoom and store the scroll amount into the data. 1.1163 + synthesizeKey("0", { accelKey: true }); 1.1164 + zoom = 1.0; 1.1165 + onZoomReset(testZoomedPixelScroll); 1.1166 + } 1.1167 + 1.1168 + function testZoomedPixelScroll() 1.1169 + { 1.1170 + gScrollableElement.scrollTop = 1000; 1.1171 + gScrollableElement.scrollLeft = 1000; 1.1172 + // Ensure not to be in reflow. 1.1173 + hitEventLoop(function () { 1.1174 + function mousePixelScrollHandler(aEvent) 1.1175 + { 1.1176 + if (aEvent.axis == MouseScrollEvent.HORIZONTAL_AXIS) { 1.1177 + is(aEvent.detail, 16, 1.1178 + "doTestZoomedScroll: The detail of horizontal MozMousePixelScroll for pixel wheel event is wrong"); 1.1179 + } else if (aEvent.axis == MouseScrollEvent.VERTICAL_AXIS) { 1.1180 + is(aEvent.detail, 16, 1.1181 + "doTestZoomedScroll: The detail of vertical MozMousePixelScroll for pixel wheel event is wrong"); 1.1182 + } else { 1.1183 + ok(false, "doTestZoomedScroll: The axis of MozMousePixelScroll for pixel wheel event is invalid, got " + aEvent.axis); 1.1184 + } 1.1185 + } 1.1186 + function wheelHandler(aEvent) 1.1187 + { 1.1188 + is(aEvent.deltaX, 16.0 / zoom, 1.1189 + "doTestZoomedScroll: The deltaX of wheel for pixel is wrong"); 1.1190 + is(aEvent.deltaY, 16.0 / zoom, 1.1191 + "doTestZoomedScroll: The deltaY of wheel for pixel is wrong"); 1.1192 + } 1.1193 + window.addEventListener("MozMousePixelScroll", mousePixelScrollHandler, true); 1.1194 + window.addEventListener("wheel", wheelHandler, true); 1.1195 + synthesizeWheel(gScrollableElement, 10, 10, 1.1196 + { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.1197 + deltaX: 16.0, deltaY: 16.0, lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }); 1.1198 + // wait scrolled actually. 1.1199 + hitEventLoop(function () { 1.1200 + var scrolledX = gScrollableElement.scrollLeft; 1.1201 + var scrolledY = gScrollableElement.scrollTop; 1.1202 + ok(scrolledX > 1000, 1.1203 + "doTestZoomedScroll: scrolledX must be larger than 1000 for pixel wheel event, got " + scrolledX); 1.1204 + ok(scrolledY > 1000, 1.1205 + "doTestZoomedScroll: scrolledY must be larger than 1000 for pixel wheel event, got " + scrolledY); 1.1206 + 1.1207 + // Zoom 1.1208 + setFullZoom(window, 2.0); 1.1209 + // Ensure not to be in reflow. 1.1210 + hitEventLoop(function () { 1.1211 + gScrollableElement.scrollTop = 1000; 1.1212 + gScrollableElement.scrollLeft = 1000; 1.1213 + synthesizeWheel(gScrollableElement, 10, 10, 1.1214 + { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.1215 + deltaX: 16.0, deltaY: 16.0, lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }); 1.1216 + // wait scrolled actually. 1.1217 + hitEventLoop(function () { 1.1218 + ok(Math.abs(gScrollableElement.scrollLeft - (1000 + (scrolledX - 1000) / 2)) <= 1, 1.1219 + "doTestZoomedScroll: zoomed horizontal scroll amount by pixel wheel event is different from normal, scrollLeft=" + 1.1220 + gScrollableElement.scrollLeft + ", scrolledX=" + scrolledX); 1.1221 + ok(Math.abs(gScrollableElement.scrollTop - (1000 + (scrolledY - 1000) / 2)) <= 1, 1.1222 + "doTestZoomedScroll: zoomed vertical scroll amount by pixel wheel event is different from normal, scrollTop=" + 1.1223 + gScrollableElement.scrollTop + ", scrolledY=" + scrolledY); 1.1224 + window.removeEventListener("MozMousePixelScroll", mousePixelScrollHandler, true); 1.1225 + window.removeEventListener("wheel", wheelHandler, true); 1.1226 + 1.1227 + synthesizeKey("0", { accelKey: true }); 1.1228 + onZoomReset(prepareTestZoomedLineScroll); 1.1229 + }, 20); 1.1230 + }, 20); 1.1231 + }, 20); 1.1232 + }, 20); 1.1233 + } 1.1234 + 1.1235 + function prepareTestZoomedLineScroll() 1.1236 + { 1.1237 + // Reset zoom and store the scroll amount into the data. 1.1238 + synthesizeKey("0", { accelKey: true }); 1.1239 + zoom = 1.0; 1.1240 + onZoomReset(testZoomedLineScroll); 1.1241 + } 1.1242 + function testZoomedLineScroll() 1.1243 + { 1.1244 + gScrollableElement.scrollTop = 1000; 1.1245 + gScrollableElement.scrollLeft = 1000; 1.1246 + // Ensure not to be in reflow. 1.1247 + hitEventLoop(function () { 1.1248 + var lineHeightX, lineHeightY; 1.1249 + function handler(aEvent) 1.1250 + { 1.1251 + if (aEvent.axis == MouseScrollEvent.HORIZONTAL_AXIS) { 1.1252 + if (lineHeightX == undefined) { 1.1253 + lineHeightX = aEvent.detail; 1.1254 + } else { 1.1255 + ok(Math.abs(aEvent.detail - lineHeightX) <= 1, 1.1256 + "doTestZoomedScroll: The detail of horizontal MozMousePixelScroll for line wheel event is wrong, aEvent.detail=" + 1.1257 + aEvent.detail + ", lineHeightX=" + lineHeightX); 1.1258 + } 1.1259 + } else if (aEvent.axis == MouseScrollEvent.VERTICAL_AXIS) { 1.1260 + if (lineHeightY == undefined) { 1.1261 + lineHeightY = aEvent.detail; 1.1262 + } else { 1.1263 + ok(Math.abs(aEvent.detail - lineHeightY) <= 1, 1.1264 + "doTestZoomedScroll: The detail of vertical MozMousePixelScroll for line wheel event is wrong, aEvent.detail=" + 1.1265 + aEvent.detail + ", lineHeightY=" + lineHeightY); 1.1266 + } 1.1267 + } else { 1.1268 + ok(false, "doTestZoomedScroll: The axis of MozMousePixelScroll for line wheel event is invalid, got " + aEvent.axis); 1.1269 + } 1.1270 + } 1.1271 + window.addEventListener("MozMousePixelScroll", handler, true); 1.1272 + synthesizeWheel(gScrollableElement, 10, 10, 1.1273 + { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1274 + deltaX: 1.0, deltaY: 1.0, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }); 1.1275 + // wait scrolled actually. 1.1276 + hitEventLoop(function () { 1.1277 + var scrolledX = gScrollableElement.scrollLeft; 1.1278 + var scrolledY = gScrollableElement.scrollTop; 1.1279 + ok(scrolledX > 1000, 1.1280 + "doTestZoomedScroll: scrolledX must be larger than 1000 for line wheel event, got " + scrolledX); 1.1281 + ok(scrolledY > 1000, 1.1282 + "doTestZoomedScroll: scrolledY must be larger than 1000 for line wheel event, got " + scrolledY); 1.1283 + 1.1284 + // Zoom 1.1285 + setFullZoom(window, 2.0); 1.1286 + // Ensure not to be in reflow. 1.1287 + hitEventLoop(function () { 1.1288 + gScrollableElement.scrollTop = 1000; 1.1289 + gScrollableElement.scrollLeft = 1000; 1.1290 + synthesizeWheel(gScrollableElement, 10, 10, 1.1291 + { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1292 + deltaX: 1.0, deltaY: 1.0, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }); 1.1293 + // wait scrolled actually. 1.1294 + hitEventLoop(function () { 1.1295 + ok(Math.abs(gScrollableElement.scrollLeft - scrolledX) <= 1, 1.1296 + "doTestZoomedScroll: zoomed horizontal scroll amount by line wheel event is different from normal, scrollLeft=" + 1.1297 + gScrollableElement.scrollLeft + ", scrolledX=" + scrolledX); 1.1298 + ok(Math.abs(gScrollableElement.scrollTop - scrolledY) <= 1, 1.1299 + "doTestZoomedScroll: zoomed vertical scroll amount by line wheel event is different from normal, scrollTop=" + 1.1300 + gScrollableElement.scrollTop + ", scrolledY=" + scrolledY); 1.1301 + 1.1302 + window.removeEventListener("MozMousePixelScroll", handler, true); 1.1303 + 1.1304 + synthesizeKey("0", { accelKey: true }); 1.1305 + onZoomReset(aCallback); 1.1306 + }, 20); 1.1307 + }, 20); 1.1308 + }, 20); 1.1309 + }, 20); 1.1310 + } 1.1311 + 1.1312 + // XXX It's too difficult to test page scroll because the page scroll amount 1.1313 + // is computed by complex logic. 1.1314 + 1.1315 + prepareTestZoomedPixelScroll(); 1.1316 +} 1.1317 + 1.1318 +function doTestWholeScroll(aCallback) 1.1319 +{ 1.1320 + SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_x", 99999999); 1.1321 + SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_y", 99999999); 1.1322 + 1.1323 + const kTests = [ 1.1324 + { description: "try whole-scroll to top (line)", 1.1325 + prepare: function () { 1.1326 + gScrollableElement.scrollTop = 1000; 1.1327 + gScrollableElement.scrollLeft = 1000; 1.1328 + }, 1.1329 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1330 + deltaX: 0.0, deltaY: -1.0, 1.1331 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1 }, 1.1332 + expectedScrollTop: 0, 1.1333 + expectedScrollLeft: 1000 1.1334 + }, 1.1335 + { description: "try whole-scroll to top when scrollTop is already top-most (line)", 1.1336 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1337 + deltaX: 0.0, deltaY: -1.0, 1.1338 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1 }, 1.1339 + expectedScrollTop: 0, 1.1340 + expectedScrollLeft: 1000 1.1341 + }, 1.1342 + { description: "try whole-scroll to bottom (line)", 1.1343 + prepare: function () { 1.1344 + gScrollableElement.scrollTop = 1000; 1.1345 + gScrollableElement.scrollLeft = 1000; 1.1346 + }, 1.1347 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1348 + deltaX: 0.0, deltaY: 1.0, 1.1349 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1 }, 1.1350 + expectedScrollTop: gScrollableElement.scrollTopMax, 1.1351 + expectedScrollLeft: 1000 1.1352 + }, 1.1353 + { description: "try whole-scroll to bottom when scrollTop is already bottom-most (line)", 1.1354 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1355 + deltaX: 0, deltaY: 1.0, 1.1356 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1 }, 1.1357 + expectedScrollTop: gScrollableElement.scrollTopMax, 1.1358 + expectedScrollLeft: 1000 1.1359 + }, 1.1360 + { description: "try whole-scroll to left (line)", 1.1361 + prepare: function () { 1.1362 + gScrollableElement.scrollTop = 1000; 1.1363 + gScrollableElement.scrollLeft = 1000; 1.1364 + }, 1.1365 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1366 + deltaX: -1.0, deltaY: 0.0, 1.1367 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0 }, 1.1368 + expectedScrollTop: 1000, 1.1369 + expectedScrollLeft: 0 1.1370 + }, 1.1371 + { description: "try whole-scroll to left when scrollLeft is already left-most (line)", 1.1372 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1373 + deltaX: -1.0, deltaY: 0, 1.1374 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0 }, 1.1375 + expectedScrollTop: 1000, 1.1376 + expectedScrollLeft: 0 1.1377 + }, 1.1378 + { description: "try whole-scroll to right (line)", 1.1379 + prepare: function () { 1.1380 + gScrollableElement.scrollTop = 1000; 1.1381 + gScrollableElement.scrollLeft = 1000; 1.1382 + }, 1.1383 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1384 + deltaX: 1.0, deltaY: 0.0, 1.1385 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0 }, 1.1386 + expectedScrollTop: 1000, 1.1387 + expectedScrollLeft: gScrollableElement.scrollLeftMax 1.1388 + }, 1.1389 + { description: "try whole-scroll to right when scrollLeft is already right-most (line)", 1.1390 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1391 + deltaX: 1.0, deltaY: 0.0, 1.1392 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0 }, 1.1393 + expectedScrollTop: 1000, 1.1394 + expectedScrollLeft: gScrollableElement.scrollLeftMax 1.1395 + }, 1.1396 + 1.1397 + 1.1398 + { description: "try whole-scroll to top (pixel)", 1.1399 + prepare: function () { 1.1400 + gScrollableElement.scrollTop = 1000; 1.1401 + gScrollableElement.scrollLeft = 1000; 1.1402 + }, 1.1403 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.1404 + deltaX: 0.0, deltaY: -1.0, 1.1405 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, 1.1406 + expectedScrollTop: 0, 1.1407 + expectedScrollLeft: 1000 1.1408 + }, 1.1409 + { description: "try whole-scroll to top when scrollTop is already top-most (pixel)", 1.1410 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.1411 + deltaX: 0.0, deltaY: -1.0, 1.1412 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, 1.1413 + expectedScrollTop: 0, 1.1414 + expectedScrollLeft: 1000 1.1415 + }, 1.1416 + { description: "try whole-scroll to bottom (pixel)", 1.1417 + prepare: function () { 1.1418 + gScrollableElement.scrollTop = 1000; 1.1419 + gScrollableElement.scrollLeft = 1000; 1.1420 + }, 1.1421 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.1422 + deltaX: 0.0, deltaY: 1.0, 1.1423 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, 1.1424 + expectedScrollTop: gScrollableElement.scrollTopMax, 1.1425 + expectedScrollLeft: 1000 1.1426 + }, 1.1427 + { description: "try whole-scroll to bottom when scrollTop is already bottom-most (pixel)", 1.1428 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.1429 + deltaX: 0, deltaY: 1.0, 1.1430 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, 1.1431 + expectedScrollTop: gScrollableElement.scrollTopMax, 1.1432 + expectedScrollLeft: 1000 1.1433 + }, 1.1434 + { description: "try whole-scroll to left (pixel)", 1.1435 + prepare: function () { 1.1436 + gScrollableElement.scrollTop = 1000; 1.1437 + gScrollableElement.scrollLeft = 1000; 1.1438 + }, 1.1439 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.1440 + deltaX: -1.0, deltaY: 0.0, 1.1441 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, 1.1442 + expectedScrollTop: 1000, 1.1443 + expectedScrollLeft: 0 1.1444 + }, 1.1445 + { description: "try whole-scroll to left when scrollLeft is already left-most (pixel)", 1.1446 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.1447 + deltaX: -1.0, deltaY: 0, 1.1448 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, 1.1449 + expectedScrollTop: 1000, 1.1450 + expectedScrollLeft: 0 1.1451 + }, 1.1452 + { description: "try whole-scroll to right (pixel)", 1.1453 + prepare: function () { 1.1454 + gScrollableElement.scrollTop = 1000; 1.1455 + gScrollableElement.scrollLeft = 1000; 1.1456 + }, 1.1457 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.1458 + deltaX: 1.0, deltaY: 0.0, 1.1459 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, 1.1460 + expectedScrollTop: 1000, 1.1461 + expectedScrollLeft: gScrollableElement.scrollLeftMax 1.1462 + }, 1.1463 + { description: "try whole-scroll to right when scrollLeft is already right-most (pixel)", 1.1464 + event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, 1.1465 + deltaX: 1.0, deltaY: 0.0, 1.1466 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, 1.1467 + expectedScrollTop: 1000, 1.1468 + expectedScrollLeft: gScrollableElement.scrollLeftMax 1.1469 + }, 1.1470 + 1.1471 + 1.1472 + { description: "try whole-scroll to top (page)", 1.1473 + prepare: function () { 1.1474 + gScrollableElement.scrollTop = 1000; 1.1475 + gScrollableElement.scrollLeft = 1000; 1.1476 + }, 1.1477 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1478 + deltaX: 0.0, deltaY: -1.0, 1.1479 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1 }, 1.1480 + expectedScrollTop: 0, 1.1481 + expectedScrollLeft: 1000 1.1482 + }, 1.1483 + { description: "try whole-scroll to top when scrollTop is already top-most (page)", 1.1484 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1485 + deltaX: 0.0, deltaY: -1.0, 1.1486 + lineOrPageDeltaX: 0, lineOrPageDeltaY: -1 }, 1.1487 + expectedScrollTop: 0, 1.1488 + expectedScrollLeft: 1000 1.1489 + }, 1.1490 + { description: "try whole-scroll to bottom (page)", 1.1491 + prepare: function () { 1.1492 + gScrollableElement.scrollTop = 1000; 1.1493 + gScrollableElement.scrollLeft = 1000; 1.1494 + }, 1.1495 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1496 + deltaX: 0.0, deltaY: 1.0, 1.1497 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1 }, 1.1498 + expectedScrollTop: gScrollableElement.scrollTopMax, 1.1499 + expectedScrollLeft: 1000 1.1500 + }, 1.1501 + { description: "try whole-scroll to bottom when scrollTop is already bottom-most (page)", 1.1502 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1503 + deltaX: 0, deltaY: 1.0, 1.1504 + lineOrPageDeltaX: 0, lineOrPageDeltaY: 1 }, 1.1505 + expectedScrollTop: gScrollableElement.scrollTopMax, 1.1506 + expectedScrollLeft: 1000 1.1507 + }, 1.1508 + { description: "try whole-scroll to left (page)", 1.1509 + prepare: function () { 1.1510 + gScrollableElement.scrollTop = 1000; 1.1511 + gScrollableElement.scrollLeft = 1000; 1.1512 + }, 1.1513 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1514 + deltaX: -1.0, deltaY: 0.0, 1.1515 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0 }, 1.1516 + expectedScrollTop: 1000, 1.1517 + expectedScrollLeft: 0 1.1518 + }, 1.1519 + { description: "try whole-scroll to left when scrollLeft is already left-most (page)", 1.1520 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1521 + deltaX: -1.0, deltaY: 0, 1.1522 + lineOrPageDeltaX: -1, lineOrPageDeltaY: 0 }, 1.1523 + expectedScrollTop: 1000, 1.1524 + expectedScrollLeft: 0 1.1525 + }, 1.1526 + { description: "try whole-scroll to right (page)", 1.1527 + prepare: function () { 1.1528 + gScrollableElement.scrollTop = 1000; 1.1529 + gScrollableElement.scrollLeft = 1000; 1.1530 + }, 1.1531 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1532 + deltaX: 1.0, deltaY: 0.0, 1.1533 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0 }, 1.1534 + expectedScrollTop: 1000, 1.1535 + expectedScrollLeft: gScrollableElement.scrollLeftMax 1.1536 + }, 1.1537 + { description: "try whole-scroll to right when scrollLeft is already right-most (page)", 1.1538 + event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, 1.1539 + deltaX: 1.0, deltaY: 0.0, 1.1540 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 0 }, 1.1541 + expectedScrollTop: 1000, 1.1542 + expectedScrollLeft: gScrollableElement.scrollLeftMax 1.1543 + }, 1.1544 + ]; 1.1545 + 1.1546 + var index = 0; 1.1547 + 1.1548 + function doIt() 1.1549 + { 1.1550 + const kTest = kTests[index]; 1.1551 + if (kTest.prepare) { 1.1552 + kTest.prepare(); 1.1553 + } 1.1554 + synthesizeWheel(gScrollableElement, 10, 10, kTest.event); 1.1555 + hitEventLoop(function () { 1.1556 + is(gScrollableElement.scrollTop, kTest.expectedScrollTop, 1.1557 + "doTestWholeScroll, " + kTest.description + ": unexpected scrollTop"); 1.1558 + is(gScrollableElement.scrollLeft, kTest.expectedScrollLeft, 1.1559 + "doTestWholeScroll, " + kTest.description + ": unexpected scrollLeft"); 1.1560 + if (++index == kTests.length) { 1.1561 + SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_x"); 1.1562 + SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_y"); 1.1563 + SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_z"); 1.1564 + SimpleTest.executeSoon(aCallback); 1.1565 + } else { 1.1566 + doIt(); 1.1567 + } 1.1568 + }, 20); 1.1569 + } 1.1570 + doIt(); 1.1571 +} 1.1572 + 1.1573 +function doTestActionOverride(aCallback) 1.1574 +{ 1.1575 + const kNoScroll = 0x00; 1.1576 + const kScrollUp = 0x01; 1.1577 + const kScrollDown = 0x02; 1.1578 + const kScrollLeft = 0x04; 1.1579 + const kScrollRight = 0x08; 1.1580 + 1.1581 + const kTests = [ 1.1582 + { action: 1, override_x: -1, 1.1583 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1584 + deltaX: 1.0, deltaY: 1.0, 1.1585 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1586 + expected: kScrollDown | kScrollRight 1.1587 + }, 1.1588 + { action: 1, override_x: 0, 1.1589 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1590 + deltaX: 1.0, deltaY: 1.0, 1.1591 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1592 + expected: kScrollDown | kScrollRight 1.1593 + }, 1.1594 + { action: 1, override_x: 1, 1.1595 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1596 + deltaX: 1.0, deltaY: 1.0, 1.1597 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1598 + expected: kScrollDown | kScrollRight 1.1599 + }, 1.1600 + { action: 0, override_x: -1, 1.1601 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1602 + deltaX: 1.0, deltaY: 1.0, 1.1603 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1604 + expected: kNoScroll 1.1605 + }, 1.1606 + { action: 0, override_x: 0, 1.1607 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1608 + deltaX: 1.0, deltaY: 1.0, 1.1609 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1610 + expected: kNoScroll 1.1611 + }, 1.1612 + { action: 0, override_x: 1, 1.1613 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1614 + deltaX: 1.0, deltaY: 1.0, 1.1615 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1616 + expected: kNoScroll 1.1617 + }, 1.1618 + { action: 1, override_x: -1, 1.1619 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1620 + deltaX: 1.0, deltaY: 0.5, 1.1621 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1622 + expected: kScrollDown | kScrollRight 1.1623 + }, 1.1624 + { action: 1, override_x: 0, 1.1625 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1626 + deltaX: 1.0, deltaY: 0.5, 1.1627 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1628 + expected: kNoScroll 1.1629 + }, 1.1630 + { action: 1, override_x: 1, 1.1631 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1632 + deltaX: 1.0, deltaY: 0.5, 1.1633 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1634 + expected: kScrollDown | kScrollRight 1.1635 + }, 1.1636 + { action: 0, override_x: -1, 1.1637 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1638 + deltaX: 1.0, deltaY: 0.5, 1.1639 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1640 + expected: kNoScroll 1.1641 + }, 1.1642 + { action: 0, override_x: 0, 1.1643 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1644 + deltaX: 1.0, deltaY: 0.5, 1.1645 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1646 + expected: kNoScroll 1.1647 + }, 1.1648 + { action: 0, override_x: 1, 1.1649 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1650 + deltaX: 1.0, deltaY: 0.5, 1.1651 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1652 + expected: kScrollDown | kScrollRight 1.1653 + }, 1.1654 + { action: 1, override_x: -1, 1.1655 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1656 + deltaX: 0.5, deltaY: 1.0, 1.1657 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1658 + expected: kScrollDown | kScrollRight 1.1659 + }, 1.1660 + { action: 1, override_x: 0, 1.1661 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1662 + deltaX: 0.5, deltaY: 1.0, 1.1663 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1664 + expected: kScrollDown | kScrollRight 1.1665 + }, 1.1666 + { action: 1, override_x: 1, 1.1667 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1668 + deltaX: 0.5, deltaY: 1.0, 1.1669 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1670 + expected: kScrollDown | kScrollRight 1.1671 + }, 1.1672 + { action: 0, override_x: -1, 1.1673 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1674 + deltaX: 0.5, deltaY: 1.0, 1.1675 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1676 + expected: kNoScroll 1.1677 + }, 1.1678 + { action: 0, override_x: 0, 1.1679 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1680 + deltaX: 0.5, deltaY: 1.0, 1.1681 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1682 + expected: kNoScroll 1.1683 + }, 1.1684 + { action: 0, override_x: 1, 1.1685 + event: { deltaMode: WheelEvent.DOM_DELTA_LINE, 1.1686 + deltaX: 0.5, deltaY: 1.0, 1.1687 + lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, 1.1688 + expected: kNoScroll 1.1689 + }, 1.1690 + ]; 1.1691 + 1.1692 + var index = 0; 1.1693 + 1.1694 + function doIt() 1.1695 + { 1.1696 + const kTest = kTests[index]; 1.1697 + description = "doTestActionOverride(action=" + kTest.action + ", " + 1.1698 + "override_x=" + kTest.override_x + ", " + 1.1699 + "deltaX=" + kTest.event.deltaX + ", " + 1.1700 + "deltaY=" + kTest.event.deltaY + "): "; 1.1701 + SpecialPowers.setIntPref("mousewheel.default.action", kTest.action); 1.1702 + SpecialPowers.setIntPref("mousewheel.default.action.override_x", kTest.override_x); 1.1703 + gScrollableElement.scrollTop = 1000; 1.1704 + gScrollableElement.scrollLeft = 1000; 1.1705 + synthesizeWheel(gScrollableElement, 10, 10, kTest.event); 1.1706 + hitEventLoop(function () { 1.1707 + if (kTest.expected & kScrollUp) { 1.1708 + ok(gScrollableElement.scrollTop < 1000, description + "not scrolled up, got " + gScrollableElement.scrollTop); 1.1709 + } else if (kTest.expected & kScrollDown) { 1.1710 + ok(gScrollableElement.scrollTop > 1000, description + "not scrolled down, got " + gScrollableElement.scrollTop); 1.1711 + } else { 1.1712 + is(gScrollableElement.scrollTop, 1000, description + "scrolled vertical"); 1.1713 + } 1.1714 + if (kTest.expected & kScrollLeft) { 1.1715 + ok(gScrollableElement.scrollLeft < 1000, description + "not scrolled to left, got " + gScrollableElement.scrollLeft); 1.1716 + } else if (kTest.expected & kScrollRight) { 1.1717 + ok(gScrollableElement.scrollLeft > 1000, description + "not scrolled to right, got " + gScrollableElement.scrollLeft); 1.1718 + } else { 1.1719 + is(gScrollableElement.scrollLeft, 1000, description + "scrolled horizontal"); 1.1720 + } 1.1721 + if (++index == kTests.length) { 1.1722 + SpecialPowers.setIntPref("mousewheel.default.action", 1); 1.1723 + SpecialPowers.setIntPref("mousewheel.default.action.override_x", -1); 1.1724 + SimpleTest.executeSoon(aCallback); 1.1725 + } else { 1.1726 + doIt(); 1.1727 + } 1.1728 + }, 20); 1.1729 + } 1.1730 + doIt(); 1.1731 +} 1.1732 + 1.1733 +function runTests() 1.1734 +{ 1.1735 + SpecialPowers.setBoolPref("general.smoothScroll", false); 1.1736 + 1.1737 + SpecialPowers.setIntPref("mousewheel.default.action", 1); // scroll 1.1738 + SpecialPowers.setIntPref("mousewheel.default.action.override_x", -1); 1.1739 + SpecialPowers.setIntPref("mousewheel.with_shift.action", 2); // history 1.1740 + SpecialPowers.setIntPref("mousewheel.with_shift.action.override_x", -1); 1.1741 + SpecialPowers.setIntPref("mousewheel.with_control.action", 3); // zoom 1.1742 + SpecialPowers.setIntPref("mousewheel.with_control.action.override_x", -1); 1.1743 + 1.1744 + const kSettings = [ 1.1745 + { description: "all delta values are not customized", 1.1746 + deltaMultiplierX: 1.0, deltaMultiplierY: 1.0, deltaMultiplierZ: 1.0 }, 1.1747 + { description: "deltaX is reverted", 1.1748 + deltaMultiplierX: -1.0, deltaMultiplierY: 1.0, deltaMultiplierZ: 1.0 }, 1.1749 + { description: "deltaY is reverted", 1.1750 + deltaMultiplierX: 1.0, deltaMultiplierY: -1.0, deltaMultiplierZ: 1.0 }, 1.1751 + { description: "deltaZ is reverted", 1.1752 + deltaMultiplierX: 1.0, deltaMultiplierY: 1.0, deltaMultiplierZ: -1.0 }, 1.1753 + { description: "deltaX is 2.0", 1.1754 + deltaMultiplierX: 2.0, deltaMultiplierY: 1.0, deltaMultiplierZ: 1.0 }, 1.1755 + { description: "deltaY is 2.0", 1.1756 + deltaMultiplierX: 1.0, deltaMultiplierY: 2.0, deltaMultiplierZ: 1.0 }, 1.1757 + { description: "deltaZ is 2.0", 1.1758 + deltaMultiplierX: 1.0, deltaMultiplierY: 1.0, deltaMultiplierZ: 2.0 }, 1.1759 + { description: "deltaX is -2.0", 1.1760 + deltaMultiplierX: -2.0, deltaMultiplierY: 1.0, deltaMultiplierZ: 1.0 }, 1.1761 + { description: "deltaY is -2.0", 1.1762 + deltaMultiplierX: 1.0, deltaMultiplierY: -2.0, deltaMultiplierZ: 1.0 }, 1.1763 + { description: "deltaZ is -2.0", 1.1764 + deltaMultiplierX: 1.0, deltaMultiplierY: 1.0, deltaMultiplierZ: -2.0 }, 1.1765 + ]; 1.1766 + 1.1767 + var index = 0; 1.1768 + 1.1769 + function doTest() { 1.1770 + setDeltaMultiplierSettings(kSettings[index]); 1.1771 + doTestScroll(kSettings[index], function () { 1.1772 + doTestZoom(kSettings[index], function() { 1.1773 + if (++index == kSettings.length) { 1.1774 + setDeltaMultiplierSettings(kSettings[0]); 1.1775 + doTestZoomedScroll(function() { 1.1776 + doTestWholeScroll(function() { 1.1777 + doTestActionOverride(function() { 1.1778 + finishTests(); 1.1779 + }); 1.1780 + }); 1.1781 + }); 1.1782 + } else { 1.1783 + doTest(); 1.1784 + } 1.1785 + }); 1.1786 + }); 1.1787 + } 1.1788 + doTest(); 1.1789 +} 1.1790 + 1.1791 +function finishTests() 1.1792 +{ 1.1793 + SpecialPowers.clearUserPref("general.smoothScroll"); 1.1794 + 1.1795 + SpecialPowers.clearUserPref("mousewheel.default.action"); 1.1796 + SpecialPowers.clearUserPref("mousewheel.default.action.override_x"); 1.1797 + SpecialPowers.clearUserPref("mousewheel.with_shift.action"); 1.1798 + SpecialPowers.clearUserPref("mousewheel.with_shift.action.override_x"); 1.1799 + SpecialPowers.clearUserPref("mousewheel.with_control.action"); 1.1800 + SpecialPowers.clearUserPref("mousewheel.with_control.action.override_x"); 1.1801 + 1.1802 + SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_x"); 1.1803 + SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_y"); 1.1804 + SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_z"); 1.1805 + SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_x"); 1.1806 + SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_y"); 1.1807 + SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_z"); 1.1808 + SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_x"); 1.1809 + SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_y"); 1.1810 + SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_z"); 1.1811 + SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_x"); 1.1812 + SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_y"); 1.1813 + SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_z"); 1.1814 + SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_x"); 1.1815 + SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_y"); 1.1816 + SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_z"); 1.1817 + SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_x"); 1.1818 + SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_y"); 1.1819 + SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_z"); 1.1820 + 1.1821 + winUtils.restoreNormalRefresh(); 1.1822 + 1.1823 + window.opener.finish(); 1.1824 +} 1.1825 + 1.1826 +</script> 1.1827 +</pre> 1.1828 +</body> 1.1829 +</html>