Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: content/browser/renderer_host/input/touch_event_queue_unittest.cc

Issue 245833002: Implement async touchmove dispatch during scroll (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More testing Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698