Index: content/browser/renderer_host/render_widget_host_input_event_router.cc |
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router.cc b/content/browser/renderer_host/render_widget_host_input_event_router.cc |
index 49053b9718b363351b8693fdc6ff4cc597e17f9a..449b2f6850247e2b6f54da5d8ea38b04b60b73c7 100644 |
--- a/content/browser/renderer_host/render_widget_host_input_event_router.cc |
+++ b/content/browser/renderer_host/render_widget_host_input_event_router.cc |
@@ -10,7 +10,8 @@ |
namespace content { |
-RenderWidgetHostInputEventRouter::RenderWidgetHostInputEventRouter() {} |
+RenderWidgetHostInputEventRouter::RenderWidgetHostInputEventRouter() |
+ : current_touch_target_(nullptr), active_touches_(0) {} |
RenderWidgetHostInputEventRouter::~RenderWidgetHostInputEventRouter() { |
owner_map_.clear(); |
@@ -67,6 +68,44 @@ void RenderWidgetHostInputEventRouter::RouteMouseWheelEvent( |
target->ProcessMouseWheelEvent(*event); |
} |
+void RenderWidgetHostInputEventRouter::RouteTouchEvent( |
+ RenderWidgetHostViewBase* root_view, |
+ blink::WebTouchEvent* event, |
+ const ui::LatencyInfo& latency) { |
+ switch (event->type) { |
+ case blink::WebInputEvent::TouchStart: { |
+ if (!active_touches_) { |
+ // Since this is the first touch, it defines the target for the rest |
+ // of this sequence. |
+ DCHECK(!current_touch_target_); |
+ gfx::Point transformed_point; |
+ gfx::Point original_point(event->touches[0].position.x, |
+ event->touches[0].position.y); |
+ current_touch_target_ = |
+ FindEventTarget(root_view, original_point, &transformed_point); |
+ } |
+ ++active_touches_; |
+ current_touch_target_->ProcessTouchEvent(*event, latency); |
+ break; |
+ } |
+ case blink::WebInputEvent::TouchMove: |
+ DCHECK(current_touch_target_); |
+ current_touch_target_->ProcessTouchEvent(*event, latency); |
+ break; |
+ case blink::WebInputEvent::TouchEnd: |
+ case blink::WebInputEvent::TouchCancel: |
+ DCHECK(active_touches_); |
+ DCHECK(current_touch_target_); |
+ current_touch_target_->ProcessTouchEvent(*event, latency); |
+ --active_touches_; |
+ if (!active_touches_) |
+ current_touch_target_ = nullptr; |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
+} |
+ |
void RenderWidgetHostInputEventRouter::AddSurfaceIdNamespaceOwner( |
uint32_t id, |
RenderWidgetHostViewBase* owner) { |