| Index: ui/events/gesture_detection/gesture_provider_unittest.cc
|
| diff --git a/ui/events/gesture_detection/gesture_provider_unittest.cc b/ui/events/gesture_detection/gesture_provider_unittest.cc
|
| index 85ced8e2a6435eedf11bae1944045761797ec3b4..5934b5bc0c08c20e58d1cea016322b81d09200b7 100644
|
| --- a/ui/events/gesture_detection/gesture_provider_unittest.cc
|
| +++ b/ui/events/gesture_detection/gesture_provider_unittest.cc
|
| @@ -149,9 +149,11 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient {
|
| base::TimeTicks event_time = base::TimeTicks::Now();
|
| const int scroll_to_x = kFakeCoordX + 100;
|
| const int scroll_to_y = kFakeCoordY + 100;
|
| + int motion_event_id = 0;
|
|
|
| MockMotionEvent event =
|
| ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
|
| + event.SetId(++motion_event_id);
|
|
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
|
|
| @@ -159,25 +161,33 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient {
|
| MotionEvent::ACTION_MOVE,
|
| scroll_to_x,
|
| scroll_to_y);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_TRUE(gesture_provider_->IsScrollInProgress());
|
| EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType());
|
| ASSERT_EQ(4U, GetReceivedGestureCount()) << "Only TapDown, TapCancel, "
|
| "ScrollBegin and ScrollBy "
|
| "should have been sent";
|
|
|
| EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(1).type);
|
| + EXPECT_EQ(motion_event_id, GetReceivedGesture(1).motion_event_id);
|
| EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(2).type);
|
| + EXPECT_EQ(motion_event_id, GetReceivedGesture(2).motion_event_id);
|
| EXPECT_EQ(event_time + kOneSecond, GetReceivedGesture(2).time)
|
| << "ScrollBegin should have the time of the ACTION_MOVE";
|
|
|
| event = ObtainMotionEvent(
|
| event_time + kOneSecond, end_action_type, scroll_to_x, scroll_to_y);
|
| + event.SetId(++motion_event_id);
|
| +
|
| gesture_provider_->OnTouchEvent(event);
|
| EXPECT_FALSE(gesture_provider_->IsScrollInProgress());
|
| EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_END));
|
| EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| }
|
|
|
| static void RunTasksAndWait(base::TimeDelta delay) {
|
| @@ -195,44 +205,57 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient {
|
| // Verify that a DOWN followed shortly by an UP will trigger a single tap.
|
| TEST_F(GestureProviderTest, GestureTapTap) {
|
| base::TimeTicks event_time = base::TimeTicks::Now();
|
| + int motion_event_id = 0;
|
|
|
| gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false);
|
|
|
| MockMotionEvent event =
|
| ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
|
|
|
| event = ObtainMotionEvent(event_time + kOneMicrosecond,
|
| MotionEvent::ACTION_UP);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType());
|
| // Ensure tap details have been set.
|
| EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().width());
|
| EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().height());
|
| EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| }
|
|
|
| // Verify that a DOWN followed shortly by an UP will trigger
|
| // a ET_GESTURE_TAP_UNCONFIRMED event if double-tap is enabled.
|
| TEST_F(GestureProviderTest, GestureTapTapWithDelay) {
|
| base::TimeTicks event_time = base::TimeTicks::Now();
|
| + int motion_event_id = 0;
|
|
|
| gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true);
|
|
|
| MockMotionEvent event =
|
| ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
|
|
| event = ObtainMotionEvent(event_time + kOneMicrosecond,
|
| MotionEvent::ACTION_UP);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
|
| // Ensure tap details have been set.
|
| EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().width());
|
| EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().height());
|
| EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
|
|
| EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_TAP));
|
| }
|
| @@ -241,25 +264,32 @@ TEST_F(GestureProviderTest, GestureTapTapWithDelay) {
|
| TEST_F(GestureProviderTest, GestureFlingAndCancelLongPress) {
|
| base::TimeTicks event_time = TimeTicks::Now();
|
| base::TimeDelta delta_time = kDeltaTimeForFlingSequences;
|
| + int motion_event_id = 0;
|
|
|
| MockMotionEvent event =
|
| ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
|
| + event.SetId(++motion_event_id);
|
|
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
|
|
| event = ObtainMotionEvent(event_time + delta_time,
|
| MotionEvent::ACTION_MOVE,
|
| kFakeCoordX * 10,
|
| kFakeCoordY * 10);
|
| + event.SetId(++motion_event_id);
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
|
|
| event = ObtainMotionEvent(event_time + delta_time * 2,
|
| MotionEvent::ACTION_UP,
|
| kFakeCoordX * 10,
|
| kFakeCoordY * 10);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_PRESS));
|
| }
|
|
|
| @@ -286,9 +316,11 @@ TEST_F(GestureProviderTest, ScrollEventActionCancelSequence) {
|
| TEST_F(GestureProviderTest, FlingEventSequence) {
|
| base::TimeTicks event_time = base::TimeTicks::Now();
|
| base::TimeDelta delta_time = kDeltaTimeForFlingSequences;
|
| + int motion_event_id = 0;
|
|
|
| MockMotionEvent event =
|
| ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
|
| + event.SetId(++motion_event_id);
|
|
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
|
|
| @@ -296,12 +328,16 @@ TEST_F(GestureProviderTest, FlingEventSequence) {
|
| MotionEvent::ACTION_MOVE,
|
| kFakeCoordX * 5,
|
| kFakeCoordY * 5);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_TRUE(gesture_provider_->IsScrollInProgress());
|
| EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
|
| EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| ASSERT_EQ(4U, GetReceivedGestureCount());
|
| ASSERT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(2).type);
|
| + EXPECT_EQ(motion_event_id, GetReceivedGesture(2).motion_event_id);
|
|
|
| // We don't want to take a dependency here on exactly how hints are calculated
|
| // for a fling (eg. may depend on velocity), so just validate the direction.
|
| @@ -314,9 +350,12 @@ TEST_F(GestureProviderTest, FlingEventSequence) {
|
| MotionEvent::ACTION_UP,
|
| kFakeCoordX * 10,
|
| kFakeCoordY * 10);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_FALSE(gesture_provider_->IsScrollInProgress());
|
| EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_END));
|
| EXPECT_EQ(event_time + delta_time * 2, GetMostRecentGestureEvent().time)
|
| << "FlingStart should have the time of the ACTION_UP";
|
| @@ -657,6 +696,7 @@ TEST_F(GestureProviderTest, GestureLongPressDoesNotPreventScrolling) {
|
|
|
| TEST_F(GestureProviderTest, NoGestureLongPressDuringDoubleTap) {
|
| base::TimeTicks event_time = base::TimeTicks::Now();
|
| + int motion_event_id = 0;
|
|
|
| MockMotionEvent event = ObtainMotionEvent(
|
| event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY);
|
| @@ -686,16 +726,21 @@ TEST_F(GestureProviderTest, NoGestureLongPressDuringDoubleTap) {
|
| MotionEvent::ACTION_MOVE,
|
| kFakeCoordX + 20,
|
| kFakeCoordY + 20);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_EQ(ET_GESTURE_PINCH_BEGIN, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| EXPECT_TRUE(gesture_provider_->IsDoubleTapInProgress());
|
|
|
| event = ObtainMotionEvent(event_time + long_press_timeout + kOneMicrosecond,
|
| MotionEvent::ACTION_UP,
|
| kFakeCoordX,
|
| kFakeCoordY + 1);
|
| + event.SetId(++motion_event_id);
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| EXPECT_FALSE(gesture_provider_->IsDoubleTapInProgress());
|
| }
|
|
|
| @@ -944,6 +989,7 @@ TEST_F(GestureProviderTest, FixedPageScaleDuringDoubleTapDragZoom) {
|
| TEST_F(GestureProviderTest, PinchZoom) {
|
| base::TimeTicks event_time = base::TimeTicks::Now();
|
| const int scaled_touch_slop = GetTouchSlop();
|
| + int motion_event_id = 0;
|
|
|
| gesture_provider_->SetMultiTouchSupportEnabled(true);
|
|
|
| @@ -952,6 +998,7 @@ TEST_F(GestureProviderTest, PinchZoom) {
|
|
|
| MockMotionEvent event =
|
| ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
|
| + event.SetId(++motion_event_id);
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
|
|
|
| @@ -961,6 +1008,8 @@ TEST_F(GestureProviderTest, PinchZoom) {
|
| kFakeCoordY,
|
| secondary_coord_x,
|
| secondary_coord_y);
|
| + event.SetId(++motion_event_id);
|
| +
|
| gesture_provider_->OnTouchEvent(event);
|
| EXPECT_EQ(1U, GetReceivedGestureCount());
|
|
|
| @@ -972,7 +1021,10 @@ TEST_F(GestureProviderTest, PinchZoom) {
|
| kFakeCoordY,
|
| secondary_coord_x,
|
| secondary_coord_y);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_BEGIN));
|
| EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
|
| EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE));
|
| @@ -985,7 +1037,10 @@ TEST_F(GestureProviderTest, PinchZoom) {
|
| kFakeCoordY,
|
| secondary_coord_x,
|
| secondary_coord_y);
|
| + event.SetId(++motion_event_id);
|
| +
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE));
|
| EXPECT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType());
|
| EXPECT_LT(1.f, GetMostRecentGestureEvent().details.scale());
|
| @@ -996,8 +1051,10 @@ TEST_F(GestureProviderTest, PinchZoom) {
|
| kFakeCoordY,
|
| secondary_coord_x,
|
| secondary_coord_y);
|
| + event.SetId(++motion_event_id);
|
|
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
| EXPECT_EQ(ET_GESTURE_PINCH_END, GetMostRecentGestureEventType());
|
| EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_END));
|
|
|
| @@ -1033,17 +1090,21 @@ TEST_F(GestureProviderTest, GesturesCancelledAfterLongPressCausesLostFocus) {
|
| // gesture sequence cancellation.
|
| TEST_F(GestureProviderTest, CancelActiveTouchSequence) {
|
| base::TimeTicks event_time = base::TimeTicks::Now();
|
| + int motion_event_id = 0;
|
|
|
| EXPECT_FALSE(CancelActiveTouchSequence());
|
| EXPECT_EQ(0U, GetReceivedGestureCount());
|
|
|
| MockMotionEvent event =
|
| ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
|
| + event.SetId(++motion_event_id);
|
| EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
|
|
| ASSERT_TRUE(CancelActiveTouchSequence());
|
| EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
|
|
|
| // Subsequent MotionEvent's are dropped until ACTION_DOWN.
|
| event = ObtainMotionEvent(event_time + kOneMicrosecond,
|
|
|