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 function test()
2 {
3 const kPrefName_AutoScroll = "general.autoScroll";
4 Services.prefs.setBoolPref(kPrefName_AutoScroll, true);
6 gBrowser.selectedTab = gBrowser.addTab();
8 const kNoKeyEvents = 0;
9 const kKeyDownEvent = 1;
10 const kKeyPressEvent = 2;
11 const kKeyUpEvent = 4;
12 const kAllKeyEvents = 7;
14 var expectedKeyEvents;
15 var dispatchedKeyEvents;
16 var key;
17 var root;
19 /**
20 * Encapsulates EventUtils.sendChar().
21 */
22 function sendChar(aChar)
23 {
24 key = aChar;
25 dispatchedKeyEvents = kNoKeyEvents;
26 EventUtils.sendChar(key, gBrowser.contentWindow);
27 is(dispatchedKeyEvents, expectedKeyEvents,
28 "unexpected key events were dispatched or not dispatched: " + key);
29 }
31 /**
32 * Encapsulates EventUtils.sendKey().
33 */
34 function sendKey(aKey)
35 {
36 key = aKey;
37 dispatchedKeyEvents = kNoKeyEvents;
38 EventUtils.sendKey(key, gBrowser.contentWindow);
39 is(dispatchedKeyEvents, expectedKeyEvents,
40 "unexpected key events were dispatched or not dispatched: " + key);
41 }
43 function onKey(aEvent)
44 {
45 if (aEvent.target != root && aEvent.target != root.ownerDocument.body) {
46 ok(false, "unknown target: " + aEvent.target.tagName);
47 return;
48 }
50 var keyFlag;
51 switch (aEvent.type) {
52 case "keydown":
53 keyFlag = kKeyDownEvent;
54 break;
55 case "keypress":
56 keyFlag = kKeyPressEvent;
57 break;
58 case "keyup":
59 keyFlag = kKeyUpEvent;
60 break;
61 default:
62 ok(false, "Unknown events: " + aEvent.type);
63 return;
64 }
65 dispatchedKeyEvents |= keyFlag;
66 is(keyFlag, expectedKeyEvents & keyFlag, aEvent.type + " fired: " + key);
67 }
69 waitForExplicitFinish();
70 gBrowser.selectedBrowser.addEventListener("pageshow", onLoad, false);
71 var dataUri = 'data:text/html,<body style="height:10000px;"></body>';
72 gBrowser.loadURI(dataUri);
74 function onLoad() {
75 gBrowser.selectedBrowser.removeEventListener("pageshow", onLoad, false);
76 waitForFocus(onFocus, content);
77 }
79 function onFocus() {
80 var doc = gBrowser.contentDocument;
82 root = doc.documentElement;
83 root.addEventListener("keydown", onKey, true);
84 root.addEventListener("keypress", onKey, true);
85 root.addEventListener("keyup", onKey, true);
87 // Test whether the key events are handled correctly under normal condition
88 expectedKeyEvents = kAllKeyEvents;
89 sendChar("A");
91 // Start autoscrolling by middle button lick on the page
92 EventUtils.synthesizeMouse(root, 10, 10, { button: 1 },
93 gBrowser.contentWindow);
95 // Before continuing the test, we need to ensure that the IPC
96 // message that starts autoscrolling has had time to arrive.
97 executeSoon(continueTest);
98 }
100 function continueTest() {
101 // Most key events should be eaten by the browser.
102 expectedKeyEvents = kNoKeyEvents;
103 sendChar("A");
104 sendKey("DOWN");
105 sendKey("RETURN");
106 sendKey("RETURN");
107 sendKey("HOME");
108 sendKey("END");
109 sendKey("TAB");
110 sendKey("RETURN");
112 // Finish autoscrolling by ESC key. Note that only keydown and keypress
113 // events are eaten because keyup event is fired *after* the autoscrolling
114 // is finished.
115 expectedKeyEvents = kKeyUpEvent;
116 sendKey("ESCAPE");
118 // Test whether the key events are handled correctly under normal condition
119 expectedKeyEvents = kAllKeyEvents;
120 sendChar("A");
122 root.removeEventListener("keydown", onKey, true);
123 root.removeEventListener("keypress", onKey, true);
124 root.removeEventListener("keyup", onKey, true);
126 // restore the changed prefs
127 if (Services.prefs.prefHasUserValue(kPrefName_AutoScroll))
128 Services.prefs.clearUserPref(kPrefName_AutoScroll);
130 // cleaning-up
131 gBrowser.removeCurrentTab();
133 finish();
134 }
135 }