Chromium Code Reviews| 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) { |
|
tdresser
2016/06/28 14:04:49
Should we also have a touchpad test of this sort?
dtapuska
2016/06/28 17:30:21
touchpad doesn't apply really. I will add a dcheck
|
| + 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 |