Index: content/browser/frame_host/render_widget_host_view_guest.cc |
diff --git a/content/browser/frame_host/render_widget_host_view_guest.cc b/content/browser/frame_host/render_widget_host_view_guest.cc |
index 024e48fa30720e3dec7487dd905732f54191ef88..8d67695655346be4e3ba2bfd93266e3dcd5daab6 100644 |
--- a/content/browser/frame_host/render_widget_host_view_guest.cc |
+++ b/content/browser/frame_host/render_widget_host_view_guest.cc |
@@ -63,6 +63,19 @@ RenderWidgetHostViewGuest::~RenderWidgetHostViewGuest() { |
#endif // defined(USE_AURA) |
} |
+bool RenderWidgetHostViewGuest::OnMessageReceivedFromEmbedder( |
+ const IPC::Message& message, |
+ WebContents* embedder_web_contents) { |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(RenderWidgetHostViewGuest, message, |
+ embedder_web_contents) |
+ IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_HandleInputEvent, |
+ OnHandleInputEvent) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP() |
+ return handled; |
+} |
+ |
void RenderWidgetHostViewGuest::WasShown() { |
// If the WebContents associated with us showed an interstitial page in the |
// beginning, the teardown path might call WasShown() while |host_| is in |
@@ -530,4 +543,46 @@ RenderWidgetHostViewGuest::GetGuestRenderWidgetHostView() const { |
guest_->GetEmbedderRenderWidgetHostView()); |
} |
+void RenderWidgetHostViewGuest::OnHandleInputEvent( |
+ WebContents* embedder_web_contents, |
+ int browser_plugin_instance_id, |
+ const gfx::Rect& guest_window_rect, |
+ const blink::WebInputEvent* event) { |
+ if (blink::WebInputEvent::isMouseEventType(event->type)) { |
+ host_->ForwardMouseEvent( |
+ *static_cast<const blink::WebMouseEvent*>(event)); |
+ return; |
+ } |
+ |
+ if (event->type == blink::WebInputEvent::MouseWheel) { |
+ host_->ForwardWheelEvent( |
+ *static_cast<const blink::WebMouseWheelEvent*>(event)); |
+ return; |
+ } |
+ |
+ if (blink::WebInputEvent::isKeyboardEventType(event->type)) { |
+ RenderViewHostImpl* embedder_rvh = static_cast<RenderViewHostImpl*>( |
+ embedder_web_contents->GetRenderViewHost()); |
+ if (!embedder_rvh->GetLastKeyboardEvent()) |
+ return; |
+ NativeWebKeyboardEvent keyboard_event( |
+ *embedder_rvh->GetLastKeyboardEvent()); |
+ host_->ForwardKeyboardEvent(keyboard_event); |
+ return; |
+ } |
+ |
+ if (blink::WebInputEvent::isTouchEventType(event->type)) { |
+ host_->ForwardTouchEventWithLatencyInfo( |
+ *static_cast<const blink::WebTouchEvent*>(event), |
+ ui::LatencyInfo()); |
+ return; |
+ } |
+ |
+ if (blink::WebInputEvent::isGestureEventType(event->type)) { |
+ host_->ForwardGestureEvent( |
+ *static_cast<const blink::WebGestureEvent*>(event)); |
+ return; |
+ } |
+} |
+ |
} // namespace content |