Chromium Code Reviews| 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 83aab3819eea090c42fd97bfd83c813688d2bd5e..681d66e611e5b36538ccbca7752a9a2c29808c5d 100644 |
| --- a/content/browser/renderer_host/input/input_router_impl_unittest.cc |
| +++ b/content/browser/renderer_host/input/input_router_impl_unittest.cc |
| @@ -155,6 +155,8 @@ class InputRouterImplTest : public testing::Test { |
| config_)); |
| client_->set_input_router(input_router()); |
| ack_handler_->set_input_router(input_router()); |
| + sent_events_ids_.clear(); |
| + all_sent_events_ids_.clear(); |
| } |
| void TearDown() override { |
| @@ -250,6 +252,7 @@ class InputRouterImplTest : public testing::Test { |
| void SendTouchEvent() { |
| input_router_->SendTouchEvent(TouchEventWithLatencyInfo(touch_event_)); |
| touch_event_.ResetPoints(); |
| + SetLastEventID(); |
| } |
| int PressTouchPoint(int x, int y) { |
| @@ -270,10 +273,14 @@ 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; |
| + InputEventAck ack(type, ack_result); |
| + if (WebInputEvent::isTouchEventType(type)) { |
| + DCHECK(!sent_events_ids_.empty()); |
| + ack.unique_touch_event_id = sent_events_ids_.front(); |
| + sent_events_ids_.pop_front(); |
| + } |
| input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack)); |
| + SetLastEventID(); |
| } |
| InputRouterImpl* input_router() const { |
| @@ -316,6 +323,22 @@ class InputRouterImplTest : public testing::Test { |
| return count; |
| } |
| + bool TouchEventCancelable() { return touch_event_.cancelable; } |
| + |
| + void SetLastEventID() { |
| + size_t count = process_->sink().message_count(); |
|
jdduke (slow)
2015/05/12 16:07:11
Hmm, this probably works fine, but I wonder if it'
lanwei
2015/05/13 21:01:53
I think you are right, even though we have to add
|
| + for (size_t i = 0; i < count; ++i) { |
| + const WebInputEvent* input_event = |
| + GetInputEventFromMessage(*process_->sink().GetMessageAt(i)); |
| + uint32 id = WebInputEventTraits::GetUniqueTouchEventId(*input_event); |
| + if (id != 0 && |
| + all_sent_events_ids_.find(id) == all_sent_events_ids_.end()) { |
| + sent_events_ids_.push_back(id); |
| + all_sent_events_ids_.insert(id); |
| + } |
| + } |
| + } |
| + |
| static void RunTasksAndWait(base::TimeDelta delay) { |
| base::MessageLoop::current()->PostDelayedTask( |
| FROM_HERE, base::MessageLoop::QuitClosure(), delay); |
| @@ -333,6 +356,8 @@ class InputRouterImplTest : public testing::Test { |
| SyntheticWebTouchEvent touch_event_; |
| scoped_ptr<TestBrowserContext> browser_context_; |
| + std::deque<uint32> sent_events_ids_; |
| + std::set<uint32> all_sent_events_ids_; |
| }; |
| TEST_F(InputRouterImplTest, CoalescesRangeSelection) { |
| @@ -957,11 +982,11 @@ 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; |
| @@ -1019,7 +1044,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 +1075,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 +1095,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 +1113,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))); |
| } |
| } |
| @@ -1504,7 +1531,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, |
| @@ -1532,7 +1559,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); |
| @@ -1730,9 +1757,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)); |