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" |
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |