|
1 function test() |
|
2 { |
|
3 const kPrefName_AutoScroll = "general.autoScroll"; |
|
4 Services.prefs.setBoolPref(kPrefName_AutoScroll, true); |
|
5 |
|
6 gBrowser.selectedTab = gBrowser.addTab(); |
|
7 |
|
8 const kNoKeyEvents = 0; |
|
9 const kKeyDownEvent = 1; |
|
10 const kKeyPressEvent = 2; |
|
11 const kKeyUpEvent = 4; |
|
12 const kAllKeyEvents = 7; |
|
13 |
|
14 var expectedKeyEvents; |
|
15 var dispatchedKeyEvents; |
|
16 var key; |
|
17 var root; |
|
18 |
|
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 } |
|
30 |
|
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 } |
|
42 |
|
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 } |
|
49 |
|
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 } |
|
68 |
|
69 waitForExplicitFinish(); |
|
70 gBrowser.selectedBrowser.addEventListener("pageshow", onLoad, false); |
|
71 var dataUri = 'data:text/html,<body style="height:10000px;"></body>'; |
|
72 gBrowser.loadURI(dataUri); |
|
73 |
|
74 function onLoad() { |
|
75 gBrowser.selectedBrowser.removeEventListener("pageshow", onLoad, false); |
|
76 waitForFocus(onFocus, content); |
|
77 } |
|
78 |
|
79 function onFocus() { |
|
80 var doc = gBrowser.contentDocument; |
|
81 |
|
82 root = doc.documentElement; |
|
83 root.addEventListener("keydown", onKey, true); |
|
84 root.addEventListener("keypress", onKey, true); |
|
85 root.addEventListener("keyup", onKey, true); |
|
86 |
|
87 // Test whether the key events are handled correctly under normal condition |
|
88 expectedKeyEvents = kAllKeyEvents; |
|
89 sendChar("A"); |
|
90 |
|
91 // Start autoscrolling by middle button lick on the page |
|
92 EventUtils.synthesizeMouse(root, 10, 10, { button: 1 }, |
|
93 gBrowser.contentWindow); |
|
94 |
|
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 } |
|
99 |
|
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"); |
|
111 |
|
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"); |
|
117 |
|
118 // Test whether the key events are handled correctly under normal condition |
|
119 expectedKeyEvents = kAllKeyEvents; |
|
120 sendChar("A"); |
|
121 |
|
122 root.removeEventListener("keydown", onKey, true); |
|
123 root.removeEventListener("keypress", onKey, true); |
|
124 root.removeEventListener("keyup", onKey, true); |
|
125 |
|
126 // restore the changed prefs |
|
127 if (Services.prefs.prefHasUserValue(kPrefName_AutoScroll)) |
|
128 Services.prefs.clearUserPref(kPrefName_AutoScroll); |
|
129 |
|
130 // cleaning-up |
|
131 gBrowser.removeCurrentTab(); |
|
132 |
|
133 finish(); |
|
134 } |
|
135 } |