| Index: content/renderer/input/main_thread_event_queue_unittest.cc
|
| diff --git a/content/renderer/input/main_thread_event_queue_unittest.cc b/content/renderer/input/main_thread_event_queue_unittest.cc
|
| index 2a43561988118dc532040d04c2ba2848aef3b3be..b602390d289fe7483a166162de411787602d1c8c 100644
|
| --- a/content/renderer/input/main_thread_event_queue_unittest.cc
|
| +++ b/content/renderer/input/main_thread_event_queue_unittest.cc
|
| @@ -40,6 +40,13 @@ class MainThreadEventQueueTest : public testing::Test,
|
| last_event_.assign(eventPtr, eventPtr + event->size);
|
| }
|
|
|
| + void SendInputEventAck(int routing_id,
|
| + blink::WebInputEvent::Type type,
|
| + InputEventAckState ack_result,
|
| + uint32_t touch_event_id) override {
|
| + additional_acked_events_.push_back(touch_event_id);
|
| + }
|
| +
|
| WebInputEventQueue<PendingMouseWheelEvent>& wheel_event_queue() {
|
| return queue_.wheel_events_;
|
| }
|
| @@ -51,6 +58,7 @@ class MainThreadEventQueueTest : public testing::Test,
|
| protected:
|
| MainThreadEventQueue queue_;
|
| std::vector<unsigned char> last_event_;
|
| + std::vector<uint32_t> additional_acked_events_;
|
| };
|
|
|
| TEST_F(MainThreadEventQueueTest, NonBlockingWheel) {
|
| @@ -72,13 +80,15 @@ TEST_F(MainThreadEventQueueTest, NonBlockingWheel) {
|
| kEvents[0].dispatchType =
|
| WebInputEvent::DispatchType::ListenersNonBlockingPassive;
|
| ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0);
|
| - queue_.EventHandled(blink::WebInputEvent::MouseWheel);
|
| + queue_.EventHandled(blink::WebInputEvent::MouseWheel,
|
| + INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| ASSERT_EQ(kEvents[1].size, last_event_.size());
|
| kEvents[1].dispatchType =
|
| WebInputEvent::DispatchType::ListenersNonBlockingPassive;
|
| ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0);
|
| ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state());
|
| - queue_.EventHandled(blink::WebInputEvent::MouseWheel);
|
| + queue_.EventHandled(blink::WebInputEvent::MouseWheel,
|
| + INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING,
|
| wheel_event_queue().state());
|
|
|
| @@ -115,13 +125,15 @@ TEST_F(MainThreadEventQueueTest, NonBlockingTouch) {
|
| kEvents[0].dispatchType =
|
| WebInputEvent::DispatchType::ListenersNonBlockingPassive;
|
| ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0);
|
| - queue_.EventHandled(blink::WebInputEvent::TouchStart);
|
| + queue_.EventHandled(blink::WebInputEvent::TouchStart,
|
| + INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| ASSERT_EQ(kEvents[1].size, last_event_.size());
|
| kEvents[1].dispatchType =
|
| WebInputEvent::DispatchType::ListenersNonBlockingPassive;
|
| ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0);
|
| ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state());
|
| - queue_.EventHandled(blink::WebInputEvent::TouchMove);
|
| + queue_.EventHandled(blink::WebInputEvent::TouchMove,
|
| + INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING,
|
| touch_event_queue().state());
|
|
|
| @@ -136,4 +148,35 @@ TEST_F(MainThreadEventQueueTest, NonBlockingTouch) {
|
| ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state());
|
| }
|
|
|
| +TEST_F(MainThreadEventQueueTest, BlockingTouch) {
|
| + SyntheticWebTouchEvent kEvents[4];
|
| + kEvents[0].PressPoint(10, 10);
|
| + kEvents[1].PressPoint(10, 10);
|
| + kEvents[1].MovePoint(0, 20, 20);
|
| + kEvents[2].PressPoint(10, 10);
|
| + kEvents[2].MovePoint(0, 30, 30);
|
| + kEvents[3].PressPoint(10, 10);
|
| + kEvents[3].MovePoint(0, 35, 35);
|
| +
|
| + ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING,
|
| + touch_event_queue().state());
|
| + // Ensure that coalescing takes place.
|
| + queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
|
| + INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
|
| + queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
|
| + INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
|
| + INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
|
| + INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + ASSERT_EQ(1u, touch_event_queue().size());
|
| + ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state());
|
| + queue_.EventHandled(kEvents[0].type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + ASSERT_EQ(0u, touch_event_queue().size());
|
| + queue_.EventHandled(kEvents[1].type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + ASSERT_EQ(2u, additional_acked_events_.size());
|
| + ASSERT_EQ(kEvents[2].uniqueTouchEventId, additional_acked_events_.at(0));
|
| + ASSERT_EQ(kEvents[3].uniqueTouchEventId, additional_acked_events_.at(1));
|
| +}
|
| +
|
| } // namespace content
|
|
|