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

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

Issue 183013010: Don't send touchcancel on touch scroll start (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix win compile warning Created 6 years, 9 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 | Annotate | Revision Log
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"
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 815 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
816 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 816 EXPECT_EQ(1U, GetAndResetAckedEventCount());
817 817
818 ReleaseTouchPoint(0); 818 ReleaseTouchPoint(0);
819 EXPECT_EQ(1U, GetAndResetSentEventCount()); 819 EXPECT_EQ(1U, GetAndResetSentEventCount());
820 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 820 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
821 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 821 EXPECT_EQ(1U, GetAndResetAckedEventCount());
822 } 822 }
823 823
824 // Tests that no TouchEvents are sent to renderer during scrolling. 824 // Tests that no TouchEvents are sent to renderer during scrolling.
825 TEST_F(TouchEventQueueTest, NoTouchOnScroll) { 825 TEST_F(TouchEventQueueTest, TouchCancelOnScroll) {
826 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_TOUCHCANCEL);
826 // Queue a TouchStart. 827 // Queue a TouchStart.
827 PressTouchPoint(0, 1); 828 PressTouchPoint(0, 1);
828 EXPECT_EQ(1U, GetAndResetSentEventCount()); 829 EXPECT_EQ(1U, GetAndResetSentEventCount());
829 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 830 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
830 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 831 EXPECT_EQ(1U, GetAndResetAckedEventCount());
831 832
832 MoveTouchPoint(0, 20, 5); 833 MoveTouchPoint(0, 20, 5);
833 EXPECT_EQ(1U, queued_event_count()); 834 EXPECT_EQ(1U, queued_event_count());
834 EXPECT_EQ(1U, GetAndResetSentEventCount()); 835 EXPECT_EQ(1U, GetAndResetSentEventCount());
835 836
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 891
891 ReleaseTouchPoint(0); 892 ReleaseTouchPoint(0);
892 EXPECT_EQ(1U, GetAndResetSentEventCount()); 893 EXPECT_EQ(1U, GetAndResetSentEventCount());
893 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 894 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
894 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 895 EXPECT_EQ(1U, GetAndResetAckedEventCount());
895 } 896 }
896 897
897 // Tests that a scroll event will not insert a synthetic TouchCancel if there 898 // Tests that a scroll event will not insert a synthetic TouchCancel if there
898 // was no consumer for the current touch sequence. 899 // was no consumer for the current touch sequence.
899 TEST_F(TouchEventQueueTest, NoTouchCancelOnScrollIfNoConsumer) { 900 TEST_F(TouchEventQueueTest, NoTouchCancelOnScrollIfNoConsumer) {
901 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_TOUCHCANCEL);
902
900 // Queue a TouchStart. 903 // Queue a TouchStart.
901 PressTouchPoint(0, 1); 904 PressTouchPoint(0, 1);
902 EXPECT_EQ(1U, GetAndResetSentEventCount()); 905 EXPECT_EQ(1U, GetAndResetSentEventCount());
903 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 906 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
904 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 907 EXPECT_EQ(1U, GetAndResetAckedEventCount());
905 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type); 908 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type);
906 909
907 // Queue a TouchMove that turns into a GestureScrollBegin. 910 // Queue a TouchMove that turns into a GestureScrollBegin.
908 WebGestureEvent followup_scroll; 911 WebGestureEvent followup_scroll;
909 followup_scroll.type = WebInputEvent::GestureScrollBegin; 912 followup_scroll.type = WebInputEvent::GestureScrollBegin;
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
1522 WebGestureEvent followup_scroll; 1525 WebGestureEvent followup_scroll;
1523 followup_scroll.type = WebInputEvent::GestureScrollBegin; 1526 followup_scroll.type = WebInputEvent::GestureScrollBegin;
1524 SetFollowupEvent(followup_scroll); 1527 SetFollowupEvent(followup_scroll);
1525 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1528 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1526 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1529 EXPECT_EQ(0U, GetAndResetSentEventCount());
1527 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1530 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1528 EXPECT_EQ(0U, queued_event_count()); 1531 EXPECT_EQ(0U, queued_event_count());
1529 } 1532 }
1530 1533
1531 TEST_F(TouchEventQueueTest, TouchAbsorption) { 1534 TEST_F(TouchEventQueueTest, TouchAbsorption) {
1532 SetTouchScrollingMode( 1535 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ABSORB_TOUCHMOVE);
1533 TouchEventQueue::TOUCH_SCROLLING_MODE_ABSORB_TOUCHMOVE);
1534 // Queue a TouchStart.
1535 PressTouchPoint(0, 1);
1536 EXPECT_EQ(1U, GetAndResetSentEventCount());
1537 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1538 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1539 1536
1540 for (int i = 0; i < 3; ++i) { 1537 // Queue a TouchStart.
1538 PressTouchPoint(0, 1);
1539 EXPECT_EQ(1U, GetAndResetSentEventCount());
1540 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1541 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1542
1543 for (int i = 0; i < 3; ++i) {
1541 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, 1544 SendGestureEventAck(WebInputEvent::GestureScrollUpdate,
1542 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1545 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1543 1546
1544 MoveTouchPoint(0, 20, 5); 1547 MoveTouchPoint(0, 20, 5);
1545 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1548 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1546 EXPECT_EQ(0U, queued_event_count()); 1549 EXPECT_EQ(0U, queued_event_count());
1547 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1550 EXPECT_EQ(1U, GetAndResetSentEventCount());
1548 1551
1549 // Consuming a scroll event prevents the next touch moves from being 1552 // Consuming a scroll event prevents the next touch moves from being
1550 // dispatched. 1553 // dispatched.
1551 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, 1554 SendGestureEventAck(WebInputEvent::GestureScrollUpdate,
1552 INPUT_EVENT_ACK_STATE_CONSUMED); 1555 INPUT_EVENT_ACK_STATE_CONSUMED);
1553 MoveTouchPoint(0, 20, 5); 1556 MoveTouchPoint(0, 20, 5);
1554 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1557 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1555 EXPECT_EQ(0U, queued_event_count()); 1558 EXPECT_EQ(0U, queued_event_count());
1556 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1559 EXPECT_EQ(0U, GetAndResetSentEventCount());
1557 } 1560 }
1561 }
1562
1563 TEST_F(TouchEventQueueTest, TouchAbsorptionNoTouchAfterScroll) {
1564 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ABSORB_TOUCHMOVE);
1565
1566 // Process a TouchStart
1567 PressTouchPoint(0, 1);
1568 EXPECT_EQ(1U, GetAndResetSentEventCount());
1569 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1570 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1571
1572 // Now send the first touch move and associated GestureScrollBegin,
1573 // but don't ACK the gesture event yet.
1574 MoveTouchPoint(0, 0, 5);
1575 WebGestureEvent followup_scroll;
1576 followup_scroll.type = WebInputEvent::GestureScrollBegin;
1577 SetFollowupEvent(followup_scroll);
1578 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1579 EXPECT_EQ(1U, GetAndResetSentEventCount());
1580 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1581
1582 // Now queue a second touchmove and verify it's not dispatched.
1583 MoveTouchPoint(0, 0, 10);
1584 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1585 EXPECT_EQ(0U, queued_event_count());
1586 EXPECT_EQ(0U, GetAndResetSentEventCount());
1587 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1588
1589 // But a final touchend is sent (even before any gesture events
1590 // have been ACKed).
1591 ReleaseTouchPoint(0);
1592 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1593 EXPECT_EQ(0U, queued_event_count());
1594 EXPECT_EQ(1U, GetAndResetSentEventCount());
1595 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1596 EXPECT_EQ(WebInputEvent::TouchEnd, sent_event().type);
1597
1598 // Now mark the scroll as not consumed (which would cause future
1599 // touchmoves in the active sequence to be sent if there was one).
1600 SendGestureEventAck(WebInputEvent::GestureScrollBegin,
1601 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1602
1603 // Start a new touch sequence and verify that absorption has been
1604 // reset so that moves after the start of scrolling are not sent.
1605 PressTouchPoint(0, 1);
1606 EXPECT_EQ(1U, GetAndResetSentEventCount());
1607 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1608 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1609 MoveTouchPoint(0, 0, 5);
1610 SetFollowupEvent(followup_scroll);
1611 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1612 EXPECT_EQ(1U, GetAndResetSentEventCount());
1613 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1614 MoveTouchPoint(0, 0, 10);
1615 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1616 EXPECT_EQ(0U, queued_event_count());
1617 EXPECT_EQ(0U, GetAndResetSentEventCount());
1558 } 1618 }
1559 1619
1560 } // namespace content 1620 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/touch_event_queue.cc ('k') | ui/events/gesture_detection/gesture_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698