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

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

Issue 140253005: Add touch scrolling modes experimental flags (DEPRECATED) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address my own nits. Created 6 years, 10 months 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "content/browser/renderer_host/input/gesture_event_queue.h" 7 #include "content/browser/renderer_host/input/gesture_event_queue.h"
8 #include "content/common/input/synthetic_web_input_event_builders.h" 8 #include "content/common/input/synthetic_web_input_event_builders.h"
9 #include "content/common/input/web_input_event_traits.h" 9 #include "content/common/input/web_input_event_traits.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 PushGesture(WebInputEvent::GestureScrollBegin); 191 PushGesture(WebInputEvent::GestureScrollBegin);
192 PressTouchPoint(1, 1); 192 PressTouchPoint(1, 1);
193 EXPECT_FALSE(GesturesSent()); 193 EXPECT_FALSE(GesturesSent());
194 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 194 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
195 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), 195 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin),
196 GetAndResetSentGestures())); 196 GetAndResetSentGestures()));
197 197
198 // Multiple gestures can be queued for a single event. 198 // Multiple gestures can be queued for a single event.
199 PushGesture(WebInputEvent::GestureFlingStart); 199 PushGesture(WebInputEvent::GestureFlingStart);
200 PushGesture(WebInputEvent::GestureFlingCancel); 200 PushGesture(WebInputEvent::GestureFlingCancel);
201 MoveTouchPoint(0, 1, 1); 201 ReleaseTouchPoint(0);
202 EXPECT_FALSE(GesturesSent()); 202 EXPECT_FALSE(GesturesSent());
203 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 203 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
204 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart, 204 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart,
205 WebInputEvent::GestureFlingCancel), 205 WebInputEvent::GestureFlingCancel),
206 GetAndResetSentGestures())); 206 GetAndResetSentGestures()));
207 }
207 208
209 TEST_F(GestureEventQueueTest, BasicGesturesConsumed) {
208 // A consumed touch's gesture should not be sent. 210 // A consumed touch's gesture should not be sent.
211 PushGesture(WebInputEvent::GestureScrollBegin);
212 PressTouchPoint(1, 1);
213 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
214 EXPECT_FALSE(GesturesSent());
215
209 PushGesture(WebInputEvent::GestureFlingStart); 216 PushGesture(WebInputEvent::GestureFlingStart);
210 PushGesture(WebInputEvent::GestureFlingCancel); 217 PushGesture(WebInputEvent::GestureFlingCancel);
211 ReleaseTouchPoint(0); 218 ReleaseTouchPoint(0);
212 EXPECT_FALSE(GesturesSent());
213 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 219 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
214 EXPECT_FALSE(GesturesSent()); 220 EXPECT_FALSE(GesturesSent());
215 } 221 }
216 222
217 TEST_F(GestureEventQueueTest, ConsumedThenNotConsumed) { 223 TEST_F(GestureEventQueueTest, ConsumedThenNotConsumed) {
218 // A consumed touch's gesture should not be sent. 224 // A consumed touch's gesture should not be sent.
219 PushGesture(WebInputEvent::GestureScrollBegin); 225 PushGesture(WebInputEvent::GestureScrollBegin);
220 PressTouchPoint(1, 1); 226 PressTouchPoint(1, 1);
221 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 227 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
222 EXPECT_FALSE(GesturesSent()); 228 EXPECT_FALSE(GesturesSent());
223 229
224 // Even if the subsequent touch is not consumed, continue dropping gestures. 230 // Even if the subsequent touch is not consumed, continue dropping gestures.
225 PushGesture(WebInputEvent::GestureScrollUpdate); 231 PushGesture(WebInputEvent::GestureScrollUpdate);
226 MoveTouchPoint(0, 2, 2); 232 MoveTouchPoint(0, 2, 2);
227 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 233 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
228 EXPECT_FALSE(GesturesSent()); 234 EXPECT_FALSE(GesturesSent());
229 235
230 // Even if the subsequent touch had no consumer, continue dropping gestures. 236 // Even if the subsequent touch had no consumer, continue dropping gestures.
231 PushGesture(WebInputEvent::GestureFlingStart); 237 PushGesture(WebInputEvent::GestureFlingStart);
232 ReleaseTouchPoint(0); 238 ReleaseTouchPoint(0);
233 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 239 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
234 EXPECT_FALSE(GesturesSent()); 240 EXPECT_FALSE(GesturesSent());
235 } 241 }
236 242
243
244 TEST_F(GestureEventQueueTest, NotConsumedThenConsumed) {
245 // A not consumed touch's gesture should be sent.
246 PushGesture(WebInputEvent::GestureScrollBegin);
247 PressTouchPoint(1, 1);
248 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
249 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin),
250 GetAndResetSentGestures()));
251
252 // A newly consumed gesture should not be sent.
253 PushGesture(WebInputEvent::GesturePinchBegin);
254 PressTouchPoint(10, 10);
255 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
256 EXPECT_FALSE(GesturesSent());
257
258 // And subsequent non-consumed updates should not be sent.
259 PushGesture(WebInputEvent::GestureScrollUpdate);
260 PushGesture(WebInputEvent::GesturePinchUpdate);
261 MoveTouchPoint(0, 2, 2);
262 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
263 EXPECT_FALSE(GesturesSent());
264
265 // End events dispatched only when their start events were.
266 PushGesture(WebInputEvent::GesturePinchEnd);
267 ReleaseTouchPoint(1);
268 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
269 EXPECT_FALSE(GesturesSent());
270
271 PushGesture(WebInputEvent::GestureScrollEnd);
272 ReleaseTouchPoint(0);
273 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
274 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd),
275 GetAndResetSentGestures()));
276 }
277
237 TEST_F(GestureEventQueueTest, NotConsumedThenNoConsumer) { 278 TEST_F(GestureEventQueueTest, NotConsumedThenNoConsumer) {
238 // An unconsumed touch's gesture should be sent. 279 // An unconsumed touch's gesture should be sent.
239 PushGesture(WebInputEvent::GestureScrollBegin); 280 PushGesture(WebInputEvent::GestureScrollBegin);
240 PressTouchPoint(1, 1); 281 PressTouchPoint(1, 1);
241 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 282 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
242 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), 283 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin),
243 GetAndResetSentGestures())); 284 GetAndResetSentGestures()));
244 285
245 // If the subsequent touch has no consumer (e.g., a secondary pointer is 286 // If the subsequent touch has no consumer (e.g., a secondary pointer is
246 // pressed but not on a touch handling rect), send the gesture. 287 // pressed but not on a touch handling rect), send the gesture.
247 PushGesture(WebInputEvent::GesturePinchBegin); 288 PushGesture(WebInputEvent::GesturePinchBegin);
248 PressTouchPoint(2, 2); 289 PressTouchPoint(2, 2);
249 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 290 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
250 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin), 291 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin),
251 GetAndResetSentGestures())); 292 GetAndResetSentGestures()));
252 293
253 // If the subsequent touch is consumed, then the remaining gesture sequence 294 // End events should be dispatched when their start events were, independent
254 // should be dropped, regardless of subsequent touch ack disposition. 295 // of the ack state.
296 PushGesture(WebInputEvent::GesturePinchEnd);
297 ReleaseTouchPoint(1);
298 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
299 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchEnd),
300 GetAndResetSentGestures()));
301
302 PushGesture(WebInputEvent::GestureScrollEnd);
303 ReleaseTouchPoint(0);
304 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
305 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd),
306 GetAndResetSentGestures()));
307 }
308
309 TEST_F(GestureEventQueueTest, EndingEventsSent) {
310 PushGesture(WebInputEvent::GestureScrollBegin);
311 PressTouchPoint(1, 1);
312 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
313 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin),
314 GetAndResetSentGestures()));
315
316 PushGesture(WebInputEvent::GesturePinchBegin);
317 PressTouchPoint(2, 2);
318 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
319 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin),
320 GetAndResetSentGestures()));
321
322 // Consuming the touchend event can't suppress the match end gesture.
323 PushGesture(WebInputEvent::GesturePinchEnd);
324 ReleaseTouchPoint(1);
325 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
326 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchEnd),
327 GetAndResetSentGestures()));
328
329 // But other events in the same packet are still suppressed.
255 PushGesture(WebInputEvent::GestureScrollUpdate); 330 PushGesture(WebInputEvent::GestureScrollUpdate);
256 PushGesture(WebInputEvent::GesturePinchUpdate); 331 PushGesture(WebInputEvent::GestureScrollEnd);
332 ReleaseTouchPoint(0);
333 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
334 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd),
335 GetAndResetSentGestures()));
336
337 // GestureScrollEnd and GestureFlingStart behave the same in this regard.
338 PushGesture(WebInputEvent::GestureScrollBegin);
339 PressTouchPoint(1, 1);
340 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
341 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin),
342 GetAndResetSentGestures()));
343
344 PushGesture(WebInputEvent::GestureFlingStart);
345 ReleaseTouchPoint(0);
346 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
347 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart),
348 GetAndResetSentGestures()));
349 }
350
351 TEST_F(GestureEventQueueTest, EndingEventsNotSent) {
352 // Consuming a begin event ensures no end events are sent.
353 PushGesture(WebInputEvent::GestureScrollBegin);
354 PressTouchPoint(1, 1);
355 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
356 EXPECT_FALSE(GesturesSent());
357
358 PushGesture(WebInputEvent::GesturePinchBegin);
359 PressTouchPoint(2, 2);
360 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
361 EXPECT_FALSE(GesturesSent());
362
363 PushGesture(WebInputEvent::GesturePinchEnd);
364 ReleaseTouchPoint(1);
365 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
366 EXPECT_FALSE(GesturesSent());
367
368 PushGesture(WebInputEvent::GestureScrollEnd);
369 ReleaseTouchPoint(0);
370 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
371 EXPECT_FALSE(GesturesSent());
372 }
373
374 TEST_F(GestureEventQueueTest, IndependentPacketsAllowed) {
375 PushGesture(WebInputEvent::GestureScrollBegin);
376 PressTouchPoint(1, 1);
377 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
378 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin),
379 GetAndResetSentGestures()));
380
381 // Consuming a single scroll or pinch update should suppress only that event.
382 PushGesture(WebInputEvent::GestureScrollUpdate);
257 MoveTouchPoint(0, 2, 2); 383 MoveTouchPoint(0, 2, 2);
258 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 384 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
259 EXPECT_FALSE(GesturesSent()); 385 EXPECT_FALSE(GesturesSent());
260 386
387 PushGesture(WebInputEvent::GesturePinchBegin);
388 PressTouchPoint(2, 2);
389 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
390 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin),
391 GetAndResetSentGestures()));
392
393 PushGesture(WebInputEvent::GesturePinchUpdate);
394 MoveTouchPoint(1, 2, 3);
395 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
396 EXPECT_FALSE(GesturesSent());
397
398 // Subsequent updates should not be affected.
399 PushGesture(WebInputEvent::GestureScrollUpdate);
400 MoveTouchPoint(0, 4, 4);
401 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
402 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollUpdate),
403 GetAndResetSentGestures()));
404
405 PushGesture(WebInputEvent::GesturePinchUpdate);
406 MoveTouchPoint(0, 4, 5);
407 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
408 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchUpdate),
409 GetAndResetSentGestures()));
410
411 PushGesture(WebInputEvent::GesturePinchEnd);
412 ReleaseTouchPoint(1);
413 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
414 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchEnd),
415 GetAndResetSentGestures()));
416
417 PushGesture(WebInputEvent::GestureScrollEnd);
418 ReleaseTouchPoint(0);
419 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
420 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd),
421 GetAndResetSentGestures()));
422 }
423
424 TEST_F(GestureEventQueueTest, IndependentPacketsNotAllowed) {
425 PushGesture(WebInputEvent::GestureScrollBegin);
426 PressTouchPoint(1, 1);
427 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
428 EXPECT_FALSE(GesturesSent());
429
430 // Independent packets are never sent when the global state is to drop.
431 PushGesture(WebInputEvent::GestureScrollUpdate);
432 MoveTouchPoint(0, 2, 2);
433 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
434 EXPECT_FALSE(GesturesSent());
435
436 PushGesture(WebInputEvent::GesturePinchBegin);
437 PressTouchPoint(2, 2);
438 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
439 EXPECT_FALSE(GesturesSent());
440
441 PushGesture(WebInputEvent::GesturePinchUpdate);
442 MoveTouchPoint(1, 2, 3);
443 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
444 EXPECT_FALSE(GesturesSent());
445
261 PushGesture(WebInputEvent::GesturePinchEnd); 446 PushGesture(WebInputEvent::GesturePinchEnd);
262 ReleaseTouchPoint(1); 447 ReleaseTouchPoint(1);
263 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 448 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
264 EXPECT_FALSE(GesturesSent()); 449 EXPECT_FALSE(GesturesSent());
265 450
266 PushGesture(WebInputEvent::GestureScrollEnd); 451 PushGesture(WebInputEvent::GestureScrollEnd);
267 ReleaseTouchPoint(0); 452 ReleaseTouchPoint(0);
268 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 453 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
269 EXPECT_FALSE(GesturesSent()); 454 EXPECT_FALSE(GesturesSent());
270 } 455 }
271 456
272 TEST_F(GestureEventQueueTest, MultipleTouchSequences) { 457 TEST_F(GestureEventQueueTest, MultipleTouchSequences) {
273 // Queue two touch-to-gestures sequences. 458 // Queue two touch-to-gestures sequences.
274 PushGesture(WebInputEvent::GestureFlingStart); 459 PushGesture(WebInputEvent::GestureTapDown);
275 PressTouchPoint(1, 1); 460 PressTouchPoint(1, 1);
276 PushGesture(WebInputEvent::GestureFlingCancel); 461 PushGesture(WebInputEvent::GestureTap);
277 ReleaseTouchPoint(0); 462 ReleaseTouchPoint(0);
278 PushGesture(WebInputEvent::GestureFlingStart); 463 PushGesture(WebInputEvent::GestureScrollBegin);
279 PressTouchPoint(1, 1); 464 PressTouchPoint(1, 1);
280 PushGesture(WebInputEvent::GestureFlingCancel); 465 PushGesture(WebInputEvent::GestureScrollEnd);
281 ReleaseTouchPoint(0); 466 ReleaseTouchPoint(0);
282 467
283 // The first gesture sequence should not be allowed. 468 // The first gesture sequence should not be allowed.
284 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 469 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
285 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 470 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
286 EXPECT_FALSE(GesturesSent()); 471 EXPECT_FALSE(GesturesSent());
287 472
288 // The subsequent sequence should "reset" allowance. 473 // The subsequent sequence should "reset" allowance.
289 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 474 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
290 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 475 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
291 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart, 476 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin,
292 WebInputEvent::GestureFlingCancel), 477 WebInputEvent::GestureScrollEnd),
293 GetAndResetSentGestures())); 478 GetAndResetSentGestures()));
294 } 479 }
295 480
296 TEST_F(GestureEventQueueTest, FlingCancelledOnNewTouchSequence) { 481 TEST_F(GestureEventQueueTest, FlingCancelledOnNewTouchSequence) {
297 // Simulate a fling. 482 // Simulate a fling.
483 PushGesture(WebInputEvent::GestureScrollBegin);
298 PressTouchPoint(1, 1); 484 PressTouchPoint(1, 1);
299 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 485 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
486 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin),
487 GetAndResetSentGestures()));
300 PushGesture(WebInputEvent::GestureFlingStart); 488 PushGesture(WebInputEvent::GestureFlingStart);
301 ReleaseTouchPoint(0); 489 ReleaseTouchPoint(0);
302 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 490 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
303 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart), 491 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart),
304 GetAndResetSentGestures())); 492 GetAndResetSentGestures()));
305 493
306 // A new touch seqeuence should cancel the outstanding fling. 494 // A new touch seqeuence should cancel the outstanding fling.
307 PressTouchPoint(1, 1); 495 PressTouchPoint(1, 1);
308 ReleaseTouchPoint(0);
309 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 496 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
310 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingCancel), 497 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingCancel),
311 GetAndResetSentGestures())); 498 GetAndResetSentGestures()));
499 ReleaseTouchPoint(0);
500 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
501 EXPECT_FALSE(GesturesSent());
312 } 502 }
313 503
314 TEST_F(GestureEventQueueTest, FlingCancelledOnScrollBegin) { 504 TEST_F(GestureEventQueueTest, FlingCancelledOnScrollBegin) {
315 // Simulate a fling sequence. 505 // Simulate a fling sequence.
316 PushGesture(WebInputEvent::GestureScrollBegin); 506 PushGesture(WebInputEvent::GestureScrollBegin);
317 PushGesture(WebInputEvent::GestureFlingStart); 507 PushGesture(WebInputEvent::GestureFlingStart);
318 PressTouchPoint(1, 1); 508 PressTouchPoint(1, 1);
319 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 509 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
320 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin, 510 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin,
321 WebInputEvent::GestureFlingStart), 511 WebInputEvent::GestureFlingStart),
322 GetAndResetSentGestures())); 512 GetAndResetSentGestures()));
323 513
324 // The new fling should cancel the preceding one. 514 // The new fling should cancel the preceding one.
325 PushGesture(WebInputEvent::GestureScrollBegin); 515 PushGesture(WebInputEvent::GestureScrollBegin);
326 PushGesture(WebInputEvent::GestureFlingStart); 516 PushGesture(WebInputEvent::GestureFlingStart);
327 ReleaseTouchPoint(0); 517 ReleaseTouchPoint(0);
328 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 518 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
329 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingCancel, 519 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingCancel,
330 WebInputEvent::GestureScrollBegin, 520 WebInputEvent::GestureScrollBegin,
331 WebInputEvent::GestureFlingStart), 521 WebInputEvent::GestureFlingStart),
332 GetAndResetSentGestures())); 522 GetAndResetSentGestures()));
333 } 523 }
334 524
335 TEST_F(GestureEventQueueTest, FlingNotCancelledIfGFCEventReceived) { 525 TEST_F(GestureEventQueueTest, FlingNotCancelledIfGFCEventReceived) {
336 // Simulate a fling that is started then cancelled. 526 // Simulate a fling that is started then cancelled.
527 PushGesture(WebInputEvent::GestureScrollBegin);
528 PressTouchPoint(1, 1);
529 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
337 PushGesture(WebInputEvent::GestureFlingStart); 530 PushGesture(WebInputEvent::GestureFlingStart);
338 PressTouchPoint(1, 1); 531 MoveTouchPoint(0, 1, 1);
339 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 532 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
340 PushGesture(WebInputEvent::GestureFlingCancel); 533 PushGesture(WebInputEvent::GestureFlingCancel);
341 ReleaseTouchPoint(0); 534 ReleaseTouchPoint(0);
342 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 535 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
343 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart, 536 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin,
537 WebInputEvent::GestureFlingStart,
344 WebInputEvent::GestureFlingCancel), 538 WebInputEvent::GestureFlingCancel),
345 GetAndResetSentGestures())); 539 GetAndResetSentGestures()));
346 540
347 // A new touch sequence will not inject a GestureFlingCancel, as the fling 541 // A new touch sequence will not inject a GestureFlingCancel, as the fling
348 // has already been cancelled. 542 // has already been cancelled.
349 PressTouchPoint(1, 1); 543 PressTouchPoint(1, 1);
544 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
350 ReleaseTouchPoint(0); 545 ReleaseTouchPoint(0);
351 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 546 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
352 EXPECT_FALSE(GesturesSent()); 547 EXPECT_FALSE(GesturesSent());
353 } 548 }
354 549
355 TEST_F(GestureEventQueueTest, TapCancelledWhenScrollBegins) { 550 TEST_F(GestureEventQueueTest, TapCancelledWhenScrollBegins) {
356 PushGesture(WebInputEvent::GestureTapDown); 551 PushGesture(WebInputEvent::GestureTapDown);
357 PressTouchPoint(1, 1); 552 PressTouchPoint(1, 1);
358 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 553 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
359 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureTapDown), 554 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureTapDown),
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 635
441 SendTimeoutGesture(WebInputEvent::GestureLongPress); 636 SendTimeoutGesture(WebInputEvent::GestureLongPress);
442 EXPECT_FALSE(GesturesSent()); 637 EXPECT_FALSE(GesturesSent());
443 638
444 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 639 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
445 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureLongPress), 640 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureLongPress),
446 GetAndResetSentGestures())); 641 GetAndResetSentGestures()));
447 } 642 }
448 643
449 } // namespace content 644 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/gesture_event_queue.cc ('k') | content/browser/renderer_host/input/input_router_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698