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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/input/input_router_impl_unittest.cc
diff --git a/content/browser/renderer_host/input/input_router_impl_unittest.cc b/content/browser/renderer_host/input/input_router_impl_unittest.cc
index 90ece24297b6a576d8001d00dcc9da431076ea42..d212442a6ef4c3659398f2b67a37c980c8ff902a 100644
--- a/content/browser/renderer_host/input/input_router_impl_unittest.cc
+++ b/content/browser/renderer_host/input/input_router_impl_unittest.cc
@@ -247,9 +247,11 @@ class InputRouterImplTest : public testing::Test {
touch_event_.SetTimestamp(timestamp);
}
- void SendTouchEvent() {
+ uint32 SendTouchEvent() {
+ uint32 touch_event_id = touch_event_.uniqueTouchEventId;
input_router_->SendTouchEvent(TouchEventWithLatencyInfo(touch_event_));
touch_event_.ResetPoints();
+ return touch_event_id;
}
int PressTouchPoint(int x, int y) {
@@ -270,9 +272,16 @@ class InputRouterImplTest : public testing::Test {
void SendInputEventACK(blink::WebInputEvent::Type type,
InputEventAckState ack_result) {
- InputHostMsg_HandleInputEvent_ACK_Params ack;
- ack.type = type;
- ack.state = ack_result;
+ DCHECK(!WebInputEvent::isTouchEventType(type));
+ InputEventAck ack(type, ack_result);
+ input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
+ }
+
+ void SendTouchEventACK(blink::WebInputEvent::Type type,
+ InputEventAckState ack_result,
+ uint32 touch_event_id) {
+ DCHECK(WebInputEvent::isTouchEventType(type));
+ InputEventAck ack(type, ack_result, touch_event_id);
input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
}
@@ -780,29 +789,29 @@ TEST_F(InputRouterImplTest, TouchEventQueue) {
OnHasTouchEventHandlers(true);
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id = SendTouchEvent();
EXPECT_TRUE(client_->GetAndResetFilterEventCalled());
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_FALSE(TouchEventQueueEmpty());
// The second touch should not be sent since one is already in queue.
MoveTouchPoint(0, 5, 5);
- SendTouchEvent();
+ uint32 touch_move_event_id = SendTouchEvent();
EXPECT_FALSE(client_->GetAndResetFilterEventCalled());
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
EXPECT_FALSE(TouchEventQueueEmpty());
// Receive an ACK for the first touch-event.
- SendInputEventACK(WebInputEvent::TouchStart,
- INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id);
EXPECT_FALSE(TouchEventQueueEmpty());
EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
EXPECT_EQ(WebInputEvent::TouchStart,
ack_handler_->acked_touch_event().event.type);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
- SendInputEventACK(WebInputEvent::TouchMove,
- INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_move_event_id);
EXPECT_TRUE(TouchEventQueueEmpty());
EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
EXPECT_EQ(WebInputEvent::TouchMove,
@@ -820,7 +829,7 @@ TEST_F(InputRouterImplTest, TouchEventQueueFlush) {
// Send a touch-press event.
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id = SendTouchEvent();
MoveTouchPoint(0, 2, 2);
MoveTouchPoint(0, 3, 3);
EXPECT_FALSE(TouchEventQueueEmpty());
@@ -835,7 +844,8 @@ TEST_F(InputRouterImplTest, TouchEventQueueFlush) {
// After the ack, the touch-event queue should be empty, and none of the
// flushed touch-events should have been sent to the renderer.
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
EXPECT_TRUE(TouchEventQueueEmpty());
}
@@ -859,7 +869,7 @@ TEST_F(InputRouterImplTest, AckedTouchEventState) {
// Press the first finger.
PressTouchPoint(1, 1);
SetTouchTimestamp(timestamp);
- SendTouchEvent();
+ uint32 touch_press_event_id1 = SendTouchEvent();
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_PRESSED,
gfx::Point(1, 1), 0, timestamp));
@@ -868,7 +878,7 @@ TEST_F(InputRouterImplTest, AckedTouchEventState) {
timestamp += base::TimeDelta::FromSeconds(10);
MoveTouchPoint(0, 500, 500);
SetTouchTimestamp(timestamp);
- SendTouchEvent();
+ uint32 touch_move_event_id1 = SendTouchEvent();
EXPECT_FALSE(TouchEventQueueEmpty());
expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_MOVED,
gfx::Point(500, 500), 0, timestamp));
@@ -877,7 +887,7 @@ TEST_F(InputRouterImplTest, AckedTouchEventState) {
timestamp += base::TimeDelta::FromSeconds(10);
PressTouchPoint(2, 2);
SetTouchTimestamp(timestamp);
- SendTouchEvent();
+ uint32 touch_press_event_id2 = SendTouchEvent();
EXPECT_FALSE(TouchEventQueueEmpty());
expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_PRESSED,
gfx::Point(2, 2), 1, timestamp));
@@ -887,7 +897,7 @@ TEST_F(InputRouterImplTest, AckedTouchEventState) {
MoveTouchPoint(0, 10, 10);
MoveTouchPoint(1, 20, 20);
SetTouchTimestamp(timestamp);
- SendTouchEvent();
+ uint32 touch_move_event_id2 = SendTouchEvent();
EXPECT_FALSE(TouchEventQueueEmpty());
expected_events.push_back(new ui::TouchEvent(ui::ET_TOUCH_MOVED,
gfx::Point(10, 10), 0, timestamp));
@@ -901,13 +911,18 @@ TEST_F(InputRouterImplTest, AckedTouchEventState) {
WebInputEvent::TouchStart,
WebInputEvent::TouchMove };
+ uint32 touch_event_ids[] = {touch_press_event_id1,
+ touch_move_event_id1,
+ touch_press_event_id2,
+ touch_move_event_id2};
+
TouchEventCoordinateSystem coordinate_system = LOCAL_COORDINATES;
#if !defined(OS_WIN)
coordinate_system = SCREEN_COORDINATES;
#endif
for (size_t i = 0; i < arraysize(acks); ++i) {
- SendInputEventACK(acks[i],
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ SendTouchEventACK(acks[i], INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
+ touch_event_ids[i]);
EXPECT_EQ(acks[i], ack_handler_->acked_touch_event().event.type);
ScopedVector<ui::TouchEvent> acked;
@@ -957,30 +972,31 @@ TEST_F(InputRouterImplTest, UnhandledWheelEvent) {
TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) {
OnHasTouchEventHandlers(true);
// Only acks for TouchCancel should always be ignored.
- ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(WebInputEvent::TouchStart)));
- ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(WebInputEvent::TouchMove)));
- ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(WebInputEvent::TouchEnd)));
// Precede the TouchCancel with an appropriate TouchStart;
PressTouchPoint(1, 1);
- SendTouchEvent();
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
+ uint32 touch_press_event_id = SendTouchEvent();
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id);
ASSERT_EQ(1U, GetSentMessageCountAndResetSink());
ASSERT_EQ(1U, ack_handler_->GetAndResetAckCount());
ASSERT_EQ(0, client_->in_flight_event_count());
// The TouchCancel ack is always ignored.
CancelTouchPoint(0);
- SendTouchEvent();
+ uint32 touch_cancel_event_id = SendTouchEvent();
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
EXPECT_EQ(0, client_->in_flight_event_count());
EXPECT_FALSE(HasPendingEvents());
- SendInputEventACK(WebInputEvent::TouchCancel,
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchCancel,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_cancel_event_id);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
EXPECT_FALSE(HasPendingEvents());
@@ -1019,7 +1035,8 @@ TEST_F(InputRouterImplTest, GestureTypesIgnoringAck) {
WebInputEvent::GestureScrollEnd};
for (size_t i = 0; i < arraysize(eventTypes); ++i) {
WebInputEvent::Type type = eventTypes[i];
- if (!WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type))) {
+ if (WebInputEventTraits::WillReceiveAckFromRenderer(
+ GetEventWithType(type))) {
SimulateGestureEvent(type, blink::WebGestureDeviceTouchscreen);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
@@ -1049,8 +1066,9 @@ TEST_F(InputRouterImplTest, MouseTypesIgnoringAck) {
for (int i = start_type; i <= end_type; ++i) {
WebInputEvent::Type type = static_cast<WebInputEvent::Type>(i);
int expected_in_flight_event_count =
- WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type)) ? 0
- : 1;
+ !WebInputEventTraits::WillReceiveAckFromRenderer(GetEventWithType(type))
+ ? 0
+ : 1;
// Note: Mouse event acks are never forwarded to the ack handler, so the key
// result here is that ignored ack types don't affect the in-flight count.
@@ -1068,7 +1086,7 @@ TEST_F(InputRouterImplTest, MouseTypesIgnoringAck) {
}
// Guard against breaking changes to the list of ignored event ack types in
-// |WebInputEventTraits::IgnoresAckDisposition|.
+// |WebInputEventTraits::WillReceiveAckFromRenderer|.
TEST_F(InputRouterImplTest, RequiredEventAckTypes) {
const WebInputEvent::Type kRequiredEventAckTypes[] = {
WebInputEvent::MouseMove,
@@ -1086,7 +1104,7 @@ TEST_F(InputRouterImplTest, RequiredEventAckTypes) {
};
for (size_t i = 0; i < arraysize(kRequiredEventAckTypes); ++i) {
const WebInputEvent::Type required_ack_type = kRequiredEventAckTypes[i];
- EXPECT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(required_ack_type)));
}
}
@@ -1212,7 +1230,7 @@ TEST_F(InputRouterImplTest, TouchAckTimeoutConfigured) {
// Verify that the touch ack timeout fires upon the delayed ack.
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id1 = SendTouchEvent();
EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
RunTasksAndWait(base::TimeDelta::FromMilliseconds(timeout_ms + 1));
@@ -1222,7 +1240,8 @@ TEST_F(InputRouterImplTest, TouchAckTimeoutConfigured) {
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
// Ack'ing the timed-out event should fire a TouchCancel.
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id1);
EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
@@ -1253,22 +1272,26 @@ TEST_F(InputRouterImplTest, TouchAckTimeoutConfigured) {
// TOUCH_ACTION_NONE (and no other touch-action) should disable the timeout.
OnHasTouchEventHandlers(true);
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id2 = SendTouchEvent();
OnSetTouchAction(TOUCH_ACTION_PAN_Y);
EXPECT_TRUE(TouchEventTimeoutEnabled());
ReleaseTouchPoint(0);
- SendTouchEvent();
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
- SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
+ uint32 touch_release_event_id2 = SendTouchEvent();
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id2);
+ SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_release_event_id2);
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id3 = SendTouchEvent();
OnSetTouchAction(TOUCH_ACTION_NONE);
EXPECT_FALSE(TouchEventTimeoutEnabled());
ReleaseTouchPoint(0);
- SendTouchEvent();
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
- SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
+ uint32 touch_release_event_id3 = SendTouchEvent();
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id3);
+ SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_release_event_id3);
// As the touch-action is reset by a new touch sequence, the timeout behavior
// should be restored.
@@ -1288,17 +1311,18 @@ TEST_F(InputRouterImplTest,
// Start a touch sequence.
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id = SendTouchEvent();
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// TOUCH_ACTION_NONE should disable the timeout.
OnSetTouchAction(TOUCH_ACTION_NONE);
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id);
EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
EXPECT_FALSE(TouchEventTimeoutEnabled());
MoveTouchPoint(0, 1, 2);
- SendTouchEvent();
+ uint32 touch_move_event_id = SendTouchEvent();
EXPECT_FALSE(TouchEventTimeoutEnabled());
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
@@ -1306,13 +1330,15 @@ TEST_F(InputRouterImplTest,
RunTasksAndWait(base::TimeDelta::FromMilliseconds(timeout_ms + 1));
EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
- SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_move_event_id);
EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
// End the touch sequence.
ReleaseTouchPoint(0);
- SendTouchEvent();
- SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
+ uint32 touch_release_event_id = SendTouchEvent();
+ SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_release_event_id);
EXPECT_FALSE(TouchEventTimeoutEnabled());
ack_handler_->GetAndResetAckCount();
GetSentMessageCountAndResetSink();
@@ -1336,23 +1362,25 @@ TEST_F(InputRouterImplTest, TouchActionResetBeforeEventReachesRenderer) {
// Sequence 1.
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id1 = SendTouchEvent();
OnSetTouchAction(TOUCH_ACTION_NONE);
MoveTouchPoint(0, 50, 50);
- SendTouchEvent();
+ uint32 touch_move_event_id1 = SendTouchEvent();
ReleaseTouchPoint(0);
- SendTouchEvent();
+ uint32 touch_release_event_id1 = SendTouchEvent();
// Sequence 2.
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id2 = SendTouchEvent();
MoveTouchPoint(0, 50, 50);
- SendTouchEvent();
+ uint32 touch_move_event_id2 = SendTouchEvent();
ReleaseTouchPoint(0);
- SendTouchEvent();
+ uint32 touch_release_event_id2 = SendTouchEvent();
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
- SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id1);
+ SendTouchEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_move_event_id1);
// Ensure touch action is still none, as the next touch start hasn't been
// acked yet. ScrollBegin and ScrollEnd don't require acks.
@@ -1365,12 +1393,15 @@ TEST_F(InputRouterImplTest, TouchActionResetBeforeEventReachesRenderer) {
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
// This allows the next touch sequence to start.
- SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_release_event_id1);
// Ensure touch action has been set to auto, as a new touch sequence has
// started.
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
- SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id2);
+ SendTouchEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_move_event_id2);
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
blink::WebGestureDeviceTouchscreen);
@@ -1378,7 +1409,8 @@ TEST_F(InputRouterImplTest, TouchActionResetBeforeEventReachesRenderer) {
SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
blink::WebGestureDeviceTouchscreen);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
- SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_release_event_id2);
}
// Test that TouchActionFilter::ResetTouchAction is called when a new touch
@@ -1388,19 +1420,21 @@ TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHasNoConsumer) {
// Sequence 1.
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id1 = SendTouchEvent();
MoveTouchPoint(0, 50, 50);
- SendTouchEvent();
+ uint32 touch_move_event_id1 = SendTouchEvent();
OnSetTouchAction(TOUCH_ACTION_NONE);
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
- SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id1);
+ SendTouchEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_move_event_id1);
ReleaseTouchPoint(0);
- SendTouchEvent();
+ uint32 touch_release_event_id1 = SendTouchEvent();
// Sequence 2
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id2 = SendTouchEvent();
MoveTouchPoint(0, 50, 50);
SendTouchEvent();
ReleaseTouchPoint(0);
@@ -1416,9 +1450,11 @@ TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHasNoConsumer) {
blink::WebGestureDeviceTouchscreen);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
- SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
- SendInputEventACK(WebInputEvent::TouchStart,
- INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
+ SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_release_event_id1);
+ SendTouchEventACK(WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
+ touch_press_event_id2);
// Ensure touch action has been set to auto, as the touch had no consumer.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
@@ -1436,26 +1472,27 @@ TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHandlerRemoved) {
// Touch sequence with touch handler.
OnHasTouchEventHandlers(true);
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id = SendTouchEvent();
MoveTouchPoint(0, 50, 50);
- SendTouchEvent();
+ uint32 touch_move_event_id = SendTouchEvent();
OnSetTouchAction(TOUCH_ACTION_NONE);
ReleaseTouchPoint(0);
- SendTouchEvent();
+ uint32 touch_release_event_id = SendTouchEvent();
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// Ensure we have touch-action:none, suppressing scroll events.
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
- SendInputEventACK(WebInputEvent::TouchMove,
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchMove,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_move_event_id);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
blink::WebGestureDeviceTouchscreen);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
- SendInputEventACK(WebInputEvent::TouchEnd,
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
+ touch_release_event_id);
SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
blink::WebGestureDeviceTouchscreen);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
@@ -1481,16 +1518,17 @@ TEST_F(InputRouterImplTest, DoubleTapGestureDependsOnFirstTap) {
// Sequence 1.
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id1 = SendTouchEvent();
OnSetTouchAction(TOUCH_ACTION_NONE);
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_press_event_id1);
ReleaseTouchPoint(0);
- SendTouchEvent();
+ uint32 touch_release_event_id = SendTouchEvent();
// Sequence 2
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id2 = SendTouchEvent();
// First tap.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
@@ -1504,7 +1542,7 @@ TEST_F(InputRouterImplTest, DoubleTapGestureDependsOnFirstTap) {
blink::WebGestureDeviceTouchscreen);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// This test will become invalid if GestureTap stops requiring an ack.
- ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(WebInputEvent::GestureTap)));
EXPECT_EQ(2, client_->in_flight_event_count());
SendInputEventACK(WebInputEvent::GestureTap,
@@ -1517,9 +1555,11 @@ TEST_F(InputRouterImplTest, DoubleTapGestureDependsOnFirstTap) {
blink::WebGestureDeviceTouchscreen);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
- SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
- SendInputEventACK(WebInputEvent::TouchStart,
- INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
+ SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
+ touch_release_event_id);
+ SendTouchEventACK(WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
+ touch_press_event_id2);
// Second Tap.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
@@ -1532,7 +1572,7 @@ TEST_F(InputRouterImplTest, DoubleTapGestureDependsOnFirstTap) {
SimulateGestureEvent(WebInputEvent::GestureDoubleTap,
blink::WebGestureDeviceTouchscreen);
// This test will become invalid if GestureDoubleTap stops requiring an ack.
- ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(WebInputEvent::GestureDoubleTap)));
EXPECT_EQ(1, client_->in_flight_event_count());
SendInputEventACK(WebInputEvent::GestureTap, INPUT_EVENT_ACK_STATE_CONSUMED);
@@ -1552,20 +1592,20 @@ TEST_F(InputRouterImplTest, InputFlush) {
// Queue a TouchStart.
OnHasTouchEventHandlers(true);
PressTouchPoint(1, 1);
- SendTouchEvent();
+ uint32 touch_press_event_id = SendTouchEvent();
EXPECT_TRUE(HasPendingEvents());
// DidFlush should be called only after the event is ack'ed.
RequestNotificationWhenFlushed();
EXPECT_EQ(0U, GetAndResetDidFlushCount());
- SendInputEventACK(WebInputEvent::TouchStart,
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_press_event_id);
EXPECT_EQ(1U, GetAndResetDidFlushCount());
// Ensure different types of enqueued events will prevent the DidFlush call
// until all such events have been fully dispatched.
MoveTouchPoint(0, 50, 50);
- SendTouchEvent();
+ uint32 touch_move_event_id = SendTouchEvent();
ASSERT_TRUE(HasPendingEvents());
SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
blink::WebGestureDeviceTouchscreen);
@@ -1583,8 +1623,8 @@ TEST_F(InputRouterImplTest, InputFlush) {
EXPECT_EQ(0U, GetAndResetDidFlushCount());
// There are still pending gestures.
- SendInputEventACK(WebInputEvent::TouchMove,
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ SendTouchEventACK(WebInputEvent::TouchMove,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_move_event_id);
EXPECT_EQ(0U, GetAndResetDidFlushCount());
EXPECT_TRUE(HasPendingEvents());
@@ -1771,9 +1811,8 @@ TEST_F(InputRouterImplTest, OverscrollDispatch) {
wheel_overscroll.current_fling_velocity = gfx::Vector2dF(1, 0);
SimulateWheelEvent(3, 0, 0, false);
- InputHostMsg_HandleInputEvent_ACK_Params ack;
- ack.type = WebInputEvent::MouseWheel;
- ack.state = INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
+ InputEventAck ack(WebInputEvent::MouseWheel,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
ack.overscroll.reset(new DidOverscrollParams(wheel_overscroll));
input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));

Powered by Google App Engine
This is Rietveld 408576698