| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/renderer_host/input/touch_event_queue.h" | 5 #include "content/browser/renderer_host/input/touch_event_queue.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 void SetUpForTimeoutTesting() { | 107 void SetUpForTimeoutTesting() { |
| 108 SetUpForTimeoutTesting(DefaultTouchTimeoutDelay(), | 108 SetUpForTimeoutTesting(DefaultTouchTimeoutDelay(), |
| 109 DefaultTouchTimeoutDelay()); | 109 DefaultTouchTimeoutDelay()); |
| 110 } | 110 } |
| 111 | 111 |
| 112 void SendTouchEvent(WebTouchEvent event) { | 112 void SendTouchEvent(WebTouchEvent event) { |
| 113 if (slop_length_dips_) { | 113 if (slop_length_dips_) { |
| 114 event.movedBeyondSlopRegion = false; | 114 event.movedBeyondSlopRegion = false; |
| 115 if (WebTouchEventTraits::IsTouchSequenceStart(event)) | 115 if (WebTouchEventTraits::IsTouchSequenceStart(event)) |
| 116 anchor_ = event.touches[0].position; | 116 anchor_ = event.touches[0].position; |
| 117 if (event.type == WebInputEvent::TouchMove) { | 117 if (event.type() == WebInputEvent::TouchMove) { |
| 118 gfx::Vector2dF delta = anchor_ - event.touches[0].position; | 118 gfx::Vector2dF delta = anchor_ - event.touches[0].position; |
| 119 if (delta.LengthSquared() > slop_length_dips_ * slop_length_dips_) | 119 if (delta.LengthSquared() > slop_length_dips_ * slop_length_dips_) |
| 120 event.movedBeyondSlopRegion = true; | 120 event.movedBeyondSlopRegion = true; |
| 121 } | 121 } |
| 122 } else { | 122 } else { |
| 123 event.movedBeyondSlopRegion = event.type == WebInputEvent::TouchMove; | 123 event.movedBeyondSlopRegion = event.type() == WebInputEvent::TouchMove; |
| 124 } | 124 } |
| 125 queue_->QueueEvent(TouchEventWithLatencyInfo(event, ui::LatencyInfo())); | 125 queue_->QueueEvent(TouchEventWithLatencyInfo(event, ui::LatencyInfo())); |
| 126 } | 126 } |
| 127 | 127 |
| 128 void SendGestureEvent(WebInputEvent::Type type) { | 128 void SendGestureEvent(WebInputEvent::Type type) { |
| 129 WebGestureEvent event(type, WebInputEvent::NoModifiers, | 129 WebGestureEvent event(type, WebInputEvent::NoModifiers, |
| 130 ui::EventTimeStampToSeconds(ui::EventTimeForNow())); | 130 ui::EventTimeStampToSeconds(ui::EventTimeForNow())); |
| 131 queue_->OnGestureScrollEvent( | 131 queue_->OnGestureScrollEvent( |
| 132 GestureEventWithLatencyInfo(event, ui::LatencyInfo())); | 132 GestureEventWithLatencyInfo(event, ui::LatencyInfo())); |
| 133 } | 133 } |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 | 190 |
| 191 void ChangeTouchPointRadius(int index, float radius_x, float radius_y) { | 191 void ChangeTouchPointRadius(int index, float radius_x, float radius_y) { |
| 192 CHECK_GE(index, 0); | 192 CHECK_GE(index, 0); |
| 193 CHECK_LT(index, touch_event_.kTouchesLengthCap); | 193 CHECK_LT(index, touch_event_.kTouchesLengthCap); |
| 194 WebTouchPoint& point = touch_event_.touches[index]; | 194 WebTouchPoint& point = touch_event_.touches[index]; |
| 195 point.radiusX = radius_x; | 195 point.radiusX = radius_x; |
| 196 point.radiusY = radius_y; | 196 point.radiusY = radius_y; |
| 197 touch_event_.touches[index].state = WebTouchPoint::StateMoved; | 197 touch_event_.touches[index].state = WebTouchPoint::StateMoved; |
| 198 touch_event_.movedBeyondSlopRegion = true; | 198 touch_event_.movedBeyondSlopRegion = true; |
| 199 WebTouchEventTraits::ResetType(WebInputEvent::TouchMove, | 199 WebTouchEventTraits::ResetType(WebInputEvent::TouchMove, |
| 200 touch_event_.timeStampSeconds, | 200 touch_event_.timeStampSeconds(), |
| 201 &touch_event_); | 201 &touch_event_); |
| 202 SendTouchEvent(); | 202 SendTouchEvent(); |
| 203 } | 203 } |
| 204 | 204 |
| 205 void ChangeTouchPointRotationAngle(int index, float rotation_angle) { | 205 void ChangeTouchPointRotationAngle(int index, float rotation_angle) { |
| 206 CHECK_GE(index, 0); | 206 CHECK_GE(index, 0); |
| 207 CHECK_LT(index, touch_event_.kTouchesLengthCap); | 207 CHECK_LT(index, touch_event_.kTouchesLengthCap); |
| 208 WebTouchPoint& point = touch_event_.touches[index]; | 208 WebTouchPoint& point = touch_event_.touches[index]; |
| 209 point.rotationAngle = rotation_angle; | 209 point.rotationAngle = rotation_angle; |
| 210 touch_event_.touches[index].state = WebTouchPoint::StateMoved; | 210 touch_event_.touches[index].state = WebTouchPoint::StateMoved; |
| 211 touch_event_.movedBeyondSlopRegion = true; | 211 touch_event_.movedBeyondSlopRegion = true; |
| 212 WebTouchEventTraits::ResetType(WebInputEvent::TouchMove, | 212 WebTouchEventTraits::ResetType(WebInputEvent::TouchMove, |
| 213 touch_event_.timeStampSeconds, | 213 touch_event_.timeStampSeconds(), |
| 214 &touch_event_); | 214 &touch_event_); |
| 215 SendTouchEvent(); | 215 SendTouchEvent(); |
| 216 } | 216 } |
| 217 | 217 |
| 218 void ChangeTouchPointForce(int index, float force) { | 218 void ChangeTouchPointForce(int index, float force) { |
| 219 CHECK_GE(index, 0); | 219 CHECK_GE(index, 0); |
| 220 CHECK_LT(index, touch_event_.kTouchesLengthCap); | 220 CHECK_LT(index, touch_event_.kTouchesLengthCap); |
| 221 WebTouchPoint& point = touch_event_.touches[index]; | 221 WebTouchPoint& point = touch_event_.touches[index]; |
| 222 point.force = force; | 222 point.force = force; |
| 223 touch_event_.touches[index].state = WebTouchPoint::StateMoved; | 223 touch_event_.touches[index].state = WebTouchPoint::StateMoved; |
| 224 touch_event_.movedBeyondSlopRegion = true; | 224 touch_event_.movedBeyondSlopRegion = true; |
| 225 WebTouchEventTraits::ResetType(WebInputEvent::TouchMove, | 225 WebTouchEventTraits::ResetType(WebInputEvent::TouchMove, |
| 226 touch_event_.timeStampSeconds, | 226 touch_event_.timeStampSeconds(), |
| 227 &touch_event_); | 227 &touch_event_); |
| 228 SendTouchEvent(); | 228 SendTouchEvent(); |
| 229 } | 229 } |
| 230 | 230 |
| 231 void ReleaseTouchPoint(int index) { | 231 void ReleaseTouchPoint(int index) { |
| 232 touch_event_.ReleasePoint(index); | 232 touch_event_.ReleasePoint(index); |
| 233 SendTouchEvent(); | 233 SendTouchEvent(); |
| 234 } | 234 } |
| 235 | 235 |
| 236 void CancelTouchPoint(int index) { | 236 void CancelTouchPoint(int index) { |
| 237 touch_event_.CancelPoint(index); | 237 touch_event_.CancelPoint(index); |
| 238 SendTouchEvent(); | 238 SendTouchEvent(); |
| 239 } | 239 } |
| 240 | 240 |
| 241 void PrependTouchScrollNotification() { | 241 void PrependTouchScrollNotification() { |
| 242 queue_->PrependTouchScrollNotification(); | 242 queue_->PrependTouchScrollNotification(); |
| 243 } | 243 } |
| 244 | 244 |
| 245 void AdvanceTouchTime(double seconds) { | 245 void AdvanceTouchTime(double seconds) { |
| 246 touch_event_.setTimeStampSeconds(touch_event_.timeStampSeconds + seconds); | 246 touch_event_.setTimeStampSeconds(touch_event_.timeStampSeconds() + seconds); |
| 247 } | 247 } |
| 248 | 248 |
| 249 void ResetTouchEvent() { | 249 void ResetTouchEvent() { |
| 250 touch_event_ = SyntheticWebTouchEvent(); | 250 touch_event_ = SyntheticWebTouchEvent(); |
| 251 } | 251 } |
| 252 | 252 |
| 253 size_t GetAndResetAckedEventCount() { | 253 size_t GetAndResetAckedEventCount() { |
| 254 size_t count = acked_event_count_; | 254 size_t count = acked_event_count_; |
| 255 acked_event_count_ = 0; | 255 acked_event_count_ = 0; |
| 256 return count; | 256 return count; |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 // The second touch should not be sent since one is already in queue. | 355 // The second touch should not be sent since one is already in queue. |
| 356 MoveTouchPoint(0, 5, 5); | 356 MoveTouchPoint(0, 5, 5); |
| 357 EXPECT_EQ(2U, queued_event_count()); | 357 EXPECT_EQ(2U, queued_event_count()); |
| 358 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 358 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 359 | 359 |
| 360 // Receive an ACK for the first touch-event. | 360 // Receive an ACK for the first touch-event. |
| 361 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 361 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 362 EXPECT_EQ(1U, queued_event_count()); | 362 EXPECT_EQ(1U, queued_event_count()); |
| 363 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 363 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 364 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 364 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 365 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); | 365 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type()); |
| 366 EXPECT_EQ(WebInputEvent::Blocking, acked_event().dispatchType); | 366 EXPECT_EQ(WebInputEvent::Blocking, acked_event().dispatchType); |
| 367 | 367 |
| 368 // Receive an ACK for the second touch-event. | 368 // Receive an ACK for the second touch-event. |
| 369 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 369 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 370 EXPECT_EQ(0U, queued_event_count()); | 370 EXPECT_EQ(0U, queued_event_count()); |
| 371 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 371 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 372 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 372 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 373 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); | 373 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type()); |
| 374 EXPECT_EQ(WebInputEvent::Blocking, acked_event().dispatchType); | 374 EXPECT_EQ(WebInputEvent::Blocking, acked_event().dispatchType); |
| 375 } | 375 } |
| 376 | 376 |
| 377 // Tests that touch-events with multiple points are queued properly. | 377 // Tests that touch-events with multiple points are queued properly. |
| 378 TEST_F(TouchEventQueueTest, BasicMultiTouch) { | 378 TEST_F(TouchEventQueueTest, BasicMultiTouch) { |
| 379 const size_t kPointerCount = 10; | 379 const size_t kPointerCount = 10; |
| 380 for (float i = 0; i < kPointerCount; ++i) | 380 for (float i = 0; i < kPointerCount; ++i) |
| 381 PressTouchPoint(i, i); | 381 PressTouchPoint(i, i); |
| 382 | 382 |
| 383 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 383 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 605 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 605 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 606 ReleaseTouchPoint(0); | 606 ReleaseTouchPoint(0); |
| 607 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 607 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 608 EXPECT_EQ(3U, queued_event_count()); | 608 EXPECT_EQ(3U, queued_event_count()); |
| 609 | 609 |
| 610 // ACK the press. Coalesced touch-move events should be sent. | 610 // ACK the press. Coalesced touch-move events should be sent. |
| 611 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 611 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 612 EXPECT_EQ(2U, queued_event_count()); | 612 EXPECT_EQ(2U, queued_event_count()); |
| 613 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 613 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 614 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 614 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 615 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); | 615 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type()); |
| 616 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, acked_event_state()); | 616 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, acked_event_state()); |
| 617 | 617 |
| 618 // ACK the moves. | 618 // ACK the moves. |
| 619 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 619 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 620 EXPECT_EQ(1U, queued_event_count()); | 620 EXPECT_EQ(1U, queued_event_count()); |
| 621 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 621 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 622 EXPECT_EQ(10U, GetAndResetAckedEventCount()); | 622 EXPECT_EQ(10U, GetAndResetAckedEventCount()); |
| 623 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); | 623 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type()); |
| 624 | 624 |
| 625 // ACK the release. | 625 // ACK the release. |
| 626 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 626 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 627 EXPECT_EQ(0U, queued_event_count()); | 627 EXPECT_EQ(0U, queued_event_count()); |
| 628 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 628 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 629 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 629 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 630 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type); | 630 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type()); |
| 631 } | 631 } |
| 632 | 632 |
| 633 // Tests that an event that has already been sent but hasn't been ack'ed yet | 633 // Tests that an event that has already been sent but hasn't been ack'ed yet |
| 634 // doesn't get coalesced with newer events. | 634 // doesn't get coalesced with newer events. |
| 635 TEST_F(TouchEventQueueTest, SentTouchEventDoesNotCoalesce) { | 635 TEST_F(TouchEventQueueTest, SentTouchEventDoesNotCoalesce) { |
| 636 // Send a touch-press event. | 636 // Send a touch-press event. |
| 637 PressTouchPoint(1, 1); | 637 PressTouchPoint(1, 1); |
| 638 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 638 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 639 | 639 |
| 640 // Send a few touch-move events, followed by a touch-release event. All the | 640 // Send a few touch-move events, followed by a touch-release event. All the |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 723 | 723 |
| 724 // The second touch should not be sent since one is already in queue. | 724 // The second touch should not be sent since one is already in queue. |
| 725 MoveTouchPoint(0, 5, 5); | 725 MoveTouchPoint(0, 5, 5); |
| 726 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 726 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 727 EXPECT_EQ(2U, queued_event_count()); | 727 EXPECT_EQ(2U, queued_event_count()); |
| 728 | 728 |
| 729 // Receive an ACK for the first touch-event. This should release the queued | 729 // Receive an ACK for the first touch-event. This should release the queued |
| 730 // touch-event, but it should not be sent to the renderer. | 730 // touch-event, but it should not be sent to the renderer. |
| 731 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 731 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
| 732 EXPECT_EQ(0U, queued_event_count()); | 732 EXPECT_EQ(0U, queued_event_count()); |
| 733 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); | 733 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type()); |
| 734 EXPECT_EQ(2U, GetAndResetAckedEventCount()); | 734 EXPECT_EQ(2U, GetAndResetAckedEventCount()); |
| 735 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 735 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 736 | 736 |
| 737 // Send a release event. This should not reach the renderer. | 737 // Send a release event. This should not reach the renderer. |
| 738 ReleaseTouchPoint(0); | 738 ReleaseTouchPoint(0); |
| 739 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 739 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 740 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type); | 740 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type()); |
| 741 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 741 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 742 | 742 |
| 743 // Send a press-event, followed by move and release events, and another press | 743 // Send a press-event, followed by move and release events, and another press |
| 744 // event, before the ACK for the first press event comes back. All of the | 744 // event, before the ACK for the first press event comes back. All of the |
| 745 // events should be queued first. After the NO_CONSUMER ack for the first | 745 // events should be queued first. After the NO_CONSUMER ack for the first |
| 746 // touch-press, all events upto the second touch-press should be flushed. | 746 // touch-press, all events upto the second touch-press should be flushed. |
| 747 PressTouchPoint(10, 10); | 747 PressTouchPoint(10, 10); |
| 748 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 748 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 749 | 749 |
| 750 MoveTouchPoint(0, 5, 5); | 750 MoveTouchPoint(0, 5, 5); |
| 751 MoveTouchPoint(0, 6, 5); | 751 MoveTouchPoint(0, 6, 5); |
| 752 ReleaseTouchPoint(0); | 752 ReleaseTouchPoint(0); |
| 753 | 753 |
| 754 PressTouchPoint(6, 5); | 754 PressTouchPoint(6, 5); |
| 755 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 755 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 756 // The queue should hold the first sent touch-press event, the coalesced | 756 // The queue should hold the first sent touch-press event, the coalesced |
| 757 // touch-move event, the touch-end event and the second touch-press event. | 757 // touch-move event, the touch-end event and the second touch-press event. |
| 758 EXPECT_EQ(4U, queued_event_count()); | 758 EXPECT_EQ(4U, queued_event_count()); |
| 759 | 759 |
| 760 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 760 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
| 761 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 761 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 762 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type); | 762 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type()); |
| 763 EXPECT_EQ(4U, GetAndResetAckedEventCount()); | 763 EXPECT_EQ(4U, GetAndResetAckedEventCount()); |
| 764 EXPECT_EQ(1U, queued_event_count()); | 764 EXPECT_EQ(1U, queued_event_count()); |
| 765 | 765 |
| 766 // ACK the second press event as NO_CONSUMER too. | 766 // ACK the second press event as NO_CONSUMER too. |
| 767 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 767 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
| 768 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 768 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 769 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); | 769 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type()); |
| 770 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 770 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 771 EXPECT_EQ(0U, queued_event_count()); | 771 EXPECT_EQ(0U, queued_event_count()); |
| 772 | 772 |
| 773 // Send a second press event. Even though the first touch press had | 773 // Send a second press event. Even though the first touch press had |
| 774 // NO_CONSUMER, this press event should reach the renderer. | 774 // NO_CONSUMER, this press event should reach the renderer. |
| 775 PressTouchPoint(1, 1); | 775 PressTouchPoint(1, 1); |
| 776 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 776 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 777 EXPECT_EQ(1U, queued_event_count()); | 777 EXPECT_EQ(1U, queued_event_count()); |
| 778 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 778 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 779 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); | 779 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type()); |
| 780 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 780 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 781 } | 781 } |
| 782 | 782 |
| 783 TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) { | 783 TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) { |
| 784 // Interleave three pointer press, move and release events. | 784 // Interleave three pointer press, move and release events. |
| 785 PressTouchPoint(1, 1); | 785 PressTouchPoint(1, 1); |
| 786 MoveTouchPoint(0, 5, 5); | 786 MoveTouchPoint(0, 5, 5); |
| 787 PressTouchPoint(10, 10); | 787 PressTouchPoint(10, 10); |
| 788 MoveTouchPoint(1, 15, 15); | 788 MoveTouchPoint(1, 15, 15); |
| 789 PressTouchPoint(20, 20); | 789 PressTouchPoint(20, 20); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 851 followup_event.touches[0].state = WebTouchPoint::StateMoved; | 851 followup_event.touches[0].state = WebTouchPoint::StateMoved; |
| 852 SetFollowupEvent(followup_event); | 852 SetFollowupEvent(followup_event); |
| 853 | 853 |
| 854 // Receive an ACK for the press. This should cause the followup touch-move to | 854 // Receive an ACK for the press. This should cause the followup touch-move to |
| 855 // be sent to the renderer. | 855 // be sent to the renderer. |
| 856 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 856 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 857 EXPECT_EQ(1U, queued_event_count()); | 857 EXPECT_EQ(1U, queued_event_count()); |
| 858 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 858 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 859 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 859 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 860 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, acked_event_state()); | 860 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, acked_event_state()); |
| 861 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); | 861 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type()); |
| 862 | 862 |
| 863 // Queue another event. | 863 // Queue another event. |
| 864 MoveTouchPoint(0, 2, 2); | 864 MoveTouchPoint(0, 2, 2); |
| 865 EXPECT_EQ(2U, queued_event_count()); | 865 EXPECT_EQ(2U, queued_event_count()); |
| 866 | 866 |
| 867 // Receive an ACK for the touch-move followup event. This should cause the | 867 // Receive an ACK for the touch-move followup event. This should cause the |
| 868 // subsequent touch move event be sent to the renderer. | 868 // subsequent touch move event be sent to the renderer. |
| 869 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 869 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 870 EXPECT_EQ(1U, queued_event_count()); | 870 EXPECT_EQ(1U, queued_event_count()); |
| 871 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 871 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 930 ; | 930 ; |
| 931 stationary_event.touchesLength = 1; | 931 stationary_event.touchesLength = 1; |
| 932 stationary_event.touches[0].id = 1; | 932 stationary_event.touches[0].id = 1; |
| 933 stationary_event.touches[0].state = WebTouchPoint::StateStationary; | 933 stationary_event.touches[0].state = WebTouchPoint::StateStationary; |
| 934 SendTouchEvent(stationary_event); | 934 SendTouchEvent(stationary_event); |
| 935 | 935 |
| 936 EXPECT_EQ(1U, queued_event_count()); | 936 EXPECT_EQ(1U, queued_event_count()); |
| 937 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 937 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 938 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 938 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 939 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); | 939 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); |
| 940 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); | 940 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type()); |
| 941 } | 941 } |
| 942 | 942 |
| 943 // Tests basic TouchEvent forwarding suppression. | 943 // Tests basic TouchEvent forwarding suppression. |
| 944 TEST_F(TouchEventQueueTest, NoTouchBasic) { | 944 TEST_F(TouchEventQueueTest, NoTouchBasic) { |
| 945 // Disable TouchEvent forwarding. | 945 // Disable TouchEvent forwarding. |
| 946 OnHasTouchEventHandlers(false); | 946 OnHasTouchEventHandlers(false); |
| 947 PressTouchPoint(30, 5); | 947 PressTouchPoint(30, 5); |
| 948 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 948 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 949 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 949 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 950 | 950 |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1075 // The timeout should have fired, synthetically ack'ing the timed-out event. | 1075 // The timeout should have fired, synthetically ack'ing the timed-out event. |
| 1076 // TouchEvent forwarding is disabled until the ack is received for the | 1076 // TouchEvent forwarding is disabled until the ack is received for the |
| 1077 // timed-out event and the future cancel event. | 1077 // timed-out event and the future cancel event. |
| 1078 EXPECT_FALSE(IsTimeoutRunning()); | 1078 EXPECT_FALSE(IsTimeoutRunning()); |
| 1079 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1079 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1080 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1080 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1081 | 1081 |
| 1082 // Ack'ing the original event should trigger a cancel event. | 1082 // Ack'ing the original event should trigger a cancel event. |
| 1083 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1083 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1084 EXPECT_FALSE(IsTimeoutRunning()); | 1084 EXPECT_FALSE(IsTimeoutRunning()); |
| 1085 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type); | 1085 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type()); |
| 1086 EXPECT_NE(WebInputEvent::Blocking, sent_event().dispatchType); | 1086 EXPECT_NE(WebInputEvent::Blocking, sent_event().dispatchType); |
| 1087 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1087 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 1088 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1088 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1089 | 1089 |
| 1090 // Touch events should not be forwarded until we receive the cancel acks. | 1090 // Touch events should not be forwarded until we receive the cancel acks. |
| 1091 MoveTouchPoint(0, 1, 1); | 1091 MoveTouchPoint(0, 1, 1); |
| 1092 ASSERT_EQ(0U, GetAndResetSentEventCount()); | 1092 ASSERT_EQ(0U, GetAndResetSentEventCount()); |
| 1093 ASSERT_EQ(1U, GetAndResetAckedEventCount()); | 1093 ASSERT_EQ(1U, GetAndResetAckedEventCount()); |
| 1094 | 1094 |
| 1095 ReleaseTouchPoint(0); | 1095 ReleaseTouchPoint(0); |
| 1096 ASSERT_EQ(0U, GetAndResetSentEventCount()); | 1096 ASSERT_EQ(0U, GetAndResetSentEventCount()); |
| 1097 ASSERT_EQ(1U, GetAndResetAckedEventCount()); | 1097 ASSERT_EQ(1U, GetAndResetAckedEventCount()); |
| 1098 | 1098 |
| 1099 // The synthetic TouchCancel ack should not reach the client, but should | 1099 // The synthetic TouchCancel ack should not reach the client, but should |
| 1100 // resume touch forwarding. | 1100 // resume touch forwarding. |
| 1101 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1101 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1102 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1102 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1103 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1103 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 1104 | 1104 |
| 1105 // Subsequent events should be handled normally. | 1105 // Subsequent events should be handled normally. |
| 1106 PressTouchPoint(0, 1); | 1106 PressTouchPoint(0, 1); |
| 1107 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type); | 1107 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type()); |
| 1108 EXPECT_EQ(WebInputEvent::Blocking, sent_event().dispatchType); | 1108 EXPECT_EQ(WebInputEvent::Blocking, sent_event().dispatchType); |
| 1109 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1109 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1110 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1110 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 1111 } | 1111 } |
| 1112 | 1112 |
| 1113 // Tests that the timeout is never started if the renderer consumes | 1113 // Tests that the timeout is never started if the renderer consumes |
| 1114 // a TouchEvent from the current touch sequence. | 1114 // a TouchEvent from the current touch sequence. |
| 1115 TEST_F(TouchEventQueueTest, NoTouchTimeoutIfRendererIsConsumingGesture) { | 1115 TEST_F(TouchEventQueueTest, NoTouchTimeoutIfRendererIsConsumingGesture) { |
| 1116 SetUpForTimeoutTesting(); | 1116 SetUpForTimeoutTesting(); |
| 1117 | 1117 |
| (...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1677 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1677 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1678 | 1678 |
| 1679 // Queuing the final touchend should flush the pending async touchmove. In | 1679 // Queuing the final touchend should flush the pending async touchmove. In |
| 1680 // this case, we will first dispatch an async touchmove and then a touchend. | 1680 // this case, we will first dispatch an async touchmove and then a touchend. |
| 1681 // For the async touchmove, we will not send ack again. | 1681 // For the async touchmove, we will not send ack again. |
| 1682 ReleaseTouchPoint(0); | 1682 ReleaseTouchPoint(0); |
| 1683 followup_scroll.setType(WebInputEvent::GestureScrollEnd); | 1683 followup_scroll.setType(WebInputEvent::GestureScrollEnd); |
| 1684 SetFollowupEvent(followup_scroll); | 1684 SetFollowupEvent(followup_scroll); |
| 1685 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 1685 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
| 1686 EXPECT_EQ(2U, all_sent_events().size()); | 1686 EXPECT_EQ(2U, all_sent_events().size()); |
| 1687 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[0].type); | 1687 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[0].type()); |
| 1688 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[0].dispatchType); | 1688 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[0].dispatchType); |
| 1689 EXPECT_EQ(WebInputEvent::TouchEnd, all_sent_events()[1].type); | 1689 EXPECT_EQ(WebInputEvent::TouchEnd, all_sent_events()[1].type()); |
| 1690 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[1].dispatchType); | 1690 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[1].dispatchType); |
| 1691 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 1691 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 1692 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1692 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 1693 EXPECT_EQ(1U, queued_event_count()); | 1693 EXPECT_EQ(1U, queued_event_count()); |
| 1694 | 1694 |
| 1695 // Ack the touchend. | 1695 // Ack the touchend. |
| 1696 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1696 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1697 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1697 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1698 EXPECT_EQ(0U, queued_event_count()); | 1698 EXPECT_EQ(0U, queued_event_count()); |
| 1699 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1699 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1756 // this case, we will first dispatch an async touchmove and then a | 1756 // this case, we will first dispatch an async touchmove and then a |
| 1757 // touchstart. For the async touchmove, we will not send ack again. | 1757 // touchstart. For the async touchmove, we will not send ack again. |
| 1758 MoveTouchPoint(0, 0, 25); | 1758 MoveTouchPoint(0, 0, 25); |
| 1759 EXPECT_TRUE(HasPendingAsyncTouchMove()); | 1759 EXPECT_TRUE(HasPendingAsyncTouchMove()); |
| 1760 EXPECT_EQ(0U, queued_event_count()); | 1760 EXPECT_EQ(0U, queued_event_count()); |
| 1761 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1761 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1762 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1762 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1763 PressTouchPoint(30, 30); | 1763 PressTouchPoint(30, 30); |
| 1764 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 1764 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
| 1765 EXPECT_EQ(2U, all_sent_events().size()); | 1765 EXPECT_EQ(2U, all_sent_events().size()); |
| 1766 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[0].type); | 1766 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[0].type()); |
| 1767 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[0].dispatchType); | 1767 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[0].dispatchType); |
| 1768 EXPECT_EQ(WebInputEvent::TouchStart, all_sent_events()[1].type); | 1768 EXPECT_EQ(WebInputEvent::TouchStart, all_sent_events()[1].type()); |
| 1769 EXPECT_EQ(WebInputEvent::Blocking, all_sent_events()[1].dispatchType); | 1769 EXPECT_EQ(WebInputEvent::Blocking, all_sent_events()[1].dispatchType); |
| 1770 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 1770 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 1771 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1771 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 1772 EXPECT_EQ(1U, queued_event_count()); | 1772 EXPECT_EQ(1U, queued_event_count()); |
| 1773 | 1773 |
| 1774 // Ack the touchstart. | 1774 // Ack the touchstart. |
| 1775 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1775 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1776 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1776 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1777 EXPECT_EQ(0U, queued_event_count()); | 1777 EXPECT_EQ(0U, queued_event_count()); |
| 1778 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1778 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1779 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1779 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1780 | 1780 |
| 1781 // Send a secondary touchmove. | 1781 // Send a secondary touchmove. |
| 1782 MoveTouchPoint(1, 0, 25); | 1782 MoveTouchPoint(1, 0, 25); |
| 1783 EXPECT_TRUE(HasPendingAsyncTouchMove()); | 1783 EXPECT_TRUE(HasPendingAsyncTouchMove()); |
| 1784 EXPECT_EQ(0U, queued_event_count()); | 1784 EXPECT_EQ(0U, queued_event_count()); |
| 1785 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1785 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1786 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1786 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1787 | 1787 |
| 1788 // An unconsumed scroll should resume synchronous touch handling. | 1788 // An unconsumed scroll should resume synchronous touch handling. |
| 1789 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, | 1789 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, |
| 1790 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1790 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1791 | 1791 |
| 1792 // The pending touchmove should be coalesced with the next (now synchronous) | 1792 // The pending touchmove should be coalesced with the next (now synchronous) |
| 1793 // touchmove. | 1793 // touchmove. |
| 1794 MoveTouchPoint(0, 0, 26); | 1794 MoveTouchPoint(0, 0, 26); |
| 1795 EXPECT_EQ(WebInputEvent::Blocking, sent_event().dispatchType); | 1795 EXPECT_EQ(WebInputEvent::Blocking, sent_event().dispatchType); |
| 1796 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 1796 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
| 1797 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | 1797 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type()); |
| 1798 EXPECT_EQ(WebTouchPoint::StateMoved, sent_event().touches[0].state); | 1798 EXPECT_EQ(WebTouchPoint::StateMoved, sent_event().touches[0].state); |
| 1799 EXPECT_EQ(WebTouchPoint::StateMoved, sent_event().touches[1].state); | 1799 EXPECT_EQ(WebTouchPoint::StateMoved, sent_event().touches[1].state); |
| 1800 EXPECT_EQ(1U, queued_event_count()); | 1800 EXPECT_EQ(1U, queued_event_count()); |
| 1801 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1801 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1802 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1802 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 1803 | 1803 |
| 1804 // Subsequent touches will queue until the preceding, synchronous touches are | 1804 // Subsequent touches will queue until the preceding, synchronous touches are |
| 1805 // ack'ed. | 1805 // ack'ed. |
| 1806 ReleaseTouchPoint(1); | 1806 ReleaseTouchPoint(1); |
| 1807 EXPECT_EQ(2U, queued_event_count()); | 1807 EXPECT_EQ(2U, queued_event_count()); |
| 1808 ReleaseTouchPoint(0); | 1808 ReleaseTouchPoint(0); |
| 1809 EXPECT_EQ(3U, queued_event_count()); | 1809 EXPECT_EQ(3U, queued_event_count()); |
| 1810 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1810 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1811 EXPECT_EQ(WebInputEvent::Blocking, sent_event().dispatchType); | 1811 EXPECT_EQ(WebInputEvent::Blocking, sent_event().dispatchType); |
| 1812 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type); | 1812 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type()); |
| 1813 EXPECT_EQ(2U, queued_event_count()); | 1813 EXPECT_EQ(2U, queued_event_count()); |
| 1814 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1814 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1815 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1815 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1816 | 1816 |
| 1817 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1817 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1818 EXPECT_EQ(WebInputEvent::Blocking, sent_event().dispatchType); | 1818 EXPECT_EQ(WebInputEvent::Blocking, sent_event().dispatchType); |
| 1819 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type); | 1819 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type()); |
| 1820 EXPECT_EQ(1U, queued_event_count()); | 1820 EXPECT_EQ(1U, queued_event_count()); |
| 1821 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1821 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1822 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1822 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1823 | 1823 |
| 1824 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1824 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1825 EXPECT_EQ(0U, queued_event_count()); | 1825 EXPECT_EQ(0U, queued_event_count()); |
| 1826 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1826 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1827 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1827 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1828 } | 1828 } |
| 1829 | 1829 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1864 EXPECT_EQ(0U, queued_event_count()); | 1864 EXPECT_EQ(0U, queued_event_count()); |
| 1865 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1865 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1866 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1866 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1867 | 1867 |
| 1868 // Queuing the final touchend should flush the pending, async touchmove. In | 1868 // Queuing the final touchend should flush the pending, async touchmove. In |
| 1869 // this case, we will first dispatch an async touchmove and then a touchend. | 1869 // this case, we will first dispatch an async touchmove and then a touchend. |
| 1870 // For the async touchmove, we will not send ack again. | 1870 // For the async touchmove, we will not send ack again. |
| 1871 ReleaseTouchPoint(0); | 1871 ReleaseTouchPoint(0); |
| 1872 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 1872 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
| 1873 EXPECT_EQ(2U, all_sent_events().size()); | 1873 EXPECT_EQ(2U, all_sent_events().size()); |
| 1874 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[0].type); | 1874 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[0].type()); |
| 1875 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[0].dispatchType); | 1875 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[0].dispatchType); |
| 1876 EXPECT_EQ(0, all_sent_events()[0].touches[0].position.x); | 1876 EXPECT_EQ(0, all_sent_events()[0].touches[0].position.x); |
| 1877 EXPECT_EQ(0, all_sent_events()[0].touches[0].position.y); | 1877 EXPECT_EQ(0, all_sent_events()[0].touches[0].position.y); |
| 1878 EXPECT_EQ(WebInputEvent::TouchEnd, all_sent_events()[1].type); | 1878 EXPECT_EQ(WebInputEvent::TouchEnd, all_sent_events()[1].type()); |
| 1879 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[1].dispatchType); | 1879 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[1].dispatchType); |
| 1880 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 1880 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 1881 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1881 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 1882 } | 1882 } |
| 1883 | 1883 |
| 1884 // Ensure that async touch dispatch and touch ack timeout interactions work | 1884 // Ensure that async touch dispatch and touch ack timeout interactions work |
| 1885 // appropriately. | 1885 // appropriately. |
| 1886 TEST_F(TouchEventQueueTest, AsyncTouchWithAckTimeout) { | 1886 TEST_F(TouchEventQueueTest, AsyncTouchWithAckTimeout) { |
| 1887 SetUpForTimeoutTesting(); | 1887 SetUpForTimeoutTesting(); |
| 1888 | 1888 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1989 // the queued touchcancel should be flushed. | 1989 // the queued touchcancel should be flushed. |
| 1990 WebTouchEvent followup_cancel(WebInputEvent::TouchCancel, | 1990 WebTouchEvent followup_cancel(WebInputEvent::TouchCancel, |
| 1991 WebInputEvent::NoModifiers, | 1991 WebInputEvent::NoModifiers, |
| 1992 WebInputEvent::TimeStampForTesting); | 1992 WebInputEvent::TimeStampForTesting); |
| 1993 followup_cancel.touchesLength = 1; | 1993 followup_cancel.touchesLength = 1; |
| 1994 followup_cancel.touches[0].state = WebTouchPoint::StateCancelled; | 1994 followup_cancel.touches[0].state = WebTouchPoint::StateCancelled; |
| 1995 SetFollowupEvent(followup_cancel); | 1995 SetFollowupEvent(followup_cancel); |
| 1996 MoveTouchPoint(0, 5, 5); | 1996 MoveTouchPoint(0, 5, 5); |
| 1997 EXPECT_EQ(1U, queued_event_count()); | 1997 EXPECT_EQ(1U, queued_event_count()); |
| 1998 EXPECT_EQ(2U, all_sent_events().size()); | 1998 EXPECT_EQ(2U, all_sent_events().size()); |
| 1999 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[0].type); | 1999 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[0].type()); |
| 2000 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[0].dispatchType); | 2000 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[0].dispatchType); |
| 2001 EXPECT_EQ(WebInputEvent::TouchCancel, all_sent_events()[1].type); | 2001 EXPECT_EQ(WebInputEvent::TouchCancel, all_sent_events()[1].type()); |
| 2002 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[1].dispatchType); | 2002 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[1].dispatchType); |
| 2003 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 2003 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 2004 // Sending the ack is because the async touchmove is not ready for | 2004 // Sending the ack is because the async touchmove is not ready for |
| 2005 // dispatching send the ack immediately. | 2005 // dispatching send the ack immediately. |
| 2006 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2006 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2007 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); | 2007 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type()); |
| 2008 | 2008 |
| 2009 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2009 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2010 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2010 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2011 EXPECT_EQ(0U, queued_event_count()); | 2011 EXPECT_EQ(0U, queued_event_count()); |
| 2012 EXPECT_EQ(WebInputEvent::TouchCancel, acked_event().type); | 2012 EXPECT_EQ(WebInputEvent::TouchCancel, acked_event().type()); |
| 2013 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2013 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2014 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 2014 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 2015 } | 2015 } |
| 2016 | 2016 |
| 2017 // Ensure that the async touch is fully reset if the touch sequence restarts | 2017 // Ensure that the async touch is fully reset if the touch sequence restarts |
| 2018 // without properly terminating. | 2018 // without properly terminating. |
| 2019 TEST_F(TouchEventQueueTest, AsyncTouchWithHardTouchStartReset) { | 2019 TEST_F(TouchEventQueueTest, AsyncTouchWithHardTouchStartReset) { |
| 2020 PressTouchPoint(0, 0); | 2020 PressTouchPoint(0, 0); |
| 2021 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2021 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2022 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2022 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2023 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2023 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2024 | 2024 |
| 2025 // Trigger async touchmove dispatch. | 2025 // Trigger async touchmove dispatch. |
| 2026 MoveTouchPoint(0, 1, 1); | 2026 MoveTouchPoint(0, 1, 1); |
| 2027 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2027 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2028 WebGestureEvent followup_scroll(WebInputEvent::GestureScrollBegin, | 2028 WebGestureEvent followup_scroll(WebInputEvent::GestureScrollBegin, |
| 2029 WebInputEvent::NoModifiers, | 2029 WebInputEvent::NoModifiers, |
| 2030 WebInputEvent::TimeStampForTesting); | 2030 WebInputEvent::TimeStampForTesting); |
| 2031 SetFollowupEvent(followup_scroll); | 2031 SetFollowupEvent(followup_scroll); |
| 2032 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2032 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2033 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2033 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2034 EXPECT_EQ(0U, queued_event_count()); | 2034 EXPECT_EQ(0U, queued_event_count()); |
| 2035 SendGestureEvent(WebInputEvent::GestureScrollUpdate); | 2035 SendGestureEvent(WebInputEvent::GestureScrollUpdate); |
| 2036 | 2036 |
| 2037 // The async touchmove should be immediately ack'ed but delivery is deferred. | 2037 // The async touchmove should be immediately ack'ed but delivery is deferred. |
| 2038 MoveTouchPoint(0, 2, 2); | 2038 MoveTouchPoint(0, 2, 2); |
| 2039 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 2039 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 2040 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2040 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2041 EXPECT_EQ(0U, queued_event_count()); | 2041 EXPECT_EQ(0U, queued_event_count()); |
| 2042 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); | 2042 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type()); |
| 2043 | 2043 |
| 2044 // The queue should be robust to hard touch restarts with a new touch | 2044 // The queue should be robust to hard touch restarts with a new touch |
| 2045 // sequence. In this case, the deferred async touch should not be flushed | 2045 // sequence. In this case, the deferred async touch should not be flushed |
| 2046 // by the new touch sequence. | 2046 // by the new touch sequence. |
| 2047 SendGestureEvent(WebInputEvent::GestureScrollEnd); | 2047 SendGestureEvent(WebInputEvent::GestureScrollEnd); |
| 2048 ResetTouchEvent(); | 2048 ResetTouchEvent(); |
| 2049 | 2049 |
| 2050 PressTouchPoint(0, 0); | 2050 PressTouchPoint(0, 0); |
| 2051 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type); | 2051 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type()); |
| 2052 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2052 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2053 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2053 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2054 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2054 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2055 } | 2055 } |
| 2056 | 2056 |
| 2057 // Ensure that even when the interval expires, we still need to wait for the | 2057 // Ensure that even when the interval expires, we still need to wait for the |
| 2058 // ack sent back from render to send the next async touchmove once the scroll | 2058 // ack sent back from render to send the next async touchmove once the scroll |
| 2059 // starts. | 2059 // starts. |
| 2060 TEST_F(TouchEventQueueTest, SendNextThrottledAsyncTouchMoveAfterAck) { | 2060 TEST_F(TouchEventQueueTest, SendNextThrottledAsyncTouchMoveAfterAck) { |
| 2061 // Process a TouchStart | 2061 // Process a TouchStart |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2163 MoveTouchPoint(0, 0, 50); | 2163 MoveTouchPoint(0, 0, 50); |
| 2164 EXPECT_TRUE(HasPendingAsyncTouchMove()); | 2164 EXPECT_TRUE(HasPendingAsyncTouchMove()); |
| 2165 EXPECT_EQ(0U, queued_event_count()); | 2165 EXPECT_EQ(0U, queued_event_count()); |
| 2166 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 2166 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 2167 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2167 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2168 | 2168 |
| 2169 // Dispatch the touch move when sufficient time has passed. | 2169 // Dispatch the touch move when sufficient time has passed. |
| 2170 AdvanceTouchTime(kMinSecondsBetweenThrottledTouchmoves + 0.1); | 2170 AdvanceTouchTime(kMinSecondsBetweenThrottledTouchmoves + 0.1); |
| 2171 MoveTouchPoint(0, 0, 50); | 2171 MoveTouchPoint(0, 0, 50); |
| 2172 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 2172 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
| 2173 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | 2173 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type()); |
| 2174 EXPECT_NE(WebInputEvent::Blocking, sent_event().dispatchType); | 2174 EXPECT_NE(WebInputEvent::Blocking, sent_event().dispatchType); |
| 2175 EXPECT_EQ(0U, queued_event_count()); | 2175 EXPECT_EQ(0U, queued_event_count()); |
| 2176 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2176 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2177 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2177 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2178 EXPECT_EQ(1U, uncancelable_touch_moves_pending_ack_count()); | 2178 EXPECT_EQ(1U, uncancelable_touch_moves_pending_ack_count()); |
| 2179 } | 2179 } |
| 2180 | 2180 |
| 2181 TEST_F(TouchEventQueueTest, AsyncTouchFlushedByNonTouchMove) { | 2181 TEST_F(TouchEventQueueTest, AsyncTouchFlushedByNonTouchMove) { |
| 2182 // Process a TouchStart | 2182 // Process a TouchStart |
| 2183 PressTouchPoint(0, 1); | 2183 PressTouchPoint(0, 1); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2225 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2225 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2226 EXPECT_EQ(static_cast<size_t>(i + 1), | 2226 EXPECT_EQ(static_cast<size_t>(i + 1), |
| 2227 uncancelable_touch_moves_pending_ack_count()); | 2227 uncancelable_touch_moves_pending_ack_count()); |
| 2228 | 2228 |
| 2229 // Send touchstart will flush pending_async_touch_move_, and increase the | 2229 // Send touchstart will flush pending_async_touch_move_, and increase the |
| 2230 // count. In this case, we will first dispatch an async touchmove and | 2230 // count. In this case, we will first dispatch an async touchmove and |
| 2231 // then a touchstart. For the async touchmove, we will not send ack again. | 2231 // then a touchstart. For the async touchmove, we will not send ack again. |
| 2232 PressTouchPoint(30, 30); | 2232 PressTouchPoint(30, 30); |
| 2233 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 2233 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
| 2234 EXPECT_EQ(2U, all_sent_events().size()); | 2234 EXPECT_EQ(2U, all_sent_events().size()); |
| 2235 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[0].type); | 2235 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[0].type()); |
| 2236 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[0].dispatchType); | 2236 EXPECT_NE(WebInputEvent::Blocking, all_sent_events()[0].dispatchType); |
| 2237 EXPECT_EQ(10 + 10 * i, all_sent_events()[0].touches[0].position.x); | 2237 EXPECT_EQ(10 + 10 * i, all_sent_events()[0].touches[0].position.x); |
| 2238 EXPECT_EQ(10 + 10 * i, all_sent_events()[0].touches[0].position.y); | 2238 EXPECT_EQ(10 + 10 * i, all_sent_events()[0].touches[0].position.y); |
| 2239 EXPECT_EQ(static_cast<size_t>(i + 2), | 2239 EXPECT_EQ(static_cast<size_t>(i + 2), |
| 2240 uncancelable_touch_moves_pending_ack_count()); | 2240 uncancelable_touch_moves_pending_ack_count()); |
| 2241 EXPECT_EQ(WebInputEvent::TouchStart, all_sent_events()[1].type); | 2241 EXPECT_EQ(WebInputEvent::TouchStart, all_sent_events()[1].type()); |
| 2242 EXPECT_EQ(WebInputEvent::Blocking, all_sent_events()[1].dispatchType); | 2242 EXPECT_EQ(WebInputEvent::Blocking, all_sent_events()[1].dispatchType); |
| 2243 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 2243 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 2244 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 2244 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 2245 | 2245 |
| 2246 SendTouchEventAckWithID(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, | 2246 SendTouchEventAckWithID(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, |
| 2247 GetUniqueTouchEventID()); | 2247 GetUniqueTouchEventID()); |
| 2248 EXPECT_EQ(0U, queued_event_count()); | 2248 EXPECT_EQ(0U, queued_event_count()); |
| 2249 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 2249 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
| 2250 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 2250 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 2251 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2251 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2277 EXPECT_TRUE(HasPendingAsyncTouchMove()); | 2277 EXPECT_TRUE(HasPendingAsyncTouchMove()); |
| 2278 | 2278 |
| 2279 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2279 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2280 | 2280 |
| 2281 // When we receive this ack from render, and the count is 0, so we can | 2281 // When we receive this ack from render, and the count is 0, so we can |
| 2282 // dispatch the pending_async_touchmove_. | 2282 // dispatch the pending_async_touchmove_. |
| 2283 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2283 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 2284 EXPECT_EQ(1U, uncancelable_touch_moves_pending_ack_count()); | 2284 EXPECT_EQ(1U, uncancelable_touch_moves_pending_ack_count()); |
| 2285 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 2285 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
| 2286 EXPECT_EQ(0U, queued_event_count()); | 2286 EXPECT_EQ(0U, queued_event_count()); |
| 2287 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | 2287 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type()); |
| 2288 EXPECT_NE(WebInputEvent::Blocking, sent_event().dispatchType); | 2288 EXPECT_NE(WebInputEvent::Blocking, sent_event().dispatchType); |
| 2289 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2289 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2290 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 2290 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 2291 } | 2291 } |
| 2292 | 2292 |
| 2293 // Ensure that even when we receive the ack from render, we still need to wait | 2293 // Ensure that even when we receive the ack from render, we still need to wait |
| 2294 // for the interval expires to send the next async touchmove once the scroll | 2294 // for the interval expires to send the next async touchmove once the scroll |
| 2295 // starts. | 2295 // starts. |
| 2296 TEST_F(TouchEventQueueTest, DoNotIncreaseIfClientConsumeAsyncTouchMove) { | 2296 TEST_F(TouchEventQueueTest, DoNotIncreaseIfClientConsumeAsyncTouchMove) { |
| 2297 // Process a TouchStart | 2297 // Process a TouchStart |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2340 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 2340 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 2341 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2341 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2342 | 2342 |
| 2343 // Dispatch the touch move when sufficient time has passed. Becasue the event | 2343 // Dispatch the touch move when sufficient time has passed. Becasue the event |
| 2344 // is consumed by client already, we would not increase the count and ack to | 2344 // is consumed by client already, we would not increase the count and ack to |
| 2345 // client again. | 2345 // client again. |
| 2346 AdvanceTouchTime(kMinSecondsBetweenThrottledTouchmoves + 0.1); | 2346 AdvanceTouchTime(kMinSecondsBetweenThrottledTouchmoves + 0.1); |
| 2347 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED); | 2347 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2348 MoveTouchPoint(0, 0, 50); | 2348 MoveTouchPoint(0, 0, 50); |
| 2349 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 2349 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
| 2350 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | 2350 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type()); |
| 2351 EXPECT_NE(WebInputEvent::Blocking, sent_event().dispatchType); | 2351 EXPECT_NE(WebInputEvent::Blocking, sent_event().dispatchType); |
| 2352 EXPECT_EQ(0U, queued_event_count()); | 2352 EXPECT_EQ(0U, queued_event_count()); |
| 2353 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2353 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2354 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2354 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2355 EXPECT_EQ(0U, uncancelable_touch_moves_pending_ack_count()); | 2355 EXPECT_EQ(0U, uncancelable_touch_moves_pending_ack_count()); |
| 2356 } | 2356 } |
| 2357 | 2357 |
| 2358 TEST_F(TouchEventQueueTest, TouchAbsorptionWithConsumedFirstMove) { | 2358 TEST_F(TouchEventQueueTest, TouchAbsorptionWithConsumedFirstMove) { |
| 2359 // Queue a TouchStart. | 2359 // Queue a TouchStart. |
| 2360 PressTouchPoint(0, 1); | 2360 PressTouchPoint(0, 1); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2501 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2501 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2502 | 2502 |
| 2503 // Receive ACK for the first three touch-events. | 2503 // Receive ACK for the first three touch-events. |
| 2504 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2504 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2505 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2505 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2506 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2506 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2507 EXPECT_EQ(1U, queued_event_count()); | 2507 EXPECT_EQ(1U, queued_event_count()); |
| 2508 | 2508 |
| 2509 // Test current touches state before sending TouchMoves. | 2509 // Test current touches state before sending TouchMoves. |
| 2510 const WebTouchEvent& event1 = sent_event(); | 2510 const WebTouchEvent& event1 = sent_event(); |
| 2511 EXPECT_EQ(WebInputEvent::TouchStart, event1.type); | 2511 EXPECT_EQ(WebInputEvent::TouchStart, event1.type()); |
| 2512 EXPECT_EQ(WebTouchPoint::StateStationary, event1.touches[0].state); | 2512 EXPECT_EQ(WebTouchPoint::StateStationary, event1.touches[0].state); |
| 2513 EXPECT_EQ(WebTouchPoint::StateStationary, event1.touches[1].state); | 2513 EXPECT_EQ(WebTouchPoint::StateStationary, event1.touches[1].state); |
| 2514 EXPECT_EQ(WebTouchPoint::StateStationary, event1.touches[2].state); | 2514 EXPECT_EQ(WebTouchPoint::StateStationary, event1.touches[2].state); |
| 2515 EXPECT_EQ(WebTouchPoint::StatePressed, event1.touches[3].state); | 2515 EXPECT_EQ(WebTouchPoint::StatePressed, event1.touches[3].state); |
| 2516 | 2516 |
| 2517 // Move x-position for 1st touch, y-position for 2nd touch | 2517 // Move x-position for 1st touch, y-position for 2nd touch |
| 2518 // and do not move other touches. | 2518 // and do not move other touches. |
| 2519 MoveTouchPoints(0, 1.1f, 1.f, 1, 2.f, 20.001f); | 2519 MoveTouchPoints(0, 1.1f, 1.f, 1, 2.f, 20.001f); |
| 2520 MoveTouchPoints(2, 3.f, 3.f, 3, 4.f, 4.f); | 2520 MoveTouchPoints(2, 3.f, 3.f, 3, 4.f, 4.f); |
| 2521 EXPECT_EQ(2U, queued_event_count()); | 2521 EXPECT_EQ(2U, queued_event_count()); |
| 2522 | 2522 |
| 2523 // Receive an ACK for the last TouchPress event. | 2523 // Receive an ACK for the last TouchPress event. |
| 2524 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2524 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2525 | 2525 |
| 2526 // 1st TouchMove is sent. Test for touches state. | 2526 // 1st TouchMove is sent. Test for touches state. |
| 2527 const WebTouchEvent& event2 = sent_event(); | 2527 const WebTouchEvent& event2 = sent_event(); |
| 2528 EXPECT_EQ(WebInputEvent::TouchMove, event2.type); | 2528 EXPECT_EQ(WebInputEvent::TouchMove, event2.type()); |
| 2529 EXPECT_EQ(WebTouchPoint::StateMoved, event2.touches[0].state); | 2529 EXPECT_EQ(WebTouchPoint::StateMoved, event2.touches[0].state); |
| 2530 EXPECT_EQ(WebTouchPoint::StateMoved, event2.touches[1].state); | 2530 EXPECT_EQ(WebTouchPoint::StateMoved, event2.touches[1].state); |
| 2531 EXPECT_EQ(WebTouchPoint::StateStationary, event2.touches[2].state); | 2531 EXPECT_EQ(WebTouchPoint::StateStationary, event2.touches[2].state); |
| 2532 EXPECT_EQ(WebTouchPoint::StateStationary, event2.touches[3].state); | 2532 EXPECT_EQ(WebTouchPoint::StateStationary, event2.touches[3].state); |
| 2533 | 2533 |
| 2534 // Move only 4th touch but not others. | 2534 // Move only 4th touch but not others. |
| 2535 MoveTouchPoints(0, 1.1f, 1.f, 1, 2.f, 20.001f); | 2535 MoveTouchPoints(0, 1.1f, 1.f, 1, 2.f, 20.001f); |
| 2536 MoveTouchPoints(2, 3.f, 3.f, 3, 4.1f, 4.1f); | 2536 MoveTouchPoints(2, 3.f, 3.f, 3, 4.1f, 4.1f); |
| 2537 | 2537 |
| 2538 // Receive an ACK for previous (1st) TouchMove. | 2538 // Receive an ACK for previous (1st) TouchMove. |
| 2539 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2539 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2540 | 2540 |
| 2541 // 2nd TouchMove is sent. Test for touches state. | 2541 // 2nd TouchMove is sent. Test for touches state. |
| 2542 const WebTouchEvent& event3 = sent_event(); | 2542 const WebTouchEvent& event3 = sent_event(); |
| 2543 EXPECT_EQ(WebInputEvent::TouchMove, event3.type); | 2543 EXPECT_EQ(WebInputEvent::TouchMove, event3.type()); |
| 2544 EXPECT_EQ(WebTouchPoint::StateStationary, event3.touches[0].state); | 2544 EXPECT_EQ(WebTouchPoint::StateStationary, event3.touches[0].state); |
| 2545 EXPECT_EQ(WebTouchPoint::StateStationary, event3.touches[1].state); | 2545 EXPECT_EQ(WebTouchPoint::StateStationary, event3.touches[1].state); |
| 2546 EXPECT_EQ(WebTouchPoint::StateStationary, event3.touches[2].state); | 2546 EXPECT_EQ(WebTouchPoint::StateStationary, event3.touches[2].state); |
| 2547 EXPECT_EQ(WebTouchPoint::StateMoved, event3.touches[3].state); | 2547 EXPECT_EQ(WebTouchPoint::StateMoved, event3.touches[3].state); |
| 2548 } | 2548 } |
| 2549 | 2549 |
| 2550 // Tests that touch point state is correct in TouchMove events | 2550 // Tests that touch point state is correct in TouchMove events |
| 2551 // when point properties other than position changed. | 2551 // when point properties other than position changed. |
| 2552 TEST_F(TouchEventQueueTest, PointerStatesWhenOtherThanPositionChanged) { | 2552 TEST_F(TouchEventQueueTest, PointerStatesWhenOtherThanPositionChanged) { |
| 2553 PressTouchPoint(1, 1); | 2553 PressTouchPoint(1, 1); |
| 2554 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2554 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2555 | 2555 |
| 2556 // Default initial radiusX/Y is (1.f, 1.f). | 2556 // Default initial radiusX/Y is (1.f, 1.f). |
| 2557 // Default initial rotationAngle is 1.f. | 2557 // Default initial rotationAngle is 1.f. |
| 2558 // Default initial force is 1.f. | 2558 // Default initial force is 1.f. |
| 2559 | 2559 |
| 2560 // Change touch point radius only. | 2560 // Change touch point radius only. |
| 2561 ChangeTouchPointRadius(0, 1.5f, 1.f); | 2561 ChangeTouchPointRadius(0, 1.5f, 1.f); |
| 2562 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2562 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2563 | 2563 |
| 2564 // TouchMove is sent. Test for pointer state. | 2564 // TouchMove is sent. Test for pointer state. |
| 2565 const WebTouchEvent& event1 = sent_event(); | 2565 const WebTouchEvent& event1 = sent_event(); |
| 2566 EXPECT_EQ(WebInputEvent::TouchMove, event1.type); | 2566 EXPECT_EQ(WebInputEvent::TouchMove, event1.type()); |
| 2567 EXPECT_EQ(WebTouchPoint::StateMoved, event1.touches[0].state); | 2567 EXPECT_EQ(WebTouchPoint::StateMoved, event1.touches[0].state); |
| 2568 | 2568 |
| 2569 // Change touch point force. | 2569 // Change touch point force. |
| 2570 ChangeTouchPointForce(0, 0.9f); | 2570 ChangeTouchPointForce(0, 0.9f); |
| 2571 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2571 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2572 | 2572 |
| 2573 // TouchMove is sent. Test for pointer state. | 2573 // TouchMove is sent. Test for pointer state. |
| 2574 const WebTouchEvent& event2 = sent_event(); | 2574 const WebTouchEvent& event2 = sent_event(); |
| 2575 EXPECT_EQ(WebInputEvent::TouchMove, event2.type); | 2575 EXPECT_EQ(WebInputEvent::TouchMove, event2.type()); |
| 2576 EXPECT_EQ(WebTouchPoint::StateMoved, event2.touches[0].state); | 2576 EXPECT_EQ(WebTouchPoint::StateMoved, event2.touches[0].state); |
| 2577 | 2577 |
| 2578 // Change touch point rotationAngle. | 2578 // Change touch point rotationAngle. |
| 2579 ChangeTouchPointRotationAngle(0, 1.1f); | 2579 ChangeTouchPointRotationAngle(0, 1.1f); |
| 2580 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2580 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2581 | 2581 |
| 2582 // TouchMove is sent. Test for pointer state. | 2582 // TouchMove is sent. Test for pointer state. |
| 2583 const WebTouchEvent& event3 = sent_event(); | 2583 const WebTouchEvent& event3 = sent_event(); |
| 2584 EXPECT_EQ(WebInputEvent::TouchMove, event3.type); | 2584 EXPECT_EQ(WebInputEvent::TouchMove, event3.type()); |
| 2585 EXPECT_EQ(WebTouchPoint::StateMoved, event3.touches[0].state); | 2585 EXPECT_EQ(WebTouchPoint::StateMoved, event3.touches[0].state); |
| 2586 | 2586 |
| 2587 EXPECT_EQ(0U, queued_event_count()); | 2587 EXPECT_EQ(0U, queued_event_count()); |
| 2588 EXPECT_EQ(4U, GetAndResetSentEventCount()); | 2588 EXPECT_EQ(4U, GetAndResetSentEventCount()); |
| 2589 EXPECT_EQ(4U, GetAndResetAckedEventCount()); | 2589 EXPECT_EQ(4U, GetAndResetAckedEventCount()); |
| 2590 } | 2590 } |
| 2591 | 2591 |
| 2592 // Tests that TouchMoves are filtered when none of the points are changed. | 2592 // Tests that TouchMoves are filtered when none of the points are changed. |
| 2593 TEST_F(TouchEventQueueTest, FilterTouchMovesWhenNoPointerChanged) { | 2593 TEST_F(TouchEventQueueTest, FilterTouchMovesWhenNoPointerChanged) { |
| 2594 PressTouchPoint(1, 1); | 2594 PressTouchPoint(1, 1); |
| 2595 PressTouchPoint(2, 2); | 2595 PressTouchPoint(2, 2); |
| 2596 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2596 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2597 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2597 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2598 EXPECT_EQ(0U, queued_event_count()); | 2598 EXPECT_EQ(0U, queued_event_count()); |
| 2599 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 2599 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 2600 EXPECT_EQ(2U, GetAndResetAckedEventCount()); | 2600 EXPECT_EQ(2U, GetAndResetAckedEventCount()); |
| 2601 | 2601 |
| 2602 // Move 1st touch point. | 2602 // Move 1st touch point. |
| 2603 MoveTouchPoint(0, 10, 10); | 2603 MoveTouchPoint(0, 10, 10); |
| 2604 EXPECT_EQ(1U, queued_event_count()); | 2604 EXPECT_EQ(1U, queued_event_count()); |
| 2605 | 2605 |
| 2606 // TouchMove should be allowed and test for touches state. | 2606 // TouchMove should be allowed and test for touches state. |
| 2607 const WebTouchEvent& event1 = sent_event(); | 2607 const WebTouchEvent& event1 = sent_event(); |
| 2608 EXPECT_EQ(WebInputEvent::TouchMove, event1.type); | 2608 EXPECT_EQ(WebInputEvent::TouchMove, event1.type()); |
| 2609 EXPECT_EQ(WebTouchPoint::StateMoved, event1.touches[0].state); | 2609 EXPECT_EQ(WebTouchPoint::StateMoved, event1.touches[0].state); |
| 2610 EXPECT_EQ(WebTouchPoint::StateStationary, event1.touches[1].state); | 2610 EXPECT_EQ(WebTouchPoint::StateStationary, event1.touches[1].state); |
| 2611 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2611 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2612 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 2612 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 2613 | 2613 |
| 2614 // Do not really move any touch points, but use previous values. | 2614 // Do not really move any touch points, but use previous values. |
| 2615 MoveTouchPoint(0, 10, 10); | 2615 MoveTouchPoint(0, 10, 10); |
| 2616 ChangeTouchPointRadius(1, 1, 1); | 2616 ChangeTouchPointRadius(1, 1, 1); |
| 2617 MoveTouchPoint(1, 2, 2); | 2617 MoveTouchPoint(1, 2, 2); |
| 2618 EXPECT_EQ(2U, queued_event_count()); | 2618 EXPECT_EQ(2U, queued_event_count()); |
| 2619 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 2619 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 2620 | 2620 |
| 2621 // Receive an ACK for 1st TouchMove. | 2621 // Receive an ACK for 1st TouchMove. |
| 2622 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2622 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2623 | 2623 |
| 2624 // Tries to forward TouchMove but should be filtered | 2624 // Tries to forward TouchMove but should be filtered |
| 2625 // when none of the touch points have changed. | 2625 // when none of the touch points have changed. |
| 2626 EXPECT_EQ(0U, queued_event_count()); | 2626 EXPECT_EQ(0U, queued_event_count()); |
| 2627 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 2627 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 2628 EXPECT_EQ(4U, GetAndResetAckedEventCount()); | 2628 EXPECT_EQ(4U, GetAndResetAckedEventCount()); |
| 2629 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); | 2629 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); |
| 2630 | 2630 |
| 2631 // Move 2nd touch point. | 2631 // Move 2nd touch point. |
| 2632 MoveTouchPoint(1, 3, 3); | 2632 MoveTouchPoint(1, 3, 3); |
| 2633 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2633 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2634 EXPECT_EQ(0U, queued_event_count()); | 2634 EXPECT_EQ(0U, queued_event_count()); |
| 2635 | 2635 |
| 2636 // TouchMove should be allowed and test for touches state. | 2636 // TouchMove should be allowed and test for touches state. |
| 2637 const WebTouchEvent& event2 = sent_event(); | 2637 const WebTouchEvent& event2 = sent_event(); |
| 2638 EXPECT_EQ(WebInputEvent::TouchMove, event2.type); | 2638 EXPECT_EQ(WebInputEvent::TouchMove, event2.type()); |
| 2639 EXPECT_EQ(WebTouchPoint::StateStationary, event2.touches[0].state); | 2639 EXPECT_EQ(WebTouchPoint::StateStationary, event2.touches[0].state); |
| 2640 EXPECT_EQ(WebTouchPoint::StateMoved, event2.touches[1].state); | 2640 EXPECT_EQ(WebTouchPoint::StateMoved, event2.touches[1].state); |
| 2641 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2641 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 2642 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2642 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2643 } | 2643 } |
| 2644 | 2644 |
| 2645 // Tests that touch-scroll-notification is not pushed into an empty queue. | 2645 // Tests that touch-scroll-notification is not pushed into an empty queue. |
| 2646 TEST_F(TouchEventQueueTest, TouchScrollNotificationOrder_EmptyQueue) { | 2646 TEST_F(TouchEventQueueTest, TouchScrollNotificationOrder_EmptyQueue) { |
| 2647 PrependTouchScrollNotification(); | 2647 PrependTouchScrollNotification(); |
| 2648 | 2648 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2662 // Send the touch-scroll-notification when 3 events are in the queue. | 2662 // Send the touch-scroll-notification when 3 events are in the queue. |
| 2663 PrependTouchScrollNotification(); | 2663 PrependTouchScrollNotification(); |
| 2664 | 2664 |
| 2665 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 2665 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 2666 EXPECT_EQ(2U, queued_event_count()); | 2666 EXPECT_EQ(2U, queued_event_count()); |
| 2667 | 2667 |
| 2668 // Receive an ACK for the touchstart. | 2668 // Receive an ACK for the touchstart. |
| 2669 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2669 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2670 | 2670 |
| 2671 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2671 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2672 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); | 2672 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type()); |
| 2673 EXPECT_EQ(1U, queued_event_count()); | 2673 EXPECT_EQ(1U, queued_event_count()); |
| 2674 | 2674 |
| 2675 // Receive an ACK for the touch-scroll-notification. | 2675 // Receive an ACK for the touch-scroll-notification. |
| 2676 SendTouchEventAck(INPUT_EVENT_ACK_STATE_IGNORED); | 2676 SendTouchEventAck(INPUT_EVENT_ACK_STATE_IGNORED); |
| 2677 | 2677 |
| 2678 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 2678 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 2679 EXPECT_EQ(0U, queued_event_count()); | 2679 EXPECT_EQ(0U, queued_event_count()); |
| 2680 | 2680 |
| 2681 EXPECT_EQ(WebInputEvent::TouchStart, all_sent_events()[0].type); | 2681 EXPECT_EQ(WebInputEvent::TouchStart, all_sent_events()[0].type()); |
| 2682 EXPECT_EQ(WebInputEvent::TouchScrollStarted, all_sent_events()[1].type); | 2682 EXPECT_EQ(WebInputEvent::TouchScrollStarted, all_sent_events()[1].type()); |
| 2683 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 2683 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 2684 } | 2684 } |
| 2685 | 2685 |
| 2686 // Tests touch-scroll-notification firing order when the event is placed in the | 2686 // Tests touch-scroll-notification firing order when the event is placed in the |
| 2687 // 2nd position in the touch queue between two events. | 2687 // 2nd position in the touch queue between two events. |
| 2688 TEST_F(TouchEventQueueTest, TouchScrollNotificationOrder_SecondPosition) { | 2688 TEST_F(TouchEventQueueTest, TouchScrollNotificationOrder_SecondPosition) { |
| 2689 PressTouchPoint(1, 1); | 2689 PressTouchPoint(1, 1); |
| 2690 MoveTouchPoint(0, 5, 5); | 2690 MoveTouchPoint(0, 5, 5); |
| 2691 ReleaseTouchPoint(0); | 2691 ReleaseTouchPoint(0); |
| 2692 | 2692 |
| 2693 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 2693 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 2694 EXPECT_EQ(3U, queued_event_count()); | 2694 EXPECT_EQ(3U, queued_event_count()); |
| 2695 | 2695 |
| 2696 // Send the touch-scroll-notification when 3 events are in the queue. | 2696 // Send the touch-scroll-notification when 3 events are in the queue. |
| 2697 PrependTouchScrollNotification(); | 2697 PrependTouchScrollNotification(); |
| 2698 | 2698 |
| 2699 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 2699 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 2700 EXPECT_EQ(4U, queued_event_count()); | 2700 EXPECT_EQ(4U, queued_event_count()); |
| 2701 | 2701 |
| 2702 // Receive an ACK for the touchstart. | 2702 // Receive an ACK for the touchstart. |
| 2703 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2703 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2704 | 2704 |
| 2705 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2705 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2706 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); | 2706 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type()); |
| 2707 EXPECT_EQ(3U, queued_event_count()); | 2707 EXPECT_EQ(3U, queued_event_count()); |
| 2708 | 2708 |
| 2709 // Receive an ACK for the touch-scroll-notification. | 2709 // Receive an ACK for the touch-scroll-notification. |
| 2710 SendTouchEventAck(INPUT_EVENT_ACK_STATE_IGNORED); | 2710 SendTouchEventAck(INPUT_EVENT_ACK_STATE_IGNORED); |
| 2711 | 2711 |
| 2712 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 2712 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 2713 EXPECT_EQ(2U, queued_event_count()); | 2713 EXPECT_EQ(2U, queued_event_count()); |
| 2714 | 2714 |
| 2715 // Receive an ACK for the touchmove. | 2715 // Receive an ACK for the touchmove. |
| 2716 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2716 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2717 | 2717 |
| 2718 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2718 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2719 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); | 2719 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type()); |
| 2720 EXPECT_EQ(1U, queued_event_count()); | 2720 EXPECT_EQ(1U, queued_event_count()); |
| 2721 | 2721 |
| 2722 // Receive an ACK for the touchend. | 2722 // Receive an ACK for the touchend. |
| 2723 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2723 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2724 | 2724 |
| 2725 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2725 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 2726 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type); | 2726 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type()); |
| 2727 EXPECT_EQ(0U, queued_event_count()); | 2727 EXPECT_EQ(0U, queued_event_count()); |
| 2728 | 2728 |
| 2729 EXPECT_EQ(WebInputEvent::TouchStart, all_sent_events()[0].type); | 2729 EXPECT_EQ(WebInputEvent::TouchStart, all_sent_events()[0].type()); |
| 2730 EXPECT_EQ(WebInputEvent::TouchScrollStarted, all_sent_events()[1].type); | 2730 EXPECT_EQ(WebInputEvent::TouchScrollStarted, all_sent_events()[1].type()); |
| 2731 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[2].type); | 2731 EXPECT_EQ(WebInputEvent::TouchMove, all_sent_events()[2].type()); |
| 2732 EXPECT_EQ(WebInputEvent::TouchEnd, all_sent_events()[3].type); | 2732 EXPECT_EQ(WebInputEvent::TouchEnd, all_sent_events()[3].type()); |
| 2733 EXPECT_EQ(4U, GetAndResetSentEventCount()); | 2733 EXPECT_EQ(4U, GetAndResetSentEventCount()); |
| 2734 } | 2734 } |
| 2735 | 2735 |
| 2736 // Tests that if touchStartOrFirstTouchMove is correctly set up for touch | 2736 // Tests that if touchStartOrFirstTouchMove is correctly set up for touch |
| 2737 // events. | 2737 // events. |
| 2738 TEST_F(TouchEventQueueTest, TouchStartOrFirstTouchMove) { | 2738 TEST_F(TouchEventQueueTest, TouchStartOrFirstTouchMove) { |
| 2739 PressTouchPoint(1, 1); | 2739 PressTouchPoint(1, 1); |
| 2740 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2740 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2741 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type); | 2741 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type()); |
| 2742 EXPECT_TRUE(sent_event().touchStartOrFirstTouchMove); | 2742 EXPECT_TRUE(sent_event().touchStartOrFirstTouchMove); |
| 2743 | 2743 |
| 2744 MoveTouchPoint(0, 5, 5); | 2744 MoveTouchPoint(0, 5, 5); |
| 2745 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2745 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2746 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | 2746 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type()); |
| 2747 EXPECT_TRUE(sent_event().touchStartOrFirstTouchMove); | 2747 EXPECT_TRUE(sent_event().touchStartOrFirstTouchMove); |
| 2748 | 2748 |
| 2749 MoveTouchPoint(0, 15, 15); | 2749 MoveTouchPoint(0, 15, 15); |
| 2750 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2750 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2751 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | 2751 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type()); |
| 2752 EXPECT_FALSE(sent_event().touchStartOrFirstTouchMove); | 2752 EXPECT_FALSE(sent_event().touchStartOrFirstTouchMove); |
| 2753 | 2753 |
| 2754 ReleaseTouchPoint(0); | 2754 ReleaseTouchPoint(0); |
| 2755 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 2755 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 2756 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type); | 2756 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type()); |
| 2757 EXPECT_FALSE(sent_event().touchStartOrFirstTouchMove); | 2757 EXPECT_FALSE(sent_event().touchStartOrFirstTouchMove); |
| 2758 } | 2758 } |
| 2759 | 2759 |
| 2760 } // namespace content | 2760 } // namespace content |
| OLD | NEW |