| Index: content/browser/renderer_host/render_widget_host_view_android.cc | 
| diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc | 
| index 3a2dc883f4031ea824c2b2088f2d1ecfceae9ecb..b28169be452e881bb79568b5c802f817b5e6b691 100644 | 
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc | 
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc | 
| @@ -724,8 +724,10 @@ bool RenderWidgetHostViewAndroid::OnTouchEvent( | 
| // Send a proactive BeginFrame on the next vsync to reduce latency. | 
| // This is good enough as long as the first touch event has Begin semantics | 
| // and the actual scroll happens on the next vsync. | 
| -  if (observing_root_window_) | 
| +  if (observing_root_window_ && | 
| +      event.GetAction() != ui::MotionEvent::ACTION_CANCEL) { | 
| RequestVSyncUpdate(BEGIN_FRAME); | 
| +  } | 
|  | 
| return true; | 
| } | 
| @@ -736,7 +738,7 @@ bool RenderWidgetHostViewAndroid::OnTouchHandleEvent( | 
| selection_controller_->WillHandleTouchEvent(event); | 
| } | 
|  | 
| -void RenderWidgetHostViewAndroid::ResetGestureDetection() { | 
| +void RenderWidgetHostViewAndroid::CancelActiveTouchSequence() { | 
| const ui::MotionEvent* current_down_event = | 
| gesture_provider_.GetCurrentDownEvent(); | 
| if (!current_down_event) | 
| @@ -747,6 +749,13 @@ void RenderWidgetHostViewAndroid::ResetGestureDetection() { | 
| OnTouchEvent(*cancel_event); | 
| } | 
|  | 
| +void RenderWidgetHostViewAndroid::ResetPendingInput() { | 
| +  CancelActiveTouchSequence(); | 
| +  gesture_provider_.ResetDetection(); | 
| +  if (host_) | 
| +    host_->ResetPendingInput(); | 
| +} | 
| + | 
| void RenderWidgetHostViewAndroid::SetDoubleTapSupportEnabled(bool enabled) { | 
| gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled); | 
| } | 
|  |