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

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

Issue 2417693002: Allow MimeHandlerViewGuest be embedded inside OOPIFs (Closed)
Patch Set: Added a comment Created 4 years, 1 month 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 <vector> 7 #include <vector>
8 8
9 #include "base/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 10
11 #include "cc/quads/surface_draw_quad.h" 11 #include "cc/quads/surface_draw_quad.h"
12 #include "cc/surfaces/surface_id_allocator.h" 12 #include "cc/surfaces/surface_id_allocator.h"
13 #include "cc/surfaces/surface_manager.h" 13 #include "cc/surfaces/surface_manager.h"
14 #include "content/browser/frame_host/render_widget_host_view_child_frame.h" 14 #include "content/browser/frame_host/render_widget_host_view_child_frame.h"
15 #include "content/browser/frame_host/render_widget_host_view_guest.h"
15 #include "content/browser/renderer_host/render_widget_host_impl.h" 16 #include "content/browser/renderer_host/render_widget_host_impl.h"
16 #include "content/browser/renderer_host/render_widget_host_view_base.h" 17 #include "content/browser/renderer_host/render_widget_host_view_base.h"
17 #include "content/common/frame_messages.h" 18 #include "content/common/frame_messages.h"
18 #include "third_party/WebKit/public/web/WebInputEvent.h" 19 #include "third_party/WebKit/public/web/WebInputEvent.h"
19 #include "ui/events/blink/web_input_event_traits.h" 20 #include "ui/events/blink/web_input_event_traits.h"
20 21
21 namespace { 22 namespace {
22 23
23 void TransformEventTouchPositions(blink::WebTouchEvent* event, 24 void TransformEventTouchPositions(blink::WebTouchEvent* event,
24 const gfx::Vector2d& delta) { 25 const gfx::Vector2d& delta) {
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 } else { 191 } else {
191 target = FindEventTarget(root_view, gfx::Point(event->x, event->y), 192 target = FindEventTarget(root_view, gfx::Point(event->x, event->y),
192 &transformed_point); 193 &transformed_point);
193 } 194 }
194 195
195 // RenderWidgetHostViewGuest does not properly handle direct routing of mouse 196 // RenderWidgetHostViewGuest does not properly handle direct routing of mouse
196 // events, so they have to go by the double-hop forwarding path through 197 // events, so they have to go by the double-hop forwarding path through
197 // the embedding renderer and then BrowserPluginGuest. 198 // the embedding renderer and then BrowserPluginGuest.
198 if (target && target->IsRenderWidgetHostViewGuest()) { 199 if (target && target->IsRenderWidgetHostViewGuest()) {
199 ui::LatencyInfo latency_info; 200 ui::LatencyInfo latency_info;
200 root_view->ProcessMouseEvent(*event, latency_info); 201 RenderWidgetHostViewBase* owner_view =
202 static_cast<RenderWidgetHostViewGuest*>(target)
203 ->GetOwnerRenderWidgetHostView();
204 // In case there is nested RenderWidgetHostViewGuests (i.e., PDF inside
205 // <webview>), we will need the owner view of the top-most guest for input
206 // routing.
207 while (owner_view->IsRenderWidgetHostViewGuest()) {
208 owner_view = static_cast<RenderWidgetHostViewGuest*>(owner_view)
209 ->GetOwnerRenderWidgetHostView();
210 }
211
212 if (owner_view != root_view) {
213 // This happens when the view is embedded inside a cross-process frame
214 // (i.e., owner view is a RenderWidgetHostViewChildFrame).
215 gfx::Point owner_point;
216 if (!root_view->TransformPointToCoordSpaceForView(
217 gfx::Point(event->x, event->y), owner_view, &owner_point)) {
218 return;
219 }
220 event->x = owner_point.x();
221 event->y = owner_point.y();
222 }
223 owner_view->ProcessMouseEvent(*event, latency_info);
201 return; 224 return;
202 } 225 }
203 226
204 if (event->type == blink::WebInputEvent::MouseDown) 227 if (event->type == blink::WebInputEvent::MouseDown)
205 mouse_capture_target_.target = target; 228 mouse_capture_target_.target = target;
206 229
207 if (!target) 230 if (!target)
208 return; 231 return;
209 232
210 // SendMouseEnterOrLeaveEvents is called with the original event 233 // SendMouseEnterOrLeaveEvents is called with the original event
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 if (!touchpad_gesture_target_.target) 771 if (!touchpad_gesture_target_.target)
749 return; 772 return;
750 773
751 // TODO(mohsen): Add tests to check event location. 774 // TODO(mohsen): Add tests to check event location.
752 event->x += touchpad_gesture_target_.delta.x(); 775 event->x += touchpad_gesture_target_.delta.x();
753 event->y += touchpad_gesture_target_.delta.y(); 776 event->y += touchpad_gesture_target_.delta.y();
754 touchpad_gesture_target_.target->ProcessGestureEvent(*event, latency); 777 touchpad_gesture_target_.target->ProcessGestureEvent(*event, latency);
755 } 778 }
756 779
757 } // namespace content 780 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698