| 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..6f677a7a57165d0b780715ccb380804165b66a1a 100644
|
| --- a/content/renderer/input/input_handler_proxy_unittest.cc
|
| +++ b/content/renderer/input/input_handler_proxy_unittest.cc
|
| @@ -1257,5 +1257,73 @@ TEST_F(InputHandlerProxyTest, MultiTouchPointHitTestPositive) {
|
| EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
|
| }
|
|
|
| +TEST_F(InputHandlerProxyTest, GestureFlingWithNegativeTimeDelta) {
|
| + // 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_));
|
| +
|
| + VERIFY_AND_RESET_MOCKS();
|
| +
|
| + // On the fling start, we should schedule an animation but not actually start
|
| + // scrolling.
|
| + base::TimeDelta startTimeOffset = base::TimeDelta::FromMilliseconds(10);
|
| + gesture_.type = WebInputEvent::GestureFlingStart;
|
| + WebFloatPoint fling_delta = WebFloatPoint(1000, 0);
|
| + WebPoint fling_point = WebPoint(7, 13);
|
| + WebPoint fling_global_point = WebPoint(17, 23);
|
| + int modifiers = WebInputEvent::ControlKey;
|
| + gesture_.timeStampSeconds = startTimeOffset.InSecondsF();
|
| + gesture_.data.flingStart.velocityX = fling_delta.x;
|
| + gesture_.data.flingStart.velocityY = fling_delta.y;
|
| + gesture_.sourceDevice = WebGestureEvent::Touchscreen;
|
| + gesture_.x = fling_point.x;
|
| + gesture_.y = fling_point.y;
|
| + gesture_.globalX = fling_global_point.x;
|
| + gesture_.globalY = fling_global_point.y;
|
| + gesture_.modifiers = modifiers;
|
| + EXPECT_CALL(mock_input_handler_, ScheduleAnimation());
|
| + EXPECT_CALL(mock_input_handler_, FlingScrollBegin())
|
| + .WillOnce(testing::Return(cc::InputHandler::ScrollStarted));
|
| + EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
|
| +
|
| + testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
|
| +
|
| + // If we get a negative time delta, that is, the Animation tick time happens
|
| + // before the fling's start time then we should *not* try scrolling and
|
| + // instead reset the fling start time.
|
| + EXPECT_CALL(mock_input_handler_, ScheduleAnimation());
|
| + EXPECT_CALL(mock_input_handler_,
|
| + ScrollBy(testing::_,
|
| + testing::_)).Times(0);
|
| + base::TimeTicks time =
|
| + base::TimeTicks() + base::TimeDelta::FromMilliseconds(8);
|
| + input_handler_->Animate(time);
|
| +
|
| + testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
|
| +
|
| + // The first call should have reset the start time so subsequent calls should
|
| + // generate scroll events.
|
| + EXPECT_CALL(mock_input_handler_, ScheduleAnimation());
|
| + EXPECT_CALL(mock_input_handler_,
|
| + ScrollBy(testing::_,
|
| + testing::Property(&gfx::Vector2dF::x, testing::Lt(0))))
|
| + .WillOnce(testing::Return(true));
|
| +
|
| + input_handler_->Animate(time + base::TimeDelta::FromMilliseconds(1));
|
| +
|
| + testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
|
| +
|
| + EXPECT_CALL(mock_input_handler_, ScrollEnd());
|
| + gesture_.type = WebInputEvent::GestureFlingCancel;
|
| + EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
|
| +}
|
| +
|
| } // namespace
|
| } // namespace content
|
|
|