Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(595)

Side by Side Diff: content/browser/renderer_host/input/touch_action_filter_unittest.cc

Issue 93733005: Implement support for touch-action: pan-x/pan-y in chromium (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Apply jdduke CR feedback Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/input/touch_action_filter.h" 5 #include "content/browser/renderer_host/input/touch_action_filter.h"
6 #include "content/common/input/synthetic_web_input_event_builders.h" 6 #include "content/common/input/synthetic_web_input_event_builders.h"
7 #include "content/port/browser/event_with_latency_info.h" 7 #include "content/port/browser/event_with_latency_info.h"
8 #include "content/port/common/input_event_ack_state.h" 8 #include "content/port/common/input_event_ack_state.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/WebKit/public/web/WebInputEvent.h" 10 #include "third_party/WebKit/public/web/WebInputEvent.h"
11 11
12 using blink::WebGestureEvent; 12 using blink::WebGestureEvent;
13 using blink::WebInputEvent; 13 using blink::WebInputEvent;
14 14
15 namespace content { 15 namespace content {
16 16
17 TEST(TouchActionFilterTest, SimpleFilter) { 17 TEST(TouchActionFilterTest, SimpleFilter) {
18 TouchActionFilter filter; 18 TouchActionFilter filter;
19 19
20 const WebGestureEvent scroll_begin = SyntheticWebGestureEventBuilder::Build( 20 WebGestureEvent scroll_begin =
21 WebInputEvent::GestureScrollBegin, WebGestureEvent::Touchscreen); 21 SyntheticWebGestureEventBuilder::BuildScrollBegin(2, 3);
22 const WebGestureEvent scroll_update = 22 const float kDeltaX = 5;
23 SyntheticWebGestureEventBuilder::BuildScrollUpdate(0, 10, 0); 23 const float kDeltaY = 10;
24 const WebGestureEvent scroll_end = SyntheticWebGestureEventBuilder::Build( 24 WebGestureEvent scroll_update =
25 SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDeltaX, kDeltaY, 0);
26 WebGestureEvent scroll_end = SyntheticWebGestureEventBuilder::Build(
25 WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen); 27 WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen);
26 const WebGestureEvent tap = SyntheticWebGestureEventBuilder::Build( 28 WebGestureEvent tap = SyntheticWebGestureEventBuilder::Build(
27 WebInputEvent::GestureTap, WebGestureEvent::Touchscreen); 29 WebInputEvent::GestureTap, WebGestureEvent::Touchscreen);
28 30
29 // No events filtered by default. 31 // No events filtered by default.
30 EXPECT_FALSE(filter.FilterGestureEvent(scroll_begin)); 32 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
31 EXPECT_FALSE(filter.FilterGestureEvent(scroll_update)); 33 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
32 EXPECT_FALSE(filter.FilterGestureEvent(scroll_end)); 34 EXPECT_EQ(kDeltaX, scroll_update.data.scrollUpdate.deltaX);
33 EXPECT_FALSE(filter.FilterGestureEvent(tap)); 35 EXPECT_EQ(kDeltaY, scroll_update.data.scrollUpdate.deltaY);
36 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end));
37 EXPECT_FALSE(filter.FilterGestureEvent(&tap));
34 38
35 // TOUCH_ACTION_AUTO doesn't cause any filtering. 39 // TOUCH_ACTION_AUTO doesn't cause any filtering.
36 filter.OnSetTouchAction(TOUCH_ACTION_AUTO); 40 filter.OnSetTouchAction(TOUCH_ACTION_AUTO);
37 EXPECT_FALSE(filter.FilterGestureEvent(scroll_begin)); 41 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
38 EXPECT_FALSE(filter.FilterGestureEvent(scroll_update)); 42 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
39 EXPECT_FALSE(filter.FilterGestureEvent(scroll_end)); 43 EXPECT_EQ(kDeltaX, scroll_update.data.scrollUpdate.deltaX);
44 EXPECT_EQ(kDeltaY, scroll_update.data.scrollUpdate.deltaY);
45 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end));
40 46
41 // TOUCH_ACTION_NONE filters out all scroll events, but no other events. 47 // TOUCH_ACTION_NONE filters out all scroll events, but no other events.
42 filter.OnSetTouchAction(TOUCH_ACTION_NONE); 48 filter.OnSetTouchAction(TOUCH_ACTION_NONE);
43 EXPECT_FALSE(filter.FilterGestureEvent(tap)); 49 EXPECT_FALSE(filter.FilterGestureEvent(&tap));
44 EXPECT_TRUE(filter.FilterGestureEvent(scroll_begin)); 50 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
45 EXPECT_TRUE(filter.FilterGestureEvent(scroll_update)); 51 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
46 EXPECT_TRUE(filter.FilterGestureEvent(scroll_update)); 52 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
47 EXPECT_TRUE(filter.FilterGestureEvent(scroll_end)); 53 EXPECT_EQ(kDeltaX, scroll_update.data.scrollUpdate.deltaX);
54 EXPECT_EQ(kDeltaY, scroll_update.data.scrollUpdate.deltaY);
55 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end));
48 56
49 // After the end of a gesture the state is reset. 57 // After the end of a gesture the state is reset.
50 EXPECT_FALSE(filter.FilterGestureEvent(scroll_begin)); 58 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
51 EXPECT_FALSE(filter.FilterGestureEvent(scroll_update)); 59 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
52 EXPECT_FALSE(filter.FilterGestureEvent(scroll_end)); 60 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end));
53 61
54 // Setting touch action doesn't impact any in-progress gestures. 62 // Setting touch action doesn't impact any in-progress gestures.
55 EXPECT_FALSE(filter.FilterGestureEvent(scroll_begin)); 63 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
56 filter.OnSetTouchAction(TOUCH_ACTION_NONE); 64 filter.OnSetTouchAction(TOUCH_ACTION_NONE);
57 EXPECT_FALSE(filter.FilterGestureEvent(scroll_update)); 65 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
58 EXPECT_FALSE(filter.FilterGestureEvent(scroll_end)); 66 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end));
59 67
60 // And the state is still cleared for the next gesture. 68 // And the state is still cleared for the next gesture.
61 EXPECT_FALSE(filter.FilterGestureEvent(scroll_begin)); 69 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
62 EXPECT_FALSE(filter.FilterGestureEvent(scroll_end)); 70 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end));
63 71
64 // Changing the touch action during a gesture has no effect. 72 // Changing the touch action during a gesture has no effect.
65 filter.OnSetTouchAction(TOUCH_ACTION_NONE); 73 filter.OnSetTouchAction(TOUCH_ACTION_NONE);
66 EXPECT_TRUE(filter.FilterGestureEvent(scroll_begin)); 74 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
67 filter.OnSetTouchAction(TOUCH_ACTION_AUTO); 75 filter.OnSetTouchAction(TOUCH_ACTION_AUTO);
68 EXPECT_TRUE(filter.FilterGestureEvent(scroll_update)); 76 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
69 EXPECT_TRUE(filter.FilterGestureEvent(scroll_update)); 77 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
70 EXPECT_TRUE(filter.FilterGestureEvent(scroll_end)); 78 EXPECT_EQ(kDeltaX, scroll_update.data.scrollUpdate.deltaX);
79 EXPECT_EQ(kDeltaY, scroll_update.data.scrollUpdate.deltaY);
80 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end));
81 }
82
83 TEST(TouchActionFilterTest, Fling) {
84 TouchActionFilter filter;
85
86 WebGestureEvent scroll_begin =
87 SyntheticWebGestureEventBuilder::BuildScrollBegin(2, 3);
88 WebGestureEvent scroll_update =
89 SyntheticWebGestureEventBuilder::BuildScrollUpdate(5, 10, 0);
90 const float kFlingX = 7;
91 const float kFlingY = -4;
92 WebGestureEvent fling_start = SyntheticWebGestureEventBuilder::BuildFling(
93 kFlingX, kFlingY, WebGestureEvent::Touchscreen);
94 WebGestureEvent pad_fling = SyntheticWebGestureEventBuilder::BuildFling(
95 kFlingX, kFlingY, WebGestureEvent::Touchpad);
96
97 // TOUCH_ACTION_NONE filters out fling events.
98 filter.OnSetTouchAction(TOUCH_ACTION_NONE);
99 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
100 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
101 EXPECT_TRUE(filter.FilterGestureEvent(&fling_start));
102 EXPECT_EQ(kFlingX, fling_start.data.flingStart.velocityX);
103 EXPECT_EQ(kFlingY, fling_start.data.flingStart.velocityY);
104
105 // After a fling the state is reset.
106 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
107 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
108 EXPECT_FALSE(filter.FilterGestureEvent(&fling_start));
109
110 // touchpad flings aren't filtered and don't reset state.
111 filter.OnSetTouchAction(TOUCH_ACTION_NONE);
112 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
113 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
114 EXPECT_FALSE(filter.FilterGestureEvent(&pad_fling));
115 EXPECT_TRUE(filter.FilterGestureEvent(&fling_start));
116 }
117
118 TEST(TouchActionFilterTest, PanX) {
119 TouchActionFilter filter;
120 const float kDX = 5;
121 const float kDY = 10;
122 const float kFlingX = 7;
123 const float kFlingY = -4;
124 WebGestureEvent scrollEnd = SyntheticWebGestureEventBuilder::Build(
125 WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen);
126
127 {
128 // Scrolls with no direction hint are permitted in the X axis.
129 filter.OnSetTouchAction(TOUCH_ACTION_PAN_X);
130
131 WebGestureEvent scroll_begin =
132 SyntheticWebGestureEventBuilder::BuildScrollBegin(0, 0);
133 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
134
135 WebGestureEvent scroll_update =
136 SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0);
137 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
138 EXPECT_EQ(kDX, scroll_update.data.scrollUpdate.deltaX);
139 EXPECT_EQ(0, scroll_update.data.scrollUpdate.deltaY);
140
141 EXPECT_FALSE(filter.FilterGestureEvent(&scrollEnd));
142 }
143
144 {
145 // Scrolls hinted mostly in the X axis are permitted in that axis.
146 filter.OnSetTouchAction(TOUCH_ACTION_PAN_X);
147 WebGestureEvent scroll_begin =
148 SyntheticWebGestureEventBuilder::BuildScrollBegin(-7, 6);
149 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
150
151 WebGestureEvent scroll_update =
152 SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0);
153 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
154 EXPECT_EQ(kDX, scroll_update.data.scrollUpdate.deltaX);
155 EXPECT_EQ(0, scroll_update.data.scrollUpdate.deltaY);
156
157 WebGestureEvent scroll_update2 =
158 SyntheticWebGestureEventBuilder::BuildScrollUpdate(-4, -2, 0);
159 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update2));
160 EXPECT_EQ(-4, scroll_update2.data.scrollUpdate.deltaX);
161 EXPECT_EQ(0, scroll_update2.data.scrollUpdate.deltaY);
162
163 WebGestureEvent fling_start = SyntheticWebGestureEventBuilder::BuildFling(
164 kFlingX, kFlingY, WebGestureEvent::Touchscreen);
165 EXPECT_FALSE(filter.FilterGestureEvent(&fling_start));
166 EXPECT_EQ(kFlingX, fling_start.data.flingStart.velocityX);
167 EXPECT_EQ(0, fling_start.data.flingStart.velocityY);
168 }
169
170 {
171 // Scrolls hinted mostly in the Y direction are suppressed entirely.
172 filter.OnSetTouchAction(TOUCH_ACTION_PAN_X);
173 WebGestureEvent scroll_begin =
174 SyntheticWebGestureEventBuilder::BuildScrollBegin(-7, 8);
175 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
176
177 WebGestureEvent scroll_update =
178 SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0);
179 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
180 EXPECT_EQ(kDX, scroll_update.data.scrollUpdate.deltaX);
181 EXPECT_EQ(kDY, scroll_update.data.scrollUpdate.deltaY);
182
183 EXPECT_TRUE(filter.FilterGestureEvent(&scrollEnd));
184 }
185 }
186
187 TEST(TouchActionFilterTest, PanY) {
188 TouchActionFilter filter;
189 const float kDX = 5;
190 const float kDY = 10;
191 const float kFlingX = 7;
192 const float kFlingY = -4;
193 WebGestureEvent scrollEnd = SyntheticWebGestureEventBuilder::Build(
194 WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen);
195
196 {
197 // Scrolls with no direction hint are permitted in the Y axis.
198 filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y);
199
200 WebGestureEvent scroll_begin =
201 SyntheticWebGestureEventBuilder::BuildScrollBegin(0, 0);
202 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
203
204 WebGestureEvent scroll_update =
205 SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0);
206 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
207 EXPECT_EQ(0, scroll_update.data.scrollUpdate.deltaX);
208 EXPECT_EQ(kDY, scroll_update.data.scrollUpdate.deltaY);
209
210 EXPECT_FALSE(filter.FilterGestureEvent(&scrollEnd));
211 }
212
213 {
214 // Scrolls hinted mostly in the Y axis are permitted in that axis.
215 filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y);
216 WebGestureEvent scroll_begin =
217 SyntheticWebGestureEventBuilder::BuildScrollBegin(-6, 7);
218 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
219
220 WebGestureEvent scroll_update =
221 SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0);
222 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
223 EXPECT_EQ(0, scroll_update.data.scrollUpdate.deltaX);
224 EXPECT_EQ(kDY, scroll_update.data.scrollUpdate.deltaY);
225
226 WebGestureEvent scroll_update2 =
227 SyntheticWebGestureEventBuilder::BuildScrollUpdate(-4, -2, 0);
228 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update2));
229 EXPECT_EQ(0, scroll_update2.data.scrollUpdate.deltaX);
230 EXPECT_EQ(-2, scroll_update2.data.scrollUpdate.deltaY);
231
232 WebGestureEvent fling_start = SyntheticWebGestureEventBuilder::BuildFling(
233 kFlingX, kFlingY, WebGestureEvent::Touchscreen);
234 EXPECT_FALSE(filter.FilterGestureEvent(&fling_start));
235 EXPECT_EQ(0, fling_start.data.flingStart.velocityX);
236 EXPECT_EQ(kFlingY, fling_start.data.flingStart.velocityY);
237 }
238
239 {
240 // Scrolls hinted mostly in the X direction are suppressed entirely.
241 filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y);
242 WebGestureEvent scroll_begin =
243 SyntheticWebGestureEventBuilder::BuildScrollBegin(-8, 7);
244 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
245
246 WebGestureEvent scroll_update =
247 SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0);
248 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
249 EXPECT_EQ(kDX, scroll_update.data.scrollUpdate.deltaX);
250 EXPECT_EQ(kDY, scroll_update.data.scrollUpdate.deltaY);
251
252 EXPECT_TRUE(filter.FilterGestureEvent(&scrollEnd));
253 }
254 }
255
256 TEST(TouchActionFilterTest, PanXY) {
257 TouchActionFilter filter;
258 const float kDX = 5;
259 const float kDY = 10;
260 const float kFlingX = 7;
261 const float kFlingY = -4;
262
263 {
264 // Scrolls hinted in the X axis are permitted and unmodified.
265 filter.OnSetTouchAction(TOUCH_ACTION_PAN_X_Y);
266 WebGestureEvent scroll_begin =
267 SyntheticWebGestureEventBuilder::BuildScrollBegin(-7, 6);
268 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
269
270 WebGestureEvent scroll_update =
271 SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0);
272 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
273 EXPECT_EQ(kDX, scroll_update.data.scrollUpdate.deltaX);
274 EXPECT_EQ(kDY, scroll_update.data.scrollUpdate.deltaY);
275
276 WebGestureEvent fling_start = SyntheticWebGestureEventBuilder::BuildFling(
277 kFlingX, kFlingY, WebGestureEvent::Touchscreen);
278 EXPECT_FALSE(filter.FilterGestureEvent(&fling_start));
279 EXPECT_EQ(kFlingX, fling_start.data.flingStart.velocityX);
280 EXPECT_EQ(kFlingY, fling_start.data.flingStart.velocityY);
281 }
282
283 {
284 // Scrolls hinted in the Y axis are permitted and unmodified.
285 filter.OnSetTouchAction(TOUCH_ACTION_PAN_X_Y);
286 WebGestureEvent scroll_begin =
287 SyntheticWebGestureEventBuilder::BuildScrollBegin(-6, 7);
288 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
289
290 WebGestureEvent scroll_update =
291 SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0);
292 EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
293 EXPECT_EQ(kDX, scroll_update.data.scrollUpdate.deltaX);
294 EXPECT_EQ(kDY, scroll_update.data.scrollUpdate.deltaY);
295
296 WebGestureEvent fling_start = SyntheticWebGestureEventBuilder::BuildFling(
297 kFlingX, kFlingY, WebGestureEvent::Touchscreen);
298 EXPECT_FALSE(filter.FilterGestureEvent(&fling_start));
299 EXPECT_EQ(kFlingX, fling_start.data.flingStart.velocityX);
300 EXPECT_EQ(kFlingY, fling_start.data.flingStart.velocityY);
301 }
302 }
303
304 TEST(TouchActionFilterTest, Intersect) {
305 EXPECT_EQ(TOUCH_ACTION_NONE,
306 TouchActionFilter::Intersect(TOUCH_ACTION_NONE, TOUCH_ACTION_AUTO));
307 EXPECT_EQ(TOUCH_ACTION_NONE,
308 TouchActionFilter::Intersect(TOUCH_ACTION_AUTO, TOUCH_ACTION_NONE));
309 EXPECT_EQ(TOUCH_ACTION_PAN_X,
310 TouchActionFilter::Intersect(TOUCH_ACTION_AUTO, TOUCH_ACTION_PAN_X));
311 EXPECT_EQ(TOUCH_ACTION_PAN_Y,
312 TouchActionFilter::Intersect(TOUCH_ACTION_PAN_Y, TOUCH_ACTION_AUTO));
313 EXPECT_EQ(TOUCH_ACTION_AUTO,
314 TouchActionFilter::Intersect(TOUCH_ACTION_AUTO, TOUCH_ACTION_AUTO));
315 EXPECT_EQ(TOUCH_ACTION_PAN_X,
316 TouchActionFilter::Intersect(TOUCH_ACTION_PAN_X_Y, TOUCH_ACTION_PAN_X));
317 EXPECT_EQ(TOUCH_ACTION_PAN_Y,
318 TouchActionFilter::Intersect(TOUCH_ACTION_PAN_Y, TOUCH_ACTION_PAN_X_Y));
319 EXPECT_EQ(TOUCH_ACTION_PAN_X_Y,
320 TouchActionFilter::Intersect(TOUCH_ACTION_PAN_X_Y, TOUCH_ACTION_AUTO));
321 EXPECT_EQ(TOUCH_ACTION_NONE,
322 TouchActionFilter::Intersect(TOUCH_ACTION_PAN_X, TOUCH_ACTION_PAN_Y));
71 } 323 }
72 324
73 TEST(TouchActionFilterTest, MultiTouch) { 325 TEST(TouchActionFilterTest, MultiTouch) {
74 TouchActionFilter filter; 326 TouchActionFilter filter;
75 327
76 const WebGestureEvent scroll_begin = SyntheticWebGestureEventBuilder::Build( 328 WebGestureEvent scroll_begin =
77 WebInputEvent::GestureScrollBegin, WebGestureEvent::Touchscreen); 329 SyntheticWebGestureEventBuilder::BuildScrollBegin(2, 3);
78 const WebGestureEvent scroll_update = 330 const float kDeltaX = 5;
79 SyntheticWebGestureEventBuilder::BuildScrollUpdate(0, 10, 0); 331 const float kDeltaY = 10;
80 const WebGestureEvent scrollEnd = SyntheticWebGestureEventBuilder::Build( 332 WebGestureEvent scroll_update =
333 SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDeltaX, kDeltaY, 0);
334 WebGestureEvent scrollEnd = SyntheticWebGestureEventBuilder::Build(
81 WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen); 335 WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen);
82 336
83 // For multiple points, the intersection is what matters. 337 // For multiple points, the intersection is what matters.
84 filter.OnSetTouchAction(TOUCH_ACTION_NONE); 338 filter.OnSetTouchAction(TOUCH_ACTION_NONE);
85 filter.OnSetTouchAction(TOUCH_ACTION_AUTO); 339 filter.OnSetTouchAction(TOUCH_ACTION_AUTO);
86 EXPECT_TRUE(filter.FilterGestureEvent(scroll_begin)); 340 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
87 EXPECT_TRUE(filter.FilterGestureEvent(scroll_update)); 341 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
88 EXPECT_TRUE(filter.FilterGestureEvent(scroll_update)); 342 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
89 EXPECT_TRUE(filter.FilterGestureEvent(scrollEnd)); 343 EXPECT_EQ(kDeltaX, scroll_update.data.scrollUpdate.deltaX);
90 344 EXPECT_EQ(kDeltaY, scroll_update.data.scrollUpdate.deltaY);
91 filter.OnSetTouchAction(TOUCH_ACTION_AUTO); 345 EXPECT_TRUE(filter.FilterGestureEvent(&scrollEnd));
92 filter.OnSetTouchAction(TOUCH_ACTION_NONE); 346
93 filter.OnSetTouchAction(TOUCH_ACTION_AUTO); 347 // Intersection of PAN_X and PAN_Y is NONE.
94 EXPECT_TRUE(filter.FilterGestureEvent(scroll_begin)); 348 filter.OnSetTouchAction(TOUCH_ACTION_PAN_X);
95 EXPECT_TRUE(filter.FilterGestureEvent(scroll_update)); 349 filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y);
96 EXPECT_TRUE(filter.FilterGestureEvent(scroll_update)); 350 filter.OnSetTouchAction(TOUCH_ACTION_PAN_X_Y);
97 EXPECT_TRUE(filter.FilterGestureEvent(scrollEnd)); 351 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
352 EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
353 EXPECT_TRUE(filter.FilterGestureEvent(&scrollEnd));
98 } 354 }
99 355
100 } // namespace content 356 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698