Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(287)

Side by Side Diff: content/browser/renderer_host/input/immediate_input_router_unittest.cc

Issue 25268002: Make tapDown async. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698