Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
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> |