|
1 <!DOCTYPE HTML> |
|
2 <html> |
|
3 <head> |
|
4 <title>Test for default action of WheelEvent</title> |
|
5 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
6 <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script> |
|
7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> |
|
8 </head> |
|
9 <body> |
|
10 <p id="display"></p> |
|
11 <div id="scrollable" style="overflow: auto; width: 200px; height: 200px;"> |
|
12 <div id="clipper" style="margin: 0; padding: 0; overflow: hidden; width: 3000px; height: 3000px;"> |
|
13 <div id="scrolled" style="width: 5000px; height: 5000px;"> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
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> |
|
40 </div> |
|
41 </div> |
|
42 </div> |
|
43 <div id="spacerForBody"></div> |
|
44 <div id="content" style="display: none"> |
|
45 |
|
46 </div> |
|
47 <pre id="test"> |
|
48 <script type="application/javascript"> |
|
49 |
|
50 SimpleTest.waitForFocus(runTests, window); |
|
51 |
|
52 var winUtils = SpecialPowers.getDOMWindowUtils(window); |
|
53 // grab refresh driver |
|
54 winUtils.advanceTimeAndRefresh(100); |
|
55 |
|
56 var gScrollableElement = document.getElementById("scrollable"); |
|
57 var gScrolledElement = document.getElementById("scrolled"); |
|
58 var gSpacerForBodyElement = document.getElementById("spacerForBody"); |
|
59 |
|
60 function is() |
|
61 { |
|
62 window.opener.is.apply(window.opener, arguments); |
|
63 } |
|
64 |
|
65 function ok() |
|
66 { |
|
67 window.opener.ok.apply(window.opener, arguments); |
|
68 } |
|
69 |
|
70 function hitEventLoop(aFunc, aTimes) |
|
71 { |
|
72 winUtils.advanceTimeAndRefresh(100); |
|
73 |
|
74 if (--aTimes) { |
|
75 setTimeout(hitEventLoop, 0, aFunc, aTimes); |
|
76 } else { |
|
77 setTimeout(aFunc, 20); |
|
78 } |
|
79 } |
|
80 |
|
81 function onZoomReset(aCallback) { |
|
82 var topic = "browser-fullZoom:zoomReset"; |
|
83 SpecialPowers.addObserver(function observe() { |
|
84 SpecialPowers.removeObserver(observe, topic); |
|
85 SimpleTest.executeSoon(aCallback); |
|
86 }, topic, false); |
|
87 } |
|
88 |
|
89 function setDeltaMultiplierSettings(aSettings) |
|
90 { |
|
91 SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_x", aSettings.deltaMultiplierX * 100); |
|
92 SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_y", aSettings.deltaMultiplierY * 100); |
|
93 SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); |
|
94 SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_x", aSettings.deltaMultiplierX * 100); |
|
95 SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_y", aSettings.deltaMultiplierY * 100); |
|
96 SpecialPowers.setIntPref("mousewheel.with_alt.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); |
|
97 SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_x", aSettings.deltaMultiplierX * 100); |
|
98 SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_y", aSettings.deltaMultiplierY * 100); |
|
99 SpecialPowers.setIntPref("mousewheel.with_control.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); |
|
100 SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_x", aSettings.deltaMultiplierX * 100); |
|
101 SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_y", aSettings.deltaMultiplierY * 100); |
|
102 SpecialPowers.setIntPref("mousewheel.with_meta.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); |
|
103 SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_x", aSettings.deltaMultiplierX * 100); |
|
104 SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_y", aSettings.deltaMultiplierY * 100); |
|
105 SpecialPowers.setIntPref("mousewheel.with_shift.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); |
|
106 SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_x", aSettings.deltaMultiplierX * 100); |
|
107 SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_y", aSettings.deltaMultiplierY * 100); |
|
108 SpecialPowers.setIntPref("mousewheel.with_win.delta_multiplier_z", aSettings.deltaMultiplierZ * 100); |
|
109 } |
|
110 |
|
111 function doTestScroll(aSettings, aCallback) |
|
112 { |
|
113 const kNoScroll = 0x00; |
|
114 const kScrollUp = 0x01; |
|
115 const kScrollDown = 0x02; |
|
116 const kScrollLeft = 0x04; |
|
117 const kScrollRight = 0x08; |
|
118 |
|
119 const kTests = [ |
|
120 { description: "Scroll to bottom by pixel scroll even if lineOrPageDelta is 0", |
|
121 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
122 deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, |
|
123 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
124 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
125 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
126 expected: kScrollDown }, |
|
127 { description: "Scroll to bottom by pixel scroll when lineOrPageDelta is 1", |
|
128 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
129 deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, |
|
130 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: false, |
|
131 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
132 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
133 expected: kScrollDown }, |
|
134 { description: "Scroll to top by pixel scroll even if lineOrPageDelta is 0", |
|
135 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
136 deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, |
|
137 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
138 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
139 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
140 expected: kScrollUp }, |
|
141 { description: "Scroll to top by pixel scroll when lineOrPageDelta is -1", |
|
142 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
143 deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, |
|
144 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, isMomentum: false, |
|
145 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
146 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
147 expected: kScrollUp }, |
|
148 { description: "Scroll to right by pixel scroll even if lineOrPageDelta is 0", |
|
149 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
150 deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, |
|
151 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
152 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
153 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
154 expected: kScrollRight }, |
|
155 { description: "Scroll to right by pixel scroll when lineOrPageDelta is 1", |
|
156 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
157 deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, |
|
158 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, isMomentum: false, |
|
159 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
160 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
161 expected: kScrollRight }, |
|
162 { description: "Scroll to left by pixel scroll even if lineOrPageDelta is 0", |
|
163 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
164 deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, |
|
165 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
166 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
167 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
168 expected: kScrollLeft }, |
|
169 { description: "Scroll to left by pixel scroll when lineOrPageDelta is -1", |
|
170 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
171 deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, |
|
172 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, isMomentum: false, |
|
173 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
174 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
175 expected: kScrollLeft }, |
|
176 { description: "Scroll to bottom-right by pixel scroll", |
|
177 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
178 deltaX: 8.0, deltaY: 8.0, deltaZ: 0.0, |
|
179 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
180 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
181 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
182 expected: kScrollDown | kScrollRight }, |
|
183 { description: "Scroll to bottom-left by pixel scroll", |
|
184 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
185 deltaX: -8.0, deltaY: 8.0, deltaZ: 0.0, |
|
186 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
187 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
188 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
189 expected: kScrollDown | kScrollLeft }, |
|
190 { description: "Scroll to top-left by pixel scroll", |
|
191 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
192 deltaX: -8.0, deltaY: -8.0, deltaZ: 0.0, |
|
193 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
194 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
195 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
196 expected: kScrollUp | kScrollLeft }, |
|
197 { description: "Scroll to top-right by pixel scroll", |
|
198 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
199 deltaX: 8.0, deltaY: -8.0, deltaZ: 0.0, |
|
200 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
201 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
202 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
203 expected: kScrollUp | kScrollRight }, |
|
204 { description: "Not Scroll by pixel scroll for z", |
|
205 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
206 deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, |
|
207 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
208 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
209 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
210 expected: kNoScroll }, |
|
211 |
|
212 { description: "Scroll to bottom by line scroll even if lineOrPageDelta is 0", |
|
213 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
214 deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, |
|
215 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: false, |
|
216 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
217 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
218 expected: kScrollDown }, |
|
219 { description: "Scroll to bottom by line scroll when lineOrPageDelta is 1", |
|
220 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
221 deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, |
|
222 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: false, |
|
223 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
224 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
225 expected: kScrollDown }, |
|
226 { description: "Scroll to top by line scroll even if lineOrPageDelta is 0", |
|
227 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
228 deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, |
|
229 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
230 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
231 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
232 expected: kScrollUp }, |
|
233 { description: "Scroll to top by line scroll when lineOrPageDelta is -1", |
|
234 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
235 deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, |
|
236 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, isMomentum: false, |
|
237 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
238 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
239 expected: kScrollUp }, |
|
240 { description: "Scroll to right by line scroll even if lineOrPageDelta is 0", |
|
241 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
242 deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, |
|
243 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
244 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
245 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
246 expected: kScrollRight }, |
|
247 { description: "Scroll to right by line scroll when lineOrPageDelta is 1", |
|
248 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
249 deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, |
|
250 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, isMomentum: false, |
|
251 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
252 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
253 expected: kScrollRight }, |
|
254 { description: "Scroll to left by line scroll even if lineOrPageDelta is 0", |
|
255 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
256 deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, |
|
257 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
258 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
259 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
260 expected: kScrollLeft }, |
|
261 { description: "Scroll to left by line scroll when lineOrPageDelta is -1", |
|
262 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
263 deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, |
|
264 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, isMomentum: false, |
|
265 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
266 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
267 expected: kScrollLeft }, |
|
268 { description: "Scroll to bottom-right by line scroll", |
|
269 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
270 deltaX: 0.5, deltaY: 0.5, deltaZ: 0.0, |
|
271 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
272 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
273 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
274 expected: kScrollDown | kScrollRight }, |
|
275 { description: "Scroll to bottom-left by line scroll", |
|
276 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
277 deltaX: -0.5, deltaY: 0.5, deltaZ: 0.0, |
|
278 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
279 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
280 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
281 expected: kScrollDown | kScrollLeft }, |
|
282 { description: "Scroll to top-left by line scroll", |
|
283 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
284 deltaX: -0.5, deltaY: -0.5, deltaZ: 0.0, |
|
285 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
286 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
287 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
288 expected: kScrollUp | kScrollLeft }, |
|
289 { description: "Scroll to top-right by line scroll", |
|
290 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
291 deltaX: 0.5, deltaY: -0.5, deltaZ: 0.0, |
|
292 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
293 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
294 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
295 expected: kScrollUp | kScrollRight }, |
|
296 { description: "Not Scroll by line scroll for z", |
|
297 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
298 deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, |
|
299 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
300 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
301 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
302 expected: kNoScroll }, |
|
303 |
|
304 { description: "Scroll to bottom by page scroll even if lineOrPageDelta is 0", |
|
305 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
306 deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, |
|
307 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: false, |
|
308 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
309 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
310 expected: kScrollDown }, |
|
311 { description: "Scroll to bottom by page scroll when lineOrPageDelta is 1", |
|
312 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
313 deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, |
|
314 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: false, |
|
315 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
316 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
317 expected: kScrollDown }, |
|
318 { description: "Scroll to top by page scroll even if lineOrPageDelta is 0", |
|
319 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
320 deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, |
|
321 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
322 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
323 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
324 expected: kScrollUp }, |
|
325 { description: "Scroll to top by page scroll when lineOrPageDelta is -1", |
|
326 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
327 deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, |
|
328 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, isMomentum: false, |
|
329 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
330 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
331 expected: kScrollUp }, |
|
332 { description: "Scroll to right by page scroll even if lineOrPageDelta is 0", |
|
333 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
334 deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, |
|
335 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
336 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
337 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
338 expected: kScrollRight }, |
|
339 { description: "Scroll to right by page scroll when lineOrPageDelta is 1", |
|
340 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
341 deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, |
|
342 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, isMomentum: false, |
|
343 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
344 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
345 expected: kScrollRight }, |
|
346 { description: "Scroll to left by page scroll even if lineOrPageDelta is 0", |
|
347 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
348 deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, |
|
349 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
350 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
351 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
352 expected: kScrollLeft }, |
|
353 { description: "Scroll to left by page scroll when lineOrPageDelta is -1", |
|
354 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
355 deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, |
|
356 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, isMomentum: false, |
|
357 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
358 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
359 expected: kScrollLeft }, |
|
360 { description: "Scroll to bottom-right by page scroll", |
|
361 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
362 deltaX: 0.5, deltaY: 0.5, deltaZ: 0.0, |
|
363 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
364 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
365 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
366 expected: kScrollDown | kScrollRight }, |
|
367 { description: "Scroll to bottom-left by page scroll", |
|
368 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
369 deltaX: -0.5, deltaY: 0.5, deltaZ: 0.0, |
|
370 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
371 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
372 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
373 expected: kScrollDown | kScrollLeft }, |
|
374 { description: "Scroll to top-left by page scroll", |
|
375 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
376 deltaX: -0.5, deltaY: -0.5, deltaZ: 0.0, |
|
377 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
378 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
379 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
380 expected: kScrollUp | kScrollLeft }, |
|
381 { description: "Scroll to top-right by page scroll", |
|
382 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
383 deltaX: 0.5, deltaY: -0.5, deltaZ: 0.0, |
|
384 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
385 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
386 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
387 expected: kScrollUp | kScrollRight }, |
|
388 { description: "Not Scroll by page scroll for z", |
|
389 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
390 deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, |
|
391 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: false, |
|
392 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
393 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
394 expected: kNoScroll }, |
|
395 |
|
396 // special cases. |
|
397 |
|
398 // momentum scroll should cause scroll even if the action is zoom, but if the default action is none, |
|
399 // shouldn't do it. |
|
400 { description: "Scroll to bottom by momentum pixel scroll when lineOrPageDelta is 0, even if the action is zoom", |
|
401 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
402 deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, |
|
403 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
404 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
405 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
406 expected: kScrollDown }, |
|
407 { description: "Scroll to bottom by momentum pixel scroll when lineOrPageDelta is 1, even if the action is zoom", |
|
408 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
409 deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, |
|
410 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: true, |
|
411 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
412 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
413 expected: kScrollDown }, |
|
414 { description: "Scroll to top by momentum pixel scroll when lineOrPageDelta is 0, even if the action is zoom", |
|
415 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
416 deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, |
|
417 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
418 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
419 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
420 expected: kScrollUp }, |
|
421 { description: "Scroll to top by momentum pixel scroll when lineOrPageDelta is -1, even if the action is zoom", |
|
422 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
423 deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, |
|
424 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, isMomentum: true, |
|
425 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
426 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
427 expected: kScrollUp }, |
|
428 { description: "Scroll to right by momentum pixel scroll when lineOrPageDelta is 0, even if the action is zoom", |
|
429 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
430 deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, |
|
431 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
432 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
433 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
434 expected: kScrollRight }, |
|
435 { description: "Scroll to right by momentum pixel scroll when lineOrPageDelta is 1, even if the action is zoom", |
|
436 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
437 deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, |
|
438 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, isMomentum: true, |
|
439 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
440 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
441 expected: kScrollRight }, |
|
442 { description: "Scroll to left by momentum pixel scroll when lineOrPageDelta is 0, even if the action is zoom", |
|
443 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
444 deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, |
|
445 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
446 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
447 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
448 expected: kScrollLeft }, |
|
449 { description: "Scroll to left by momentum pixel scroll when lineOrPageDelta is -1, even if the action is zoom", |
|
450 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
451 deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, |
|
452 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, isMomentum: true, |
|
453 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
454 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
455 expected: kScrollLeft }, |
|
456 { description: "Scroll to bottom-right by momentum pixel scroll even if the action is zoom", |
|
457 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
458 deltaX: 8.0, deltaY: 8.0, deltaZ: 0.0, |
|
459 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
460 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
461 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
462 expected: kScrollDown | kScrollRight }, |
|
463 { description: "Scroll to bottom-left by momentum pixel scroll even if the action is zoom", |
|
464 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
465 deltaX: -8.0, deltaY: 8.0, deltaZ: 0.0, |
|
466 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
467 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
468 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
469 expected: kScrollDown | kScrollLeft }, |
|
470 { description: "Scroll to top-left by momentum pixel scroll even if the action is zoom", |
|
471 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
472 deltaX: -8.0, deltaY: -8.0, deltaZ: 0.0, |
|
473 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
474 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
475 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
476 expected: kScrollUp | kScrollLeft }, |
|
477 { description: "Scroll to top-right by momentum pixel scroll even if the action is zoom", |
|
478 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
479 deltaX: 8.0, deltaY: -8.0, deltaZ: 0.0, |
|
480 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
481 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
482 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
483 expected: kScrollUp | kScrollRight }, |
|
484 { description: "Not Scroll by momentum pixel scroll for z (action is zoom)", |
|
485 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
486 deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, |
|
487 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
488 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
489 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
490 expected: kNoScroll }, |
|
491 { description: "Not Scroll by momentum pixel scroll if default action is none (action is zoom)", |
|
492 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
493 deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, |
|
494 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
495 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
496 shiftKey: false, ctrlKey: true, altKey: false, metaKey: false, osKey: false }, |
|
497 expected: kNoScroll, |
|
498 prepare: function () { SpecialPowers.setIntPref("mousewheel.default.action", 0); }, |
|
499 cleanup: function () { SpecialPowers.setIntPref("mousewheel.default.action", 1); } }, |
|
500 |
|
501 // momentum scroll should cause scroll even if the action is history, but if the default action is none, |
|
502 // shouldn't do it. |
|
503 { description: "Scroll to bottom by momentum pixel scroll when lineOrPageDelta is 0, even if the action is history", |
|
504 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
505 deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, |
|
506 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
507 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
508 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
509 expected: kScrollDown }, |
|
510 { description: "Scroll to bottom by momentum pixel scroll when lineOrPageDelta is 1, even if the action is history", |
|
511 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
512 deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, |
|
513 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, isMomentum: true, |
|
514 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
515 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
516 expected: kScrollDown }, |
|
517 { description: "Scroll to top by momentum pixel scroll when lineOrPageDelta is 0, even if the action is history", |
|
518 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
519 deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, |
|
520 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
521 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
522 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
523 expected: kScrollUp }, |
|
524 { description: "Scroll to top by momentum pixel scroll when lineOrPageDelta is -1, even if the action is history", |
|
525 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
526 deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, |
|
527 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, isMomentum: true, |
|
528 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
529 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
530 expected: kScrollUp }, |
|
531 { description: "Scroll to right by momentum pixel scroll when lineOrPageDelta is 0, even if the action is history", |
|
532 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
533 deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, |
|
534 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
535 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
536 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
537 expected: kScrollRight }, |
|
538 { description: "Scroll to right by momentum pixel scroll when lineOrPageDelta is 1, even if the action is history", |
|
539 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
540 deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, |
|
541 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, isMomentum: true, |
|
542 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
543 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
544 expected: kScrollRight }, |
|
545 { description: "Scroll to left by momentum pixel scroll when lineOrPageDelta is 0, even if the action is history", |
|
546 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
547 deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, |
|
548 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
549 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
550 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
551 expected: kScrollLeft }, |
|
552 { description: "Scroll to left by momentum pixel scroll when lineOrPageDelta is -1, even if the action is history", |
|
553 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
554 deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, |
|
555 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, isMomentum: true, |
|
556 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
557 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
558 expected: kScrollLeft }, |
|
559 { description: "Scroll to bottom-right by momentum pixel scroll even if the action is history", |
|
560 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
561 deltaX: 8.0, deltaY: 8.0, deltaZ: 0.0, |
|
562 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
563 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
564 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
565 expected: kScrollDown | kScrollRight }, |
|
566 { description: "Scroll to bottom-left by momentum pixel scroll even if the action is history", |
|
567 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
568 deltaX: -8.0, deltaY: 8.0, deltaZ: 0.0, |
|
569 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
570 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
571 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
572 expected: kScrollDown | kScrollLeft }, |
|
573 { description: "Scroll to top-left by momentum pixel scroll even if the action is history", |
|
574 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
575 deltaX: -8.0, deltaY: -8.0, deltaZ: 0.0, |
|
576 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
577 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
578 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
579 expected: kScrollUp | kScrollLeft }, |
|
580 { description: "Scroll to top-right by momentum pixel scroll even if the action is history", |
|
581 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
582 deltaX: 8.0, deltaY: -8.0, deltaZ: 0.0, |
|
583 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
584 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
585 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
586 expected: kScrollUp | kScrollRight }, |
|
587 { description: "Not Scroll by momentum pixel scroll for z (action is history)", |
|
588 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
589 deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, |
|
590 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
591 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
592 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
593 expected: kNoScroll }, |
|
594 { description: "Not Scroll by momentum pixel scroll if default action is none (action is history)", |
|
595 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
596 deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, |
|
597 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, isMomentum: true, |
|
598 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
599 shiftKey: true, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
600 expected: kNoScroll, |
|
601 prepare: function () { SpecialPowers.setIntPref("mousewheel.default.action", 0); }, |
|
602 cleanup: function () { SpecialPowers.setIntPref("mousewheel.default.action", 1); } }, |
|
603 |
|
604 // Don't scroll along axis whose overflow style is hidden. |
|
605 { description: "Scroll to only bottom by oblique pixel wheel event with overflow-x: hidden", |
|
606 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
607 deltaX: 16.0, deltaY: 16.0, deltaZ: 0.0, |
|
608 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
609 expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 0, |
|
610 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
611 expected: kScrollDown, |
|
612 prepare: function() { gScrollableElement.style.overflowX = "hidden"; } }, |
|
613 { description: "Scroll to only bottom by oblique line wheel event with overflow-x: hidden", |
|
614 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
615 deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, |
|
616 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
617 expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 0, |
|
618 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
619 expected: kScrollDown }, |
|
620 { description: "Scroll to only bottom by oblique page wheel event with overflow-x: hidden", |
|
621 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
622 deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, |
|
623 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
624 expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 0, |
|
625 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
626 expected: kScrollDown }, |
|
627 { description: "Scroll to only top by oblique pixel wheel event with overflow-x: hidden", |
|
628 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
629 deltaX: -16.0, deltaY: -16.0, deltaZ: 0.0, |
|
630 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
631 expectedOverflowDeltaX: -1, expectedOverflowDeltaY: 0, |
|
632 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
633 expected: kScrollUp }, |
|
634 { description: "Scroll to only top by oblique line wheel event with overflow-x: hidden", |
|
635 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
636 deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, |
|
637 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
638 expectedOverflowDeltaX: -1, expectedOverflowDeltaY: 0, |
|
639 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
640 expected: kScrollUp }, |
|
641 { description: "Scroll to only top by oblique page wheel event with overflow-x: hidden", |
|
642 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
643 deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, |
|
644 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
645 expectedOverflowDeltaX: -1, expectedOverflowDeltaY: 0, |
|
646 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
647 expected: kScrollUp, |
|
648 cleanup: function () { gScrollableElement.style.overflowX = "auto"; } }, |
|
649 { description: "Scroll to only right by oblique pixel wheel event with overflow-y: hidden", |
|
650 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
651 deltaX: 16.0, deltaY: 16.0, deltaZ: 0.0, |
|
652 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
653 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 1, |
|
654 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
655 expected: kScrollRight, |
|
656 prepare: function() { gScrollableElement.style.overflowY = "hidden"; } }, |
|
657 { description: "Scroll to only right by oblique line wheel event with overflow-y: hidden", |
|
658 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
659 deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, |
|
660 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
661 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 1, |
|
662 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
663 expected: kScrollRight }, |
|
664 { description: "Scroll to only right by oblique page wheel event with overflow-y: hidden", |
|
665 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
666 deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, |
|
667 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
668 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 1, |
|
669 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
670 expected: kScrollRight }, |
|
671 { description: "Scroll to only left by oblique pixel wheel event with overflow-y: hidden", |
|
672 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
673 deltaX: -16.0, deltaY: -16.0, deltaZ: 0.0, |
|
674 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
675 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: -1, |
|
676 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
677 expected: kScrollLeft }, |
|
678 { description: "Scroll to only top by oblique line wheel event with overflow-y: hidden", |
|
679 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
680 deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, |
|
681 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
682 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: -1, |
|
683 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
684 expected: kScrollLeft }, |
|
685 { description: "Scroll to only top by oblique page wheel event with overflow-y: hidden", |
|
686 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
687 deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, |
|
688 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
689 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: -1, |
|
690 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
691 expected: kScrollLeft, |
|
692 cleanup: function () { gScrollableElement.style.overflowY = "auto"; } }, |
|
693 { description: "Don't be scrolled by oblique pixel wheel event with overflow: hidden", |
|
694 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
695 deltaX: 16.0, deltaY: 16.0, deltaZ: 0.0, |
|
696 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
697 expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 1, |
|
698 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
699 expected: kNoScroll, |
|
700 prepare: function() { gScrollableElement.style.overflow = "hidden"; } }, |
|
701 { description: "Don't be scrolled by oblique line wheel event with overflow: hidden", |
|
702 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
703 deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, |
|
704 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
705 expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 1, |
|
706 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
707 expected: kNoScroll }, |
|
708 { description: "Don't be scrolled by oblique page wheel event with overflow: hidden", |
|
709 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
710 deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, |
|
711 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
712 expectedOverflowDeltaX: 1, expectedOverflowDeltaY: 1, |
|
713 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
714 expected: kNoScroll }, |
|
715 { description: "Don't be scrolled by oblique pixel wheel event with overflow: hidden", |
|
716 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
717 deltaX: -16.0, deltaY: -16.0, deltaZ: 0.0, |
|
718 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
719 expectedOverflowDeltaX: -1, expectedOverflowDeltaY: -1, |
|
720 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
721 expected: kNoScroll }, |
|
722 { description: "Don't be scrolled by oblique line wheel event with overflow: hidden", |
|
723 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
724 deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, |
|
725 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
726 expectedOverflowDeltaX: -1, expectedOverflowDeltaY: -1, |
|
727 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
728 expected: kNoScroll }, |
|
729 { description: "Don't be scrolled by oblique page wheel event with overflow: hidden", |
|
730 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
731 deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, |
|
732 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
733 expectedOverflowDeltaX: -1, expectedOverflowDeltaY: -1, |
|
734 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
735 expected: kNoScroll, |
|
736 cleanup: function () { gScrollableElement.style.overflow = "auto"; } }, |
|
737 |
|
738 // Don't scroll along axis whose overflow style is hidden and overflow delta values should |
|
739 // be zero if there is ancestor scrollable element. |
|
740 { description: "Scroll to only bottom by oblique pixel wheel event with overflow-x: hidden (body is scrollable)", |
|
741 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
742 deltaX: 16.0, deltaY: 16.0, deltaZ: 0.0, |
|
743 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
744 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
745 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
746 expected: kScrollDown, |
|
747 prepare: function() { |
|
748 gScrollableElement.style.overflowX = "hidden"; |
|
749 gScrollableElement.style.position = "fixed"; |
|
750 gScrollableElement.style.top = "30px"; |
|
751 gScrollableElement.style.left = "30px"; |
|
752 // Make body element scrollable. |
|
753 gSpacerForBodyElement.style.width = "5000px"; |
|
754 gSpacerForBodyElement.style.height = "5000px"; |
|
755 document.documentElement.scrollTop = 500; |
|
756 document.documentElement.scrollLeft = 500; |
|
757 } }, |
|
758 { description: "Scroll to only bottom by oblique line wheel event with overflow-x: hidden (body is scrollable)", |
|
759 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
760 deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, |
|
761 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
762 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
763 expected: kScrollDown }, |
|
764 { description: "Scroll to only bottom by oblique page wheel event with overflow-x: hidden (body is scrollable)", |
|
765 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
766 deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, |
|
767 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
768 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
769 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
770 expected: kScrollDown }, |
|
771 { description: "Scroll to only top by oblique pixel wheel event with overflow-x: hidden (body is scrollable)", |
|
772 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
773 deltaX: -16.0, deltaY: -16.0, deltaZ: 0.0, |
|
774 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
775 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
776 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
777 expected: kScrollUp }, |
|
778 { description: "Scroll to only top by oblique line wheel event with overflow-x: hidden (body is scrollable)", |
|
779 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
780 deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, |
|
781 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
782 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
783 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
784 expected: kScrollUp }, |
|
785 { description: "Scroll to only top by oblique page wheel event with overflow-x: hidden (body is scrollable)", |
|
786 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
787 deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, |
|
788 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
789 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
790 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
791 expected: kScrollUp, |
|
792 cleanup: function () { gScrollableElement.style.overflowX = "auto"; } }, |
|
793 { description: "Scroll to only right by oblique pixel wheel event with overflow-y: hidden (body is scrollable)", |
|
794 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
795 deltaX: 16.0, deltaY: 16.0, deltaZ: 0.0, |
|
796 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
797 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
798 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
799 expected: kScrollRight, |
|
800 prepare: function() { gScrollableElement.style.overflowY = "hidden"; } }, |
|
801 { description: "Scroll to only right by oblique line wheel event with overflow-y: hidden (body is scrollable)", |
|
802 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
803 deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, |
|
804 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
805 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
806 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
807 expected: kScrollRight }, |
|
808 { description: "Scroll to only right by oblique page wheel event with overflow-y: hidden (body is scrollable)", |
|
809 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
810 deltaX: 1.0, deltaY: 1.0, deltaZ: 0.0, |
|
811 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1, |
|
812 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
813 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
814 expected: kScrollRight }, |
|
815 { description: "Scroll to only left by oblique pixel wheel event with overflow-y: hidden (body is scrollable)", |
|
816 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
817 deltaX: -16.0, deltaY: -16.0, deltaZ: 0.0, |
|
818 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
819 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
820 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
821 expected: kScrollLeft }, |
|
822 { description: "Scroll to only top by oblique line wheel event with overflow-y: hidden (body is scrollable)", |
|
823 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
824 deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, |
|
825 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
826 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
827 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
828 expected: kScrollLeft }, |
|
829 { description: "Scroll to only top by oblique page wheel event with overflow-y: hidden (body is scrollable)", |
|
830 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
831 deltaX: -1.0, deltaY: -1.0, deltaZ: 0.0, |
|
832 lineOrPageDeltaX: -1, lineOrPageDeltaY: -1, |
|
833 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0, |
|
834 shiftKey: false, ctrlKey: false, altKey: false, metaKey: false, osKey: false }, |
|
835 expected: kScrollLeft, |
|
836 cleanup: function () { |
|
837 gScrollableElement.style.overflowY = "auto"; |
|
838 gScrollableElement.style.position = "static"; |
|
839 gSpacerForBodyElement.style.width = ""; |
|
840 gSpacerForBodyElement.style.height = ""; |
|
841 } }, |
|
842 ]; |
|
843 |
|
844 var description; |
|
845 |
|
846 var currentTestIndex = -1; |
|
847 var isXReverted = (aSettings.deltaMultiplierX < 0); |
|
848 var isYReverted = (aSettings.deltaMultiplierY < 0); |
|
849 |
|
850 function doNextTest() |
|
851 { |
|
852 if (++currentTestIndex >= kTests.length) { |
|
853 SimpleTest.executeSoon(aCallback); |
|
854 return; |
|
855 } |
|
856 |
|
857 gScrollableElement.scrollTop = 1000; |
|
858 gScrollableElement.scrollLeft = 1000; |
|
859 |
|
860 var currentTest = kTests[currentTestIndex]; |
|
861 description = "doTestScroll(aSettings=" + aSettings.description + "), " + currentTest.description + ": "; |
|
862 if (currentTest.prepare) { |
|
863 currentTest.prepare(); |
|
864 } |
|
865 |
|
866 synthesizeWheel(gScrollableElement, 10, 10, currentTest.event); |
|
867 |
|
868 hitEventLoop(function () { |
|
869 if (currentTest.expected == kNoScroll) { |
|
870 is(gScrollableElement.scrollTop, 1000, description + "scrolled vertical"); |
|
871 is(gScrollableElement.scrollLeft, 1000, description + "scrolled horizontal"); |
|
872 } else { |
|
873 var scrollUp = !isYReverted ? (currentTest.expected & kScrollUp) : |
|
874 (currentTest.expected & kScrollDown); |
|
875 var scrollDown = !isYReverted ? (currentTest.expected & kScrollDown) : |
|
876 (currentTest.expected & kScrollUp); |
|
877 if (scrollUp) { |
|
878 ok(gScrollableElement.scrollTop < 1000, description + "not scrolled up, got " + gScrollableElement.scrollTop); |
|
879 } else if (scrollDown) { |
|
880 ok(gScrollableElement.scrollTop > 1000, description + "not scrolled down, got " + gScrollableElement.scrollTop); |
|
881 } else { |
|
882 is(gScrollableElement.scrollTop, 1000, description + "scrolled vertical"); |
|
883 } |
|
884 var scrollLeft = !isXReverted ? (currentTest.expected & kScrollLeft) : |
|
885 (currentTest.expected & kScrollRight); |
|
886 var scrollRight = !isXReverted ? (currentTest.expected & kScrollRight) : |
|
887 (currentTest.expected & kScrollLeft); |
|
888 if (scrollLeft) { |
|
889 ok(gScrollableElement.scrollLeft < 1000, description + "not scrolled to left, got " + gScrollableElement.scrollLeft); |
|
890 } else if (scrollRight) { |
|
891 ok(gScrollableElement.scrollLeft > 1000, description + "not scrolled to right, got " + gScrollableElement.scrollLeft); |
|
892 } else { |
|
893 is(gScrollableElement.scrollLeft, 1000, description + "scrolled horizontal"); |
|
894 } |
|
895 } |
|
896 if (currentTest.cleanup) { |
|
897 currentTest.cleanup(); |
|
898 } |
|
899 winUtils.advanceTimeAndRefresh(100); |
|
900 doNextTest(); |
|
901 }, 10); |
|
902 } |
|
903 doNextTest(); |
|
904 } |
|
905 |
|
906 function doTestZoom(aSettings, aCallback) |
|
907 { |
|
908 if ((aSettings.deltaMultiplierX != 1.0 && aSettings.deltaMultiplierX != -1.0) || |
|
909 (aSettings.deltaMultiplierY != 1.0 && aSettings.deltaMultiplierY != -1.0)) { |
|
910 todo(false, "doTestZoom doesn't support to test with aSettings=" + aSettings.description); |
|
911 SimpleTest.executeSoon(aCallback); |
|
912 return; |
|
913 } |
|
914 |
|
915 const kNone = 0x00; |
|
916 const kPositive = 0x01; |
|
917 const kNegative = 0x02; |
|
918 const kUseX = 0x10; |
|
919 const kUseY = 0x20; |
|
920 const kTests = [ |
|
921 { description: "by vertical/positive pixel event when its lineOrPageDeltaY is 0", |
|
922 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
923 deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, |
|
924 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
925 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
926 expected: kNone }, |
|
927 { description: "by vertical/positive pixel event when its lineOrPageDeltaY is 1", |
|
928 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
929 deltaX: 0.0, deltaY: 8.0, deltaZ: 0.0, |
|
930 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, |
|
931 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
932 expected: kPositive | kUseY }, |
|
933 { description: "by vertical/negative pixel event when its lineOrPageDeltaY is 0", |
|
934 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
935 deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, |
|
936 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
937 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
938 expected: kNone }, |
|
939 { description: "by vertical/negative pixel event when its lineOrPageDeltaY is -1", |
|
940 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
941 deltaX: 0.0, deltaY: -8.0, deltaZ: 0.0, |
|
942 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, |
|
943 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
944 expected: kNegative | kUseY }, |
|
945 { description: "by horizotal/positive pixel event when its lineOrPageDeltaX is 0", |
|
946 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
947 deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, |
|
948 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
949 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
950 expected: kNone }, |
|
951 { description: "by horizotal/positive pixel event when its lineOrPageDeltaX is 1", |
|
952 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
953 deltaX: 8.0, deltaY: 0.0, deltaZ: 0.0, |
|
954 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, |
|
955 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
956 expected: kPositive | kUseX }, |
|
957 { description: "by horizotal/negative pixel event when its lineOrPageDeltaX is 0", |
|
958 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
959 deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, |
|
960 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
961 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
962 expected: kNone }, |
|
963 { description: "by horizotal/negative pixel event when its lineOrPageDeltaX is -1", |
|
964 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
965 deltaX: -8.0, deltaY: 0.0, deltaZ: 0.0, |
|
966 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, |
|
967 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
968 expected: kNegative | kUseX }, |
|
969 { description: "by z pixel event", |
|
970 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
971 deltaX: 0.0, deltaY: 0.0, deltaZ: 16.0, |
|
972 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
973 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
974 expected: kNone }, |
|
975 |
|
976 { description: "by vertical/positive line event when its lineOrPageDeltaY is 0", |
|
977 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
978 deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, |
|
979 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
980 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
981 expected: kNone }, |
|
982 { description: "by vertical/positive line event when its lineOrPageDeltaY is 1", |
|
983 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
984 deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, |
|
985 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, |
|
986 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
987 expected: kPositive | kUseY }, |
|
988 { description: "by vertical/negative line event when its lineOrPageDeltaY is 0", |
|
989 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
990 deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, |
|
991 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
992 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
993 expected: kNone }, |
|
994 { description: "by vertical/negative line event when its lineOrPageDeltaY is -1", |
|
995 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
996 deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, |
|
997 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, |
|
998 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
999 expected: kNegative | kUseY }, |
|
1000 { description: "by horizotal/positive line event when its lineOrPageDeltaX is 0", |
|
1001 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1002 deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, |
|
1003 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
1004 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1005 expected: kNone }, |
|
1006 { description: "by horizotal/positive line event when its lineOrPageDeltaX is 1", |
|
1007 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1008 deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, |
|
1009 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, |
|
1010 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1011 expected: kPositive | kUseX }, |
|
1012 { description: "by horizotal/negative line event when its lineOrPageDeltaX is 0", |
|
1013 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1014 deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, |
|
1015 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
1016 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1017 expected: kNone }, |
|
1018 { description: "by horizotal/negative line event when its lineOrPageDeltaX is -1", |
|
1019 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1020 deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, |
|
1021 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, |
|
1022 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1023 expected: kNegative | kUseX }, |
|
1024 { description: "by z line event", |
|
1025 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1026 deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, |
|
1027 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
1028 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1029 expected: kNone }, |
|
1030 |
|
1031 { description: "by vertical/positive page event when its lineOrPageDeltaY is 0", |
|
1032 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1033 deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, |
|
1034 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
1035 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1036 expected: kNone }, |
|
1037 { description: "by vertical/positive page event when its lineOrPageDeltaY is 1", |
|
1038 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1039 deltaX: 0.0, deltaY: 0.5, deltaZ: 0.0, |
|
1040 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1, |
|
1041 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1042 expected: kPositive | kUseY }, |
|
1043 { description: "by vertical/negative page event when its lineOrPageDeltaY is 0", |
|
1044 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1045 deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, |
|
1046 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
1047 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1048 expected: kNone }, |
|
1049 { description: "by vertical/negative page event when its lineOrPageDeltaY is -1", |
|
1050 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1051 deltaX: 0.0, deltaY: -0.5, deltaZ: 0.0, |
|
1052 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1, |
|
1053 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1054 expected: kNegative | kUseY }, |
|
1055 { description: "by horizotal/positive page event when its lineOrPageDeltaX is 0", |
|
1056 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1057 deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, |
|
1058 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
1059 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1060 expected: kNone }, |
|
1061 { description: "by horizotal/positive page event when its lineOrPageDeltaX is 1", |
|
1062 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1063 deltaX: 0.5, deltaY: 0.0, deltaZ: 0.0, |
|
1064 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0, |
|
1065 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1066 expected: kPositive | kUseX }, |
|
1067 { description: "by horizotal/negative page event when its lineOrPageDeltaX is 0", |
|
1068 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1069 deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, |
|
1070 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
1071 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1072 expected: kNone }, |
|
1073 { description: "by horizotal/negative page event when its lineOrPageDeltaX is -1", |
|
1074 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1075 deltaX: -0.5, deltaY: 0.0, deltaZ: 0.0, |
|
1076 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0, |
|
1077 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1078 expected: kNegative | kUseX }, |
|
1079 { description: "by z page event", |
|
1080 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1081 deltaX: 0.0, deltaY: 0.0, deltaZ: 1.0, |
|
1082 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0, |
|
1083 expectedOverflowDeltaX: 0, expectedOverflowDeltaY: 0 }, |
|
1084 expected: kNone }, |
|
1085 ]; |
|
1086 |
|
1087 var description, currentTest; |
|
1088 var currentTestIndex = -1; |
|
1089 var isXReverted = (aSettings.deltaMultiplierX < 0); |
|
1090 var isYReverted = (aSettings.deltaMultiplierY < 0); |
|
1091 |
|
1092 function doNextTest() |
|
1093 { |
|
1094 if (++currentTestIndex >= kTests.length) { |
|
1095 SimpleTest.executeSoon(aCallback); |
|
1096 return; |
|
1097 } |
|
1098 |
|
1099 gScrollableElement.scrollTop = 1000; |
|
1100 gScrollableElement.scrollLeft = 1000; |
|
1101 |
|
1102 currentTest = kTests[currentTestIndex]; |
|
1103 description = "doTestZoom(aSettings=" + aSettings.description + "), "; |
|
1104 if (currentTest.expected == kNone) { |
|
1105 description += "Shouldn't "; |
|
1106 } else { |
|
1107 description += "Should "; |
|
1108 } |
|
1109 description += "zoom " + currentTest.description + ": "; |
|
1110 |
|
1111 var event = currentTest.event; |
|
1112 event.ctrlKey = true; |
|
1113 synthesizeWheel(gScrollableElement, 10, 10, event); |
|
1114 |
|
1115 // NOTE: Zooming might change scrollTop and scrollLeft by rounding fraction. |
|
1116 // This test assume that zoom happens synchronously and scrolling |
|
1117 // happens asynchronously. |
|
1118 var scrollTop = gScrollableElement.scrollTop; |
|
1119 var scrollLeft = gScrollableElement.scrollLeft; |
|
1120 |
|
1121 hitEventLoop(function () { |
|
1122 is(gScrollableElement.scrollTop, scrollTop, description + "scrolled vertical"); |
|
1123 is(gScrollableElement.scrollLeft, scrollLeft, description + "scrolled horizontal"); |
|
1124 if (!(currentTest.expected & (kNegative | kPositive))) { |
|
1125 is(SpecialPowers.getFullZoom(window), 1.0, description + "zoomed"); |
|
1126 } else { |
|
1127 var isReverted = (currentTest.expected & kUseX) ? isXReverted : |
|
1128 (currentTest.expected & kUseY) ? isYReverted : false; |
|
1129 if ((!isReverted && (currentTest.expected & kNegative)) || |
|
1130 (isReverted && (currentTest.expected & kPositive))) { |
|
1131 ok(SpecialPowers.getFullZoom(window) > 1.0, |
|
1132 description + "not zoomed in, got " + SpecialPowers.getFullZoom(window)); |
|
1133 } else { |
|
1134 ok(SpecialPowers.getFullZoom(window) < 1.0, |
|
1135 description + "not zoomed out, got " + SpecialPowers.getFullZoom(window)); |
|
1136 } |
|
1137 } |
|
1138 |
|
1139 synthesizeKey("0", { accelKey: true }); |
|
1140 onZoomReset(function () { |
|
1141 hitEventLoop(doNextTest, 20); |
|
1142 }); |
|
1143 }, 20); |
|
1144 } |
|
1145 doNextTest(); |
|
1146 } |
|
1147 |
|
1148 function doTestZoomedScroll(aCallback) |
|
1149 { |
|
1150 var zoom = 1.0; |
|
1151 function setFullZoom(aWindow, aZoom) |
|
1152 { |
|
1153 zoom = aZoom; |
|
1154 SpecialPowers.setFullZoom(aWindow, aZoom); |
|
1155 } |
|
1156 |
|
1157 function prepareTestZoomedPixelScroll() |
|
1158 { |
|
1159 // Reset zoom and store the scroll amount into the data. |
|
1160 synthesizeKey("0", { accelKey: true }); |
|
1161 zoom = 1.0; |
|
1162 onZoomReset(testZoomedPixelScroll); |
|
1163 } |
|
1164 |
|
1165 function testZoomedPixelScroll() |
|
1166 { |
|
1167 gScrollableElement.scrollTop = 1000; |
|
1168 gScrollableElement.scrollLeft = 1000; |
|
1169 // Ensure not to be in reflow. |
|
1170 hitEventLoop(function () { |
|
1171 function mousePixelScrollHandler(aEvent) |
|
1172 { |
|
1173 if (aEvent.axis == MouseScrollEvent.HORIZONTAL_AXIS) { |
|
1174 is(aEvent.detail, 16, |
|
1175 "doTestZoomedScroll: The detail of horizontal MozMousePixelScroll for pixel wheel event is wrong"); |
|
1176 } else if (aEvent.axis == MouseScrollEvent.VERTICAL_AXIS) { |
|
1177 is(aEvent.detail, 16, |
|
1178 "doTestZoomedScroll: The detail of vertical MozMousePixelScroll for pixel wheel event is wrong"); |
|
1179 } else { |
|
1180 ok(false, "doTestZoomedScroll: The axis of MozMousePixelScroll for pixel wheel event is invalid, got " + aEvent.axis); |
|
1181 } |
|
1182 } |
|
1183 function wheelHandler(aEvent) |
|
1184 { |
|
1185 is(aEvent.deltaX, 16.0 / zoom, |
|
1186 "doTestZoomedScroll: The deltaX of wheel for pixel is wrong"); |
|
1187 is(aEvent.deltaY, 16.0 / zoom, |
|
1188 "doTestZoomedScroll: The deltaY of wheel for pixel is wrong"); |
|
1189 } |
|
1190 window.addEventListener("MozMousePixelScroll", mousePixelScrollHandler, true); |
|
1191 window.addEventListener("wheel", wheelHandler, true); |
|
1192 synthesizeWheel(gScrollableElement, 10, 10, |
|
1193 { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
1194 deltaX: 16.0, deltaY: 16.0, lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }); |
|
1195 // wait scrolled actually. |
|
1196 hitEventLoop(function () { |
|
1197 var scrolledX = gScrollableElement.scrollLeft; |
|
1198 var scrolledY = gScrollableElement.scrollTop; |
|
1199 ok(scrolledX > 1000, |
|
1200 "doTestZoomedScroll: scrolledX must be larger than 1000 for pixel wheel event, got " + scrolledX); |
|
1201 ok(scrolledY > 1000, |
|
1202 "doTestZoomedScroll: scrolledY must be larger than 1000 for pixel wheel event, got " + scrolledY); |
|
1203 |
|
1204 // Zoom |
|
1205 setFullZoom(window, 2.0); |
|
1206 // Ensure not to be in reflow. |
|
1207 hitEventLoop(function () { |
|
1208 gScrollableElement.scrollTop = 1000; |
|
1209 gScrollableElement.scrollLeft = 1000; |
|
1210 synthesizeWheel(gScrollableElement, 10, 10, |
|
1211 { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
1212 deltaX: 16.0, deltaY: 16.0, lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }); |
|
1213 // wait scrolled actually. |
|
1214 hitEventLoop(function () { |
|
1215 ok(Math.abs(gScrollableElement.scrollLeft - (1000 + (scrolledX - 1000) / 2)) <= 1, |
|
1216 "doTestZoomedScroll: zoomed horizontal scroll amount by pixel wheel event is different from normal, scrollLeft=" + |
|
1217 gScrollableElement.scrollLeft + ", scrolledX=" + scrolledX); |
|
1218 ok(Math.abs(gScrollableElement.scrollTop - (1000 + (scrolledY - 1000) / 2)) <= 1, |
|
1219 "doTestZoomedScroll: zoomed vertical scroll amount by pixel wheel event is different from normal, scrollTop=" + |
|
1220 gScrollableElement.scrollTop + ", scrolledY=" + scrolledY); |
|
1221 window.removeEventListener("MozMousePixelScroll", mousePixelScrollHandler, true); |
|
1222 window.removeEventListener("wheel", wheelHandler, true); |
|
1223 |
|
1224 synthesizeKey("0", { accelKey: true }); |
|
1225 onZoomReset(prepareTestZoomedLineScroll); |
|
1226 }, 20); |
|
1227 }, 20); |
|
1228 }, 20); |
|
1229 }, 20); |
|
1230 } |
|
1231 |
|
1232 function prepareTestZoomedLineScroll() |
|
1233 { |
|
1234 // Reset zoom and store the scroll amount into the data. |
|
1235 synthesizeKey("0", { accelKey: true }); |
|
1236 zoom = 1.0; |
|
1237 onZoomReset(testZoomedLineScroll); |
|
1238 } |
|
1239 function testZoomedLineScroll() |
|
1240 { |
|
1241 gScrollableElement.scrollTop = 1000; |
|
1242 gScrollableElement.scrollLeft = 1000; |
|
1243 // Ensure not to be in reflow. |
|
1244 hitEventLoop(function () { |
|
1245 var lineHeightX, lineHeightY; |
|
1246 function handler(aEvent) |
|
1247 { |
|
1248 if (aEvent.axis == MouseScrollEvent.HORIZONTAL_AXIS) { |
|
1249 if (lineHeightX == undefined) { |
|
1250 lineHeightX = aEvent.detail; |
|
1251 } else { |
|
1252 ok(Math.abs(aEvent.detail - lineHeightX) <= 1, |
|
1253 "doTestZoomedScroll: The detail of horizontal MozMousePixelScroll for line wheel event is wrong, aEvent.detail=" + |
|
1254 aEvent.detail + ", lineHeightX=" + lineHeightX); |
|
1255 } |
|
1256 } else if (aEvent.axis == MouseScrollEvent.VERTICAL_AXIS) { |
|
1257 if (lineHeightY == undefined) { |
|
1258 lineHeightY = aEvent.detail; |
|
1259 } else { |
|
1260 ok(Math.abs(aEvent.detail - lineHeightY) <= 1, |
|
1261 "doTestZoomedScroll: The detail of vertical MozMousePixelScroll for line wheel event is wrong, aEvent.detail=" + |
|
1262 aEvent.detail + ", lineHeightY=" + lineHeightY); |
|
1263 } |
|
1264 } else { |
|
1265 ok(false, "doTestZoomedScroll: The axis of MozMousePixelScroll for line wheel event is invalid, got " + aEvent.axis); |
|
1266 } |
|
1267 } |
|
1268 window.addEventListener("MozMousePixelScroll", handler, true); |
|
1269 synthesizeWheel(gScrollableElement, 10, 10, |
|
1270 { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1271 deltaX: 1.0, deltaY: 1.0, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }); |
|
1272 // wait scrolled actually. |
|
1273 hitEventLoop(function () { |
|
1274 var scrolledX = gScrollableElement.scrollLeft; |
|
1275 var scrolledY = gScrollableElement.scrollTop; |
|
1276 ok(scrolledX > 1000, |
|
1277 "doTestZoomedScroll: scrolledX must be larger than 1000 for line wheel event, got " + scrolledX); |
|
1278 ok(scrolledY > 1000, |
|
1279 "doTestZoomedScroll: scrolledY must be larger than 1000 for line wheel event, got " + scrolledY); |
|
1280 |
|
1281 // Zoom |
|
1282 setFullZoom(window, 2.0); |
|
1283 // Ensure not to be in reflow. |
|
1284 hitEventLoop(function () { |
|
1285 gScrollableElement.scrollTop = 1000; |
|
1286 gScrollableElement.scrollLeft = 1000; |
|
1287 synthesizeWheel(gScrollableElement, 10, 10, |
|
1288 { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1289 deltaX: 1.0, deltaY: 1.0, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }); |
|
1290 // wait scrolled actually. |
|
1291 hitEventLoop(function () { |
|
1292 ok(Math.abs(gScrollableElement.scrollLeft - scrolledX) <= 1, |
|
1293 "doTestZoomedScroll: zoomed horizontal scroll amount by line wheel event is different from normal, scrollLeft=" + |
|
1294 gScrollableElement.scrollLeft + ", scrolledX=" + scrolledX); |
|
1295 ok(Math.abs(gScrollableElement.scrollTop - scrolledY) <= 1, |
|
1296 "doTestZoomedScroll: zoomed vertical scroll amount by line wheel event is different from normal, scrollTop=" + |
|
1297 gScrollableElement.scrollTop + ", scrolledY=" + scrolledY); |
|
1298 |
|
1299 window.removeEventListener("MozMousePixelScroll", handler, true); |
|
1300 |
|
1301 synthesizeKey("0", { accelKey: true }); |
|
1302 onZoomReset(aCallback); |
|
1303 }, 20); |
|
1304 }, 20); |
|
1305 }, 20); |
|
1306 }, 20); |
|
1307 } |
|
1308 |
|
1309 // XXX It's too difficult to test page scroll because the page scroll amount |
|
1310 // is computed by complex logic. |
|
1311 |
|
1312 prepareTestZoomedPixelScroll(); |
|
1313 } |
|
1314 |
|
1315 function doTestWholeScroll(aCallback) |
|
1316 { |
|
1317 SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_x", 99999999); |
|
1318 SpecialPowers.setIntPref("mousewheel.default.delta_multiplier_y", 99999999); |
|
1319 |
|
1320 const kTests = [ |
|
1321 { description: "try whole-scroll to top (line)", |
|
1322 prepare: function () { |
|
1323 gScrollableElement.scrollTop = 1000; |
|
1324 gScrollableElement.scrollLeft = 1000; |
|
1325 }, |
|
1326 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1327 deltaX: 0.0, deltaY: -1.0, |
|
1328 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1 }, |
|
1329 expectedScrollTop: 0, |
|
1330 expectedScrollLeft: 1000 |
|
1331 }, |
|
1332 { description: "try whole-scroll to top when scrollTop is already top-most (line)", |
|
1333 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1334 deltaX: 0.0, deltaY: -1.0, |
|
1335 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1 }, |
|
1336 expectedScrollTop: 0, |
|
1337 expectedScrollLeft: 1000 |
|
1338 }, |
|
1339 { description: "try whole-scroll to bottom (line)", |
|
1340 prepare: function () { |
|
1341 gScrollableElement.scrollTop = 1000; |
|
1342 gScrollableElement.scrollLeft = 1000; |
|
1343 }, |
|
1344 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1345 deltaX: 0.0, deltaY: 1.0, |
|
1346 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1 }, |
|
1347 expectedScrollTop: gScrollableElement.scrollTopMax, |
|
1348 expectedScrollLeft: 1000 |
|
1349 }, |
|
1350 { description: "try whole-scroll to bottom when scrollTop is already bottom-most (line)", |
|
1351 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1352 deltaX: 0, deltaY: 1.0, |
|
1353 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1 }, |
|
1354 expectedScrollTop: gScrollableElement.scrollTopMax, |
|
1355 expectedScrollLeft: 1000 |
|
1356 }, |
|
1357 { description: "try whole-scroll to left (line)", |
|
1358 prepare: function () { |
|
1359 gScrollableElement.scrollTop = 1000; |
|
1360 gScrollableElement.scrollLeft = 1000; |
|
1361 }, |
|
1362 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1363 deltaX: -1.0, deltaY: 0.0, |
|
1364 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0 }, |
|
1365 expectedScrollTop: 1000, |
|
1366 expectedScrollLeft: 0 |
|
1367 }, |
|
1368 { description: "try whole-scroll to left when scrollLeft is already left-most (line)", |
|
1369 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1370 deltaX: -1.0, deltaY: 0, |
|
1371 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0 }, |
|
1372 expectedScrollTop: 1000, |
|
1373 expectedScrollLeft: 0 |
|
1374 }, |
|
1375 { description: "try whole-scroll to right (line)", |
|
1376 prepare: function () { |
|
1377 gScrollableElement.scrollTop = 1000; |
|
1378 gScrollableElement.scrollLeft = 1000; |
|
1379 }, |
|
1380 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1381 deltaX: 1.0, deltaY: 0.0, |
|
1382 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0 }, |
|
1383 expectedScrollTop: 1000, |
|
1384 expectedScrollLeft: gScrollableElement.scrollLeftMax |
|
1385 }, |
|
1386 { description: "try whole-scroll to right when scrollLeft is already right-most (line)", |
|
1387 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1388 deltaX: 1.0, deltaY: 0.0, |
|
1389 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0 }, |
|
1390 expectedScrollTop: 1000, |
|
1391 expectedScrollLeft: gScrollableElement.scrollLeftMax |
|
1392 }, |
|
1393 |
|
1394 |
|
1395 { description: "try whole-scroll to top (pixel)", |
|
1396 prepare: function () { |
|
1397 gScrollableElement.scrollTop = 1000; |
|
1398 gScrollableElement.scrollLeft = 1000; |
|
1399 }, |
|
1400 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
1401 deltaX: 0.0, deltaY: -1.0, |
|
1402 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, |
|
1403 expectedScrollTop: 0, |
|
1404 expectedScrollLeft: 1000 |
|
1405 }, |
|
1406 { description: "try whole-scroll to top when scrollTop is already top-most (pixel)", |
|
1407 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
1408 deltaX: 0.0, deltaY: -1.0, |
|
1409 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, |
|
1410 expectedScrollTop: 0, |
|
1411 expectedScrollLeft: 1000 |
|
1412 }, |
|
1413 { description: "try whole-scroll to bottom (pixel)", |
|
1414 prepare: function () { |
|
1415 gScrollableElement.scrollTop = 1000; |
|
1416 gScrollableElement.scrollLeft = 1000; |
|
1417 }, |
|
1418 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
1419 deltaX: 0.0, deltaY: 1.0, |
|
1420 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, |
|
1421 expectedScrollTop: gScrollableElement.scrollTopMax, |
|
1422 expectedScrollLeft: 1000 |
|
1423 }, |
|
1424 { description: "try whole-scroll to bottom when scrollTop is already bottom-most (pixel)", |
|
1425 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
1426 deltaX: 0, deltaY: 1.0, |
|
1427 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, |
|
1428 expectedScrollTop: gScrollableElement.scrollTopMax, |
|
1429 expectedScrollLeft: 1000 |
|
1430 }, |
|
1431 { description: "try whole-scroll to left (pixel)", |
|
1432 prepare: function () { |
|
1433 gScrollableElement.scrollTop = 1000; |
|
1434 gScrollableElement.scrollLeft = 1000; |
|
1435 }, |
|
1436 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
1437 deltaX: -1.0, deltaY: 0.0, |
|
1438 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, |
|
1439 expectedScrollTop: 1000, |
|
1440 expectedScrollLeft: 0 |
|
1441 }, |
|
1442 { description: "try whole-scroll to left when scrollLeft is already left-most (pixel)", |
|
1443 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
1444 deltaX: -1.0, deltaY: 0, |
|
1445 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, |
|
1446 expectedScrollTop: 1000, |
|
1447 expectedScrollLeft: 0 |
|
1448 }, |
|
1449 { description: "try whole-scroll to right (pixel)", |
|
1450 prepare: function () { |
|
1451 gScrollableElement.scrollTop = 1000; |
|
1452 gScrollableElement.scrollLeft = 1000; |
|
1453 }, |
|
1454 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
1455 deltaX: 1.0, deltaY: 0.0, |
|
1456 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, |
|
1457 expectedScrollTop: 1000, |
|
1458 expectedScrollLeft: gScrollableElement.scrollLeftMax |
|
1459 }, |
|
1460 { description: "try whole-scroll to right when scrollLeft is already right-most (pixel)", |
|
1461 event: { deltaMode: WheelEvent.DOM_DELTA_PIXEL, |
|
1462 deltaX: 1.0, deltaY: 0.0, |
|
1463 lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 }, |
|
1464 expectedScrollTop: 1000, |
|
1465 expectedScrollLeft: gScrollableElement.scrollLeftMax |
|
1466 }, |
|
1467 |
|
1468 |
|
1469 { description: "try whole-scroll to top (page)", |
|
1470 prepare: function () { |
|
1471 gScrollableElement.scrollTop = 1000; |
|
1472 gScrollableElement.scrollLeft = 1000; |
|
1473 }, |
|
1474 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1475 deltaX: 0.0, deltaY: -1.0, |
|
1476 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1 }, |
|
1477 expectedScrollTop: 0, |
|
1478 expectedScrollLeft: 1000 |
|
1479 }, |
|
1480 { description: "try whole-scroll to top when scrollTop is already top-most (page)", |
|
1481 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1482 deltaX: 0.0, deltaY: -1.0, |
|
1483 lineOrPageDeltaX: 0, lineOrPageDeltaY: -1 }, |
|
1484 expectedScrollTop: 0, |
|
1485 expectedScrollLeft: 1000 |
|
1486 }, |
|
1487 { description: "try whole-scroll to bottom (page)", |
|
1488 prepare: function () { |
|
1489 gScrollableElement.scrollTop = 1000; |
|
1490 gScrollableElement.scrollLeft = 1000; |
|
1491 }, |
|
1492 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1493 deltaX: 0.0, deltaY: 1.0, |
|
1494 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1 }, |
|
1495 expectedScrollTop: gScrollableElement.scrollTopMax, |
|
1496 expectedScrollLeft: 1000 |
|
1497 }, |
|
1498 { description: "try whole-scroll to bottom when scrollTop is already bottom-most (page)", |
|
1499 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1500 deltaX: 0, deltaY: 1.0, |
|
1501 lineOrPageDeltaX: 0, lineOrPageDeltaY: 1 }, |
|
1502 expectedScrollTop: gScrollableElement.scrollTopMax, |
|
1503 expectedScrollLeft: 1000 |
|
1504 }, |
|
1505 { description: "try whole-scroll to left (page)", |
|
1506 prepare: function () { |
|
1507 gScrollableElement.scrollTop = 1000; |
|
1508 gScrollableElement.scrollLeft = 1000; |
|
1509 }, |
|
1510 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1511 deltaX: -1.0, deltaY: 0.0, |
|
1512 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0 }, |
|
1513 expectedScrollTop: 1000, |
|
1514 expectedScrollLeft: 0 |
|
1515 }, |
|
1516 { description: "try whole-scroll to left when scrollLeft is already left-most (page)", |
|
1517 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1518 deltaX: -1.0, deltaY: 0, |
|
1519 lineOrPageDeltaX: -1, lineOrPageDeltaY: 0 }, |
|
1520 expectedScrollTop: 1000, |
|
1521 expectedScrollLeft: 0 |
|
1522 }, |
|
1523 { description: "try whole-scroll to right (page)", |
|
1524 prepare: function () { |
|
1525 gScrollableElement.scrollTop = 1000; |
|
1526 gScrollableElement.scrollLeft = 1000; |
|
1527 }, |
|
1528 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1529 deltaX: 1.0, deltaY: 0.0, |
|
1530 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0 }, |
|
1531 expectedScrollTop: 1000, |
|
1532 expectedScrollLeft: gScrollableElement.scrollLeftMax |
|
1533 }, |
|
1534 { description: "try whole-scroll to right when scrollLeft is already right-most (page)", |
|
1535 event: { deltaMode: WheelEvent.DOM_DELTA_PAGE, |
|
1536 deltaX: 1.0, deltaY: 0.0, |
|
1537 lineOrPageDeltaX: 1, lineOrPageDeltaY: 0 }, |
|
1538 expectedScrollTop: 1000, |
|
1539 expectedScrollLeft: gScrollableElement.scrollLeftMax |
|
1540 }, |
|
1541 ]; |
|
1542 |
|
1543 var index = 0; |
|
1544 |
|
1545 function doIt() |
|
1546 { |
|
1547 const kTest = kTests[index]; |
|
1548 if (kTest.prepare) { |
|
1549 kTest.prepare(); |
|
1550 } |
|
1551 synthesizeWheel(gScrollableElement, 10, 10, kTest.event); |
|
1552 hitEventLoop(function () { |
|
1553 is(gScrollableElement.scrollTop, kTest.expectedScrollTop, |
|
1554 "doTestWholeScroll, " + kTest.description + ": unexpected scrollTop"); |
|
1555 is(gScrollableElement.scrollLeft, kTest.expectedScrollLeft, |
|
1556 "doTestWholeScroll, " + kTest.description + ": unexpected scrollLeft"); |
|
1557 if (++index == kTests.length) { |
|
1558 SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_x"); |
|
1559 SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_y"); |
|
1560 SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_z"); |
|
1561 SimpleTest.executeSoon(aCallback); |
|
1562 } else { |
|
1563 doIt(); |
|
1564 } |
|
1565 }, 20); |
|
1566 } |
|
1567 doIt(); |
|
1568 } |
|
1569 |
|
1570 function doTestActionOverride(aCallback) |
|
1571 { |
|
1572 const kNoScroll = 0x00; |
|
1573 const kScrollUp = 0x01; |
|
1574 const kScrollDown = 0x02; |
|
1575 const kScrollLeft = 0x04; |
|
1576 const kScrollRight = 0x08; |
|
1577 |
|
1578 const kTests = [ |
|
1579 { action: 1, override_x: -1, |
|
1580 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1581 deltaX: 1.0, deltaY: 1.0, |
|
1582 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1583 expected: kScrollDown | kScrollRight |
|
1584 }, |
|
1585 { action: 1, override_x: 0, |
|
1586 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1587 deltaX: 1.0, deltaY: 1.0, |
|
1588 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1589 expected: kScrollDown | kScrollRight |
|
1590 }, |
|
1591 { action: 1, override_x: 1, |
|
1592 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1593 deltaX: 1.0, deltaY: 1.0, |
|
1594 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1595 expected: kScrollDown | kScrollRight |
|
1596 }, |
|
1597 { action: 0, override_x: -1, |
|
1598 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1599 deltaX: 1.0, deltaY: 1.0, |
|
1600 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1601 expected: kNoScroll |
|
1602 }, |
|
1603 { action: 0, override_x: 0, |
|
1604 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1605 deltaX: 1.0, deltaY: 1.0, |
|
1606 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1607 expected: kNoScroll |
|
1608 }, |
|
1609 { action: 0, override_x: 1, |
|
1610 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1611 deltaX: 1.0, deltaY: 1.0, |
|
1612 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1613 expected: kNoScroll |
|
1614 }, |
|
1615 { action: 1, override_x: -1, |
|
1616 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1617 deltaX: 1.0, deltaY: 0.5, |
|
1618 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1619 expected: kScrollDown | kScrollRight |
|
1620 }, |
|
1621 { action: 1, override_x: 0, |
|
1622 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1623 deltaX: 1.0, deltaY: 0.5, |
|
1624 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1625 expected: kNoScroll |
|
1626 }, |
|
1627 { action: 1, override_x: 1, |
|
1628 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1629 deltaX: 1.0, deltaY: 0.5, |
|
1630 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1631 expected: kScrollDown | kScrollRight |
|
1632 }, |
|
1633 { action: 0, override_x: -1, |
|
1634 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1635 deltaX: 1.0, deltaY: 0.5, |
|
1636 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1637 expected: kNoScroll |
|
1638 }, |
|
1639 { action: 0, override_x: 0, |
|
1640 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1641 deltaX: 1.0, deltaY: 0.5, |
|
1642 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1643 expected: kNoScroll |
|
1644 }, |
|
1645 { action: 0, override_x: 1, |
|
1646 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1647 deltaX: 1.0, deltaY: 0.5, |
|
1648 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1649 expected: kScrollDown | kScrollRight |
|
1650 }, |
|
1651 { action: 1, override_x: -1, |
|
1652 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1653 deltaX: 0.5, deltaY: 1.0, |
|
1654 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1655 expected: kScrollDown | kScrollRight |
|
1656 }, |
|
1657 { action: 1, override_x: 0, |
|
1658 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1659 deltaX: 0.5, deltaY: 1.0, |
|
1660 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1661 expected: kScrollDown | kScrollRight |
|
1662 }, |
|
1663 { action: 1, override_x: 1, |
|
1664 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1665 deltaX: 0.5, deltaY: 1.0, |
|
1666 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1667 expected: kScrollDown | kScrollRight |
|
1668 }, |
|
1669 { action: 0, override_x: -1, |
|
1670 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1671 deltaX: 0.5, deltaY: 1.0, |
|
1672 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1673 expected: kNoScroll |
|
1674 }, |
|
1675 { action: 0, override_x: 0, |
|
1676 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1677 deltaX: 0.5, deltaY: 1.0, |
|
1678 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1679 expected: kNoScroll |
|
1680 }, |
|
1681 { action: 0, override_x: 1, |
|
1682 event: { deltaMode: WheelEvent.DOM_DELTA_LINE, |
|
1683 deltaX: 0.5, deltaY: 1.0, |
|
1684 lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 }, |
|
1685 expected: kNoScroll |
|
1686 }, |
|
1687 ]; |
|
1688 |
|
1689 var index = 0; |
|
1690 |
|
1691 function doIt() |
|
1692 { |
|
1693 const kTest = kTests[index]; |
|
1694 description = "doTestActionOverride(action=" + kTest.action + ", " + |
|
1695 "override_x=" + kTest.override_x + ", " + |
|
1696 "deltaX=" + kTest.event.deltaX + ", " + |
|
1697 "deltaY=" + kTest.event.deltaY + "): "; |
|
1698 SpecialPowers.setIntPref("mousewheel.default.action", kTest.action); |
|
1699 SpecialPowers.setIntPref("mousewheel.default.action.override_x", kTest.override_x); |
|
1700 gScrollableElement.scrollTop = 1000; |
|
1701 gScrollableElement.scrollLeft = 1000; |
|
1702 synthesizeWheel(gScrollableElement, 10, 10, kTest.event); |
|
1703 hitEventLoop(function () { |
|
1704 if (kTest.expected & kScrollUp) { |
|
1705 ok(gScrollableElement.scrollTop < 1000, description + "not scrolled up, got " + gScrollableElement.scrollTop); |
|
1706 } else if (kTest.expected & kScrollDown) { |
|
1707 ok(gScrollableElement.scrollTop > 1000, description + "not scrolled down, got " + gScrollableElement.scrollTop); |
|
1708 } else { |
|
1709 is(gScrollableElement.scrollTop, 1000, description + "scrolled vertical"); |
|
1710 } |
|
1711 if (kTest.expected & kScrollLeft) { |
|
1712 ok(gScrollableElement.scrollLeft < 1000, description + "not scrolled to left, got " + gScrollableElement.scrollLeft); |
|
1713 } else if (kTest.expected & kScrollRight) { |
|
1714 ok(gScrollableElement.scrollLeft > 1000, description + "not scrolled to right, got " + gScrollableElement.scrollLeft); |
|
1715 } else { |
|
1716 is(gScrollableElement.scrollLeft, 1000, description + "scrolled horizontal"); |
|
1717 } |
|
1718 if (++index == kTests.length) { |
|
1719 SpecialPowers.setIntPref("mousewheel.default.action", 1); |
|
1720 SpecialPowers.setIntPref("mousewheel.default.action.override_x", -1); |
|
1721 SimpleTest.executeSoon(aCallback); |
|
1722 } else { |
|
1723 doIt(); |
|
1724 } |
|
1725 }, 20); |
|
1726 } |
|
1727 doIt(); |
|
1728 } |
|
1729 |
|
1730 function runTests() |
|
1731 { |
|
1732 SpecialPowers.setBoolPref("general.smoothScroll", false); |
|
1733 |
|
1734 SpecialPowers.setIntPref("mousewheel.default.action", 1); // scroll |
|
1735 SpecialPowers.setIntPref("mousewheel.default.action.override_x", -1); |
|
1736 SpecialPowers.setIntPref("mousewheel.with_shift.action", 2); // history |
|
1737 SpecialPowers.setIntPref("mousewheel.with_shift.action.override_x", -1); |
|
1738 SpecialPowers.setIntPref("mousewheel.with_control.action", 3); // zoom |
|
1739 SpecialPowers.setIntPref("mousewheel.with_control.action.override_x", -1); |
|
1740 |
|
1741 const kSettings = [ |
|
1742 { description: "all delta values are not customized", |
|
1743 deltaMultiplierX: 1.0, deltaMultiplierY: 1.0, deltaMultiplierZ: 1.0 }, |
|
1744 { description: "deltaX is reverted", |
|
1745 deltaMultiplierX: -1.0, deltaMultiplierY: 1.0, deltaMultiplierZ: 1.0 }, |
|
1746 { description: "deltaY is reverted", |
|
1747 deltaMultiplierX: 1.0, deltaMultiplierY: -1.0, deltaMultiplierZ: 1.0 }, |
|
1748 { description: "deltaZ is reverted", |
|
1749 deltaMultiplierX: 1.0, deltaMultiplierY: 1.0, deltaMultiplierZ: -1.0 }, |
|
1750 { description: "deltaX is 2.0", |
|
1751 deltaMultiplierX: 2.0, deltaMultiplierY: 1.0, deltaMultiplierZ: 1.0 }, |
|
1752 { description: "deltaY is 2.0", |
|
1753 deltaMultiplierX: 1.0, deltaMultiplierY: 2.0, deltaMultiplierZ: 1.0 }, |
|
1754 { description: "deltaZ is 2.0", |
|
1755 deltaMultiplierX: 1.0, deltaMultiplierY: 1.0, deltaMultiplierZ: 2.0 }, |
|
1756 { description: "deltaX is -2.0", |
|
1757 deltaMultiplierX: -2.0, deltaMultiplierY: 1.0, deltaMultiplierZ: 1.0 }, |
|
1758 { description: "deltaY is -2.0", |
|
1759 deltaMultiplierX: 1.0, deltaMultiplierY: -2.0, deltaMultiplierZ: 1.0 }, |
|
1760 { description: "deltaZ is -2.0", |
|
1761 deltaMultiplierX: 1.0, deltaMultiplierY: 1.0, deltaMultiplierZ: -2.0 }, |
|
1762 ]; |
|
1763 |
|
1764 var index = 0; |
|
1765 |
|
1766 function doTest() { |
|
1767 setDeltaMultiplierSettings(kSettings[index]); |
|
1768 doTestScroll(kSettings[index], function () { |
|
1769 doTestZoom(kSettings[index], function() { |
|
1770 if (++index == kSettings.length) { |
|
1771 setDeltaMultiplierSettings(kSettings[0]); |
|
1772 doTestZoomedScroll(function() { |
|
1773 doTestWholeScroll(function() { |
|
1774 doTestActionOverride(function() { |
|
1775 finishTests(); |
|
1776 }); |
|
1777 }); |
|
1778 }); |
|
1779 } else { |
|
1780 doTest(); |
|
1781 } |
|
1782 }); |
|
1783 }); |
|
1784 } |
|
1785 doTest(); |
|
1786 } |
|
1787 |
|
1788 function finishTests() |
|
1789 { |
|
1790 SpecialPowers.clearUserPref("general.smoothScroll"); |
|
1791 |
|
1792 SpecialPowers.clearUserPref("mousewheel.default.action"); |
|
1793 SpecialPowers.clearUserPref("mousewheel.default.action.override_x"); |
|
1794 SpecialPowers.clearUserPref("mousewheel.with_shift.action"); |
|
1795 SpecialPowers.clearUserPref("mousewheel.with_shift.action.override_x"); |
|
1796 SpecialPowers.clearUserPref("mousewheel.with_control.action"); |
|
1797 SpecialPowers.clearUserPref("mousewheel.with_control.action.override_x"); |
|
1798 |
|
1799 SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_x"); |
|
1800 SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_y"); |
|
1801 SpecialPowers.clearUserPref("mousewheel.default.delta_multiplier_z"); |
|
1802 SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_x"); |
|
1803 SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_y"); |
|
1804 SpecialPowers.clearUserPref("mousewheel.with_alt.delta_multiplier_z"); |
|
1805 SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_x"); |
|
1806 SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_y"); |
|
1807 SpecialPowers.clearUserPref("mousewheel.with_control.delta_multiplier_z"); |
|
1808 SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_x"); |
|
1809 SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_y"); |
|
1810 SpecialPowers.clearUserPref("mousewheel.with_meta.delta_multiplier_z"); |
|
1811 SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_x"); |
|
1812 SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_y"); |
|
1813 SpecialPowers.clearUserPref("mousewheel.with_shift.delta_multiplier_z"); |
|
1814 SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_x"); |
|
1815 SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_y"); |
|
1816 SpecialPowers.clearUserPref("mousewheel.with_win.delta_multiplier_z"); |
|
1817 |
|
1818 winUtils.restoreNormalRefresh(); |
|
1819 |
|
1820 window.opener.finish(); |
|
1821 } |
|
1822 |
|
1823 </script> |
|
1824 </pre> |
|
1825 </body> |
|
1826 </html> |