Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Testing ns*Event::Assign*EventData()</title>
5 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
6 <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
7 <script type="text/javascript" src="/tests/SimpleTest/NativeKeyCodes.js"></script>
8 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
9 <style>
10 #a {
11 background-color: transparent;
12 transition: background-color 0.1s linear;
13 }
14 #a:focus {
15 background-color: red;
16 }
17 .slidin {
18 border: green 1px solid;
19 width: 10px;
20 height: 10px;
21 animation-name: slidein;
22 animation-duration: 1s;
23 }
24 @keyframes slidein {
25 from {
26 margin-left: 100%;
27 }
28 to {
29 margin-left: 0;
30 }
31 }
32 </style>
33 </head>
34 <body>
35 <div id="display">
36 <input id="input-text">
37 <button id="button">button</button>
38 <a id="a" href="about:blank">hyper link</a>
39 <div id="scrollable-div" style="overflow: auto; width: 30px; height: 30px;"><div id="scrolled-div" style="width: 10px; height: 10px;"></div></div>
40 <form id="form"></form>
41 <div id="animated-div"></div>
42 </div>
43 <div id="content" style="display: none">
44 </div>
45 <pre id="test">
46 </pre>
48 <script class="testbody" type="application/javascript">
50 SimpleTest.waitForExplicitFinish();
51 SimpleTest.expectAssertions(0, 32);
53 const kIsMac = (navigator.platform.indexOf("Mac") == 0);
54 const kIsWin = (navigator.platform.indexOf("Win") == 0);
56 var gEvent = null;
57 var gCopiedEvent = [];
58 var gCallback = null;
59 var gCallPreventDefault = false;
61 function onEvent(aEvent)
62 {
63 if (gCallPreventDefault) {
64 aEvent.preventDefault();
65 }
66 gEvent = aEvent;
67 for (var attr in aEvent) {
68 if (!attr.match(/^[A-Z0-9_]+$/) && // ignore const attributes
69 attr != "multipleActionsPrevented" && // multipleActionsPrevented isn't defined in any DOM event specs.
70 typeof(aEvent[attr]) != "function") {
71 gCopiedEvent.push({ name: attr, value: aEvent[attr]});
72 }
73 }
74 setTimeout(gCallback, 0);
75 }
77 const kTests = [
78 { description: "InternalScrollPortEvent (overflow, vertical)",
79 targetID: "scrollable-div", eventType: "overflow",
80 dispatchEvent: function () {
81 document.getElementById("scrolled-div").style.height = "500px";
82 },
83 canRun: function () {
84 return true;
85 },
86 todoMismatch: [],
87 },
88 { description: "InternalScrollPortEvent (overflow, horizontal)",
89 targetID: "scrollable-div", eventType: "overflow",
90 dispatchEvent: function () {
91 document.getElementById("scrolled-div").style.width = "500px";
92 },
93 canRun: function () {
94 return true;
95 },
96 todoMismatch: [],
97 },
98 { description: "InternalScrollAreaEvent (MozScrolledAreaChanged, spreading)",
99 target: function () { return document; }, eventType: "MozScrolledAreaChanged",
100 dispatchEvent: function () {
101 document.getElementById("scrollable-div").style.width = "50000px";
102 document.getElementById("scrollable-div").style.height = "50000px";
103 },
104 canRun: function () {
105 return true;
106 },
107 todoMismatch: [],
108 },
109 { description: "InternalScrollAreaEvent (MozScrolledAreaChanged, shrinking)",
110 target: function () { return document; }, eventType: "MozScrolledAreaChanged",
111 dispatchEvent: function () {
112 document.getElementById("scrollable-div").style.width = "30px";
113 document.getElementById("scrollable-div").style.height = "30px";
114 },
115 canRun: function () {
116 return true;
117 },
118 todoMismatch: [],
119 },
120 { description: "WidgetKeyboardEvent (keydown of 'a' key without modifiers)",
121 targetID: "input-text", eventType: "keydown",
122 dispatchEvent: function () {
123 document.getElementById(this.targetID).value = "";
124 document.getElementById(this.targetID).focus();
125 synthesizeNativeKey(KEYBOARD_LAYOUT_EN_US, kIsWin ? WIN_VK_A : MAC_VK_ANSI_A,
126 {}, "a", "a");
127 },
128 canRun: function () {
129 return (kIsMac || kIsWin);
130 },
131 todoMismatch: [],
132 },
133 { description: "WidgetKeyboardEvent (keyup of 'a' key without modifiers)",
134 targetID: "input-text", eventType: "keydown",
135 dispatchEvent: function () {
136 document.getElementById(this.targetID).value = "";
137 document.getElementById(this.targetID).focus();
138 synthesizeNativeKey(KEYBOARD_LAYOUT_EN_US, kIsWin ? WIN_VK_A : MAC_VK_ANSI_A,
139 {}, "a", "a");
140 },
141 canRun: function () {
142 return (kIsMac || kIsWin);
143 },
144 todoMismatch: [],
145 },
146 { description: "WidgetKeyboardEvent (keypress of 'b' key with Shift)",
147 targetID: "input-text", eventType: "keypress",
148 dispatchEvent: function () {
149 document.getElementById(this.targetID).value = "";
150 document.getElementById(this.targetID).focus();
151 synthesizeNativeKey(KEYBOARD_LAYOUT_EN_US, kIsWin ? WIN_VK_B : MAC_VK_ANSI_B,
152 { shiftKey: true }, "B", "B");
153 },
154 canRun: function () {
155 return (kIsMac || kIsWin);
156 },
157 todoMismatch: [],
158 },
159 { description: "WidgetKeyboardEvent (keypress of 'c' key with Accel)",
160 targetID: "input-text", eventType: "keypress",
161 dispatchEvent: function () {
162 document.getElementById(this.targetID).value = "";
163 document.getElementById(this.targetID).focus();
164 synthesizeNativeKey(KEYBOARD_LAYOUT_EN_US, kIsWin ? WIN_VK_C : MAC_VK_ANSI_C,
165 { accelKey: true }, kIsWin ? "\u0003" : "c", "c");
166 },
167 canRun: function () {
168 return (kIsMac || kIsWin);
169 },
170 todoMismatch: [],
171 },
172 { description: "WidgetKeyboardEvent (keyup during composition)",
173 targetID: "input-text", eventType: "keyup",
174 dispatchEvent: function () {
175 document.getElementById(this.targetID).value = "";
176 document.getElementById(this.targetID).focus();
177 synthesizeKey("a", { type: "keydown" });
178 synthesizeComposition({ type: "compositionstart" });
179 synthesizeComposition({ type: "compositionupdate", data: "\u306D" });
180 synthesizeText({ "composition":
181 { "string": "\u306D",
182 "clauses":
183 [
184 { "length": 1, "attr": COMPOSITION_ATTR_RAWINPUT }
185 ]
186 },
187 "caret": { "start": 1, "length": 0 }
188 });
189 synthesizeKey("a", { type: "keyup" });
190 synthesizeComposition({ type: "compositionupdate", data: "\u306D" });
191 synthesizeText({ "composition":
192 { "string": "\u306D",
193 "clauses":
194 [
195 { "length": 0, "attr": 0 }
196 ]
197 },
198 "caret": { "start": 1, "length": 0 }
199 });
200 synthesizeComposition({ type: "compositionend", data: "\u732B" });
201 },
202 canRun: function () {
203 return true;
204 },
205 todoMismatch: [ ],
206 },
207 { description: "WidgetKeyboardEvent (keydown during composition)",
208 targetID: "input-text", eventType: "keydown",
209 dispatchEvent: function () {
210 document.getElementById(this.targetID).value = "";
211 document.getElementById(this.targetID).focus();
212 synthesizeComposition({ type: "compositionstart" });
213 synthesizeComposition({ type: "compositionupdate", data: "\u306D" });
214 synthesizeText({ "composition":
215 { "string": "\u306D",
216 "clauses":
217 [
218 { "length": 1, "attr": COMPOSITION_ATTR_RAWINPUT }
219 ]
220 },
221 "caret": { "start": 1, "length": 0 }
222 });
223 synthesizeKey("VK_RETURN", { type: "keydown" });
224 synthesizeComposition({ type: "compositionupdate", data: "\u306D" });
225 synthesizeText({ "composition":
226 { "string": "\u306D",
227 "clauses":
228 [
229 { "length": 0, "attr": 0 }
230 ]
231 },
232 "caret": { "start": 1, "length": 0 }
233 });
234 synthesizeComposition({ type: "compositionend", data: "\u732B" });
235 synthesizeKey("VK_RETURN", { type: "keyup" });
236 },
237 canRun: function () {
238 return true;
239 },
240 todoMismatch: [ ],
241 },
242 { description: "WidgetMouseEvent (mousedown of left button without modifier)",
243 targetID: "button", eventType: "mousedown",
244 dispatchEvent: function () {
245 synthesizeMouseAtCenter(document.getElementById(this.targetID),
246 { button: 0 });
247 },
248 canRun: function () {
249 return true;
250 },
251 todoMismatch: [],
252 },
253 { description: "WidgetMouseEvent (click of middle button with Shift)",
254 // XXX I'm not sure why middle click event isn't fired on button element.
255 targetID: "input-text", eventType: "click",
256 dispatchEvent: function () {
257 document.getElementById(this.targetID).value = "";
258 synthesizeMouseAtCenter(document.getElementById(this.targetID),
259 { button: 1, shiftKey: true, pressure: 0.5 });
260 },
261 canRun: function () {
262 return true;
263 },
264 todoMismatch: [],
265 },
266 { description: "WidgetMouseEvent (mouseup of right button with Alt)",
267 targetID: "button", eventType: "mouseup",
268 dispatchEvent: function () {
269 document.getElementById(this.targetID).value = "";
270 synthesizeMouseAtCenter(document.getElementById(this.targetID),
271 { button: 2, altKey: true });
272 },
273 canRun: function () {
274 return true;
275 },
276 todoMismatch: [],
277 },
278 { description: "WidgetDragEvent",
279 targetID: "input-text", eventType: "dragstart",
280 dispatchEvent: function () {
281 return;
282 },
283 canRun: function () {
284 todo(false, "WidgetDragEvent isn't tested");
285 return false;
286 },
287 todoMismatch: [],
288 },
289 { description: "WidgetTextEvent (text)",
290 targetID: "input-text", eventType: "text",
291 dispatchEvent: function () {
292 document.getElementById(this.targetID).value = "";
293 document.getElementById(this.targetID).focus();
294 synthesizeComposition({ type: "compositionstart" });
295 synthesizeComposition({ type: "compositionupdate", data: "\u306D" });
296 synthesizeText({ "composition":
297 { "string": "\u306D",
298 "clauses":
299 [
300 { "length": 0, "attr": 0 }
301 ]
302 },
303 "caret": { "start": 1, "length": 0 }
304 });
305 synthesizeComposition({ type: "compositionend", data: "\u732B" });
306 },
307 canRun: function () {
308 return true;
309 },
310 todoMismatch: [ ],
311 },
312 { description: "WidgetCompositionEvent (compositionupdate)",
313 targetID: "input-text", eventType: "compositionupdate",
314 dispatchEvent: function () {
315 document.getElementById(this.targetID).value = "";
316 document.getElementById(this.targetID).focus();
317 synthesizeComposition({ type: "compositionstart" });
318 synthesizeComposition({ type: "compositionupdate", data: "\u30E9\u30FC\u30E1\u30F3" });
319 synthesizeText({ "composition":
320 { "string": "\u30E9\u30FC\u30E1\u30F3",
321 "clauses":
322 [
323 { "length": 0, "attr": 0 }
324 ]
325 },
326 "caret": { "start": 4, "length": 0 }
327 });
328 synthesizeComposition({ type: "compositionend", data: "\u30E9\u30FC\u30E1\u30F3" });
329 },
330 canRun: function () {
331 return true;
332 },
333 todoMismatch: [ ],
334 },
335 { description: "InternalEditorInputEvent (input at key input)",
336 targetID: "input-text", eventType: "input",
337 dispatchEvent: function () {
338 document.getElementById(this.targetID).value = "";
339 document.getElementById(this.targetID).focus();
340 synthesizeNativeKey(KEYBOARD_LAYOUT_EN_US, kIsWin ? WIN_VK_B : MAC_VK_ANSI_B,
341 { shiftKey: true }, "B", "B");
342 },
343 canRun: function () {
344 return (kIsMac || kIsWin);
345 },
346 todoMismatch: [],
347 },
348 { description: "InternalEditorInputEvent (input at composing)",
349 targetID: "input-text", eventType: "input",
350 dispatchEvent: function () {
351 document.getElementById(this.targetID).value = "";
352 document.getElementById(this.targetID).focus();
353 synthesizeComposition({ type: "compositionstart" });
354 synthesizeComposition({ type: "compositionupdate", data: "\u30E9\u30FC\u30E1\u30F3" });
355 synthesizeText({ "composition":
356 { "string": "\u30E9\u30FC\u30E1\u30F3",
357 "clauses":
358 [
359 { "length": 4, "attr": COMPOSITION_ATTR_RAWINPUT }
360 ]
361 },
362 "caret": { "start": 4, "length": 0 }
363 });
364 },
365 canRun: function () {
366 return true;
367 },
368 todoMismatch: [ ],
369 },
370 { description: "InternalEditorInputEvent (input at committing)",
371 targetID: "input-text", eventType: "input",
372 dispatchEvent: function () {
373 synthesizeText({ "composition":
374 { "string": "\u30E9\u30FC\u30E1\u30F3",
375 "clauses":
376 [
377 { "length": 0, "attr": 0 }
378 ]
379 },
380 "caret": { "start": 4, "length": 0 }
381 });
382 synthesizeComposition({ type: "compositionend", data: "\u30E9\u30FC\u30E1\u30F3" });
383 },
384 canRun: function () {
385 return true;
386 },
387 todoMismatch: [ ],
388 },
389 { description: "WidgetMouseScrollEvent (DOMMouseScroll, vertical)",
390 targetID: "input-text", eventType: "DOMMouseScroll",
391 dispatchEvent: function () {
392 document.getElementById(this.targetID).value = "";
393 synthesizeWheel(document.getElementById(this.targetID), 3, 4,
394 { deltaY: 30, lineOrPageDeltaY: 2 });
395 },
396 canRun: function () {
397 return true;
398 },
399 todoMismatch: [ ],
400 },
401 { description: "WidgetMouseScrollEvent (DOMMouseScroll, horizontal)",
402 targetID: "input-text", eventType: "DOMMouseScroll",
403 dispatchEvent: function () {
404 document.getElementById(this.targetID).value = "";
405 synthesizeWheel(document.getElementById(this.targetID), 4, 5,
406 { deltaX: 30, lineOrPageDeltaX: 2, shiftKey: true });
407 },
408 canRun: function () {
409 return true;
410 },
411 todoMismatch: [ ],
412 },
413 { description: "WidgetMouseScrollEvent (MozMousePixelScroll, vertical)",
414 targetID: "input-text", eventType: "MozMousePixelScroll",
415 dispatchEvent: function () {
416 document.getElementById(this.targetID).value = "";
417 synthesizeWheel(document.getElementById(this.targetID), 3, 4,
418 { deltaY: 20, lineOrPageDeltaY: 1, altKey: true });
419 },
420 canRun: function () {
421 return true;
422 },
423 todoMismatch: [ ],
424 },
425 { description: "WidgetMouseScrollEvent (MozMousePixelScroll, horizontal)",
426 targetID: "input-text", eventType: "MozMousePixelScroll",
427 dispatchEvent: function () {
428 document.getElementById(this.targetID).value = "";
429 synthesizeWheel(document.getElementById(this.targetID), 4, 5,
430 { deltaX: 20, lineOrPageDeltaX: 1, ctrlKey: true });
431 },
432 canRun: function () {
433 return true;
434 },
435 todoMismatch: [ ],
436 },
437 { description: "WidgetWheelEvent (wheel, vertical)",
438 targetID: "input-text", eventType: "wheel",
439 dispatchEvent: function () {
440 document.getElementById(this.targetID).value = "";
441 synthesizeWheel(document.getElementById(this.targetID), 3, 4,
442 { deltaY: 20, lineOrPageDeltaY: 1, altKey: true });
443 },
444 canRun: function () {
445 return true;
446 },
447 todoMismatch: [ ],
448 },
449 { description: "WidgetWheelEvent (wheel, horizontal)",
450 targetID: "input-text", eventType: "wheel",
451 dispatchEvent: function () {
452 document.getElementById(this.targetID).value = "";
453 synthesizeWheel(document.getElementById(this.targetID), 4, 5,
454 { deltaX: 20, lineOrPageDeltaX: 1, ctrlKey: true });
455 },
456 canRun: function () {
457 return true;
458 },
459 todoMismatch: [ ],
460 },
461 { description: "WidgetWheelEvent (wheel, both)",
462 targetID: "input-text", eventType: "wheel",
463 dispatchEvent: function () {
464 document.getElementById(this.targetID).value = "";
465 synthesizeWheel(document.getElementById(this.targetID), 4, 5,
466 { deltaX: 20, deltaY: 10,
467 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 });
468 },
469 canRun: function () {
470 return true;
471 },
472 todoMismatch: [ ],
473 },
474 { description: "WidgetTouchEvent (touchstart)",
475 target: function () { return document; }, eventType: "touchstart",
476 dispatchEvent: function () {
477 synthesizeTouchAtPoint(1, 2, { id: 10, rx: 4, ry: 3, angle: 0, force: 1, shiftKey: true});
478 },
479 canRun: function () {
480 return true;
481 },
482 todoMismatch: [ ],
483 },
484 { description: "WidgetTouchEvent (touchend)",
485 target: function () { return document; }, eventType: "touchend",
486 dispatchEvent: function () {
487 synthesizeTouchAtPoint(4, 6, { id: 5, rx: 1, ry: 2, angle: 0.5, force: 0.8, ctrlKey: true});
488 },
489 canRun: function () {
490 return true;
491 },
492 todoMismatch: [ ],
493 },
494 { description: "InternalFormEvent (reset)",
495 targetID: "form", eventType: "reset",
496 dispatchEvent: function () {
497 document.getElementById("form").reset();
498 },
499 canRun: function () {
500 return true;
501 },
502 todoMismatch: [ ],
503 },
504 { description: "WidgetCommandEvent",
505 targetID: "input-text", eventType: "",
506 dispatchEvent: function () {
507 return;
508 },
509 canRun: function () {
510 todo(false, "WidgetCommandEvent isn't tested");
511 return false;
512 },
513 todoMismatch: [],
514 },
515 { description: "InternalClipboardEvent (copy)",
516 targetID: "input-text", eventType: "copy",
517 dispatchEvent: function () {
518 document.getElementById("input-text").value = "go to clipboard!";
519 document.getElementById("input-text").focus();
520 document.getElementById("input-text").select();
521 synthesizeKey("c", { accelKey: true });
522 },
523 canRun: function () {
524 return true;
525 },
526 todoMismatch: [ ],
527 },
528 { description: "InternalUIEvent (DOMActivate)",
529 targetID: "button", eventType: "DOMActivate",
530 dispatchEvent: function () {
531 synthesizeMouseAtCenter(document.getElementById(this.targetID),
532 { button: 0, shiftKey: true });
533 },
534 canRun: function () {
535 return true;
536 },
537 todoMismatch: [],
538 },
539 { description: "InternalFocusEvent (focus)",
540 targetID: "input-text", eventType: "focus",
541 dispatchEvent: function () {
542 document.getElementById(this.targetID).focus();
543 },
544 canRun: function () {
545 return true;
546 },
547 todoMismatch: [],
548 },
549 { description: "InternalFocusEvent (blur)",
550 targetID: "input-text", eventType: "blur",
551 dispatchEvent: function () {
552 document.getElementById(this.targetID).blur();
553 },
554 canRun: function () {
555 return true;
556 },
557 todoMismatch: [],
558 },
559 { description: "WidgetSimpleGestureEvent",
560 targetID: "", eventType: "",
561 dispatchEvent: function () {
562 return;
563 },
564 canRun: function () {
565 // Simple gesture event may be handled before it comes content.
566 // So, we cannot test it in this test.
567 todo(false, "WidgetSimpleGestureEvent isn't tested");
568 return false;
569 },
570 todoMismatch: [],
571 },
572 { description: "InternalTransitionEvent (transitionend)",
573 targetID: "a", eventType: "transitionend",
574 dispatchEvent: function () {
575 document.getElementById(this.targetID).focus();
576 },
577 canRun: function () {
578 return true;
579 },
580 todoMismatch: [],
581 },
582 { description: "InternalAnimationEvent (animationend)",
583 targetID: "animated-div", eventType: "animationend",
584 dispatchEvent: function () {
585 document.getElementById(this.targetID).className = "slidin";
586 },
587 canRun: function () {
588 return true;
589 },
590 todoMismatch: [],
591 },
592 { description: "InternalMutationEvent (DOMAttrModified)",
593 targetID: "animated-div", eventType: "DOMAttrModified",
594 dispatchEvent: function () {
595 document.getElementById(this.targetID).setAttribute("x-data", "foo");
596 },
597 canRun: function () {
598 return true;
599 },
600 todoMismatch: [],
601 },
602 { description: "InternalMutationEvent (DOMNodeInserted)",
603 targetID: "animated-div", eventType: "DOMNodeInserted",
604 dispatchEvent: function () {
605 var div = document.createElement("div");
606 div.id = "inserted-div";
607 document.getElementById("animated-div").appendChild(div);
608 },
609 canRun: function () {
610 return true;
611 },
612 todoMismatch: [],
613 },
614 { description: "InternalMutationEvent (DOMNodeRemoved)",
615 targetID: "animated-div", eventType: "DOMNodeRemoved",
616 dispatchEvent: function () {
617 document.getElementById("animated-div").removeChild(document.getElementById("inserted-div"));
618 },
619 canRun: function () {
620 return true;
621 },
622 todoMismatch: [],
623 },
624 ];
626 function doTest(aTest)
627 {
628 if (!aTest.canRun()) {
629 SimpleTest.executeSoon(runNextTest);
630 return;
631 }
632 gEvent = null;
633 gCopiedEvent = [];
634 var target = aTest.target ? aTest.target() : document.getElementById(aTest.targetID);
635 target.addEventListener(aTest.eventType, onEvent, true);
636 gCallback = function () {
637 var description = aTest.description + " (gCallPreventDefault=" + gCallPreventDefault + ")";
638 target.removeEventListener(aTest.eventType, onEvent, true);
639 ok(gEvent !== null, description + ": failed to get duplicated event");
640 ok(gCopiedEvent.length > 0, description + ": count of attribute of the event must be larger than 0");
641 for (var i = 0; i < gCopiedEvent.length; ++i) {
642 var name = gCopiedEvent[i].name;
643 if (name == "rangeOffset") {
644 todo(false, description + ": " + name + " attribute value is never reset (" + gEvent[name] + ")");
645 } else if (name == "eventPhase") {
646 is(gEvent[name], 0, description + ": mismatch with fixed value (" + name + ")");
647 } else if (name == "rangeParent" || name == "currentTarget") {
648 is(gEvent[name], null, description + ": mismatch with fixed value (" + name + ")");
649 } else if (aTest.todoMismatch.indexOf(name) >= 0) {
650 todo_is(gEvent[name], gCopiedEvent[i].value, description + ": mismatch (" + name + ")");
651 } else {
652 is(gEvent[name], gCopiedEvent[i].value, description + ": mismatch (" + name + ")");
653 }
654 }
655 runNextTest();
656 };
657 aTest.dispatchEvent();
658 }
660 var gIndex = -1;
661 function runNextTest()
662 {
663 if (++gIndex == kTests.length) {
664 if (gCallPreventDefault) {
665 finish();
666 return;
667 }
668 // Test with a call of preventDefault() of the events.
669 gCallPreventDefault = true;
670 gIndex = -1;
671 // Restoring the initial state of all elements.
672 document.getElementById("scrollable-div").style.height = "30px";
673 document.getElementById("scrollable-div").style.width = "30px";
674 document.getElementById("scrolled-div").style.height = "10px";
675 document.getElementById("scrolled-div").style.width = "10px";
676 document.getElementById("input-text").value = "";
677 document.getElementById("animated-div").className = "";
678 document.getElementById("animated-div").removeAttribute("x-data");
679 if (document.activeElement) {
680 document.activeElement.blur();
681 }
682 window.requestAnimationFrame(function () {
683 setTimeout(runNextTest, 0);
684 });
685 return;
686 }
687 doTest(kTests[gIndex]);
688 }
690 function init()
691 {
692 SpecialPowers.setBoolPref("middlemouse.contentLoadURL", false);
693 SpecialPowers.setBoolPref("middlemouse.paste", false);
694 SpecialPowers.setBoolPref("general.autoScroll", false);
695 SpecialPowers.setIntPref("mousewheel.default.action", 0);
696 SpecialPowers.setIntPref("mousewheel.default.action.override_x", -1);
697 SpecialPowers.setIntPref("mousewheel.with_shift.action", 0);
698 SpecialPowers.setIntPref("mousewheel.with_shift.action.override_x", -1);
699 SpecialPowers.setIntPref("mousewheel.with_control.action", 0);
700 SpecialPowers.setIntPref("mousewheel.with_control.action.override_x", -1);
701 SpecialPowers.setIntPref("mousewheel.with_alt.action", 0);
702 SpecialPowers.setIntPref("mousewheel.with_alt.action.override_x", -1);
703 SpecialPowers.setIntPref("mousewheel.with_meta.action", 0);
704 SpecialPowers.setIntPref("mousewheel.with_meta.action.override_x", -1);
706 runNextTest();
707 }
709 function finish()
710 {
711 SpecialPowers.clearUserPref("middlemouse.contentLoadURL");
712 SpecialPowers.clearUserPref("middlemouse.paste");
713 SpecialPowers.clearUserPref("general.autoScroll");
714 SpecialPowers.clearUserPref("mousewheel.default.action");
715 SpecialPowers.clearUserPref("mousewheel.default.action.override_x");
716 SpecialPowers.clearUserPref("mousewheel.with_shift.action");
717 SpecialPowers.clearUserPref("mousewheel.with_shift.action.override_x");
718 SpecialPowers.clearUserPref("mousewheel.with_control.action");
719 SpecialPowers.clearUserPref("mousewheel.with_control.action.override_x");
720 SpecialPowers.clearUserPref("mousewheel.with_alt.action");
721 SpecialPowers.clearUserPref("mousewheel.with_alt.action.override_x");
722 SpecialPowers.clearUserPref("mousewheel.with_meta.action");
723 SpecialPowers.clearUserPref("mousewheel.with_meta.action.override_x");
725 SimpleTest.finish();
726 }
728 SimpleTest.waitForFocus(init);
730 </script>
731 </body>