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