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 "ui/events/blink/input_handler_proxy.h" | 5 #include "ui/events/blink/input_handler_proxy.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
447 EXPECT_EQ(expected_disposition_, | 447 EXPECT_EQ(expected_disposition_, |
448 input_handler_->HandleInputEvent(gesture_)); | 448 input_handler_->HandleInputEvent(gesture_)); |
449 | 449 |
450 VERIFY_AND_RESET_MOCKS(); | 450 VERIFY_AND_RESET_MOCKS(); |
451 } | 451 } |
452 | 452 |
453 void SetSmoothScrollEnabled(bool value) { | 453 void SetSmoothScrollEnabled(bool value) { |
454 input_handler_->smooth_scroll_enabled_ = value; | 454 input_handler_->smooth_scroll_enabled_ = value; |
455 } | 455 } |
456 | 456 |
457 void SetTouchpadAndWheelScrollLatchingEnabled(bool value) { | |
458 input_handler_->touchpad_and_wheel_scroll_latching_enabled_ = value; | |
459 } | |
460 | |
457 base::HistogramTester& histogram_tester() { | 461 base::HistogramTester& histogram_tester() { |
458 return histogram_tester_; | 462 return histogram_tester_; |
459 } | 463 } |
460 | 464 |
461 protected: | 465 protected: |
462 const bool synchronous_root_scroll_; | 466 const bool synchronous_root_scroll_; |
463 const bool install_synchronous_handler_; | 467 const bool install_synchronous_handler_; |
464 testing::StrictMock<MockInputHandler> mock_input_handler_; | 468 testing::StrictMock<MockInputHandler> mock_input_handler_; |
465 testing::StrictMock<MockSynchronousInputHandler> | 469 testing::StrictMock<MockSynchronousInputHandler> |
466 mock_synchronous_input_handler_; | 470 mock_synchronous_input_handler_; |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
911 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); | 915 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); |
912 | 916 |
913 VERIFY_AND_RESET_MOCKS(); | 917 VERIFY_AND_RESET_MOCKS(); |
914 | 918 |
915 // Verify that a GestureFlingCancel during an animation cancels it. | 919 // Verify that a GestureFlingCancel during an animation cancels it. |
916 gesture_.setType(WebInputEvent::GestureFlingCancel); | 920 gesture_.setType(WebInputEvent::GestureFlingCancel); |
917 gesture_.sourceDevice = blink::WebGestureDeviceTouchpad; | 921 gesture_.sourceDevice = blink::WebGestureDeviceTouchpad; |
918 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); | 922 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); |
919 } | 923 } |
920 | 924 |
925 TEST_P(InputHandlerProxyTest, GestureFlingTouchpadScrollLatchingEnabled) { | |
926 SetTouchpadAndWheelScrollLatchingEnabled(true); | |
927 // We shouldn't send any events to the widget for this gesture. | |
928 expected_disposition_ = InputHandlerProxy::DID_HANDLE; | |
929 VERIFY_AND_RESET_MOCKS(); | |
930 | |
931 EXPECT_CALL(mock_input_handler_, ScrollBegin(::testing::_, ::testing::_)) | |
932 .WillOnce(testing::Return(kImplThreadScrollState)); | |
933 | |
934 // HandleGestureScrollBegin will set gesture_scroll_on_impl_thread_. | |
935 gesture_.setType(WebInputEvent::GestureScrollBegin); | |
936 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); | |
937 EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing()); | |
938 | |
939 VERIFY_AND_RESET_MOCKS(); | |
940 | |
941 // On the fling start, we should schedule an animation but not actually start | |
942 // scrolling. | |
943 gesture_.setType(WebInputEvent::GestureFlingStart); | |
944 WebFloatPoint fling_delta = WebFloatPoint(1000, 0); | |
945 WebPoint fling_point = WebPoint(7, 13); | |
946 WebPoint fling_global_point = WebPoint(17, 23); | |
947 // Note that for trackpad, wheel events with the Control modifier are | |
948 // special (reserved for zoom), so don't set that here. | |
949 int modifiers = WebInputEvent::ShiftKey | WebInputEvent::AltKey; | |
950 gesture_ = CreateFling(blink::WebGestureDeviceTouchpad, fling_delta, | |
951 fling_point, fling_global_point, modifiers); | |
952 EXPECT_SET_NEEDS_ANIMATE_INPUT(1); | |
953 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) | |
954 .WillOnce(testing::Return(kImplThreadScrollState)); | |
955 | |
956 // When scroll latching is enabled, ScrollEnd shouldn't get called while | |
957 // handling GestureFlingStart. | |
958 EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(0); | |
959 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_)); | |
960 | |
961 VERIFY_AND_RESET_MOCKS(); | |
962 | |
963 // The first animate call should let us pick up an animation start time, but | |
964 // we shouldn't actually move anywhere just yet. The first frame after the | |
965 // fling start will typically include the last scroll from the gesture that | |
966 // lead to the scroll (either wheel or gesture scroll), so there should be no | |
967 // visible hitch. | |
968 EXPECT_SET_NEEDS_ANIMATE_INPUT(1); | |
969 EXPECT_CALL(mock_input_handler_, | |
970 GetEventListenerProperties(cc::EventListenerClass::kMouseWheel)) | |
bokan
2017/01/10 18:53:59
I don't think we need this check. It seems to be o
sahel
2017/01/10 21:10:06
Done.
| |
971 .Times(0); | |
972 base::TimeTicks time = base::TimeTicks() + base::TimeDelta::FromSeconds(10); | |
973 Animate(time); | |
974 | |
975 VERIFY_AND_RESET_MOCKS(); | |
976 | |
977 // The second call should start scrolling in the -X direction. | |
978 EXPECT_SET_NEEDS_ANIMATE_INPUT(1); | |
979 EXPECT_CALL(mock_input_handler_, | |
980 GetEventListenerProperties(cc::EventListenerClass::kMouseWheel)) | |
981 .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); | |
bokan
2017/01/10 18:53:58
Also don't need this, I think. The ScrollBy below
sahel
2017/01/10 21:10:06
I wanted to show that while ScrollBy in FlingScrol
bokan
2017/01/10 21:25:06
I guess I'm confused, how does GetEventListenerPro
sahel
2017/01/12 18:53:44
I want to check whether FlingScrollByMouseWheel is
| |
982 | |
983 // When scroll latching is enabled, ScrollBegin shouldn't get called for | |
984 // every tick. | |
985 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) | |
986 .Times(0); | |
987 EXPECT_CALL( | |
988 mock_input_handler_, | |
989 ScrollBy(testing::Property(&cc::ScrollState::delta_x, testing::Lt(0)))) | |
990 .WillOnce(testing::Return(scroll_result_did_scroll_)); | |
991 // When scroll latching is enabled, ScrollEnd shouldn't get called for every | |
992 // tick. | |
993 EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(0); | |
994 time += base::TimeDelta::FromMilliseconds(100); | |
995 Animate(time); | |
996 | |
997 VERIFY_AND_RESET_MOCKS(); | |
998 | |
999 // The last call should stop scrolling. | |
1000 EXPECT_CALL(mock_input_handler_, | |
1001 GetEventListenerProperties(cc::EventListenerClass::kMouseWheel)) | |
1002 .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); | |
1003 | |
1004 // When scroll latching is enabled, ScrollBegin shouldn't get called for | |
1005 // every tick. | |
1006 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) | |
1007 .Times(0); | |
1008 EXPECT_CALL( | |
1009 mock_input_handler_, | |
1010 ScrollBy(testing::Property(&cc::ScrollState::delta_x, testing::Lt(0)))) | |
1011 .WillOnce(testing::Return(scroll_result_did_not_scroll_)); | |
1012 // When scroll latching is enabled, ScrollEnd gets called when the last | |
1013 // ScrollBy did not scroll. | |
1014 EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)); | |
1015 time += base::TimeDelta::FromMilliseconds(100); | |
1016 Animate(time); | |
1017 | |
1018 VERIFY_AND_RESET_MOCKS(); | |
1019 | |
1020 // No more ticks. | |
1021 EXPECT_CALL(mock_input_handler_, | |
bokan
2017/01/10 18:53:59
I don't think you need this. All we do form here i
sahel
2017/01/10 21:10:06
When latching is enabled, ScrollEnd is called in F
bokan
2017/01/10 21:25:06
But you don't call Animate after it...
sahel
2017/01/12 18:53:44
I didn't know the behavior of VERIFY_AND_RESET_MOC
| |
1022 GetEventListenerProperties(cc::EventListenerClass::kMouseWheel)) | |
1023 .Times(0); | |
1024 } | |
1025 | |
921 TEST_P(InputHandlerProxyTest, GestureFlingOnMainThreadTouchpad) { | 1026 TEST_P(InputHandlerProxyTest, GestureFlingOnMainThreadTouchpad) { |
922 // We should send all events to the widget for this gesture. | 1027 // We should send all events to the widget for this gesture. |
923 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE; | 1028 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE; |
924 VERIFY_AND_RESET_MOCKS(); | 1029 VERIFY_AND_RESET_MOCKS(); |
925 | 1030 |
926 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) | 1031 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) |
927 .WillOnce(testing::Return(kMainThreadScrollState)); | 1032 .WillOnce(testing::Return(kMainThreadScrollState)); |
928 | 1033 |
929 gesture_.setType(WebInputEvent::GestureFlingStart); | 1034 gesture_.setType(WebInputEvent::GestureFlingStart); |
930 gesture_.sourceDevice = blink::WebGestureDeviceTouchpad; | 1035 gesture_.sourceDevice = blink::WebGestureDeviceTouchpad; |
(...skipping 2201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3132 EXPECT_EQ(WebInputEvent::GesturePinchEnd, event_queue()[6]->event().type); | 3237 EXPECT_EQ(WebInputEvent::GesturePinchEnd, event_queue()[6]->event().type); |
3133 testing::Mock::VerifyAndClearExpectations(&mock_input_handler_); | 3238 testing::Mock::VerifyAndClearExpectations(&mock_input_handler_); |
3134 } | 3239 } |
3135 | 3240 |
3136 INSTANTIATE_TEST_CASE_P(AnimateInput, | 3241 INSTANTIATE_TEST_CASE_P(AnimateInput, |
3137 InputHandlerProxyTest, | 3242 InputHandlerProxyTest, |
3138 testing::ValuesIn(test_types)); | 3243 testing::ValuesIn(test_types)); |
3139 | 3244 |
3140 } // namespace test | 3245 } // namespace test |
3141 } // namespace ui | 3246 } // namespace ui |
OLD | NEW |