Chromium Code Reviews| 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..adbe5c618a84567c24c6783a859df1f86b46e62f 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_; |
|
tdresser
2013/11/21 13:54:31
Why bother with a pointer here, when |InputEventAc
jdduke (slow)
2013/11/21 16:55:29
scoped_ptr is as close as we have to an "optional<
tdresser
2013/11/21 17:02:48
Right, sounds good.
|
| }; |
| @@ -620,6 +631,51 @@ TEST_F(TouchEventQueueTest, AckWithFollowupEvents) { |
| EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| } |
| +// Tests that touch-event's can be synchronously ack'ed. |
|
tdresser
2013/11/21 13:54:31
s/event's/events
jdduke (slow)
2013/11/21 16:55:29
Done.
|
| +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) { |