| Index: content/browser/browser_plugin/browser_plugin_guest.cc
|
| diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
|
| index ceeaaa3d6b90ff861df6a592b0df611fa1827b88..c4b5d55946e051c4facaae45dfc6434a2ea7adab 100644
|
| --- a/content/browser/browser_plugin/browser_plugin_guest.cc
|
| +++ b/content/browser/browser_plugin/browser_plugin_guest.cc
|
| @@ -105,16 +105,19 @@ BrowserPluginGuest::BrowserPluginGuest(bool has_render_view,
|
| seen_embedder_drag_source_ended_at_(false),
|
| ignore_dragged_url_(true),
|
| delegate_(delegate),
|
| + is_mime_handler_view_guest_(false),
|
| weak_ptr_factory_(this) {
|
| DCHECK(web_contents);
|
| DCHECK(delegate);
|
| RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.Create"));
|
| web_contents->SetBrowserPluginGuest(this);
|
| delegate->SetGuestHost(this);
|
| + is_mime_handler_view_guest_ = delegate->IsMimeHandlerViewGuest();
|
| }
|
|
|
| int BrowserPluginGuest::GetGuestProxyRoutingID() {
|
| - if (BrowserPluginGuestMode::UseCrossProcessFramesForGuests()) {
|
| + if (BrowserPluginGuestMode::UseCrossProcessFramesForGuests() &&
|
| + !IsMimeHandlerViewGuest()) {
|
| // We don't use the proxy to send postMessage in --site-per-process, since
|
| // we use the contentWindow directly from the frame element instead.
|
| return MSG_ROUTING_NONE;
|
| @@ -290,7 +293,8 @@ void BrowserPluginGuest::InitInternal(
|
|
|
| if (owner_web_contents_ != owner_web_contents) {
|
| WebContentsViewGuest* new_view = nullptr;
|
| - if (!BrowserPluginGuestMode::UseCrossProcessFramesForGuests()) {
|
| + if (!BrowserPluginGuestMode::UseCrossProcessFramesForGuests() ||
|
| + IsMimeHandlerViewGuest()) {
|
| new_view =
|
| static_cast<WebContentsViewGuest*>(GetWebContents()->GetView());
|
| }
|
| @@ -373,6 +377,12 @@ RenderWidgetHostView* BrowserPluginGuest::GetOwnerRenderWidgetHostView() {
|
| return owner_web_contents_->GetRenderWidgetHostView();
|
| }
|
|
|
| +RenderWidgetHostView* BrowserPluginGuest::GetTopLevelRenderWidgetHostView() {
|
| + if (!owner_web_contents_)
|
| + return nullptr;
|
| + return owner_web_contents_->GetTopLevelRenderWidgetHostView();
|
| +}
|
| +
|
| void BrowserPluginGuest::UpdateVisibility() {
|
| OnSetVisibility(browser_plugin_instance_id(), visible());
|
| }
|
| @@ -470,6 +480,10 @@ void BrowserPluginGuest::ResendEventToEmbedder(
|
| }
|
| }
|
|
|
| +bool BrowserPluginGuest::IsMimeHandlerViewGuest() const {
|
| + return is_mime_handler_view_guest_;
|
| +}
|
| +
|
| WebContentsImpl* BrowserPluginGuest::GetWebContents() const {
|
| return static_cast<WebContentsImpl*>(web_contents());
|
| }
|
| @@ -677,7 +691,8 @@ bool BrowserPluginGuest::OnMessageReceived(const IPC::Message& message) {
|
| // TODO(lazyboy): Fix this as part of http://crbug.com/330264. The required
|
| // parts of code from this class should be extracted to a separate class for
|
| // --site-per-process.
|
| - if (BrowserPluginGuestMode::UseCrossProcessFramesForGuests()) {
|
| + if (BrowserPluginGuestMode::UseCrossProcessFramesForGuests() &&
|
| + !IsMimeHandlerViewGuest()) {
|
| return false;
|
| }
|
|
|
| @@ -927,7 +942,8 @@ void BrowserPluginGuest::OnSetEditCommandsForNextKeyEvent(
|
| void BrowserPluginGuest::OnSetVisibility(int browser_plugin_instance_id,
|
| bool visible) {
|
| // For OOPIF-<webivew>, the remote frame will handle visibility state.
|
| - if (BrowserPluginGuestMode::UseCrossProcessFramesForGuests())
|
| + if (BrowserPluginGuestMode::UseCrossProcessFramesForGuests() &&
|
| + !IsMimeHandlerViewGuest())
|
| return;
|
|
|
| guest_visible_ = visible;
|
|
|