Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/browser/renderer_host/input/timeout_monitor.h" | 9 #include "content/browser/renderer_host/input/timeout_monitor.h" |
| 10 #include "content/browser/renderer_host/input/touch_event_queue.h" | 10 #include "content/browser/renderer_host/input/touch_event_queue.h" |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 30 } | 30 } |
| 31 } // namespace | 31 } // namespace |
| 32 | 32 |
| 33 class TouchEventQueueTest : public testing::Test, | 33 class TouchEventQueueTest : public testing::Test, |
| 34 public TouchEventQueueClient { | 34 public TouchEventQueueClient { |
| 35 public: | 35 public: |
| 36 TouchEventQueueTest() | 36 TouchEventQueueTest() |
| 37 : sent_event_count_(0), | 37 : sent_event_count_(0), |
| 38 acked_event_count_(0), | 38 acked_event_count_(0), |
| 39 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN), | 39 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN), |
| 40 slop_length_dips_(0), | 40 slop_length_dips_(0) {} |
| 41 touch_scrolling_mode_(TouchEventQueue::TOUCH_SCROLLING_MODE_DEFAULT) {} | |
| 42 | 41 |
| 43 ~TouchEventQueueTest() override {} | 42 ~TouchEventQueueTest() override {} |
| 44 | 43 |
| 45 // testing::Test | 44 // testing::Test |
| 46 void SetUp() override { ResetQueueWithConfig(CreateConfig()); } | 45 void SetUp() override { ResetQueueWithConfig(CreateConfig()); } |
| 47 | 46 |
| 48 void TearDown() override { queue_.reset(); } | 47 void TearDown() override { queue_.reset(); } |
| 49 | 48 |
| 50 // TouchEventQueueClient | 49 // TouchEventQueueClient |
| 51 void SendTouchEventImmediately( | 50 void SendTouchEventImmediately( |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 72 scoped_ptr<WebGestureEvent> followup_gesture_event = | 71 scoped_ptr<WebGestureEvent> followup_gesture_event = |
| 73 followup_gesture_event_.Pass(); | 72 followup_gesture_event_.Pass(); |
| 74 queue_->OnGestureScrollEvent( | 73 queue_->OnGestureScrollEvent( |
| 75 GestureEventWithLatencyInfo(*followup_gesture_event, | 74 GestureEventWithLatencyInfo(*followup_gesture_event, |
| 76 ui::LatencyInfo())); | 75 ui::LatencyInfo())); |
| 77 } | 76 } |
| 78 } | 77 } |
| 79 | 78 |
| 80 protected: | 79 protected: |
| 81 TouchEventQueue::Config CreateConfig() { | 80 TouchEventQueue::Config CreateConfig() { |
| 82 TouchEventQueue::Config config; | 81 TouchEventQueue::Config config; |
|
jdduke (slow)
2015/01/30 00:12:56
Let's just remove this function entirely.
lanwei
2015/02/03 20:44:32
Done.
| |
| 83 config.touch_scrolling_mode = touch_scrolling_mode_; | |
| 84 return config; | 82 return config; |
| 85 } | 83 } |
| 86 | 84 |
| 87 void SetTouchScrollingMode(TouchEventQueue::TouchScrollingMode mode) { | |
| 88 touch_scrolling_mode_ = mode; | |
| 89 ResetQueueWithConfig(CreateConfig()); | |
| 90 } | |
| 91 | |
| 92 void SetUpForTouchMoveSlopTesting(double slop_length_dips) { | 85 void SetUpForTouchMoveSlopTesting(double slop_length_dips) { |
| 93 slop_length_dips_ = slop_length_dips; | 86 slop_length_dips_ = slop_length_dips; |
| 94 } | 87 } |
| 95 | 88 |
| 96 void SetUpForTimeoutTesting(base::TimeDelta timeout_delay) { | 89 void SetUpForTimeoutTesting(base::TimeDelta timeout_delay) { |
| 97 TouchEventQueue::Config config = CreateConfig(); | 90 TouchEventQueue::Config config = CreateConfig(); |
| 98 config.touch_ack_timeout_delay = timeout_delay; | 91 config.touch_ack_timeout_delay = timeout_delay; |
| 99 config.touch_ack_timeout_supported = true; | 92 config.touch_ack_timeout_supported = true; |
| 100 ResetQueueWithConfig(config); | 93 ResetQueueWithConfig(config); |
| 101 } | 94 } |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 257 size_t acked_event_count_; | 250 size_t acked_event_count_; |
| 258 WebTouchEvent last_sent_event_; | 251 WebTouchEvent last_sent_event_; |
| 259 WebTouchEvent last_acked_event_; | 252 WebTouchEvent last_acked_event_; |
| 260 InputEventAckState last_acked_event_state_; | 253 InputEventAckState last_acked_event_state_; |
| 261 SyntheticWebTouchEvent touch_event_; | 254 SyntheticWebTouchEvent touch_event_; |
| 262 scoped_ptr<WebTouchEvent> followup_touch_event_; | 255 scoped_ptr<WebTouchEvent> followup_touch_event_; |
| 263 scoped_ptr<WebGestureEvent> followup_gesture_event_; | 256 scoped_ptr<WebGestureEvent> followup_gesture_event_; |
| 264 scoped_ptr<InputEventAckState> sync_ack_result_; | 257 scoped_ptr<InputEventAckState> sync_ack_result_; |
| 265 double slop_length_dips_; | 258 double slop_length_dips_; |
| 266 gfx::PointF anchor_; | 259 gfx::PointF anchor_; |
| 267 TouchEventQueue::TouchScrollingMode touch_scrolling_mode_; | |
| 268 base::MessageLoopForUI message_loop_; | 260 base::MessageLoopForUI message_loop_; |
| 269 }; | 261 }; |
| 270 | 262 |
| 271 | 263 |
| 272 // Tests that touch-events are queued properly. | 264 // Tests that touch-events are queued properly. |
| 273 TEST_F(TouchEventQueueTest, Basic) { | 265 TEST_F(TouchEventQueueTest, Basic) { |
| 274 PressTouchPoint(1, 1); | 266 PressTouchPoint(1, 1); |
| 275 EXPECT_EQ(1U, queued_event_count()); | 267 EXPECT_EQ(1U, queued_event_count()); |
| 276 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 268 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 277 | 269 |
| (...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 941 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 933 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 942 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 934 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 943 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 935 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 944 | 936 |
| 945 ReleaseTouchPoint(0); | 937 ReleaseTouchPoint(0); |
| 946 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 938 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 947 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 939 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 948 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 940 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 949 } | 941 } |
| 950 | 942 |
| 951 // Tests that no TouchEvents are sent to renderer during scrolling. | |
| 952 TEST_F(TouchEventQueueTest, TouchCancelOnScroll) { | |
| 953 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_TOUCHCANCEL); | |
| 954 // Queue a TouchStart. | |
| 955 PressTouchPoint(0, 1); | |
| 956 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 957 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 958 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 959 | |
| 960 MoveTouchPoint(0, 20, 5); | |
| 961 EXPECT_EQ(1U, queued_event_count()); | |
| 962 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 963 | |
| 964 MoveTouchPoint(0, 30, 15); | |
| 965 EXPECT_EQ(2U, queued_event_count()); | |
| 966 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
| 967 | |
| 968 // Queue another TouchStart. | |
| 969 PressTouchPoint(20, 20); | |
| 970 EXPECT_EQ(3U, queued_event_count()); | |
| 971 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
| 972 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); | |
| 973 | |
| 974 WebGestureEvent followup_scroll; | |
| 975 followup_scroll.type = WebInputEvent::GestureScrollBegin; | |
| 976 SetFollowupEvent(followup_scroll); | |
| 977 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 978 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 979 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 980 EXPECT_EQ(2U, queued_event_count()); | |
| 981 EXPECT_TRUE(sent_event().cancelable); | |
| 982 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | |
| 983 | |
| 984 // GestureScrollUpdate inserts a synthetic TouchCancel before the TouchStart. | |
| 985 followup_scroll.type = WebInputEvent::GestureScrollUpdate; | |
| 986 SetFollowupEvent(followup_scroll); | |
| 987 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 988 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 989 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 990 EXPECT_EQ(2U, queued_event_count()); | |
| 991 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type); | |
| 992 EXPECT_FALSE(sent_event().cancelable); | |
| 993 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); | |
| 994 | |
| 995 // Acking the TouchCancel will result in dispatch of the next TouchStart. | |
| 996 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 997 // The synthetic TouchCancel should not reach client, only the TouchStart. | |
| 998 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 999 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
| 1000 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); | |
| 1001 | |
| 1002 // TouchMove should not be sent to the renderer. | |
| 1003 MoveTouchPoint(0, 30, 5); | |
| 1004 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1005 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
| 1006 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); | |
| 1007 | |
| 1008 // GestureScrollUpdates should not change affect touch forwarding. | |
| 1009 SendGestureEvent(WebInputEvent::GestureScrollUpdate); | |
| 1010 | |
| 1011 // TouchEnd should not be sent to the renderer. | |
| 1012 ReleaseTouchPoint(0); | |
| 1013 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1014 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
| 1015 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); | |
| 1016 | |
| 1017 ReleaseTouchPoint(0); | |
| 1018 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1019 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
| 1020 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); | |
| 1021 | |
| 1022 // Touch events from a new gesture sequence should be forwarded normally. | |
| 1023 PressTouchPoint(80, 10); | |
| 1024 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 1025 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 1026 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1027 | |
| 1028 MoveTouchPoint(0, 80, 20); | |
| 1029 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 1030 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 1031 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1032 | |
| 1033 ReleaseTouchPoint(0); | |
| 1034 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 1035 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 1036 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1037 } | |
| 1038 | |
| 1039 // Tests that a scroll event will not insert a synthetic TouchCancel if there | |
| 1040 // was no consumer for the current touch sequence. | |
| 1041 TEST_F(TouchEventQueueTest, NoTouchCancelOnScrollIfNoConsumer) { | |
| 1042 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_TOUCHCANCEL); | |
| 1043 | |
| 1044 // Queue a TouchStart. | |
| 1045 PressTouchPoint(0, 1); | |
| 1046 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 1047 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | |
| 1048 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1049 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type); | |
| 1050 | |
| 1051 // Queue a TouchMove that turns into a GestureScrollBegin. | |
| 1052 WebGestureEvent followup_scroll; | |
| 1053 followup_scroll.type = WebInputEvent::GestureScrollBegin; | |
| 1054 SetFollowupEvent(followup_scroll); | |
| 1055 MoveTouchPoint(0, 20, 5); | |
| 1056 | |
| 1057 // The TouchMove has no consumer, and should be ack'ed immediately. However, | |
| 1058 // *no* synthetic TouchCancel should be inserted as the touch sequence | |
| 1059 // had no consumer. | |
| 1060 EXPECT_EQ(0U, queued_event_count()); | |
| 1061 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
| 1062 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1063 EXPECT_EQ(0U, queued_event_count()); | |
| 1064 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type); | |
| 1065 | |
| 1066 // Subsequent TouchMove's should not be sent to the renderer. | |
| 1067 MoveTouchPoint(0, 30, 5); | |
| 1068 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1069 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
| 1070 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); | |
| 1071 | |
| 1072 // TouchEnd should not be sent to the renderer. | |
| 1073 ReleaseTouchPoint(0); | |
| 1074 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1075 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
| 1076 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); | |
| 1077 | |
| 1078 // Touch events from a new gesture sequence should be forwarded normally. | |
| 1079 PressTouchPoint(80, 10); | |
| 1080 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 1081 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 1082 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1083 } | |
| 1084 | |
| 1085 // Tests that IsTouchStartPendingAck works correctly. | 943 // Tests that IsTouchStartPendingAck works correctly. |
| 1086 TEST_F(TouchEventQueueTest, PendingStart) { | 944 TEST_F(TouchEventQueueTest, PendingStart) { |
| 1087 | 945 |
| 1088 EXPECT_FALSE(IsPendingAckTouchStart()); | 946 EXPECT_FALSE(IsPendingAckTouchStart()); |
| 1089 | 947 |
| 1090 // Send the touchstart for one point (#1). | 948 // Send the touchstart for one point (#1). |
| 1091 PressTouchPoint(1, 1); | 949 PressTouchPoint(1, 1); |
| 1092 EXPECT_EQ(1U, queued_event_count()); | 950 EXPECT_EQ(1U, queued_event_count()); |
| 1093 EXPECT_TRUE(IsPendingAckTouchStart()); | 951 EXPECT_TRUE(IsPendingAckTouchStart()); |
| 1094 | 952 |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1667 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1525 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1668 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); | 1526 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); |
| 1669 | 1527 |
| 1670 // Neither should any further touchmoves be forwarded. | 1528 // Neither should any further touchmoves be forwarded. |
| 1671 MoveTouchPoint(1, 25, 0); | 1529 MoveTouchPoint(1, 25, 0); |
| 1672 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1530 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1673 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1531 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1674 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); | 1532 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); |
| 1675 } | 1533 } |
| 1676 | 1534 |
| 1677 TEST_F(TouchEventQueueTest, SyncTouchMoveDoesntCancelTouchOnScroll) { | |
| 1678 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_SYNC_TOUCHMOVE); | |
| 1679 // Queue a TouchStart. | |
| 1680 PressTouchPoint(0, 1); | |
| 1681 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 1682 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 1683 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1684 | |
| 1685 MoveTouchPoint(0, 20, 5); | |
| 1686 EXPECT_EQ(1U, queued_event_count()); | |
| 1687 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 1688 | |
| 1689 // GestureScrollBegin doesn't insert a synthetic TouchCancel. | |
| 1690 WebGestureEvent followup_scroll; | |
| 1691 followup_scroll.type = WebInputEvent::GestureScrollBegin; | |
| 1692 SetFollowupEvent(followup_scroll); | |
| 1693 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 1694 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
| 1695 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
| 1696 EXPECT_EQ(0U, queued_event_count()); | |
| 1697 } | |
| 1698 | |
| 1699 TEST_F(TouchEventQueueTest, AsyncTouch) { | 1535 TEST_F(TouchEventQueueTest, AsyncTouch) { |
| 1700 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | |
| 1701 | |
| 1702 // Queue a TouchStart. | 1536 // Queue a TouchStart. |
| 1703 PressTouchPoint(0, 1); | 1537 PressTouchPoint(0, 1); |
| 1704 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1538 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1705 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1539 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1706 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1540 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1707 | 1541 |
| 1708 for (int i = 0; i < 3; ++i) { | 1542 for (int i = 0; i < 3; ++i) { |
| 1709 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, | 1543 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, |
| 1710 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1544 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1711 | 1545 |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 1723 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1557 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1724 EXPECT_TRUE(HasPendingAsyncTouchMove()); | 1558 EXPECT_TRUE(HasPendingAsyncTouchMove()); |
| 1725 EXPECT_EQ(0U, queued_event_count()); | 1559 EXPECT_EQ(0U, queued_event_count()); |
| 1726 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1560 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1727 } | 1561 } |
| 1728 } | 1562 } |
| 1729 | 1563 |
| 1730 // Ensure that touchmove's are appropriately throttled during a typical | 1564 // Ensure that touchmove's are appropriately throttled during a typical |
| 1731 // scroll sequences that transitions between scrolls consumed and unconsumed. | 1565 // scroll sequences that transitions between scrolls consumed and unconsumed. |
| 1732 TEST_F(TouchEventQueueTest, AsyncTouchThrottledAfterScroll) { | 1566 TEST_F(TouchEventQueueTest, AsyncTouchThrottledAfterScroll) { |
| 1733 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | |
| 1734 | |
| 1735 // Process a TouchStart | 1567 // Process a TouchStart |
| 1736 PressTouchPoint(0, 1); | 1568 PressTouchPoint(0, 1); |
| 1737 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1569 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1738 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1570 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1739 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1571 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1740 | 1572 |
| 1741 // Now send the first touch move and associated GestureScrollBegin. | 1573 // Now send the first touch move and associated GestureScrollBegin. |
| 1742 MoveTouchPoint(0, 0, 5); | 1574 MoveTouchPoint(0, 0, 5); |
| 1743 WebGestureEvent followup_scroll; | 1575 WebGestureEvent followup_scroll; |
| 1744 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 1576 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1920 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1752 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1921 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1753 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1922 | 1754 |
| 1923 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1755 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1924 EXPECT_EQ(0U, queued_event_count()); | 1756 EXPECT_EQ(0U, queued_event_count()); |
| 1925 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1757 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1926 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1758 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1927 } | 1759 } |
| 1928 | 1760 |
| 1929 TEST_F(TouchEventQueueTest, AsyncTouchFlushedByTouchEnd) { | 1761 TEST_F(TouchEventQueueTest, AsyncTouchFlushedByTouchEnd) { |
| 1930 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | |
| 1931 | |
| 1932 PressTouchPoint(0, 0); | 1762 PressTouchPoint(0, 0); |
| 1933 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1763 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1934 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1764 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1935 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1765 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1936 | 1766 |
| 1937 // Initiate async touchmove dispatch after the start of a scroll sequence. | 1767 // Initiate async touchmove dispatch after the start of a scroll sequence. |
| 1938 MoveTouchPoint(0, 0, 5); | 1768 MoveTouchPoint(0, 0, 5); |
| 1939 WebGestureEvent followup_scroll; | 1769 WebGestureEvent followup_scroll; |
| 1940 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 1770 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
| 1941 SetFollowupEvent(followup_scroll); | 1771 SetFollowupEvent(followup_scroll); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1977 // Touchend is not cancelable during async touch dispatch. | 1807 // Touchend is not cancelable during async touch dispatch. |
| 1978 SendTouchEventAck(INPUT_EVENT_ACK_STATE_IGNORED); | 1808 SendTouchEventAck(INPUT_EVENT_ACK_STATE_IGNORED); |
| 1979 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type); | 1809 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type); |
| 1980 EXPECT_FALSE(sent_event().cancelable); | 1810 EXPECT_FALSE(sent_event().cancelable); |
| 1981 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1811 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1982 } | 1812 } |
| 1983 | 1813 |
| 1984 // Ensure that async touch dispatch and touch ack timeout interactions work | 1814 // Ensure that async touch dispatch and touch ack timeout interactions work |
| 1985 // appropriately. | 1815 // appropriately. |
| 1986 TEST_F(TouchEventQueueTest, AsyncTouchWithAckTimeout) { | 1816 TEST_F(TouchEventQueueTest, AsyncTouchWithAckTimeout) { |
| 1987 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | |
| 1988 SetUpForTimeoutTesting(DefaultTouchTimeoutDelay()); | 1817 SetUpForTimeoutTesting(DefaultTouchTimeoutDelay()); |
| 1989 | 1818 |
| 1990 // The touchstart should start the timeout. | 1819 // The touchstart should start the timeout. |
| 1991 PressTouchPoint(0, 0); | 1820 PressTouchPoint(0, 0); |
| 1992 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1821 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1993 EXPECT_TRUE(IsTimeoutRunning()); | 1822 EXPECT_TRUE(IsTimeoutRunning()); |
| 1994 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1823 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1995 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1824 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1996 EXPECT_FALSE(IsTimeoutRunning()); | 1825 EXPECT_FALSE(IsTimeoutRunning()); |
| 1997 | 1826 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2060 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1889 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2061 MoveTouchPoint(0, 25, 5); | 1890 MoveTouchPoint(0, 25, 5); |
| 2062 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 1891 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
| 2063 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1892 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2064 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1893 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 2065 } | 1894 } |
| 2066 | 1895 |
| 2067 // Ensure that if the touch ack for an async touchmove triggers a follow-up | 1896 // Ensure that if the touch ack for an async touchmove triggers a follow-up |
| 2068 // touch event, that follow-up touch will be forwarded appropriately. | 1897 // touch event, that follow-up touch will be forwarded appropriately. |
| 2069 TEST_F(TouchEventQueueTest, AsyncTouchWithTouchCancelAfterAck) { | 1898 TEST_F(TouchEventQueueTest, AsyncTouchWithTouchCancelAfterAck) { |
| 2070 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | |
| 2071 | |
| 2072 PressTouchPoint(0, 0); | 1899 PressTouchPoint(0, 0); |
| 2073 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1900 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2074 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1901 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2075 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1902 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2076 | 1903 |
| 2077 // The start of a scroll gesture should trigger async touch event dispatch. | 1904 // The start of a scroll gesture should trigger async touch event dispatch. |
| 2078 MoveTouchPoint(0, 1, 1); | 1905 MoveTouchPoint(0, 1, 1); |
| 2079 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1906 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2080 WebGestureEvent followup_scroll; | 1907 WebGestureEvent followup_scroll; |
| 2081 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 1908 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2115 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1942 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2116 EXPECT_EQ(0U, queued_event_count()); | 1943 EXPECT_EQ(0U, queued_event_count()); |
| 2117 EXPECT_EQ(WebInputEvent::TouchCancel, acked_event().type); | 1944 EXPECT_EQ(WebInputEvent::TouchCancel, acked_event().type); |
| 2118 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1945 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2119 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1946 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 2120 } | 1947 } |
| 2121 | 1948 |
| 2122 // Ensure that the async touch is fully reset if the touch sequence restarts | 1949 // Ensure that the async touch is fully reset if the touch sequence restarts |
| 2123 // without properly terminating. | 1950 // without properly terminating. |
| 2124 TEST_F(TouchEventQueueTest, AsyncTouchWithHardTouchStartReset) { | 1951 TEST_F(TouchEventQueueTest, AsyncTouchWithHardTouchStartReset) { |
| 2125 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | |
| 2126 | |
| 2127 PressTouchPoint(0, 0); | 1952 PressTouchPoint(0, 0); |
| 2128 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1953 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2129 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1954 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2130 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1955 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2131 | 1956 |
| 2132 // Trigger async touchmove dispatch. | 1957 // Trigger async touchmove dispatch. |
| 2133 MoveTouchPoint(0, 1, 1); | 1958 MoveTouchPoint(0, 1, 1); |
| 2134 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1959 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2135 WebGestureEvent followup_scroll; | 1960 WebGestureEvent followup_scroll; |
| 2136 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 1961 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 2154 ResetTouchEvent(); | 1979 ResetTouchEvent(); |
| 2155 | 1980 |
| 2156 PressTouchPoint(0, 0); | 1981 PressTouchPoint(0, 0); |
| 2157 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1982 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2158 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type); | 1983 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type); |
| 2159 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1984 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2160 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1985 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2161 } | 1986 } |
| 2162 | 1987 |
| 2163 TEST_F(TouchEventQueueTest, TouchAbsorptionWithConsumedFirstMove) { | 1988 TEST_F(TouchEventQueueTest, TouchAbsorptionWithConsumedFirstMove) { |
| 2164 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | |
| 2165 | |
| 2166 // Queue a TouchStart. | 1989 // Queue a TouchStart. |
| 2167 PressTouchPoint(0, 1); | 1990 PressTouchPoint(0, 1); |
| 2168 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1991 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2169 EXPECT_EQ(0U, queued_event_count()); | 1992 EXPECT_EQ(0U, queued_event_count()); |
| 2170 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1993 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2171 | 1994 |
| 2172 MoveTouchPoint(0, 20, 5); | 1995 MoveTouchPoint(0, 20, 5); |
| 2173 SendGestureEvent(blink::WebInputEvent::GestureScrollBegin); | 1996 SendGestureEvent(blink::WebInputEvent::GestureScrollBegin); |
| 2174 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 1997 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2175 EXPECT_EQ(0U, queued_event_count()); | 1998 EXPECT_EQ(0U, queued_event_count()); |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 2195 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2018 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2196 | 2019 |
| 2197 // Touch move event is throttled. | 2020 // Touch move event is throttled. |
| 2198 MoveTouchPoint(0, 60, 5); | 2021 MoveTouchPoint(0, 60, 5); |
| 2199 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2022 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2200 EXPECT_EQ(0U, queued_event_count()); | 2023 EXPECT_EQ(0U, queued_event_count()); |
| 2201 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 2024 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 2202 } | 2025 } |
| 2203 | 2026 |
| 2204 TEST_F(TouchEventQueueTest, TouchStartCancelableDuringScroll) { | 2027 TEST_F(TouchEventQueueTest, TouchStartCancelableDuringScroll) { |
| 2205 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | |
| 2206 | |
| 2207 // Queue a touchstart and touchmove that go unconsumed, transitioning to an | 2028 // Queue a touchstart and touchmove that go unconsumed, transitioning to an |
| 2208 // active scroll sequence. | 2029 // active scroll sequence. |
| 2209 PressTouchPoint(0, 1); | 2030 PressTouchPoint(0, 1); |
| 2210 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2031 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2211 ASSERT_EQ(1U, GetAndResetSentEventCount()); | 2032 ASSERT_EQ(1U, GetAndResetSentEventCount()); |
| 2212 EXPECT_TRUE(sent_event().cancelable); | 2033 EXPECT_TRUE(sent_event().cancelable); |
| 2213 | 2034 |
| 2214 MoveTouchPoint(0, 20, 5); | 2035 MoveTouchPoint(0, 20, 5); |
| 2215 EXPECT_TRUE(sent_event().cancelable); | 2036 EXPECT_TRUE(sent_event().cancelable); |
| 2216 SendGestureEvent(blink::WebInputEvent::GestureScrollBegin); | 2037 SendGestureEvent(blink::WebInputEvent::GestureScrollBegin); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2294 | 2115 |
| 2295 // Give the touchmove a valid id; it should be sent. | 2116 // Give the touchmove a valid id; it should be sent. |
| 2296 event.touches[0].id = press_id; | 2117 event.touches[0].id = press_id; |
| 2297 SendTouchEvent(event); | 2118 SendTouchEvent(event); |
| 2298 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2119 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2299 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2120 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2300 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2121 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2301 } | 2122 } |
| 2302 | 2123 |
| 2303 } // namespace content | 2124 } // namespace content |
| OLD | NEW |