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

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

Issue 1412923009: Route touch-events for WebViewGuest directly to guest renderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update comments (saving first this time). Created 5 years 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_input_event_router.h" 5 #include "content/browser/renderer_host/render_widget_host_input_event_router.h"
6 6
7 #include "cc/surfaces/surface_manager.h" 7 #include "cc/surfaces/surface_manager.h"
8 #include "content/browser/renderer_host/render_widget_host_view_base.h" 8 #include "content/browser/renderer_host/render_widget_host_view_base.h"
9 #include "third_party/WebKit/public/web/WebInputEvent.h" 9 #include "third_party/WebKit/public/web/WebInputEvent.h"
10 10
11 namespace content { 11 namespace content {
12 12
13 RenderWidgetHostInputEventRouter::RenderWidgetHostInputEventRouter() {} 13 RenderWidgetHostInputEventRouter::RenderWidgetHostInputEventRouter()
14 : current_touch_target_(nullptr), active_touches_(0) {}
14 15
15 RenderWidgetHostInputEventRouter::~RenderWidgetHostInputEventRouter() { 16 RenderWidgetHostInputEventRouter::~RenderWidgetHostInputEventRouter() {
16 owner_map_.clear(); 17 owner_map_.clear();
17 } 18 }
18 19
19 RenderWidgetHostViewBase* RenderWidgetHostInputEventRouter::FindEventTarget( 20 RenderWidgetHostViewBase* RenderWidgetHostInputEventRouter::FindEventTarget(
20 RenderWidgetHostViewBase* root_view, 21 RenderWidgetHostViewBase* root_view,
21 const gfx::Point& point, 22 const gfx::Point& point,
22 gfx::Point* transformed_point) { 23 gfx::Point* transformed_point) {
23 // Short circuit if owner_map has only one RenderWidgetHostView, no need for 24 // Short circuit if owner_map has only one RenderWidgetHostView, no need for
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 blink::WebMouseWheelEvent* event) { 61 blink::WebMouseWheelEvent* event) {
61 gfx::Point transformed_point; 62 gfx::Point transformed_point;
62 RenderWidgetHostViewBase* target = FindEventTarget( 63 RenderWidgetHostViewBase* target = FindEventTarget(
63 root_view, gfx::Point(event->x, event->y), &transformed_point); 64 root_view, gfx::Point(event->x, event->y), &transformed_point);
64 event->x = transformed_point.x(); 65 event->x = transformed_point.x();
65 event->y = transformed_point.y(); 66 event->y = transformed_point.y();
66 67
67 target->ProcessMouseWheelEvent(*event); 68 target->ProcessMouseWheelEvent(*event);
68 } 69 }
69 70
71 void RenderWidgetHostInputEventRouter::RouteTouchEvent(
72 RenderWidgetHostViewBase* root_view,
73 blink::WebTouchEvent* event,
74 const ui::LatencyInfo& latency) {
75 switch (event->type) {
76 case blink::WebInputEvent::TouchStart: {
77 if (!active_touches_) {
78 // Since this is the first touch, it defines the target for the rest
79 // of this sequence.
80 DCHECK(!current_touch_target_);
81 gfx::Point transformed_point;
82 gfx::Point original_point(event->touches[0].position.x,
83 event->touches[0].position.y);
84 current_touch_target_ =
85 FindEventTarget(root_view, original_point, &transformed_point);
86 }
87 ++active_touches_;
88 current_touch_target_->ProcessTouchEvent(*event, latency);
89 break;
90 }
91 case blink::WebInputEvent::TouchMove:
92 DCHECK(current_touch_target_);
93 current_touch_target_->ProcessTouchEvent(*event, latency);
94 break;
95 case blink::WebInputEvent::TouchEnd:
96 case blink::WebInputEvent::TouchCancel:
97 DCHECK(active_touches_);
98 DCHECK(current_touch_target_);
99 current_touch_target_->ProcessTouchEvent(*event, latency);
100 --active_touches_;
101 if (!active_touches_)
102 current_touch_target_ = nullptr;
103 break;
104 default:
105 NOTREACHED();
106 }
107 }
108
70 void RenderWidgetHostInputEventRouter::AddSurfaceIdNamespaceOwner( 109 void RenderWidgetHostInputEventRouter::AddSurfaceIdNamespaceOwner(
71 uint32_t id, 110 uint32_t id,
72 RenderWidgetHostViewBase* owner) { 111 RenderWidgetHostViewBase* owner) {
73 DCHECK(owner_map_.find(id) == owner_map_.end()); 112 DCHECK(owner_map_.find(id) == owner_map_.end());
74 owner_map_.insert(std::make_pair(id, owner)); 113 owner_map_.insert(std::make_pair(id, owner));
75 } 114 }
76 115
77 void RenderWidgetHostInputEventRouter::RemoveSurfaceIdNamespaceOwner( 116 void RenderWidgetHostInputEventRouter::RemoveSurfaceIdNamespaceOwner(
78 uint32_t id) { 117 uint32_t id) {
79 owner_map_.erase(id); 118 owner_map_.erase(id);
80 } 119 }
81 120
82 } // namespace content 121 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698