| Index: content/browser/renderer_host/render_widget_host_input_event_router.h | 
| diff --git a/content/browser/renderer_host/render_widget_host_input_event_router.h b/content/browser/renderer_host/render_widget_host_input_event_router.h | 
| index 5aba015645eed2f04eca6f882ef230c334c50493..b4123539c5831f6b124b6ba3e4bd72beb34c6dce 100644 | 
| --- a/content/browser/renderer_host/render_widget_host_input_event_router.h | 
| +++ b/content/browser/renderer_host/render_widget_host_input_event_router.h | 
| @@ -6,9 +6,12 @@ | 
| #define CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_INPUT_EVENT_ROUTER_H_ | 
|  | 
| #include <stdint.h> | 
| + | 
| +#include <deque> | 
| #include <unordered_map> | 
|  | 
| #include "base/containers/hash_tables.h" | 
| +#include "base/gtest_prod_util.h" | 
| #include "base/macros.h" | 
| #include "cc/surfaces/surface_hittest_delegate.h" | 
| #include "cc/surfaces/surface_id.h" | 
| @@ -19,6 +22,7 @@ | 
| struct FrameHostMsg_HittestData_Params; | 
|  | 
| namespace blink { | 
| +class WebGestureEvent; | 
| class WebMouseEvent; | 
| class WebMouseWheelEvent; | 
| class WebTouchEvent; | 
| @@ -55,6 +59,9 @@ class CONTENT_EXPORT RenderWidgetHostInputEventRouter | 
| blink::WebMouseEvent* event); | 
| void RouteMouseWheelEvent(RenderWidgetHostViewBase* root_view, | 
| blink::WebMouseWheelEvent* event); | 
| +  void RouteGestureEvent(RenderWidgetHostViewBase* root_view, | 
| +                         blink::WebGestureEvent* event, | 
| +                         const ui::LatencyInfo& latency); | 
| void RouteTouchEvent(RenderWidgetHostViewBase* root_view, | 
| blink::WebTouchEvent *event, | 
| const ui::LatencyInfo& latency); | 
| @@ -89,6 +96,14 @@ class CONTENT_EXPORT RenderWidgetHostInputEventRouter | 
|  | 
| using SurfaceIdNamespaceOwnerMap = | 
| base::hash_map<uint32_t, RenderWidgetHostViewBase*>; | 
| +  struct GestureTargetData { | 
| +    RenderWidgetHostViewBase* target; | 
| +    const gfx::Vector2d delta; | 
| + | 
| +    GestureTargetData(RenderWidgetHostViewBase* target, gfx::Vector2d delta) | 
| +        : target(target), delta(delta) {} | 
| +  }; | 
| +  using GestureTargetQueue = std::deque<GestureTargetData>; | 
|  | 
| void ClearAllObserverRegistrations(); | 
|  | 
| @@ -97,13 +112,18 @@ class CONTENT_EXPORT RenderWidgetHostInputEventRouter | 
| gfx::Point* transformed_point); | 
|  | 
| SurfaceIdNamespaceOwnerMap owner_map_; | 
| -  RenderWidgetHostViewBase* current_touch_target_; | 
| +  GestureTargetQueue gesture_target_queue_; | 
| +  RenderWidgetHostViewBase* touch_target_; | 
| +  RenderWidgetHostViewBase* gesture_target_; | 
| gfx::Vector2d touch_delta_; | 
| +  gfx::Vector2d gesture_delta_; | 
| int active_touches_; | 
| std::unordered_map<cc::SurfaceId, HittestData, cc::SurfaceIdHash> | 
| hittest_data_; | 
|  | 
| DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostInputEventRouter); | 
| +  FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest, | 
| +                           InputEventRouterGestureTargetQueueTest); | 
| }; | 
|  | 
| }  // namespace content | 
|  |