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

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

Issue 178193022: [Android] Always insert a TouchCancel if window or tab focus is lost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 9 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW
« no previous file with comments | « ui/events/gesture_detection/gesture_provider.cc ('k') | ui/events/gesture_detection/mock_motion_event.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698