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/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 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 882 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 882 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 883 | 883 |
| 884 // Wait long enough for first timeout and see if it fired. | 884 // Wait long enough for first timeout and see if it fired. |
| 885 base::MessageLoop::current()->PostDelayedTask( | 885 base::MessageLoop::current()->PostDelayedTask( |
| 886 FROM_HERE, | 886 FROM_HERE, |
| 887 base::MessageLoop::QuitClosure(), | 887 base::MessageLoop::QuitClosure(), |
| 888 TimeDelta::FromMilliseconds(10)); | 888 TimeDelta::FromMilliseconds(10)); |
| 889 base::MessageLoop::current()->Run(); | 889 base::MessageLoop::current()->Run(); |
| 890 | 890 |
| 891 EXPECT_EQ(1U, process_->sink().message_count()); | 891 EXPECT_EQ(1U, process_->sink().message_count()); |
| 892 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); | 892 // The tap down event will have escaped the queue, since they're asynch. |
| 893 EXPECT_EQ(WebInputEvent::GestureTapDown, | 893 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 894 GestureEventLastQueueEvent().type); | |
| 895 } | 894 } |
| 896 | 895 |
| 897 // Test that GestureTapDown events are sent immediately on GestureTap. | 896 // Test that GestureTapDown events are sent immediately on GestureTap. |
| 898 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownSentOnTap) { | 897 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownSentOnTap) { |
| 899 // Set some sort of short deferral timeout | 898 // Set some sort of short deferral timeout |
| 900 set_maximum_tap_gap_time_ms(5); | 899 set_maximum_tap_gap_time_ms(5); |
| 901 | 900 |
| 902 SimulateGestureEvent(WebInputEvent::GestureTapDown, | 901 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 903 WebGestureEvent::Touchscreen); | 902 WebGestureEvent::Touchscreen); |
| 904 EXPECT_EQ(0U, process_->sink().message_count()); | 903 EXPECT_EQ(0U, process_->sink().message_count()); |
| 905 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 904 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 906 | 905 |
| 907 SimulateGestureEvent(WebInputEvent::GestureTap, | 906 SimulateGestureEvent(WebInputEvent::GestureTap, |
| 908 WebGestureEvent::Touchscreen); | 907 WebGestureEvent::Touchscreen); |
| 909 EXPECT_EQ(1U, process_->sink().message_count()); | 908 |
| 910 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); | 909 EXPECT_EQ(2U, process_->sink().message_count()); |
| 910 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); | |
| 911 EXPECT_EQ(WebInputEvent::GestureTap, | 911 EXPECT_EQ(WebInputEvent::GestureTap, |
| 912 GestureEventLastQueueEvent().type); | 912 GestureEventLastQueueEvent().type); |
| 913 | 913 |
| 914 base::MessageLoop::current()->PostDelayedTask( | 914 base::MessageLoop::current()->PostDelayedTask( |
| 915 FROM_HERE, | 915 FROM_HERE, |
| 916 base::MessageLoop::QuitClosure(), | 916 base::MessageLoop::QuitClosure(), |
| 917 TimeDelta::FromMilliseconds(10)); | 917 TimeDelta::FromMilliseconds(10)); |
| 918 base::MessageLoop::current()->Run(); | 918 base::MessageLoop::current()->Run(); |
| 919 | 919 |
| 920 EXPECT_EQ(WebInputEvent::GestureTapDown, | 920 EXPECT_EQ(WebInputEvent::GestureTapDown, |
| 921 client_->immediately_sent_gesture_event().event.type); | 921 client_->immediately_sent_gesture_event().event.type); |
| 922 | 922 |
| 923 // If the deferral timer incorrectly fired, it sent an extra message. | 923 // If the deferral timer incorrectly fired, it sent an extra message. |
| 924 EXPECT_EQ(1U, process_->sink().message_count()); | 924 EXPECT_EQ(2U, process_->sink().message_count()); |
| 925 } | 925 } |
| 926 | 926 |
| 927 // Test that only a single GestureTapDown event is sent when tap occurs after | 927 // Test that only a single GestureTapDown event is sent when tap occurs after |
| 928 // the timeout. | 928 // the timeout. |
| 929 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownOnlyOnce) { | 929 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownOnlyOnce) { |
| 930 // Set some sort of short deferral timeout | 930 // Set some sort of short deferral timeout |
| 931 set_maximum_tap_gap_time_ms(5); | 931 set_maximum_tap_gap_time_ms(5); |
| 932 | 932 |
| 933 SimulateGestureEvent(WebInputEvent::GestureTapDown, | 933 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 934 WebGestureEvent::Touchscreen); | 934 WebGestureEvent::Touchscreen); |
| 935 EXPECT_EQ(0U, process_->sink().message_count()); | 935 EXPECT_EQ(0U, process_->sink().message_count()); |
| 936 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 936 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 937 | 937 |
| 938 // Wait long enough for the timeout and verify it fired. | 938 // Wait long enough for the timeout and verify it fired. |
| 939 base::MessageLoop::current()->PostDelayedTask( | 939 base::MessageLoop::current()->PostDelayedTask( |
| 940 FROM_HERE, | 940 FROM_HERE, |
| 941 base::MessageLoop::QuitClosure(), | 941 base::MessageLoop::QuitClosure(), |
| 942 TimeDelta::FromMilliseconds(10)); | 942 TimeDelta::FromMilliseconds(10)); |
| 943 base::MessageLoop::current()->Run(); | 943 base::MessageLoop::current()->Run(); |
| 944 | 944 |
| 945 EXPECT_EQ(1U, process_->sink().message_count()); | 945 EXPECT_EQ(1U, process_->sink().message_count()); |
| 946 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); | 946 // The tap down events will have escaped the queue, since they're asynch. |
| 947 EXPECT_EQ(WebInputEvent::GestureTapDown, | 947 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 948 GestureEventLastQueueEvent().type); | |
| 949 | 948 |
| 950 // Now send the tap gesture and verify we didn't get an extra TapDown. | 949 // Now send the tap gesture and verify we didn't get an extra TapDown. |
| 951 SimulateGestureEvent(WebInputEvent::GestureTap, | 950 SimulateGestureEvent(WebInputEvent::GestureTap, |
| 952 WebGestureEvent::Touchscreen); | 951 WebGestureEvent::Touchscreen); |
| 953 EXPECT_EQ(1U, process_->sink().message_count()); | 952 EXPECT_EQ(2U, process_->sink().message_count()); |
| 954 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); | 953 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); |
| 955 EXPECT_EQ(WebInputEvent::GestureTap, | 954 EXPECT_EQ(WebInputEvent::GestureTap, |
| 956 GestureEventLastQueueEvent().type); | 955 GestureEventLastQueueEvent().type); |
| 957 } | 956 } |
| 958 | 957 |
| 958 // Test that GestureTapDown events don't wait for ACKs. | |
|
jdduke (slow)
2013/09/30 15:42:56
Could you file a bug that GestureEventFilter tests
tdresser
2013/09/30 18:05:03
Done.
| |
| 959 TEST_F(ImmediateInputRouterTest, GestureTapDownIsAsynch) { | |
| 960 // Set some sort of short deferral timeout | |
| 961 set_maximum_tap_gap_time_ms(5); | |
| 962 | |
| 963 SimulateGestureEvent(WebInputEvent::GestureTapDown, | |
| 964 WebGestureEvent::Touchscreen); | |
| 965 EXPECT_EQ(0U, process_->sink().message_count()); | |
| 966 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | |
| 967 | |
| 968 // Wait for tap deferral to end. | |
| 969 base::MessageLoop::current()->PostDelayedTask( | |
| 970 FROM_HERE, | |
| 971 base::MessageLoop::QuitClosure(), | |
| 972 TimeDelta::FromMilliseconds(10)); | |
| 973 base::MessageLoop::current()->Run(); | |
| 974 | |
| 975 EXPECT_EQ(1U, process_->sink().message_count()); | |
| 976 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | |
| 977 | |
| 978 SimulateGestureEvent(WebInputEvent::GestureTapDown, | |
| 979 WebGestureEvent::Touchscreen); | |
| 980 | |
| 981 EXPECT_EQ(1U, process_->sink().message_count()); | |
| 982 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | |
| 983 | |
| 984 // Wait for tap deferral to end. | |
| 985 base::MessageLoop::current()->PostDelayedTask( | |
| 986 FROM_HERE, | |
| 987 base::MessageLoop::QuitClosure(), | |
| 988 TimeDelta::FromMilliseconds(10)); | |
| 989 base::MessageLoop::current()->Run(); | |
| 990 | |
| 991 SimulateGestureEvent(WebInputEvent::GestureTapDown, | |
| 992 WebGestureEvent::Touchscreen); | |
| 993 | |
| 994 EXPECT_EQ(2U, process_->sink().message_count()); | |
| 995 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | |
| 996 | |
| 997 // Wait for tap deferral to end. | |
| 998 base::MessageLoop::current()->PostDelayedTask( | |
| 999 FROM_HERE, | |
| 1000 base::MessageLoop::QuitClosure(), | |
| 1001 TimeDelta::FromMilliseconds(10)); | |
| 1002 base::MessageLoop::current()->Run(); | |
| 1003 | |
| 1004 EXPECT_EQ(3U, process_->sink().message_count()); | |
| 1005 // The tap down events will have escaped the queue, since they're asynch. | |
| 1006 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | |
| 1007 } | |
| 1008 | |
| 1009 // Test that GestureTapDown events don't get out of order due to asynchronicity. | |
| 1010 TEST_F(ImmediateInputRouterTest, GestureTapDownIsInOrder) { | |
| 1011 // Set some sort of short deferral timeout | |
| 1012 set_maximum_tap_gap_time_ms(5); | |
| 1013 | |
| 1014 SimulateGestureEvent(WebInputEvent::GestureTap, | |
| 1015 WebGestureEvent::Touchscreen); | |
| 1016 | |
| 1017 SimulateGestureEvent(WebInputEvent::GestureTapDown, | |
| 1018 WebGestureEvent::Touchscreen); | |
| 1019 EXPECT_EQ(1U, process_->sink().message_count()); | |
| 1020 // TapDown is deferred, hasn't entered the queue yet. | |
| 1021 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); | |
| 1022 | |
| 1023 // Wait long enough for the first timeout and verify it fired. | |
| 1024 base::MessageLoop::current()->PostDelayedTask( | |
| 1025 FROM_HERE, | |
| 1026 base::MessageLoop::QuitClosure(), | |
| 1027 TimeDelta::FromMilliseconds(10)); | |
| 1028 base::MessageLoop::current()->Run(); | |
| 1029 | |
| 1030 EXPECT_EQ(1U, process_->sink().message_count()); | |
| 1031 // The TapDown, though asynchronous, is still stuck in the queue | |
| 1032 // behind the synchronous Tap. | |
| 1033 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); | |
| 1034 | |
| 1035 SimulateGestureEvent(WebInputEvent::GestureTapDown, | |
| 1036 WebGestureEvent::Touchscreen); | |
| 1037 EXPECT_EQ(1U, process_->sink().message_count()); | |
| 1038 // TapDown is deferred, hasn't entered the queue yet. | |
| 1039 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); | |
| 1040 | |
| 1041 // Wait long enough for the second timeout and verify it fired. | |
| 1042 base::MessageLoop::current()->PostDelayedTask( | |
| 1043 FROM_HERE, | |
| 1044 base::MessageLoop::QuitClosure(), | |
| 1045 TimeDelta::FromMilliseconds(10)); | |
| 1046 base::MessageLoop::current()->Run(); | |
| 1047 | |
| 1048 EXPECT_EQ(1U, process_->sink().message_count()); | |
| 1049 // TapDown has entered the queue. | |
| 1050 EXPECT_EQ(3U, GestureEventLastQueueEventSize()); | |
| 1051 | |
| 1052 SendInputEventACK(WebInputEvent::GestureTap, | |
| 1053 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 1054 | |
| 1055 // Now that the Tap has been ACKed, the TapDowns should fire immediately. | |
| 1056 EXPECT_EQ(3U, process_->sink().message_count()); | |
| 1057 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | |
| 1058 } | |
| 1059 | |
| 959 // Test that scroll events during the deferral interval drop the GestureTapDown. | 1060 // Test that scroll events during the deferral interval drop the GestureTapDown. |
| 960 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownAnulledOnScroll) { | 1061 TEST_F(ImmediateInputRouterTest, DeferredGestureTapDownAnulledOnScroll) { |
| 961 // Set some sort of short deferral timeout | 1062 // Set some sort of short deferral timeout |
| 962 set_maximum_tap_gap_time_ms(5); | 1063 set_maximum_tap_gap_time_ms(5); |
| 963 | 1064 |
| 964 SimulateGestureEvent(WebInputEvent::GestureTapDown, | 1065 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 965 WebGestureEvent::Touchscreen); | 1066 WebGestureEvent::Touchscreen); |
| 966 EXPECT_EQ(0U, process_->sink().message_count()); | 1067 EXPECT_EQ(0U, process_->sink().message_count()); |
| 967 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 1068 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 968 | 1069 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1020 EXPECT_EQ(0U, process_->sink().message_count()); | 1121 EXPECT_EQ(0U, process_->sink().message_count()); |
| 1021 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 1122 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 1022 | 1123 |
| 1023 base::MessageLoop::current()->PostDelayedTask( | 1124 base::MessageLoop::current()->PostDelayedTask( |
| 1024 FROM_HERE, | 1125 FROM_HERE, |
| 1025 base::MessageLoop::QuitClosure(), | 1126 base::MessageLoop::QuitClosure(), |
| 1026 TimeDelta::FromMilliseconds(10)); | 1127 TimeDelta::FromMilliseconds(10)); |
| 1027 base::MessageLoop::current()->Run(); | 1128 base::MessageLoop::current()->Run(); |
| 1028 | 1129 |
| 1029 EXPECT_EQ(1U, process_->sink().message_count()); | 1130 EXPECT_EQ(1U, process_->sink().message_count()); |
| 1030 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); | 1131 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
| 1031 | 1132 |
| 1032 SimulateGestureEvent(WebInputEvent::GestureTapCancel, | 1133 SimulateGestureEvent(WebInputEvent::GestureTapCancel, |
| 1033 WebGestureEvent::Touchscreen); | 1134 WebGestureEvent::Touchscreen); |
| 1034 EXPECT_EQ(1U, process_->sink().message_count()); | 1135 EXPECT_EQ(2U, process_->sink().message_count()); |
| 1035 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); | 1136 EXPECT_EQ(1U, GestureEventLastQueueEventSize()); |
| 1036 } | 1137 } |
| 1037 | 1138 |
| 1038 // Test that a GestureScrollEnd | GestureFlingStart are deferred during the | 1139 // Test that a GestureScrollEnd | GestureFlingStart are deferred during the |
| 1039 // debounce interval, that Scrolls are not and that the deferred events are | 1140 // debounce interval, that Scrolls are not and that the deferred events are |
| 1040 // sent after that timer fires. | 1141 // sent after that timer fires. |
| 1041 TEST_F(ImmediateInputRouterTest, DebounceDefersFollowingGestureEvents) { | 1142 TEST_F(ImmediateInputRouterTest, DebounceDefersFollowingGestureEvents) { |
| 1042 set_debounce_interval_time_ms(3); | 1143 set_debounce_interval_time_ms(3); |
| 1043 | 1144 |
| 1044 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, | 1145 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, |
| 1045 WebGestureEvent::Touchscreen); | 1146 WebGestureEvent::Touchscreen); |
| (...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1934 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2035 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1935 | 2036 |
| 1936 ReleaseTouchPoint(0); | 2037 ReleaseTouchPoint(0); |
| 1937 SendTouchEvent(); | 2038 SendTouchEvent(); |
| 1938 EXPECT_EQ(1U, process_->sink().message_count()); | 2039 EXPECT_EQ(1U, process_->sink().message_count()); |
| 1939 process_->sink().ClearMessages(); | 2040 process_->sink().ClearMessages(); |
| 1940 SendInputEventACK(WebInputEvent::TouchEnd, | 2041 SendInputEventACK(WebInputEvent::TouchEnd, |
| 1941 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2042 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1942 } | 2043 } |
| 1943 } // namespace content | 2044 } // namespace content |
| OLD | NEW |