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

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

Issue 130993003: Prevent partial touch sequences from reaching the renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Name cleanup Created 6 years, 11 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"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 } 143 }
144 144
145 bool IsPendingAckTouchStart() const { 145 bool IsPendingAckTouchStart() const {
146 return queue_->IsPendingAckTouchStart(); 146 return queue_->IsPendingAckTouchStart();
147 } 147 }
148 148
149 void OnHasTouchEventHandlers(bool has_handlers) { 149 void OnHasTouchEventHandlers(bool has_handlers) {
150 queue_->OnHasTouchEventHandlers(has_handlers); 150 queue_->OnHasTouchEventHandlers(has_handlers);
151 } 151 }
152 152
153 bool WillForwardTouchEvents() {
154 return queue_->has_handlers_ &&
155 !queue_->scroll_in_progress_ &&
156 !queue_->HasTimeoutEvent();
157 }
158
159 bool IsTimeoutRunning() { 153 bool IsTimeoutRunning() {
160 return queue_->IsTimeoutRunningForTesting(); 154 return queue_->IsTimeoutRunningForTesting();
161 } 155 }
162 156
163 size_t queued_event_count() const { 157 size_t queued_event_count() const {
164 return queue_->size(); 158 return queue_->size();
165 } 159 }
166 160
167 const WebTouchEvent& latest_event() const { 161 const WebTouchEvent& latest_event() const {
168 return queue_->GetLatestEventForTesting().event; 162 return queue_->GetLatestEventForTesting().event;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); 251 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type);
258 252
259 // Flush the queue. The touch-event queue should now be emptied, but none of 253 // Flush the queue. The touch-event queue should now be emptied, but none of
260 // the queued touch-events should be sent to the renderer. 254 // the queued touch-events should be sent to the renderer.
261 OnHasTouchEventHandlers(false); 255 OnHasTouchEventHandlers(false);
262 EXPECT_EQ(0U, queued_event_count()); 256 EXPECT_EQ(0U, queued_event_count());
263 EXPECT_EQ(0U, GetAndResetSentEventCount()); 257 EXPECT_EQ(0U, GetAndResetSentEventCount());
264 EXPECT_EQ(31U, GetAndResetAckedEventCount()); 258 EXPECT_EQ(31U, GetAndResetAckedEventCount());
265 } 259 }
266 260
261 // Tests that addition of a touch handler during a touch sequence will not cause
262 // the remaining sequence to be forwarded.
263 TEST_F(TouchEventQueueTest, ActiveSequenceNotForwardedWhenHandlersAdded) {
264 OnHasTouchEventHandlers(false);
265
266 // Send a touch-press event while there is no handler.
267 PressTouchPoint(1, 1);
268 EXPECT_EQ(1U, GetAndResetAckedEventCount());
269 EXPECT_EQ(0U, GetAndResetSentEventCount());
270 EXPECT_EQ(0U, queued_event_count());
271
272 OnHasTouchEventHandlers(true);
273
274 // The remaining touch sequence should not be forwarded.
275 MoveTouchPoint(0, 5, 5);
276 ReleaseTouchPoint(0);
277 EXPECT_EQ(2U, GetAndResetAckedEventCount());
278 EXPECT_EQ(0U, GetAndResetSentEventCount());
279 EXPECT_EQ(0U, queued_event_count());
280
281 // A new touch sequence should resume forwarding.
282 PressTouchPoint(1, 1);
283 EXPECT_EQ(1U, queued_event_count());
284 EXPECT_EQ(1U, GetAndResetSentEventCount());
285 }
286
267 // Tests that removal of a touch handler during a touch sequence will prevent 287 // Tests that removal of a touch handler during a touch sequence will prevent
268 // the remaining sequence from being forwarded, even if another touch handler is 288 // the remaining sequence from being forwarded, even if another touch handler is
269 // registered during the same touch sequence. 289 // registered during the same touch sequence.
270 TEST_F(TouchEventQueueTest, ActiveSequenceDroppedWhenHandlersRemoved) { 290 TEST_F(TouchEventQueueTest, ActiveSequenceDroppedWhenHandlersRemoved) {
271 // Send a touch-press event. 291 // Send a touch-press event.
272 PressTouchPoint(1, 1); 292 PressTouchPoint(1, 1);
273 EXPECT_EQ(1U, GetAndResetSentEventCount()); 293 EXPECT_EQ(1U, GetAndResetSentEventCount());
274 EXPECT_EQ(1U, queued_event_count()); 294 EXPECT_EQ(1U, queued_event_count());
275 295
276 // Queue a touch-move event. 296 // Queue a touch-move event.
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 EXPECT_EQ(1U, GetAndResetSentEventCount()); 736 EXPECT_EQ(1U, GetAndResetSentEventCount());
717 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 737 EXPECT_EQ(1U, GetAndResetAckedEventCount());
718 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); 738 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state());
719 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); 739 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type);
720 } 740 }
721 741
722 // Tests basic TouchEvent forwarding suppression. 742 // Tests basic TouchEvent forwarding suppression.
723 TEST_F(TouchEventQueueTest, NoTouchBasic) { 743 TEST_F(TouchEventQueueTest, NoTouchBasic) {
724 // Disable TouchEvent forwarding. 744 // Disable TouchEvent forwarding.
725 OnHasTouchEventHandlers(false); 745 OnHasTouchEventHandlers(false);
726 MoveTouchPoint(0, 30, 5); 746 PressTouchPoint(30, 5);
727 EXPECT_EQ(0U, GetAndResetSentEventCount()); 747 EXPECT_EQ(0U, GetAndResetSentEventCount());
728 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 748 EXPECT_EQ(1U, GetAndResetAckedEventCount());
729 749
730 // TouchMove should not be sent to renderer. 750 // TouchMove should not be sent to renderer.
731 MoveTouchPoint(0, 65, 10); 751 MoveTouchPoint(0, 65, 10);
732 EXPECT_EQ(0U, GetAndResetSentEventCount()); 752 EXPECT_EQ(0U, GetAndResetSentEventCount());
733 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 753 EXPECT_EQ(1U, GetAndResetAckedEventCount());
734 754
735 // TouchEnd should not be sent to renderer. 755 // TouchEnd should not be sent to renderer.
736 ReleaseTouchPoint(0); 756 ReleaseTouchPoint(0);
737 EXPECT_EQ(0U, GetAndResetSentEventCount()); 757 EXPECT_EQ(0U, GetAndResetSentEventCount());
738 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 758 EXPECT_EQ(1U, GetAndResetAckedEventCount());
739 759
740 // TouchStart should not be sent to renderer.
741 PressTouchPoint(5, 5);
742 EXPECT_EQ(0U, GetAndResetSentEventCount());
743 EXPECT_EQ(1U, GetAndResetAckedEventCount());
744
745 // Enable TouchEvent forwarding. 760 // Enable TouchEvent forwarding.
746 OnHasTouchEventHandlers(true); 761 OnHasTouchEventHandlers(true);
747 762
748 PressTouchPoint(80, 10); 763 PressTouchPoint(80, 10);
749 EXPECT_EQ(1U, GetAndResetSentEventCount()); 764 EXPECT_EQ(1U, GetAndResetSentEventCount());
750 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 765 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
751 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 766 EXPECT_EQ(1U, GetAndResetAckedEventCount());
752 767
753 MoveTouchPoint(0, 80, 20); 768 MoveTouchPoint(0, 80, 20);
754 EXPECT_EQ(1U, GetAndResetSentEventCount()); 769 EXPECT_EQ(1U, GetAndResetSentEventCount());
(...skipping 21 matching lines...) Expand all
776 // Queue another TouchStart. 791 // Queue another TouchStart.
777 PressTouchPoint(20, 20); 792 PressTouchPoint(20, 20);
778 EXPECT_EQ(2U, queued_event_count()); 793 EXPECT_EQ(2U, queued_event_count());
779 EXPECT_EQ(0U, GetAndResetSentEventCount()); 794 EXPECT_EQ(0U, GetAndResetSentEventCount());
780 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); 795 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type);
781 796
782 // GestureScrollBegin inserts a synthetic TouchCancel before the TouchStart. 797 // GestureScrollBegin inserts a synthetic TouchCancel before the TouchStart.
783 WebGestureEvent followup_scroll; 798 WebGestureEvent followup_scroll;
784 followup_scroll.type = WebInputEvent::GestureScrollBegin; 799 followup_scroll.type = WebInputEvent::GestureScrollBegin;
785 SetFollowupEvent(followup_scroll); 800 SetFollowupEvent(followup_scroll);
786 ASSERT_TRUE(WillForwardTouchEvents());
787 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 801 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
788 EXPECT_FALSE(WillForwardTouchEvents());
789 EXPECT_EQ(1U, GetAndResetSentEventCount()); 802 EXPECT_EQ(1U, GetAndResetSentEventCount());
790 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 803 EXPECT_EQ(1U, GetAndResetAckedEventCount());
791 EXPECT_EQ(2U, queued_event_count()); 804 EXPECT_EQ(2U, queued_event_count());
792 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type); 805 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type);
793 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); 806 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type);
794 807
795 // Acking the TouchCancel will result in dispatch of the next TouchStart. 808 // Acking the TouchCancel will result in dispatch of the next TouchStart.
796 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 809 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
797 // The synthetic TouchCancel should not reach client, only the TouchStart. 810 // The synthetic TouchCancel should not reach client, only the TouchStart.
798 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 811 EXPECT_EQ(1U, GetAndResetAckedEventCount());
799 EXPECT_EQ(0U, GetAndResetSentEventCount()); 812 EXPECT_EQ(0U, GetAndResetSentEventCount());
800 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); 813 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type);
801 814
802 // TouchMove should not be sent to the renderer. 815 // TouchMove should not be sent to the renderer.
803 MoveTouchPoint(0, 30, 5); 816 MoveTouchPoint(0, 30, 5);
804 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 817 EXPECT_EQ(1U, GetAndResetAckedEventCount());
805 EXPECT_EQ(0U, GetAndResetSentEventCount()); 818 EXPECT_EQ(0U, GetAndResetSentEventCount());
806 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); 819 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state());
807 820
808 // GestureScrollUpdates should not change affect touch forwarding. 821 // GestureScrollUpdates should not change affect touch forwarding.
809 SendGestureEvent(WebInputEvent::GestureScrollUpdate); 822 SendGestureEvent(WebInputEvent::GestureScrollUpdate);
810 EXPECT_FALSE(WillForwardTouchEvents());
811 823
812 // TouchEnd should not be sent to the renderer. 824 // TouchEnd should not be sent to the renderer.
813 ReleaseTouchPoint(0); 825 ReleaseTouchPoint(0);
814 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 826 EXPECT_EQ(1U, GetAndResetAckedEventCount());
815 EXPECT_EQ(0U, GetAndResetSentEventCount()); 827 EXPECT_EQ(0U, GetAndResetSentEventCount());
816 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); 828 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state());
817 829
818 // GestureScrollEnd will resume the sending of TouchEvents to renderer. 830 ReleaseTouchPoint(0);
819 SendGestureEvent(blink::WebInputEvent::GestureScrollEnd); 831 EXPECT_EQ(1U, GetAndResetAckedEventCount());
820 EXPECT_TRUE(WillForwardTouchEvents()); 832 EXPECT_EQ(0U, GetAndResetSentEventCount());
833 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state());
821 834
822 // Now TouchEvents should be forwarded normally. 835 // Touch events from a new gesture sequence should be forwarded normally.
823 PressTouchPoint(80, 10); 836 PressTouchPoint(80, 10);
824 EXPECT_EQ(1U, GetAndResetSentEventCount()); 837 EXPECT_EQ(1U, GetAndResetSentEventCount());
825 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 838 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
826 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 839 EXPECT_EQ(1U, GetAndResetAckedEventCount());
827 840
828 MoveTouchPoint(0, 80, 20); 841 MoveTouchPoint(0, 80, 20);
829 EXPECT_EQ(1U, GetAndResetSentEventCount()); 842 EXPECT_EQ(1U, GetAndResetSentEventCount());
830 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 843 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
831 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 844 EXPECT_EQ(1U, GetAndResetAckedEventCount());
832 845
833 ReleaseTouchPoint(0); 846 ReleaseTouchPoint(0);
834 EXPECT_EQ(1U, GetAndResetSentEventCount()); 847 EXPECT_EQ(1U, GetAndResetSentEventCount());
835 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 848 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
836 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 849 EXPECT_EQ(1U, GetAndResetAckedEventCount());
837 } 850 }
838 851
852 // Tests that a scroll event will not insert a synthetic TouchCancel if there
853 // was no consumer for the current touch sequence.
854 TEST_F(TouchEventQueueTest, NoTouchCancelOnScrollIfNoConsumer) {
855 // Queue a TouchStart.
856 PressTouchPoint(0, 1);
857 EXPECT_EQ(1U, GetAndResetSentEventCount());
858 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
859 EXPECT_EQ(1U, GetAndResetAckedEventCount());
860 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type);
861
862 // Queue a TouchMove that turns into a GestureScrollBegin.
863 WebGestureEvent followup_scroll;
864 followup_scroll.type = WebInputEvent::GestureScrollBegin;
865 SetFollowupEvent(followup_scroll);
866 MoveTouchPoint(0, 20, 5);
867
868 // The TouchMove has no consumer, and should be ack'ed immediately. However,
869 // *no* synthetic TouchCancel should be inserted as the touch sequence
870 // had no consumer.
871 EXPECT_EQ(0U, queued_event_count());
872 EXPECT_EQ(0U, GetAndResetSentEventCount());
873 EXPECT_EQ(1U, GetAndResetAckedEventCount());
874 EXPECT_EQ(0U, queued_event_count());
875 EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type);
876
877 // Subsequent TouchMove's should not be sent to the renderer.
878 MoveTouchPoint(0, 30, 5);
879 EXPECT_EQ(1U, GetAndResetAckedEventCount());
880 EXPECT_EQ(0U, GetAndResetSentEventCount());
881 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state());
882
883 // TouchEnd should not be sent to the renderer.
884 ReleaseTouchPoint(0);
885 EXPECT_EQ(1U, GetAndResetAckedEventCount());
886 EXPECT_EQ(0U, GetAndResetSentEventCount());
887 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state());
888
889 // Touch events from a new gesture sequence should be forwarded normally.
890 PressTouchPoint(80, 10);
891 EXPECT_EQ(1U, GetAndResetSentEventCount());
892 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
893 EXPECT_EQ(1U, GetAndResetAckedEventCount());
894 }
895
839 // Tests that IsTouchStartPendingAck works correctly. 896 // Tests that IsTouchStartPendingAck works correctly.
840 TEST_F(TouchEventQueueTest, PendingStart) { 897 TEST_F(TouchEventQueueTest, PendingStart) {
841 898
842 EXPECT_FALSE(IsPendingAckTouchStart()); 899 EXPECT_FALSE(IsPendingAckTouchStart());
843 900
844 // Send the touchstart for one point (#1). 901 // Send the touchstart for one point (#1).
845 PressTouchPoint(1, 1); 902 PressTouchPoint(1, 1);
846 EXPECT_EQ(1U, queued_event_count()); 903 EXPECT_EQ(1U, queued_event_count());
847 EXPECT_TRUE(IsPendingAckTouchStart()); 904 EXPECT_TRUE(IsPendingAckTouchStart());
848 905
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
920 TEST_F(TouchEventQueueTest, TouchTimeoutBasic) { 977 TEST_F(TouchEventQueueTest, TouchTimeoutBasic) {
921 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs); 978 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
922 979
923 // Queue a TouchStart. 980 // Queue a TouchStart.
924 GetAndResetSentEventCount(); 981 GetAndResetSentEventCount();
925 GetAndResetAckedEventCount(); 982 GetAndResetAckedEventCount();
926 PressTouchPoint(0, 1); 983 PressTouchPoint(0, 1);
927 ASSERT_EQ(1U, GetAndResetSentEventCount()); 984 ASSERT_EQ(1U, GetAndResetSentEventCount());
928 ASSERT_EQ(0U, GetAndResetAckedEventCount()); 985 ASSERT_EQ(0U, GetAndResetAckedEventCount());
929 EXPECT_TRUE(IsTimeoutRunning()); 986 EXPECT_TRUE(IsTimeoutRunning());
930 EXPECT_TRUE(WillForwardTouchEvents());
931 987
932 // Delay the ack. 988 // Delay the ack.
933 base::MessageLoop::current()->PostDelayedTask( 989 base::MessageLoop::current()->PostDelayedTask(
934 FROM_HERE, 990 FROM_HERE,
935 base::MessageLoop::QuitClosure(), 991 base::MessageLoop::QuitClosure(),
936 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2)); 992 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2));
937 base::MessageLoop::current()->Run(); 993 base::MessageLoop::current()->Run();
938 994
939 // The timeout should have fired, synthetically ack'ing the timed-out event. 995 // The timeout should have fired, synthetically ack'ing the timed-out event.
940 // TouchEvent forwarding is disabled until the ack is received for the 996 // TouchEvent forwarding is disabled until the ack is received for the
941 // timed-out event and the future cancel event. 997 // timed-out event and the future cancel event.
942 EXPECT_FALSE(IsTimeoutRunning()); 998 EXPECT_FALSE(IsTimeoutRunning());
943 EXPECT_FALSE(WillForwardTouchEvents());
944 EXPECT_EQ(0U, GetAndResetSentEventCount()); 999 EXPECT_EQ(0U, GetAndResetSentEventCount());
945 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1000 EXPECT_EQ(1U, GetAndResetAckedEventCount());
946 1001
947 // Ack'ing the original event should trigger a cancel event. 1002 // Ack'ing the original event should trigger a cancel event.
948 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1003 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
949 EXPECT_FALSE(IsTimeoutRunning()); 1004 EXPECT_FALSE(IsTimeoutRunning());
950 EXPECT_FALSE(WillForwardTouchEvents());
951 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1005 EXPECT_EQ(0U, GetAndResetAckedEventCount());
952 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1006 EXPECT_EQ(1U, GetAndResetSentEventCount());
953 1007
954 // Touch events should not be forwarded until we receive the cancel acks. 1008 // Touch events should not be forwarded until we receive the cancel acks.
955 PressTouchPoint(0, 1); 1009 MoveTouchPoint(0, 1, 1);
956 ASSERT_EQ(0U, GetAndResetSentEventCount()); 1010 ASSERT_EQ(0U, GetAndResetSentEventCount());
957 ASSERT_EQ(1U, GetAndResetAckedEventCount()); 1011 ASSERT_EQ(1U, GetAndResetAckedEventCount());
958 1012
1013 ReleaseTouchPoint(0);
1014 ASSERT_EQ(0U, GetAndResetSentEventCount());
1015 ASSERT_EQ(1U, GetAndResetAckedEventCount());
1016
959 // The synthetic TouchCancel ack should not reach the client, but should 1017 // The synthetic TouchCancel ack should not reach the client, but should
960 // resume touch forwarding. 1018 // resume touch forwarding.
961 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1019 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
962 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1020 EXPECT_EQ(0U, GetAndResetSentEventCount());
963 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1021 EXPECT_EQ(0U, GetAndResetAckedEventCount());
964 EXPECT_TRUE(WillForwardTouchEvents());
965 1022
966 // Subsequent events should be handled normally. 1023 // Subsequent events should be handled normally.
967 PressTouchPoint(0, 1); 1024 PressTouchPoint(0, 1);
968 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1025 EXPECT_EQ(1U, GetAndResetSentEventCount());
969 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1026 EXPECT_EQ(0U, GetAndResetAckedEventCount());
970 } 1027 }
971 1028
972 // Tests that the timeout is never started if the renderer consumes 1029 // Tests that the timeout is never started if the renderer consumes
973 // a TouchEvent from the current touch sequence. 1030 // a TouchEvent from the current touch sequence.
974 TEST_F(TouchEventQueueTest, NoTouchTimeoutIfRendererIsConsumingGesture) { 1031 TEST_F(TouchEventQueueTest, NoTouchTimeoutIfRendererIsConsumingGesture) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1028 } 1085 }
1029 1086
1030 // Tests that a TouchCancel timeout plays nice when the timed out touch stream 1087 // Tests that a TouchCancel timeout plays nice when the timed out touch stream
1031 // turns into a scroll gesture sequence. 1088 // turns into a scroll gesture sequence.
1032 TEST_F(TouchEventQueueTest, TouchTimeoutWithFollowupGesture) { 1089 TEST_F(TouchEventQueueTest, TouchTimeoutWithFollowupGesture) {
1033 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs); 1090 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
1034 1091
1035 // Queue a TouchStart. 1092 // Queue a TouchStart.
1036 PressTouchPoint(0, 1); 1093 PressTouchPoint(0, 1);
1037 EXPECT_TRUE(IsTimeoutRunning()); 1094 EXPECT_TRUE(IsTimeoutRunning());
1038 EXPECT_TRUE(WillForwardTouchEvents());
1039 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1095 EXPECT_EQ(1U, GetAndResetSentEventCount());
1040 1096
1041 // The cancelled sequence may turn into a scroll gesture. 1097 // The cancelled sequence may turn into a scroll gesture.
1042 WebGestureEvent followup_scroll; 1098 WebGestureEvent followup_scroll;
1043 followup_scroll.type = WebInputEvent::GestureScrollBegin; 1099 followup_scroll.type = WebInputEvent::GestureScrollBegin;
1044 SetFollowupEvent(followup_scroll); 1100 SetFollowupEvent(followup_scroll);
1045 1101
1046 // Delay the ack. 1102 // Delay the ack.
1047 base::MessageLoop::current()->PostDelayedTask( 1103 base::MessageLoop::current()->PostDelayedTask(
1048 FROM_HERE, 1104 FROM_HERE,
1049 base::MessageLoop::QuitClosure(), 1105 base::MessageLoop::QuitClosure(),
1050 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2)); 1106 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2));
1051 base::MessageLoop::current()->Run(); 1107 base::MessageLoop::current()->Run();
1052 1108
1053 // The timeout should have fired, disabling touch forwarding until both acks 1109 // The timeout should have fired, disabling touch forwarding until both acks
1054 // are received, acking the timed out event. 1110 // are received, acking the timed out event.
1055 EXPECT_FALSE(IsTimeoutRunning()); 1111 EXPECT_FALSE(IsTimeoutRunning());
1056 EXPECT_FALSE(WillForwardTouchEvents());
1057 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1112 EXPECT_EQ(0U, GetAndResetSentEventCount());
1058 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1113 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1059 1114
1060 // Ack the original event, triggering a TouchCancel. 1115 // Ack the original event, triggering a TouchCancel.
1061 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 1116 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
1062 EXPECT_FALSE(IsTimeoutRunning()); 1117 EXPECT_FALSE(IsTimeoutRunning());
1063 EXPECT_FALSE(WillForwardTouchEvents());
1064 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1118 EXPECT_EQ(1U, GetAndResetSentEventCount());
1065 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1119 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1066 1120
1067 // Ack the cancel event. Normally, this would resume touch forwarding, 1121 // Ack the cancel event. Normally, this would resume touch forwarding,
1068 // but we're still within a scroll gesture so it remains disabled. 1122 // but we're still within a scroll gesture so it remains disabled.
1069 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 1123 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
1070 EXPECT_FALSE(IsTimeoutRunning()); 1124 EXPECT_FALSE(IsTimeoutRunning());
1071 EXPECT_FALSE(WillForwardTouchEvents());
1072 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1125 EXPECT_EQ(0U, GetAndResetSentEventCount());
1073 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1126 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1074 1127
1075 // Try to forward a touch event. 1128 // Try to forward touch events for the current sequence.
1076 GetAndResetSentEventCount(); 1129 GetAndResetSentEventCount();
1077 GetAndResetAckedEventCount(); 1130 GetAndResetAckedEventCount();
1078 PressTouchPoint(0, 1); 1131 MoveTouchPoint(0, 1, 1);
1132 ReleaseTouchPoint(0);
1079 EXPECT_FALSE(IsTimeoutRunning()); 1133 EXPECT_FALSE(IsTimeoutRunning());
1080 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1134 EXPECT_EQ(0U, GetAndResetSentEventCount());
1081 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1135 EXPECT_EQ(2U, GetAndResetAckedEventCount());
1082 1136
1083 // Now end the scroll sequence, resuming touch handling. 1137 // Now end the scroll sequence, resuming touch handling.
1084 SendGestureEvent(blink::WebInputEvent::GestureScrollEnd); 1138 SendGestureEvent(blink::WebInputEvent::GestureScrollEnd);
1085 EXPECT_TRUE(WillForwardTouchEvents());
1086 PressTouchPoint(0, 1); 1139 PressTouchPoint(0, 1);
1087 EXPECT_TRUE(IsTimeoutRunning()); 1140 EXPECT_TRUE(IsTimeoutRunning());
1088 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1141 EXPECT_EQ(1U, GetAndResetSentEventCount());
1089 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1142 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1090 } 1143 }
1091 1144
1092 // Tests that a TouchCancel timeout plays nice when the timed out touch stream 1145 // Tests that a TouchCancel timeout plays nice when the timed out touch stream
1093 // turns into a scroll gesture sequence, but the original event acks are 1146 // turns into a scroll gesture sequence, but the original event acks are
1094 // significantly delayed. 1147 // significantly delayed.
1095 TEST_F(TouchEventQueueTest, TouchTimeoutWithFollowupGestureAndDelayedAck) { 1148 TEST_F(TouchEventQueueTest, TouchTimeoutWithFollowupGestureAndDelayedAck) {
1096 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs); 1149 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
1097 1150
1098 // Queue a TouchStart. 1151 // Queue a TouchStart.
1099 PressTouchPoint(0, 1); 1152 PressTouchPoint(0, 1);
1100 EXPECT_TRUE(IsTimeoutRunning()); 1153 EXPECT_TRUE(IsTimeoutRunning());
1101 EXPECT_TRUE(WillForwardTouchEvents());
1102 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1154 EXPECT_EQ(1U, GetAndResetSentEventCount());
1103 1155
1104 // The cancelled sequence may turn into a scroll gesture. 1156 // The cancelled sequence may turn into a scroll gesture.
1105 WebGestureEvent followup_scroll; 1157 WebGestureEvent followup_scroll;
1106 followup_scroll.type = WebInputEvent::GestureScrollBegin; 1158 followup_scroll.type = WebInputEvent::GestureScrollBegin;
1107 SetFollowupEvent(followup_scroll); 1159 SetFollowupEvent(followup_scroll);
1108 1160
1109 // Delay the ack. 1161 // Delay the ack.
1110 base::MessageLoop::current()->PostDelayedTask( 1162 base::MessageLoop::current()->PostDelayedTask(
1111 FROM_HERE, 1163 FROM_HERE,
1112 base::MessageLoop::QuitClosure(), 1164 base::MessageLoop::QuitClosure(),
1113 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2)); 1165 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2));
1114 base::MessageLoop::current()->Run(); 1166 base::MessageLoop::current()->Run();
1115 1167
1116 // The timeout should have fired, disabling touch forwarding until both acks 1168 // The timeout should have fired, disabling touch forwarding until both acks
1117 // are received and acking the timed out event. 1169 // are received and acking the timed out event.
1118 EXPECT_FALSE(IsTimeoutRunning()); 1170 EXPECT_FALSE(IsTimeoutRunning());
1119 EXPECT_FALSE(WillForwardTouchEvents());
1120 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1171 EXPECT_EQ(0U, GetAndResetSentEventCount());
1121 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1172 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1122 1173
1123 // Try to forward a touch event. 1174 // Try to forward a touch event.
1124 GetAndResetSentEventCount(); 1175 GetAndResetSentEventCount();
1125 GetAndResetAckedEventCount(); 1176 GetAndResetAckedEventCount();
1126 PressTouchPoint(0, 1); 1177 MoveTouchPoint(0, 1, 1);
1127 EXPECT_FALSE(IsTimeoutRunning()); 1178 EXPECT_FALSE(IsTimeoutRunning());
1128 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1179 EXPECT_EQ(0U, GetAndResetSentEventCount());
1129 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1180 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1130 1181
1131 // Now end the scroll sequence. Events will not be forwarded until the two 1182 // Now end the scroll sequence. Events will not be forwarded until the two
1132 // outstanding touch acks are received. 1183 // outstanding touch acks are received.
1133 SendGestureEvent(blink::WebInputEvent::GestureScrollEnd); 1184 SendGestureEvent(blink::WebInputEvent::GestureScrollEnd);
1134 PressTouchPoint(0, 1); 1185 MoveTouchPoint(0, 2, 2);
1186 ReleaseTouchPoint(0);
1135 EXPECT_FALSE(IsTimeoutRunning()); 1187 EXPECT_FALSE(IsTimeoutRunning());
1136 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1188 EXPECT_EQ(0U, GetAndResetSentEventCount());
1137 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1189 EXPECT_EQ(2U, GetAndResetAckedEventCount());
1138 1190
1139 // Ack the original event, triggering a cancel. 1191 // Ack the original event, triggering a cancel.
1140 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 1192 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
1141 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1193 EXPECT_EQ(1U, GetAndResetSentEventCount());
1142 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1194 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1143 1195
1144 // Ack the cancel event, resuming touch forwarding. 1196 // Ack the cancel event, resuming touch forwarding.
1145 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 1197 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
1146 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1198 EXPECT_EQ(0U, GetAndResetSentEventCount());
1147 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1199 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1148 1200
1149 PressTouchPoint(0, 1); 1201 PressTouchPoint(0, 1);
1150 EXPECT_TRUE(IsTimeoutRunning()); 1202 EXPECT_TRUE(IsTimeoutRunning());
1151 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1203 EXPECT_EQ(1U, GetAndResetSentEventCount());
1152 } 1204 }
1153 1205
1154 // Tests that a delayed TouchEvent ack will not trigger a TouchCancel timeout if 1206 // Tests that a delayed TouchEvent ack will not trigger a TouchCancel timeout if
1155 // the timed-out event had no consumer. 1207 // the timed-out event had no consumer.
1156 TEST_F(TouchEventQueueTest, NoCancelOnTouchTimeoutWithoutConsumer) { 1208 TEST_F(TouchEventQueueTest, NoCancelOnTouchTimeoutWithoutConsumer) {
1157 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs); 1209 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
1158 1210
1159 // Queue a TouchStart. 1211 // Queue a TouchStart.
1160 PressTouchPoint(0, 1); 1212 PressTouchPoint(0, 1);
1161 ASSERT_EQ(1U, GetAndResetSentEventCount()); 1213 ASSERT_EQ(1U, GetAndResetSentEventCount());
1162 ASSERT_EQ(0U, GetAndResetAckedEventCount()); 1214 ASSERT_EQ(0U, GetAndResetAckedEventCount());
1163 EXPECT_TRUE(IsTimeoutRunning()); 1215 EXPECT_TRUE(IsTimeoutRunning());
1164 EXPECT_TRUE(WillForwardTouchEvents());
1165 1216
1166 // Delay the ack. 1217 // Delay the ack.
1167 base::MessageLoop::current()->PostDelayedTask( 1218 base::MessageLoop::current()->PostDelayedTask(
1168 FROM_HERE, 1219 FROM_HERE,
1169 base::MessageLoop::QuitClosure(), 1220 base::MessageLoop::QuitClosure(),
1170 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2)); 1221 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2));
1171 base::MessageLoop::current()->Run(); 1222 base::MessageLoop::current()->Run();
1172 1223
1173 // The timeout should have fired, synthetically ack'ing the timed out event. 1224 // The timeout should have fired, synthetically ack'ing the timed out event.
1174 // TouchEvent forwarding is disabled until the original ack is received. 1225 // TouchEvent forwarding is disabled until the original ack is received.
1175 EXPECT_FALSE(IsTimeoutRunning()); 1226 EXPECT_FALSE(IsTimeoutRunning());
1176 EXPECT_FALSE(WillForwardTouchEvents());
1177 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1227 EXPECT_EQ(0U, GetAndResetSentEventCount());
1178 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1228 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1179 1229
1180 // Touch events should not be forwarded until we receive the original ack. 1230 // Touch events should not be forwarded until we receive the original ack.
1181 PressTouchPoint(0, 1); 1231 MoveTouchPoint(0, 1, 1);
1232 ReleaseTouchPoint(0);
1182 ASSERT_EQ(0U, GetAndResetSentEventCount()); 1233 ASSERT_EQ(0U, GetAndResetSentEventCount());
1183 ASSERT_EQ(1U, GetAndResetAckedEventCount()); 1234 ASSERT_EQ(2U, GetAndResetAckedEventCount());
1184 1235
1185 // Ack'ing the original event should not trigger a cancel event, as the 1236 // Ack'ing the original event should not trigger a cancel event, as the
1186 // TouchStart had no consumer. However, it should re-enable touch forwarding. 1237 // TouchStart had no consumer. However, it should re-enable touch forwarding.
1187 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 1238 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
1188 EXPECT_FALSE(IsTimeoutRunning()); 1239 EXPECT_FALSE(IsTimeoutRunning());
1189 EXPECT_TRUE(WillForwardTouchEvents());
1190 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1240 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1191 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1241 EXPECT_EQ(0U, GetAndResetSentEventCount());
1192 1242
1193 // Subsequent events should be handled normally. 1243 // Subsequent events should be handled normally.
1194 PressTouchPoint(0, 1); 1244 PressTouchPoint(0, 1);
1195 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1245 EXPECT_EQ(1U, GetAndResetSentEventCount());
1196 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1246 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1197 } 1247 }
1198 } // namespace content 1248 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698