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 |