OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/shared_memory.h" | 7 #include "base/shared_memory.h" |
8 #include "base/timer.h" | 8 #include "base/timer.h" |
9 #include "content/browser/browser_thread_impl.h" | 9 #include "content/browser/browser_thread_impl.h" |
10 #include "content/browser/renderer_host/backing_store.h" | 10 #include "content/browser/renderer_host/backing_store.h" |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
240 } | 240 } |
241 | 241 |
242 unsigned GestureEventLastQueueEventSize() { | 242 unsigned GestureEventLastQueueEventSize() { |
243 return gesture_event_filter_->coalesced_gesture_events_.size(); | 243 return gesture_event_filter_->coalesced_gesture_events_.size(); |
244 } | 244 } |
245 | 245 |
246 bool FlingInProgress() { | 246 bool FlingInProgress() { |
247 return gesture_event_filter_->fling_in_progress_; | 247 return gesture_event_filter_->fling_in_progress_; |
248 } | 248 } |
249 | 249 |
250 void set_maximum_tap_gap_time_ms(int delay_ms) { | |
251 gesture_event_filter_->maximum_tap_gap_time_ms_ = delay_ms; | |
252 } | |
253 | |
250 protected: | 254 protected: |
251 virtual void NotifyRendererUnresponsive() OVERRIDE { | 255 virtual void NotifyRendererUnresponsive() OVERRIDE { |
252 unresponsive_timer_fired_ = true; | 256 unresponsive_timer_fired_ = true; |
253 } | 257 } |
254 | 258 |
255 private: | 259 private: |
256 bool unresponsive_timer_fired_; | 260 bool unresponsive_timer_fired_; |
257 }; | 261 }; |
258 | 262 |
259 // MockPaintingObserver -------------------------------------------------------- | 263 // MockPaintingObserver -------------------------------------------------------- |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
802 // Simulate gesture events. | 806 // Simulate gesture events. |
803 | 807 |
804 // Sent. | 808 // Sent. |
805 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureScrollBegin); | 809 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureScrollBegin); |
806 | 810 |
807 // Enqueued. | 811 // Enqueued. |
808 SimulateGestureEvent(8, -5, 0, WebInputEvent::GestureScrollUpdate); | 812 SimulateGestureEvent(8, -5, 0, WebInputEvent::GestureScrollUpdate); |
809 | 813 |
810 // Make sure that the queue contains what we think it should. | 814 // Make sure that the queue contains what we think it should. |
811 WebGestureEvent merged_event = host_->GestureEventLastQueueEvent(); | 815 WebGestureEvent merged_event = host_->GestureEventLastQueueEvent(); |
816 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); | |
812 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, merged_event.type); | 817 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, merged_event.type); |
813 | 818 |
814 // Coalesced. | 819 // Coalesced. |
815 SimulateGestureEvent(8, -6, 0, WebInputEvent::GestureScrollUpdate); | 820 SimulateGestureEvent(8, -6, 0, WebInputEvent::GestureScrollUpdate); |
816 | 821 |
817 // Check that coalescing updated the correct values. | 822 // Check that coalescing updated the correct values. |
818 merged_event = host_->GestureEventLastQueueEvent(); | 823 merged_event = host_->GestureEventLastQueueEvent(); |
819 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, merged_event.type); | 824 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, merged_event.type); |
820 EXPECT_EQ(0, merged_event.modifiers); | 825 EXPECT_EQ(0, merged_event.modifiers); |
821 EXPECT_EQ(16, merged_event.deltaX); | 826 EXPECT_EQ(16, merged_event.deltaX); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
888 MessageLoop::current()->RunAllPending(); | 893 MessageLoop::current()->RunAllPending(); |
889 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); | 894 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
890 | 895 |
891 // GFC before previous GFS is acked. | 896 // GFC before previous GFS is acked. |
892 process_->sink().ClearMessages(); | 897 process_->sink().ClearMessages(); |
893 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart); | 898 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart); |
894 EXPECT_TRUE(host_->FlingInProgress()); | 899 EXPECT_TRUE(host_->FlingInProgress()); |
895 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); | 900 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); |
896 EXPECT_FALSE(host_->FlingInProgress()); | 901 EXPECT_FALSE(host_->FlingInProgress()); |
897 EXPECT_EQ(1U, process_->sink().message_count()); | 902 EXPECT_EQ(1U, process_->sink().message_count()); |
898 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); | 903 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); |
rjkroege
2012/08/16 15:07:15
i keep the event being handled by the renderer in
| |
899 | 904 |
900 // Advance state realistically. | 905 // Advance state realistically. |
901 SendInputEventACK(WebInputEvent::GestureFlingStart, true); | 906 SendInputEventACK(WebInputEvent::GestureFlingStart, true); |
902 MessageLoop::current()->RunAllPending(); | 907 MessageLoop::current()->RunAllPending(); |
903 SendInputEventACK(WebInputEvent::GestureFlingCancel, true); | 908 SendInputEventACK(WebInputEvent::GestureFlingCancel, true); |
904 MessageLoop::current()->RunAllPending(); | 909 MessageLoop::current()->RunAllPending(); |
905 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); | 910 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
906 | 911 |
907 // GFS is added to the queue if another event is pending | 912 // GFS is added to the queue if another event is pending |
908 process_->sink().ClearMessages(); | 913 process_->sink().ClearMessages(); |
909 SimulateGestureEvent(8, -7, 0, WebInputEvent::GestureScrollUpdate); | 914 SimulateGestureEvent(8, -7, 0, WebInputEvent::GestureScrollUpdate); |
910 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart); | 915 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart); |
916 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); | |
911 EXPECT_EQ(1U, process_->sink().message_count()); | 917 EXPECT_EQ(1U, process_->sink().message_count()); |
912 WebGestureEvent merged_event = host_->GestureEventLastQueueEvent(); | 918 WebGestureEvent merged_event = host_->GestureEventLastQueueEvent(); |
913 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); | 919 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); |
914 EXPECT_FALSE(host_->FlingInProgress()); | 920 EXPECT_TRUE(host_->FlingInProgress()); |
915 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); | 921 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); |
916 | 922 |
917 // GFS in queue means that a GFC is added to the queue | 923 // GFS in queue means that a GFC is added to the queue |
918 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); | 924 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); |
919 merged_event =host_->GestureEventLastQueueEvent(); | 925 merged_event =host_->GestureEventLastQueueEvent(); |
920 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); | 926 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); |
921 EXPECT_FALSE(host_->FlingInProgress()); | 927 EXPECT_FALSE(host_->FlingInProgress()); |
922 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); | 928 EXPECT_EQ(3U, host_->GestureEventLastQueueEventSize()); |
923 | |
924 | 929 |
925 // Adding a second GFC is dropped. | 930 // Adding a second GFC is dropped. |
926 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); | 931 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); |
927 EXPECT_FALSE(host_->FlingInProgress()); | 932 EXPECT_FALSE(host_->FlingInProgress()); |
928 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); | 933 EXPECT_EQ(3U, host_->GestureEventLastQueueEventSize()); |
929 | 934 |
930 // Adding another GFS will add it to the queue. | 935 // Adding another GFS will add it to the queue. |
931 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart); | 936 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart); |
932 merged_event = host_->GestureEventLastQueueEvent(); | 937 merged_event = host_->GestureEventLastQueueEvent(); |
933 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); | 938 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); |
934 EXPECT_FALSE(host_->FlingInProgress()); | 939 EXPECT_TRUE(host_->FlingInProgress()); |
935 EXPECT_EQ(3U, host_->GestureEventLastQueueEventSize()); | 940 EXPECT_EQ(4U, host_->GestureEventLastQueueEventSize()); |
936 | 941 |
937 // GFS in queue means that a GFC is added to the queue | 942 // GFS in queue means that a GFC is added to the queue |
938 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); | 943 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); |
939 merged_event = host_->GestureEventLastQueueEvent(); | 944 merged_event = host_->GestureEventLastQueueEvent(); |
940 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); | 945 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); |
941 EXPECT_FALSE(host_->FlingInProgress()); | 946 EXPECT_FALSE(host_->FlingInProgress()); |
942 EXPECT_EQ(4U, host_->GestureEventLastQueueEventSize()); | 947 EXPECT_EQ(5U, host_->GestureEventLastQueueEventSize()); |
943 | 948 |
944 // Adding another GFC with a GFC already there is dropped. | 949 // Adding another GFC with a GFC already there is dropped. |
945 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); | 950 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel); |
946 merged_event = host_->GestureEventLastQueueEvent(); | 951 merged_event = host_->GestureEventLastQueueEvent(); |
947 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); | 952 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type); |
948 EXPECT_FALSE(host_->FlingInProgress()); | 953 EXPECT_FALSE(host_->FlingInProgress()); |
949 EXPECT_EQ(4U, host_->GestureEventLastQueueEventSize()); | 954 EXPECT_EQ(5U, host_->GestureEventLastQueueEventSize()); |
955 } | |
956 | |
957 // Test that GestureTapDown events are deferred. | |
958 TEST_F(RenderWidgetHostTest, DeferredGestureTapDown) { | |
959 process_->sink().ClearMessages(); | |
960 | |
961 // Set some sort of short deferral timeout | |
962 host_->set_maximum_tap_gap_time_ms(5); | |
963 | |
964 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTapDown); | |
965 EXPECT_EQ(0U, process_->sink().message_count()); | |
966 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); | |
967 | |
968 // Wait long enough for first timeout and see if it fired. | |
969 MessageLoop::current()->PostDelayedTask( | |
970 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(10)); | |
971 MessageLoop::current()->Run(); | |
972 | |
973 EXPECT_EQ(1U, process_->sink().message_count()); | |
974 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); | |
975 } | |
976 | |
977 // Test that GestureTapDown events are sent immediately on GestureTap. | |
978 TEST_F(RenderWidgetHostTest, DeferredGestureTapDownSentOnTap) { | |
979 process_->sink().ClearMessages(); | |
980 | |
981 // Set some sort of short deferral timeout | |
982 host_->set_maximum_tap_gap_time_ms(5); | |
983 | |
984 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTapDown); | |
985 EXPECT_EQ(0U, process_->sink().message_count()); | |
986 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); | |
987 | |
988 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTap); | |
989 EXPECT_EQ(1U, process_->sink().message_count()); | |
990 EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); | |
991 | |
992 MessageLoop::current()->PostDelayedTask( | |
993 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(10)); | |
994 MessageLoop::current()->Run(); | |
995 | |
996 // If the deferral timer incorrectly fired, it send an extra message. | |
997 EXPECT_EQ(1U, process_->sink().message_count()); | |
998 } | |
999 | |
1000 // Test that scroll events during the deferral internal drop the GestureTapDown. | |
1001 TEST_F(RenderWidgetHostTest, DeferredGestureTapDownAnulledOnScroll) { | |
1002 process_->sink().ClearMessages(); | |
1003 | |
1004 // Set some sort of short deferral timeout | |
1005 host_->set_maximum_tap_gap_time_ms(5); | |
1006 | |
1007 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTapDown); | |
1008 EXPECT_EQ(0U, process_->sink().message_count()); | |
1009 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); | |
1010 | |
1011 SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureScrollBegin); | |
1012 EXPECT_EQ(1U, process_->sink().message_count()); | |
1013 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); | |
1014 WebGestureEvent merged_event = host_->GestureEventLastQueueEvent(); | |
1015 | |
1016 MessageLoop::current()->PostDelayedTask( | |
1017 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(10)); | |
1018 MessageLoop::current()->Run(); | |
1019 | |
1020 // If the deferral timer incorrectly fired, it will send an extra message. | |
1021 EXPECT_EQ(1U, process_->sink().message_count()); | |
950 } | 1022 } |
951 | 1023 |
952 // Test that the hang monitor timer expires properly if a new timer is started | 1024 // Test that the hang monitor timer expires properly if a new timer is started |
953 // while one is in progress (see crbug.com/11007). | 1025 // while one is in progress (see crbug.com/11007). |
954 TEST_F(RenderWidgetHostTest, DontPostponeHangMonitorTimeout) { | 1026 TEST_F(RenderWidgetHostTest, DontPostponeHangMonitorTimeout) { |
955 // Start with a short timeout. | 1027 // Start with a short timeout. |
956 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); | 1028 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
957 | 1029 |
958 // Immediately try to add a long 30 second timeout. | 1030 // Immediately try to add a long 30 second timeout. |
959 EXPECT_FALSE(host_->unresponsive_timer_fired()); | 1031 EXPECT_FALSE(host_->unresponsive_timer_fired()); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1013 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 1085 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
1014 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 1086 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
1015 SendInputEventACK(WebInputEvent::RawKeyDown, true); | 1087 SendInputEventACK(WebInputEvent::RawKeyDown, true); |
1016 | 1088 |
1017 // Wait long enough for first timeout and see if it fired. | 1089 // Wait long enough for first timeout and see if it fired. |
1018 MessageLoop::current()->PostDelayedTask( | 1090 MessageLoop::current()->PostDelayedTask( |
1019 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(40)); | 1091 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(40)); |
1020 MessageLoop::current()->Run(); | 1092 MessageLoop::current()->Run(); |
1021 EXPECT_TRUE(host_->unresponsive_timer_fired()); | 1093 EXPECT_TRUE(host_->unresponsive_timer_fired()); |
1022 } | 1094 } |
OLD | NEW |