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

Side by Side Diff: ui/events/gesture_detection/gesture_provider_unittest.cc

Issue 200623003: Adopt "QuickScale" double-tap drag zoom code in the GestureProvider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Yeah... Created 6 years, 8 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
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/logging.h" 6 #include "base/logging.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 398 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
399 399
400 const GestureEventData& double_tap = GetMostRecentGestureEvent(); 400 const GestureEventData& double_tap = GetMostRecentGestureEvent();
401 EXPECT_EQ(ET_GESTURE_DOUBLE_TAP, double_tap.type); 401 EXPECT_EQ(ET_GESTURE_DOUBLE_TAP, double_tap.type);
402 // Ensure tap details have been set. 402 // Ensure tap details have been set.
403 EXPECT_EQ(10, double_tap.details.bounding_box().width()); 403 EXPECT_EQ(10, double_tap.details.bounding_box().width());
404 EXPECT_EQ(10, double_tap.details.bounding_box().height()); 404 EXPECT_EQ(10, double_tap.details.bounding_box().height());
405 EXPECT_EQ(1, double_tap.details.tap_count()); 405 EXPECT_EQ(1, double_tap.details.tap_count());
406 } 406 }
407 407
408 TEST_F(GestureProviderTest, DoubleTapDragZoom) { 408 TEST_F(GestureProviderTest, DoubleTapDragZoomBasic) {
409 const base::TimeTicks down_time_1 = TimeTicks::Now(); 409 const base::TimeTicks down_time_1 = TimeTicks::Now();
410 const base::TimeTicks down_time_2 = down_time_1 + kOneMicrosecond * 2; 410 const base::TimeTicks down_time_2 = down_time_1 + kOneMicrosecond * 2;
411 411
412 MockMotionEvent event = 412 MockMotionEvent event =
413 ObtainMotionEvent(down_time_1, MotionEvent::ACTION_DOWN); 413 ObtainMotionEvent(down_time_1, MotionEvent::ACTION_DOWN);
414 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 414 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
415 415
416 event = ObtainMotionEvent(down_time_1 + kOneMicrosecond, 416 event = ObtainMotionEvent(down_time_1 + kOneMicrosecond,
417 MotionEvent::ACTION_UP, 417 MotionEvent::ACTION_UP,
418 kFakeCoordX, 418 kFakeCoordX,
419 kFakeCoordY); 419 kFakeCoordY);
420 gesture_provider_->OnTouchEvent(event); 420 gesture_provider_->OnTouchEvent(event);
421 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType()); 421 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
422 422
423 event = ObtainMotionEvent( 423 event = ObtainMotionEvent(
424 down_time_2, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY); 424 down_time_2, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY);
425 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 425 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
426 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 426 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
427 427
428 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond, 428 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond,
429 MotionEvent::ACTION_MOVE, 429 MotionEvent::ACTION_MOVE,
430 kFakeCoordX, 430 kFakeCoordX,
431 kFakeCoordY + 100); 431 kFakeCoordY + 100);
432 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 432 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
433 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); 433 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
434 const GestureEventData* scroll_begin_gesture = GetActiveScrollBeginEvent(); 434 ASSERT_EQ(ET_GESTURE_PINCH_BEGIN, GetMostRecentGestureEventType());
435 ASSERT_TRUE(!!scroll_begin_gesture);
436 EXPECT_EQ(0, scroll_begin_gesture->details.scroll_x_hint());
437 EXPECT_EQ(100, scroll_begin_gesture->details.scroll_y_hint());
438 EXPECT_EQ(ET_GESTURE_PINCH_BEGIN, GetMostRecentGestureEventType());
439 435
440 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 2, 436 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 2,
441 MotionEvent::ACTION_MOVE, 437 MotionEvent::ACTION_MOVE,
442 kFakeCoordX, 438 kFakeCoordX,
443 kFakeCoordY + 200); 439 kFakeCoordY + 200);
444 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 440 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
445 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE)); 441 ASSERT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType());
446 EXPECT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType()); 442 EXPECT_LT(1.f, GetMostRecentGestureEvent().details.scale());
447 443
448 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 3, 444 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 3,
445 MotionEvent::ACTION_MOVE,
446 kFakeCoordX,
447 kFakeCoordY + 100);
448 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
449 ASSERT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType());
450 EXPECT_GT(1.f, GetMostRecentGestureEvent().details.scale());
451
452 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 4,
449 MotionEvent::ACTION_UP, 453 MotionEvent::ACTION_UP,
450 kFakeCoordX, 454 kFakeCoordX,
451 kFakeCoordY + 200); 455 kFakeCoordY - 200);
452 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 456 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
453 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_END)); 457 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_END));
454 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); 458 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
455 } 459 }
456 460
457 TEST_F(GestureProviderTest, DoubleTapDragZoomCancelledOnSecondaryPointerDown) {
458 const base::TimeTicks down_time_1 = TimeTicks::Now();
459 const base::TimeTicks down_time_2 = down_time_1 + kOneMicrosecond * 2;
460
461 MockMotionEvent event =
462 ObtainMotionEvent(down_time_1, MotionEvent::ACTION_DOWN);
463 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
464 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
465
466 event = ObtainMotionEvent(down_time_1 + kOneMicrosecond,
467 MotionEvent::ACTION_UP);
468 gesture_provider_->OnTouchEvent(event);
469 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
470
471 event = ObtainMotionEvent(down_time_2, MotionEvent::ACTION_DOWN);
472 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
473 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
474 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_TAP_CANCEL));
475
476 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond,
477 MotionEvent::ACTION_MOVE,
478 kFakeCoordX,
479 kFakeCoordY - 30);
480 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
481 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
482 EXPECT_EQ(ET_GESTURE_PINCH_BEGIN, GetMostRecentGestureEventType());
483
484 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 2,
485 MotionEvent::ACTION_POINTER_DOWN,
486 kFakeCoordX,
487 kFakeCoordY - 30,
488 kFakeCoordX + 50,
489 kFakeCoordY + 50);
490 gesture_provider_->OnTouchEvent(event);
491 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_END));
492 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
493 const size_t gesture_count = GetReceivedGestureCount();
494
495 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 3,
496 MotionEvent::ACTION_POINTER_UP,
497 kFakeCoordX,
498 kFakeCoordY - 30,
499 kFakeCoordX + 50,
500 kFakeCoordY + 50);
501 gesture_provider_->OnTouchEvent(event);
502 EXPECT_EQ(gesture_count, GetReceivedGestureCount());
503 }
504
505 // Generate a scroll gesture and verify that the resulting scroll motion event 461 // Generate a scroll gesture and verify that the resulting scroll motion event
506 // has both absolute and relative position information. 462 // has both absolute and relative position information.
507 TEST_F(GestureProviderTest, ScrollUpdateValues) { 463 TEST_F(GestureProviderTest, ScrollUpdateValues) {
508 const int delta_x = 16; 464 const int delta_x = 16;
509 const int delta_y = 84; 465 const int delta_y = 84;
510 466
511 const base::TimeTicks event_time = TimeTicks::Now(); 467 const base::TimeTicks event_time = TimeTicks::Now();
512 468
513 MockMotionEvent event = 469 MockMotionEvent event =
514 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 470 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 // Simulate setting a fixed page scale (or a mobile viewport); 881 // Simulate setting a fixed page scale (or a mobile viewport);
926 // this should not disrupt the current double-tap gesture. 882 // this should not disrupt the current double-tap gesture.
927 gesture_provider_->SetDoubleTapSupportForPageEnabled(false); 883 gesture_provider_->SetDoubleTapSupportForPageEnabled(false);
928 884
929 // Double tap zoom updates should continue. 885 // Double tap zoom updates should continue.
930 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 2, 886 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 2,
931 MotionEvent::ACTION_MOVE, 887 MotionEvent::ACTION_MOVE,
932 kFakeCoordX, 888 kFakeCoordX,
933 kFakeCoordY + 200); 889 kFakeCoordY + 200);
934 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 890 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
935 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE));
936 EXPECT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType()); 891 EXPECT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType());
892 EXPECT_LT(1.f, GetMostRecentGestureEvent().details.scale());
937 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 3, 893 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 3,
938 MotionEvent::ACTION_UP, 894 MotionEvent::ACTION_UP,
939 kFakeCoordX, 895 kFakeCoordX,
940 kFakeCoordY + 200); 896 kFakeCoordY + 200);
941 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 897 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
942 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_END)); 898 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_END));
943 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); 899 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
944 900
945 // The double-tap gesture has finished, but the page scale is fixed. 901 // The double-tap gesture has finished, but the page scale is fixed.
946 // The same event sequence should not generate any double tap getsures. 902 // The same event sequence should not generate any double tap getsures.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 MotionEvent::ACTION_POINTER_DOWN, 959 MotionEvent::ACTION_POINTER_DOWN,
1004 kFakeCoordX, 960 kFakeCoordX,
1005 kFakeCoordY, 961 kFakeCoordY,
1006 secondary_coord_x, 962 secondary_coord_x,
1007 secondary_coord_y); 963 secondary_coord_y);
1008 gesture_provider_->OnTouchEvent(event); 964 gesture_provider_->OnTouchEvent(event);
1009 EXPECT_EQ(1U, GetReceivedGestureCount()); 965 EXPECT_EQ(1U, GetReceivedGestureCount());
1010 966
1011 secondary_coord_x += 5 * scaled_touch_slop; 967 secondary_coord_x += 5 * scaled_touch_slop;
1012 secondary_coord_y += 5 * scaled_touch_slop; 968 secondary_coord_y += 5 * scaled_touch_slop;
1013
1014 event = ObtainMotionEvent(event_time, 969 event = ObtainMotionEvent(event_time,
1015 MotionEvent::ACTION_MOVE, 970 MotionEvent::ACTION_MOVE,
1016 kFakeCoordX, 971 kFakeCoordX,
1017 kFakeCoordY, 972 kFakeCoordY,
1018 secondary_coord_x, 973 secondary_coord_x,
1019 secondary_coord_y); 974 secondary_coord_y);
1020
1021 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 975 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1022 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_BEGIN)); 976 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_BEGIN));
1023 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); 977 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
1024 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_UPDATE));
1025 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE)); 978 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE));
1026 979
980 secondary_coord_x += 2 * scaled_touch_slop;
981 secondary_coord_y += 2 * scaled_touch_slop;
982 event = ObtainMotionEvent(event_time,
983 MotionEvent::ACTION_MOVE,
984 kFakeCoordX,
985 kFakeCoordY,
986 secondary_coord_x,
987 secondary_coord_y);
988 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
989 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE));
990 EXPECT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType());
991 EXPECT_LT(1.f, GetMostRecentGestureEvent().details.scale());
992
1027 event = ObtainMotionEvent(event_time, 993 event = ObtainMotionEvent(event_time,
1028 MotionEvent::ACTION_POINTER_UP, 994 MotionEvent::ACTION_POINTER_UP,
1029 kFakeCoordX, 995 kFakeCoordX,
1030 kFakeCoordY, 996 kFakeCoordY,
1031 secondary_coord_x, 997 secondary_coord_x,
1032 secondary_coord_y); 998 secondary_coord_y);
1033 999
1034 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1000 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1035 EXPECT_EQ(ET_GESTURE_PINCH_END, GetMostRecentGestureEventType()); 1001 EXPECT_EQ(ET_GESTURE_PINCH_END, GetMostRecentGestureEventType());
1036 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); 1002 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_END));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1088 MotionEvent::ACTION_UP); 1054 MotionEvent::ACTION_UP);
1089 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event)); 1055 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event));
1090 1056
1091 event = ObtainMotionEvent(event_time + kOneMicrosecond * 3, 1057 event = ObtainMotionEvent(event_time + kOneMicrosecond * 3,
1092 MotionEvent::ACTION_DOWN); 1058 MotionEvent::ACTION_DOWN);
1093 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1059 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1094 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 1060 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
1095 } 1061 }
1096 1062
1097 } // namespace ui 1063 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/gesture_detection/gesture_provider.cc ('k') | ui/events/gesture_detection/scale_gesture_detector.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698