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

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

Issue 997283002: Coalesce async touch move events until the ack back from render (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change the unittests Created 5 years, 7 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
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 <math.h> 5 #include <math.h>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 float velocity_y, 240 float velocity_y,
241 WebGestureDevice source_device) { 241 WebGestureDevice source_device) {
242 SimulateGestureEvent(SyntheticWebGestureEventBuilder::BuildFling( 242 SimulateGestureEvent(SyntheticWebGestureEventBuilder::BuildFling(
243 velocity_x, velocity_y, source_device)); 243 velocity_x, velocity_y, source_device));
244 } 244 }
245 245
246 void SetTouchTimestamp(base::TimeDelta timestamp) { 246 void SetTouchTimestamp(base::TimeDelta timestamp) {
247 touch_event_.SetTimestamp(timestamp); 247 touch_event_.SetTimestamp(timestamp);
248 } 248 }
249 249
250 void SendTouchEvent() { 250 uint32 SendTouchEvent() {
251 uint32 touch_event_id = touch_event_.uniqueTouchEventId;
251 input_router_->SendTouchEvent(TouchEventWithLatencyInfo(touch_event_)); 252 input_router_->SendTouchEvent(TouchEventWithLatencyInfo(touch_event_));
252 touch_event_.ResetPoints(); 253 touch_event_.ResetPoints();
254 return touch_event_id;
253 } 255 }
254 256
255 int PressTouchPoint(int x, int y) { 257 int PressTouchPoint(int x, int y) {
256 return touch_event_.PressPoint(x, y); 258 return touch_event_.PressPoint(x, y);
257 } 259 }
258 260
259 void MoveTouchPoint(int index, int x, int y) { 261 void MoveTouchPoint(int index, int x, int y) {
260 touch_event_.MovePoint(index, x, y); 262 touch_event_.MovePoint(index, x, y);
261 } 263 }
262 264
263 void ReleaseTouchPoint(int index) { 265 void ReleaseTouchPoint(int index) {
264 touch_event_.ReleasePoint(index); 266 touch_event_.ReleasePoint(index);
265 } 267 }
266 268
267 void CancelTouchPoint(int index) { 269 void CancelTouchPoint(int index) {
268 touch_event_.CancelPoint(index); 270 touch_event_.CancelPoint(index);
269 } 271 }
270 272
271 void SendInputEventACK(blink::WebInputEvent::Type type, 273 void SendInputEventACK(blink::WebInputEvent::Type type,
272 InputEventAckState ack_result) { 274 InputEventAckState ack_result) {
273 InputHostMsg_HandleInputEvent_ACK_Params ack; 275 DCHECK(!WebInputEvent::isTouchEventType(type));
274 ack.type = type; 276 InputEventAck ack(type, ack_result);
275 ack.state = ack_result;
276 input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack)); 277 input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
277 } 278 }
278 279
280 void SendTouchEventACK(blink::WebInputEvent::Type type,
281 InputEventAckState ack_result,
282 uint32 touch_event_id) {
283 DCHECK(WebInputEvent::isTouchEventType(type));
284 InputEventAck ack(type, ack_result, touch_event_id);
285 input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
286 }
287
279 InputRouterImpl* input_router() const { 288 InputRouterImpl* input_router() const {
280 return input_router_.get(); 289 return input_router_.get();
281 } 290 }
282 291
283 bool TouchEventQueueEmpty() const { 292 bool TouchEventQueueEmpty() const {
284 return input_router()->touch_event_queue_.empty(); 293 return input_router()->touch_event_queue_.empty();
285 } 294 }
286 295
287 bool TouchEventTimeoutEnabled() const { 296 bool TouchEventTimeoutEnabled() const {
288 return input_router()->touch_event_queue_.IsAckTimeoutEnabled(); 297 return input_router()->touch_event_queue_.IsAckTimeoutEnabled();
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 base::MessageLoop::current()->RunUntilIdle(); 782 base::MessageLoop::current()->RunUntilIdle();
774 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 783 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
775 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 784 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
776 } 785 }
777 786
778 // Tests that touch-events are queued properly. 787 // Tests that touch-events are queued properly.
779 TEST_F(InputRouterImplTest, TouchEventQueue) { 788 TEST_F(InputRouterImplTest, TouchEventQueue) {
780 OnHasTouchEventHandlers(true); 789 OnHasTouchEventHandlers(true);
781 790
782 PressTouchPoint(1, 1); 791 PressTouchPoint(1, 1);
783 SendTouchEvent(); 792 uint32 touch_press_event_id = SendTouchEvent();
784 EXPECT_TRUE(client_->GetAndResetFilterEventCalled()); 793 EXPECT_TRUE(client_->GetAndResetFilterEventCalled());
785 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 794 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
786 EXPECT_FALSE(TouchEventQueueEmpty()); 795 EXPECT_FALSE(TouchEventQueueEmpty());
787 796
788 // The second touch should not be sent since one is already in queue. 797 // The second touch should not be sent since one is already in queue.
789 MoveTouchPoint(0, 5, 5); 798 MoveTouchPoint(0, 5, 5);
790 SendTouchEvent(); 799 uint32 touch_move_event_id = SendTouchEvent();
791 EXPECT_FALSE(client_->GetAndResetFilterEventCalled()); 800 EXPECT_FALSE(client_->GetAndResetFilterEventCalled());
792 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 801 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
793 EXPECT_FALSE(TouchEventQueueEmpty()); 802 EXPECT_FALSE(TouchEventQueueEmpty());
794 803
795 // Receive an ACK for the first touch-event. 804 // Receive an ACK for the first touch-event.
796 SendInputEventACK(WebInputEvent::TouchStart, 805 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
797 INPUT_EVENT_ACK_STATE_CONSUMED); 806 touch_press_event_id);
798 EXPECT_FALSE(TouchEventQueueEmpty()); 807 EXPECT_FALSE(TouchEventQueueEmpty());
799 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 808 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
800 EXPECT_EQ(WebInputEvent::TouchStart, 809 EXPECT_EQ(WebInputEvent::TouchStart,
801 ack_handler_->acked_touch_event().event.type); 810 ack_handler_->acked_touch_event().event.type);
802 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 811 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
803 812
804 SendInputEventACK(WebInputEvent::TouchMove, 813 SendTouchEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED,
805 INPUT_EVENT_ACK_STATE_CONSUMED); 814 touch_move_event_id);
806 EXPECT_TRUE(TouchEventQueueEmpty()); 815 EXPECT_TRUE(TouchEventQueueEmpty());
807 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 816 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
808 EXPECT_EQ(WebInputEvent::TouchMove, 817 EXPECT_EQ(WebInputEvent::TouchMove,
809 ack_handler_->acked_touch_event().event.type); 818 ack_handler_->acked_touch_event().event.type);
810 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 819 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
811 } 820 }
812 821
813 // Tests that the touch-queue is emptied after a page stops listening for touch 822 // Tests that the touch-queue is emptied after a page stops listening for touch
814 // events and the outstanding ack is received. 823 // events and the outstanding ack is received.
815 TEST_F(InputRouterImplTest, TouchEventQueueFlush) { 824 TEST_F(InputRouterImplTest, TouchEventQueueFlush) {
816 OnHasTouchEventHandlers(true); 825 OnHasTouchEventHandlers(true);
817 EXPECT_TRUE(client_->has_touch_handler()); 826 EXPECT_TRUE(client_->has_touch_handler());
818 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 827 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
819 EXPECT_TRUE(TouchEventQueueEmpty()); 828 EXPECT_TRUE(TouchEventQueueEmpty());
820 829
821 // Send a touch-press event. 830 // Send a touch-press event.
822 PressTouchPoint(1, 1); 831 PressTouchPoint(1, 1);
823 SendTouchEvent(); 832 uint32 touch_press_event_id = SendTouchEvent();
824 MoveTouchPoint(0, 2, 2); 833 MoveTouchPoint(0, 2, 2);
825 MoveTouchPoint(0, 3, 3); 834 MoveTouchPoint(0, 3, 3);
826 EXPECT_FALSE(TouchEventQueueEmpty()); 835 EXPECT_FALSE(TouchEventQueueEmpty());
827 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 836 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
828 837
829 // The page stops listening for touch-events. Note that flushing is deferred 838 // The page stops listening for touch-events. Note that flushing is deferred
830 // until the outstanding ack is received. 839 // until the outstanding ack is received.
831 OnHasTouchEventHandlers(false); 840 OnHasTouchEventHandlers(false);
832 EXPECT_FALSE(client_->has_touch_handler()); 841 EXPECT_FALSE(client_->has_touch_handler());
833 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 842 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
834 EXPECT_FALSE(TouchEventQueueEmpty()); 843 EXPECT_FALSE(TouchEventQueueEmpty());
835 844
836 // After the ack, the touch-event queue should be empty, and none of the 845 // After the ack, the touch-event queue should be empty, and none of the
837 // flushed touch-events should have been sent to the renderer. 846 // flushed touch-events should have been sent to the renderer.
838 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 847 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
848 touch_press_event_id);
839 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 849 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
840 EXPECT_TRUE(TouchEventQueueEmpty()); 850 EXPECT_TRUE(TouchEventQueueEmpty());
841 } 851 }
842 852
843 #if defined(USE_AURA) 853 #if defined(USE_AURA)
844 // Tests that the acked events have correct state. (ui::Events are used only on 854 // Tests that the acked events have correct state. (ui::Events are used only on
845 // windows and aura) 855 // windows and aura)
846 TEST_F(InputRouterImplTest, AckedTouchEventState) { 856 TEST_F(InputRouterImplTest, AckedTouchEventState) {
847 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); 857 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true));
848 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 858 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
849 EXPECT_TRUE(TouchEventQueueEmpty()); 859 EXPECT_TRUE(TouchEventQueueEmpty());
850 860
851 // Send a bunch of events, and make sure the ACKed events are correct. 861 // Send a bunch of events, and make sure the ACKed events are correct.
852 ScopedVector<ui::TouchEvent> expected_events; 862 ScopedVector<ui::TouchEvent> expected_events;
853 863
854 // Use a custom timestamp for all the events to test that the acked events 864 // Use a custom timestamp for all the events to test that the acked events
855 // have the same timestamp; 865 // have the same timestamp;
856 base::TimeDelta timestamp = base::Time::NowFromSystemTime() - base::Time(); 866 base::TimeDelta timestamp = base::Time::NowFromSystemTime() - base::Time();
857 timestamp -= base::TimeDelta::FromSeconds(600); 867 timestamp -= base::TimeDelta::FromSeconds(600);
858 868
859 // Press the first finger. 869 // Press the first finger.
860 PressTouchPoint(1, 1); 870 PressTouchPoint(1, 1);
861 SetTouchTimestamp(timestamp); 871 SetTouchTimestamp(timestamp);
862 SendTouchEvent(); 872 uint32 touch_press_event_id1 = SendTouchEvent();
863 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 873 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
864 expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_PRESSED, 874 expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_PRESSED,
865 gfx::Point(1, 1), 0, timestamp)); 875 gfx::Point(1, 1), 0, timestamp));
866 876
867 // Move the finger. 877 // Move the finger.
868 timestamp += base::TimeDelta::FromSeconds(10); 878 timestamp += base::TimeDelta::FromSeconds(10);
869 MoveTouchPoint(0, 500, 500); 879 MoveTouchPoint(0, 500, 500);
870 SetTouchTimestamp(timestamp); 880 SetTouchTimestamp(timestamp);
871 SendTouchEvent(); 881 uint32 touch_move_event_id1 = SendTouchEvent();
872 EXPECT_FALSE(TouchEventQueueEmpty()); 882 EXPECT_FALSE(TouchEventQueueEmpty());
873 expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_MOVED, 883 expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_MOVED,
874 gfx::Point(500, 500), 0, timestamp)); 884 gfx::Point(500, 500), 0, timestamp));
875 885
876 // Now press a second finger. 886 // Now press a second finger.
877 timestamp += base::TimeDelta::FromSeconds(10); 887 timestamp += base::TimeDelta::FromSeconds(10);
878 PressTouchPoint(2, 2); 888 PressTouchPoint(2, 2);
879 SetTouchTimestamp(timestamp); 889 SetTouchTimestamp(timestamp);
880 SendTouchEvent(); 890 uint32 touch_press_event_id2 = SendTouchEvent();
881 EXPECT_FALSE(TouchEventQueueEmpty()); 891 EXPECT_FALSE(TouchEventQueueEmpty());
882 expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_PRESSED, 892 expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_PRESSED,
883 gfx::Point(2, 2), 1, timestamp)); 893 gfx::Point(2, 2), 1, timestamp));
884 894
885 // Move both fingers. 895 // Move both fingers.
886 timestamp += base::TimeDelta::FromSeconds(10); 896 timestamp += base::TimeDelta::FromSeconds(10);
887 MoveTouchPoint(0, 10, 10); 897 MoveTouchPoint(0, 10, 10);
888 MoveTouchPoint(1, 20, 20); 898 MoveTouchPoint(1, 20, 20);
889 SetTouchTimestamp(timestamp); 899 SetTouchTimestamp(timestamp);
890 SendTouchEvent(); 900 uint32 touch_move_event_id2 = SendTouchEvent();
891 EXPECT_FALSE(TouchEventQueueEmpty()); 901 EXPECT_FALSE(TouchEventQueueEmpty());
892 expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_MOVED, 902 expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_MOVED,
893 gfx::Point(10, 10), 0, timestamp)); 903 gfx::Point(10, 10), 0, timestamp));
894 expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_MOVED, 904 expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_MOVED,
895 gfx::Point(20, 20), 1, timestamp)); 905 gfx::Point(20, 20), 1, timestamp));
896 906
897 // Receive the ACKs and make sure the generated events from the acked events 907 // Receive the ACKs and make sure the generated events from the acked events
898 // are correct. 908 // are correct.
899 WebInputEvent::Type acks[] = { WebInputEvent::TouchStart, 909 WebInputEvent::Type acks[] = { WebInputEvent::TouchStart,
900 WebInputEvent::TouchMove, 910 WebInputEvent::TouchMove,
901 WebInputEvent::TouchStart, 911 WebInputEvent::TouchStart,
902 WebInputEvent::TouchMove }; 912 WebInputEvent::TouchMove };
903 913
914 uint32 touch_event_ids[] = {touch_press_event_id1,
915 touch_move_event_id1,
916 touch_press_event_id2,
917 touch_move_event_id2};
918
904 TouchEventCoordinateSystem coordinate_system = LOCAL_COORDINATES; 919 TouchEventCoordinateSystem coordinate_system = LOCAL_COORDINATES;
905 #if !defined(OS_WIN) 920 #if !defined(OS_WIN)
906 coordinate_system = SCREEN_COORDINATES; 921 coordinate_system = SCREEN_COORDINATES;
907 #endif 922 #endif
908 for (size_t i = 0; i < arraysize(acks); ++i) { 923 for (size_t i = 0; i < arraysize(acks); ++i) {
909 SendInputEventACK(acks[i], 924 SendTouchEventACK(acks[i], INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
910 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 925 touch_event_ids[i]);
911 EXPECT_EQ(acks[i], ack_handler_->acked_touch_event().event.type); 926 EXPECT_EQ(acks[i], ack_handler_->acked_touch_event().event.type);
912 ScopedVector<ui::TouchEvent> acked; 927 ScopedVector<ui::TouchEvent> acked;
913 928
914 MakeUITouchEventsFromWebTouchEvents( 929 MakeUITouchEventsFromWebTouchEvents(
915 ack_handler_->acked_touch_event(), &acked, coordinate_system); 930 ack_handler_->acked_touch_event(), &acked, coordinate_system);
916 bool success = EventListIsSubset(acked, expected_events); 931 bool success = EventListIsSubset(acked, expected_events);
917 EXPECT_TRUE(success) << "Failed on step: " << i; 932 EXPECT_TRUE(success) << "Failed on step: " << i;
918 if (!success) 933 if (!success)
919 break; 934 break;
920 expected_events.erase(expected_events.begin(), 935 expected_events.erase(expected_events.begin(),
(...skipping 29 matching lines...) Expand all
950 InputMsg_HandleInputEvent::ID)); 965 InputMsg_HandleInputEvent::ID));
951 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 966 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
952 967
953 // Check that the correct unhandled wheel event was received. 968 // Check that the correct unhandled wheel event was received.
954 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5); 969 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5);
955 } 970 }
956 971
957 TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) { 972 TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) {
958 OnHasTouchEventHandlers(true); 973 OnHasTouchEventHandlers(true);
959 // Only acks for TouchCancel should always be ignored. 974 // Only acks for TouchCancel should always be ignored.
960 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 975 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
961 GetEventWithType(WebInputEvent::TouchStart))); 976 GetEventWithType(WebInputEvent::TouchStart)));
962 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 977 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
963 GetEventWithType(WebInputEvent::TouchMove))); 978 GetEventWithType(WebInputEvent::TouchMove)));
964 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 979 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
965 GetEventWithType(WebInputEvent::TouchEnd))); 980 GetEventWithType(WebInputEvent::TouchEnd)));
966 981
967 // Precede the TouchCancel with an appropriate TouchStart; 982 // Precede the TouchCancel with an appropriate TouchStart;
968 PressTouchPoint(1, 1); 983 PressTouchPoint(1, 1);
969 SendTouchEvent(); 984 uint32 touch_press_event_id = SendTouchEvent();
970 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 985 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
986 touch_press_event_id);
971 ASSERT_EQ(1U, GetSentMessageCountAndResetSink()); 987 ASSERT_EQ(1U, GetSentMessageCountAndResetSink());
972 ASSERT_EQ(1U, ack_handler_->GetAndResetAckCount()); 988 ASSERT_EQ(1U, ack_handler_->GetAndResetAckCount());
973 ASSERT_EQ(0, client_->in_flight_event_count()); 989 ASSERT_EQ(0, client_->in_flight_event_count());
974 990
975 // The TouchCancel ack is always ignored. 991 // The TouchCancel ack is always ignored.
976 CancelTouchPoint(0); 992 CancelTouchPoint(0);
977 SendTouchEvent(); 993 uint32 touch_cancel_event_id = SendTouchEvent();
978 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 994 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
979 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 995 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
980 EXPECT_EQ(0, client_->in_flight_event_count()); 996 EXPECT_EQ(0, client_->in_flight_event_count());
981 EXPECT_FALSE(HasPendingEvents()); 997 EXPECT_FALSE(HasPendingEvents());
982 SendInputEventACK(WebInputEvent::TouchCancel, 998 SendTouchEventACK(WebInputEvent::TouchCancel,
983 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 999 INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_cancel_event_id);
984 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1000 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
985 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1001 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
986 EXPECT_FALSE(HasPendingEvents()); 1002 EXPECT_FALSE(HasPendingEvents());
987 } 1003 }
988 1004
989 TEST_F(InputRouterImplTest, GestureTypesIgnoringAck) { 1005 TEST_F(InputRouterImplTest, GestureTypesIgnoringAck) {
990 // We test every gesture type, ensuring that the stream of gestures is valid. 1006 // We test every gesture type, ensuring that the stream of gestures is valid.
991 const WebInputEvent::Type eventTypes[] = { 1007 const WebInputEvent::Type eventTypes[] = {
992 WebInputEvent::GestureTapDown, 1008 WebInputEvent::GestureTapDown,
993 WebInputEvent::GestureShowPress, 1009 WebInputEvent::GestureShowPress,
(...skipping 18 matching lines...) Expand all
1012 WebInputEvent::GestureTapDown, 1028 WebInputEvent::GestureTapDown,
1013 WebInputEvent::GestureTapCancel, 1029 WebInputEvent::GestureTapCancel,
1014 WebInputEvent::GestureScrollBegin, 1030 WebInputEvent::GestureScrollBegin,
1015 WebInputEvent::GestureScrollUpdate, 1031 WebInputEvent::GestureScrollUpdate,
1016 WebInputEvent::GesturePinchBegin, 1032 WebInputEvent::GesturePinchBegin,
1017 WebInputEvent::GesturePinchUpdate, 1033 WebInputEvent::GesturePinchUpdate,
1018 WebInputEvent::GesturePinchEnd, 1034 WebInputEvent::GesturePinchEnd,
1019 WebInputEvent::GestureScrollEnd}; 1035 WebInputEvent::GestureScrollEnd};
1020 for (size_t i = 0; i < arraysize(eventTypes); ++i) { 1036 for (size_t i = 0; i < arraysize(eventTypes); ++i) {
1021 WebInputEvent::Type type = eventTypes[i]; 1037 WebInputEvent::Type type = eventTypes[i];
1022 if (!WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type))) { 1038 if (WebInputEventTraits::WillReceiveAckFromRenderer(
1039 GetEventWithType(type))) {
1023 SimulateGestureEvent(type, blink::WebGestureDeviceTouchscreen); 1040 SimulateGestureEvent(type, blink::WebGestureDeviceTouchscreen);
1024 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1041 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1025 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1042 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
1026 EXPECT_EQ(1, client_->in_flight_event_count()); 1043 EXPECT_EQ(1, client_->in_flight_event_count());
1027 EXPECT_TRUE(HasPendingEvents()); 1044 EXPECT_TRUE(HasPendingEvents());
1028 1045
1029 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1046 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1030 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1047 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1031 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1048 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1032 EXPECT_EQ(0, client_->in_flight_event_count()); 1049 EXPECT_EQ(0, client_->in_flight_event_count());
1033 EXPECT_FALSE(HasPendingEvents()); 1050 EXPECT_FALSE(HasPendingEvents());
1034 continue; 1051 continue;
1035 } 1052 }
1036 1053
1037 SimulateGestureEvent(type, blink::WebGestureDeviceTouchscreen); 1054 SimulateGestureEvent(type, blink::WebGestureDeviceTouchscreen);
1038 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1055 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1039 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1056 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1040 EXPECT_EQ(0, client_->in_flight_event_count()); 1057 EXPECT_EQ(0, client_->in_flight_event_count());
1041 EXPECT_FALSE(HasPendingEvents()); 1058 EXPECT_FALSE(HasPendingEvents());
1042 } 1059 }
1043 } 1060 }
1044 1061
1045 TEST_F(InputRouterImplTest, MouseTypesIgnoringAck) { 1062 TEST_F(InputRouterImplTest, MouseTypesIgnoringAck) {
1046 int start_type = static_cast<int>(WebInputEvent::MouseDown); 1063 int start_type = static_cast<int>(WebInputEvent::MouseDown);
1047 int end_type = static_cast<int>(WebInputEvent::ContextMenu); 1064 int end_type = static_cast<int>(WebInputEvent::ContextMenu);
1048 ASSERT_LT(start_type, end_type); 1065 ASSERT_LT(start_type, end_type);
1049 for (int i = start_type; i <= end_type; ++i) { 1066 for (int i = start_type; i <= end_type; ++i) {
1050 WebInputEvent::Type type = static_cast<WebInputEvent::Type>(i); 1067 WebInputEvent::Type type = static_cast<WebInputEvent::Type>(i);
1051 int expected_in_flight_event_count = 1068 int expected_in_flight_event_count =
1052 WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type)) ? 0 1069 !WebInputEventTraits::WillReceiveAckFromRenderer(GetEventWithType(type))
1053 : 1; 1070 ? 0
1071 : 1;
1054 1072
1055 // Note: Mouse event acks are never forwarded to the ack handler, so the key 1073 // Note: Mouse event acks are never forwarded to the ack handler, so the key
1056 // result here is that ignored ack types don't affect the in-flight count. 1074 // result here is that ignored ack types don't affect the in-flight count.
1057 SimulateMouseEvent(type, 0, 0); 1075 SimulateMouseEvent(type, 0, 0);
1058 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1076 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1059 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1077 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
1060 EXPECT_EQ(expected_in_flight_event_count, client_->in_flight_event_count()); 1078 EXPECT_EQ(expected_in_flight_event_count, client_->in_flight_event_count());
1061 if (expected_in_flight_event_count) { 1079 if (expected_in_flight_event_count) {
1062 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1080 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1063 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1081 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1064 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1082 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
1065 EXPECT_EQ(0, client_->in_flight_event_count()); 1083 EXPECT_EQ(0, client_->in_flight_event_count());
1066 } 1084 }
1067 } 1085 }
1068 } 1086 }
1069 1087
1070 // Guard against breaking changes to the list of ignored event ack types in 1088 // Guard against breaking changes to the list of ignored event ack types in
1071 // |WebInputEventTraits::IgnoresAckDisposition|. 1089 // |WebInputEventTraits::WillReceiveAckFromRenderer|.
1072 TEST_F(InputRouterImplTest, RequiredEventAckTypes) { 1090 TEST_F(InputRouterImplTest, RequiredEventAckTypes) {
1073 const WebInputEvent::Type kRequiredEventAckTypes[] = { 1091 const WebInputEvent::Type kRequiredEventAckTypes[] = {
1074 WebInputEvent::MouseMove, 1092 WebInputEvent::MouseMove,
1075 WebInputEvent::MouseWheel, 1093 WebInputEvent::MouseWheel,
1076 WebInputEvent::RawKeyDown, 1094 WebInputEvent::RawKeyDown,
1077 WebInputEvent::KeyDown, 1095 WebInputEvent::KeyDown,
1078 WebInputEvent::KeyUp, 1096 WebInputEvent::KeyUp,
1079 WebInputEvent::Char, 1097 WebInputEvent::Char,
1080 WebInputEvent::GestureScrollUpdate, 1098 WebInputEvent::GestureScrollUpdate,
1081 WebInputEvent::GestureFlingStart, 1099 WebInputEvent::GestureFlingStart,
1082 WebInputEvent::GestureFlingCancel, 1100 WebInputEvent::GestureFlingCancel,
1083 WebInputEvent::GesturePinchUpdate, 1101 WebInputEvent::GesturePinchUpdate,
1084 WebInputEvent::TouchStart, 1102 WebInputEvent::TouchStart,
1085 WebInputEvent::TouchMove 1103 WebInputEvent::TouchMove
1086 }; 1104 };
1087 for (size_t i = 0; i < arraysize(kRequiredEventAckTypes); ++i) { 1105 for (size_t i = 0; i < arraysize(kRequiredEventAckTypes); ++i) {
1088 const WebInputEvent::Type required_ack_type = kRequiredEventAckTypes[i]; 1106 const WebInputEvent::Type required_ack_type = kRequiredEventAckTypes[i];
1089 EXPECT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 1107 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
1090 GetEventWithType(required_ack_type))); 1108 GetEventWithType(required_ack_type)));
1091 } 1109 }
1092 } 1110 }
1093 1111
1094 // Test that GestureShowPress, GestureTapDown and GestureTapCancel events don't 1112 // Test that GestureShowPress, GestureTapDown and GestureTapCancel events don't
1095 // wait for ACKs. 1113 // wait for ACKs.
1096 TEST_F(InputRouterImplTest, GestureTypesIgnoringAckInterleaved) { 1114 TEST_F(InputRouterImplTest, GestureTypesIgnoringAckInterleaved) {
1097 // Interleave a few events that do and do not ignore acks, ensuring that 1115 // Interleave a few events that do and do not ignore acks, ensuring that
1098 // ack-ignoring events aren't dispatched until all prior events which observe 1116 // ack-ignoring events aren't dispatched until all prior events which observe
1099 // their ack disposition have been dispatched. 1117 // their ack disposition have been dispatched.
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1205 1223
1206 // Test that touch ack timeout behavior is properly toggled by view update flags 1224 // Test that touch ack timeout behavior is properly toggled by view update flags
1207 // and allowed touch actions. 1225 // and allowed touch actions.
1208 TEST_F(InputRouterImplTest, TouchAckTimeoutConfigured) { 1226 TEST_F(InputRouterImplTest, TouchAckTimeoutConfigured) {
1209 const int timeout_ms = 1; 1227 const int timeout_ms = 1;
1210 SetUpForTouchAckTimeoutTest(timeout_ms); 1228 SetUpForTouchAckTimeoutTest(timeout_ms);
1211 ASSERT_TRUE(TouchEventTimeoutEnabled()); 1229 ASSERT_TRUE(TouchEventTimeoutEnabled());
1212 1230
1213 // Verify that the touch ack timeout fires upon the delayed ack. 1231 // Verify that the touch ack timeout fires upon the delayed ack.
1214 PressTouchPoint(1, 1); 1232 PressTouchPoint(1, 1);
1215 SendTouchEvent(); 1233 uint32 touch_press_event_id1 = SendTouchEvent();
1216 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1234 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
1217 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1235 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1218 RunTasksAndWait(base::TimeDelta::FromMilliseconds(timeout_ms + 1)); 1236 RunTasksAndWait(base::TimeDelta::FromMilliseconds(timeout_ms + 1));
1219 1237
1220 // The timed-out event should have been ack'ed. 1238 // The timed-out event should have been ack'ed.
1221 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1239 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1222 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1240 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1223 1241
1224 // Ack'ing the timed-out event should fire a TouchCancel. 1242 // Ack'ing the timed-out event should fire a TouchCancel.
1225 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 1243 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
1244 touch_press_event_id1);
1226 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1245 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
1227 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1246 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1228 1247
1229 // The remainder of the touch sequence should be dropped. 1248 // The remainder of the touch sequence should be dropped.
1230 ReleaseTouchPoint(0); 1249 ReleaseTouchPoint(0);
1231 SendTouchEvent(); 1250 SendTouchEvent();
1232 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1251 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1233 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1252 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1234 ASSERT_TRUE(TouchEventTimeoutEnabled()); 1253 ASSERT_TRUE(TouchEventTimeoutEnabled());
1235 1254
(...skipping 10 matching lines...) Expand all
1246 input_router()->OnViewUpdated(InputRouter::MOBILE_VIEWPORT | 1265 input_router()->OnViewUpdated(InputRouter::MOBILE_VIEWPORT |
1247 InputRouter::FIXED_PAGE_SCALE); 1266 InputRouter::FIXED_PAGE_SCALE);
1248 EXPECT_FALSE(TouchEventTimeoutEnabled()); 1267 EXPECT_FALSE(TouchEventTimeoutEnabled());
1249 1268
1250 input_router()->OnViewUpdated(InputRouter::VIEW_FLAGS_NONE); 1269 input_router()->OnViewUpdated(InputRouter::VIEW_FLAGS_NONE);
1251 EXPECT_TRUE(TouchEventTimeoutEnabled()); 1270 EXPECT_TRUE(TouchEventTimeoutEnabled());
1252 1271
1253 // TOUCH_ACTION_NONE (and no other touch-action) should disable the timeout. 1272 // TOUCH_ACTION_NONE (and no other touch-action) should disable the timeout.
1254 OnHasTouchEventHandlers(true); 1273 OnHasTouchEventHandlers(true);
1255 PressTouchPoint(1, 1); 1274 PressTouchPoint(1, 1);
1256 SendTouchEvent(); 1275 uint32 touch_press_event_id2 = SendTouchEvent();
1257 OnSetTouchAction(TOUCH_ACTION_PAN_Y); 1276 OnSetTouchAction(TOUCH_ACTION_PAN_Y);
1258 EXPECT_TRUE(TouchEventTimeoutEnabled()); 1277 EXPECT_TRUE(TouchEventTimeoutEnabled());
1259 ReleaseTouchPoint(0); 1278 ReleaseTouchPoint(0);
1260 SendTouchEvent(); 1279 uint32 touch_release_event_id2 = SendTouchEvent();
1261 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 1280 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
1262 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); 1281 touch_press_event_id2);
1282 SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
1283 touch_release_event_id2);
1263 1284
1264 PressTouchPoint(1, 1); 1285 PressTouchPoint(1, 1);
1265 SendTouchEvent(); 1286 uint32 touch_press_event_id3 = SendTouchEvent();
1266 OnSetTouchAction(TOUCH_ACTION_NONE); 1287 OnSetTouchAction(TOUCH_ACTION_NONE);
1267 EXPECT_FALSE(TouchEventTimeoutEnabled()); 1288 EXPECT_FALSE(TouchEventTimeoutEnabled());
1268 ReleaseTouchPoint(0); 1289 ReleaseTouchPoint(0);
1269 SendTouchEvent(); 1290 uint32 touch_release_event_id3 = SendTouchEvent();
1270 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 1291 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
1271 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); 1292 touch_press_event_id3);
1293 SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
1294 touch_release_event_id3);
1272 1295
1273 // As the touch-action is reset by a new touch sequence, the timeout behavior 1296 // As the touch-action is reset by a new touch sequence, the timeout behavior
1274 // should be restored. 1297 // should be restored.
1275 PressTouchPoint(1, 1); 1298 PressTouchPoint(1, 1);
1276 SendTouchEvent(); 1299 SendTouchEvent();
1277 EXPECT_TRUE(TouchEventTimeoutEnabled()); 1300 EXPECT_TRUE(TouchEventTimeoutEnabled());
1278 } 1301 }
1279 1302
1280 // Test that a touch sequenced preceded by TOUCH_ACTION_NONE is not affected by 1303 // Test that a touch sequenced preceded by TOUCH_ACTION_NONE is not affected by
1281 // the touch timeout. 1304 // the touch timeout.
1282 TEST_F(InputRouterImplTest, 1305 TEST_F(InputRouterImplTest,
1283 TouchAckTimeoutDisabledForTouchSequenceAfterTouchActionNone) { 1306 TouchAckTimeoutDisabledForTouchSequenceAfterTouchActionNone) {
1284 const int timeout_ms = 1; 1307 const int timeout_ms = 1;
1285 SetUpForTouchAckTimeoutTest(timeout_ms); 1308 SetUpForTouchAckTimeoutTest(timeout_ms);
1286 ASSERT_TRUE(TouchEventTimeoutEnabled()); 1309 ASSERT_TRUE(TouchEventTimeoutEnabled());
1287 OnHasTouchEventHandlers(true); 1310 OnHasTouchEventHandlers(true);
1288 1311
1289 // Start a touch sequence. 1312 // Start a touch sequence.
1290 PressTouchPoint(1, 1); 1313 PressTouchPoint(1, 1);
1291 SendTouchEvent(); 1314 uint32 touch_press_event_id = SendTouchEvent();
1292 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1315 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1293 1316
1294 // TOUCH_ACTION_NONE should disable the timeout. 1317 // TOUCH_ACTION_NONE should disable the timeout.
1295 OnSetTouchAction(TOUCH_ACTION_NONE); 1318 OnSetTouchAction(TOUCH_ACTION_NONE);
1296 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 1319 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
1320 touch_press_event_id);
1297 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1321 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1298 EXPECT_FALSE(TouchEventTimeoutEnabled()); 1322 EXPECT_FALSE(TouchEventTimeoutEnabled());
1299 1323
1300 MoveTouchPoint(0, 1, 2); 1324 MoveTouchPoint(0, 1, 2);
1301 SendTouchEvent(); 1325 uint32 touch_move_event_id = SendTouchEvent();
1302 EXPECT_FALSE(TouchEventTimeoutEnabled()); 1326 EXPECT_FALSE(TouchEventTimeoutEnabled());
1303 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1327 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1304 1328
1305 // Delay the move ack. The timeout should not fire. 1329 // Delay the move ack. The timeout should not fire.
1306 RunTasksAndWait(base::TimeDelta::FromMilliseconds(timeout_ms + 1)); 1330 RunTasksAndWait(base::TimeDelta::FromMilliseconds(timeout_ms + 1));
1307 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1331 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
1308 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1332 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1309 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); 1333 SendTouchEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED,
1334 touch_move_event_id);
1310 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1335 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1311 1336
1312 // End the touch sequence. 1337 // End the touch sequence.
1313 ReleaseTouchPoint(0); 1338 ReleaseTouchPoint(0);
1314 SendTouchEvent(); 1339 uint32 touch_release_event_id = SendTouchEvent();
1315 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); 1340 SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
1341 touch_release_event_id);
1316 EXPECT_FALSE(TouchEventTimeoutEnabled()); 1342 EXPECT_FALSE(TouchEventTimeoutEnabled());
1317 ack_handler_->GetAndResetAckCount(); 1343 ack_handler_->GetAndResetAckCount();
1318 GetSentMessageCountAndResetSink(); 1344 GetSentMessageCountAndResetSink();
1319 1345
1320 // Start another touch sequence. This should restore the touch timeout. 1346 // Start another touch sequence. This should restore the touch timeout.
1321 PressTouchPoint(1, 1); 1347 PressTouchPoint(1, 1);
1322 SendTouchEvent(); 1348 SendTouchEvent();
1323 EXPECT_TRUE(TouchEventTimeoutEnabled()); 1349 EXPECT_TRUE(TouchEventTimeoutEnabled());
1324 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1350 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1325 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1351 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
1326 1352
1327 // Wait for the touch ack timeout to fire. 1353 // Wait for the touch ack timeout to fire.
1328 RunTasksAndWait(base::TimeDelta::FromMilliseconds(timeout_ms + 1)); 1354 RunTasksAndWait(base::TimeDelta::FromMilliseconds(timeout_ms + 1));
1329 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1355 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1330 } 1356 }
1331 1357
1332 // Test that TouchActionFilter::ResetTouchAction is called before the 1358 // Test that TouchActionFilter::ResetTouchAction is called before the
1333 // first touch event for a touch sequence reaches the renderer. 1359 // first touch event for a touch sequence reaches the renderer.
1334 TEST_F(InputRouterImplTest, TouchActionResetBeforeEventReachesRenderer) { 1360 TEST_F(InputRouterImplTest, TouchActionResetBeforeEventReachesRenderer) {
1335 OnHasTouchEventHandlers(true); 1361 OnHasTouchEventHandlers(true);
1336 1362
1337 // Sequence 1. 1363 // Sequence 1.
1338 PressTouchPoint(1, 1); 1364 PressTouchPoint(1, 1);
1339 SendTouchEvent(); 1365 uint32 touch_press_event_id1 = SendTouchEvent();
1340 OnSetTouchAction(TOUCH_ACTION_NONE); 1366 OnSetTouchAction(TOUCH_ACTION_NONE);
1341 MoveTouchPoint(0, 50, 50); 1367 MoveTouchPoint(0, 50, 50);
1342 SendTouchEvent(); 1368 uint32 touch_move_event_id1 = SendTouchEvent();
1343 ReleaseTouchPoint(0); 1369 ReleaseTouchPoint(0);
1344 SendTouchEvent(); 1370 uint32 touch_release_event_id1 = SendTouchEvent();
1345 1371
1346 // Sequence 2. 1372 // Sequence 2.
1347 PressTouchPoint(1, 1); 1373 PressTouchPoint(1, 1);
1348 SendTouchEvent(); 1374 uint32 touch_press_event_id2 = SendTouchEvent();
1349 MoveTouchPoint(0, 50, 50); 1375 MoveTouchPoint(0, 50, 50);
1350 SendTouchEvent(); 1376 uint32 touch_move_event_id2 = SendTouchEvent();
1351 ReleaseTouchPoint(0); 1377 ReleaseTouchPoint(0);
1352 SendTouchEvent(); 1378 uint32 touch_release_event_id2 = SendTouchEvent();
1353 1379
1354 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 1380 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
1355 SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED); 1381 touch_press_event_id1);
1382 SendTouchEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED,
1383 touch_move_event_id1);
1356 1384
1357 // Ensure touch action is still none, as the next touch start hasn't been 1385 // Ensure touch action is still none, as the next touch start hasn't been
1358 // acked yet. ScrollBegin and ScrollEnd don't require acks. 1386 // acked yet. ScrollBegin and ScrollEnd don't require acks.
1359 EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); 1387 EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
1360 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1388 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1361 blink::WebGestureDeviceTouchscreen); 1389 blink::WebGestureDeviceTouchscreen);
1362 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1390 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1363 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, 1391 SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
1364 blink::WebGestureDeviceTouchscreen); 1392 blink::WebGestureDeviceTouchscreen);
1365 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1393 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1366 1394
1367 // This allows the next touch sequence to start. 1395 // This allows the next touch sequence to start.
1368 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); 1396 SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
1397 touch_release_event_id1);
1369 1398
1370 // Ensure touch action has been set to auto, as a new touch sequence has 1399 // Ensure touch action has been set to auto, as a new touch sequence has
1371 // started. 1400 // started.
1372 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 1401 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
1373 SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED); 1402 touch_press_event_id2);
1403 SendTouchEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED,
1404 touch_move_event_id2);
1374 EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); 1405 EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
1375 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1406 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1376 blink::WebGestureDeviceTouchscreen); 1407 blink::WebGestureDeviceTouchscreen);
1377 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1408 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1378 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, 1409 SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
1379 blink::WebGestureDeviceTouchscreen); 1410 blink::WebGestureDeviceTouchscreen);
1380 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1411 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1381 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); 1412 SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
1413 touch_release_event_id2);
1382 } 1414 }
1383 1415
1384 // Test that TouchActionFilter::ResetTouchAction is called when a new touch 1416 // Test that TouchActionFilter::ResetTouchAction is called when a new touch
1385 // sequence has no consumer. 1417 // sequence has no consumer.
1386 TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHasNoConsumer) { 1418 TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHasNoConsumer) {
1387 OnHasTouchEventHandlers(true); 1419 OnHasTouchEventHandlers(true);
1388 1420
1389 // Sequence 1. 1421 // Sequence 1.
1390 PressTouchPoint(1, 1); 1422 PressTouchPoint(1, 1);
1391 SendTouchEvent(); 1423 uint32 touch_press_event_id1 = SendTouchEvent();
1392 MoveTouchPoint(0, 50, 50); 1424 MoveTouchPoint(0, 50, 50);
1393 SendTouchEvent(); 1425 uint32 touch_move_event_id1 = SendTouchEvent();
1394 OnSetTouchAction(TOUCH_ACTION_NONE); 1426 OnSetTouchAction(TOUCH_ACTION_NONE);
1395 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 1427 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
1396 SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED); 1428 touch_press_event_id1);
1429 SendTouchEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED,
1430 touch_move_event_id1);
1397 1431
1398 ReleaseTouchPoint(0); 1432 ReleaseTouchPoint(0);
1399 SendTouchEvent(); 1433 uint32 touch_release_event_id1 = SendTouchEvent();
1400 1434
1401 // Sequence 2 1435 // Sequence 2
1402 PressTouchPoint(1, 1); 1436 PressTouchPoint(1, 1);
1403 SendTouchEvent(); 1437 uint32 touch_press_event_id2 = SendTouchEvent();
1404 MoveTouchPoint(0, 50, 50); 1438 MoveTouchPoint(0, 50, 50);
1405 SendTouchEvent(); 1439 SendTouchEvent();
1406 ReleaseTouchPoint(0); 1440 ReleaseTouchPoint(0);
1407 SendTouchEvent(); 1441 SendTouchEvent();
1408 1442
1409 // Ensure we have touch-action:none. ScrollBegin and ScrollEnd don't require 1443 // Ensure we have touch-action:none. ScrollBegin and ScrollEnd don't require
1410 // acks. 1444 // acks.
1411 EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); 1445 EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
1412 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1446 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1413 blink::WebGestureDeviceTouchscreen); 1447 blink::WebGestureDeviceTouchscreen);
1414 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1448 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1415 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, 1449 SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
1416 blink::WebGestureDeviceTouchscreen); 1450 blink::WebGestureDeviceTouchscreen);
1417 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1451 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1418 1452
1419 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); 1453 SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
1420 SendInputEventACK(WebInputEvent::TouchStart, 1454 touch_release_event_id1);
1421 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 1455 SendTouchEventACK(WebInputEvent::TouchStart,
1456 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
1457 touch_press_event_id2);
1422 1458
1423 // Ensure touch action has been set to auto, as the touch had no consumer. 1459 // Ensure touch action has been set to auto, as the touch had no consumer.
1424 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1460 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1425 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1461 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1426 blink::WebGestureDeviceTouchscreen); 1462 blink::WebGestureDeviceTouchscreen);
1427 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1463 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1428 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, 1464 SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
1429 blink::WebGestureDeviceTouchscreen); 1465 blink::WebGestureDeviceTouchscreen);
1430 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1466 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1431 } 1467 }
1432 1468
1433 // Test that TouchActionFilter::ResetTouchAction is called when the touch 1469 // Test that TouchActionFilter::ResetTouchAction is called when the touch
1434 // handler is removed. 1470 // handler is removed.
1435 TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHandlerRemoved) { 1471 TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHandlerRemoved) {
1436 // Touch sequence with touch handler. 1472 // Touch sequence with touch handler.
1437 OnHasTouchEventHandlers(true); 1473 OnHasTouchEventHandlers(true);
1438 PressTouchPoint(1, 1); 1474 PressTouchPoint(1, 1);
1439 SendTouchEvent(); 1475 uint32 touch_press_event_id = SendTouchEvent();
1440 MoveTouchPoint(0, 50, 50); 1476 MoveTouchPoint(0, 50, 50);
1441 SendTouchEvent(); 1477 uint32 touch_move_event_id = SendTouchEvent();
1442 OnSetTouchAction(TOUCH_ACTION_NONE); 1478 OnSetTouchAction(TOUCH_ACTION_NONE);
1443 ReleaseTouchPoint(0); 1479 ReleaseTouchPoint(0);
1444 SendTouchEvent(); 1480 uint32 touch_release_event_id = SendTouchEvent();
1445 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1481 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1446 1482
1447 // Ensure we have touch-action:none, suppressing scroll events. 1483 // Ensure we have touch-action:none, suppressing scroll events.
1448 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 1484 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
1485 touch_press_event_id);
1449 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1486 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1450 SendInputEventACK(WebInputEvent::TouchMove, 1487 SendTouchEventACK(WebInputEvent::TouchMove,
1451 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1488 INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_move_event_id);
1452 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1489 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1453 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1490 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1454 blink::WebGestureDeviceTouchscreen); 1491 blink::WebGestureDeviceTouchscreen);
1455 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1492 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1456 1493
1457 SendInputEventACK(WebInputEvent::TouchEnd, 1494 SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
1458 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1495 touch_release_event_id);
1459 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, 1496 SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
1460 blink::WebGestureDeviceTouchscreen); 1497 blink::WebGestureDeviceTouchscreen);
1461 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1498 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1462 1499
1463 // Sequence without a touch handler. Note that in this case, the view may not 1500 // Sequence without a touch handler. Note that in this case, the view may not
1464 // necessarily forward touches to the router (as no touch handler exists). 1501 // necessarily forward touches to the router (as no touch handler exists).
1465 OnHasTouchEventHandlers(false); 1502 OnHasTouchEventHandlers(false);
1466 1503
1467 // Ensure touch action has been set to auto, as the touch handler has been 1504 // Ensure touch action has been set to auto, as the touch handler has been
1468 // removed. 1505 // removed.
1469 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1506 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1470 blink::WebGestureDeviceTouchscreen); 1507 blink::WebGestureDeviceTouchscreen);
1471 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1508 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1472 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, 1509 SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
1473 blink::WebGestureDeviceTouchscreen); 1510 blink::WebGestureDeviceTouchscreen);
1474 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1511 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1475 } 1512 }
1476 1513
1477 // Test that the double tap gesture depends on the touch action of the first 1514 // Test that the double tap gesture depends on the touch action of the first
1478 // tap. 1515 // tap.
1479 TEST_F(InputRouterImplTest, DoubleTapGestureDependsOnFirstTap) { 1516 TEST_F(InputRouterImplTest, DoubleTapGestureDependsOnFirstTap) {
1480 OnHasTouchEventHandlers(true); 1517 OnHasTouchEventHandlers(true);
1481 1518
1482 // Sequence 1. 1519 // Sequence 1.
1483 PressTouchPoint(1, 1); 1520 PressTouchPoint(1, 1);
1484 SendTouchEvent(); 1521 uint32 touch_press_event_id1 = SendTouchEvent();
1485 OnSetTouchAction(TOUCH_ACTION_NONE); 1522 OnSetTouchAction(TOUCH_ACTION_NONE);
1486 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 1523 SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
1524 touch_press_event_id1);
1487 1525
1488 ReleaseTouchPoint(0); 1526 ReleaseTouchPoint(0);
1489 SendTouchEvent(); 1527 uint32 touch_release_event_id = SendTouchEvent();
1490 1528
1491 // Sequence 2 1529 // Sequence 2
1492 PressTouchPoint(1, 1); 1530 PressTouchPoint(1, 1);
1493 SendTouchEvent(); 1531 uint32 touch_press_event_id2 = SendTouchEvent();
1494 1532
1495 // First tap. 1533 // First tap.
1496 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); 1534 EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
1497 SimulateGestureEvent(WebInputEvent::GestureTapDown, 1535 SimulateGestureEvent(WebInputEvent::GestureTapDown,
1498 blink::WebGestureDeviceTouchscreen); 1536 blink::WebGestureDeviceTouchscreen);
1499 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1537 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1500 1538
1501 // The GestureTapUnconfirmed is converted into a tap, as the touch action is 1539 // The GestureTapUnconfirmed is converted into a tap, as the touch action is
1502 // none. 1540 // none.
1503 SimulateGestureEvent(WebInputEvent::GestureTapUnconfirmed, 1541 SimulateGestureEvent(WebInputEvent::GestureTapUnconfirmed,
1504 blink::WebGestureDeviceTouchscreen); 1542 blink::WebGestureDeviceTouchscreen);
1505 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1543 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1506 // This test will become invalid if GestureTap stops requiring an ack. 1544 // This test will become invalid if GestureTap stops requiring an ack.
1507 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 1545 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
1508 GetEventWithType(WebInputEvent::GestureTap))); 1546 GetEventWithType(WebInputEvent::GestureTap)));
1509 EXPECT_EQ(2, client_->in_flight_event_count()); 1547 EXPECT_EQ(2, client_->in_flight_event_count());
1510 SendInputEventACK(WebInputEvent::GestureTap, 1548 SendInputEventACK(WebInputEvent::GestureTap,
1511 INPUT_EVENT_ACK_STATE_CONSUMED); 1549 INPUT_EVENT_ACK_STATE_CONSUMED);
1512 EXPECT_EQ(1, client_->in_flight_event_count()); 1550 EXPECT_EQ(1, client_->in_flight_event_count());
1513 1551
1514 // This tap gesture is dropped, since the GestureTapUnconfirmed was turned 1552 // This tap gesture is dropped, since the GestureTapUnconfirmed was turned
1515 // into a tap. 1553 // into a tap.
1516 SimulateGestureEvent(WebInputEvent::GestureTap, 1554 SimulateGestureEvent(WebInputEvent::GestureTap,
1517 blink::WebGestureDeviceTouchscreen); 1555 blink::WebGestureDeviceTouchscreen);
1518 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1556 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1519 1557
1520 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); 1558 SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
1521 SendInputEventACK(WebInputEvent::TouchStart, 1559 touch_release_event_id);
1522 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 1560 SendTouchEventACK(WebInputEvent::TouchStart,
1561 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
1562 touch_press_event_id2);
1523 1563
1524 // Second Tap. 1564 // Second Tap.
1525 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1565 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1526 SimulateGestureEvent(WebInputEvent::GestureTapDown, 1566 SimulateGestureEvent(WebInputEvent::GestureTapDown,
1527 blink::WebGestureDeviceTouchscreen); 1567 blink::WebGestureDeviceTouchscreen);
1528 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1568 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1529 1569
1530 // Although the touch-action is now auto, the double tap still won't be 1570 // Although the touch-action is now auto, the double tap still won't be
1531 // dispatched, because the first tap occured when the touch-action was none. 1571 // dispatched, because the first tap occured when the touch-action was none.
1532 SimulateGestureEvent(WebInputEvent::GestureDoubleTap, 1572 SimulateGestureEvent(WebInputEvent::GestureDoubleTap,
1533 blink::WebGestureDeviceTouchscreen); 1573 blink::WebGestureDeviceTouchscreen);
1534 // This test will become invalid if GestureDoubleTap stops requiring an ack. 1574 // This test will become invalid if GestureDoubleTap stops requiring an ack.
1535 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 1575 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
1536 GetEventWithType(WebInputEvent::GestureDoubleTap))); 1576 GetEventWithType(WebInputEvent::GestureDoubleTap)));
1537 EXPECT_EQ(1, client_->in_flight_event_count()); 1577 EXPECT_EQ(1, client_->in_flight_event_count());
1538 SendInputEventACK(WebInputEvent::GestureTap, INPUT_EVENT_ACK_STATE_CONSUMED); 1578 SendInputEventACK(WebInputEvent::GestureTap, INPUT_EVENT_ACK_STATE_CONSUMED);
1539 EXPECT_EQ(0, client_->in_flight_event_count()); 1579 EXPECT_EQ(0, client_->in_flight_event_count());
1540 } 1580 }
1541 1581
1542 // Test that the router will call the client's |DidFlush| after all events have 1582 // Test that the router will call the client's |DidFlush| after all events have
1543 // been dispatched following a call to |Flush|. 1583 // been dispatched following a call to |Flush|.
1544 TEST_F(InputRouterImplTest, InputFlush) { 1584 TEST_F(InputRouterImplTest, InputFlush) {
1545 EXPECT_FALSE(HasPendingEvents()); 1585 EXPECT_FALSE(HasPendingEvents());
1546 1586
1547 // Flushing an empty router should immediately trigger DidFlush. 1587 // Flushing an empty router should immediately trigger DidFlush.
1548 RequestNotificationWhenFlushed(); 1588 RequestNotificationWhenFlushed();
1549 EXPECT_EQ(1U, GetAndResetDidFlushCount()); 1589 EXPECT_EQ(1U, GetAndResetDidFlushCount());
1550 EXPECT_FALSE(HasPendingEvents()); 1590 EXPECT_FALSE(HasPendingEvents());
1551 1591
1552 // Queue a TouchStart. 1592 // Queue a TouchStart.
1553 OnHasTouchEventHandlers(true); 1593 OnHasTouchEventHandlers(true);
1554 PressTouchPoint(1, 1); 1594 PressTouchPoint(1, 1);
1555 SendTouchEvent(); 1595 uint32 touch_press_event_id = SendTouchEvent();
1556 EXPECT_TRUE(HasPendingEvents()); 1596 EXPECT_TRUE(HasPendingEvents());
1557 1597
1558 // DidFlush should be called only after the event is ack'ed. 1598 // DidFlush should be called only after the event is ack'ed.
1559 RequestNotificationWhenFlushed(); 1599 RequestNotificationWhenFlushed();
1560 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1600 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1561 SendInputEventACK(WebInputEvent::TouchStart, 1601 SendTouchEventACK(WebInputEvent::TouchStart,
1562 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1602 INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_press_event_id);
1563 EXPECT_EQ(1U, GetAndResetDidFlushCount()); 1603 EXPECT_EQ(1U, GetAndResetDidFlushCount());
1564 1604
1565 // Ensure different types of enqueued events will prevent the DidFlush call 1605 // Ensure different types of enqueued events will prevent the DidFlush call
1566 // until all such events have been fully dispatched. 1606 // until all such events have been fully dispatched.
1567 MoveTouchPoint(0, 50, 50); 1607 MoveTouchPoint(0, 50, 50);
1568 SendTouchEvent(); 1608 uint32 touch_move_event_id = SendTouchEvent();
1569 ASSERT_TRUE(HasPendingEvents()); 1609 ASSERT_TRUE(HasPendingEvents());
1570 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1610 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1571 blink::WebGestureDeviceTouchscreen); 1611 blink::WebGestureDeviceTouchscreen);
1572 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, 1612 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate,
1573 blink::WebGestureDeviceTouchscreen); 1613 blink::WebGestureDeviceTouchscreen);
1574 SimulateGestureEvent(WebInputEvent::GesturePinchBegin, 1614 SimulateGestureEvent(WebInputEvent::GesturePinchBegin,
1575 blink::WebGestureDeviceTouchscreen); 1615 blink::WebGestureDeviceTouchscreen);
1576 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate, 1616 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate,
1577 blink::WebGestureDeviceTouchscreen); 1617 blink::WebGestureDeviceTouchscreen);
1578 RequestNotificationWhenFlushed(); 1618 RequestNotificationWhenFlushed();
1579 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1619 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1580 1620
1581 // Repeated flush calls should have no effect. 1621 // Repeated flush calls should have no effect.
1582 RequestNotificationWhenFlushed(); 1622 RequestNotificationWhenFlushed();
1583 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1623 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1584 1624
1585 // There are still pending gestures. 1625 // There are still pending gestures.
1586 SendInputEventACK(WebInputEvent::TouchMove, 1626 SendTouchEventACK(WebInputEvent::TouchMove,
1587 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1627 INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_move_event_id);
1588 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1628 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1589 EXPECT_TRUE(HasPendingEvents()); 1629 EXPECT_TRUE(HasPendingEvents());
1590 1630
1591 // One more gesture to go. 1631 // One more gesture to go.
1592 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 1632 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
1593 INPUT_EVENT_ACK_STATE_CONSUMED); 1633 INPUT_EVENT_ACK_STATE_CONSUMED);
1594 EXPECT_EQ(0U, GetAndResetDidFlushCount()); 1634 EXPECT_EQ(0U, GetAndResetDidFlushCount());
1595 EXPECT_TRUE(HasPendingEvents()); 1635 EXPECT_TRUE(HasPendingEvents());
1596 1636
1597 // The final ack'ed gesture should trigger the DidFlush. 1637 // The final ack'ed gesture should trigger the DidFlush.
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 client_overscroll.latest_overscroll_delta); 1804 client_overscroll.latest_overscroll_delta);
1765 EXPECT_EQ(overscroll.current_fling_velocity, 1805 EXPECT_EQ(overscroll.current_fling_velocity,
1766 client_overscroll.current_fling_velocity); 1806 client_overscroll.current_fling_velocity);
1767 1807
1768 DidOverscrollParams wheel_overscroll; 1808 DidOverscrollParams wheel_overscroll;
1769 wheel_overscroll.accumulated_overscroll = gfx::Vector2dF(7, -7); 1809 wheel_overscroll.accumulated_overscroll = gfx::Vector2dF(7, -7);
1770 wheel_overscroll.latest_overscroll_delta = gfx::Vector2dF(3, 0); 1810 wheel_overscroll.latest_overscroll_delta = gfx::Vector2dF(3, 0);
1771 wheel_overscroll.current_fling_velocity = gfx::Vector2dF(1, 0); 1811 wheel_overscroll.current_fling_velocity = gfx::Vector2dF(1, 0);
1772 1812
1773 SimulateWheelEvent(3, 0, 0, false); 1813 SimulateWheelEvent(3, 0, 0, false);
1774 InputHostMsg_HandleInputEvent_ACK_Params ack; 1814 InputEventAck ack(WebInputEvent::MouseWheel,
1775 ack.type = WebInputEvent::MouseWheel; 1815 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1776 ack.state = INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
1777 ack.overscroll.reset(new DidOverscrollParams(wheel_overscroll)); 1816 ack.overscroll.reset(new DidOverscrollParams(wheel_overscroll));
1778 input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack)); 1817 input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
1779 1818
1780 client_overscroll = client_->GetAndResetOverscroll(); 1819 client_overscroll = client_->GetAndResetOverscroll();
1781 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, 1820 EXPECT_EQ(wheel_overscroll.accumulated_overscroll,
1782 client_overscroll.accumulated_overscroll); 1821 client_overscroll.accumulated_overscroll);
1783 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, 1822 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta,
1784 client_overscroll.latest_overscroll_delta); 1823 client_overscroll.latest_overscroll_delta);
1785 EXPECT_EQ(wheel_overscroll.current_fling_velocity, 1824 EXPECT_EQ(wheel_overscroll.current_fling_velocity,
1786 client_overscroll.current_fling_velocity); 1825 client_overscroll.current_fling_velocity);
1787 } 1826 }
1788 1827
1789 } // namespace content 1828 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698