| Index: content/browser/renderer_host/input/touch_event_queue_unittest.cc
|
| diff --git a/content/browser/renderer_host/input/touch_event_queue_unittest.cc b/content/browser/renderer_host/input/touch_event_queue_unittest.cc
|
| index fcd11f0aef5d4e14aa8a560757a2e309cd3126e2..da41841ce4dac2b6e8f2625a38bb79c1a6ec184f 100644
|
| --- a/content/browser/renderer_host/input/touch_event_queue_unittest.cc
|
| +++ b/content/browser/renderer_host/input/touch_event_queue_unittest.cc
|
| @@ -34,7 +34,13 @@ class TouchEventQueueTest : public testing::Test,
|
|
|
| // testing::Test
|
| virtual void SetUp() OVERRIDE {
|
| - queue_.reset(new TouchEventQueue(this));
|
| + queue_.reset(new TouchEventQueue(
|
| + this, TouchEventQueue::TOUCH_SCROLLING_MODE_DEFAULT));
|
| + queue_->OnHasTouchEventHandlers(true);
|
| + }
|
| +
|
| + virtual void SetTouchScrollingMode(TouchEventQueue::TouchScrollingMode mode) {
|
| + queue_.reset(new TouchEventQueue(this, mode));
|
| queue_->OnHasTouchEventHandlers(true);
|
| }
|
|
|
| @@ -48,7 +54,7 @@ class TouchEventQueueTest : public testing::Test,
|
| ++sent_event_count_;
|
| last_sent_event_ = event.event;
|
| if (sync_ack_result_)
|
| - SendTouchEventACK(*sync_ack_result_.Pass());
|
| + SendTouchEventAck(*sync_ack_result_.Pass());
|
| }
|
|
|
| virtual void OnTouchEventAck(
|
| @@ -92,10 +98,18 @@ class TouchEventQueueTest : public testing::Test,
|
| GestureEventWithLatencyInfo(event, ui::LatencyInfo()));
|
| }
|
|
|
| - void SendTouchEventACK(InputEventAckState ack_result) {
|
| + void SendTouchEventAck(InputEventAckState ack_result) {
|
| queue_->ProcessTouchAck(ack_result, ui::LatencyInfo());
|
| }
|
|
|
| + void SendGestureEventAck(WebInputEvent::Type type,
|
| + InputEventAckState ack_result) {
|
| + blink::WebGestureEvent gesture_event;
|
| + gesture_event.type = type;
|
| + GestureEventWithLatencyInfo event(gesture_event, ui::LatencyInfo());
|
| + queue_->OnGestureEventAck(event, ack_result);
|
| + }
|
| +
|
| void SetFollowupEvent(const WebTouchEvent& event) {
|
| followup_touch_event_.reset(new WebTouchEvent(event));
|
| }
|
| @@ -210,14 +224,14 @@ TEST_F(TouchEventQueueTest, Basic) {
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
|
|
| // Receive an ACK for the first touch-event.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(1U, queued_event_count());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type);
|
|
|
| // Receive an ACK for the second touch-event.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(0U, queued_event_count());
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| @@ -248,7 +262,7 @@ TEST_F(TouchEventQueueTest, QueueFlushedWhenHandlersRemoved) {
|
|
|
| // Receive an ACK for the first touch-event. One of the queued touch-event
|
| // should be forwarded.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(31U, queued_event_count());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| @@ -309,7 +323,7 @@ TEST_F(TouchEventQueueTest, ActiveSequenceDroppedWhenHandlersRemoved) {
|
| EXPECT_EQ(0U, queued_event_count());
|
|
|
| // The ack should be ignored as the touch queue is now empty.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
| EXPECT_EQ(0U, queued_event_count());
|
|
|
| @@ -351,7 +365,7 @@ TEST_F(TouchEventQueueTest, Coalesce) {
|
| EXPECT_EQ(3U, queued_event_count());
|
|
|
| // ACK the press. Coalesced touch-move events should be sent.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(2U, queued_event_count());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| @@ -359,14 +373,14 @@ TEST_F(TouchEventQueueTest, Coalesce) {
|
| EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, acked_event_state());
|
|
|
| // ACK the moves.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(1U, queued_event_count());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(10U, GetAndResetAckedEventCount());
|
| EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type);
|
|
|
| // ACK the release.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(0U, queued_event_count());
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| @@ -388,7 +402,7 @@ TEST_F(TouchEventQueueTest, SentTouchEventDoesNotCoalesce) {
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(2U, queued_event_count());
|
|
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, queued_event_count());
|
|
|
| @@ -450,7 +464,7 @@ TEST_F(TouchEventQueueTest, AckAfterQueueFlushed) {
|
|
|
| // Receive an ACK for the press. This should cause the queued touch-move to
|
| // be sent to the renderer.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, queued_event_count());
|
|
|
| @@ -459,7 +473,7 @@ TEST_F(TouchEventQueueTest, AckAfterQueueFlushed) {
|
| EXPECT_EQ(0U, queued_event_count());
|
|
|
| // Now receive an ACK for the move.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, queued_event_count());
|
| }
|
| @@ -481,7 +495,7 @@ TEST_F(TouchEventQueueTest, NoConsumer) {
|
|
|
| // Receive an ACK for the first touch-event. This should release the queued
|
| // touch-event, but it should not be sent to the renderer.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_EQ(0U, queued_event_count());
|
| EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type);
|
| EXPECT_EQ(2U, GetAndResetAckedEventCount());
|
| @@ -510,14 +524,14 @@ TEST_F(TouchEventQueueTest, NoConsumer) {
|
| // touch-move event, the touch-end event and the second touch-press event.
|
| EXPECT_EQ(4U, queued_event_count());
|
|
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type);
|
| EXPECT_EQ(4U, GetAndResetAckedEventCount());
|
| EXPECT_EQ(1U, queued_event_count());
|
|
|
| // ACK the second press event as NO_CONSUMER too.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| @@ -557,12 +571,12 @@ TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) {
|
|
|
| // ACK the first press as CONSUMED. This should cause the first touch-move of
|
| // the first touch-point to be dispatched.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(3U, queued_event_count());
|
|
|
| // ACK the first move as CONSUMED.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(2U, queued_event_count());
|
|
|
| @@ -570,12 +584,12 @@ TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) {
|
| // touch-move event (which contains both touch points). Although the second
|
| // touch-point does not need to be sent to the renderer, the first touch-point
|
| // did move, and so the coalesced touch-event will be sent to the renderer.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, queued_event_count());
|
|
|
| // ACK the coalesced move as NOT_CONSUMED.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, queued_event_count());
|
|
|
| @@ -596,11 +610,11 @@ TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) {
|
| MoveTouchPoints(0, 15, 15, 1, 25, 25);
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
|
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, queued_event_count());
|
|
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, queued_event_count());
|
|
|
| @@ -622,14 +636,14 @@ TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) {
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(4U, queued_event_count());
|
|
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(2U, queued_event_count());
|
| EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type);
|
|
|
| // ACK the press with NO_CONSUMED_EXISTS. This should release the queued
|
| // touch-move events to the view.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, queued_event_count());
|
| EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type);
|
| @@ -659,7 +673,7 @@ TEST_F(TouchEventQueueTest, AckWithFollowupEvents) {
|
|
|
| // Receive an ACK for the press. This should cause the followup touch-move to
|
| // be sent to the renderer.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(1U, queued_event_count());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| @@ -672,7 +686,7 @@ TEST_F(TouchEventQueueTest, AckWithFollowupEvents) {
|
|
|
| // Receive an ACK for the touch-move followup event. This should cause the
|
| // subsequent touch move event be sent to the renderer.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(1U, queued_event_count());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| @@ -703,7 +717,7 @@ TEST_F(TouchEventQueueTest, SynchronousAcks) {
|
|
|
| // TouchCancel (first inserting a TouchStart so the TouchCancel will be sent)
|
| PressTouchPoint(1, 1);
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(0U, queued_event_count());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| @@ -766,17 +780,17 @@ TEST_F(TouchEventQueueTest, NoTouchBasic) {
|
|
|
| PressTouchPoint(80, 10);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| MoveTouchPoint(0, 80, 20);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| ReleaseTouchPoint(0);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| }
|
|
|
| @@ -785,7 +799,7 @@ TEST_F(TouchEventQueueTest, NoTouchOnScroll) {
|
| // Queue a TouchStart.
|
| PressTouchPoint(0, 1);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| MoveTouchPoint(0, 20, 5);
|
| @@ -802,7 +816,7 @@ TEST_F(TouchEventQueueTest, NoTouchOnScroll) {
|
| WebGestureEvent followup_scroll;
|
| followup_scroll.type = WebInputEvent::GestureScrollBegin;
|
| SetFollowupEvent(followup_scroll);
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| EXPECT_EQ(2U, queued_event_count());
|
| @@ -810,7 +824,7 @@ TEST_F(TouchEventQueueTest, NoTouchOnScroll) {
|
| EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type);
|
|
|
| // Acking the TouchCancel will result in dispatch of the next TouchStart.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| // The synthetic TouchCancel should not reach client, only the TouchStart.
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| @@ -839,17 +853,17 @@ TEST_F(TouchEventQueueTest, NoTouchOnScroll) {
|
| // Touch events from a new gesture sequence should be forwarded normally.
|
| PressTouchPoint(80, 10);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| MoveTouchPoint(0, 80, 20);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| ReleaseTouchPoint(0);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| }
|
|
|
| @@ -859,7 +873,7 @@ TEST_F(TouchEventQueueTest, NoTouchCancelOnScrollIfNoConsumer) {
|
| // Queue a TouchStart.
|
| PressTouchPoint(0, 1);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type);
|
|
|
| @@ -893,7 +907,7 @@ TEST_F(TouchEventQueueTest, NoTouchCancelOnScrollIfNoConsumer) {
|
| // Touch events from a new gesture sequence should be forwarded normally.
|
| PressTouchPoint(80, 10);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| }
|
|
|
| @@ -913,7 +927,7 @@ TEST_F(TouchEventQueueTest, PendingStart) {
|
| EXPECT_TRUE(IsPendingAckTouchStart());
|
|
|
| // Ack the touchstart (#1).
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, queued_event_count());
|
| EXPECT_FALSE(IsPendingAckTouchStart());
|
|
|
| @@ -923,7 +937,7 @@ TEST_F(TouchEventQueueTest, PendingStart) {
|
| EXPECT_FALSE(IsPendingAckTouchStart());
|
|
|
| // Ack the touchmove (#2).
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, queued_event_count());
|
| EXPECT_TRUE(IsPendingAckTouchStart());
|
|
|
| @@ -933,12 +947,12 @@ TEST_F(TouchEventQueueTest, PendingStart) {
|
| EXPECT_TRUE(IsPendingAckTouchStart());
|
|
|
| // Ack the touchstart for the second point (#3).
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, queued_event_count());
|
| EXPECT_TRUE(IsPendingAckTouchStart());
|
|
|
| // Ack the touchstart for the third point (#4).
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(0U, queued_event_count());
|
| EXPECT_FALSE(IsPendingAckTouchStart());
|
| }
|
| @@ -950,28 +964,28 @@ TEST_F(TouchEventQueueTest, TouchTimeoutTypes) {
|
| // Sending a TouchStart will start the timeout.
|
| PressTouchPoint(0, 1);
|
| EXPECT_TRUE(IsTimeoutRunning());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
|
|
| // A TouchMove should start the timeout.
|
| MoveTouchPoint(0, 5, 5);
|
| EXPECT_TRUE(IsTimeoutRunning());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
|
|
| // A TouchEnd should not start the timeout.
|
| ReleaseTouchPoint(0);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
|
|
| // A TouchCancel should not start the timeout.
|
| PressTouchPoint(0, 1);
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| ASSERT_FALSE(IsTimeoutRunning());
|
| CancelTouchPoint(0);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
| }
|
|
|
| @@ -1004,7 +1018,7 @@ TEST_F(TouchEventQueueTest, TouchTimeoutBasic) {
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| // Ack'ing the original event should trigger a cancel event.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| @@ -1020,7 +1034,7 @@ TEST_F(TouchEventQueueTest, TouchTimeoutBasic) {
|
|
|
| // The synthetic TouchCancel ack should not reach the client, but should
|
| // resume touch forwarding.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
|
|
| @@ -1041,23 +1055,23 @@ TEST_F(TouchEventQueueTest, NoTouchTimeoutIfRendererIsConsumingGesture) {
|
|
|
| // Mark the event as consumed. This should prevent the timeout from
|
| // being activated on subsequent TouchEvents in this gesture.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
|
|
| // A TouchMove should not start the timeout.
|
| MoveTouchPoint(0, 5, 5);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
|
|
| // A secondary TouchStart should not start the timeout.
|
| PressTouchPoint(1, 0);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
|
|
| // A TouchEnd should not start the timeout.
|
| ReleaseTouchPoint(1);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
|
|
| // A TouchCancel should not start the timeout.
|
| CancelTouchPoint(0);
|
| @@ -1117,14 +1131,14 @@ TEST_F(TouchEventQueueTest, TouchTimeoutWithFollowupGesture) {
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| // Ack the original event, triggering a TouchCancel.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
|
|
| // Ack the cancel event. Normally, this would resume touch forwarding,
|
| // but we're still within a scroll gesture so it remains disabled.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
| @@ -1193,12 +1207,12 @@ TEST_F(TouchEventQueueTest, TouchTimeoutWithFollowupGestureAndDelayedAck) {
|
| EXPECT_EQ(2U, GetAndResetAckedEventCount());
|
|
|
| // Ack the original event, triggering a cancel.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
|
|
| // Ack the cancel event, resuming touch forwarding.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
|
|
| @@ -1239,7 +1253,7 @@ TEST_F(TouchEventQueueTest, NoCancelOnTouchTimeoutWithoutConsumer) {
|
|
|
| // Ack'ing the original event should not trigger a cancel event, as the
|
| // TouchStart had no consumer. However, it should re-enable touch forwarding.
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_FALSE(IsTimeoutRunning());
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
| EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| @@ -1259,7 +1273,7 @@ TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithinSlopRegion) {
|
|
|
| // Queue a TouchStart.
|
| PressTouchPoint(0, 0);
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| ASSERT_EQ(1U, GetAndResetSentEventCount());
|
| ASSERT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| @@ -1293,7 +1307,7 @@ TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithinSlopRegion) {
|
| EXPECT_EQ(1U, queued_event_count());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| // Even TouchMove's within the original slop region should now be forwarded.
|
| @@ -1301,14 +1315,14 @@ TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithinSlopRegion) {
|
| EXPECT_EQ(1U, queued_event_count());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| // A new touch sequence should reset suppression.
|
| ReleaseTouchPoint(0);
|
| PressTouchPoint(0, 0);
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| ASSERT_EQ(2U, GetAndResetSentEventCount());
|
| ASSERT_EQ(2U, GetAndResetAckedEventCount());
|
| ASSERT_EQ(0U, queued_event_count());
|
| @@ -1334,7 +1348,7 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) {
|
|
|
| // Queue a TouchStart.
|
| PressTouchPoint(0, 1);
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| ASSERT_EQ(1U, GetAndResetSentEventCount());
|
| ASSERT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| @@ -1356,7 +1370,7 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) {
|
|
|
| // Queue a TouchStart.
|
| PressTouchPoint(0, 1);
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| ASSERT_EQ(1U, GetAndResetSentEventCount());
|
| ASSERT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| @@ -1368,7 +1382,7 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) {
|
|
|
| // Simulate a secondary pointer press.
|
| PressTouchPoint(kDoubleSlopLengthDips, 0);
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| @@ -1376,12 +1390,12 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) {
|
| MoveTouchPoint(1, kDoubleSlopLengthDips, 0);
|
| EXPECT_EQ(1U, queued_event_count());
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| // Release the secondary pointer.
|
| ReleaseTouchPoint(0);
|
| - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
|
|
| @@ -1393,4 +1407,54 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) {
|
| EXPECT_EQ(0U, GetAndResetAckedEventCount());
|
| }
|
|
|
| +TEST_F(TouchEventQueueTest, SyncTouchMoveDoesntCancelTouchOnScroll) {
|
| + SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_SYNC_TOUCHMOVE);
|
| + // Queue a TouchStart.
|
| + PressTouchPoint(0, 1);
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| +
|
| + MoveTouchPoint(0, 20, 5);
|
| + EXPECT_EQ(1U, queued_event_count());
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| +
|
| + // GestureScrollBegin doesn't insert a synthetic TouchCancel.
|
| + WebGestureEvent followup_scroll;
|
| + followup_scroll.type = WebInputEvent::GestureScrollBegin;
|
| + SetFollowupEvent(followup_scroll);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| + EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| + EXPECT_EQ(0U, queued_event_count());
|
| +}
|
| +
|
| +TEST_F(TouchEventQueueTest, TouchAbsorption) {
|
| + SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ABSORB_TOUCHMOVE);
|
| + // Queue a TouchStart.
|
| + PressTouchPoint(0, 1);
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| +
|
| + for (int i = 0; i < 3; ++i) {
|
| + SendGestureEventAck(WebInputEvent::GestureScrollUpdate,
|
| + INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| +
|
| + MoveTouchPoint(0, 20, 5);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| +
|
| + // Consuming a scroll event prevents the next touch moves from being
|
| + // dispatched.
|
| + SendGestureEventAck(WebInputEvent::GestureScrollUpdate,
|
| + INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + MoveTouchPoint(0, 20, 5);
|
| + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| + }
|
| +}
|
| +
|
| } // namespace content
|
|
|