dom/events/test/test_dom_wheel_event.html

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/events/test/test_dom_wheel_event.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,764 @@
     1.4 +<!DOCTYPE HTML>
     1.5 +<html style="font-size: 32px;">
     1.6 +<head>
     1.7 +  <title>Test for D3E 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="font-family: monospace; font-size: 16px; line-height: 1; overflow: auto; width: 200px; height: 200px;">
    1.15 +  <div id="scrolled" style="font-size: 64px; width: 5000px; height: 5000px;">
    1.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>
    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 +  </div>
    1.43 +</div>
    1.44 +<div id="content" style="display: none">
    1.45 +  
    1.46 +</div>
    1.47 +<pre id="test">
    1.48 +<script type="application/javascript">
    1.49 +
    1.50 +SimpleTest.waitForExplicitFinish();
    1.51 +SimpleTest.waitForFocus(runTests, window);
    1.52 +
    1.53 +var gScrollableElement = document.getElementById("scrollable");
    1.54 +var gScrolledElement = document.getElementById("scrolled");
    1.55 +
    1.56 +var gLineHeight = 0;
    1.57 +var gHorizontalLine = 0;
    1.58 +var gPageHeight = 0;
    1.59 +var gPageWidth  = 0;
    1.60 +
    1.61 +function prepareScrollUnits()
    1.62 +{
    1.63 +  var result = -1;
    1.64 +  function handler(aEvent)
    1.65 +  {
    1.66 +    result = aEvent.detail;
    1.67 +    aEvent.preventDefault();
    1.68 +  }
    1.69 +  window.addEventListener("MozMousePixelScroll", handler, true);
    1.70 +
    1.71 +  synthesizeWheel(gScrollableElement, 10, 10,
    1.72 +                  { deltaMode: WheelEvent.DOM_DELTA_LINE,
    1.73 +                    deltaY: 1.0, lineOrPageDeltaY: 1 });
    1.74 +  gLineHeight = result;
    1.75 +  ok(gLineHeight > 10 && gLineHeight < 25, "prepareScrollUnits: gLineHeight may be illegal value, got " + gLineHeight);
    1.76 +
    1.77 +  result = -1;
    1.78 +  synthesizeWheel(gScrollableElement, 10, 10,
    1.79 +                  { deltaMode: WheelEvent.DOM_DELTA_LINE,
    1.80 +                    deltaX: 1.0, lineOrPageDeltaX: 1 });
    1.81 +  gHorizontalLine = result;
    1.82 +  ok(gHorizontalLine > 5 && gHorizontalLine < 16, "prepareScrollUnits: gHorizontalLine may be illegal value, got " + gHorizontalLine);
    1.83 +
    1.84 +  result = -1;
    1.85 +  synthesizeWheel(gScrollableElement, 10, 10,
    1.86 +                  { deltaMode: WheelEvent.DOM_DELTA_PAGE,
    1.87 +                    deltaY: 1.0, lineOrPageDeltaY: 1 });
    1.88 +  gPageHeight = result;
    1.89 +  // XXX Cannot we know the actual scroll port size?
    1.90 +  ok(gPageHeight >= 150 && gPageHeight <= 200,
    1.91 +     "prepareScrollUnits: gPageHeight is strange value, got " + gPageHeight);
    1.92 +
    1.93 +  result = -1;
    1.94 +  synthesizeWheel(gScrollableElement, 10, 10,
    1.95 +                  { deltaMode: WheelEvent.DOM_DELTA_PAGE,
    1.96 +                    deltaX: 1.0, lineOrPageDeltaX: 1 });
    1.97 +  gPageWidth = result;
    1.98 +  ok(gPageWidth >= 150 && gPageWidth <= 200,
    1.99 +     "prepareScrollUnits: gPageWidth is strange value, got " + gPageWidth);
   1.100 +
   1.101 +  window.removeEventListener("MozMousePixelScroll", handler, true);
   1.102 +}
   1.103 +
   1.104 +function testMakingUntrustedEvent()
   1.105 +{
   1.106 +  const kCreateEventArgs = [
   1.107 +    "WheelEvent", "wheelevent", "wheelEvent", "Wheelevent"
   1.108 +  ];
   1.109 +
   1.110 +  for (var i = 0; i < kCreateEventArgs.length; i++) {
   1.111 +    try {
   1.112 +      // We never support WheelEvent construction with document.createEvent().
   1.113 +      var event = document.createEvent(kCreateEventArgs[i]);
   1.114 +      ok(false, "document.createEvent(" + kCreateEventArgs[i] + ") should throw an error");
   1.115 +    } catch (e) {
   1.116 +      ok(true, "document.createEvent(" + kCreateEventArgs[i] + ") threw an error");
   1.117 +    }
   1.118 +  }
   1.119 +
   1.120 +  var wheelEvent = new WheelEvent("wheel");
   1.121 +  ok(wheelEvent instanceof WheelEvent,
   1.122 +     "new WheelEvent() should create an instance of WheelEvent");
   1.123 +  ok(typeof(wheelEvent.initWheelEvent) != "function",
   1.124 +     "WheelEvent must not have initWheelEvent()");
   1.125 +}
   1.126 +
   1.127 +// delta_multiplier prefs should cause changing delta values of trusted events only.
   1.128 +// And also legacy events' detail value should be changed too.
   1.129 +function testDeltaMultiplierPrefs()
   1.130 +{
   1.131 +  const kModifierAlt     = 0x01;
   1.132 +  const kModifierControl = 0x02;
   1.133 +  const kModifierMeta    = 0x04;
   1.134 +  const kModifierShift   = 0x08;
   1.135 +  const kModifierWin     = 0x10;
   1.136 +
   1.137 +  const kTests = [
   1.138 +    { name: "default",
   1.139 +      expected: [ 0, kModifierShift | kModifierAlt, kModifierShift | kModifierControl,
   1.140 +                     kModifierShift | kModifierMeta, kModifierShift | kModifierWin,
   1.141 +                     kModifierControl | kModifierAlt, kModifierMeta | kModifierAlt ],
   1.142 +      unexpected: [ kModifierAlt, kModifierControl, kModifierMeta, kModifierShift, kModifierWin ] },
   1.143 +    { name: "with_alt",
   1.144 +      expected: [ kModifierAlt ],
   1.145 +      unexpected: [0, kModifierControl, kModifierMeta, kModifierShift, kModifierWin,
   1.146 +                      kModifierShift | kModifierAlt, kModifierControl | kModifierAlt,
   1.147 +                      kModifierMeta | kModifierAlt ] },
   1.148 +    { name: "with_control",
   1.149 +      expected: [ kModifierControl ],
   1.150 +      unexpected: [0, kModifierAlt, kModifierMeta, kModifierShift, kModifierWin,
   1.151 +                      kModifierShift | kModifierControl, kModifierControl | kModifierAlt,
   1.152 +                      kModifierMeta | kModifierControl ] },
   1.153 +    { name: "with_meta",
   1.154 +      expected: [ kModifierMeta ],
   1.155 +      unexpected: [0, kModifierAlt, kModifierControl, kModifierShift, kModifierWin,
   1.156 +                      kModifierShift | kModifierMeta, kModifierControl | kModifierMeta,
   1.157 +                      kModifierMeta | kModifierAlt ] },
   1.158 +    { name: "with_shift",
   1.159 +      expected: [ kModifierShift ],
   1.160 +      unexpected: [0, kModifierAlt, kModifierControl, kModifierMeta, kModifierWin,
   1.161 +                      kModifierShift | kModifierAlt, kModifierControl | kModifierShift,
   1.162 +                      kModifierMeta | kModifierShift ] },
   1.163 +    { name: "with_win",
   1.164 +      expected: [ kModifierWin ],
   1.165 +      unexpected: [0, kModifierAlt, kModifierControl, kModifierMeta, kModifierShift,
   1.166 +                      kModifierShift | kModifierWin ] },
   1.167 +  ];
   1.168 +
   1.169 +  // Note that this test doesn't support complicated lineOrPageDelta values which are computed with
   1.170 +  // accumulated delta values by the prefs.  If you need to test the lineOrPageDelta accumulation,
   1.171 +  // use test_continuous_dom_wheel_event.html.
   1.172 +  const kEvents = [
   1.173 +    { deltaMode: WheelEvent.DOM_DELTA_PIXEL,
   1.174 +      deltaX: gHorizontalLine, deltaY: gLineHeight, deltaZ: gLineHeight, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 },
   1.175 +    { deltaMode: WheelEvent.DOM_DELTA_LINE,
   1.176 +      deltaX: 1.0, deltaY: 1.0, deltaZ: 1.0, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 },
   1.177 +    { deltaMode: WheelEvent.DOM_DELTA_PAGE,
   1.178 +      deltaX: 1.0, deltaY: 1.0, deltaZ: 1.0, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 },
   1.179 +    { deltaMode: WheelEvent.DOM_DELTA_PIXEL,
   1.180 +      deltaX: -gHorizontalLine, deltaY: -gLineHeight, deltaZ: -gLineHeight, lineOrPageDeltaX: -1, lineOrPageDeltaY: -1 },
   1.181 +    { deltaMode: WheelEvent.DOM_DELTA_LINE,
   1.182 +      deltaX: -1.0, deltaY: -1.0, deltaZ: -1.0, lineOrPageDeltaX: -1, lineOrPageDeltaY: -1 },
   1.183 +    { deltaMode: WheelEvent.DOM_DELTA_PAGE,
   1.184 +      deltaX: -1.0, deltaY: -1.0, deltaZ: -1.0, lineOrPageDeltaX: -1, lineOrPageDeltaY: -1 },
   1.185 +  ];
   1.186 +
   1.187 +  const kDeltaMultiplierPrefs = [
   1.188 +    "delta_multiplier_x", "delta_multiplier_y", "delta_multiplier_z"
   1.189 +  ];
   1.190 +
   1.191 +  const kPrefValues = [
   1.192 +    200, 50, 0, -50, -150
   1.193 +  ];
   1.194 +
   1.195 +  var currentTest, currentModifiers, currentEvent, currentPref, currentMultiplier, testingExpected;
   1.196 +  var description;
   1.197 +  var calledHandlers = { wheel: false,
   1.198 +                         DOMMouseScroll: { horizontal: false, vertical: false },
   1.199 +                         MozMousePixelScroll: { horizontal: false, vertical: false } };
   1.200 +
   1.201 +  function wheelEventHandler(aEvent) {
   1.202 +    calledHandlers.wheel = true;
   1.203 +
   1.204 +    var expectedDeltaX = currentEvent.deltaX;
   1.205 +    var expectedDeltaY = currentEvent.deltaY;
   1.206 +    var expectedDeltaZ = currentEvent.deltaZ;
   1.207 +
   1.208 +    if (testingExpected) {
   1.209 +      switch (currentPref.charAt(currentPref.length - 1)) {
   1.210 +        case "x":
   1.211 +          expectedDeltaX *= currentMultiplier;
   1.212 +          break;
   1.213 +        case "y":
   1.214 +          expectedDeltaY *= currentMultiplier;
   1.215 +          break;
   1.216 +        case "z":
   1.217 +          expectedDeltaZ *= currentMultiplier;
   1.218 +          break;
   1.219 +      }
   1.220 +    }
   1.221 +    is(aEvent.deltaX, expectedDeltaX, description + "deltaX (" + currentEvent.deltaX + ") was invaild");
   1.222 +    is(aEvent.deltaY, expectedDeltaY, description + "deltaY (" + currentEvent.deltaY + ") was invaild");
   1.223 +    is(aEvent.deltaZ, expectedDeltaZ, description + "deltaZ (" + currentEvent.deltaZ + ") was invaild");
   1.224 +  }
   1.225 +
   1.226 +  function legacyEventHandler(aEvent) {
   1.227 +    var isHorizontal = (aEvent.axis == MouseScrollEvent.HORIZONTAL_AXIS);
   1.228 +    var isScrollEvent = (aEvent.type == "DOMMouseScroll");
   1.229 +    if (isScrollEvent) {
   1.230 +      if (isHorizontal) {
   1.231 +        calledHandlers.DOMMouseScroll.horizontal = true;
   1.232 +      } else {
   1.233 +        calledHandlers.DOMMouseScroll.vertical = true;
   1.234 +      }
   1.235 +    } else {
   1.236 +      if (isHorizontal) {
   1.237 +        calledHandlers.MozMousePixelScroll.horizontal = true;
   1.238 +      } else {
   1.239 +        calledHandlers.MozMousePixelScroll.vertical = true;
   1.240 +      }
   1.241 +    }
   1.242 +    var eventName = (isHorizontal ? "Horizontal " : "Vertical ") + aEvent.type + " ";
   1.243 +    var expectedDetail;
   1.244 +    if (isScrollEvent) {
   1.245 +      expectedDetail = isHorizontal ? currentEvent.lineOrPageDeltaX : currentEvent.lineOrPageDeltaY;
   1.246 +      if (currentEvent.deltaMode == WheelEvent.DOM_DELTA_PAGE && expectedDetail) {
   1.247 +        expectedDetail = ((expectedDetail > 0) ? UIEvent.SCROLL_PAGE_DOWN : UIEvent.SCROLL_PAGE_UP);
   1.248 +      }
   1.249 +    } else {
   1.250 +      expectedDetail = isHorizontal ? currentEvent.deltaX : currentEvent.deltaY;
   1.251 +      if (expectedDetail) {
   1.252 +        if (currentEvent.deltaMode == WheelEvent.DOM_DELTA_LINE) {
   1.253 +          expectedDetail *= (isHorizontal ? gHorizontalLine : gLineHeight);
   1.254 +        } else if (currentEvent.deltaMode == WheelEvent.DOM_DELTA_PAGE) {
   1.255 +          if (expectedDetail > 0) {
   1.256 +            expectedDetail = (isHorizontal ? gPageWidth : gPageHeight);
   1.257 +          } else {
   1.258 +            expectedDetail = (isHorizontal ? -gPageWidth : -gPageHeight);
   1.259 +          }
   1.260 +        }
   1.261 +      }
   1.262 +    }
   1.263 +    if (testingExpected) {
   1.264 +      if ((isHorizontal && currentPref.charAt(currentPref.length - 1) == "x") ||
   1.265 +          (!isHorizontal && currentPref.charAt(currentPref.length - 1) == "y")) {
   1.266 +        // If it's a page scroll event, the detail value is UIEvent.SCROLL_PAGE_DOWN or
   1.267 +        // UIEvent.SCROLL_PAGE_UP.  If the delta value sign is reverted, we need to
   1.268 +        // revert the expected detail value too.  Otherwise, don't touch it.
   1.269 +        if (isScrollEvent && currentEvent.deltaMode == WheelEvent.DOM_DELTA_PAGE) {
   1.270 +          if (currentMultiplier < 0) {
   1.271 +            expectedDetail = ((expectedDetail == UIEvent.SCROLL_PAGE_UP) ? UIEvent.SCROLL_PAGE_DOWN : UIEvent.SCROLL_PAGE_UP);
   1.272 +          }
   1.273 +        } else {
   1.274 +          expectedDetail *= currentMultiplier;
   1.275 +          expectedDetail = expectedDetail < 0 ? Math.ceil(expectedDetail) : Math.floor(expectedDetail);
   1.276 +        }
   1.277 +      }
   1.278 +    }
   1.279 +    is(aEvent.detail, expectedDetail, description + eventName + "detail was invalid");
   1.280 +
   1.281 +    aEvent.preventDefault();
   1.282 +  }
   1.283 +
   1.284 +  window.addEventListener("wheel", wheelEventHandler, true);
   1.285 +  window.addEventListener("DOMMouseScroll", legacyEventHandler, true);
   1.286 +  window.addEventListener("MozMousePixelScroll", legacyEventHandler, true);
   1.287 +
   1.288 +  function dispatchEvent(aIsExpected) {
   1.289 +    for (var i = 0; i < kEvents.length; i++) {
   1.290 +      currentEvent = kEvents[i];
   1.291 +      currentEvent.shiftKey = (currentModifiers & kModifierShift) != 0;
   1.292 +      currentEvent.ctrlKey  = (currentModifiers & kModifierControl) != 0;
   1.293 +      currentEvent.altKey   = (currentModifiers & kModifierAlt) != 0;
   1.294 +      currentEvent.metaKey  = (currentModifiers & kModifierMeta) != 0;
   1.295 +      currentEvent.osKey    = (currentModifiers & kModifierWin) != 0;
   1.296 +      var modifierList = "";
   1.297 +      if (currentEvent.shiftKey) {
   1.298 +        modifierList += "Shift ";
   1.299 +      }
   1.300 +      if (currentEvent.ctrlKey) {
   1.301 +        modifierList += "Control ";
   1.302 +      }
   1.303 +      if (currentEvent.altKey) {
   1.304 +        modifierList += "Alt ";
   1.305 +      }
   1.306 +      if (currentEvent.metaKey) {
   1.307 +        modifierList += "Meta ";
   1.308 +      }
   1.309 +      if (currentEvent.osKey) {
   1.310 +        modifierList += "Win ";
   1.311 +      }
   1.312 +
   1.313 +      for (var j = 0; j < kPrefValues.length; j++) {
   1.314 +        currentMultiplier = kPrefValues[j] / 100;
   1.315 +        for (var k = 0; k < kDeltaMultiplierPrefs.length; k++) {
   1.316 +          currentPref = "mousewheel." + currentTest.name + "." + kDeltaMultiplierPrefs[k];
   1.317 +
   1.318 +          SpecialPowers.setIntPref(currentPref, kPrefValues[j]);
   1.319 +
   1.320 +          gScrollableElement.scrollTop = gScrollableElement.scrollBottom = 1000;
   1.321 +
   1.322 +          // trusted event's delta valuses should be reverted by the pref.
   1.323 +          testingExpected = aIsExpected;
   1.324 +
   1.325 +          description = "testDeltaMultiplierPrefs, pref: " + currentPref + "=" + kPrefValues[j] +
   1.326 +            ", deltaMode: " + currentEvent.deltaMode + ", modifiers: \"" + modifierList + "\", (trusted event): ";
   1.327 +          synthesizeWheel(gScrollableElement, 10, 10, currentEvent);
   1.328 +
   1.329 +          var expectedProps = {
   1.330 +            deltaX: currentEvent.deltaX * currentMultiplier,
   1.331 +            deltaY: currentEvent.deltaY * currentMultiplier,
   1.332 +            dletaZ: currentEvent.deltaZ * currentMultiplier,
   1.333 +            lineOrPageDeltaX: currentEvent.lineOrPageDeltaX * currentMultiplier,
   1.334 +            lineOrPageDeltaY: currentEvent.lineOrPageDeltaY * currentMultiplier,
   1.335 +          };
   1.336 +
   1.337 +          is(calledHandlers.wheel,
   1.338 +             expectedProps.deltaX != 0 || expectedProps.deltaY != 0 || expectedProps.deltaZ != 0,
   1.339 +             description + "wheel event was (not) fired");
   1.340 +          is(calledHandlers.DOMMouseScroll.horizontal,
   1.341 +             expectedProps.lineOrPageDeltaX >= 1 || expectedProps.lineOrPageDeltaX <= -1,
   1.342 +             description + "Horizontal DOMMouseScroll event was (not) fired");
   1.343 +          is(calledHandlers.DOMMouseScroll.vertical,
   1.344 +             expectedProps.lineOrPageDeltaY >= 1 || expectedProps.lineOrPageDeltaY <= -1,
   1.345 +             description + "Vertical DOMMouseScroll event was (not) fired");
   1.346 +          is(calledHandlers.MozMousePixelScroll.horizontal,
   1.347 +             expectedProps.deltaY >= 1 || expectedProps.deltaY <= -1,
   1.348 +             description + "Horizontal MozMousePixelScroll event was (not) fired");
   1.349 +          is(calledHandlers.MozMousePixelScroll.vertical,
   1.350 +             expectedProps.deltaY >= 1 || expectedProps.deltaY <= -1,
   1.351 +             description + "Vertical MozMousePixelScroll event was (not) fired");
   1.352 +
   1.353 +          calledHandlers = { wheel: false,
   1.354 +                             DOMMouseScroll: { horizontal: false, vertical: false },
   1.355 +                             MozMousePixelScroll: { horizontal: false, vertical: false } };
   1.356 +
   1.357 +          // untrusted event's delta values shouldn't be reverted by the pref.
   1.358 +          testingExpected = false;
   1.359 +          var props = {
   1.360 +            bubbles: true,
   1.361 +            cancelable: true,
   1.362 +            shiftKey: currentEvent.shiftKey,
   1.363 +            ctrlKey: currentEvent.ctrlKey,
   1.364 +            altKey: currentEvent.altKey,
   1.365 +            metaKey: currentEvent.metaKey,
   1.366 +            deltaX: currentEvent.deltaX,
   1.367 +            deltaY: currentEvent.deltaY,
   1.368 +            deltaZ: currentEvent.deltaZ,
   1.369 +            deltaMode: currentEvent.deltaMode,
   1.370 +          };
   1.371 +          var untrustedEvent = new WheelEvent("wheel", props);
   1.372 +
   1.373 +          description = "testDeltaMultiplierPrefs, pref: " + currentPref + "=" + kPrefValues[j] +
   1.374 +            ", deltaMode: " + currentEvent.deltaMode + ", modifiers: \"" + modifierList + "\", (untrusted event): ";
   1.375 +          gScrollableElement.dispatchEvent(untrustedEvent);
   1.376 +
   1.377 +          ok(calledHandlers.wheel, description + "wheel event was not fired for untrusted event");
   1.378 +          ok(!calledHandlers.DOMMouseScroll.horizontal,
   1.379 +             description + "Horizontal DOMMouseScroll event was fired for untrusted event");
   1.380 +          ok(!calledHandlers.DOMMouseScroll.vertical,
   1.381 +             description + "Vertical DOMMouseScroll event was fired for untrusted event");
   1.382 +          ok(!calledHandlers.MozMousePixelScroll.horizontal,
   1.383 +             description + "Horizontal MozMousePixelScroll event was fired for untrusted event");
   1.384 +          ok(!calledHandlers.MozMousePixelScroll.vertical,
   1.385 +             description + "Vertical MozMousePixelScroll event was fired for untrusted event");
   1.386 +
   1.387 +          SpecialPowers.setIntPref(currentPref, 100);
   1.388 +
   1.389 +          calledHandlers = { wheel: false,
   1.390 +                             DOMMouseScroll: { horizontal: false, vertical: false },
   1.391 +                             MozMousePixelScroll: { horizontal: false, vertical: false } };
   1.392 +
   1.393 +        }
   1.394 +        // We should skip other value tests if testing with modifier key.
   1.395 +        // If we didn't do so, it would test too many times, but we don't need to do so.
   1.396 +        if (kTests.name != "default") {
   1.397 +          break;
   1.398 +        }
   1.399 +      }
   1.400 +    }
   1.401 +  }
   1.402 +
   1.403 +  for (var i = 0; i < kTests.length; i++) {
   1.404 +    currentTest = kTests[i];
   1.405 +    for (var j = 0; j < currentTest.expected.length; j++) {
   1.406 +      currentModifiers = currentTest.expected[j];
   1.407 +      dispatchEvent(true);
   1.408 +    }
   1.409 +    for (var k = 0; k < currentTest.unexpected.length; k++) {
   1.410 +      currentModifiers = currentTest.unexpected[k];
   1.411 +      dispatchEvent(false);
   1.412 +    }
   1.413 +  }
   1.414 +
   1.415 +  window.removeEventListener("wheel", wheelEventHandler, true);
   1.416 +  window.removeEventListener("DOMMouseScroll", legacyEventHandler, true);
   1.417 +  window.removeEventListener("MozMousePixelScroll", legacyEventHandler, true);
   1.418 +}
   1.419 +
   1.420 +// Untrusted wheel events shouldn't cause legacy mouse scroll events.
   1.421 +function testDispatchingUntrustEvent()
   1.422 +{
   1.423 +  var descriptionBase = "testDispatchingUntrustEvent, ";
   1.424 +  var description, wheelEventFired;
   1.425 +  function wheelEventHandler(aEvent)
   1.426 +  {
   1.427 +    wheelEventFired = true;
   1.428 +  }
   1.429 +
   1.430 +  function legacyEventHandler(aEvent)
   1.431 +  {
   1.432 +    ok(false, aEvent.type + " must not be fired");
   1.433 +  }
   1.434 +
   1.435 +  window.addEventListener("wheel", wheelEventHandler, true);
   1.436 +  window.addEventListener("DOMMouseScroll", legacyEventHandler, true);
   1.437 +  window.addEventListener("MozMousePixelScroll", legacyEventHandler, true);
   1.438 +
   1.439 +  description = descriptionBase + "dispatching a pixel wheel event: ";
   1.440 +  wheelEventFired = false;
   1.441 +  var untrustedPixelEvent = new WheelEvent("wheel", {
   1.442 +    bubbles: true, cancelable: true,
   1.443 +    deltaX: 24.0, deltaY: 24.0,
   1.444 +    deltaMode: WheelEvent.DOM_DELTA_PIXEL,
   1.445 +  });
   1.446 +  gScrolledElement.dispatchEvent(untrustedPixelEvent);
   1.447 +  ok(wheelEventFired, description + "wheel event wasn't fired");
   1.448 +
   1.449 +  description = descriptionBase + "dispatching a line wheel event: ";
   1.450 +  wheelEventFired = false;
   1.451 +  var untrustedLineEvent = new WheelEvent("wheel", {
   1.452 +    bubbles: true, cancelable: true,
   1.453 +    deltaX: 3.0, deltaY: 3.0,
   1.454 +    deltaMode: WheelEvent.DOM_DELTA_LINE,
   1.455 +  });
   1.456 +  gScrolledElement.dispatchEvent(untrustedLineEvent);
   1.457 +  ok(wheelEventFired, description + "wheel event wasn't fired");
   1.458 +
   1.459 +  description = descriptionBase + "dispatching a page wheel event: ";
   1.460 +  wheelEventFired = false;
   1.461 +  var untrustedPageEvent = new WheelEvent("wheel", {
   1.462 +    bubbles: true, cancelable: true,
   1.463 +    deltaX: 1.0, deltaY: 1.0,
   1.464 +    deltaMode: WheelEvent.DOM_DELTA_PAGE,
   1.465 +  });
   1.466 +  gScrolledElement.dispatchEvent(untrustedPageEvent);
   1.467 +  ok(wheelEventFired, description + "wheel event wasn't fired");
   1.468 +
   1.469 +  window.removeEventListener("wheel", wheelEventHandler, true);
   1.470 +  window.removeEventListener("DOMMouseScroll", legacyEventHandler, true);
   1.471 +  window.removeEventListener("MozMousePixelScroll", legacyEventHandler, true);
   1.472 +}
   1.473 +
   1.474 +function testEventOrder()
   1.475 +{
   1.476 +  const kWheelEvent                         = 0x0001;
   1.477 +  const kDOMMouseScrollEvent                = 0x0002;
   1.478 +  const kMozMousePixelScrollEvent           = 0x0004;
   1.479 +  const kVerticalScrollEvent                = 0x0010;
   1.480 +  const kHorizontalScrollEvent              = 0x0020;
   1.481 +  const kInSystemGroup                      = 0x0100;
   1.482 +  const kDefaultPrevented                   = 0x1000;
   1.483 +
   1.484 +  var currentTest;
   1.485 +
   1.486 +  const kTests = [
   1.487 +    {
   1.488 +      description: "Testing the order of the events without preventDefault()",
   1.489 +      expectedEvents: [ kWheelEvent,
   1.490 +                        kDOMMouseScrollEvent | kVerticalScrollEvent,
   1.491 +                        kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup,
   1.492 +                        kMozMousePixelScrollEvent | kVerticalScrollEvent,
   1.493 +                        kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup,
   1.494 +                        kDOMMouseScrollEvent | kHorizontalScrollEvent,
   1.495 +                        kDOMMouseScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
   1.496 +                        kMozMousePixelScrollEvent | kHorizontalScrollEvent,
   1.497 +                        kMozMousePixelScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
   1.498 +                        kWheelEvent | kInSystemGroup],
   1.499 +      resultEvents: [],
   1.500 +      doPreventDefaultAt: 0,
   1.501 +    },
   1.502 +    {
   1.503 +      description: "Testing the order of the events, calling preventDefault() at default group wheel event",
   1.504 +      expectedEvents: [ kWheelEvent,
   1.505 +                        kWheelEvent | kInSystemGroup | kDefaultPrevented],
   1.506 +      resultEvents: [],
   1.507 +      doPreventDefaultAt: kWheelEvent,
   1.508 +    },
   1.509 +    {
   1.510 +      description: "Testing the order of the events, calling preventDefault() at default group DOMMouseScroll event",
   1.511 +      expectedEvents: [ kWheelEvent,
   1.512 +                        kDOMMouseScrollEvent | kVerticalScrollEvent,
   1.513 +                        kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup | kDefaultPrevented,
   1.514 +                        kMozMousePixelScrollEvent | kVerticalScrollEvent | kDefaultPrevented,
   1.515 +                        kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup | kDefaultPrevented,
   1.516 +                        kDOMMouseScrollEvent | kHorizontalScrollEvent,
   1.517 +                        kDOMMouseScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
   1.518 +                        kMozMousePixelScrollEvent | kHorizontalScrollEvent,
   1.519 +                        kMozMousePixelScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
   1.520 +                        kWheelEvent | kInSystemGroup | kDefaultPrevented],
   1.521 +      resultEvents: [],
   1.522 +      doPreventDefaultAt: kDOMMouseScrollEvent | kVerticalScrollEvent,
   1.523 +    },
   1.524 +    {
   1.525 +      description: "Testing the order of the events, calling preventDefault() at default group MozMousePixelScroll event",
   1.526 +      expectedEvents: [ kWheelEvent,
   1.527 +                        kDOMMouseScrollEvent | kVerticalScrollEvent,
   1.528 +                        kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup,
   1.529 +                        kMozMousePixelScrollEvent | kVerticalScrollEvent,
   1.530 +                        kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup | kDefaultPrevented,
   1.531 +                        kDOMMouseScrollEvent | kHorizontalScrollEvent,
   1.532 +                        kDOMMouseScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
   1.533 +                        kMozMousePixelScrollEvent | kHorizontalScrollEvent,
   1.534 +                        kMozMousePixelScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
   1.535 +                        kWheelEvent | kInSystemGroup | kDefaultPrevented],
   1.536 +      resultEvents: [],
   1.537 +      doPreventDefaultAt: kMozMousePixelScrollEvent | kVerticalScrollEvent,
   1.538 +    },
   1.539 +    {
   1.540 +      description: "Testing the order of the events, calling preventDefault() at system group DOMMouseScroll event",
   1.541 +      expectedEvents: [ kWheelEvent,
   1.542 +                        kDOMMouseScrollEvent | kVerticalScrollEvent,
   1.543 +                        kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup,
   1.544 +                        kMozMousePixelScrollEvent | kVerticalScrollEvent | kDefaultPrevented,
   1.545 +                        kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup | kDefaultPrevented,
   1.546 +                        kDOMMouseScrollEvent | kHorizontalScrollEvent,
   1.547 +                        kDOMMouseScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
   1.548 +                        kMozMousePixelScrollEvent | kHorizontalScrollEvent,
   1.549 +                        kMozMousePixelScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
   1.550 +                        kWheelEvent | kInSystemGroup | kDefaultPrevented],
   1.551 +      resultEvents: [],
   1.552 +      doPreventDefaultAt: kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup,
   1.553 +    },
   1.554 +    {
   1.555 +      description: "Testing the order of the events, calling preventDefault() at system group MozMousePixelScroll event",
   1.556 +      expectedEvents: [ kWheelEvent,
   1.557 +                        kDOMMouseScrollEvent | kVerticalScrollEvent,
   1.558 +                        kDOMMouseScrollEvent | kVerticalScrollEvent | kInSystemGroup,
   1.559 +                        kMozMousePixelScrollEvent | kVerticalScrollEvent,
   1.560 +                        kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup,
   1.561 +                        kDOMMouseScrollEvent | kHorizontalScrollEvent,
   1.562 +                        kDOMMouseScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
   1.563 +                        kMozMousePixelScrollEvent | kHorizontalScrollEvent,
   1.564 +                        kMozMousePixelScrollEvent | kHorizontalScrollEvent | kInSystemGroup,
   1.565 +                        kWheelEvent | kInSystemGroup | kDefaultPrevented],
   1.566 +      resultEvents: [],
   1.567 +      doPreventDefaultAt: kMozMousePixelScrollEvent | kVerticalScrollEvent | kInSystemGroup,
   1.568 +    },
   1.569 +  ];
   1.570 +
   1.571 +  function getEventDescription(aEvent)
   1.572 +  {
   1.573 +    var result = "";
   1.574 +    if (aEvent & kWheelEvent) {
   1.575 +      result = "wheel"
   1.576 +    } else {
   1.577 +      if (aEvent & kDOMMouseScrollEvent) {
   1.578 +        result = "DOMMouseScroll";
   1.579 +      } else if (aEvent & kMozMousePixelScrollEvent) {
   1.580 +        result = "MozMousePixelScroll";
   1.581 +      }
   1.582 +      if (aEvent & kVerticalScrollEvent) {
   1.583 +        result += ", vertical";
   1.584 +      } else {
   1.585 +        result += ", horizontal";
   1.586 +      }
   1.587 +    }
   1.588 +    if (aEvent & kInSystemGroup) {
   1.589 +      result += ", system group";
   1.590 +    }
   1.591 +    if (aEvent & kDefaultPrevented) {
   1.592 +      result += ", defaultPrevented";
   1.593 +    }
   1.594 +    return result;
   1.595 +  }
   1.596 +
   1.597 +  function pushEvent(aEvent, aIsSystemGroup)
   1.598 +  {
   1.599 +    var event = 0;
   1.600 +    if (aEvent.type == "wheel") {
   1.601 +      event = kWheelEvent;
   1.602 +    } else {
   1.603 +      if (aEvent.type == "DOMMouseScroll") {
   1.604 +        event = kDOMMouseScrollEvent;
   1.605 +      } else if (aEvent.type == "MozMousePixelScroll") {
   1.606 +        event = kMozMousePixelScrollEvent;
   1.607 +      }
   1.608 +      if (aEvent.axis == MouseScrollEvent.HORIZONTAL_AXIS) {
   1.609 +        event |= kHorizontalScrollEvent;
   1.610 +      } else {
   1.611 +        event |= kVerticalScrollEvent;
   1.612 +      }
   1.613 +    }
   1.614 +    if (aIsSystemGroup) {
   1.615 +      event |= kInSystemGroup;
   1.616 +    }
   1.617 +    if (aEvent.defaultPrevented) {
   1.618 +      event |= kDefaultPrevented;
   1.619 +    }
   1.620 +    currentTest.resultEvents.push(event);
   1.621 +    return event;
   1.622 +  }
   1.623 +
   1.624 +  function handler(aEvent)
   1.625 +  {
   1.626 +    if (pushEvent(aEvent, false) == currentTest.doPreventDefaultAt) {
   1.627 +      aEvent.preventDefault();
   1.628 +    }
   1.629 +  }
   1.630 +
   1.631 +  function systemHandler(aEvent)
   1.632 +  {
   1.633 +    if (pushEvent(aEvent, true) == currentTest.doPreventDefaultAt) {
   1.634 +      aEvent.preventDefault();
   1.635 +    }
   1.636 +  }
   1.637 +
   1.638 +  window.addEventListener("wheel", handler, true);
   1.639 +  window.addEventListener("DOMMouseScroll", handler, true);
   1.640 +  window.addEventListener("MozMousePixelScroll", handler, true);
   1.641 +
   1.642 +  SpecialPowers.addSystemEventListener(window, "wheel", systemHandler, true);
   1.643 +  SpecialPowers.addSystemEventListener(window, "DOMMouseScroll", systemHandler, true);
   1.644 +  SpecialPowers.addSystemEventListener(window, "MozMousePixelScroll", systemHandler, true);
   1.645 +
   1.646 +  for (var i = 0; i < kTests.length; i++) {
   1.647 +    currentTest = kTests[i];
   1.648 +    synthesizeWheel(gScrollableElement, 10, 10,
   1.649 +                    { deltaMode: WheelEvent.DOM_DELTA_LINE, deltaX: 1.0, deltaY: 1.0 });
   1.650 +
   1.651 +    for (var j = 0; j < currentTest.expectedEvents.length; j++) {
   1.652 +      if (currentTest.resultEvents.length == j) {
   1.653 +        ok(false, currentTest.description + ": " +
   1.654 +           getEventDescription(currentTest.expectedEvents[j]) + " wasn't fired");
   1.655 +        break;
   1.656 +      }
   1.657 +      is(getEventDescription(currentTest.resultEvents[j]),
   1.658 +         getEventDescription(currentTest.expectedEvents[j]),
   1.659 +         currentTest.description + ": " + (j + 1) + "th event is mismatched");
   1.660 +    }
   1.661 +    if (currentTest.expectedEvents.length < currentTest.resultEvents.length) {
   1.662 +      ok(false, currentTest.description + ": " +
   1.663 +         getEventDescription(currentTest.resultEvents[currentTest.expectedEvents.length]) +
   1.664 +         " was fired unexpectedly");
   1.665 +    }
   1.666 +  }
   1.667 +
   1.668 +  window.removeEventListener("wheel", handler, true);
   1.669 +  window.removeEventListener("DOMMouseScroll", handler, true);
   1.670 +  window.removeEventListener("MozMousePixelScroll", handler, true);
   1.671 +
   1.672 +  SpecialPowers.removeSystemEventListener(window, "wheel", systemHandler, true);
   1.673 +  SpecialPowers.removeSystemEventListener(window, "DOMMouseScroll", systemHandler, true);
   1.674 +  SpecialPowers.removeSystemEventListener(window, "MozMousePixelScroll", systemHandler, true);
   1.675 +}
   1.676 +
   1.677 +var gOnWheelAttrHandled = new Array;
   1.678 +
   1.679 +function testOnWheelAttr()
   1.680 +{
   1.681 +  document.documentElement.setAttribute("onwheel", "gOnWheelAttrHandled['html'] = true;");
   1.682 +  document.body.setAttribute("onwheel", "gOnWheelAttrHandled['body'] = true;");
   1.683 +  gScrollableElement.setAttribute("onwheel", "gOnWheelAttrHandled['div'] = true;");
   1.684 +  var target = document.getElementById("onwheel");
   1.685 +  synthesizeWheel(gScrollableElement, 10, 10,
   1.686 +                  { deltaMode: WheelEvent.DOM_DELTA_LINE,
   1.687 +                    deltaX: 1.0, deltaY: 2.0 });
   1.688 +  ok(gOnWheelAttrHandled['html'], "html element's onwheel attribute isn't performed");
   1.689 +  ok(gOnWheelAttrHandled['body'], "body element's onwheel attribute isn't performed");
   1.690 +  ok(gOnWheelAttrHandled['div'], "div element's onwheel attribute isn't performed");
   1.691 +}
   1.692 +
   1.693 +var gOnWheelPropHandled = new Array;
   1.694 +
   1.695 +function testOnWheelProperty()
   1.696 +{
   1.697 +  window.onwheel = function (e) { gOnWheelPropHandled["window"] = true; }
   1.698 +  document.onwheel = function (e) { gOnWheelPropHandled["document"] = true; }
   1.699 +  document.documentElement.onwheel = function (e) { gOnWheelPropHandled["html"] = true; };
   1.700 +  document.body.onwheel = function (e) { gOnWheelPropHandled["body"] = true; };
   1.701 +  gScrollableElement.onwheel = function (e) { gOnWheelPropHandled["div"] = true; };
   1.702 +  var target = document.getElementById("onwheel");
   1.703 +  synthesizeWheel(gScrollableElement, 10, 10,
   1.704 +                  { deltaMode: WheelEvent.DOM_DELTA_LINE,
   1.705 +                    deltaX: 1.0, deltaY: 2.0 });
   1.706 +  ok(gOnWheelPropHandled['window'], "window's onwheel property isn't performed");
   1.707 +  ok(gOnWheelPropHandled['document'], "document's onwheel property isn't performed");
   1.708 +  ok(gOnWheelPropHandled['html'], "html element's onwheel property isn't performed");
   1.709 +  ok(gOnWheelPropHandled['body'], "body element's onwheel property isn't performed");
   1.710 +  ok(gOnWheelPropHandled['div'], "div element's onwheel property isn't performed");
   1.711 +}
   1.712 +
   1.713 +function runTests()
   1.714 +{
   1.715 +  SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_x", 100);
   1.716 +  SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_y", 100);
   1.717 +  SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_z", 100);
   1.718 +  SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_x", 100);
   1.719 +  SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_y", 100);
   1.720 +  SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_z", 100);
   1.721 +  SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_x", 100);
   1.722 +  SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_y", 100);
   1.723 +  SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_z", 100);
   1.724 +  SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_x", 100);
   1.725 +  SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_y", 100);
   1.726 +  SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_z", 100);
   1.727 +  SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_x", 100);
   1.728 +  SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_y", 100);
   1.729 +  SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_z", 100);
   1.730 +  SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_x", 100);
   1.731 +  SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_y", 100);
   1.732 +  SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_z", 100);
   1.733 +
   1.734 +  prepareScrollUnits();
   1.735 +  testMakingUntrustedEvent();
   1.736 +  testDeltaMultiplierPrefs();
   1.737 +  testDispatchingUntrustEvent();
   1.738 +  testEventOrder();
   1.739 +  testOnWheelAttr();
   1.740 +  testOnWheelProperty();
   1.741 +
   1.742 +  SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_x");
   1.743 +  SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_y");
   1.744 +  SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_z");
   1.745 +  SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_x");
   1.746 +  SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_y");
   1.747 +  SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_z");
   1.748 +  SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_x");
   1.749 +  SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_y");
   1.750 +  SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_z");
   1.751 +  SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_x");
   1.752 +  SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_y");
   1.753 +  SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_z");
   1.754 +  SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_x");
   1.755 +  SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_y");
   1.756 +  SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_z");
   1.757 +  SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_x");
   1.758 +  SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_y");
   1.759 +  SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_z");
   1.760 +
   1.761 +  SimpleTest.finish();
   1.762 +}
   1.763 +
   1.764 +</script>
   1.765 +</pre>
   1.766 +</body>
   1.767 +</html>

mercurial