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

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: Fixed an input routing issue with nested browser plugings 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 while (owner_view->IsRenderWidgetHostViewGuest()) {
EhsanK 2016/11/15 19:54:22 We need to send all the input events to the embedd
wjmaclean 2016/11/15 20:02:39 The idea of finding the first non-RWHVG owner seem
EhsanK 2016/11/16 21:27:31 Thanks. I added a short comment just to be more cl
205 owner_view = static_cast<RenderWidgetHostViewGuest*>(owner_view)
206 ->GetOwnerRenderWidgetHostView();
207 }
208
209 if (owner_view != root_view) {
210 // This happens when the view is embedded inside a cross-process frame.
211 gfx::Point owner_point;
212 if (!root_view->TransformPointToCoordSpaceForView(
213 gfx::Point(event->x, event->y), owner_view, &owner_point)) {
214 return;
215 }
216 event->x = owner_point.x();
217 event->y = owner_point.y();
218 }
219 owner_view->ProcessMouseEvent(*event, latency_info);
201 return; 220 return;
202 } 221 }
203 222
204 if (event->type == blink::WebInputEvent::MouseDown) 223 if (event->type == blink::WebInputEvent::MouseDown)
205 mouse_capture_target_.target = target; 224 mouse_capture_target_.target = target;
206 225
207 if (!target) 226 if (!target)
208 return; 227 return;
209 228
210 // SendMouseEnterOrLeaveEvents is called with the original event 229 // 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) 767 if (!touchpad_gesture_target_.target)
749 return; 768 return;
750 769
751 // TODO(mohsen): Add tests to check event location. 770 // TODO(mohsen): Add tests to check event location.
752 event->x += touchpad_gesture_target_.delta.x(); 771 event->x += touchpad_gesture_target_.delta.x();
753 event->y += touchpad_gesture_target_.delta.y(); 772 event->y += touchpad_gesture_target_.delta.y();
754 touchpad_gesture_target_.target->ProcessGestureEvent(*event, latency); 773 touchpad_gesture_target_.target->ProcessGestureEvent(*event, latency);
755 } 774 }
756 775
757 } // namespace content 776 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/DEPS ('k') | content/public/browser/browser_plugin_guest_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698