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/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "content/browser/renderer_host/input/gesture_event_filter.h" | 8 #include "content/browser/renderer_host/input/gesture_event_filter.h" |
9 #include "content/browser/renderer_host/input/immediate_input_router.h" | 9 #include "content/browser/renderer_host/input/immediate_input_router.h" |
10 #include "content/browser/renderer_host/input/input_router_client.h" | 10 #include "content/browser/renderer_host/input/input_router_client.h" |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 } | 358 } |
359 | 359 |
360 TEST_F(ImmediateInputRouterTest, IgnoreKeyEventsWeDidntSend) { | 360 TEST_F(ImmediateInputRouterTest, IgnoreKeyEventsWeDidntSend) { |
361 // Send a simulated, unrequested key response. We should ignore this. | 361 // Send a simulated, unrequested key response. We should ignore this. |
362 SendInputEventACK(WebInputEvent::RawKeyDown, | 362 SendInputEventACK(WebInputEvent::RawKeyDown, |
363 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 363 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
364 | 364 |
365 ack_handler_->ExpectAckCalled(0); | 365 ack_handler_->ExpectAckCalled(0); |
366 } | 366 } |
367 | 367 |
| 368 // GestureEventFilter tests should be factored out of |
| 369 // ImmediateInputRouterTest. See crbug.com/301807. |
368 TEST_F(ImmediateInputRouterTest, CoalescesWheelEvents) { | 370 TEST_F(ImmediateInputRouterTest, CoalescesWheelEvents) { |
369 // Simulate wheel events. | 371 // Simulate wheel events. |
370 SimulateWheelEvent(0, -5, 0, false); // sent directly | 372 SimulateWheelEvent(0, -5, 0, false); // sent directly |
371 SimulateWheelEvent(0, -10, 0, false); // enqueued | 373 SimulateWheelEvent(0, -10, 0, false); // enqueued |
372 SimulateWheelEvent(8, -6, 0, false); // coalesced into previous event | 374 SimulateWheelEvent(8, -6, 0, false); // coalesced into previous event |
373 SimulateWheelEvent(9, -7, 1, false); // enqueued, different modifiers | 375 SimulateWheelEvent(9, -7, 1, false); // enqueued, different modifiers |
374 | 376 |
375 // Check that only the first event was sent. | 377 // Check that only the first event was sent. |
376 EXPECT_EQ(1U, process_->sink().message_count()); | 378 EXPECT_EQ(1U, process_->sink().message_count()); |
377 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 379 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
882 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 884 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
883 | 885 |
884 // Wait long enough for first timeout and see if it fired. | 886 // Wait long enough for first timeout and see if it fired. |
885 base::MessageLoop::current()->PostDelayedTask( | 887 base::MessageLoop::current()->PostDelayedTask( |
886 FROM_HERE, | 888 FROM_HERE, |
887 base::MessageLoop::QuitClosure(), | 889 base::MessageLoop::QuitClosure(), |
888 TimeDelta::FromMilliseconds(10)); | 890 TimeDelta::FromMilliseconds(10)); |
889 base::MessageLoop::current()->Run(); | 891 base::MessageLoop::current()->Run(); |
890 | 892 |
891 EXPECT_EQ(1U, process_->sink().message_count()); | 893 EXPECT_EQ(1U, process_->sink().message_count()); |
892 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); | 894 // The tap down event will have escaped the queue, since they're async. |
893 EXPECT_EQ(WebInputEvent::GestureTapDown, | 895 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
894 GestureEventLastQueueEvent().type); | |
895 } | 896 } |
896 | 897 |
897 // Test that GestureTapDown events are sent immediately on GestureTap. | 898 // Test that GestureTapDown events are sent immediately on GestureTap. |
898 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownSentOnTap) { | 899 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownSentOnTap) { |
899 // Set some sort of short deferral timeout | 900 // Set some sort of short deferral timeout |
900 set_maximum_tap_gap_time_ms(5); | 901 set_maximum_tap_gap_time_ms(5); |
901 | 902 |
902 SimulateGestureEvent(WebInputEvent::GestureTapDown, | 903 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
903 WebGestureEvent::Touchscreen); | 904 WebGestureEvent::Touchscreen); |
904 EXPECT_EQ(0U, process_->sink().message_count()); | 905 EXPECT_EQ(0U, process_->sink().message_count()); |
905 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 906 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
906 | 907 |
907 SimulateGestureEvent(WebInputEvent::GestureTap, | 908 SimulateGestureEvent(WebInputEvent::GestureTap, |
908 WebGestureEvent::Touchscreen); | 909 WebGestureEvent::Touchscreen); |
909 EXPECT_EQ(1U, process_->sink().message_count()); | 910 |
910 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); | 911 EXPECT_EQ(2U, process_->sink().message_count()); |
| 912 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); |
911 EXPECT_EQ(WebInputEvent::GestureTap, | 913 EXPECT_EQ(WebInputEvent::GestureTap, |
912 GestureEventLastQueueEvent().type); | 914 GestureEventLastQueueEvent().type); |
913 | 915 |
914 base::MessageLoop::current()->PostDelayedTask( | 916 base::MessageLoop::current()->PostDelayedTask( |
915 FROM_HERE, | 917 FROM_HERE, |
916 base::MessageLoop::QuitClosure(), | 918 base::MessageLoop::QuitClosure(), |
917 TimeDelta::FromMilliseconds(10)); | 919 TimeDelta::FromMilliseconds(10)); |
918 base::MessageLoop::current()->Run(); | 920 base::MessageLoop::current()->Run(); |
919 | 921 |
920 EXPECT_EQ(WebInputEvent::GestureTapDown, | 922 EXPECT_EQ(WebInputEvent::GestureTapDown, |
921 client_->immediately_sent_gesture_event().event.type); | 923 client_->immediately_sent_gesture_event().event.type); |
922 | 924 |
923 // If the deferral timer incorrectly fired, it sent an extra message. | 925 // If the deferral timer incorrectly fired, it sent an extra message. |
924 EXPECT_EQ(1U, process_->sink().message_count()); | 926 EXPECT_EQ(2U, process_->sink().message_count()); |
925 } | 927 } |
926 | 928 |
927 // Test that only a single GestureTapDown event is sent when tap occurs after | 929 // Test that only a single GestureTapDown event is sent when tap occurs after |
928 // the timeout. | 930 // the timeout. |
929 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownOnlyOnce) { | 931 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownOnlyOnce) { |
930 // Set some sort of short deferral timeout | 932 // Set some sort of short deferral timeout |
931 set_maximum_tap_gap_time_ms(5); | 933 set_maximum_tap_gap_time_ms(5); |
932 | 934 |
933 SimulateGestureEvent(WebInputEvent::GestureTapDown, | 935 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
934 WebGestureEvent::Touchscreen); | 936 WebGestureEvent::Touchscreen); |
935 EXPECT_EQ(0U, process_->sink().message_count()); | 937 EXPECT_EQ(0U, process_->sink().message_count()); |
936 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 938 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
937 | 939 |
938 // Wait long enough for the timeout and verify it fired. | 940 // Wait long enough for the timeout and verify it fired. |
939 base::MessageLoop::current()->PostDelayedTask( | 941 base::MessageLoop::current()->PostDelayedTask( |
940 FROM_HERE, | 942 FROM_HERE, |
941 base::MessageLoop::QuitClosure(), | 943 base::MessageLoop::QuitClosure(), |
942 TimeDelta::FromMilliseconds(10)); | 944 TimeDelta::FromMilliseconds(10)); |
943 base::MessageLoop::current()->Run(); | 945 base::MessageLoop::current()->Run(); |
944 | 946 |
945 EXPECT_EQ(1U, process_->sink().message_count()); | 947 EXPECT_EQ(1U, process_->sink().message_count()); |
946 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); | 948 // The tap down events will have escaped the queue, since they're async. |
947 EXPECT_EQ(WebInputEvent::GestureTapDown, | 949 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
948 GestureEventLastQueueEvent().type); | |
949 | 950 |
950 // Now send the tap gesture and verify we didn't get an extra TapDown. | 951 // Now send the tap gesture and verify we didn't get an extra TapDown. |
951 SimulateGestureEvent(WebInputEvent::GestureTap, | 952 SimulateGestureEvent(WebInputEvent::GestureTap, |
952 WebGestureEvent::Touchscreen); | 953 WebGestureEvent::Touchscreen); |
953 EXPECT_EQ(1U, process_->sink().message_count()); | 954 EXPECT_EQ(2U, process_->sink().message_count()); |
954 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); | 955 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); |
955 EXPECT_EQ(WebInputEvent::GestureTap, | 956 EXPECT_EQ(WebInputEvent::GestureTap, |
956 GestureEventLastQueueEvent().type); | 957 GestureEventLastQueueEvent().type); |
957 } | 958 } |
958 | 959 |
| 960 // Test that GestureTapDown events don't wait for ACKs. |
| 961 TEST_F(ImmediateInputRouterTest, GestureTapDownIsAsync) { |
| 962 // Set some sort of short deferral timeout |
| 963 set_maximum_tap_gap_time_ms(5); |
| 964 |
| 965 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 966 WebGestureEvent::Touchscreen); |
| 967 EXPECT_EQ(0U, process_->sink().message_count()); |
| 968 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 969 |
| 970 // Wait for tap deferral to end. |
| 971 base::MessageLoop::current()->PostDelayedTask( |
| 972 FROM_HERE, |
| 973 base::MessageLoop::QuitClosure(), |
| 974 TimeDelta::FromMilliseconds(10)); |
| 975 base::MessageLoop::current()->Run(); |
| 976 |
| 977 EXPECT_EQ(1U, process_->sink().message_count()); |
| 978 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 979 |
| 980 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 981 WebGestureEvent::Touchscreen); |
| 982 |
| 983 EXPECT_EQ(1U, process_->sink().message_count()); |
| 984 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 985 |
| 986 // Wait for tap deferral to end. |
| 987 base::MessageLoop::current()->PostDelayedTask( |
| 988 FROM_HERE, |
| 989 base::MessageLoop::QuitClosure(), |
| 990 TimeDelta::FromMilliseconds(10)); |
| 991 base::MessageLoop::current()->Run(); |
| 992 |
| 993 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 994 WebGestureEvent::Touchscreen); |
| 995 |
| 996 EXPECT_EQ(2U, process_->sink().message_count()); |
| 997 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 998 |
| 999 // Wait for tap deferral to end. |
| 1000 base::MessageLoop::current()->PostDelayedTask( |
| 1001 FROM_HERE, |
| 1002 base::MessageLoop::QuitClosure(), |
| 1003 TimeDelta::FromMilliseconds(10)); |
| 1004 base::MessageLoop::current()->Run(); |
| 1005 |
| 1006 EXPECT_EQ(3U, process_->sink().message_count()); |
| 1007 // The tap down events will have escaped the queue, since they're async. |
| 1008 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 1009 } |
| 1010 |
| 1011 // Test that GestureTapDown events don't get out of order due to asynchronicity. |
| 1012 TEST_F(ImmediateInputRouterTest, GestureTapDownIsInOrder) { |
| 1013 // Set some sort of short deferral timeout |
| 1014 set_maximum_tap_gap_time_ms(5); |
| 1015 |
| 1016 SimulateGestureEvent(WebInputEvent::GestureTap, |
| 1017 WebGestureEvent::Touchscreen); |
| 1018 |
| 1019 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 1020 WebGestureEvent::Touchscreen); |
| 1021 EXPECT_EQ(1U, process_->sink().message_count()); |
| 1022 // TapDown is deferred, hasn't entered the queue yet. |
| 1023 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); |
| 1024 |
| 1025 // Wait long enough for the first timeout and verify it fired. |
| 1026 base::MessageLoop::current()->PostDelayedTask( |
| 1027 FROM_HERE, |
| 1028 base::MessageLoop::QuitClosure(), |
| 1029 TimeDelta::FromMilliseconds(10)); |
| 1030 base::MessageLoop::current()->Run(); |
| 1031 |
| 1032 EXPECT_EQ(1U, process_->sink().message_count()); |
| 1033 // The TapDown, though asynchronous, is still stuck in the queue |
| 1034 // behind the synchronous Tap. |
| 1035 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); |
| 1036 |
| 1037 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 1038 WebGestureEvent::Touchscreen); |
| 1039 EXPECT_EQ(1U, process_->sink().message_count()); |
| 1040 // TapDown is deferred, hasn't entered the queue yet. |
| 1041 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); |
| 1042 |
| 1043 // Wait long enough for the second timeout and verify it fired. |
| 1044 base::MessageLoop::current()->PostDelayedTask( |
| 1045 FROM_HERE, |
| 1046 base::MessageLoop::QuitClosure(), |
| 1047 TimeDelta::FromMilliseconds(10)); |
| 1048 base::MessageLoop::current()->Run(); |
| 1049 |
| 1050 EXPECT_EQ(1U, process_->sink().message_count()); |
| 1051 // TapDown has entered the queue. |
| 1052 EXPECT_EQ(3U, GestureEventLastQueueEventSize()); |
| 1053 |
| 1054 SendInputEventACK(WebInputEvent::GestureTap, |
| 1055 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1056 |
| 1057 // Now that the Tap has been ACKed, the TapDowns should fire immediately. |
| 1058 EXPECT_EQ(3U, process_->sink().message_count()); |
| 1059 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 1060 } |
| 1061 |
959 // Test that scroll events during the deferral interval drop the GestureTapDown. | 1062 // Test that scroll events during the deferral interval drop the GestureTapDown. |
960 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownAnulledOnScroll) { | 1063 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownAnulledOnScroll) { |
961 // Set some sort of short deferral timeout | 1064 // Set some sort of short deferral timeout |
962 set_maximum_tap_gap_time_ms(5); | 1065 set_maximum_tap_gap_time_ms(5); |
963 | 1066 |
964 SimulateGestureEvent(WebInputEvent::GestureTapDown, | 1067 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
965 WebGestureEvent::Touchscreen); | 1068 WebGestureEvent::Touchscreen); |
966 EXPECT_EQ(0U, process_->sink().message_count()); | 1069 EXPECT_EQ(0U, process_->sink().message_count()); |
967 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 1070 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
968 | 1071 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1020 EXPECT_EQ(0U, process_->sink().message_count()); | 1123 EXPECT_EQ(0U, process_->sink().message_count()); |
1021 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 1124 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
1022 | 1125 |
1023 base::MessageLoop::current()->PostDelayedTask( | 1126 base::MessageLoop::current()->PostDelayedTask( |
1024 FROM_HERE, | 1127 FROM_HERE, |
1025 base::MessageLoop::QuitClosure(), | 1128 base::MessageLoop::QuitClosure(), |
1026 TimeDelta::FromMilliseconds(10)); | 1129 TimeDelta::FromMilliseconds(10)); |
1027 base::MessageLoop::current()->Run(); | 1130 base::MessageLoop::current()->Run(); |
1028 | 1131 |
1029 EXPECT_EQ(1U, process_->sink().message_count()); | 1132 EXPECT_EQ(1U, process_->sink().message_count()); |
1030 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); | 1133 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
1031 | 1134 |
1032 SimulateGestureEvent(WebInputEvent::GestureTapCancel, | 1135 SimulateGestureEvent(WebInputEvent::GestureTapCancel, |
1033 WebGestureEvent::Touchscreen); | 1136 WebGestureEvent::Touchscreen); |
1034 EXPECT_EQ(1U, process_->sink().message_count()); | 1137 EXPECT_EQ(2U, process_->sink().message_count()); |
1035 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); | 1138 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); |
1036 } | 1139 } |
1037 | 1140 |
1038 // Test that a GestureScrollEnd | GestureFlingStart are deferred during the | 1141 // Test that a GestureScrollEnd | GestureFlingStart are deferred during the |
1039 // debounce interval, that Scrolls are not and that the deferred events are | 1142 // debounce interval, that Scrolls are not and that the deferred events are |
1040 // sent after that timer fires. | 1143 // sent after that timer fires. |
1041 TEST_F(ImmediateInputRouterTest, DebounceDefersFollowingGestureEvents) { | 1144 TEST_F(ImmediateInputRouterTest, DebounceDefersFollowingGestureEvents) { |
1042 set_debounce_interval_time_ms(3); | 1145 set_debounce_interval_time_ms(3); |
1043 | 1146 |
1044 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, | 1147 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, |
1045 WebGestureEvent::Touchscreen); | 1148 WebGestureEvent::Touchscreen); |
(...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1934 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2037 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1935 | 2038 |
1936 ReleaseTouchPoint(0); | 2039 ReleaseTouchPoint(0); |
1937 SendTouchEvent(); | 2040 SendTouchEvent(); |
1938 EXPECT_EQ(1U, process_->sink().message_count()); | 2041 EXPECT_EQ(1U, process_->sink().message_count()); |
1939 process_->sink().ClearMessages(); | 2042 process_->sink().ClearMessages(); |
1940 SendInputEventACK(WebInputEvent::TouchEnd, | 2043 SendInputEventACK(WebInputEvent::TouchEnd, |
1941 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2044 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1942 } | 2045 } |
1943 } // namespace content | 2046 } // namespace content |
OLD | NEW |