| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <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 14 matching lines...) Expand all Loading... |
| 25 #include "content/public/test/test_browser_context.h" | 25 #include "content/public/test/test_browser_context.h" |
| 26 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 27 #include "ui/events/keycodes/keyboard_codes.h" | 27 #include "ui/events/keycodes/keyboard_codes.h" |
| 28 | 28 |
| 29 #if defined(USE_AURA) | 29 #if defined(USE_AURA) |
| 30 #include "content/browser/renderer_host/ui_events_helper.h" | 30 #include "content/browser/renderer_host/ui_events_helper.h" |
| 31 #include "ui/events/event.h" | 31 #include "ui/events/event.h" |
| 32 #endif | 32 #endif |
| 33 | 33 |
| 34 using base::TimeDelta; | 34 using base::TimeDelta; |
| 35 using blink::WebGestureDevice; |
| 35 using blink::WebGestureEvent; | 36 using blink::WebGestureEvent; |
| 36 using blink::WebKeyboardEvent; | 37 using blink::WebKeyboardEvent; |
| 37 using blink::WebInputEvent; | 38 using blink::WebInputEvent; |
| 38 using blink::WebMouseEvent; | 39 using blink::WebMouseEvent; |
| 39 using blink::WebMouseWheelEvent; | 40 using blink::WebMouseWheelEvent; |
| 40 using blink::WebTouchEvent; | 41 using blink::WebTouchEvent; |
| 41 using blink::WebTouchPoint; | 42 using blink::WebTouchPoint; |
| 42 | 43 |
| 43 namespace content { | 44 namespace content { |
| 44 | 45 |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 input_router_->SendWheelEvent(MouseWheelEventWithLatencyInfo( | 206 input_router_->SendWheelEvent(MouseWheelEventWithLatencyInfo( |
| 206 SyntheticWebMouseWheelEventBuilder::Build(phase), ui::LatencyInfo())); | 207 SyntheticWebMouseWheelEventBuilder::Build(phase), ui::LatencyInfo())); |
| 207 } | 208 } |
| 208 | 209 |
| 209 void SimulateGestureEvent(const WebGestureEvent& gesture) { | 210 void SimulateGestureEvent(const WebGestureEvent& gesture) { |
| 210 input_router_->SendGestureEvent( | 211 input_router_->SendGestureEvent( |
| 211 GestureEventWithLatencyInfo(gesture, ui::LatencyInfo())); | 212 GestureEventWithLatencyInfo(gesture, ui::LatencyInfo())); |
| 212 } | 213 } |
| 213 | 214 |
| 214 void SimulateGestureEvent(WebInputEvent::Type type, | 215 void SimulateGestureEvent(WebInputEvent::Type type, |
| 215 WebGestureEvent::SourceDevice sourceDevice) { | 216 WebGestureDevice sourceDevice) { |
| 216 SimulateGestureEvent( | 217 SimulateGestureEvent( |
| 217 SyntheticWebGestureEventBuilder::Build(type, sourceDevice)); | 218 SyntheticWebGestureEventBuilder::Build(type, sourceDevice)); |
| 218 } | 219 } |
| 219 | 220 |
| 220 void SimulateGestureScrollUpdateEvent(float dX, float dY, int modifiers) { | 221 void SimulateGestureScrollUpdateEvent(float dX, float dY, int modifiers) { |
| 221 SimulateGestureEvent( | 222 SimulateGestureEvent( |
| 222 SyntheticWebGestureEventBuilder::BuildScrollUpdate(dX, dY, modifiers)); | 223 SyntheticWebGestureEventBuilder::BuildScrollUpdate(dX, dY, modifiers)); |
| 223 } | 224 } |
| 224 | 225 |
| 225 void SimulateGesturePinchUpdateEvent( | 226 void SimulateGesturePinchUpdateEvent(float scale, |
| 226 float scale, | 227 float anchorX, |
| 227 float anchorX, | 228 float anchorY, |
| 228 float anchorY, | 229 int modifiers, |
| 229 int modifiers, | 230 WebGestureDevice sourceDevice) { |
| 230 WebGestureEvent::SourceDevice sourceDevice) { | |
| 231 SimulateGestureEvent(SyntheticWebGestureEventBuilder::BuildPinchUpdate( | 231 SimulateGestureEvent(SyntheticWebGestureEventBuilder::BuildPinchUpdate( |
| 232 scale, anchorX, anchorY, modifiers, sourceDevice)); | 232 scale, anchorX, anchorY, modifiers, sourceDevice)); |
| 233 } | 233 } |
| 234 | 234 |
| 235 void SimulateGestureFlingStartEvent( | 235 void SimulateGestureFlingStartEvent(float velocityX, |
| 236 float velocityX, | 236 float velocityY, |
| 237 float velocityY, | 237 WebGestureDevice sourceDevice) { |
| 238 WebGestureEvent::SourceDevice sourceDevice) { | |
| 239 SimulateGestureEvent( | 238 SimulateGestureEvent( |
| 240 SyntheticWebGestureEventBuilder::BuildFling(velocityX, | 239 SyntheticWebGestureEventBuilder::BuildFling(velocityX, |
| 241 velocityY, | 240 velocityY, |
| 242 sourceDevice)); | 241 sourceDevice)); |
| 243 } | 242 } |
| 244 | 243 |
| 245 void SimulateTouchEvent(WebInputEvent::Type type) { | 244 void SimulateTouchEvent(WebInputEvent::Type type) { |
| 246 touch_event_.ResetPoints(); | 245 touch_event_.ResetPoints(); |
| 247 int index = PressTouchPoint(0, 0); | 246 int index = PressTouchPoint(0, 0); |
| 248 switch (type) { | 247 switch (type) { |
| (...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 847 WebInputEvent::GestureScrollBegin, | 846 WebInputEvent::GestureScrollBegin, |
| 848 WebInputEvent::GestureScrollUpdate, | 847 WebInputEvent::GestureScrollUpdate, |
| 849 WebInputEvent::GestureScrollUpdateWithoutPropagation, | 848 WebInputEvent::GestureScrollUpdateWithoutPropagation, |
| 850 WebInputEvent::GesturePinchBegin, | 849 WebInputEvent::GesturePinchBegin, |
| 851 WebInputEvent::GesturePinchUpdate, | 850 WebInputEvent::GesturePinchUpdate, |
| 852 WebInputEvent::GesturePinchEnd, | 851 WebInputEvent::GesturePinchEnd, |
| 853 WebInputEvent::GestureScrollEnd}; | 852 WebInputEvent::GestureScrollEnd}; |
| 854 for (int i = 0; i < kEventTypesLength; ++i) { | 853 for (int i = 0; i < kEventTypesLength; ++i) { |
| 855 WebInputEvent::Type type = eventTypes[i]; | 854 WebInputEvent::Type type = eventTypes[i]; |
| 856 if (!WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type))) { | 855 if (!WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type))) { |
| 857 SimulateGestureEvent(type, WebGestureEvent::Touchscreen); | 856 SimulateGestureEvent(type, blink::WebGestureDeviceTouchscreen); |
| 858 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 857 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 859 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 858 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 860 EXPECT_EQ(1, client_->in_flight_event_count()); | 859 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 861 EXPECT_TRUE(HasPendingEvents()); | 860 EXPECT_TRUE(HasPendingEvents()); |
| 862 | 861 |
| 863 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 862 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 864 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 863 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 865 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 864 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 866 EXPECT_EQ(0, client_->in_flight_event_count()); | 865 EXPECT_EQ(0, client_->in_flight_event_count()); |
| 867 EXPECT_FALSE(HasPendingEvents()); | 866 EXPECT_FALSE(HasPendingEvents()); |
| 868 continue; | 867 continue; |
| 869 } | 868 } |
| 870 | 869 |
| 871 SimulateGestureEvent(type, WebGestureEvent::Touchscreen); | 870 SimulateGestureEvent(type, blink::WebGestureDeviceTouchscreen); |
| 872 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 871 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 873 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 872 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 874 EXPECT_EQ(0, client_->in_flight_event_count()); | 873 EXPECT_EQ(0, client_->in_flight_event_count()); |
| 875 EXPECT_FALSE(HasPendingEvents()); | 874 EXPECT_FALSE(HasPendingEvents()); |
| 876 } | 875 } |
| 877 } | 876 } |
| 878 | 877 |
| 879 TEST_F(InputRouterImplTest, MouseTypesIgnoringAck) { | 878 TEST_F(InputRouterImplTest, MouseTypesIgnoringAck) { |
| 880 int start_type = static_cast<int>(WebInputEvent::MouseDown); | 879 int start_type = static_cast<int>(WebInputEvent::MouseDown); |
| 881 int end_type = static_cast<int>(WebInputEvent::ContextMenu); | 880 int end_type = static_cast<int>(WebInputEvent::ContextMenu); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 926 } | 925 } |
| 927 | 926 |
| 928 // Test that GestureShowPress, GestureTapDown and GestureTapCancel events don't | 927 // Test that GestureShowPress, GestureTapDown and GestureTapCancel events don't |
| 929 // wait for ACKs. | 928 // wait for ACKs. |
| 930 TEST_F(InputRouterImplTest, GestureTypesIgnoringAckInterleaved) { | 929 TEST_F(InputRouterImplTest, GestureTypesIgnoringAckInterleaved) { |
| 931 // Interleave a few events that do and do not ignore acks, ensuring that | 930 // Interleave a few events that do and do not ignore acks, ensuring that |
| 932 // ack-ignoring events aren't dispatched until all prior events which observe | 931 // ack-ignoring events aren't dispatched until all prior events which observe |
| 933 // their ack disposition have been dispatched. | 932 // their ack disposition have been dispatched. |
| 934 | 933 |
| 935 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 934 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
| 936 WebGestureEvent::Touchscreen); | 935 blink::WebGestureDeviceTouchscreen); |
| 937 ASSERT_EQ(1U, GetSentMessageCountAndResetSink()); | 936 ASSERT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 938 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 937 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 939 EXPECT_EQ(0, client_->in_flight_event_count()); | 938 EXPECT_EQ(0, client_->in_flight_event_count()); |
| 940 | 939 |
| 941 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, | 940 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, |
| 942 WebGestureEvent::Touchscreen); | 941 blink::WebGestureDeviceTouchscreen); |
| 943 ASSERT_EQ(1U, GetSentMessageCountAndResetSink()); | 942 ASSERT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 944 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 943 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 945 EXPECT_EQ(1, client_->in_flight_event_count()); | 944 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 946 | 945 |
| 947 SimulateGestureEvent(WebInputEvent::GestureTapDown, | 946 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 948 WebGestureEvent::Touchscreen); | 947 blink::WebGestureDeviceTouchscreen); |
| 949 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 948 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 950 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 949 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 951 EXPECT_EQ(1, client_->in_flight_event_count()); | 950 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 952 | 951 |
| 953 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, | 952 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, |
| 954 WebGestureEvent::Touchscreen); | 953 blink::WebGestureDeviceTouchscreen); |
| 955 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 954 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 956 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 955 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 957 | 956 |
| 958 SimulateGestureEvent(WebInputEvent::GestureShowPress, | 957 SimulateGestureEvent(WebInputEvent::GestureShowPress, |
| 959 WebGestureEvent::Touchscreen); | 958 blink::WebGestureDeviceTouchscreen); |
| 960 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 959 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 961 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 960 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 962 | 961 |
| 963 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, | 962 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, |
| 964 WebGestureEvent::Touchscreen); | 963 blink::WebGestureDeviceTouchscreen); |
| 965 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 964 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 966 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 965 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 967 | 966 |
| 968 SimulateGestureEvent(WebInputEvent::GestureTapCancel, | 967 SimulateGestureEvent(WebInputEvent::GestureTapCancel, |
| 969 WebGestureEvent::Touchscreen); | 968 blink::WebGestureDeviceTouchscreen); |
| 970 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 969 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 971 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 970 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 972 | 971 |
| 973 // Now ack each ack-respecting event. Ack-ignoring events should not be | 972 // Now ack each ack-respecting event. Ack-ignoring events should not be |
| 974 // dispatched until all prior events which observe ack disposition have been | 973 // dispatched until all prior events which observe ack disposition have been |
| 975 // fired, at which point they should be sent immediately. They should also | 974 // fired, at which point they should be sent immediately. They should also |
| 976 // have no effect on the in-flight event count. | 975 // have no effect on the in-flight event count. |
| 977 SendInputEventACK(WebInputEvent::GestureScrollUpdate, | 976 SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
| 978 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 977 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 979 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); | 978 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 990 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 989 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 991 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 990 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 992 EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount()); | 991 EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount()); |
| 993 EXPECT_EQ(0, client_->in_flight_event_count()); | 992 EXPECT_EQ(0, client_->in_flight_event_count()); |
| 994 } | 993 } |
| 995 | 994 |
| 996 // Test that GestureShowPress events don't get out of order due to | 995 // Test that GestureShowPress events don't get out of order due to |
| 997 // ignoring their acks. | 996 // ignoring their acks. |
| 998 TEST_F(InputRouterImplTest, GestureShowPressIsInOrder) { | 997 TEST_F(InputRouterImplTest, GestureShowPressIsInOrder) { |
| 999 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 998 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
| 1000 WebGestureEvent::Touchscreen); | 999 blink::WebGestureDeviceTouchscreen); |
| 1001 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1000 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1002 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1001 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1003 | 1002 |
| 1004 | 1003 |
| 1005 // GesturePinchBegin ignores its ack. | 1004 // GesturePinchBegin ignores its ack. |
| 1006 SimulateGestureEvent(WebInputEvent::GesturePinchBegin, | 1005 SimulateGestureEvent(WebInputEvent::GesturePinchBegin, |
| 1007 WebGestureEvent::Touchscreen); | 1006 blink::WebGestureDeviceTouchscreen); |
| 1008 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1007 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1009 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1008 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1010 | 1009 |
| 1011 // GesturePinchUpdate waits for an ack. | 1010 // GesturePinchUpdate waits for an ack. |
| 1012 // This also verifies that GesturePinchUpdates for touchscreen are sent | 1011 // This also verifies that GesturePinchUpdates for touchscreen are sent |
| 1013 // to the renderer (in contrast to the TrackpadPinchUpdate test). | 1012 // to the renderer (in contrast to the TrackpadPinchUpdate test). |
| 1014 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate, | 1013 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate, |
| 1015 WebGestureEvent::Touchscreen); | 1014 blink::WebGestureDeviceTouchscreen); |
| 1016 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1015 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1017 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 1016 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 1018 | 1017 |
| 1019 SimulateGestureEvent(WebInputEvent::GestureShowPress, | 1018 SimulateGestureEvent(WebInputEvent::GestureShowPress, |
| 1020 WebGestureEvent::Touchscreen); | 1019 blink::WebGestureDeviceTouchscreen); |
| 1021 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1020 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1022 // The ShowPress, though it ignores ack, is still stuck in the queue | 1021 // The ShowPress, though it ignores ack, is still stuck in the queue |
| 1023 // behind the PinchUpdate which requires an ack. | 1022 // behind the PinchUpdate which requires an ack. |
| 1024 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 1023 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 1025 | 1024 |
| 1026 SimulateGestureEvent(WebInputEvent::GestureShowPress, | 1025 SimulateGestureEvent(WebInputEvent::GestureShowPress, |
| 1027 WebGestureEvent::Touchscreen); | 1026 blink::WebGestureDeviceTouchscreen); |
| 1028 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1027 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1029 // ShowPress has entered the queue. | 1028 // ShowPress has entered the queue. |
| 1030 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 1029 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 1031 | 1030 |
| 1032 SendInputEventACK(WebInputEvent::GesturePinchUpdate, | 1031 SendInputEventACK(WebInputEvent::GesturePinchUpdate, |
| 1033 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1032 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1034 // Now that the Tap has been ACKed, the ShowPress events should receive | 1033 // Now that the Tap has been ACKed, the ShowPress events should receive |
| 1035 // synthetic acks, and fire immediately. | 1034 // synthetic acks, and fire immediately. |
| 1036 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); | 1035 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); |
| 1037 EXPECT_EQ(3U, ack_handler_->GetAndResetAckCount()); | 1036 EXPECT_EQ(3U, ack_handler_->GetAndResetAckCount()); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1198 ReleaseTouchPoint(0); | 1197 ReleaseTouchPoint(0); |
| 1199 SendTouchEvent(); | 1198 SendTouchEvent(); |
| 1200 | 1199 |
| 1201 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); | 1200 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1202 SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED); | 1201 SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1203 | 1202 |
| 1204 // Ensure touch action is still none, as the next touch start hasn't been | 1203 // Ensure touch action is still none, as the next touch start hasn't been |
| 1205 // acked yet. ScrollBegin and ScrollEnd don't require acks. | 1204 // acked yet. ScrollBegin and ScrollEnd don't require acks. |
| 1206 EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); | 1205 EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); |
| 1207 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 1206 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
| 1208 WebGestureEvent::Touchscreen); | 1207 blink::WebGestureDeviceTouchscreen); |
| 1209 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1208 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1210 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, | 1209 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
| 1211 WebGestureEvent::Touchscreen); | 1210 blink::WebGestureDeviceTouchscreen); |
| 1212 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1211 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1213 | 1212 |
| 1214 // This allows the next touch sequence to start. | 1213 // This allows the next touch sequence to start. |
| 1215 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); | 1214 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1216 | 1215 |
| 1217 // Ensure touch action has been set to auto, as a new touch sequence has | 1216 // Ensure touch action has been set to auto, as a new touch sequence has |
| 1218 // started. | 1217 // started. |
| 1219 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); | 1218 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1220 SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED); | 1219 SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1221 EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); | 1220 EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); |
| 1222 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 1221 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
| 1223 WebGestureEvent::Touchscreen); | 1222 blink::WebGestureDeviceTouchscreen); |
| 1224 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1223 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1225 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, | 1224 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
| 1226 WebGestureEvent::Touchscreen); | 1225 blink::WebGestureDeviceTouchscreen); |
| 1227 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1226 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1228 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); | 1227 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1229 } | 1228 } |
| 1230 | 1229 |
| 1231 // Test that TouchActionFilter::ResetTouchAction is called when a new touch | 1230 // Test that TouchActionFilter::ResetTouchAction is called when a new touch |
| 1232 // sequence has no consumer. | 1231 // sequence has no consumer. |
| 1233 TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHasNoConsumer) { | 1232 TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHasNoConsumer) { |
| 1234 OnHasTouchEventHandlers(true); | 1233 OnHasTouchEventHandlers(true); |
| 1235 | 1234 |
| 1236 // Sequence 1. | 1235 // Sequence 1. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1250 SendTouchEvent(); | 1249 SendTouchEvent(); |
| 1251 MoveTouchPoint(0, 50, 50); | 1250 MoveTouchPoint(0, 50, 50); |
| 1252 SendTouchEvent(); | 1251 SendTouchEvent(); |
| 1253 ReleaseTouchPoint(0); | 1252 ReleaseTouchPoint(0); |
| 1254 SendTouchEvent(); | 1253 SendTouchEvent(); |
| 1255 | 1254 |
| 1256 // Ensure we have touch-action:none. ScrollBegin and ScrollEnd don't require | 1255 // Ensure we have touch-action:none. ScrollBegin and ScrollEnd don't require |
| 1257 // acks. | 1256 // acks. |
| 1258 EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); | 1257 EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); |
| 1259 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 1258 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
| 1260 WebGestureEvent::Touchscreen); | 1259 blink::WebGestureDeviceTouchscreen); |
| 1261 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1260 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1262 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, | 1261 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
| 1263 WebGestureEvent::Touchscreen); | 1262 blink::WebGestureDeviceTouchscreen); |
| 1264 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1263 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1265 | 1264 |
| 1266 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); | 1265 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1267 SendInputEventACK(WebInputEvent::TouchStart, | 1266 SendInputEventACK(WebInputEvent::TouchStart, |
| 1268 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 1267 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
| 1269 | 1268 |
| 1270 // Ensure touch action has been set to auto, as the touch had no consumer. | 1269 // Ensure touch action has been set to auto, as the touch had no consumer. |
| 1271 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1270 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1272 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 1271 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
| 1273 WebGestureEvent::Touchscreen); | 1272 blink::WebGestureDeviceTouchscreen); |
| 1274 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1273 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1275 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, | 1274 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
| 1276 WebGestureEvent::Touchscreen); | 1275 blink::WebGestureDeviceTouchscreen); |
| 1277 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1276 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1278 } | 1277 } |
| 1279 | 1278 |
| 1280 // Test that TouchActionFilter::ResetTouchAction is called when the touch | 1279 // Test that TouchActionFilter::ResetTouchAction is called when the touch |
| 1281 // handler is removed. | 1280 // handler is removed. |
| 1282 TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHandlerRemoved) { | 1281 TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHandlerRemoved) { |
| 1283 // Touch sequence with touch handler. | 1282 // Touch sequence with touch handler. |
| 1284 OnHasTouchEventHandlers(true); | 1283 OnHasTouchEventHandlers(true); |
| 1285 PressTouchPoint(1, 1); | 1284 PressTouchPoint(1, 1); |
| 1286 SendTouchEvent(); | 1285 SendTouchEvent(); |
| 1287 MoveTouchPoint(0, 50, 50); | 1286 MoveTouchPoint(0, 50, 50); |
| 1288 SendTouchEvent(); | 1287 SendTouchEvent(); |
| 1289 OnSetTouchAction(TOUCH_ACTION_NONE); | 1288 OnSetTouchAction(TOUCH_ACTION_NONE); |
| 1290 ReleaseTouchPoint(0); | 1289 ReleaseTouchPoint(0); |
| 1291 SendTouchEvent(); | 1290 SendTouchEvent(); |
| 1292 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1291 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1293 | 1292 |
| 1294 // Ensure we have touch-action:none, suppressing scroll events. | 1293 // Ensure we have touch-action:none, suppressing scroll events. |
| 1295 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); | 1294 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1296 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1295 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1297 SendInputEventACK(WebInputEvent::TouchMove, | 1296 SendInputEventACK(WebInputEvent::TouchMove, |
| 1298 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1297 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1299 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1298 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1300 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 1299 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
| 1301 WebGestureEvent::Touchscreen); | 1300 blink::WebGestureDeviceTouchscreen); |
| 1302 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1301 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1303 | 1302 |
| 1304 SendInputEventACK(WebInputEvent::TouchEnd, | 1303 SendInputEventACK(WebInputEvent::TouchEnd, |
| 1305 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1304 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1306 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, | 1305 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
| 1307 WebGestureEvent::Touchscreen); | 1306 blink::WebGestureDeviceTouchscreen); |
| 1308 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1307 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1309 | 1308 |
| 1310 // Sequence without a touch handler. Note that in this case, the view may not | 1309 // Sequence without a touch handler. Note that in this case, the view may not |
| 1311 // necessarily forward touches to the router (as no touch handler exists). | 1310 // necessarily forward touches to the router (as no touch handler exists). |
| 1312 OnHasTouchEventHandlers(false); | 1311 OnHasTouchEventHandlers(false); |
| 1313 | 1312 |
| 1314 // Ensure touch action has been set to auto, as the touch handler has been | 1313 // Ensure touch action has been set to auto, as the touch handler has been |
| 1315 // removed. | 1314 // removed. |
| 1316 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 1315 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
| 1317 WebGestureEvent::Touchscreen); | 1316 blink::WebGestureDeviceTouchscreen); |
| 1318 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1317 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1319 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, | 1318 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
| 1320 WebGestureEvent::Touchscreen); | 1319 blink::WebGestureDeviceTouchscreen); |
| 1321 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1320 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1322 } | 1321 } |
| 1323 | 1322 |
| 1324 // Test that the double tap gesture depends on the touch action of the first | 1323 // Test that the double tap gesture depends on the touch action of the first |
| 1325 // tap. | 1324 // tap. |
| 1326 TEST_F(InputRouterImplTest, DoubleTapGestureDependsOnFirstTap) { | 1325 TEST_F(InputRouterImplTest, DoubleTapGestureDependsOnFirstTap) { |
| 1327 OnHasTouchEventHandlers(true); | 1326 OnHasTouchEventHandlers(true); |
| 1328 | 1327 |
| 1329 // Sequence 1. | 1328 // Sequence 1. |
| 1330 PressTouchPoint(1, 1); | 1329 PressTouchPoint(1, 1); |
| 1331 SendTouchEvent(); | 1330 SendTouchEvent(); |
| 1332 OnSetTouchAction(TOUCH_ACTION_NONE); | 1331 OnSetTouchAction(TOUCH_ACTION_NONE); |
| 1333 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); | 1332 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1334 | 1333 |
| 1335 ReleaseTouchPoint(0); | 1334 ReleaseTouchPoint(0); |
| 1336 SendTouchEvent(); | 1335 SendTouchEvent(); |
| 1337 | 1336 |
| 1338 // Sequence 2 | 1337 // Sequence 2 |
| 1339 PressTouchPoint(1, 1); | 1338 PressTouchPoint(1, 1); |
| 1340 SendTouchEvent(); | 1339 SendTouchEvent(); |
| 1341 | 1340 |
| 1342 // First tap. | 1341 // First tap. |
| 1343 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); | 1342 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); |
| 1344 SimulateGestureEvent(WebInputEvent::GestureTapDown, | 1343 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 1345 WebGestureEvent::Touchscreen); | 1344 blink::WebGestureDeviceTouchscreen); |
| 1346 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1345 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1347 | 1346 |
| 1348 // The GestureTapUnconfirmed is converted into a tap, as the touch action is | 1347 // The GestureTapUnconfirmed is converted into a tap, as the touch action is |
| 1349 // none. | 1348 // none. |
| 1350 SimulateGestureEvent(WebInputEvent::GestureTapUnconfirmed, | 1349 SimulateGestureEvent(WebInputEvent::GestureTapUnconfirmed, |
| 1351 WebGestureEvent::Touchscreen); | 1350 blink::WebGestureDeviceTouchscreen); |
| 1352 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1351 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1353 // This test will become invalid if GestureTap stops requiring an ack. | 1352 // This test will become invalid if GestureTap stops requiring an ack. |
| 1354 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( | 1353 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( |
| 1355 GetEventWithType(WebInputEvent::GestureTap))); | 1354 GetEventWithType(WebInputEvent::GestureTap))); |
| 1356 EXPECT_EQ(2, client_->in_flight_event_count()); | 1355 EXPECT_EQ(2, client_->in_flight_event_count()); |
| 1357 SendInputEventACK(WebInputEvent::GestureTap, | 1356 SendInputEventACK(WebInputEvent::GestureTap, |
| 1358 INPUT_EVENT_ACK_STATE_CONSUMED); | 1357 INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1359 EXPECT_EQ(1, client_->in_flight_event_count()); | 1358 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 1360 | 1359 |
| 1361 // This tap gesture is dropped, since the GestureTapUnconfirmed was turned | 1360 // This tap gesture is dropped, since the GestureTapUnconfirmed was turned |
| 1362 // into a tap. | 1361 // into a tap. |
| 1363 SimulateGestureEvent(WebInputEvent::GestureTap, WebGestureEvent::Touchscreen); | 1362 SimulateGestureEvent(WebInputEvent::GestureTap, |
| 1363 blink::WebGestureDeviceTouchscreen); |
| 1364 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1364 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1365 | 1365 |
| 1366 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); | 1366 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1367 SendInputEventACK(WebInputEvent::TouchStart, | 1367 SendInputEventACK(WebInputEvent::TouchStart, |
| 1368 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 1368 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
| 1369 | 1369 |
| 1370 // Second Tap. | 1370 // Second Tap. |
| 1371 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1371 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1372 SimulateGestureEvent(WebInputEvent::GestureTapDown, | 1372 SimulateGestureEvent(WebInputEvent::GestureTapDown, |
| 1373 WebGestureEvent::Touchscreen); | 1373 blink::WebGestureDeviceTouchscreen); |
| 1374 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1374 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1375 | 1375 |
| 1376 // Although the touch-action is now auto, the double tap still won't be | 1376 // Although the touch-action is now auto, the double tap still won't be |
| 1377 // dispatched, because the first tap occured when the touch-action was none. | 1377 // dispatched, because the first tap occured when the touch-action was none. |
| 1378 SimulateGestureEvent(WebInputEvent::GestureDoubleTap, | 1378 SimulateGestureEvent(WebInputEvent::GestureDoubleTap, |
| 1379 WebGestureEvent::Touchscreen); | 1379 blink::WebGestureDeviceTouchscreen); |
| 1380 // This test will become invalid if GestureDoubleTap stops requiring an ack. | 1380 // This test will become invalid if GestureDoubleTap stops requiring an ack. |
| 1381 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( | 1381 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( |
| 1382 GetEventWithType(WebInputEvent::GestureDoubleTap))); | 1382 GetEventWithType(WebInputEvent::GestureDoubleTap))); |
| 1383 EXPECT_EQ(1, client_->in_flight_event_count()); | 1383 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 1384 SendInputEventACK(WebInputEvent::GestureTap, INPUT_EVENT_ACK_STATE_CONSUMED); | 1384 SendInputEventACK(WebInputEvent::GestureTap, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1385 EXPECT_EQ(0, client_->in_flight_event_count()); | 1385 EXPECT_EQ(0, client_->in_flight_event_count()); |
| 1386 } | 1386 } |
| 1387 | 1387 |
| 1388 // Test that the router will call the client's |DidFlush| after all events have | 1388 // Test that the router will call the client's |DidFlush| after all events have |
| 1389 // been dispatched following a call to |Flush|. | 1389 // been dispatched following a call to |Flush|. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1407 SendInputEventACK(WebInputEvent::TouchStart, | 1407 SendInputEventACK(WebInputEvent::TouchStart, |
| 1408 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1408 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1409 EXPECT_EQ(1U, GetAndResetDidFlushCount()); | 1409 EXPECT_EQ(1U, GetAndResetDidFlushCount()); |
| 1410 | 1410 |
| 1411 // Ensure different types of enqueued events will prevent the DidFlush call | 1411 // Ensure different types of enqueued events will prevent the DidFlush call |
| 1412 // until all such events have been fully dispatched. | 1412 // until all such events have been fully dispatched. |
| 1413 MoveTouchPoint(0, 50, 50); | 1413 MoveTouchPoint(0, 50, 50); |
| 1414 SendTouchEvent(); | 1414 SendTouchEvent(); |
| 1415 ASSERT_TRUE(HasPendingEvents()); | 1415 ASSERT_TRUE(HasPendingEvents()); |
| 1416 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 1416 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
| 1417 WebGestureEvent::Touchscreen); | 1417 blink::WebGestureDeviceTouchscreen); |
| 1418 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, | 1418 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, |
| 1419 WebGestureEvent::Touchscreen); | 1419 blink::WebGestureDeviceTouchscreen); |
| 1420 SimulateGestureEvent(WebInputEvent::GesturePinchBegin, | 1420 SimulateGestureEvent(WebInputEvent::GesturePinchBegin, |
| 1421 WebGestureEvent::Touchscreen); | 1421 blink::WebGestureDeviceTouchscreen); |
| 1422 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate, | 1422 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate, |
| 1423 WebGestureEvent::Touchscreen); | 1423 blink::WebGestureDeviceTouchscreen); |
| 1424 Flush(); | 1424 Flush(); |
| 1425 EXPECT_EQ(0U, GetAndResetDidFlushCount()); | 1425 EXPECT_EQ(0U, GetAndResetDidFlushCount()); |
| 1426 | 1426 |
| 1427 // Repeated flush calls should have no effect. | 1427 // Repeated flush calls should have no effect. |
| 1428 Flush(); | 1428 Flush(); |
| 1429 EXPECT_EQ(0U, GetAndResetDidFlushCount()); | 1429 EXPECT_EQ(0U, GetAndResetDidFlushCount()); |
| 1430 | 1430 |
| 1431 // There are still pending gestures. | 1431 // There are still pending gestures. |
| 1432 SendInputEventACK(WebInputEvent::TouchMove, | 1432 SendInputEventACK(WebInputEvent::TouchMove, |
| 1433 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1433 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1446 EXPECT_EQ(1U, GetAndResetDidFlushCount()); | 1446 EXPECT_EQ(1U, GetAndResetDidFlushCount()); |
| 1447 EXPECT_FALSE(HasPendingEvents()); | 1447 EXPECT_FALSE(HasPendingEvents()); |
| 1448 } | 1448 } |
| 1449 | 1449 |
| 1450 // Test that GesturePinchUpdate is handled specially for trackpad | 1450 // Test that GesturePinchUpdate is handled specially for trackpad |
| 1451 TEST_F(InputRouterImplTest, TouchpadPinchUpdate) { | 1451 TEST_F(InputRouterImplTest, TouchpadPinchUpdate) { |
| 1452 // GesturePinchUpdate for trackpad sends synthetic wheel events. | 1452 // GesturePinchUpdate for trackpad sends synthetic wheel events. |
| 1453 // Note that the Touchscreen case is verified as NOT doing this as | 1453 // Note that the Touchscreen case is verified as NOT doing this as |
| 1454 // part of the ShowPressIsInOrder test. | 1454 // part of the ShowPressIsInOrder test. |
| 1455 | 1455 |
| 1456 SimulateGesturePinchUpdateEvent(1.5f, 20, 25, 0, WebGestureEvent::Touchpad); | 1456 SimulateGesturePinchUpdateEvent( |
| 1457 1.5f, 20, 25, 0, blink::WebGestureDeviceTouchpad); |
| 1457 | 1458 |
| 1458 // Verify we actually sent a special wheel event to the renderer. | 1459 // Verify we actually sent a special wheel event to the renderer. |
| 1459 const WebInputEvent* input_event = | 1460 const WebInputEvent* input_event = |
| 1460 GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); | 1461 GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); |
| 1461 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type); | 1462 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type); |
| 1462 const WebMouseWheelEvent* wheel_event = | 1463 const WebMouseWheelEvent* wheel_event = |
| 1463 static_cast<const WebMouseWheelEvent*>(input_event); | 1464 static_cast<const WebMouseWheelEvent*>(input_event); |
| 1464 EXPECT_EQ(20, wheel_event->x); | 1465 EXPECT_EQ(20, wheel_event->x); |
| 1465 EXPECT_EQ(25, wheel_event->y); | 1466 EXPECT_EQ(25, wheel_event->y); |
| 1466 EXPECT_EQ(20, wheel_event->globalX); | 1467 EXPECT_EQ(20, wheel_event->globalX); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1479 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1480 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1480 | 1481 |
| 1481 // Check that the correct unhandled pinch event was received. | 1482 // Check that the correct unhandled pinch event was received. |
| 1482 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1483 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1483 ASSERT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); | 1484 ASSERT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); |
| 1484 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_handler_->ack_state()); | 1485 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_handler_->ack_state()); |
| 1485 EXPECT_EQ(1.5f, ack_handler_->acked_gesture_event().data.pinchUpdate.scale); | 1486 EXPECT_EQ(1.5f, ack_handler_->acked_gesture_event().data.pinchUpdate.scale); |
| 1486 EXPECT_EQ(0, client_->in_flight_event_count()); | 1487 EXPECT_EQ(0, client_->in_flight_event_count()); |
| 1487 | 1488 |
| 1488 // Second a second pinch event. | 1489 // Second a second pinch event. |
| 1489 SimulateGesturePinchUpdateEvent(0.3f, 20, 25, 0, WebGestureEvent::Touchpad); | 1490 SimulateGesturePinchUpdateEvent( |
| 1491 0.3f, 20, 25, 0, blink::WebGestureDeviceTouchpad); |
| 1490 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); | 1492 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); |
| 1491 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type); | 1493 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type); |
| 1492 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event); | 1494 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event); |
| 1493 EXPECT_FLOAT_EQ(PinchScaleToWheelDelta(0.3f), wheel_event->deltaY); | 1495 EXPECT_FLOAT_EQ(PinchScaleToWheelDelta(0.3f), wheel_event->deltaY); |
| 1494 EXPECT_EQ(1, wheel_event->hasPreciseScrollingDeltas); | 1496 EXPECT_EQ(1, wheel_event->hasPreciseScrollingDeltas); |
| 1495 EXPECT_EQ(-1, wheel_event->wheelTicksY); | 1497 EXPECT_EQ(-1, wheel_event->wheelTicksY); |
| 1496 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1498 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1497 | 1499 |
| 1498 // Indicate that the wheel event was handled this time. | 1500 // Indicate that the wheel event was handled this time. |
| 1499 SendInputEventACK(WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED); | 1501 SendInputEventACK(WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1500 | 1502 |
| 1501 // Check that the correct HANDLED pinch event was received. | 1503 // Check that the correct HANDLED pinch event was received. |
| 1502 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1504 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1503 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); | 1505 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); |
| 1504 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, ack_handler_->ack_state()); | 1506 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, ack_handler_->ack_state()); |
| 1505 EXPECT_FLOAT_EQ(0.3f, | 1507 EXPECT_FLOAT_EQ(0.3f, |
| 1506 ack_handler_->acked_gesture_event().data.pinchUpdate.scale); | 1508 ack_handler_->acked_gesture_event().data.pinchUpdate.scale); |
| 1507 } | 1509 } |
| 1508 | 1510 |
| 1509 // Test that touchpad pinch events are coalesced property, with their synthetic | 1511 // Test that touchpad pinch events are coalesced property, with their synthetic |
| 1510 // wheel events getting the right ACKs. | 1512 // wheel events getting the right ACKs. |
| 1511 TEST_F(InputRouterImplTest, TouchpadPinchCoalescing) { | 1513 TEST_F(InputRouterImplTest, TouchpadPinchCoalescing) { |
| 1512 // Send the first pinch. | 1514 // Send the first pinch. |
| 1513 SimulateGesturePinchUpdateEvent(1.5f, 20, 25, 0, WebGestureEvent::Touchpad); | 1515 SimulateGesturePinchUpdateEvent( |
| 1516 1.5f, 20, 25, 0, blink::WebGestureDeviceTouchpad); |
| 1514 | 1517 |
| 1515 // Verify we sent the wheel event to the renderer. | 1518 // Verify we sent the wheel event to the renderer. |
| 1516 const WebInputEvent* input_event = | 1519 const WebInputEvent* input_event = |
| 1517 GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); | 1520 GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); |
| 1518 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type); | 1521 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type); |
| 1519 const WebMouseWheelEvent* wheel_event = | 1522 const WebMouseWheelEvent* wheel_event = |
| 1520 static_cast<const WebMouseWheelEvent*>(input_event); | 1523 static_cast<const WebMouseWheelEvent*>(input_event); |
| 1521 EXPECT_EQ(PinchScaleToWheelDelta(1.5f), wheel_event->deltaY); | 1524 EXPECT_EQ(PinchScaleToWheelDelta(1.5f), wheel_event->deltaY); |
| 1522 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1525 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1523 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 1526 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 1524 EXPECT_EQ(1, client_->in_flight_event_count()); | 1527 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 1525 | 1528 |
| 1526 // Send a second pinch, this should be queued in the GestureEventQueue. | 1529 // Send a second pinch, this should be queued in the GestureEventQueue. |
| 1527 SimulateGesturePinchUpdateEvent(1.6f, 20, 25, 0, WebGestureEvent::Touchpad); | 1530 SimulateGesturePinchUpdateEvent( |
| 1531 1.6f, 20, 25, 0, blink::WebGestureDeviceTouchpad); |
| 1528 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1532 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1529 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 1533 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 1530 | 1534 |
| 1531 // Send a third pinch, this should be coalesced into the second in the | 1535 // Send a third pinch, this should be coalesced into the second in the |
| 1532 // GestureEventQueue. | 1536 // GestureEventQueue. |
| 1533 SimulateGesturePinchUpdateEvent(1.7f, 20, 25, 0, WebGestureEvent::Touchpad); | 1537 SimulateGesturePinchUpdateEvent( |
| 1538 1.7f, 20, 25, 0, blink::WebGestureDeviceTouchpad); |
| 1534 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1539 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1535 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 1540 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 1536 | 1541 |
| 1537 // Indicate that the first wheel event was unhandled and verify the ACK. | 1542 // Indicate that the first wheel event was unhandled and verify the ACK. |
| 1538 SendInputEventACK(WebInputEvent::MouseWheel, | 1543 SendInputEventACK(WebInputEvent::MouseWheel, |
| 1539 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1544 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1540 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1545 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1541 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); | 1546 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); |
| 1542 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_handler_->ack_state()); | 1547 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_handler_->ack_state()); |
| 1543 EXPECT_EQ(1.5f, ack_handler_->acked_gesture_event().data.pinchUpdate.scale); | 1548 EXPECT_EQ(1.5f, ack_handler_->acked_gesture_event().data.pinchUpdate.scale); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1575 | 1580 |
| 1576 // Event 1: sent directly. | 1581 // Event 1: sent directly. |
| 1577 SimulateWheelEvent(0, -5, mod, true); | 1582 SimulateWheelEvent(0, -5, mod, true); |
| 1578 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1583 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1579 | 1584 |
| 1580 // Event 2: enqueued in InputRouter. | 1585 // Event 2: enqueued in InputRouter. |
| 1581 SimulateWheelEvent(0, -10, mod, true); | 1586 SimulateWheelEvent(0, -10, mod, true); |
| 1582 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1587 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1583 | 1588 |
| 1584 // Event 3: enqueued in InputRouter, not coalesced into #2. | 1589 // Event 3: enqueued in InputRouter, not coalesced into #2. |
| 1585 SimulateGesturePinchUpdateEvent(1.5f, 20, 25, 0, WebGestureEvent::Touchpad); | 1590 SimulateGesturePinchUpdateEvent( |
| 1591 1.5f, 20, 25, 0, blink::WebGestureDeviceTouchpad); |
| 1586 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1592 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1587 | 1593 |
| 1588 // Event 4: enqueued in GestureEventQueue. | 1594 // Event 4: enqueued in GestureEventQueue. |
| 1589 SimulateGesturePinchUpdateEvent(1.2f, 20, 25, 0, WebGestureEvent::Touchpad); | 1595 SimulateGesturePinchUpdateEvent( |
| 1596 1.2f, 20, 25, 0, blink::WebGestureDeviceTouchpad); |
| 1590 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1597 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1591 | 1598 |
| 1592 // Event 5: coalesced into wheel event for #3. | 1599 // Event 5: coalesced into wheel event for #3. |
| 1593 SimulateWheelEvent(2, 0, mod, true); | 1600 SimulateWheelEvent(2, 0, mod, true); |
| 1594 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1601 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1595 | 1602 |
| 1596 // Send ack for #1. | 1603 // Send ack for #1. |
| 1597 SendInputEventACK(WebInputEvent::MouseWheel, | 1604 SendInputEventACK(WebInputEvent::MouseWheel, |
| 1598 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1605 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1599 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1606 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1647 SendInputEventACK(WebInputEvent::MouseWheel, | 1654 SendInputEventACK(WebInputEvent::MouseWheel, |
| 1648 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1655 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1649 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1656 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1650 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); | 1657 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); |
| 1651 } | 1658 } |
| 1652 | 1659 |
| 1653 // Test proper handling of touchpad Gesture{Pinch,Scroll}Update sequences. | 1660 // Test proper handling of touchpad Gesture{Pinch,Scroll}Update sequences. |
| 1654 TEST_F(InputRouterImplTest, TouchpadPinchAndScrollUpdate) { | 1661 TEST_F(InputRouterImplTest, TouchpadPinchAndScrollUpdate) { |
| 1655 // The first scroll should be sent immediately. | 1662 // The first scroll should be sent immediately. |
| 1656 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, | 1663 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, |
| 1657 WebGestureEvent::Touchpad); | 1664 blink::WebGestureDeviceTouchpad); |
| 1658 ASSERT_EQ(1U, GetSentMessageCountAndResetSink()); | 1665 ASSERT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1659 EXPECT_EQ(1, client_->in_flight_event_count()); | 1666 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 1660 | 1667 |
| 1661 // Subsequent scroll and pinch events should remain queued, coalescing as | 1668 // Subsequent scroll and pinch events should remain queued, coalescing as |
| 1662 // more trackpad events arrive. | 1669 // more trackpad events arrive. |
| 1663 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate, | 1670 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate, |
| 1664 WebGestureEvent::Touchpad); | 1671 blink::WebGestureDeviceTouchpad); |
| 1665 ASSERT_EQ(0U, GetSentMessageCountAndResetSink()); | 1672 ASSERT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1666 EXPECT_EQ(1, client_->in_flight_event_count()); | 1673 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 1667 | 1674 |
| 1668 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, | 1675 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, |
| 1669 WebGestureEvent::Touchpad); | 1676 blink::WebGestureDeviceTouchpad); |
| 1670 ASSERT_EQ(0U, GetSentMessageCountAndResetSink()); | 1677 ASSERT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1671 EXPECT_EQ(1, client_->in_flight_event_count()); | 1678 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 1672 | 1679 |
| 1673 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate, | 1680 SimulateGestureEvent(WebInputEvent::GesturePinchUpdate, |
| 1674 WebGestureEvent::Touchpad); | 1681 blink::WebGestureDeviceTouchpad); |
| 1675 ASSERT_EQ(0U, GetSentMessageCountAndResetSink()); | 1682 ASSERT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1676 EXPECT_EQ(1, client_->in_flight_event_count()); | 1683 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 1677 | 1684 |
| 1678 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, | 1685 SimulateGestureEvent(WebInputEvent::GestureScrollUpdate, |
| 1679 WebGestureEvent::Touchpad); | 1686 blink::WebGestureDeviceTouchpad); |
| 1680 ASSERT_EQ(0U, GetSentMessageCountAndResetSink()); | 1687 ASSERT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1681 EXPECT_EQ(1, client_->in_flight_event_count()); | 1688 EXPECT_EQ(1, client_->in_flight_event_count()); |
| 1682 | 1689 |
| 1683 // Ack'ing the first scroll should trigger both the coalesced scroll and the | 1690 // Ack'ing the first scroll should trigger both the coalesced scroll and the |
| 1684 // coalesced pinch events (which is sent to the renderer as a wheel event). | 1691 // coalesced pinch events (which is sent to the renderer as a wheel event). |
| 1685 SendInputEventACK(WebInputEvent::GestureScrollUpdate, | 1692 SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
| 1686 INPUT_EVENT_ACK_STATE_CONSUMED); | 1693 INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1687 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1694 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1688 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); | 1695 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); |
| 1689 EXPECT_EQ(2, client_->in_flight_event_count()); | 1696 EXPECT_EQ(2, client_->in_flight_event_count()); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1734 client_overscroll = client_->GetAndResetOverscroll(); | 1741 client_overscroll = client_->GetAndResetOverscroll(); |
| 1735 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, | 1742 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, |
| 1736 client_overscroll.accumulated_overscroll); | 1743 client_overscroll.accumulated_overscroll); |
| 1737 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, | 1744 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, |
| 1738 client_overscroll.latest_overscroll_delta); | 1745 client_overscroll.latest_overscroll_delta); |
| 1739 EXPECT_EQ(wheel_overscroll.current_fling_velocity, | 1746 EXPECT_EQ(wheel_overscroll.current_fling_velocity, |
| 1740 client_overscroll.current_fling_velocity); | 1747 client_overscroll.current_fling_velocity); |
| 1741 } | 1748 } |
| 1742 | 1749 |
| 1743 } // namespace content | 1750 } // namespace content |
| OLD | NEW |