| Index: content/browser/renderer_host/render_widget_host_impl.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
|
| index a4b3eda71ad9ff4919d3ab0323a72b21cc5cc29e..cd864dda7e11491949b481a52fe86820706c5355 100644
|
| --- a/content/browser/renderer_host/render_widget_host_impl.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_impl.cc
|
| @@ -138,6 +138,30 @@ class RenderWidgetHostIteratorImpl : public RenderWidgetHostIterator {
|
| DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostIteratorImpl);
|
| };
|
|
|
| +inline blink::WebGestureEvent CreateScrollBeginForWrapping(
|
| + const blink::WebGestureEvent& gesture_event) {
|
| + DCHECK(gesture_event.type == blink::WebInputEvent::GestureScrollUpdate);
|
| +
|
| + blink::WebGestureEvent wrap_gesture_scroll_begin;
|
| + wrap_gesture_scroll_begin.type = blink::WebInputEvent::GestureScrollBegin;
|
| + wrap_gesture_scroll_begin.data.scrollBegin.deltaXHint = 0;
|
| + wrap_gesture_scroll_begin.data.scrollBegin.deltaYHint = 0;
|
| + wrap_gesture_scroll_begin.resendingPluginId = gesture_event.resendingPluginId;
|
| +
|
| + return wrap_gesture_scroll_begin;
|
| +}
|
| +
|
| +inline blink::WebGestureEvent CreateScrollEndForWrapping(
|
| + const blink::WebGestureEvent& gesture_event) {
|
| + DCHECK(gesture_event.type == blink::WebInputEvent::GestureScrollUpdate);
|
| +
|
| + blink::WebGestureEvent wrap_gesture_scroll_end;
|
| + wrap_gesture_scroll_end.type = blink::WebInputEvent::GestureScrollEnd;
|
| + wrap_gesture_scroll_end.resendingPluginId = gesture_event.resendingPluginId;
|
| +
|
| + return wrap_gesture_scroll_end;
|
| +}
|
| +
|
| } // namespace
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -177,6 +201,7 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
|
| pending_mouse_lock_request_(false),
|
| allow_privileged_mouse_lock_(false),
|
| has_touch_handler_(false),
|
| + is_in_gesture_scroll_(false),
|
| next_browser_snapshot_id_(1),
|
| owned_by_render_frame_host_(false),
|
| is_focused_(false),
|
| @@ -998,12 +1023,38 @@ void RenderWidgetHostImpl::ForwardGestureEventWithLatencyInfo(
|
| if (IgnoreInputEvents())
|
| return;
|
|
|
| + // TODO(wjmaclean) Remove the code for supporting resending gesture events
|
| + // when WebView transitions to OOPIF and BrowserPlugin is removed.
|
| + // http://crbug.com/533069
|
| + if (gesture_event.type == blink::WebInputEvent::GestureScrollBegin) {
|
| + DCHECK(!is_in_gesture_scroll_);
|
| + is_in_gesture_scroll_ = true;
|
| + } else if (gesture_event.type == blink::WebInputEvent::GestureScrollEnd ||
|
| + gesture_event.type == blink::WebInputEvent::GestureFlingStart) {
|
| + DCHECK(is_in_gesture_scroll_);
|
| + is_in_gesture_scroll_ = false;
|
| + }
|
| +
|
| + bool scroll_update_needs_wrapping =
|
| + gesture_event.type == blink::WebInputEvent::GestureScrollUpdate &&
|
| + gesture_event.resendingPluginId != -1 && !is_in_gesture_scroll_;
|
| +
|
| + if (scroll_update_needs_wrapping) {
|
| + ForwardGestureEventWithLatencyInfo(
|
| + CreateScrollBeginForWrapping(gesture_event), ui::LatencyInfo());
|
| + }
|
| +
|
| if (delegate_->PreHandleGestureEvent(gesture_event))
|
| return;
|
|
|
| GestureEventWithLatencyInfo gesture_with_latency(gesture_event, ui_latency);
|
| latency_tracker_.OnInputEvent(gesture_event, &gesture_with_latency.latency);
|
| input_router_->SendGestureEvent(gesture_with_latency);
|
| +
|
| + if (scroll_update_needs_wrapping) {
|
| + ForwardGestureEventWithLatencyInfo(
|
| + CreateScrollEndForWrapping(gesture_event), ui::LatencyInfo());
|
| + }
|
| }
|
|
|
| void RenderWidgetHostImpl::ForwardEmulatedTouchEvent(
|
|
|