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

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: Address jdduke's comments. 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 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/immediate_input_router.cc ('k') | content/browser/renderer_host/overscroll_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698