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

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: Use queue to store the IDs for sent async touchmove 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 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 ack_handler_.reset(new MockInputAckHandler()); 148 ack_handler_.reset(new MockInputAckHandler());
149 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 149 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
150 command_line->AppendSwitch(switches::kValidateInputEventStream); 150 command_line->AppendSwitch(switches::kValidateInputEventStream);
151 input_router_.reset(new InputRouterImpl(process_.get(), 151 input_router_.reset(new InputRouterImpl(process_.get(),
152 client_.get(), 152 client_.get(),
153 ack_handler_.get(), 153 ack_handler_.get(),
154 MSG_ROUTING_NONE, 154 MSG_ROUTING_NONE,
155 config_)); 155 config_));
156 client_->set_input_router(input_router()); 156 client_->set_input_router(input_router());
157 ack_handler_->set_input_router(input_router()); 157 ack_handler_->set_input_router(input_router());
158 sent_events_ids_.clear();
159 all_sent_events_ids_.clear();
158 } 160 }
159 161
160 void TearDown() override { 162 void TearDown() override {
161 // Process all pending tasks to avoid leaks. 163 // Process all pending tasks to avoid leaks.
162 base::MessageLoop::current()->RunUntilIdle(); 164 base::MessageLoop::current()->RunUntilIdle();
163 165
164 input_router_.reset(); 166 input_router_.reset();
165 client_.reset(); 167 client_.reset();
166 process_.reset(); 168 process_.reset();
167 browser_context_.reset(); 169 browser_context_.reset();
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 velocity_x, velocity_y, source_device)); 245 velocity_x, velocity_y, source_device));
244 } 246 }
245 247
246 void SetTouchTimestamp(base::TimeDelta timestamp) { 248 void SetTouchTimestamp(base::TimeDelta timestamp) {
247 touch_event_.SetTimestamp(timestamp); 249 touch_event_.SetTimestamp(timestamp);
248 } 250 }
249 251
250 void SendTouchEvent() { 252 void SendTouchEvent() {
251 input_router_->SendTouchEvent(TouchEventWithLatencyInfo(touch_event_)); 253 input_router_->SendTouchEvent(TouchEventWithLatencyInfo(touch_event_));
252 touch_event_.ResetPoints(); 254 touch_event_.ResetPoints();
255 SetLastEventID();
253 } 256 }
254 257
255 int PressTouchPoint(int x, int y) { 258 int PressTouchPoint(int x, int y) {
256 return touch_event_.PressPoint(x, y); 259 return touch_event_.PressPoint(x, y);
257 } 260 }
258 261
259 void MoveTouchPoint(int index, int x, int y) { 262 void MoveTouchPoint(int index, int x, int y) {
260 touch_event_.MovePoint(index, x, y); 263 touch_event_.MovePoint(index, x, y);
261 } 264 }
262 265
263 void ReleaseTouchPoint(int index) { 266 void ReleaseTouchPoint(int index) {
264 touch_event_.ReleasePoint(index); 267 touch_event_.ReleasePoint(index);
265 } 268 }
266 269
267 void CancelTouchPoint(int index) { 270 void CancelTouchPoint(int index) {
268 touch_event_.CancelPoint(index); 271 touch_event_.CancelPoint(index);
269 } 272 }
270 273
271 void SendInputEventACK(blink::WebInputEvent::Type type, 274 void SendInputEventACK(blink::WebInputEvent::Type type,
272 InputEventAckState ack_result) { 275 InputEventAckState ack_result) {
273 InputHostMsg_HandleInputEvent_ACK_Params ack; 276 InputHostMsg_HandleInputEvent_ACK_Params ack;
274 ack.type = type; 277 ack.type = type;
275 ack.state = ack_result; 278 ack.state = ack_result;
279 if (WebInputEvent::isTouchEventType(type)) {
280 DCHECK(!sent_events_ids_.empty());
281 ack.unique_touch_event_id = sent_events_ids_.front();
282 sent_events_ids_.pop_front();
283 }
276 input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack)); 284 input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
285 SetLastEventID();
277 } 286 }
278 287
279 void NotifyDidStopFlinging() { 288 void NotifyDidStopFlinging() {
280 input_router_->OnMessageReceived(InputHostMsg_DidStopFlinging(0)); 289 input_router_->OnMessageReceived(InputHostMsg_DidStopFlinging(0));
281 } 290 }
282 291
283 InputRouterImpl* input_router() const { 292 InputRouterImpl* input_router() const {
284 return input_router_.get(); 293 return input_router_.get();
285 } 294 }
286 295
(...skipping 26 matching lines...) Expand all
313 input_router_->OnMessageReceived( 322 input_router_->OnMessageReceived(
314 InputHostMsg_SetTouchAction(0, touch_action)); 323 InputHostMsg_SetTouchAction(0, touch_action));
315 } 324 }
316 325
317 size_t GetSentMessageCountAndResetSink() { 326 size_t GetSentMessageCountAndResetSink() {
318 size_t count = process_->sink().message_count(); 327 size_t count = process_->sink().message_count();
319 process_->sink().ClearMessages(); 328 process_->sink().ClearMessages();
320 return count; 329 return count;
321 } 330 }
322 331
332 bool TouchEventCancelable() { return touch_event_.cancelable; }
333
334 void SetLastEventID() {
335 size_t count = process_->sink().message_count();
336 for (size_t i = 0; i < count; ++i) {
337 const WebInputEvent* input_event =
338 GetInputEventFromMessage(*process_->sink().GetMessageAt(i));
339 uint32 id = WebInputEventTraits::GetUniqueTouchEventId(*input_event);
340 if (id != 0 &&
341 all_sent_events_ids_.find(id) == all_sent_events_ids_.end()) {
342 sent_events_ids_.push_back(id);
343 all_sent_events_ids_.insert(id);
344 }
345 }
346 }
347
323 static void RunTasksAndWait(base::TimeDelta delay) { 348 static void RunTasksAndWait(base::TimeDelta delay) {
324 base::MessageLoop::current()->PostDelayedTask( 349 base::MessageLoop::current()->PostDelayedTask(
325 FROM_HERE, base::MessageLoop::QuitClosure(), delay); 350 FROM_HERE, base::MessageLoop::QuitClosure(), delay);
326 base::MessageLoop::current()->Run(); 351 base::MessageLoop::current()->Run();
327 } 352 }
328 353
329 InputRouterImpl::Config config_; 354 InputRouterImpl::Config config_;
330 scoped_ptr<MockRenderProcessHost> process_; 355 scoped_ptr<MockRenderProcessHost> process_;
331 scoped_ptr<MockInputRouterClient> client_; 356 scoped_ptr<MockInputRouterClient> client_;
332 scoped_ptr<MockInputAckHandler> ack_handler_; 357 scoped_ptr<MockInputAckHandler> ack_handler_;
333 scoped_ptr<InputRouterImpl> input_router_; 358 scoped_ptr<InputRouterImpl> input_router_;
334 359
335 private: 360 private:
336 base::MessageLoopForUI message_loop_; 361 base::MessageLoopForUI message_loop_;
337 SyntheticWebTouchEvent touch_event_; 362 SyntheticWebTouchEvent touch_event_;
338 363
339 scoped_ptr<TestBrowserContext> browser_context_; 364 scoped_ptr<TestBrowserContext> browser_context_;
365 std::deque<uint32> sent_events_ids_;
366 std::set<uint32> all_sent_events_ids_;
340 }; 367 };
341 368
342 TEST_F(InputRouterImplTest, CoalescesRangeSelection) { 369 TEST_F(InputRouterImplTest, CoalescesRangeSelection) {
343 input_router_->SendInput(scoped_ptr<IPC::Message>( 370 input_router_->SendInput(scoped_ptr<IPC::Message>(
344 new InputMsg_SelectRange(0, gfx::Point(1, 2), gfx::Point(3, 4)))); 371 new InputMsg_SelectRange(0, gfx::Point(1, 2), gfx::Point(3, 4))));
345 ExpectIPCMessageWithArg2<InputMsg_SelectRange>( 372 ExpectIPCMessageWithArg2<InputMsg_SelectRange>(
346 process_->sink().GetMessageAt(0), 373 process_->sink().GetMessageAt(0),
347 gfx::Point(1, 2), 374 gfx::Point(1, 2),
348 gfx::Point(3, 4)); 375 gfx::Point(3, 4));
349 EXPECT_EQ(1u, GetSentMessageCountAndResetSink()); 376 EXPECT_EQ(1u, GetSentMessageCountAndResetSink());
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 InputMsg_HandleInputEvent::ID)); 981 InputMsg_HandleInputEvent::ID));
955 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 982 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
956 983
957 // Check that the correct unhandled wheel event was received. 984 // Check that the correct unhandled wheel event was received.
958 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5); 985 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5);
959 } 986 }
960 987
961 TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) { 988 TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) {
962 OnHasTouchEventHandlers(true); 989 OnHasTouchEventHandlers(true);
963 // Only acks for TouchCancel should always be ignored. 990 // Only acks for TouchCancel should always be ignored.
964 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 991 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
965 GetEventWithType(WebInputEvent::TouchStart))); 992 GetEventWithType(WebInputEvent::TouchStart)));
966 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 993 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
967 GetEventWithType(WebInputEvent::TouchMove))); 994 GetEventWithType(WebInputEvent::TouchMove)));
968 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 995 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
969 GetEventWithType(WebInputEvent::TouchEnd))); 996 GetEventWithType(WebInputEvent::TouchEnd)));
970 997
971 // Precede the TouchCancel with an appropriate TouchStart; 998 // Precede the TouchCancel with an appropriate TouchStart;
972 PressTouchPoint(1, 1); 999 PressTouchPoint(1, 1);
973 SendTouchEvent(); 1000 SendTouchEvent();
974 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 1001 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
975 ASSERT_EQ(1U, GetSentMessageCountAndResetSink()); 1002 ASSERT_EQ(1U, GetSentMessageCountAndResetSink());
976 ASSERT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1003 ASSERT_EQ(1U, ack_handler_->GetAndResetAckCount());
977 ASSERT_EQ(0, client_->in_flight_event_count()); 1004 ASSERT_EQ(0, client_->in_flight_event_count());
978 1005
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1017 WebInputEvent::GestureTapCancel, 1044 WebInputEvent::GestureTapCancel,
1018 WebInputEvent::GestureScrollBegin, 1045 WebInputEvent::GestureScrollBegin,
1019 WebInputEvent::GestureScrollUpdate, 1046 WebInputEvent::GestureScrollUpdate,
1020 WebInputEvent::GesturePinchBegin, 1047 WebInputEvent::GesturePinchBegin,
1021 WebInputEvent::GesturePinchUpdate, 1048 WebInputEvent::GesturePinchUpdate,
1022 WebInputEvent::GesturePinchEnd, 1049 WebInputEvent::GesturePinchEnd,
1023 WebInputEvent::GestureScrollEnd}; 1050 WebInputEvent::GestureScrollEnd};
1024 for (size_t i = 0; i < arraysize(eventTypes); ++i) { 1051 for (size_t i = 0; i < arraysize(eventTypes); ++i) {
1025 WebInputEvent::Type type = eventTypes[i]; 1052 WebInputEvent::Type type = eventTypes[i];
1026 SCOPED_TRACE(WebInputEventTraits::GetName(type)); 1053 SCOPED_TRACE(WebInputEventTraits::GetName(type));
1027 if (!WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type))) { 1054 if (WebInputEventTraits::WillReceiveAckFromRenderer(
1055 GetEventWithType(type))) {
1028 SimulateGestureEvent(type, blink::WebGestureDeviceTouchscreen); 1056 SimulateGestureEvent(type, blink::WebGestureDeviceTouchscreen);
1029 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1057 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1030 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1058 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
1031 EXPECT_EQ(1, client_->in_flight_event_count()); 1059 EXPECT_EQ(1, client_->in_flight_event_count());
1032 EXPECT_TRUE(HasPendingEvents()); 1060 EXPECT_TRUE(HasPendingEvents());
1033 1061
1034 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_CONSUMED); 1062 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_CONSUMED);
1035 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1063 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1036 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1064 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1037 EXPECT_EQ(0, client_->in_flight_event_count()); 1065 EXPECT_EQ(0, client_->in_flight_event_count());
(...skipping 18 matching lines...) Expand all
1056 } 1084 }
1057 } 1085 }
1058 1086
1059 TEST_F(InputRouterImplTest, MouseTypesIgnoringAck) { 1087 TEST_F(InputRouterImplTest, MouseTypesIgnoringAck) {
1060 int start_type = static_cast<int>(WebInputEvent::MouseDown); 1088 int start_type = static_cast<int>(WebInputEvent::MouseDown);
1061 int end_type = static_cast<int>(WebInputEvent::ContextMenu); 1089 int end_type = static_cast<int>(WebInputEvent::ContextMenu);
1062 ASSERT_LT(start_type, end_type); 1090 ASSERT_LT(start_type, end_type);
1063 for (int i = start_type; i <= end_type; ++i) { 1091 for (int i = start_type; i <= end_type; ++i) {
1064 WebInputEvent::Type type = static_cast<WebInputEvent::Type>(i); 1092 WebInputEvent::Type type = static_cast<WebInputEvent::Type>(i);
1065 int expected_in_flight_event_count = 1093 int expected_in_flight_event_count =
1066 WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type)) ? 0 1094 !WebInputEventTraits::WillReceiveAckFromRenderer(GetEventWithType(type))
1067 : 1; 1095 ? 0
1096 : 1;
1068 1097
1069 // Note: Mouse event acks are never forwarded to the ack handler, so the key 1098 // Note: Mouse event acks are never forwarded to the ack handler, so the key
1070 // result here is that ignored ack types don't affect the in-flight count. 1099 // result here is that ignored ack types don't affect the in-flight count.
1071 SimulateMouseEvent(type, 0, 0); 1100 SimulateMouseEvent(type, 0, 0);
1072 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1101 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1073 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1102 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
1074 EXPECT_EQ(expected_in_flight_event_count, client_->in_flight_event_count()); 1103 EXPECT_EQ(expected_in_flight_event_count, client_->in_flight_event_count());
1075 if (expected_in_flight_event_count) { 1104 if (expected_in_flight_event_count) {
1076 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1105 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1077 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1106 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1078 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); 1107 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
1079 EXPECT_EQ(0, client_->in_flight_event_count()); 1108 EXPECT_EQ(0, client_->in_flight_event_count());
1080 } 1109 }
1081 } 1110 }
1082 } 1111 }
1083 1112
1084 // Guard against breaking changes to the list of ignored event ack types in 1113 // Guard against breaking changes to the list of ignored event ack types in
1085 // |WebInputEventTraits::IgnoresAckDisposition|. 1114 // |WebInputEventTraits::WillReceiveAckFromRenderer|.
1086 TEST_F(InputRouterImplTest, RequiredEventAckTypes) { 1115 TEST_F(InputRouterImplTest, RequiredEventAckTypes) {
1087 const WebInputEvent::Type kRequiredEventAckTypes[] = { 1116 const WebInputEvent::Type kRequiredEventAckTypes[] = {
1088 WebInputEvent::MouseMove, 1117 WebInputEvent::MouseMove,
1089 WebInputEvent::MouseWheel, 1118 WebInputEvent::MouseWheel,
1090 WebInputEvent::RawKeyDown, 1119 WebInputEvent::RawKeyDown,
1091 WebInputEvent::KeyDown, 1120 WebInputEvent::KeyDown,
1092 WebInputEvent::KeyUp, 1121 WebInputEvent::KeyUp,
1093 WebInputEvent::Char, 1122 WebInputEvent::Char,
1094 WebInputEvent::GestureScrollUpdate, 1123 WebInputEvent::GestureScrollUpdate,
1095 WebInputEvent::GestureFlingStart, 1124 WebInputEvent::GestureFlingStart,
1096 WebInputEvent::GestureFlingCancel, 1125 WebInputEvent::GestureFlingCancel,
1097 WebInputEvent::GesturePinchUpdate, 1126 WebInputEvent::GesturePinchUpdate,
1098 WebInputEvent::TouchStart, 1127 WebInputEvent::TouchStart,
1099 WebInputEvent::TouchMove 1128 WebInputEvent::TouchMove
1100 }; 1129 };
1101 for (size_t i = 0; i < arraysize(kRequiredEventAckTypes); ++i) { 1130 for (size_t i = 0; i < arraysize(kRequiredEventAckTypes); ++i) {
1102 const WebInputEvent::Type required_ack_type = kRequiredEventAckTypes[i]; 1131 const WebInputEvent::Type required_ack_type = kRequiredEventAckTypes[i];
1103 EXPECT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 1132 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
1104 GetEventWithType(required_ack_type))); 1133 GetEventWithType(required_ack_type)));
1105 } 1134 }
1106 } 1135 }
1107 1136
1108 // Test that GestureShowPress, GestureTapDown and GestureTapCancel events don't 1137 // Test that GestureShowPress, GestureTapDown and GestureTapCancel events don't
1109 // wait for ACKs. 1138 // wait for ACKs.
1110 TEST_F(InputRouterImplTest, GestureTypesIgnoringAckInterleaved) { 1139 TEST_F(InputRouterImplTest, GestureTypesIgnoringAckInterleaved) {
1111 // Interleave a few events that do and do not ignore acks, ensuring that 1140 // Interleave a few events that do and do not ignore acks, ensuring that
1112 // ack-ignoring events aren't dispatched until all prior events which observe 1141 // ack-ignoring events aren't dispatched until all prior events which observe
1113 // their ack disposition have been dispatched. 1142 // their ack disposition have been dispatched.
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
1511 SimulateGestureEvent(WebInputEvent::GestureTapDown, 1540 SimulateGestureEvent(WebInputEvent::GestureTapDown,
1512 blink::WebGestureDeviceTouchscreen); 1541 blink::WebGestureDeviceTouchscreen);
1513 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1542 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1514 1543
1515 // The GestureTapUnconfirmed is converted into a tap, as the touch action is 1544 // The GestureTapUnconfirmed is converted into a tap, as the touch action is
1516 // none. 1545 // none.
1517 SimulateGestureEvent(WebInputEvent::GestureTapUnconfirmed, 1546 SimulateGestureEvent(WebInputEvent::GestureTapUnconfirmed,
1518 blink::WebGestureDeviceTouchscreen); 1547 blink::WebGestureDeviceTouchscreen);
1519 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1548 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1520 // This test will become invalid if GestureTap stops requiring an ack. 1549 // This test will become invalid if GestureTap stops requiring an ack.
1521 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 1550 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
1522 GetEventWithType(WebInputEvent::GestureTap))); 1551 GetEventWithType(WebInputEvent::GestureTap)));
1523 EXPECT_EQ(2, client_->in_flight_event_count()); 1552 EXPECT_EQ(2, client_->in_flight_event_count());
1524 SendInputEventACK(WebInputEvent::GestureTap, 1553 SendInputEventACK(WebInputEvent::GestureTap,
1525 INPUT_EVENT_ACK_STATE_CONSUMED); 1554 INPUT_EVENT_ACK_STATE_CONSUMED);
1526 EXPECT_EQ(1, client_->in_flight_event_count()); 1555 EXPECT_EQ(1, client_->in_flight_event_count());
1527 1556
1528 // This tap gesture is dropped, since the GestureTapUnconfirmed was turned 1557 // This tap gesture is dropped, since the GestureTapUnconfirmed was turned
1529 // into a tap. 1558 // into a tap.
1530 SimulateGestureEvent(WebInputEvent::GestureTap, 1559 SimulateGestureEvent(WebInputEvent::GestureTap,
1531 blink::WebGestureDeviceTouchscreen); 1560 blink::WebGestureDeviceTouchscreen);
1532 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1561 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1533 1562
1534 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); 1563 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
1535 SendInputEventACK(WebInputEvent::TouchStart, 1564 SendInputEventACK(WebInputEvent::TouchStart,
1536 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 1565 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
1537 1566
1538 // Second Tap. 1567 // Second Tap.
1539 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1568 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1540 SimulateGestureEvent(WebInputEvent::GestureTapDown, 1569 SimulateGestureEvent(WebInputEvent::GestureTapDown,
1541 blink::WebGestureDeviceTouchscreen); 1570 blink::WebGestureDeviceTouchscreen);
1542 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1571 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1543 1572
1544 // Although the touch-action is now auto, the double tap still won't be 1573 // Although the touch-action is now auto, the double tap still won't be
1545 // dispatched, because the first tap occured when the touch-action was none. 1574 // dispatched, because the first tap occured when the touch-action was none.
1546 SimulateGestureEvent(WebInputEvent::GestureDoubleTap, 1575 SimulateGestureEvent(WebInputEvent::GestureDoubleTap,
1547 blink::WebGestureDeviceTouchscreen); 1576 blink::WebGestureDeviceTouchscreen);
1548 // This test will become invalid if GestureDoubleTap stops requiring an ack. 1577 // This test will become invalid if GestureDoubleTap stops requiring an ack.
1549 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( 1578 ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
1550 GetEventWithType(WebInputEvent::GestureDoubleTap))); 1579 GetEventWithType(WebInputEvent::GestureDoubleTap)));
1551 EXPECT_EQ(1, client_->in_flight_event_count()); 1580 EXPECT_EQ(1, client_->in_flight_event_count());
1552 SendInputEventACK(WebInputEvent::GestureTap, INPUT_EVENT_ACK_STATE_CONSUMED); 1581 SendInputEventACK(WebInputEvent::GestureTap, INPUT_EVENT_ACK_STATE_CONSUMED);
1553 EXPECT_EQ(0, client_->in_flight_event_count()); 1582 EXPECT_EQ(0, client_->in_flight_event_count());
1554 } 1583 }
1555 1584
1556 // Test that the router will call the client's |DidFlush| after all events have 1585 // Test that the router will call the client's |DidFlush| after all events have
1557 // been dispatched following a call to |Flush|. 1586 // been dispatched following a call to |Flush|.
1558 TEST_F(InputRouterImplTest, InputFlush) { 1587 TEST_F(InputRouterImplTest, InputFlush) {
1559 EXPECT_FALSE(HasPendingEvents()); 1588 EXPECT_FALSE(HasPendingEvents());
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1794 client_overscroll = client_->GetAndResetOverscroll(); 1823 client_overscroll = client_->GetAndResetOverscroll();
1795 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, 1824 EXPECT_EQ(wheel_overscroll.accumulated_overscroll,
1796 client_overscroll.accumulated_overscroll); 1825 client_overscroll.accumulated_overscroll);
1797 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, 1826 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta,
1798 client_overscroll.latest_overscroll_delta); 1827 client_overscroll.latest_overscroll_delta);
1799 EXPECT_EQ(wheel_overscroll.current_fling_velocity, 1828 EXPECT_EQ(wheel_overscroll.current_fling_velocity,
1800 client_overscroll.current_fling_velocity); 1829 client_overscroll.current_fling_velocity);
1801 } 1830 }
1802 1831
1803 } // namespace content 1832 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698