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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 } | 166 } |
167 | 167 |
168 WebGestureEvent GestureEventQueueEventAt(int i) { | 168 WebGestureEvent GestureEventQueueEventAt(int i) { |
169 return queue()->coalesced_gesture_events_.at(i).event; | 169 return queue()->coalesced_gesture_events_.at(i).event; |
170 } | 170 } |
171 | 171 |
172 bool ScrollingInProgress() { | 172 bool ScrollingInProgress() { |
173 return queue()->scrolling_in_progress_; | 173 return queue()->scrolling_in_progress_; |
174 } | 174 } |
175 | 175 |
176 bool FlingInProgress() { | 176 int ActiveFlingCount() { return queue()->active_fling_count_; } |
177 return queue()->fling_in_progress_; | |
178 } | |
179 | 177 |
180 bool WillIgnoreNextACK() { | 178 bool WillIgnoreNextACK() { |
181 return queue()->ignore_next_ack_; | 179 return queue()->ignore_next_ack_; |
182 } | 180 } |
183 | 181 |
184 GestureEventQueue* queue() const { | 182 GestureEventQueue* queue() const { |
185 return queue_.get(); | 183 return queue_.get(); |
186 } | 184 } |
187 | 185 |
188 private: | 186 private: |
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
955 | 953 |
956 #if GTEST_HAS_PARAM_TEST | 954 #if GTEST_HAS_PARAM_TEST |
957 TEST_P(GestureEventQueueWithSourceTest, GestureFlingCancelsFiltered) { | 955 TEST_P(GestureEventQueueWithSourceTest, GestureFlingCancelsFiltered) { |
958 WebGestureDevice source_device = GetParam(); | 956 WebGestureDevice source_device = GetParam(); |
959 | 957 |
960 // GFC without previous GFS is dropped. | 958 // GFC without previous GFS is dropped. |
961 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); | 959 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
962 EXPECT_EQ(0U, GetAndResetSentGestureEventCount()); | 960 EXPECT_EQ(0U, GetAndResetSentGestureEventCount()); |
963 EXPECT_EQ(0U, GestureEventQueueSize()); | 961 EXPECT_EQ(0U, GestureEventQueueSize()); |
964 | 962 |
| 963 // GFC after unconsumed fling is dropped. |
| 964 SimulateGestureEvent(WebInputEvent::GestureFlingStart, source_device); |
| 965 SendInputEventACK(WebInputEvent::GestureFlingStart, |
| 966 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 967 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); |
| 968 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount()); |
| 969 EXPECT_EQ(0U, GestureEventQueueSize()); |
| 970 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
| 971 EXPECT_EQ(0U, GetAndResetSentGestureEventCount()); |
| 972 EXPECT_EQ(0U, GestureEventQueueSize()); |
| 973 |
| 974 // GFC after fling has ended is dropped. |
| 975 SimulateGestureEvent(WebInputEvent::GestureFlingStart, source_device); |
| 976 SendInputEventACK(WebInputEvent::GestureFlingStart, |
| 977 INPUT_EVENT_ACK_STATE_CONSUMED); |
| 978 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); |
| 979 EXPECT_EQ(0U, GestureEventQueueSize()); |
| 980 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount()); |
| 981 |
| 982 EXPECT_EQ(1, ActiveFlingCount()); |
| 983 queue()->DidStopFlinging(); |
| 984 EXPECT_EQ(0, ActiveFlingCount()); |
| 985 |
| 986 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
| 987 EXPECT_EQ(0U, GetAndResetSentGestureEventCount()); |
| 988 EXPECT_EQ(0U, GestureEventQueueSize()); |
| 989 |
965 // GFC after previous GFS is dispatched and acked. | 990 // GFC after previous GFS is dispatched and acked. |
966 SimulateGestureFlingStartEvent(0, -10, source_device); | 991 SimulateGestureFlingStartEvent(0, -10, source_device); |
967 EXPECT_TRUE(FlingInProgress()); | |
968 SendInputEventACK(WebInputEvent::GestureFlingStart, | 992 SendInputEventACK(WebInputEvent::GestureFlingStart, |
969 INPUT_EVENT_ACK_STATE_CONSUMED); | 993 INPUT_EVENT_ACK_STATE_CONSUMED); |
| 994 EXPECT_EQ(1, ActiveFlingCount()); |
970 RunUntilIdle(); | 995 RunUntilIdle(); |
971 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount()); | 996 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount()); |
972 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); | 997 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
973 EXPECT_FALSE(FlingInProgress()); | 998 queue()->DidStopFlinging(); |
| 999 EXPECT_EQ(0, ActiveFlingCount()); |
974 EXPECT_EQ(2U, GetAndResetSentGestureEventCount()); | 1000 EXPECT_EQ(2U, GetAndResetSentGestureEventCount()); |
975 SendInputEventACK(WebInputEvent::GestureFlingCancel, | 1001 SendInputEventACK(WebInputEvent::GestureFlingCancel, |
976 INPUT_EVENT_ACK_STATE_CONSUMED); | 1002 INPUT_EVENT_ACK_STATE_CONSUMED); |
977 RunUntilIdle(); | 1003 RunUntilIdle(); |
978 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount()); | 1004 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount()); |
979 EXPECT_EQ(0U, GestureEventQueueSize()); | 1005 EXPECT_EQ(0U, GestureEventQueueSize()); |
980 | 1006 |
981 // GFC before previous GFS is acked. | 1007 // GFC before previous GFS is acked. |
982 SimulateGestureFlingStartEvent(0, -10, source_device); | 1008 SimulateGestureFlingStartEvent(0, -10, source_device); |
983 EXPECT_TRUE(FlingInProgress()); | |
984 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); | 1009 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
985 EXPECT_FALSE(FlingInProgress()); | |
986 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); | 1010 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); |
987 EXPECT_EQ(2U, GestureEventQueueSize()); | 1011 EXPECT_EQ(2U, GestureEventQueueSize()); |
988 | 1012 |
989 // Advance state realistically. | 1013 // Advance state realistically. |
990 SendInputEventACK(WebInputEvent::GestureFlingStart, | 1014 SendInputEventACK(WebInputEvent::GestureFlingStart, |
991 INPUT_EVENT_ACK_STATE_CONSUMED); | 1015 INPUT_EVENT_ACK_STATE_CONSUMED); |
992 RunUntilIdle(); | 1016 RunUntilIdle(); |
993 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); | 1017 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); |
994 SendInputEventACK(WebInputEvent::GestureFlingCancel, | 1018 SendInputEventACK(WebInputEvent::GestureFlingCancel, |
995 INPUT_EVENT_ACK_STATE_CONSUMED); | 1019 INPUT_EVENT_ACK_STATE_CONSUMED); |
996 RunUntilIdle(); | 1020 RunUntilIdle(); |
997 EXPECT_EQ(2U, GetAndResetAckedGestureEventCount()); | 1021 EXPECT_EQ(2U, GetAndResetAckedGestureEventCount()); |
998 EXPECT_EQ(0U, GetAndResetSentGestureEventCount()); | 1022 EXPECT_EQ(0U, GetAndResetSentGestureEventCount()); |
999 EXPECT_EQ(0U, GestureEventQueueSize()); | 1023 EXPECT_EQ(0U, GestureEventQueueSize()); |
1000 | 1024 |
1001 // GFS is added to the queue if another event is pending | 1025 // GFS is added to the queue if another event is pending |
1002 SimulateGestureScrollUpdateEvent(8, -7, 0); | 1026 SimulateGestureScrollUpdateEvent(8, -7, 0); |
1003 SimulateGestureFlingStartEvent(0, -10, source_device); | 1027 SimulateGestureFlingStartEvent(0, -10, source_device); |
1004 EXPECT_EQ(2U, GestureEventQueueSize()); | 1028 EXPECT_EQ(2U, GestureEventQueueSize()); |
1005 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); | 1029 EXPECT_EQ(1U, GetAndResetSentGestureEventCount()); |
1006 WebGestureEvent merged_event = GestureEventLastQueueEvent(); | 1030 WebGestureEvent merged_event = GestureEventLastQueueEvent(); |
1007 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); | 1031 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); |
1008 EXPECT_TRUE(FlingInProgress()); | |
1009 EXPECT_EQ(2U, GestureEventQueueSize()); | 1032 EXPECT_EQ(2U, GestureEventQueueSize()); |
1010 | 1033 |
1011 // GFS in queue means that a GFC is added to the queue | 1034 // GFS in queue means that a GFC is added to the queue |
1012 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); | 1035 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
1013 merged_event =GestureEventLastQueueEvent(); | 1036 merged_event =GestureEventLastQueueEvent(); |
1014 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); | 1037 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); |
1015 EXPECT_FALSE(FlingInProgress()); | |
1016 EXPECT_EQ(3U, GestureEventQueueSize()); | 1038 EXPECT_EQ(3U, GestureEventQueueSize()); |
1017 | 1039 |
1018 // Adding a second GFC is dropped. | 1040 // Adding a second GFC is dropped. |
1019 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); | 1041 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
1020 EXPECT_FALSE(FlingInProgress()); | |
1021 EXPECT_EQ(3U, GestureEventQueueSize()); | 1042 EXPECT_EQ(3U, GestureEventQueueSize()); |
1022 | 1043 |
1023 // Adding another GFS will add it to the queue. | 1044 // Adding another GFS will add it to the queue. |
1024 SimulateGestureFlingStartEvent(0, -10, source_device); | 1045 SimulateGestureFlingStartEvent(0, -10, source_device); |
1025 merged_event = GestureEventLastQueueEvent(); | 1046 merged_event = GestureEventLastQueueEvent(); |
1026 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); | 1047 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); |
1027 EXPECT_TRUE(FlingInProgress()); | |
1028 EXPECT_EQ(4U, GestureEventQueueSize()); | 1048 EXPECT_EQ(4U, GestureEventQueueSize()); |
1029 | 1049 |
1030 // GFS in queue means that a GFC is added to the queue | 1050 // GFS in queue means that a GFC is added to the queue |
1031 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); | 1051 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
1032 merged_event = GestureEventLastQueueEvent(); | 1052 merged_event = GestureEventLastQueueEvent(); |
1033 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); | 1053 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); |
1034 EXPECT_FALSE(FlingInProgress()); | |
1035 EXPECT_EQ(5U, GestureEventQueueSize()); | 1054 EXPECT_EQ(5U, GestureEventQueueSize()); |
1036 | 1055 |
1037 // Adding another GFC with a GFC already there is dropped. | 1056 // Adding another GFC with a GFC already there is dropped. |
1038 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); | 1057 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
1039 merged_event = GestureEventLastQueueEvent(); | 1058 merged_event = GestureEventLastQueueEvent(); |
1040 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); | 1059 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); |
1041 EXPECT_FALSE(FlingInProgress()); | |
1042 EXPECT_EQ(5U, GestureEventQueueSize()); | 1060 EXPECT_EQ(5U, GestureEventQueueSize()); |
1043 } | 1061 } |
1044 | 1062 |
1045 INSTANTIATE_TEST_CASE_P(AllSources, | 1063 INSTANTIATE_TEST_CASE_P(AllSources, |
1046 GestureEventQueueWithSourceTest, | 1064 GestureEventQueueWithSourceTest, |
1047 testing::Values(blink::WebGestureDeviceTouchscreen, | 1065 testing::Values(blink::WebGestureDeviceTouchscreen, |
1048 blink::WebGestureDeviceTouchpad)); | 1066 blink::WebGestureDeviceTouchpad)); |
1049 #endif // GTEST_HAS_PARAM_TEST | 1067 #endif // GTEST_HAS_PARAM_TEST |
1050 | 1068 |
1051 // Test that a GestureScrollEnd | GestureFlingStart are deferred during the | 1069 // Test that a GestureScrollEnd | GestureFlingStart are deferred during the |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1146 WebInputEvent::GestureScrollUpdate}; | 1164 WebInputEvent::GestureScrollUpdate}; |
1147 | 1165 |
1148 for (unsigned i = 0; i < sizeof(expected) / sizeof(WebInputEvent::Type); | 1166 for (unsigned i = 0; i < sizeof(expected) / sizeof(WebInputEvent::Type); |
1149 i++) { | 1167 i++) { |
1150 WebGestureEvent merged_event = GestureEventQueueEventAt(i); | 1168 WebGestureEvent merged_event = GestureEventQueueEventAt(i); |
1151 EXPECT_EQ(expected[i], merged_event.type); | 1169 EXPECT_EQ(expected[i], merged_event.type); |
1152 } | 1170 } |
1153 } | 1171 } |
1154 | 1172 |
1155 } // namespace content | 1173 } // namespace content |
OLD | NEW |