Index: content/browser/renderer_host/render_widget_host_view_aura.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc |
index 8db3faeab6baa94290b84757401ad7112abd5a4d..2838534e65496f63b47b2fd70aeb1e5f51ba9f2e 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
@@ -2032,23 +2032,27 @@ void RenderWidgetHostViewAura::OnTouchEvent(ui::TouchEvent* event) { |
return; |
// Update the touch event first. |
- blink::WebTouchPoint* point = UpdateWebTouchEventFromUIEvent(*event, |
- &touch_event_); |
- |
- // Forward the touch event only if a touch point was updated, and there's a |
- // touch-event handler in the page, and no other touch-event is in the queue. |
- // It is important to always consume the event if there is a touch-event |
- // handler in the page, or some touch-event is already in the queue, even if |
- // no point has been updated, to make sure that this event does not get |
- // processed by the gesture recognizer before the events in the queue. |
- if (host_->ShouldForwardTouchEvent()) |
+ blink::WebTouchPoint* point = |
+ UpdateWebTouchEventFromUIEvent(*event, &touch_event_); |
+ |
+ if (!point) { |
event->StopPropagation(); |
+ return; |
+ } |
- if (point) { |
- if (host_->ShouldForwardTouchEvent()) |
- host_->ForwardTouchEventWithLatencyInfo(touch_event_, *event->latency()); |
- UpdateWebTouchEventAfterDispatch(&touch_event_, point); |
+ // Forward the touch event only if a touch point was updated, and |
+ // there's a touch-event handler in the page, and no other |
+ // touch-event is in the queue. It is important to always mark |
+ // events as being handled asynchronously if there is a touch-event |
+ // handler in the page, or some touch-event is already in the queue, |
+ // even if no point has been updated. This ensures that this event |
+ // does not get processed by the gesture recognizer before events |
+ // currently awaiting dispatch in the touch queue. |
+ if (host_->ShouldForwardTouchEvent()) { |
+ event->DisableSynchronousHandling(); |
+ host_->ForwardTouchEventWithLatencyInfo(touch_event_, *event->latency()); |
} |
+ UpdateWebTouchEventAfterDispatch(&touch_event_, point); |
} |
void RenderWidgetHostViewAura::OnGestureEvent(ui::GestureEvent* event) { |