OLD | NEW |
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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 gesture_provider_.reset(); | 65 gesture_provider_.reset(); |
66 } | 66 } |
67 | 67 |
68 // GestureProviderClient | 68 // GestureProviderClient |
69 virtual void OnGestureEvent(const GestureEventData& gesture) OVERRIDE { | 69 virtual void OnGestureEvent(const GestureEventData& gesture) OVERRIDE { |
70 if (gesture.type == ET_GESTURE_SCROLL_BEGIN) | 70 if (gesture.type == ET_GESTURE_SCROLL_BEGIN) |
71 active_scroll_begin_event_.reset(new GestureEventData(gesture)); | 71 active_scroll_begin_event_.reset(new GestureEventData(gesture)); |
72 gestures_.push_back(gesture); | 72 gestures_.push_back(gesture); |
73 } | 73 } |
74 | 74 |
| 75 bool CancelActiveTouchSequence() { |
| 76 if (!gesture_provider_->current_down_event()) |
| 77 return false; |
| 78 return gesture_provider_->OnTouchEvent( |
| 79 *gesture_provider_->current_down_event()->Cancel()); |
| 80 } |
| 81 |
75 bool HasReceivedGesture(EventType type) const { | 82 bool HasReceivedGesture(EventType type) const { |
76 for (size_t i = 0; i < gestures_.size(); ++i) { | 83 for (size_t i = 0; i < gestures_.size(); ++i) { |
77 if (gestures_[i].type == type) | 84 if (gestures_[i].type == type) |
78 return true; | 85 return true; |
79 } | 86 } |
80 return false; | 87 return false; |
81 } | 88 } |
82 | 89 |
83 const GestureEventData& GetMostRecentGestureEvent() const { | 90 const GestureEventData& GetMostRecentGestureEvent() const { |
84 EXPECT_FALSE(gestures_.empty()); | 91 EXPECT_FALSE(gestures_.empty()); |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 302 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
296 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 303 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
297 | 304 |
298 Wait(GetShowPressTimeout() + kFiveMilliseconds); | 305 Wait(GetShowPressTimeout() + kFiveMilliseconds); |
299 EXPECT_EQ(ET_GESTURE_SHOW_PRESS, GetMostRecentGestureEventType()); | 306 EXPECT_EQ(ET_GESTURE_SHOW_PRESS, GetMostRecentGestureEventType()); |
300 | 307 |
301 Wait(GetLongPressTimeout() + kFiveMilliseconds); | 308 Wait(GetLongPressTimeout() + kFiveMilliseconds); |
302 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); | 309 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); |
303 | 310 |
304 // The long press triggers window focus loss by opening a context menu | 311 // The long press triggers window focus loss by opening a context menu |
305 gesture_provider_->CancelActiveTouchSequence(); | 312 EXPECT_TRUE(CancelActiveTouchSequence()); |
306 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType()); | 313 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType()); |
307 } | 314 } |
308 | 315 |
309 TEST_F(GestureProviderTest, TapCancelledWhenScrollBegins) { | 316 TEST_F(GestureProviderTest, TapCancelledWhenScrollBegins) { |
310 base::TimeTicks event_time = base::TimeTicks::Now(); | 317 base::TimeTicks event_time = base::TimeTicks::Now(); |
311 | 318 |
312 MockMotionEvent event = | 319 MockMotionEvent event = |
313 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 320 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
314 | 321 |
315 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 322 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
964 | 971 |
965 MockMotionEvent event = | 972 MockMotionEvent event = |
966 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 973 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
967 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 974 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
968 | 975 |
969 const base::TimeDelta long_press_timeout = | 976 const base::TimeDelta long_press_timeout = |
970 GetLongPressTimeout() + GetShowPressTimeout() + kFiveMilliseconds * 2; | 977 GetLongPressTimeout() + GetShowPressTimeout() + kFiveMilliseconds * 2; |
971 Wait(long_press_timeout); | 978 Wait(long_press_timeout); |
972 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); | 979 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); |
973 | 980 |
974 gesture_provider_->CancelActiveTouchSequence(); | 981 EXPECT_TRUE(CancelActiveTouchSequence()); |
975 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType()); | 982 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType()); |
976 | 983 |
977 event = ObtainMotionEvent(event_time + long_press_timeout, | 984 event = ObtainMotionEvent(event_time + long_press_timeout, |
978 MotionEvent::ACTION_UP); | 985 MotionEvent::ACTION_UP); |
979 gesture_provider_->OnTouchEvent(event); | 986 gesture_provider_->OnTouchEvent(event); |
980 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_TAP)); | 987 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_TAP)); |
981 } | 988 } |
982 | 989 |
983 // Verify that ignoring the remaining touch sequence triggers proper touch and | 990 // Verify that inserting a touch cancel event will trigger proper touch and |
984 // gesture cancellation. | 991 // gesture sequence cancellation. |
985 TEST_F(GestureProviderTest, CancelActiveTouchSequence) { | 992 TEST_F(GestureProviderTest, CancelActiveTouchSequence) { |
986 base::TimeTicks event_time = base::TimeTicks::Now(); | 993 base::TimeTicks event_time = base::TimeTicks::Now(); |
987 | 994 |
988 gesture_provider_->CancelActiveTouchSequence(); | 995 EXPECT_FALSE(CancelActiveTouchSequence()); |
989 EXPECT_EQ(0U, GetReceivedGestureCount()); | 996 EXPECT_EQ(0U, GetReceivedGestureCount()); |
990 | 997 |
991 MockMotionEvent event = | 998 MockMotionEvent event = |
992 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 999 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
993 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1000 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
994 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 1001 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
995 | 1002 |
996 gesture_provider_->CancelActiveTouchSequence(); | 1003 ASSERT_TRUE(CancelActiveTouchSequence()); |
997 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType()); | 1004 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType()); |
998 | 1005 |
999 // Subsequent MotionEvent's are dropped until ACTION_DOWN. | 1006 // Subsequent MotionEvent's are dropped until ACTION_DOWN. |
1000 event = ObtainMotionEvent(event_time + kFiveMilliseconds, | 1007 event = ObtainMotionEvent(event_time + kFiveMilliseconds, |
1001 MotionEvent::ACTION_MOVE); | 1008 MotionEvent::ACTION_MOVE); |
1002 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event)); | 1009 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event)); |
1003 | 1010 |
1004 event = ObtainMotionEvent(event_time + kFiveMilliseconds * 2, | 1011 event = ObtainMotionEvent(event_time + kFiveMilliseconds * 2, |
1005 MotionEvent::ACTION_UP); | 1012 MotionEvent::ACTION_UP); |
1006 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event)); | 1013 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event)); |
1007 | 1014 |
1008 event = ObtainMotionEvent(event_time + kFiveMilliseconds * 3, | 1015 event = ObtainMotionEvent(event_time + kFiveMilliseconds * 3, |
1009 MotionEvent::ACTION_DOWN); | 1016 MotionEvent::ACTION_DOWN); |
1010 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1017 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
1011 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 1018 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
1012 } | 1019 } |
1013 | 1020 |
1014 } // namespace ui | 1021 } // namespace ui |
OLD | NEW |