 Chromium Code Reviews
 Chromium Code Reviews Issue 1255483004:
  Implement surface-based browser process hit testing for Mac and Aura  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 1255483004:
  Implement surface-based browser process hit testing for Mac and Aura  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| 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 | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..6772d649a88613e66fc1c780a354a3975576d984 | 
| --- /dev/null | 
| +++ b/content/browser/renderer_host/render_widget_host_input_event_router.cc | 
| @@ -0,0 +1,80 @@ | 
| +// Copyright 2015 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#include "content/browser/renderer_host/render_widget_host_input_event_router.h" | 
| + | 
| +#include "cc/surfaces/surface_manager.h" | 
| +#include "content/browser/renderer_host/render_widget_host_view_base.h" | 
| +#include "third_party/WebKit/public/web/WebInputEvent.h" | 
| + | 
| +namespace content { | 
| + | 
| +RenderWidgetHostInputEventRouter::RenderWidgetHostInputEventRouter() {} | 
| + | 
| +RenderWidgetHostInputEventRouter::~RenderWidgetHostInputEventRouter() { | 
| + owner_map_.clear(); | 
| +} | 
| + | 
| +RenderWidgetHostViewBase* RenderWidgetHostInputEventRouter::FindEventTarget( | 
| + RenderWidgetHostViewBase* root_view, | 
| + const gfx::Point& point, | 
| + gfx::Point* transformed_point) { | 
| + // Short circuit if owner_map has only one RenderWidgetHostView, no need for | 
| + // hit testing. | 
| + if (owner_map_.size() <= 1) { | 
| + *transformed_point = point; | 
| + return root_view; | 
| + } | 
| + | 
| + // The conversion of point to transform_point is done over the course of the | 
| + // hit testing, and reflect transformations that would normally be applied in | 
| + // the renderer process if the event was being routed between frames within a | 
| + // single process with only one RenderWidgetHost. | 
| + uint32_t surface_id_namespace = | 
| + root_view->SurfaceIdNamespaceAtPoint(point, transformed_point); | 
| + const SurfaceIdNamespaceOwnerMap::iterator iter = | 
| + owner_map_.find(surface_id_namespace); | 
| + DCHECK(iter != owner_map_.end()); | 
| + return iter->second; | 
| +} | 
| + | 
| +void RenderWidgetHostInputEventRouter::RouteMouseEvent( | 
| + RenderWidgetHostViewBase* root_view, | 
| + blink::WebMouseEvent* event) { | 
| + gfx::Point transformed_point; | 
| + RenderWidgetHostViewBase* target = FindEventTarget( | 
| + root_view, gfx::Point(event->x, event->y), &transformed_point); | 
| + event->x = transformed_point.x(); | 
| + event->y = transformed_point.y(); | 
| + | 
| + target->ProcessMouseEvent(*event); | 
| +} | 
| + | 
| +void RenderWidgetHostInputEventRouter::RouteMouseWheelEvent( | 
| + RenderWidgetHostViewBase* root_view, | 
| + blink::WebMouseWheelEvent* event) { | 
| + gfx::Point transformed_point; | 
| + RenderWidgetHostViewBase* target = FindEventTarget( | 
| + root_view, gfx::Point(event->x, event->y), &transformed_point); | 
| + event->x = transformed_point.x(); | 
| + event->y = transformed_point.y(); | 
| + | 
| + target->ProcessMouseWheelEvent(*event); | 
| +} | 
| + | 
| +void RenderWidgetHostInputEventRouter::AddSurfaceIdNamespaceOwner( | 
| + uint32_t id, | 
| + RenderWidgetHostViewBase* owner) { | 
| + DCHECK(owner_map_.find(id) == owner_map_.end()); | 
| + owner_map_.insert(std::make_pair(id, owner)); | 
| +} | 
| + | 
| +void RenderWidgetHostInputEventRouter::RemoveSurfaceIdNamespaceOwner( | 
| + uint32_t id) { | 
| + const SurfaceIdNamespaceOwnerMap::iterator iter = owner_map_.find(id); | 
| 
dcheng
2015/08/31 23:45:54
owner_map_.erase(id) is a shorter way to write thi
 
kenrb
2015/09/01 15:56:16
Done.
 | 
| + if (iter != owner_map_.end()) | 
| + owner_map_.erase(iter); | 
| +} | 
| + | 
| +} // namespace content |