| Index: content/renderer/input/input_handler_proxy_unittest.cc
|
| diff --git a/content/renderer/input/input_handler_proxy_unittest.cc b/content/renderer/input/input_handler_proxy_unittest.cc
|
| index b880436f0d40af68d9ec73fb9ffcb783887592c7..2f0be4a7c2ca9a81678a04ef7f816788d5238804 100644
|
| --- a/content/renderer/input/input_handler_proxy_unittest.cc
|
| +++ b/content/renderer/input/input_handler_proxy_unittest.cc
|
| @@ -23,6 +23,7 @@ using blink::WebFloatPoint;
|
| using blink::WebFloatSize;
|
| using blink::WebGestureEvent;
|
| using blink::WebInputEvent;
|
| +using blink::WebKeyboardEvent;
|
| using blink::WebMouseWheelEvent;
|
| using blink::WebPoint;
|
| using blink::WebSize;
|
| @@ -1257,5 +1258,57 @@ TEST_F(InputHandlerProxyTest, MultiTouchPointHitTestPositive) {
|
| EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
|
| }
|
|
|
| +TEST_F(InputHandlerProxyTest, GestureFlingCancelledByKeyboardEvent) {
|
| + // We shouldn't send any events to the widget for this gesture.
|
| + expected_disposition_ = InputHandlerProxy::DID_HANDLE;
|
| + VERIFY_AND_RESET_MOCKS();
|
| +
|
| + EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
|
| + .WillOnce(testing::Return(cc::InputHandler::ScrollStarted));
|
| + gesture_.type = WebInputEvent::GestureScrollBegin;
|
| + gesture_.sourceDevice = WebGestureEvent::Touchscreen;
|
| + EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
|
| + EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
|
| + testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
|
| +
|
| + // Keyboard events received during a scroll should have no effect.
|
| + WebKeyboardEvent key_event;
|
| + key_event.type = WebInputEvent::KeyDown;
|
| + EXPECT_EQ(InputHandlerProxy::DID_NOT_HANDLE,
|
| + input_handler_->HandleInputEvent(key_event));
|
| + EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
|
| + testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
|
| +
|
| + // On the fling start, animation should be scheduled, but no scrolling occurs.
|
| + gesture_.type = WebInputEvent::GestureFlingStart;
|
| + WebFloatPoint fling_delta = WebFloatPoint(1000, 1000);
|
| + gesture_.data.flingStart.velocityX = fling_delta.x;
|
| + gesture_.data.flingStart.velocityY = fling_delta.y;
|
| + EXPECT_CALL(mock_input_handler_, FlingScrollBegin())
|
| + .WillOnce(testing::Return(cc::InputHandler::ScrollStarted));
|
| + EXPECT_CALL(mock_input_handler_, ScheduleAnimation());
|
| + EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
|
| + EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
|
| + testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
|
| +
|
| + // Keyboard events received during a fling should cancel the active fling.
|
| + EXPECT_CALL(mock_input_handler_, ScrollEnd());
|
| + EXPECT_EQ(InputHandlerProxy::DID_NOT_HANDLE,
|
| + input_handler_->HandleInputEvent(key_event));
|
| + EXPECT_FALSE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
|
| + testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
|
| +
|
| + // The call to animate should have no effect, as the fling was cancelled.
|
| + base::TimeTicks time = base::TimeTicks() + base::TimeDelta::FromSeconds(10);
|
| + input_handler_->Animate(time);
|
| + testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
|
| +
|
| + // A fling cancel should be dropped, as there is nothing to cancel.
|
| + gesture_.type = WebInputEvent::GestureFlingCancel;
|
| + EXPECT_EQ(InputHandlerProxy::DROP_EVENT,
|
| + input_handler_->HandleInputEvent(gesture_));
|
| + EXPECT_FALSE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
|
| +}
|
| +
|
| } // namespace
|
| } // namespace content
|
|
|