| Index: content/renderer/input/input_event_filter_unittest.cc
|
| diff --git a/content/renderer/input/input_event_filter_unittest.cc b/content/renderer/input/input_event_filter_unittest.cc
|
| index 8027752a6ecafa2f72b053421e65f73711069dc3..b28594113e1c0a424eeba7136495e0cc9acc62d3 100644
|
| --- a/content/renderer/input/input_event_filter_unittest.cc
|
| +++ b/content/renderer/input/input_event_filter_unittest.cc
|
| @@ -59,9 +59,7 @@ class InputEventRecorder {
|
| const WebInputEvent* event,
|
| ui::LatencyInfo* latency_info) {
|
| DCHECK_EQ(kTestRoutingID, routing_id);
|
| -
|
| records_.push_back(Record(event));
|
| -
|
| if (handle_events_) {
|
| return INPUT_EVENT_ACK_STATE_CONSUMED;
|
| } else if (send_to_widget_) {
|
| @@ -113,9 +111,8 @@ class IPCMessageRecorder : public IPC::Listener {
|
|
|
| void AddMessagesToFilter(IPC::MessageFilter* message_filter,
|
| const std::vector<IPC::Message>& events) {
|
| - for (size_t i = 0; i < events.size(); ++i) {
|
| + for (size_t i = 0; i < events.size(); ++i)
|
| message_filter->OnMessageReceived(events[i]);
|
| - }
|
|
|
| base::MessageLoop::current()->RunUntilIdle();
|
| }
|
| @@ -325,22 +322,19 @@ TEST_F(InputEventFilterTest, NonBlockingWheel) {
|
| EXPECT_EQ(1u, message_recorder_.message_count());
|
|
|
| // Second event was queued; ack the first.
|
| - filter_->NonBlockingInputEventHandled(kTestRoutingID,
|
| - WebInputEvent::MouseWheel);
|
| + filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::MouseWheel);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| ASSERT_EQ(4u, ipc_sink_.message_count());
|
| EXPECT_EQ(2u, message_recorder_.message_count());
|
|
|
| // Third event won't be coalesced into the second because modifiers are
|
| // different.
|
| - filter_->NonBlockingInputEventHandled(kTestRoutingID,
|
| - WebInputEvent::MouseWheel);
|
| + filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::MouseWheel);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_EQ(3u, message_recorder_.message_count());
|
|
|
| // The last events will be coalesced.
|
| - filter_->NonBlockingInputEventHandled(kTestRoutingID,
|
| - WebInputEvent::MouseWheel);
|
| + filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::MouseWheel);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_EQ(3u, message_recorder_.message_count());
|
|
|
| @@ -356,7 +350,7 @@ TEST_F(InputEventFilterTest, NonBlockingWheel) {
|
|
|
| EXPECT_EQ(kEvents[i].size, event->size);
|
| EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0);
|
| - EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING,
|
| + EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
|
| dispatch_type);
|
| }
|
|
|
| @@ -374,7 +368,7 @@ TEST_F(InputEventFilterTest, NonBlockingWheel) {
|
| EXPECT_EQ(kEvents[2].size, event->size);
|
| EXPECT_EQ(kEvents[2].deltaX + kEvents[3].deltaX, event->deltaX);
|
| EXPECT_EQ(kEvents[2].deltaY + kEvents[3].deltaY, event->deltaY);
|
| - EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING,
|
| + EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
|
| dispatch_type);
|
| }
|
| }
|
| @@ -402,22 +396,19 @@ TEST_F(InputEventFilterTest, NonBlockingTouch) {
|
| EXPECT_EQ(1u, message_recorder_.message_count());
|
|
|
| // Second event was queued; ack the first.
|
| - filter_->NonBlockingInputEventHandled(kTestRoutingID,
|
| - WebInputEvent::TouchStart);
|
| + filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::TouchStart);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| ASSERT_EQ(4u, ipc_sink_.message_count());
|
| EXPECT_EQ(2u, message_recorder_.message_count());
|
|
|
| // Third event won't be coalesced into the second because modifiers are
|
| // different.
|
| - filter_->NonBlockingInputEventHandled(kTestRoutingID,
|
| - WebInputEvent::TouchMove);
|
| + filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::TouchMove);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_EQ(3u, message_recorder_.message_count());
|
|
|
| // The last events will be coalesced.
|
| - filter_->NonBlockingInputEventHandled(kTestRoutingID,
|
| - WebInputEvent::TouchMove);
|
| + filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::TouchMove);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| EXPECT_EQ(3u, message_recorder_.message_count());
|
|
|
| @@ -433,7 +424,7 @@ TEST_F(InputEventFilterTest, NonBlockingTouch) {
|
|
|
| EXPECT_EQ(kEvents[i].size, event->size);
|
| EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0);
|
| - EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING,
|
| + EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
|
| dispatch_type);
|
| }
|
|
|
| @@ -452,7 +443,83 @@ TEST_F(InputEventFilterTest, NonBlockingTouch) {
|
| EXPECT_EQ(1u, kEvents[3].touchesLength);
|
| EXPECT_EQ(kEvents[3].touches[0].position.x, event->touches[0].position.x);
|
| EXPECT_EQ(kEvents[3].touches[0].position.y, event->touches[0].position.y);
|
| - EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING,
|
| + EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
|
| + dispatch_type);
|
| + }
|
| +}
|
| +
|
| +TEST_F(InputEventFilterTest, IntermingledNonBlockingTouch) {
|
| + SyntheticWebTouchEvent kEvents[2];
|
| + kEvents[0].PressPoint(10, 10);
|
| + kEvents[1].PressPoint(10, 10);
|
| + kEvents[1].ReleasePoint(0);
|
| + SyntheticWebTouchEvent kBlockingEvents[1];
|
| + kBlockingEvents[0].PressPoint(10, 10);
|
| +
|
| + filter_->DidAddInputHandler(kTestRoutingID, nullptr);
|
| + event_recorder_.set_send_to_widget(true);
|
| + event_recorder_.set_passive(true);
|
| + AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents));
|
| + EXPECT_EQ(arraysize(kEvents), event_recorder_.record_count());
|
| +
|
| + event_recorder_.set_passive(false);
|
| + AddEventsToFilter(filter_.get(), kBlockingEvents, arraysize(kBlockingEvents));
|
| + EXPECT_EQ(arraysize(kEvents) + arraysize(kBlockingEvents),
|
| + event_recorder_.record_count());
|
| + ASSERT_EQ(3u, event_recorder_.record_count());
|
| +
|
| + {
|
| + // First event is sent right away.
|
| + EXPECT_EQ(1u, message_recorder_.message_count());
|
| +
|
| + const IPC::Message& message = message_recorder_.message_at(0);
|
| + ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type());
|
| + InputMsg_HandleInputEvent::Param params;
|
| + EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, ¶ms));
|
| + const WebInputEvent* event = base::get<0>(params);
|
| + InputEventDispatchType dispatch_type = base::get<2>(params);
|
| +
|
| + EXPECT_EQ(kEvents[0].size, event->size);
|
| + EXPECT_TRUE(memcmp(&kEvents[0], event, event->size) == 0);
|
| + EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
|
| + dispatch_type);
|
| + }
|
| +
|
| + {
|
| + // Second event was queued; ack the first.
|
| + filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::TouchStart);
|
| + base::MessageLoop::current()->RunUntilIdle();
|
| + EXPECT_EQ(2u, message_recorder_.message_count());
|
| +
|
| + const IPC::Message& message = message_recorder_.message_at(1);
|
| + ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type());
|
| + InputMsg_HandleInputEvent::Param params;
|
| + EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, ¶ms));
|
| + const WebInputEvent* event = base::get<0>(params);
|
| + InputEventDispatchType dispatch_type = base::get<2>(params);
|
| +
|
| + EXPECT_EQ(kEvents[1].size, event->size);
|
| + EXPECT_TRUE(memcmp(&kEvents[1], event, event->size) == 0);
|
| + EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
|
| + dispatch_type);
|
| + }
|
| +
|
| + {
|
| + // Third event should be put in the queue.
|
| + filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::TouchEnd);
|
| + base::MessageLoop::current()->RunUntilIdle();
|
| + EXPECT_EQ(3u, message_recorder_.message_count());
|
| +
|
| + const IPC::Message& message = message_recorder_.message_at(2);
|
| + ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type());
|
| + InputMsg_HandleInputEvent::Param params;
|
| + EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, ¶ms));
|
| + const WebInputEvent* event = base::get<0>(params);
|
| + InputEventDispatchType dispatch_type = base::get<2>(params);
|
| +
|
| + EXPECT_EQ(kBlockingEvents[0].size, event->size);
|
| + EXPECT_TRUE(memcmp(&kBlockingEvents[0], event, event->size) == 0);
|
| + EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NORMAL_NOTIFY_MAIN,
|
| dispatch_type);
|
| }
|
| }
|
|
|