Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(663)

Side by Side Diff: content/browser/renderer_host/render_widget_host_input_event_router.cc

Issue 1255483004: Implement surface-based browser process hit testing for Mac and Aura (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added missing test file Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/renderer_host/render_widget_host_input_event_router.h"
6
7 #include "cc/surfaces/surface_manager.h"
8 #include "content/browser/renderer_host/render_widget_host_view_base.h"
9 #include "third_party/WebKit/public/web/WebInputEvent.h"
10
11 namespace content {
12
13 RenderWidgetHostInputEventRouter::RenderWidgetHostInputEventRouter() {}
14
15 RenderWidgetHostInputEventRouter::~RenderWidgetHostInputEventRouter() {
16 owner_map_.clear();
17 }
18
19 RenderWidgetHostViewBase* RenderWidgetHostInputEventRouter::FindEventTarget(
20 RenderWidgetHostViewBase* root_view,
21 const gfx::Point& point,
22 gfx::Point* transformed_point) {
23 // Short circuit if owner_map has only one RenderWidgetHostView, no need for
24 // hit testing.
25 if (owner_map_.size() <= 1) {
26 *transformed_point = point;
27 return root_view;
28 }
29
30 // The conversion of point to transform_point is done over the course of the
31 // hit testing, and reflect transformations that would normally be applied in
32 // the renderer process if the event was being routed between frames within a
33 // single process with only one RenderWidgetHost.
34 uint32_t surface_id_namespace =
35 root_view->SurfaceIdNamespaceAtPoint(point, transformed_point);
36 const SurfaceIdNamespaceOwnerMap::iterator iter =
37 owner_map_.find(surface_id_namespace);
38 DCHECK(iter != owner_map_.end());
39 return iter->second;
40 }
41
42 void RenderWidgetHostInputEventRouter::RouteMouseEvent(
43 RenderWidgetHostViewBase* root_view,
44 blink::WebMouseEvent* event) {
45 gfx::Point transformed_point;
46 RenderWidgetHostViewBase* target = FindEventTarget(
47 root_view, gfx::Point(event->x, event->y), &transformed_point);
48 event->x = transformed_point.x();
49 event->y = transformed_point.y();
50
51 target->ProcessMouseEvent(*event);
52 }
53
54 void RenderWidgetHostInputEventRouter::RouteMouseWheelEvent(
55 RenderWidgetHostViewBase* root_view,
56 blink::WebMouseWheelEvent* event) {
57 gfx::Point transformed_point;
58 RenderWidgetHostViewBase* target = FindEventTarget(
59 root_view, gfx::Point(event->x, event->y), &transformed_point);
60 event->x = transformed_point.x();
61 event->y = transformed_point.y();
62
63 target->ProcessMouseWheelEvent(*event);
64 }
65
66 void RenderWidgetHostInputEventRouter::AddSurfaceIdNamespaceOwner(
67 uint32_t id,
68 RenderWidgetHostViewBase* owner) {
69 DCHECK(owner_map_.find(id) == owner_map_.end());
70 owner_map_.insert(std::make_pair(id, owner));
71 }
72
73 void RenderWidgetHostInputEventRouter::RemoveSurfaceIdNamespaceOwner(
74 uint32_t id) {
75 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.
76 if (iter != owner_map_.end())
77 owner_map_.erase(iter);
78 }
79
80 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698