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()); |
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 sent 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 |
| 1015 MessageLoop::current()->PostDelayedTask( |
| 1016 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(10)); |
| 1017 MessageLoop::current()->Run(); |
| 1018 |
| 1019 // If the deferral timer incorrectly fired, it will send an extra message. |
| 1020 EXPECT_EQ(1U, process_->sink().message_count()); |
950 } | 1021 } |
951 | 1022 |
952 // Test that the hang monitor timer expires properly if a new timer is started | 1023 // Test that the hang monitor timer expires properly if a new timer is started |
953 // while one is in progress (see crbug.com/11007). | 1024 // while one is in progress (see crbug.com/11007). |
954 TEST_F(RenderWidgetHostTest, DontPostponeHangMonitorTimeout) { | 1025 TEST_F(RenderWidgetHostTest, DontPostponeHangMonitorTimeout) { |
955 // Start with a short timeout. | 1026 // Start with a short timeout. |
956 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); | 1027 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
957 | 1028 |
958 // Immediately try to add a long 30 second timeout. | 1029 // Immediately try to add a long 30 second timeout. |
959 EXPECT_FALSE(host_->unresponsive_timer_fired()); | 1030 EXPECT_FALSE(host_->unresponsive_timer_fired()); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1013 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 1084 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
1014 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 1085 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
1015 SendInputEventACK(WebInputEvent::RawKeyDown, true); | 1086 SendInputEventACK(WebInputEvent::RawKeyDown, true); |
1016 | 1087 |
1017 // Wait long enough for first timeout and see if it fired. | 1088 // Wait long enough for first timeout and see if it fired. |
1018 MessageLoop::current()->PostDelayedTask( | 1089 MessageLoop::current()->PostDelayedTask( |
1019 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(40)); | 1090 FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(40)); |
1020 MessageLoop::current()->Run(); | 1091 MessageLoop::current()->Run(); |
1021 EXPECT_TRUE(host_->unresponsive_timer_fired()); | 1092 EXPECT_TRUE(host_->unresponsive_timer_fired()); |
1022 } | 1093 } |
OLD | NEW |