| 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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 active_scroll_begin_event_.reset(new GestureEventData(gesture)); | 136 active_scroll_begin_event_.reset(new GestureEventData(gesture)); |
| 137 gestures_.push_back(gesture); | 137 gestures_.push_back(gesture); |
| 138 } | 138 } |
| 139 | 139 |
| 140 void SetUpWithConfig(const GestureProvider::Config& config) { | 140 void SetUpWithConfig(const GestureProvider::Config& config) { |
| 141 gesture_provider_.reset(new GestureProvider(config, this)); | 141 gesture_provider_.reset(new GestureProvider(config, this)); |
| 142 gesture_provider_->SetMultiTouchZoomSupportEnabled(false); | 142 gesture_provider_->SetMultiTouchZoomSupportEnabled(false); |
| 143 } | 143 } |
| 144 | 144 |
| 145 void ResetGestureDetection() { | 145 void ResetGestureDetection() { |
| 146 CancelActiveTouchSequence(); | 146 gesture_provider_->ResetDetection(); |
| 147 gestures_.clear(); | 147 gestures_.clear(); |
| 148 } | 148 } |
| 149 |
| 149 bool CancelActiveTouchSequence() { | 150 bool CancelActiveTouchSequence() { |
| 150 if (!gesture_provider_->current_down_event()) | 151 if (!gesture_provider_->current_down_event()) |
| 151 return false; | 152 return false; |
| 152 return gesture_provider_->OnTouchEvent( | 153 return gesture_provider_->OnTouchEvent( |
| 153 *gesture_provider_->current_down_event()->Cancel()); | 154 *gesture_provider_->current_down_event()->Cancel()); |
| 154 } | 155 } |
| 155 | 156 |
| 156 bool HasReceivedGesture(EventType type) const { | 157 bool HasReceivedGesture(EventType type) const { |
| 157 for (size_t i = 0; i < gestures_.size(); ++i) { | 158 for (size_t i = 0; i < gestures_.size(); ++i) { |
| 158 if (gestures_[i].type() == type) | 159 if (gestures_[i].type() == type) |
| (...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 603 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 603 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); | 604 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); |
| 604 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType()); | 605 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType()); |
| 605 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); | 606 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); |
| 606 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 607 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
| 607 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); | 608 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); |
| 608 EXPECT_EQ(event_time + delta_time * 2, GetMostRecentGestureEvent().time) | 609 EXPECT_EQ(event_time + delta_time * 2, GetMostRecentGestureEvent().time) |
| 609 << "FlingStart should have the time of the ACTION_UP"; | 610 << "FlingStart should have the time of the ACTION_UP"; |
| 610 } | 611 } |
| 611 | 612 |
| 612 TEST_F(GestureProviderTest, GestureCancelledWhenWindowFocusLost) { | 613 TEST_F(GestureProviderTest, GestureCancelledOnCancelEvent) { |
| 613 const base::TimeTicks event_time = TimeTicks::Now(); | 614 const base::TimeTicks event_time = TimeTicks::Now(); |
| 614 | 615 |
| 615 MockMotionEvent event = | 616 MockMotionEvent event = |
| 616 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 617 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
| 617 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 618 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 618 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 619 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
| 619 | 620 |
| 620 RunTasksAndWait(GetLongPressTimeout() + GetShowPressTimeout() + | 621 RunTasksAndWait(GetLongPressTimeout() + GetShowPressTimeout() + |
| 621 kOneMicrosecond); | 622 kOneMicrosecond); |
| 622 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SHOW_PRESS)); | 623 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SHOW_PRESS)); |
| 623 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); | 624 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); |
| 624 | 625 |
| 625 // The long press triggers window focus loss by opening a context menu. | 626 // A cancellation event may be triggered for a number of reasons, e.g., |
| 627 // from a context-menu-triggering long press resulting in loss of focus. |
| 626 EXPECT_TRUE(CancelActiveTouchSequence()); | 628 EXPECT_TRUE(CancelActiveTouchSequence()); |
| 627 EXPECT_FALSE(HasDownEvent()); | 629 EXPECT_FALSE(HasDownEvent()); |
| 628 | 630 |
| 629 // A final ACTION_UP should have no effect. | 631 // A final ACTION_UP should have no effect. |
| 630 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2, | 632 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2, |
| 631 MotionEvent::ACTION_UP); | 633 MotionEvent::ACTION_UP); |
| 632 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event)); | 634 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event)); |
| 633 } | 635 } |
| 634 | 636 |
| 637 TEST_F(GestureProviderTest, GestureCancelledOnDetectionReset) { |
| 638 const base::TimeTicks event_time = TimeTicks::Now(); |
| 639 |
| 640 MockMotionEvent event = |
| 641 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
| 642 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 643 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
| 644 |
| 645 RunTasksAndWait(GetLongPressTimeout() + GetShowPressTimeout() + |
| 646 kOneMicrosecond); |
| 647 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SHOW_PRESS)); |
| 648 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); |
| 649 |
| 650 ResetGestureDetection(); |
| 651 EXPECT_FALSE(HasDownEvent()); |
| 652 |
| 653 // A final ACTION_UP should have no effect. |
| 654 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2, |
| 655 MotionEvent::ACTION_UP); |
| 656 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event)); |
| 657 } |
| 658 |
| 635 TEST_F(GestureProviderTest, NoTapAfterScrollBegins) { | 659 TEST_F(GestureProviderTest, NoTapAfterScrollBegins) { |
| 636 base::TimeTicks event_time = base::TimeTicks::Now(); | 660 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 637 | 661 |
| 638 MockMotionEvent event = | 662 MockMotionEvent event = |
| 639 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 663 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
| 640 | 664 |
| 641 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 665 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 642 | 666 |
| 643 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 667 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
| 644 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 668 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
| (...skipping 1848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2493 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 2517 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 2494 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); | 2518 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); |
| 2495 | 2519 |
| 2496 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); | 2520 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); |
| 2497 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 2521 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
| 2498 EXPECT_EQ(gfx::RectF(0, 0, 20, 20), | 2522 EXPECT_EQ(gfx::RectF(0, 0, 20, 20), |
| 2499 GetMostRecentGestureEvent().details.bounding_box()); | 2523 GetMostRecentGestureEvent().details.bounding_box()); |
| 2500 } | 2524 } |
| 2501 | 2525 |
| 2502 } // namespace ui | 2526 } // namespace ui |
| OLD | NEW |