| 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 |