| 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 c57cbbe40d42f940d11e0d5bce03ae9aa8c720a2..b4631b98586705be458512f758451ebd1caae729 100644
|
| --- a/content/browser/renderer_host/input/touch_event_queue_unittest.cc
|
| +++ b/content/browser/renderer_host/input/touch_event_queue_unittest.cc
|
| @@ -41,6 +41,8 @@ class TouchEventQueueTest : public testing::Test,
|
| const TouchEventWithLatencyInfo& event) OVERRIDE {
|
| ++sent_event_count_;
|
| last_sent_event_ = event.event;
|
| + if (sync_ack_result_)
|
| + SendTouchEventACK(*sync_ack_result_.Pass());
|
| }
|
|
|
| virtual void OnTouchEventAck(
|
| @@ -93,6 +95,10 @@ class TouchEventQueueTest : public testing::Test,
|
| followup_gesture_event_.reset(new WebGestureEvent(event));
|
| }
|
|
|
| + void SetSyncAckResult(InputEventAckState sync_ack_result) {
|
| + sync_ack_result_.reset(new InputEventAckState(sync_ack_result));
|
| + }
|
| +
|
| int PressTouchPoint(int x, int y) {
|
| return touch_event_.PressPoint(x, y);
|
| }
|
| @@ -105,6 +111,10 @@ class TouchEventQueueTest : public testing::Test,
|
| touch_event_.ReleasePoint(index);
|
| }
|
|
|
| + void CancelTouchPoint(int index) {
|
| + touch_event_.CancelPoint(index);
|
| + }
|
| +
|
| size_t GetAndResetAckedEventCount() {
|
| size_t count = acked_event_count_;
|
| acked_event_count_ = 0;
|
| @@ -159,6 +169,7 @@ class TouchEventQueueTest : public testing::Test,
|
| SyntheticWebTouchEvent touch_event_;
|
| scoped_ptr<WebTouchEvent> followup_touch_event_;
|
| scoped_ptr<WebGestureEvent> followup_gesture_event_;
|
| + scoped_ptr<InputEventAckState> sync_ack_result_;
|
| };
|
|
|
|
|
| @@ -620,6 +631,51 @@ TEST_F(TouchEventQueueTest, AckWithFollowupEvents) {
|
| EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| }
|
|
|
| +// Tests that touch-events can be synchronously ack'ed.
|
| +TEST_F(TouchEventQueueTest, SynchronousAcks) {
|
| + // TouchStart
|
| + SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + PressTouchPoint(1, 1);
|
| + SendTouchEvent();
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| + EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| +
|
| + // TouchMove
|
| + SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + PressTouchPoint(1, 1);
|
| + MoveTouchPoint(0, 2, 2);
|
| + SendTouchEvent();
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| + EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| +
|
| + // TouchEnd
|
| + SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + PressTouchPoint(1, 1);
|
| + ReleaseTouchPoint(0);
|
| + SendTouchEvent();
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| + EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| +
|
| + // TouchCancel (first inserting a TouchStart so the TouchCancel will be sent)
|
| + PressTouchPoint(1, 1);
|
| + SendTouchEvent();
|
| + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| + EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| +
|
| + SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED);
|
| + PressTouchPoint(1, 1);
|
| + CancelTouchPoint(0);
|
| + SendTouchEvent();
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| + EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| +}
|
| +
|
| // Tests that followup events triggered by an immediate ack from
|
| // TouchEventQueue::QueueEvent() are properly handled.
|
| TEST_F(TouchEventQueueTest, ImmediateAckWithFollowupEvents) {
|
|
|