| 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 |