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 841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 // Queue a TouchStart. | 852 // Queue a TouchStart. |
853 PressTouchPoint(0, 1); | 853 PressTouchPoint(0, 1); |
854 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 854 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
855 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 855 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
856 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 856 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
857 | 857 |
858 MoveTouchPoint(0, 20, 5); | 858 MoveTouchPoint(0, 20, 5); |
859 EXPECT_EQ(1U, queued_event_count()); | 859 EXPECT_EQ(1U, queued_event_count()); |
860 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 860 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
861 | 861 |
862 MoveTouchPoint(0, 30, 15); | |
863 EXPECT_EQ(2U, queued_event_count()); | |
864 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
865 | |
866 // Queue another TouchStart. | 862 // Queue another TouchStart. |
867 PressTouchPoint(20, 20); | 863 PressTouchPoint(20, 20); |
868 EXPECT_EQ(3U, queued_event_count()); | 864 EXPECT_EQ(2U, queued_event_count()); |
869 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 865 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
870 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); | 866 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); |
871 | 867 |
| 868 // GestureScrollBegin inserts a synthetic TouchCancel before the TouchStart. |
872 WebGestureEvent followup_scroll; | 869 WebGestureEvent followup_scroll; |
873 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 870 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
874 SetFollowupEvent(followup_scroll); | 871 SetFollowupEvent(followup_scroll); |
875 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 872 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
876 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 873 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
877 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
878 EXPECT_EQ(2U, queued_event_count()); | |
879 EXPECT_TRUE(sent_event().cancelable); | |
880 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | |
881 | |
882 // GestureScrollUpdate inserts a synthetic TouchCancel before the TouchStart. | |
883 followup_scroll.type = WebInputEvent::GestureScrollUpdate; | |
884 SetFollowupEvent(followup_scroll); | |
885 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
886 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
887 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 874 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
888 EXPECT_EQ(2U, queued_event_count()); | 875 EXPECT_EQ(2U, queued_event_count()); |
889 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type); | 876 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type); |
890 EXPECT_FALSE(sent_event().cancelable); | 877 EXPECT_FALSE(sent_event().cancelable); |
891 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); | 878 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); |
892 | 879 |
893 // Acking the TouchCancel will result in dispatch of the next TouchStart. | 880 // Acking the TouchCancel will result in dispatch of the next TouchStart. |
894 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 881 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
895 // The synthetic TouchCancel should not reach client, only the TouchStart. | 882 // The synthetic TouchCancel should not reach client, only the TouchStart. |
896 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 883 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1723 // scroll sequences that transitions between scrolls consumed and unconsumed. | 1710 // scroll sequences that transitions between scrolls consumed and unconsumed. |
1724 TEST_F(TouchEventQueueTest, AsyncTouchThrottledAfterScroll) { | 1711 TEST_F(TouchEventQueueTest, AsyncTouchThrottledAfterScroll) { |
1725 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | 1712 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); |
1726 | 1713 |
1727 // Process a TouchStart | 1714 // Process a TouchStart |
1728 PressTouchPoint(0, 1); | 1715 PressTouchPoint(0, 1); |
1729 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1716 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1730 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1717 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1731 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1718 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1732 | 1719 |
1733 // Now send the first touch move and associated GestureScrollBegin. | 1720 // Now send the first touch move and associated GestureScrollBegin, |
| 1721 // but don't ACK the gesture event yet. |
1734 MoveTouchPoint(0, 0, 5); | 1722 MoveTouchPoint(0, 0, 5); |
1735 WebGestureEvent followup_scroll; | 1723 WebGestureEvent followup_scroll; |
1736 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 1724 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
1737 SetFollowupEvent(followup_scroll); | 1725 SetFollowupEvent(followup_scroll); |
1738 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1726 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1739 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1727 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1740 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1728 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1741 SendGestureEventAck(WebInputEvent::GestureScrollBegin, | |
1742 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1743 | |
1744 // Send the second touch move and associated GestureScrollUpdate, but don't | |
1745 // ACK the gesture event yet. | |
1746 MoveTouchPoint(0, 0, 5); | |
1747 followup_scroll.type = WebInputEvent::GestureScrollUpdate; | |
1748 SetFollowupEvent(followup_scroll); | |
1749 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1750 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1751 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1752 | 1729 |
1753 // Now queue a second touchmove and verify it's not (yet) dispatched. | 1730 // Now queue a second touchmove and verify it's not (yet) dispatched. |
1754 MoveTouchPoint(0, 0, 10); | 1731 MoveTouchPoint(0, 0, 10); |
1755 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1732 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1756 EXPECT_TRUE(HasPendingAsyncTouchMove()); | 1733 EXPECT_TRUE(HasPendingAsyncTouchMove()); |
1757 EXPECT_EQ(0U, queued_event_count()); | 1734 EXPECT_EQ(0U, queued_event_count()); |
1758 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1735 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1759 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1736 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1760 | 1737 |
1761 // Queuing the final touchend should flush the pending, async touchmove. | 1738 // Queuing the final touchend should flush the pending, async touchmove. |
(...skipping 14 matching lines...) Expand all Loading... |
1776 EXPECT_EQ(1U, queued_event_count()); | 1753 EXPECT_EQ(1U, queued_event_count()); |
1777 | 1754 |
1778 // Ack the touchend. | 1755 // Ack the touchend. |
1779 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1756 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1780 EXPECT_EQ(0U, queued_event_count()); | 1757 EXPECT_EQ(0U, queued_event_count()); |
1781 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1758 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1782 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1759 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1783 | 1760 |
1784 // Now mark the scroll as not consumed (which would cause future | 1761 // Now mark the scroll as not consumed (which would cause future |
1785 // touchmoves in the active sequence to be sent if there was one). | 1762 // touchmoves in the active sequence to be sent if there was one). |
1786 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, | 1763 SendGestureEventAck(WebInputEvent::GestureScrollBegin, |
1787 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1764 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1788 | 1765 |
1789 // Start a new touch sequence and verify that throttling has been reset. | 1766 // Start a new touch sequence and verify that throttling has been reset. |
1790 // Touch moves after the start of scrolling will again be throttled. | 1767 // Touch moves after the start of scrolling will again be throttled. |
1791 PressTouchPoint(0, 0); | 1768 PressTouchPoint(0, 0); |
1792 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1769 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1793 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1770 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1794 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1771 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1795 MoveTouchPoint(0, 0, 5); | 1772 MoveTouchPoint(0, 0, 5); |
1796 followup_scroll.type = WebInputEvent::GestureScrollBegin; | |
1797 SetFollowupEvent(followup_scroll); | 1773 SetFollowupEvent(followup_scroll); |
1798 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1774 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1799 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1775 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1800 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1776 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1801 | |
1802 MoveTouchPoint(0, 0, 5); | |
1803 followup_scroll.type = WebInputEvent::GestureScrollUpdate; | |
1804 SetFollowupEvent(followup_scroll); | |
1805 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
1806 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
1807 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
1808 | |
1809 MoveTouchPoint(0, 0, 10); | 1777 MoveTouchPoint(0, 0, 10); |
1810 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1778 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1811 EXPECT_TRUE(HasPendingAsyncTouchMove()); | 1779 EXPECT_TRUE(HasPendingAsyncTouchMove()); |
1812 EXPECT_EQ(0U, queued_event_count()); | 1780 EXPECT_EQ(0U, queued_event_count()); |
1813 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1781 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1814 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1782 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1815 | 1783 |
1816 // As soon as a touchmove exceeds the outer slop region it will be forwarded | 1784 // As soon as a touchmove exceeds the outer slop region it will be forwarded |
1817 // immediately. | 1785 // immediately. |
1818 MoveTouchPoint(0, 0, 20); | 1786 MoveTouchPoint(0, 0, 20); |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2018 // The start of a scroll gesture should trigger async touch event dispatch. | 1986 // The start of a scroll gesture should trigger async touch event dispatch. |
2019 MoveTouchPoint(0, 1, 1); | 1987 MoveTouchPoint(0, 1, 1); |
2020 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1988 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
2021 WebGestureEvent followup_scroll; | 1989 WebGestureEvent followup_scroll; |
2022 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 1990 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
2023 SetFollowupEvent(followup_scroll); | 1991 SetFollowupEvent(followup_scroll); |
2024 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1992 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
2025 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1993 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
2026 EXPECT_EQ(0U, queued_event_count()); | 1994 EXPECT_EQ(0U, queued_event_count()); |
2027 | 1995 |
2028 SendGestureEvent(WebInputEvent::GestureScrollUpdate); | |
2029 | |
2030 // The async touchmove should be ack'ed immediately, but not forwarded. | 1996 // The async touchmove should be ack'ed immediately, but not forwarded. |
2031 // However, because the ack triggers a touchcancel, both the pending touch and | 1997 // However, because the ack triggers a touchcancel, both the pending touch and |
2032 // the queued touchcancel should be flushed. | 1998 // the queued touchcancel should be flushed. |
2033 WebTouchEvent followup_cancel; | 1999 WebTouchEvent followup_cancel; |
2034 followup_cancel.type = WebInputEvent::TouchCancel; | 2000 followup_cancel.type = WebInputEvent::TouchCancel; |
2035 followup_cancel.touchesLength = 1; | 2001 followup_cancel.touchesLength = 1; |
2036 followup_cancel.touches[0].state = WebTouchPoint::StateCancelled; | 2002 followup_cancel.touches[0].state = WebTouchPoint::StateCancelled; |
2037 SetFollowupEvent(followup_cancel); | 2003 SetFollowupEvent(followup_cancel); |
2038 MoveTouchPoint(0, 5, 5); | 2004 MoveTouchPoint(0, 5, 5); |
2039 EXPECT_EQ(2U, queued_event_count()); | 2005 EXPECT_EQ(2U, queued_event_count()); |
2040 EXPECT_FALSE(sent_event().cancelable); | 2006 EXPECT_FALSE(sent_event().cancelable); |
2041 EXPECT_FALSE(HasPendingAsyncTouchMove()); | 2007 EXPECT_FALSE(HasPendingAsyncTouchMove()); |
2042 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); | 2008 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); |
2043 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); | 2009 EXPECT_EQ(WebInputEvent::TouchMove, sent_event().type); |
2044 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2010 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
2045 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2011 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
2046 | 2012 |
2047 // The ack for the async touchmove should not reach the client, as it has | 2013 // The ack for the asnc touchmove should not reach the client, as it has |
2048 // already been ack'ed. | 2014 // already been ack'ed. |
2049 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2015 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
2050 EXPECT_FALSE(sent_event().cancelable); | 2016 EXPECT_FALSE(sent_event().cancelable); |
2051 EXPECT_EQ(1U, queued_event_count()); | 2017 EXPECT_EQ(1U, queued_event_count()); |
2052 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type); | 2018 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type); |
2053 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 2019 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
2054 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2020 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
2055 | 2021 |
2056 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2022 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
2057 EXPECT_EQ(0U, queued_event_count()); | 2023 EXPECT_EQ(0U, queued_event_count()); |
2058 EXPECT_EQ(WebInputEvent::TouchCancel, acked_event().type); | 2024 EXPECT_EQ(WebInputEvent::TouchCancel, acked_event().type); |
2059 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2025 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
2060 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 2026 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
2061 } | 2027 } |
2062 | 2028 |
2063 TEST_F(TouchEventQueueTest, TouchAbsorptionWithConsumedFirstMove) { | |
2064 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | |
2065 | |
2066 // Queue a TouchStart. | |
2067 PressTouchPoint(0, 1); | |
2068 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
2069 EXPECT_EQ(0U, queued_event_count()); | |
2070 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
2071 | |
2072 MoveTouchPoint(0, 20, 5); | |
2073 SendGestureEvent(blink::WebInputEvent::GestureScrollBegin); | |
2074 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | |
2075 EXPECT_EQ(0U, queued_event_count()); | |
2076 EXPECT_EQ(2U, GetAndResetSentEventCount()); | |
2077 | |
2078 // Even if the first touchmove event was consumed, subsequent unconsumed | |
2079 // touchmove events should trigger scrolling. | |
2080 MoveTouchPoint(0, 60, 5); | |
2081 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | |
2082 EXPECT_EQ(0U, queued_event_count()); | |
2083 EXPECT_TRUE(sent_event().cancelable); | |
2084 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
2085 | |
2086 MoveTouchPoint(0, 20, 5); | |
2087 WebGestureEvent followup_scroll; | |
2088 followup_scroll.type = WebInputEvent::GestureScrollUpdate; | |
2089 SetFollowupEvent(followup_scroll); | |
2090 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
2091 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, | |
2092 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2093 EXPECT_EQ(0U, queued_event_count()); | |
2094 EXPECT_TRUE(sent_event().cancelable); | |
2095 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
2096 | |
2097 MoveTouchPoint(0, 60, 5); | |
2098 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | |
2099 EXPECT_EQ(0U, queued_event_count()); | |
2100 EXPECT_FALSE(sent_event().cancelable); | |
2101 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
2102 } | |
2103 | |
2104 } // namespace content | 2029 } // namespace content |
OLD | NEW |