Index: ui/aura/gestures/gesture_recognizer_unittest.cc |
diff --git a/ui/aura/gestures/gesture_recognizer_unittest.cc b/ui/aura/gestures/gesture_recognizer_unittest.cc |
index 49c371a42f8787d91cdc73cdbc53213eccaf3b2c..b57e4cdcba14a8530938eeba97831218199c6da7 100644 |
--- a/ui/aura/gestures/gesture_recognizer_unittest.cc |
+++ b/ui/aura/gestures/gesture_recognizer_unittest.cc |
@@ -3927,6 +3927,7 @@ TEST_P(GestureRecognizerTest, GestureEventConsumedTouchMoveScrollTest) { |
gfx::Rect bounds(0, 0, 1000, 1000); |
scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
delegate.get(), -1234, bounds, root_window())); |
+ delegate->set_window(window.get()); |
ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), |
kTouchId, tes.Now()); |
@@ -4029,6 +4030,7 @@ TEST_P(GestureRecognizerTest, GestureEventConsumedTouchMoveTapTest) { |
gfx::Rect bounds(0, 0, 1000, 1000); |
scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
delegate.get(), -1234, bounds, root_window())); |
+ delegate->set_window(window.get()); |
ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), |
kTouchId, tes.Now()); |
@@ -4059,6 +4061,7 @@ TEST_P(GestureRecognizerTest, GestureEventConsumedTouchMoveLongPressTest) { |
gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); |
scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
delegate.get(), -1234, bounds, root_window())); |
+ delegate->set_window(window.get()); |
delegate->Reset(); |
@@ -4155,6 +4158,7 @@ TEST_P(GestureRecognizerTest, ScrollAlternatelyConsumedTest) { |
gfx::Rect bounds(0, 0, kWindowWidth, kWindowHeight); |
scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
delegate.get(), -1234, bounds, root_window())); |
+ delegate->set_window(window.get()); |
delegate->Reset(); |
@@ -4512,6 +4516,49 @@ TEST_P(GestureRecognizerTest, GestureEventSmallPinchEnabled) { |
ui::ET_GESTURE_PINCH_UPDATE); |
} |
+// Tests that delaying the ack of a touch release doesn't trigger a long press |
+// gesture. |
+TEST_P(GestureRecognizerTest, EagerGestureDetection) { |
+ if (!UsingUnifiedGR()) |
+ return; |
+ |
+ scoped_ptr<QueueTouchEventDelegate> delegate( |
+ new QueueTouchEventDelegate(host()->dispatcher())); |
+ TimedEvents tes; |
+ const int kTouchId = 2; |
+ gfx::Rect bounds(100, 200, 100, 100); |
+ scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
+ delegate.get(), -1234, bounds, root_window())); |
+ delegate->set_window(window.get()); |
+ |
+ delegate->Reset(); |
+ ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), |
+ kTouchId, tes.Now()); |
+ DispatchEventUsingWindowDispatcher(&press); |
+ ui::TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), |
+ kTouchId, tes.LeapForward(50)); |
+ DispatchEventUsingWindowDispatcher(&release); |
+ |
+ delegate->Reset(); |
+ // Ack the touch press. |
+ delegate->ReceivedAck(); |
+ EXPECT_TRUE(delegate->tap_down()); |
+ |
+ delegate->Reset(); |
+ // Wait until the long press event would fire (if we weren't eager). |
+ base::MessageLoop::current()->PostDelayedTask( |
+ FROM_HERE, |
+ base::MessageLoop::QuitClosure(), |
+ base::TimeDelta::FromSecondsD( |
+ ui::GestureConfiguration::long_press_time_in_seconds() * 1.1)); |
+ base::MessageLoop::current()->Run(); |
+ |
+ // Ack the touch release. |
+ delegate->ReceivedAck(); |
+ EXPECT_TRUE(delegate->tap()); |
+ EXPECT_FALSE(delegate->long_press()); |
+} |
+ |
INSTANTIATE_TEST_CASE_P(GestureRecognizer, |
GestureRecognizerTest, |
::testing::Bool()); |