dom/events/test/test_dom_wheel_event.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 <!DOCTYPE HTML>
michael@0 2 <html style="font-size: 32px;">
michael@0 3 <head>
michael@0 4 <title>Test for D3E WheelEvent</title>
michael@0 5 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
michael@0 6 <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
michael@0 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
michael@0 8 </head>
michael@0 9 <body>
michael@0 10 <p id="display"></p>
michael@0 11 <div id="scrollable" style="font-family: monospace; font-size: 16px; line-height: 1; overflow: auto; width: 200px; height: 200px;">
michael@0 12 <div id="scrolled" style="font-size: 64px; width: 5000px; height: 5000px;">
michael@0 13 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>
michael@0 14 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>
michael@0 15 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>
michael@0 16 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 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>
michael@0 39 </div>
michael@0 40 </div>
michael@0 41 <div id="content" style="display: none">
michael@0 42
michael@0 43 </div>
michael@0 44 <pre id="test">
michael@0 45 <script type="application/javascript">
michael@0 46
michael@0 47 SimpleTest.waitForExplicitFinish();
michael@0 48 SimpleTest.waitForFocus(runTests, window);
michael@0 49
michael@0 50 var gScrollableElement = document.getElementById("scrollable");
michael@0 51 var gScrolledElement = document.getElementById("scrolled");
michael@0 52
michael@0 53 var gLineHeight = 0;
michael@0 54 var gHorizontalLine = 0;
michael@0 55 var gPageHeight = 0;
michael@0 56 var gPageWidth = 0;
michael@0 57
michael@0 58 function prepareScrollUnits()
michael@0 59 {
michael@0 60 var result = -1;
michael@0 61 function handler(aEvent)
michael@0 62 {
michael@0 63 result = aEvent.detail;
michael@0 64 aEvent.preventDefault();
michael@0 65 }
michael@0 66 window.addEventListener("MozMousePixelScroll", handler, true);
michael@0 67
michael@0 68 synthesizeWheel(gScrollableElement, 10, 10,
michael@0 69 { deltaMode: WheelEvent.DOM_DELTA_LINE,
michael@0 70 deltaY: 1.0, lineOrPageDeltaY: 1 });
michael@0 71 gLineHeight = result;
michael@0 72 ok(gLineHeight > 10 && gLineHeight < 25, "prepareScrollUnits: gLineHeight may be illegal value, got " + gLineHeight);
michael@0 73
michael@0 74 result = -1;
michael@0 75 synthesizeWheel(gScrollableElement, 10, 10,
michael@0 76 { deltaMode: WheelEvent.DOM_DELTA_LINE,
michael@0 77 deltaX: 1.0, lineOrPageDeltaX: 1 });
michael@0 78 gHorizontalLine = result;
michael@0 79 ok(gHorizontalLine > 5 && gHorizontalLine < 16, "prepareScrollUnits: gHorizontalLine may be illegal value, got " + gHorizontalLine);
michael@0 80
michael@0 81 result = -1;
michael@0 82 synthesizeWheel(gScrollableElement, 10, 10,
michael@0 83 { deltaMode: WheelEvent.DOM_DELTA_PAGE,
michael@0 84 deltaY: 1.0, lineOrPageDeltaY: 1 });
michael@0 85 gPageHeight = result;
michael@0 86 // XXX Cannot we know the actual scroll port size?
michael@0 87 ok(gPageHeight >= 150 && gPageHeight <= 200,
michael@0 88 "prepareScrollUnits: gPageHeight is strange value, got " + gPageHeight);
michael@0 89
michael@0 90 result = -1;
michael@0 91 synthesizeWheel(gScrollableElement, 10, 10,
michael@0 92 { deltaMode: WheelEvent.DOM_DELTA_PAGE,
michael@0 93 deltaX: 1.0, lineOrPageDeltaX: 1 });
michael@0 94 gPageWidth = result;
michael@0 95 ok(gPageWidth >= 150 && gPageWidth <= 200,
michael@0 96 "prepareScrollUnits: gPageWidth is strange value, got " + gPageWidth);
michael@0 97
michael@0 98 window.removeEventListener("MozMousePixelScroll", handler, true);
michael@0 99 }
michael@0 100
michael@0 101 function testMakingUntrustedEvent()
michael@0 102 {
michael@0 103 const kCreateEventArgs = [
michael@0 104 "WheelEvent", "wheelevent", "wheelEvent", "Wheelevent"
michael@0 105 ];
michael@0 106
michael@0 107 for (var i = 0; i < kCreateEventArgs.length; i++) {
michael@0 108 try {
michael@0 109 // We never support WheelEvent construction with document.createEvent().
michael@0 110 var event = document.createEvent(kCreateEventArgs[i]);
michael@0 111 ok(false, "document.createEvent(" + kCreateEventArgs[i] + ") should throw an error");
michael@0 112 } catch (e) {
michael@0 113 ok(true, "document.createEvent(" + kCreateEventArgs[i] + ") threw an error");
michael@0 114 }
michael@0 115 }
michael@0 116
michael@0 117 var wheelEvent = new WheelEvent("wheel");
michael@0 118 ok(wheelEvent instanceof WheelEvent,
michael@0 119 "new WheelEvent() should create an instance of WheelEvent");
michael@0 120 ok(typeof(wheelEvent.initWheelEvent) != "function",
michael@0 121 "WheelEvent must not have initWheelEvent()");
michael@0 122 }
michael@0 123
michael@0 124 // delta_multiplier prefs should cause changing delta values of trusted events only.
michael@0 125 // And also legacy events' detail value should be changed too.
michael@0 126 function testDeltaMultiplierPrefs()
michael@0 127 {
michael@0 128 const kModifierAlt = 0x01;
michael@0 129 const kModifierControl = 0x02;
michael@0 130 const kModifierMeta = 0x04;
michael@0 131 const kModifierShift = 0x08;
michael@0 132 const kModifierWin = 0x10;
michael@0 133
michael@0 134 const kTests = [
michael@0 135 { name: "default",
michael@0 136 expected: [ 0, kModifierShift | kModifierAlt, kModifierShift | kModifierControl,
michael@0 137 kModifierShift | kModifierMeta, kModifierShift | kModifierWin,
michael@0 138 kModifierControl | kModifierAlt, kModifierMeta | kModifierAlt ],
michael@0 139 unexpected: [ kModifierAlt, kModifierControl, kModifierMeta, kModifierShift, kModifierWin ] },
michael@0 140 { name: "with_alt",
michael@0 141 expected: [ kModifierAlt ],
michael@0 142 unexpected: [0, kModifierControl, kModifierMeta, kModifierShift, kModifierWin,
michael@0 143 kModifierShift | kModifierAlt, kModifierControl | kModifierAlt,
michael@0 144 kModifierMeta | kModifierAlt ] },
michael@0 145 { name: "with_control",
michael@0 146 expected: [ kModifierControl ],
michael@0 147 unexpected: [0, kModifierAlt, kModifierMeta, kModifierShift, kModifierWin,
michael@0 148 kModifierShift | kModifierControl, kModifierControl | kModifierAlt,
michael@0 149 kModifierMeta | kModifierControl ] },
michael@0 150 { name: "with_meta",
michael@0 151 expected: [ kModifierMeta ],
michael@0 152 unexpected: [0, kModifierAlt, kModifierControl, kModifierShift, kModifierWin,
michael@0 153 kModifierShift | kModifierMeta, kModifierControl | kModifierMeta,
michael@0 154 kModifierMeta | kModifierAlt ] },
michael@0 155 { name: "with_shift",
michael@0 156 expected: [ kModifierShift ],
michael@0 157 unexpected: [0, kModifierAlt, kModifierControl, kModifierMeta, kModifierWin,
michael@0 158 kModifierShift | kModifierAlt, kModifierControl | kModifierShift,
michael@0 159 kModifierMeta | kModifierShift ] },
michael@0 160 { name: "with_win",
michael@0 161 expected: [ kModifierWin ],
michael@0 162 unexpected: [0, kModifierAlt, kModifierControl, kModifierMeta, kModifierShift,
michael@0 163 kModifierShift | kModifierWin ] },
michael@0 164 ];
michael@0 165
michael@0 166 // Note that this test doesn't support complicated lineOrPageDelta values which are computed with
michael@0 167 // accumulated delta values by the prefs. If you need to test the lineOrPageDelta accumulation,
michael@0 168 // use test_continuous_dom_wheel_event.html.
michael@0 169 const kEvents = [
michael@0 170 { deltaMode: WheelEvent.DOM_DELTA_PIXEL,
michael@0 171 deltaX: gHorizontalLine, deltaY: gLineHeight, deltaZ: gLineHeight, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 },
michael@0 172 { deltaMode: WheelEvent.DOM_DELTA_LINE,
michael@0 173 deltaX: 1.0, deltaY: 1.0, deltaZ: 1.0, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 },
michael@0 174 { deltaMode: WheelEvent.DOM_DELTA_PAGE,
michael@0 175 deltaX: 1.0, deltaY: 1.0, deltaZ: 1.0, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 },
michael@0 176 { deltaMode: WheelEvent.DOM_DELTA_PIXEL,
michael@0 177 deltaX: -gHorizontalLine, deltaY: -gLineHeight, deltaZ: -gLineHeight, lineOrPageDeltaX: -1, lineOrPageDeltaY: -1 },
michael@0 178 { deltaMode: WheelEvent.DOM_DELTA_LINE,
michael@0 179 deltaX: -1.0, deltaY: -1.0, deltaZ: -1.0, lineOrPageDeltaX: -1, lineOrPageDeltaY: -1 },
michael@0 180 { deltaMode: WheelEvent.DOM_DELTA_PAGE,
michael@0 181 deltaX: -1.0, deltaY: -1.0, deltaZ: -1.0, lineOrPageDeltaX: -1, lineOrPageDeltaY: -1 },
michael@0 182 ];
michael@0 183
michael@0 184 const kDeltaMultiplierPrefs = [
michael@0 185 "delta_multiplier_x", "delta_multiplier_y", "delta_multiplier_z"
michael@0 186 ];
michael@0 187
michael@0 188 const kPrefValues = [
michael@0 189 200, 50, 0, -50, -150
michael@0 190 ];
michael@0 191
michael@0 192 var currentTest, currentModifiers, currentEvent, currentPref, currentMultiplier, testingExpected;
michael@0 193 var description;
michael@0 194 var calledHandlers = { wheel: false,
michael@0 195 DOMMouseScroll: { horizontal: false, vertical: false },
michael@0 196 MozMousePixelScroll: { horizontal: false, vertical: false } };
michael@0 197
michael@0 198 function wheelEventHandler(aEvent) {
michael@0 199 calledHandlers.wheel = true;
michael@0 200
michael@0 201 var expectedDeltaX = currentEvent.deltaX;
michael@0 202 var expectedDeltaY = currentEvent.deltaY;
michael@0 203 var expectedDeltaZ = currentEvent.deltaZ;
michael@0 204
michael@0 205 if (testingExpected) {
michael@0 206 switch (currentPref.charAt(currentPref.length - 1)) {
michael@0 207 case "x":
michael@0 208 expectedDeltaX *= currentMultiplier;
michael@0 209 break;
michael@0 210 case "y":
michael@0 211 expectedDeltaY *= currentMultiplier;
michael@0 212 break;
michael@0 213 case "z":
michael@0 214 expectedDeltaZ *= currentMultiplier;
michael@0 215 break;
michael@0 216 }
michael@0 217 }
michael@0 218 is(aEvent.deltaX, expectedDeltaX, description + "deltaX (" + currentEvent.deltaX + ") was invaild");
michael@0 219 is(aEvent.deltaY, expectedDeltaY, description + "deltaY (" + currentEvent.deltaY + ") was invaild");
michael@0 220 is(aEvent.deltaZ, expectedDeltaZ, description + "deltaZ (" + currentEvent.deltaZ + ") was invaild");
michael@0 221 }
michael@0 222
michael@0 223 function legacyEventHandler(aEvent) {
michael@0 224 var isHorizontal = (aEvent.axis == MouseScrollEvent.HORIZONTAL_AXIS);
michael@0 225 var isScrollEvent = (aEvent.type == "DOMMouseScroll");
michael@0 226 if (isScrollEvent) {
michael@0 227 if (isHorizontal) {
michael@0 228 calledHandlers.DOMMouseScroll.horizontal = true;
michael@0 229 } else {
michael@0 230 calledHandlers.DOMMouseScroll.vertical = true;
michael@0 231 }
michael@0 232 } else {
michael@0 233 if (isHorizontal) {
michael@0 234 calledHandlers.MozMousePixelScroll.horizontal = true;
michael@0 235 } else {
michael@0 236 calledHandlers.MozMousePixelScroll.vertical = true;
michael@0 237 }
michael@0 238 }
michael@0 239 var eventName = (isHorizontal ? "Horizontal " : "Vertical ") + aEvent.type + " ";
michael@0 240 var expectedDetail;
michael@0 241 if (isScrollEvent) {
michael@0 242 expectedDetail = isHorizontal ? currentEvent.lineOrPageDeltaX : currentEvent.lineOrPageDeltaY;
michael@0 243 if (currentEvent.deltaMode == WheelEvent.DOM_DELTA_PAGE && expectedDetail) {
michael@0 244 expectedDetail = ((expectedDetail > 0) ? UIEvent.SCROLL_PAGE_DOWN : UIEvent.SCROLL_PAGE_UP);
michael@0 245 }
michael@0 246 } else {
michael@0 247 expectedDetail = isHorizontal ? currentEvent.deltaX : currentEvent.deltaY;
michael@0 248 if (expectedDetail) {
michael@0 249 if (currentEvent.deltaMode == WheelEvent.DOM_DELTA_LINE) {
michael@0 250 expectedDetail *= (isHorizontal ? gHorizontalLine : gLineHeight);
michael@0 251 } else if (currentEvent.deltaMode == WheelEvent.DOM_DELTA_PAGE) {
michael@0 252 if (expectedDetail > 0) {
michael@0 253 expectedDetail = (isHorizontal ? gPageWidth : gPageHeight);
michael@0 254 } else {
michael@0 255 expectedDetail = (isHorizontal ? -gPageWidth : -gPageHeight);
michael@0 256 }
michael@0 257 }
michael@0 258 }
michael@0 259 }
michael@0 260 if (testingExpected) {
michael@0 261 if ((isHorizontal && currentPref.charAt(currentPref.length - 1) == "x") ||
michael@0 262 (!isHorizontal && currentPref.charAt(currentPref.length - 1) == "y")) {
michael@0 263 // If it's a page scroll event, the detail value is UIEvent.SCROLL_PAGE_DOWN or
michael@0 264 // UIEvent.SCROLL_PAGE_UP. If the delta value sign is reverted, we need to
michael@0 265 // revert the expected detail value too. Otherwise, don't touch it.
michael@0 266 if (isScrollEvent && currentEvent.deltaMode == WheelEvent.DOM_DELTA_PAGE) {
michael@0 267 if (currentMultiplier < 0) {
michael@0 268 expectedDetail = ((expectedDetail == UIEvent.SCROLL_PAGE_UP) ? UIEvent.SCROLL_PAGE_DOWN : UIEvent.SCROLL_PAGE_UP);
michael@0 269 }
michael@0 270 } else {
michael@0 271 expectedDetail *= currentMultiplier;
michael@0 272 expectedDetail = expectedDetail < 0 ? Math.ceil(expectedDetail) : Math.floor(expectedDetail);
michael@0 273 }
michael@0 274 }
michael@0 275 }
michael@0 276 is(aEvent.detail, expectedDetail, description + eventName + "detail was invalid");
michael@0 277
michael@0 278 aEvent.preventDefault();
michael@0 279 }
michael@0 280
michael@0 281 window.addEventListener("wheel", wheelEventHandler, true);
michael@0 282 window.addEventListener("DOMMouseScroll", legacyEventHandler, true);
michael@0 283 window.addEventListener("MozMousePixelScroll", legacyEventHandler, true);
michael@0 284
michael@0 285 function dispatchEvent(aIsExpected) {
michael@0 286 for (var i = 0; i < kEvents.length; i++) {
michael@0 287 currentEvent = kEvents[i];
michael@0 288 currentEvent.shiftKey = (currentModifiers & kModifierShift) != 0;
michael@0 289 currentEvent.ctrlKey = (currentModifiers & kModifierControl) != 0;
michael@0 290 currentEvent.altKey = (currentModifiers & kModifierAlt) != 0;
michael@0 291 currentEvent.metaKey = (currentModifiers & kModifierMeta) != 0;
michael@0 292 currentEvent.osKey = (currentModifiers & kModifierWin) != 0;
michael@0 293 var modifierList = "";
michael@0 294 if (currentEvent.shiftKey) {
michael@0 295 modifierList += "Shift ";
michael@0 296 }
michael@0 297 if (currentEvent.ctrlKey) {
michael@0 298 modifierList += "Control ";
michael@0 299 }
michael@0 300 if (currentEvent.altKey) {
michael@0 301 modifierList += "Alt ";
michael@0 302 }
michael@0 303 if (currentEvent.metaKey) {
michael@0 304 modifierList += "Meta ";
michael@0 305 }
michael@0 306 if (currentEvent.osKey) {
michael@0 307 modifierList += "Win ";
michael@0 308 }
michael@0 309
michael@0 310 for (var j = 0; j < kPrefValues.length; j++) {
michael@0 311 currentMultiplier = kPrefValues[j] / 100;
michael@0 312 for (var k = 0; k < kDeltaMultiplierPrefs.length; k++) {
michael@0 313 currentPref = "mousewheel." + currentTest.name + "." + kDeltaMultiplierPrefs[k];
michael@0 314
michael@0 315 SpecialPowers.setIntPref(currentPref, kPrefValues[j]);
michael@0 316
michael@0 317 gScrollableElement.scrollTop = gScrollableElement.scrollBottom = 1000;
michael@0 318
michael@0 319 // trusted event's delta valuses should be reverted by the pref.
michael@0 320 testingExpected = aIsExpected;
michael@0 321
michael@0 322 description = "testDeltaMultiplierPrefs, pref: " + currentPref + "=" + kPrefValues[j] +
michael@0 323 ", deltaMode: " + currentEvent.deltaMode + ", modifiers: \"" + modifierList + "\", (trusted event): ";
michael@0 324 synthesizeWheel(gScrollableElement, 10, 10, currentEvent);
michael@0 325
michael@0 326 var expectedProps = {
michael@0 327 deltaX: currentEvent.deltaX * currentMultiplier,
michael@0 328 deltaY: currentEvent.deltaY * currentMultiplier,
michael@0 329 dletaZ: currentEvent.deltaZ * currentMultiplier,
michael@0 330 lineOrPageDeltaX: currentEvent.lineOrPageDeltaX * currentMultiplier,
michael@0 331 lineOrPageDeltaY: currentEvent.lineOrPageDeltaY * currentMultiplier,
michael@0 332 };
michael@0 333
michael@0 334 is(calledHandlers.wheel,
michael@0 335 expectedProps.deltaX != 0 || expectedProps.deltaY != 0 || expectedProps.deltaZ != 0,
michael@0 336 description + "wheel event was (not) fired");
michael@0 337 is(calledHandlers.DOMMouseScroll.horizontal,
michael@0 338 expectedProps.lineOrPageDeltaX >= 1 || expectedProps.lineOrPageDeltaX <= -1,
michael@0 339 description + "Horizontal DOMMouseScroll event was (not) fired");
michael@0 340 is(calledHandlers.DOMMouseScroll.vertical,
michael@0 341 expectedProps.lineOrPageDeltaY >= 1 || expectedProps.lineOrPageDeltaY <= -1,
michael@0 342 description + "Vertical DOMMouseScroll event was (not) fired");
michael@0 343 is(calledHandlers.MozMousePixelScroll.horizontal,
michael@0 344 expectedProps.deltaY >= 1 || expectedProps.deltaY <= -1,
michael@0 345 description + "Horizontal MozMousePixelScroll event was (not) fired");
michael@0 346 is(calledHandlers.MozMousePixelScroll.vertical,
michael@0 347 expectedProps.deltaY >= 1 || expectedProps.deltaY <= -1,
michael@0 348 description + "Vertical MozMousePixelScroll event was (not) fired");
michael@0 349
michael@0 350 calledHandlers = { wheel: false,
michael@0 351 DOMMouseScroll: { horizontal: false, vertical: false },
michael@0 352 MozMousePixelScroll: { horizontal: false, vertical: false } };
michael@0 353
michael@0 354 // untrusted event's delta values shouldn't be reverted by the pref.
michael@0 355 testingExpected = false;
michael@0 356 var props = {
michael@0 357 bubbles: true,
michael@0 358 cancelable: true,
michael@0 359 shiftKey: currentEvent.shiftKey,
michael@0 360 ctrlKey: currentEvent.ctrlKey,
michael@0 361 altKey: currentEvent.altKey,
michael@0 362 metaKey: currentEvent.metaKey,
michael@0 363 deltaX: currentEvent.deltaX,
michael@0 364 deltaY: currentEvent.deltaY,
michael@0 365 deltaZ: currentEvent.deltaZ,
michael@0 366 deltaMode: currentEvent.deltaMode,
michael@0 367 };
michael@0 368 var untrustedEvent = new WheelEvent("wheel", props);
michael@0 369
michael@0 370 description = "testDeltaMultiplierPrefs, pref: " + currentPref + "=" + kPrefValues[j] +
michael@0 371 ", deltaMode: " + currentEvent.deltaMode + ", modifiers: \"" + modifierList + "\", (untrusted event): ";
michael@0 372 gScrollableElement.dispatchEvent(untrustedEvent);
michael@0 373
michael@0 374 ok(calledHandlers.wheel, description + "wheel event was not fired for untrusted event");
michael@0 375 ok(!calledHandlers.DOMMouseScroll.horizontal,
michael@0 376 description + "Horizontal DOMMouseScroll event was fired for untrusted event");
michael@0 377 ok(!calledHandlers.DOMMouseScroll.vertical,
michael@0 378 description + "Vertical DOMMouseScroll event was fired for untrusted event");
michael@0 379 ok(!calledHandlers.MozMousePixelScroll.horizontal,
michael@0 380 description + "Horizontal MozMousePixelScroll event was fired for untrusted event");
michael@0 381 ok(!calledHandlers.MozMousePixelScroll.vertical,
michael@0 382 description + "Vertical MozMousePixelScroll event was fired for untrusted event");
michael@0 383
michael@0 384 SpecialPowers.setIntPref(currentPref, 100);
michael@0 385
michael@0 386 calledHandlers = { wheel: false,
michael@0 387 DOMMouseScroll: { horizontal: false, vertical: false },
michael@0 388 MozMousePixelScroll: { horizontal: false, vertical: false } };
michael@0 389
michael@0 390 }
michael@0 391 // We should skip other value tests if testing with modifier key.
michael@0 392 // If we didn't do so, it would test too many times, but we don't need to do so.
michael@0 393 if (kTests.name != "default") {
michael@0 394 break;
michael@0 395 }
michael@0 396 }
michael@0 397 }
michael@0 398 }
michael@0 399
michael@0 400 for (var i = 0; i < kTests.length; i++) {
michael@0 401 currentTest = kTests[i];
michael@0 402 for (var j = 0; j < currentTest.expected.length; j++) {
michael@0 403 currentModifiers = currentTest.expected[j];
michael@0 404 dispatchEvent(true);
michael@0 405 }
michael@0 406 for (var k = 0; k < currentTest.unexpected.length; k++) {
michael@0 407 currentModifiers = currentTest.unexpected[k];
michael@0 408 dispatchEvent(false);
michael@0 409 }
michael@0 410 }
michael@0 411
michael@0 412 window.removeEventListener("wheel", wheelEventHandler, true);
michael@0 413 window.removeEventListener("DOMMouseScroll", legacyEventHandler, true);
michael@0 414 window.removeEventListener("MozMousePixelScroll", legacyEventHandler, true);
michael@0 415 }
michael@0 416
michael@0 417 // Untrusted wheel events shouldn't cause legacy mouse scroll events.
michael@0 418 function testDispatchingUntrustEvent()
michael@0 419 {
michael@0 420 var descriptionBase = "testDispatchingUntrustEvent, ";
michael@0 421 var description, wheelEventFired;
michael@0 422 function wheelEventHandler(aEvent)
michael@0 423 {
michael@0 424 wheelEventFired = true;
michael@0 425 }
michael@0 426
michael@0 427 function legacyEventHandler(aEvent)
michael@0 428 {
michael@0 429 ok(false, aEvent.type + " must not be fired");
michael@0 430 }
michael@0 431
michael@0 432 window.addEventListener("wheel", wheelEventHandler, true);
michael@0 433 window.addEventListener("DOMMouseScroll", legacyEventHandler, true);
michael@0 434 window.addEventListener("MozMousePixelScroll", legacyEventHandler, true);
michael@0 435
michael@0 436 description = descriptionBase + "dispatching a pixel wheel event: ";
michael@0 437 wheelEventFired = false;
michael@0 438 var untrustedPixelEvent = new WheelEvent("wheel", {
michael@0 439 bubbles: true, cancelable: true,
michael@0 440 deltaX: 24.0, deltaY: 24.0,
michael@0 441 deltaMode: WheelEvent.DOM_DELTA_PIXEL,
michael@0 442 });
michael@0 443 gScrolledElement.dispatchEvent(untrustedPixelEvent);
michael@0 444 ok(wheelEventFired, description + "wheel event wasn't fired");
michael@0 445
michael@0 446 description = descriptionBase + "dispatching a line wheel event: ";
michael@0 447 wheelEventFired = false;
michael@0 448 var untrustedLineEvent = new WheelEvent("wheel", {
michael@0 449 bubbles: true, cancelable: true,
michael@0 450 deltaX: 3.0, deltaY: 3.0,
michael@0 451 deltaMode: WheelEvent.DOM_DELTA_LINE,
michael@0 452 });
michael@0 453 gScrolledElement.dispatchEvent(untrustedLineEvent);
michael@0 454 ok(wheelEventFired, description + "wheel event wasn't fired");
michael@0 455
michael@0 456 description = descriptionBase + "dispatching a page wheel event: ";
michael@0 457 wheelEventFired = false;
michael@0 458 var untrustedPageEvent = new WheelEvent("wheel", {
michael@0 459 bubbles: true, cancelable: true,
michael@0 460 deltaX: 1.0, deltaY: 1.0,
michael@0 461 deltaMode: WheelEvent.DOM_DELTA_PAGE,
michael@0 462 });
michael@0 463 gScrolledElement.dispatchEvent(untrustedPageEvent);
michael@0 464 ok(wheelEventFired, description + "wheel event wasn't fired");
michael@0 465
michael@0 466 window.removeEventListener("wheel", wheelEventHandler, true);
michael@0 467 window.removeEventListener("DOMMouseScroll", legacyEventHandler, true);
michael@0 468 window.removeEventListener("MozMousePixelScroll", legacyEventHandler, true);
michael@0 469 }
michael@0 470
michael@0 471 function testEventOrder()
michael@0 472 {
michael@0 473 const kWheelEvent = 0x0001;
michael@0 474 const kDOMMouseScrollEvent = 0x0002;
michael@0 475 const kMozMousePixelScrollEvent = 0x0004;
michael@0 476 const kVerticalScrollEvent = 0x0010;
michael@0 477 const kHorizontalScrollEvent = 0x0020;
michael@0 478 const kInSystemGroup = 0x0100;
michael@0 479 const kDefaultPrevented = 0x1000;
michael@0 480
michael@0 481 var currentTest;
michael@0 482
michael@0 483 const kTests = [
michael@0 484 {
michael@0 485 description: "Testing the order of the events without preventDefault()",
michael@0 486 expectedEvents: [ kWheelEvent,
michael@0 487 kDOMMouseScrollEvent | kVerticalScrollEvent,
michael@0 488 kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup,
michael@0 489 kMozMousePixelScrollEvent | kVerticalScrollEvent,
michael@0 490 kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup,
michael@0 491 kDOMMouseScrollEvent | kHorizontalScrollEvent,
michael@0 492 kDOMMouseScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
michael@0 493 kMozMousePixelScrollEvent | kHorizontalScrollEvent,
michael@0 494 kMozMousePixelScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
michael@0 495 kWheelEvent | kInSystemGroup],
michael@0 496 resultEvents: [],
michael@0 497 doPreventDefaultAt: 0,
michael@0 498 },
michael@0 499 {
michael@0 500 description: "Testing the order of the events, calling preventDefault() at default group wheel event",
michael@0 501 expectedEvents: [ kWheelEvent,
michael@0 502 kWheelEvent | kInSystemGroup | kDefaultPrevented],
michael@0 503 resultEvents: [],
michael@0 504 doPreventDefaultAt: kWheelEvent,
michael@0 505 },
michael@0 506 {
michael@0 507 description: "Testing the order of the events, calling preventDefault() at default group DOMMouseScroll event",
michael@0 508 expectedEvents: [ kWheelEvent,
michael@0 509 kDOMMouseScrollEvent | kVerticalScrollEvent,
michael@0 510 kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup | kDefaultPrevented,
michael@0 511 kMozMousePixelScrollEvent | kVerticalScrollEvent | kDefaultPrevented,
michael@0 512 kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup | kDefaultPrevented,
michael@0 513 kDOMMouseScrollEvent | kHorizontalScrollEvent,
michael@0 514 kDOMMouseScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
michael@0 515 kMozMousePixelScrollEvent | kHorizontalScrollEvent,
michael@0 516 kMozMousePixelScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
michael@0 517 kWheelEvent | kInSystemGroup | kDefaultPrevented],
michael@0 518 resultEvents: [],
michael@0 519 doPreventDefaultAt: kDOMMouseScrollEvent | kVerticalScrollEvent,
michael@0 520 },
michael@0 521 {
michael@0 522 description: "Testing the order of the events, calling preventDefault() at default group MozMousePixelScroll event",
michael@0 523 expectedEvents: [ kWheelEvent,
michael@0 524 kDOMMouseScrollEvent | kVerticalScrollEvent,
michael@0 525 kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup,
michael@0 526 kMozMousePixelScrollEvent | kVerticalScrollEvent,
michael@0 527 kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup | kDefaultPrevented,
michael@0 528 kDOMMouseScrollEvent | kHorizontalScrollEvent,
michael@0 529 kDOMMouseScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
michael@0 530 kMozMousePixelScrollEvent | kHorizontalScrollEvent,
michael@0 531 kMozMousePixelScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
michael@0 532 kWheelEvent | kInSystemGroup | kDefaultPrevented],
michael@0 533 resultEvents: [],
michael@0 534 doPreventDefaultAt: kMozMousePixelScrollEvent | kVerticalScrollEvent,
michael@0 535 },
michael@0 536 {
michael@0 537 description: "Testing the order of the events, calling preventDefault() at system group DOMMouseScroll event",
michael@0 538 expectedEvents: [ kWheelEvent,
michael@0 539 kDOMMouseScrollEvent | kVerticalScrollEvent,
michael@0 540 kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup,
michael@0 541 kMozMousePixelScrollEvent | kVerticalScrollEvent | kDefaultPrevented,
michael@0 542 kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup | kDefaultPrevented,
michael@0 543 kDOMMouseScrollEvent | kHorizontalScrollEvent,
michael@0 544 kDOMMouseScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
michael@0 545 kMozMousePixelScrollEvent | kHorizontalScrollEvent,
michael@0 546 kMozMousePixelScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
michael@0 547 kWheelEvent | kInSystemGroup | kDefaultPrevented],
michael@0 548 resultEvents: [],
michael@0 549 doPreventDefaultAt: kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup,
michael@0 550 },
michael@0 551 {
michael@0 552 description: "Testing the order of the events, calling preventDefault() at system group MozMousePixelScroll event",
michael@0 553 expectedEvents: [ kWheelEvent,
michael@0 554 kDOMMouseScrollEvent | kVerticalScrollEvent,
michael@0 555 kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup,
michael@0 556 kMozMousePixelScrollEvent | kVerticalScrollEvent,
michael@0 557 kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup,
michael@0 558 kDOMMouseScrollEvent | kHorizontalScrollEvent,
michael@0 559 kDOMMouseScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
michael@0 560 kMozMousePixelScrollEvent | kHorizontalScrollEvent,
michael@0 561 kMozMousePixelScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
michael@0 562 kWheelEvent | kInSystemGroup | kDefaultPrevented],
michael@0 563 resultEvents: [],
michael@0 564 doPreventDefaultAt: kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup,
michael@0 565 },
michael@0 566 ];
michael@0 567
michael@0 568 function getEventDescription(aEvent)
michael@0 569 {
michael@0 570 var result = "";
michael@0 571 if (aEvent & kWheelEvent) {
michael@0 572 result = "wheel"
michael@0 573 } else {
michael@0 574 if (aEvent & kDOMMouseScrollEvent) {
michael@0 575 result = "DOMMouseScroll";
michael@0 576 } else if (aEvent & kMozMousePixelScrollEvent) {
michael@0 577 result = "MozMousePixelScroll";
michael@0 578 }
michael@0 579 if (aEvent & kVerticalScrollEvent) {
michael@0 580 result += ", vertical";
michael@0 581 } else {
michael@0 582 result += ", horizontal";
michael@0 583 }
michael@0 584 }
michael@0 585 if (aEvent & kInSystemGroup) {
michael@0 586 result += ", system group";
michael@0 587 }
michael@0 588 if (aEvent & kDefaultPrevented) {
michael@0 589 result += ", defaultPrevented";
michael@0 590 }
michael@0 591 return result;
michael@0 592 }
michael@0 593
michael@0 594 function pushEvent(aEvent, aIsSystemGroup)
michael@0 595 {
michael@0 596 var event = 0;
michael@0 597 if (aEvent.type == "wheel") {
michael@0 598 event = kWheelEvent;
michael@0 599 } else {
michael@0 600 if (aEvent.type == "DOMMouseScroll") {
michael@0 601 event = kDOMMouseScrollEvent;
michael@0 602 } else if (aEvent.type == "MozMousePixelScroll") {
michael@0 603 event = kMozMousePixelScrollEvent;
michael@0 604 }
michael@0 605 if (aEvent.axis == MouseScrollEvent.HORIZONTAL_AXIS) {
michael@0 606 event |= kHorizontalScrollEvent;
michael@0 607 } else {
michael@0 608 event |= kVerticalScrollEvent;
michael@0 609 }
michael@0 610 }
michael@0 611 if (aIsSystemGroup) {
michael@0 612 event |= kInSystemGroup;
michael@0 613 }
michael@0 614 if (aEvent.defaultPrevented) {
michael@0 615 event |= kDefaultPrevented;
michael@0 616 }
michael@0 617 currentTest.resultEvents.push(event);
michael@0 618 return event;
michael@0 619 }
michael@0 620
michael@0 621 function handler(aEvent)
michael@0 622 {
michael@0 623 if (pushEvent(aEvent, false) == currentTest.doPreventDefaultAt) {
michael@0 624 aEvent.preventDefault();
michael@0 625 }
michael@0 626 }
michael@0 627
michael@0 628 function systemHandler(aEvent)
michael@0 629 {
michael@0 630 if (pushEvent(aEvent, true) == currentTest.doPreventDefaultAt) {
michael@0 631 aEvent.preventDefault();
michael@0 632 }
michael@0 633 }
michael@0 634
michael@0 635 window.addEventListener("wheel", handler, true);
michael@0 636 window.addEventListener("DOMMouseScroll", handler, true);
michael@0 637 window.addEventListener("MozMousePixelScroll", handler, true);
michael@0 638
michael@0 639 SpecialPowers.addSystemEventListener(window, "wheel", systemHandler, true);
michael@0 640 SpecialPowers.addSystemEventListener(window, "DOMMouseScroll", systemHandler, true);
michael@0 641 SpecialPowers.addSystemEventListener(window, "MozMousePixelScroll", systemHandler, true);
michael@0 642
michael@0 643 for (var i = 0; i < kTests.length; i++) {
michael@0 644 currentTest = kTests[i];
michael@0 645 synthesizeWheel(gScrollableElement, 10, 10,
michael@0 646 { deltaMode: WheelEvent.DOM_DELTA_LINE, deltaX: 1.0, deltaY: 1.0 });
michael@0 647
michael@0 648 for (var j = 0; j < currentTest.expectedEvents.length; j++) {
michael@0 649 if (currentTest.resultEvents.length == j) {
michael@0 650 ok(false, currentTest.description + ": " +
michael@0 651 getEventDescription(currentTest.expectedEvents[j]) + " wasn't fired");
michael@0 652 break;
michael@0 653 }
michael@0 654 is(getEventDescription(currentTest.resultEvents[j]),
michael@0 655 getEventDescription(currentTest.expectedEvents[j]),
michael@0 656 currentTest.description + ": " + (j + 1) + "th event is mismatched");
michael@0 657 }
michael@0 658 if (currentTest.expectedEvents.length < currentTest.resultEvents.length) {
michael@0 659 ok(false, currentTest.description + ": " +
michael@0 660 getEventDescription(currentTest.resultEvents[currentTest.expectedEvents.length]) +
michael@0 661 " was fired unexpectedly");
michael@0 662 }
michael@0 663 }
michael@0 664
michael@0 665 window.removeEventListener("wheel", handler, true);
michael@0 666 window.removeEventListener("DOMMouseScroll", handler, true);
michael@0 667 window.removeEventListener("MozMousePixelScroll", handler, true);
michael@0 668
michael@0 669 SpecialPowers.removeSystemEventListener(window, "wheel", systemHandler, true);
michael@0 670 SpecialPowers.removeSystemEventListener(window, "DOMMouseScroll", systemHandler, true);
michael@0 671 SpecialPowers.removeSystemEventListener(window, "MozMousePixelScroll", systemHandler, true);
michael@0 672 }
michael@0 673
michael@0 674 var gOnWheelAttrHandled = new Array;
michael@0 675
michael@0 676 function testOnWheelAttr()
michael@0 677 {
michael@0 678 document.documentElement.setAttribute("onwheel", "gOnWheelAttrHandled['html'] = true;");
michael@0 679 document.body.setAttribute("onwheel", "gOnWheelAttrHandled['body'] = true;");
michael@0 680 gScrollableElement.setAttribute("onwheel", "gOnWheelAttrHandled['div'] = true;");
michael@0 681 var target = document.getElementById("onwheel");
michael@0 682 synthesizeWheel(gScrollableElement, 10, 10,
michael@0 683 { deltaMode: WheelEvent.DOM_DELTA_LINE,
michael@0 684 deltaX: 1.0, deltaY: 2.0 });
michael@0 685 ok(gOnWheelAttrHandled['html'], "html element's onwheel attribute isn't performed");
michael@0 686 ok(gOnWheelAttrHandled['body'], "body element's onwheel attribute isn't performed");
michael@0 687 ok(gOnWheelAttrHandled['div'], "div element's onwheel attribute isn't performed");
michael@0 688 }
michael@0 689
michael@0 690 var gOnWheelPropHandled = new Array;
michael@0 691
michael@0 692 function testOnWheelProperty()
michael@0 693 {
michael@0 694 window.onwheel = function (e) { gOnWheelPropHandled["window"] = true; }
michael@0 695 document.onwheel = function (e) { gOnWheelPropHandled["document"] = true; }
michael@0 696 document.documentElement.onwheel = function (e) { gOnWheelPropHandled["html"] = true; };
michael@0 697 document.body.onwheel = function (e) { gOnWheelPropHandled["body"] = true; };
michael@0 698 gScrollableElement.onwheel = function (e) { gOnWheelPropHandled["div"] = true; };
michael@0 699 var target = document.getElementById("onwheel");
michael@0 700 synthesizeWheel(gScrollableElement, 10, 10,
michael@0 701 { deltaMode: WheelEvent.DOM_DELTA_LINE,
michael@0 702 deltaX: 1.0, deltaY: 2.0 });
michael@0 703 ok(gOnWheelPropHandled['window'], "window's onwheel property isn't performed");
michael@0 704 ok(gOnWheelPropHandled['document'], "document's onwheel property isn't performed");
michael@0 705 ok(gOnWheelPropHandled['html'], "html element's onwheel property isn't performed");
michael@0 706 ok(gOnWheelPropHandled['body'], "body element's onwheel property isn't performed");
michael@0 707 ok(gOnWheelPropHandled['div'], "div element's onwheel property isn't performed");
michael@0 708 }
michael@0 709
michael@0 710 function runTests()
michael@0 711 {
michael@0 712 SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_x", 100);
michael@0 713 SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_y", 100);
michael@0 714 SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_z", 100);
michael@0 715 SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_x", 100);
michael@0 716 SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_y", 100);
michael@0 717 SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_z", 100);
michael@0 718 SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_x", 100);
michael@0 719 SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_y", 100);
michael@0 720 SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_z", 100);
michael@0 721 SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_x", 100);
michael@0 722 SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_y", 100);
michael@0 723 SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_z", 100);
michael@0 724 SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_x", 100);
michael@0 725 SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_y", 100);
michael@0 726 SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_z", 100);
michael@0 727 SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_x", 100);
michael@0 728 SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_y", 100);
michael@0 729 SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_z", 100);
michael@0 730
michael@0 731 prepareScrollUnits();
michael@0 732 testMakingUntrustedEvent();
michael@0 733 testDeltaMultiplierPrefs();
michael@0 734 testDispatchingUntrustEvent();
michael@0 735 testEventOrder();
michael@0 736 testOnWheelAttr();
michael@0 737 testOnWheelProperty();
michael@0 738
michael@0 739 SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_x");
michael@0 740 SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_y");
michael@0 741 SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_z");
michael@0 742 SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_x");
michael@0 743 SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_y");
michael@0 744 SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_z");
michael@0 745 SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_x");
michael@0 746 SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_y");
michael@0 747 SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_z");
michael@0 748 SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_x");
michael@0 749 SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_y");
michael@0 750 SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_z");
michael@0 751 SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_x");
michael@0 752 SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_y");
michael@0 753 SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_z");
michael@0 754 SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_x");
michael@0 755 SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_y");
michael@0 756 SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_z");
michael@0 757
michael@0 758 SimpleTest.finish();
michael@0 759 }
michael@0 760
michael@0 761 </script>
michael@0 762 </pre>
michael@0 763 </body>
michael@0 764 </html>

mercurial