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 7aa5b21148e40076aca06e7c744b7e898179770e..17abb252d92c7562124ec8045e335e6c7e332e3d 100644 |
--- a/content/browser/frame_host/render_widget_host_view_guest.cc |
+++ b/content/browser/frame_host/render_widget_host_view_guest.cc |
@@ -86,6 +86,12 @@ void RenderWidgetHostViewGuest::WasShown() { |
// |guest_| is NULL during test. |
if ((guest_ && guest_->is_in_destruction()) || !host_->is_hidden()) |
return; |
+ // Make sure the size of this view matches the size of the WebContentsView. |
+ // The two sizes may fall out of sync if we switch RenderWidgetHostViews, |
+ // resize, and then switch page, as is the case with interstitial pages. |
+ // NOTE: |guest_| is NULL in unit tests. |
+ if (guest_) |
+ SetSize(guest_->web_contents()->GetViewBounds().size()); |
host_->WasShown(ui::LatencyInfo()); |
} |
@@ -105,6 +111,20 @@ void RenderWidgetHostViewGuest::SetBounds(const gfx::Rect& rect) { |
SetSize(rect.size()); |
} |
+void RenderWidgetHostViewGuest::Focus() { |
+ // InterstitialPageImpl focuses views directly, so we place focus logic here. |
+ // InterstitialPages are not WebContents, and so BrowserPluginGuest does not |
+ // have direct access to the interstitial page's RenderWidgetHost. |
+ if (guest_) |
+ guest_->SetFocus(host_, true); |
+} |
+ |
+bool RenderWidgetHostViewGuest::HasFocus() const { |
+ if (!guest_) |
+ return false; |
+ return guest_->focused(); |
+} |
+ |
#if defined(USE_AURA) |
void RenderWidgetHostViewGuest::ProcessAckedTouchEvent( |
const TouchEventWithLatencyInfo& touch, InputEventAckState ack_result) { |
@@ -266,7 +286,16 @@ void RenderWidgetHostViewGuest::MovePluginWindows( |
} |
void RenderWidgetHostViewGuest::UpdateCursor(const WebCursor& cursor) { |
- platform_view_->UpdateCursor(cursor); |
+ // InterstitialPages are not WebContents so we cannot intercept |
+ // ViewHostMsg_SetCursor for interstitial pages in BrowserPluginGuest. |
+ // All guest RenderViewHosts have RenderWidgetHostViewGuests however, |
+ // and so we will always hit this code path. |
+ if (!guest_) |
+ return; |
+ guest_->SendMessageToEmbedder( |
+ new BrowserPluginMsg_SetCursor(guest_->browser_plugin_instance_id(), |
+ cursor)); |
+ |
} |
void RenderWidgetHostViewGuest::SetIsLoading(bool is_loading) { |
@@ -563,8 +592,7 @@ void RenderWidgetHostViewGuest::OnHandleInputEvent( |
if (blink::WebInputEvent::isKeyboardEventType(event->type)) { |
if (!embedder->GetLastKeyboardEvent()) |
return; |
- NativeWebKeyboardEvent keyboard_event( |
- *embedder->GetLastKeyboardEvent()); |
+ NativeWebKeyboardEvent keyboard_event(*embedder->GetLastKeyboardEvent()); |
host_->ForwardKeyboardEvent(keyboard_event); |
return; |
} |