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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "content/browser/renderer_host/input/timeout_monitor.h" | 9 #include "content/browser/renderer_host/input/timeout_monitor.h" |
10 #include "content/browser/renderer_host/input/touch_event_queue.h" | 10 #include "content/browser/renderer_host/input/touch_event_queue.h" |
11 #include "content/common/input/synthetic_web_input_event_builders.h" | 11 #include "content/common/input/synthetic_web_input_event_builders.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
13 #include "third_party/WebKit/public/web/WebInputEvent.h" | 13 #include "third_party/WebKit/public/web/WebInputEvent.h" |
14 | 14 |
15 using blink::WebGestureEvent; | 15 using blink::WebGestureEvent; |
16 using blink::WebInputEvent; | 16 using blink::WebInputEvent; |
17 using blink::WebTouchEvent; | 17 using blink::WebTouchEvent; |
18 using blink::WebTouchPoint; | 18 using blink::WebTouchPoint; |
19 | 19 |
20 namespace content { | 20 namespace content { |
21 namespace { | 21 namespace { |
22 | |
23 const double MinSecondsBetweenThrottledTouchmoves = 0.2; | |
24 | |
22 base::TimeDelta DefaultTouchTimeoutDelay() { | 25 base::TimeDelta DefaultTouchTimeoutDelay() { |
23 return base::TimeDelta::FromMilliseconds(1); | 26 return base::TimeDelta::FromMilliseconds(1); |
24 } | 27 } |
25 } // namespace | 28 } // namespace |
26 | 29 |
27 class TouchEventQueueTest : public testing::Test, | 30 class TouchEventQueueTest : public testing::Test, |
28 public TouchEventQueueClient { | 31 public TouchEventQueueClient { |
29 public: | 32 public: |
30 TouchEventQueueTest() | 33 TouchEventQueueTest() |
31 : sent_event_count_(0), | 34 : sent_event_count_(0), |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
149 void ReleaseTouchPoint(int index) { | 152 void ReleaseTouchPoint(int index) { |
150 touch_event_.ReleasePoint(index); | 153 touch_event_.ReleasePoint(index); |
151 SendTouchEvent(); | 154 SendTouchEvent(); |
152 } | 155 } |
153 | 156 |
154 void CancelTouchPoint(int index) { | 157 void CancelTouchPoint(int index) { |
155 touch_event_.CancelPoint(index); | 158 touch_event_.CancelPoint(index); |
156 SendTouchEvent(); | 159 SendTouchEvent(); |
157 } | 160 } |
158 | 161 |
162 void AdvanceTouchTime(double seconds) { | |
163 touch_event_.timeStampSeconds += seconds; | |
164 } | |
165 | |
159 size_t GetAndResetAckedEventCount() { | 166 size_t GetAndResetAckedEventCount() { |
160 size_t count = acked_event_count_; | 167 size_t count = acked_event_count_; |
161 acked_event_count_ = 0; | 168 acked_event_count_ = 0; |
162 return count; | 169 return count; |
163 } | 170 } |
164 | 171 |
165 size_t GetAndResetSentEventCount() { | 172 size_t GetAndResetSentEventCount() { |
166 size_t count = sent_event_count_; | 173 size_t count = sent_event_count_; |
167 sent_event_count_ = 0; | 174 sent_event_count_ = 0; |
168 return count; | 175 return count; |
169 } | 176 } |
170 | 177 |
171 bool IsPendingAckTouchStart() const { | 178 bool IsPendingAckTouchStart() const { |
172 return queue_->IsPendingAckTouchStart(); | 179 return queue_->IsPendingAckTouchStart(); |
173 } | 180 } |
174 | 181 |
175 void OnHasTouchEventHandlers(bool has_handlers) { | 182 void OnHasTouchEventHandlers(bool has_handlers) { |
176 queue_->OnHasTouchEventHandlers(has_handlers); | 183 queue_->OnHasTouchEventHandlers(has_handlers); |
177 } | 184 } |
178 | 185 |
179 void SetAckTimeoutDisabled() { | 186 void SetAckTimeoutDisabled() { |
180 queue_->SetAckTimeoutEnabled(false, base::TimeDelta()); | 187 queue_->SetAckTimeoutEnabled(false, base::TimeDelta()); |
181 } | 188 } |
182 | 189 |
183 bool IsTimeoutEnabled() { | 190 bool IsTimeoutEnabled() const { |
184 return queue_->ack_timeout_enabled(); | 191 return queue_->ack_timeout_enabled(); |
185 } | 192 } |
186 | 193 |
187 bool IsTimeoutRunning() { | 194 bool IsTimeoutRunning() const { |
188 return queue_->IsTimeoutRunningForTesting(); | 195 return queue_->IsTimeoutRunningForTesting(); |
189 } | 196 } |
190 | 197 |
198 bool HasPendingAsyncTouchMove() const { | |
199 return queue_->HasPendingAsyncTouchMoveForTesting(); | |
200 } | |
201 | |
191 size_t queued_event_count() const { | 202 size_t queued_event_count() const { |
192 return queue_->size(); | 203 return queue_->size(); |
193 } | 204 } |
194 | 205 |
195 const WebTouchEvent& latest_event() const { | 206 const WebTouchEvent& latest_event() const { |
196 return queue_->GetLatestEventForTesting().event; | 207 return queue_->GetLatestEventForTesting().event; |
197 } | 208 } |
198 | 209 |
199 const WebTouchEvent& acked_event() const { | 210 const WebTouchEvent& acked_event() const { |
200 return last_acked_event_; | 211 return last_acked_event_; |
(...skipping 1322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1523 // GestureScrollBegin doesn't insert a synthetic TouchCancel. | 1534 // GestureScrollBegin doesn't insert a synthetic TouchCancel. |
1524 WebGestureEvent followup_scroll; | 1535 WebGestureEvent followup_scroll; |
1525 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 1536 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
1526 SetFollowupEvent(followup_scroll); | 1537 SetFollowupEvent(followup_scroll); |
1527 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1538 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1528 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1539 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1529 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1540 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1530 EXPECT_EQ(0U, queued_event_count()); | 1541 EXPECT_EQ(0U, queued_event_count()); |
1531 } | 1542 } |
1532 | 1543 |
1533 TEST_F(TouchEventQueueTest, TouchAbsorption) { | 1544 TEST_F(TouchEventQueueTest, AsyncTouch) { |
1534 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ABSORB_TOUCHMOVE); | 1545 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); |
1535 | 1546 |
1536 // Queue a TouchStart. | 1547 // Queue a TouchStart. |
1537 PressTouchPoint(0, 1); | 1548 PressTouchPoint(0, 1); |
1538 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1549 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1539 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1550 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1540 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1551 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1541 | 1552 |
1542 for (int i = 0; i < 3; ++i) { | 1553 for (int i = 0; i < 3; ++i) { |
1543 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, | 1554 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, |
1544 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1555 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1545 | 1556 |
1546 MoveTouchPoint(0, 20, 5); | 1557 MoveTouchPoint(0, 20, 5); |
1547 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1558 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1559 EXPECT_FALSE(HasPendingAsyncTouchMove()); | |
1560 EXPECT_TRUE(sent_event().cancelable); | |
1548 EXPECT_EQ(0U, queued_event_count()); | 1561 EXPECT_EQ(0U, queued_event_count()); |
1549 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1562 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1550 | 1563 |
1551 // Consuming a scroll event prevents the next touch moves from being | 1564 // Consuming a scroll event prevents the next touch moves from being |
Rick Byers
2014/04/23 21:56:17
this comment isn't quite true anymore, maybe "enab
jdduke (slow)
2014/04/23 22:56:48
Done.
| |
1552 // dispatched. | 1565 // dispatched. |
1553 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, | 1566 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, |
1554 INPUT_EVENT_ACK_STATE_CONSUMED); | 1567 INPUT_EVENT_ACK_STATE_CONSUMED); |
1555 MoveTouchPoint(0, 20, 5); | 1568 MoveTouchPoint(0, 20, 5); |
1556 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1569 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1570 EXPECT_TRUE(HasPendingAsyncTouchMove()); | |
1557 EXPECT_EQ(0U, queued_event_count()); | 1571 EXPECT_EQ(0U, queued_event_count()); |
1558 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1572 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1559 } | 1573 } |
1560 } | 1574 } |
1561 | 1575 |
1562 TEST_F(TouchEventQueueTest, TouchAbsorptionNoTouchAfterScroll) { | 1576 TEST_F(TouchEventQueueTest, AsyncTouchThrottledAfterScroll) { |
1563 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ABSORB_TOUCHMOVE); | 1577 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); |
1564 | 1578 |
1565 // Process a TouchStart | 1579 // Process a TouchStart |
1566 PressTouchPoint(0, 1); | 1580 PressTouchPoint(0, 1); |
1567 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1581 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1568 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1582 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1569 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1583 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1570 | 1584 |
1571 // Now send the first touch move and associated GestureScrollBegin, | 1585 // Now send the first touch move and associated GestureScrollBegin, |
1572 // but don't ACK the gesture event yet. | 1586 // but don't ACK the gesture event yet. |
1573 MoveTouchPoint(0, 0, 5); | 1587 MoveTouchPoint(0, 0, 5); |
1574 WebGestureEvent followup_scroll; | 1588 WebGestureEvent followup_scroll; |
1575 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 1589 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
1576 SetFollowupEvent(followup_scroll); | 1590 SetFollowupEvent(followup_scroll); |
1577 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1591 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1578 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1592 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1579 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1593 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1580 | 1594 |
1581 // Now queue a second touchmove and verify it's not dispatched. | 1595 // Now queue a second touchmove and verify it's not (yet) dispatched. |
1582 MoveTouchPoint(0, 0, 10); | 1596 MoveTouchPoint(0, 0, 10); |
1583 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1597 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1598 EXPECT_TRUE(HasPendingAsyncTouchMove()); | |
1599 EXPECT_EQ(0U, queued_event_count()); | |
1600 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
1601 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1602 | |
1603 // Queuing the final touchend should flush the pending, async touchmove. | |
1604 ReleaseTouchPoint(0); | |
1605 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | |
1606 EXPECT_FALSE(HasPendingAsyncTouchMove()); | |
1607 EXPECT_FALSE(sent_event().cancelable); | |
1608 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1609 EXPECT_EQ(2U, queued_event_count()); | |
1610 | |
1611 // Ack the flushed, async touchmove. The ack should not reach the client, but | |
1612 // it should trigger sending of the (now non-cancelable) touchend. | |
1613 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1614 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type); | |
1615 EXPECT_FALSE(sent_event().cancelable); | |
1616 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1617 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | |
1618 EXPECT_EQ(1U, queued_event_count()); | |
1619 | |
1620 // Ack the touchend. | |
1621 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1584 EXPECT_EQ(0U, queued_event_count()); | 1622 EXPECT_EQ(0U, queued_event_count()); |
1585 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1623 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1586 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1624 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1587 | 1625 |
1588 // But a final touchend is sent (even before any gesture events | |
1589 // have been ACKed). | |
1590 ReleaseTouchPoint(0); | |
1591 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1592 EXPECT_EQ(0U, queued_event_count()); | |
1593 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1594 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1595 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type); | |
1596 | |
1597 // Now mark the scroll as not consumed (which would cause future | 1626 // Now mark the scroll as not consumed (which would cause future |
1598 // touchmoves in the active sequence to be sent if there was one). | 1627 // touchmoves in the active sequence to be sent if there was one). |
1599 SendGestureEventAck(WebInputEvent::GestureScrollBegin, | 1628 SendGestureEventAck(WebInputEvent::GestureScrollBegin, |
1600 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1629 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1601 | 1630 |
1602 // Start a new touch sequence and verify that absorption has been | 1631 // Start a new touch sequence and verify that absorption has been |
Rick Byers
2014/04/23 21:56:17
replace reference to "absorption" I guess...
| |
1603 // reset so that moves after the start of scrolling are not sent. | 1632 // reset so that moves after the start of scrolling are throttled. |
1604 PressTouchPoint(0, 1); | 1633 PressTouchPoint(0, 0); |
1605 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1634 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1606 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1635 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1607 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1636 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1608 MoveTouchPoint(0, 0, 5); | 1637 MoveTouchPoint(0, 0, 5); |
1609 SetFollowupEvent(followup_scroll); | 1638 SetFollowupEvent(followup_scroll); |
1610 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1639 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1611 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1640 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1612 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1641 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1613 MoveTouchPoint(0, 0, 10); | 1642 MoveTouchPoint(0, 0, 10); |
1614 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1643 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1644 EXPECT_TRUE(HasPendingAsyncTouchMove()); | |
1615 EXPECT_EQ(0U, queued_event_count()); | 1645 EXPECT_EQ(0U, queued_event_count()); |
1616 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1646 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1647 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1648 | |
Rick Byers
2014/04/23 21:56:17
All the additional tests below look great - cover
jdduke (slow)
2014/04/23 22:56:48
:) Yeah, I actually had a few subtle bugs caught b
| |
1649 // As soon as a touchmove exceeds the outer slop region it will be forwarded | |
1650 // immediately. | |
1651 MoveTouchPoint(0, 0, 20); | |
1652 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1653 EXPECT_FALSE(HasPendingAsyncTouchMove()); | |
1654 EXPECT_FALSE(sent_event().cancelable); | |
1655 EXPECT_EQ(0U, queued_event_count()); | |
1656 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1657 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1658 | |
1659 // Subsequent touchmove's should be deferred. | |
1660 MoveTouchPoint(0, 0, 25); | |
1661 EXPECT_TRUE(HasPendingAsyncTouchMove()); | |
1662 EXPECT_EQ(0U, queued_event_count()); | |
1663 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
1664 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1665 | |
1666 // The pending touchmove should be flushed with the the new touchmove if | |
1667 // sufficient time has passed. | |
1668 AdvanceTouchTime(MinSecondsBetweenThrottledTouchmoves + 0.1); | |
1669 MoveTouchPoint(0, 0, 15); | |
1670 EXPECT_FALSE(HasPendingAsyncTouchMove()); | |
1671 EXPECT_FALSE(sent_event().cancelable); | |
1672 EXPECT_EQ(1U, queued_event_count()); | |
1673 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1674 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | |
1675 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1676 EXPECT_EQ(0U, queued_event_count()); | |
1677 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
1678 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1679 | |
1680 // Non-touchmove events should always flush any pending touchmove events. | |
1681 MoveTouchPoint(0, 0, 25); | |
1682 EXPECT_TRUE(HasPendingAsyncTouchMove()); | |
1683 EXPECT_EQ(0U, queued_event_count()); | |
1684 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
1685 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1686 PressTouchPoint(30, 30); | |
1687 EXPECT_FALSE(HasPendingAsyncTouchMove()); | |
1688 EXPECT_FALSE(sent_event().cancelable); | |
1689 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | |
1690 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1691 EXPECT_EQ(2U, queued_event_count()); | |
1692 | |
1693 // Ack'ing the flushed, async touchmove will dispatch the touchstart. Note | |
1694 // that the flushed touchmove's ack will not reach the client (its | |
1695 // constituent events have already been ack'ed). | |
1696 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1697 EXPECT_FALSE(sent_event().cancelable); | |
1698 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type); | |
1699 EXPECT_EQ(1U, queued_event_count()); | |
1700 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1701 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | |
1702 | |
1703 // Ack the touchstart. | |
1704 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1705 EXPECT_EQ(0U, queued_event_count()); | |
1706 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
1707 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1708 | |
1709 // Send a secondary touchmove. | |
1710 MoveTouchPoint(1, 0, 25); | |
1711 EXPECT_TRUE(HasPendingAsyncTouchMove()); | |
1712 EXPECT_EQ(0U, queued_event_count()); | |
1713 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
1714 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1715 | |
1716 // An unconsumed scroll should resume synchronous touch handling. | |
1717 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, | |
1718 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1719 | |
1720 // The pending touchmove should be coalesced with the next (now synchronous) | |
1721 // touchmove. | |
1722 MoveTouchPoint(0, 0, 25); | |
1723 EXPECT_TRUE(sent_event().cancelable); | |
1724 EXPECT_FALSE(HasPendingAsyncTouchMove()); | |
1725 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | |
1726 EXPECT_EQ(WebTouchPoint::StateMoved, sent_event().touches[0].state); | |
1727 EXPECT_EQ(WebTouchPoint::StateMoved, sent_event().touches[1].state); | |
1728 EXPECT_EQ(1U, queued_event_count()); | |
1729 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1730 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | |
1731 | |
1732 // Subsequent touches will queue until the preceding, synchronous touches are | |
1733 // ack'ed. | |
1734 ReleaseTouchPoint(1); | |
1735 EXPECT_EQ(2U, queued_event_count()); | |
1736 ReleaseTouchPoint(0); | |
1737 EXPECT_EQ(3U, queued_event_count()); | |
1738 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1739 EXPECT_TRUE(sent_event().cancelable); | |
1740 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type); | |
1741 EXPECT_EQ(2U, queued_event_count()); | |
1742 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1743 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1744 | |
1745 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1746 EXPECT_TRUE(sent_event().cancelable); | |
1747 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type); | |
1748 EXPECT_EQ(1U, queued_event_count()); | |
1749 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1750 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1751 | |
1752 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1753 EXPECT_EQ(0U, queued_event_count()); | |
1754 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
1755 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1617 } | 1756 } |
1618 | 1757 |
1619 } // namespace content | 1758 } // namespace content |
OLD | NEW |