Index: content/browser/renderer_host/input/input_router_impl_unittest.cc |
diff --git a/content/browser/renderer_host/input/input_router_impl_unittest.cc b/content/browser/renderer_host/input/input_router_impl_unittest.cc |
index 1039e70804e57d4e5e33a330186a5266641b253e..34e58a3e5232b7df341a07419a4f2d15c771c872 100644 |
--- a/content/browser/renderer_host/input/input_router_impl_unittest.cc |
+++ b/content/browser/renderer_host/input/input_router_impl_unittest.cc |
@@ -293,10 +293,10 @@ class InputRouterImplTest : public testing::Test { |
void SendInputEventACK(blink::WebInputEvent::Type type, |
InputEventAckState ack_result) { |
- scoped_ptr<IPC::Message> response( |
- new InputHostMsg_HandleInputEvent_ACK(0, type, ack_result, |
- ui::LatencyInfo())); |
- input_router_->OnMessageReceived(*response); |
+ InputHostMsg_HandleInputEvent_ACK_Params ack; |
+ ack.type = type; |
+ ack.state = ack_result; |
+ input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack)); |
} |
InputRouterImpl* input_router() const { |
@@ -1653,4 +1653,42 @@ TEST_F(InputRouterImplTest, TouchpadPinchAndScrollUpdate) { |
EXPECT_EQ(0, client_->in_flight_event_count()); |
} |
+// Test proper routing of overscroll notifications received either from |
+// event acks or from |DidOverscroll| IPC messages. |
+TEST_F(InputRouterImplTest, OverscrollDispatch) { |
+ DidOverscrollParams overscroll; |
+ overscroll.accumulated_overscroll = gfx::Vector2dF(-14, 14); |
+ overscroll.latest_overscroll_delta = gfx::Vector2dF(-7, 0); |
+ overscroll.current_fling_velocity = gfx::Vector2dF(-1, 0); |
+ |
+ input_router_->OnMessageReceived(InputHostMsg_DidOverscroll(0, overscroll)); |
+ DidOverscrollParams client_overscroll = client_->GetAndResetOverscroll(); |
+ EXPECT_EQ(overscroll.accumulated_overscroll, |
+ client_overscroll.accumulated_overscroll); |
+ EXPECT_EQ(overscroll.latest_overscroll_delta, |
+ client_overscroll.latest_overscroll_delta); |
+ EXPECT_EQ(overscroll.current_fling_velocity, |
+ client_overscroll.current_fling_velocity); |
+ |
+ DidOverscrollParams wheel_overscroll; |
+ wheel_overscroll.accumulated_overscroll = gfx::Vector2dF(7, -7); |
+ wheel_overscroll.latest_overscroll_delta = gfx::Vector2dF(3, 0); |
+ wheel_overscroll.current_fling_velocity = gfx::Vector2dF(1, 0); |
+ |
+ SimulateWheelEvent(3, 0, 0, false); |
+ InputHostMsg_HandleInputEvent_ACK_Params ack; |
+ ack.type = WebInputEvent::MouseWheel; |
+ ack.state = INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
+ ack.overscroll.reset(new DidOverscrollParams(wheel_overscroll)); |
+ input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack)); |
+ |
+ client_overscroll = client_->GetAndResetOverscroll(); |
+ EXPECT_EQ(wheel_overscroll.accumulated_overscroll, |
+ client_overscroll.accumulated_overscroll); |
+ EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, |
+ client_overscroll.latest_overscroll_delta); |
+ EXPECT_EQ(wheel_overscroll.current_fling_velocity, |
+ client_overscroll.current_fling_velocity); |
+} |
+ |
} // namespace content |