Commit d7360fa5 authored by Dave Tapuska's avatar Dave Tapuska Committed by Chromium LUCI CQ

Remove MimeHandlerViewContainer, ExtensionGuestViewContainer.

ChromeExtensionsRendererClient::CreateBrowserPluginDelegate is not
called. This method has the only ctors for ExtensionGuestViewContainer
and MimeHandlerViewContainer classes, so those classes can be deleted.

GuestViewMsg_GuestAttached and ExtensionsGuestViewHostMsg_ResizeGuest
are IPC messages that are only sent/received by those classes so those
messages can also be removed.

BUG=533069

Change-Id: Ie904cfdd01db9980a4286be6a79e94e2eb83374f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2635797
Commit-Queue: Dave Tapuska <dtapuska@chromium.org>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Reviewed-by: default avatarKevin McNee <mcnee@chromium.org>
Cr-Commit-Position: refs/heads/master@{#846190}
parent 47af09d1
......@@ -37,9 +37,7 @@
#include "extensions/renderer/extension_frame_helper.h"
#include "extensions/renderer/extensions_render_frame_observer.h"
#include "extensions/renderer/extensions_renderer_client.h"
#include "extensions/renderer/guest_view/extensions_guest_view_container.h"
#include "extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.h"
#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h"
#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.h"
#include "extensions/renderer/renderer_extension_registry.h"
#include "extensions/renderer/script_context.h"
......@@ -310,19 +308,6 @@ ChromeExtensionsRendererClient::GetExtensionDispatcherForTest() {
return extension_dispatcher();
}
// static
guest_view::GuestViewContainer*
ChromeExtensionsRendererClient::CreateBrowserPluginDelegate(
content::RenderFrame* render_frame,
const content::WebPluginInfo& info,
const std::string& mime_type,
const GURL& original_url) {
if (mime_type == content::kBrowserPluginMimeType)
return new extensions::ExtensionsGuestViewContainer(render_frame);
return new extensions::MimeHandlerViewContainer(render_frame, info, mime_type,
original_url);
}
// static
void ChromeExtensionsRendererClient::DidBlockMimeHandlerViewForDisallowedPlugin(
const blink::WebElement& plugin_element) {
......
......@@ -29,10 +29,6 @@ class RenderFrame;
struct WebPluginInfo;
}
namespace guest_view {
class GuestViewContainer;
}
namespace extensions {
class Dispatcher;
class ExtensionsGuestViewContainerDispatcher;
......@@ -101,13 +97,6 @@ class ChromeExtensionsRendererClient
std::unique_ptr<extensions::Dispatcher> extension_dispatcher);
extensions::Dispatcher* GetExtensionDispatcherForTest();
// TODO(533069): Remove since BrowserPlugin has been removed.
static guest_view::GuestViewContainer* CreateBrowserPluginDelegate(
content::RenderFrame* render_frame,
const content::WebPluginInfo& info,
const std::string& mime_type,
const GURL& original_url);
static void DidBlockMimeHandlerViewForDisallowedPlugin(
const blink::WebElement& plugin_element);
static bool MaybeCreateMimeHandlerView(
......
......@@ -36,7 +36,6 @@
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "extensions/common/switches.h"
#include "extensions/renderer/extension_throttle_manager.h"
#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
......@@ -159,22 +158,6 @@ URLLoaderThrottleProviderImpl::CreateThrottles(
}
#if BUILDFLAG(ENABLE_EXTENSIONS)
if (type_ == content::URLLoaderThrottleProviderType::kFrame &&
request_destination == network::mojom::RequestDestination::kObject) {
content::RenderFrame* render_frame =
content::RenderFrame::FromRoutingID(render_frame_id);
auto mime_handlers =
extensions::MimeHandlerViewContainer::FromRenderFrame(render_frame);
GURL gurl(request.Url());
for (auto* handler : mime_handlers) {
auto throttle = handler->MaybeCreatePluginThrottle(gurl);
if (throttle) {
throttles.push_back(std::move(throttle));
break;
}
}
}
if (!extension_throttle_manager_)
extension_throttle_manager_ = CreateExtensionThrottleManager();
......
......@@ -3,7 +3,7 @@
<script>
/*
This test page will attach an <embed> of size 0x0 and posts message to it to
verify that the BrowserPlugin and MimeHandlerViewContainer are created and
verify that the BrowserPlugin and MimeHandlerViewFrameContainer are created and
the extension properly loaded. This is for a regression in slides/ pages where
post messaging to <embed> should pop up print preview (only on Chrome). For
for context see https://crbug.com/763812.
......
......@@ -394,7 +394,7 @@ WebContents* GuestViewBase::CreateNewGuestWindow(
void GuestViewBase::OnRenderFrameHostDeleted(int process_id, int routing_id) {}
void GuestViewBase::DidAttach(int guest_proxy_routing_id) {
void GuestViewBase::DidAttach() {
DCHECK(attach_in_progress_);
// Clear this flag here, as functions called below may check attached().
attach_in_progress_ = false;
......@@ -409,10 +409,6 @@ void GuestViewBase::DidAttach(int guest_proxy_routing_id) {
// Give the derived class an opportunity to perform some actions.
DidAttachToEmbedder();
// Inform the associated GuestViewContainer that the contentWindow is ready.
GetOwnerRenderWidgetHost()->GetProcess()->Send(new GuestViewMsg_GuestAttached(
element_instance_id_, guest_proxy_routing_id));
SendQueuedEvents();
}
......@@ -737,8 +733,7 @@ void GuestViewBase::AttachToOuterWebContentsFrame(
int32_t element_instance_id,
bool is_full_page_plugin) {
auto completion_callback =
base::BindOnce(&GuestViewBase::DidAttach, weak_ptr_factory_.GetWeakPtr(),
MSG_ROUTING_NONE);
base::BindOnce(&GuestViewBase::DidAttach, weak_ptr_factory_.GetWeakPtr());
WillAttach(WebContents::FromRenderFrameHost(embedder_frame), embedder_frame,
element_instance_id, is_full_page_plugin,
std::move(completion_callback));
......
......@@ -338,7 +338,7 @@ class GuestViewBase : public content::BrowserPluginGuestDelegate,
class OpenerLifetimeObserver;
// TODO(533069): Remove since BrowserPlugin has been removed.
void DidAttach(int guest_proxy_routing_id);
void DidAttach();
void WillAttach(content::WebContents* embedder_web_contents,
int browser_plugin_instance_id,
bool is_full_page_plugin,
......
......@@ -18,12 +18,6 @@
IPC_MESSAGE_CONTROL1(GuestViewMsg_AttachToEmbedderFrame_ACK,
int /* element_instance_id */)
// Once a RenderView proxy has been created for the guest in the embedder render
// process, this IPC informs the embedder of the proxy's routing ID.
IPC_MESSAGE_CONTROL2(GuestViewMsg_GuestAttached,
int /* element_instance_id */,
int /* source_routing_id */)
// Messages sent from the renderer to the browser.
// We have a RenderFrame with routing id of |embedder_local_frame_routing_id|.
......
......@@ -51,8 +51,7 @@ void GuestViewContainer::RenderFrameLifetimeObserver::OnDestruct() {
}
GuestViewContainer::GuestViewContainer(content::RenderFrame* render_frame)
: ready_(false),
element_instance_id_(guest_view::kInstanceIDNone),
: element_instance_id_(guest_view::kInstanceIDNone),
render_frame_(render_frame),
in_destruction_(false),
destruction_isolate_(nullptr),
......@@ -142,7 +141,7 @@ void GuestViewContainer::EnqueueRequest(
}
void GuestViewContainer::PerformPendingRequest() {
if (!ready_ || pending_requests_.empty() || pending_response_.get())
if (pending_requests_.empty() || pending_response_.get())
return;
std::unique_ptr<GuestViewRequest> pending_request =
......@@ -211,16 +210,6 @@ bool GuestViewContainer::OnMessageReceived(const IPC::Message& message) {
return true;
}
void GuestViewContainer::Ready() {
ready_ = true;
CHECK(!pending_response_);
PerformPendingRequest();
// Give the derived type an opportunity to perform some actions when the
// container acquires a geometry.
OnReady();
}
void GuestViewContainer::SetElementInstanceID(int element_instance_id) {
DCHECK_EQ(element_instance_id_, guest_view::kInstanceIDNone);
element_instance_id_ = element_instance_id;
......@@ -230,10 +219,6 @@ void GuestViewContainer::SetElementInstanceID(int element_instance_id) {
std::make_pair(element_instance_id, this));
}
void GuestViewContainer::DidDestroyElement() {
Destroy(false);
}
void GuestViewContainer::RegisterElementResizeCallback(
v8::Local<v8::Function> callback,
v8::Isolate* isolate) {
......
......@@ -59,9 +59,6 @@ class GuestViewContainer {
// handled by GuestViewContainer.
virtual bool OnMessage(const IPC::Message& message);
// Called to perform actions when a GuestViewContainer gets a geometry.
virtual void OnReady() {}
// Called to perform actions when a GuestViewContainer is about to be
// destroyed.
// Note that this should be called exactly once.
......@@ -75,8 +72,6 @@ class GuestViewContainer {
protected:
virtual ~GuestViewContainer();
bool ready_;
void OnHandleCallback(const IPC::Message& message);
private:
......@@ -91,10 +86,6 @@ class GuestViewContainer {
void RunDestructionCallback(bool embedder_frame_destroyed);
void CallElementResizeCallback(const gfx::Size& new_size);
// TODO(533069): Remove since BrowserPlugin has been removed.
void Ready();
void DidDestroyElement();
int element_instance_id_;
content::RenderFrame* render_frame_;
std::unique_ptr<RenderFrameLifetimeObserver> render_frame_lifetime_observer_;
......
......@@ -14,18 +14,12 @@ namespace guest_view {
IframeGuestViewContainer::IframeGuestViewContainer(
content::RenderFrame* render_frame)
: GuestViewContainer(render_frame) {
// There is no BrowserPluginDelegate to wait for.
ready_ = true;
}
IframeGuestViewContainer::~IframeGuestViewContainer() {
}
bool IframeGuestViewContainer::OnMessage(const IPC::Message& message) {
// TODO(lazyboy): Do not send this message in --site-per-process.
if (message.type() == GuestViewMsg_GuestAttached::ID)
return true;
if (message.type() != GuestViewMsg_AttachToEmbedderFrame_ACK::ID)
return false;
......
......@@ -55,25 +55,12 @@ ExtensionsGuestViewMessageFilter::ExtensionsGuestViewMessageFilter(
context),
content::BrowserAssociatedInterface<mojom::GuestView>(this) {}
void ExtensionsGuestViewMessageFilter::OverrideThreadForMessage(
const IPC::Message& message,
BrowserThread::ID* thread) {
switch (message.type()) {
case ExtensionsGuestViewHostMsg_ResizeGuest::ID:
*thread = BrowserThread::UI;
break;
default:
GuestViewMessageFilter::OverrideThreadForMessage(message, thread);
}
}
bool ExtensionsGuestViewMessageFilter::OnMessageReceived(
const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(ExtensionsGuestViewMessageFilter, message)
IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_CanExecuteContentScriptSync,
OnCanExecuteContentScript)
IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_ResizeGuest, OnResizeGuest)
IPC_MESSAGE_UNHANDLED(
handled = GuestViewMessageFilter::OnMessageReceived(message))
IPC_END_MESSAGE_MAP()
......@@ -170,31 +157,6 @@ void ExtensionsGuestViewMessageFilter::CreateMimeHandlerViewGuestOnUIThread(
create_params, std::move(callback));
}
void ExtensionsGuestViewMessageFilter::OnResizeGuest(
int render_frame_id,
int element_instance_id,
const gfx::Size& new_size) {
if (!browser_context_)
return;
// We should have a GuestViewManager at this point. If we don't then the
// embedder is misbehaving.
auto* manager = GetGuestViewManagerOrKill();
if (!manager)
return;
auto* guest_web_contents =
manager->GetGuestByInstanceID(render_process_id_, element_instance_id);
auto* mhvg = MimeHandlerViewGuest::FromWebContents(guest_web_contents);
if (!mhvg)
return;
guest_view::SetSizeParams set_size_params;
set_size_params.enable_auto_size.reset(new bool(false));
set_size_params.normal_size.reset(new gfx::Size(new_size));
mhvg->SetSize(set_size_params);
}
void ExtensionsGuestViewMessageFilter::CreateEmbeddedMimeHandlerViewGuest(
int32_t render_frame_id,
int32_t tab_id,
......
......@@ -51,8 +51,6 @@ class ExtensionsGuestViewMessageFilter
~ExtensionsGuestViewMessageFilter() override = default;
// GuestViewMessageFilter implementation.
void OverrideThreadForMessage(const IPC::Message& message,
content::BrowserThread::ID* thread) override;
bool OnMessageReceived(const IPC::Message& message) override;
guest_view::GuestViewManager* GetOrCreateGuestViewManager() override;
......@@ -64,9 +62,6 @@ class ExtensionsGuestViewMessageFilter
const std::string& view_id,
int element_instance_id,
const gfx::Size& element_size);
void OnResizeGuest(int render_frame_id,
int element_instance_id,
const gfx::Size& new_size);
// mojom::GuestView implementation.
void CreateEmbeddedMimeHandlerViewGuest(
......
......@@ -329,16 +329,13 @@ IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, PostMessage) {
IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, Basic) {
RunTest("testBasic.csv");
// Verify that for a navigation to a MimeHandlerView MIME type, exactly one
// stream is intercepted. This means :
// a- For BrowserPlugin-based MHV the PluginDocument passes the |view_id| to
// MimeHandlerViewContainer (so a new request is not sent).
// b- For frame-based MimeHandlerView we do not create a PluginDocument. If a
// PluginDocument was created here, the |view_id| associated with the
// stream intercepted from navigation response would be lost (
// PluginDocument does not talk to a MimeHandlerViewFrameContainer). Then,
// the newly added <embed> by the PluginDocument would send its own request
// leading to a total of 2 intercepted streams. The first one (from
// navigation) would never be released.
// stream is intercepted. This means we do not create a PluginDocument. If a
// PluginDocument was created here, the |view_id| associated with the
// stream intercepted from navigation response would be lost (
// PluginDocument does not talk to a MimeHandlerViewFrameContainer). Then,
// the newly added <embed> by the PluginDocument would send its own request
// leading to a total of 2 intercepted streams. The first one (from
// navigation) would never be released.
EXPECT_EQ(0U, MimeHandlerStreamManager::Get(
GetEmbedderWebContents()->GetBrowserContext())
->streams_.size());
......
......@@ -24,10 +24,4 @@ IPC_SYNC_MESSAGE_CONTROL2_1(
std::string /* script_id */,
bool /* allowed */)
// A renderer sends this message when it wants to resize a guest.
IPC_MESSAGE_CONTROL3(ExtensionsGuestViewHostMsg_ResizeGuest,
int /* routing_id */,
int /* element_instance_id*/,
gfx::Size /* new_size */)
#endif // EXTENSIONS_COMMON_GUEST_VIEW_EXTENSIONS_GUEST_VIEW_MESSAGES_H_
......@@ -130,14 +130,10 @@ source_set("renderer") {
"get_script_context.h",
"gin_port.cc",
"gin_port.h",
"guest_view/extensions_guest_view_container.cc",
"guest_view/extensions_guest_view_container.h",
"guest_view/extensions_guest_view_container_dispatcher.cc",
"guest_view/extensions_guest_view_container_dispatcher.h",
"guest_view/guest_view_internal_custom_bindings.cc",
"guest_view/guest_view_internal_custom_bindings.h",
"guest_view/mime_handler_view/mime_handler_view_container.cc",
"guest_view/mime_handler_view/mime_handler_view_container.h",
"guest_view/mime_handler_view/mime_handler_view_container_manager.cc",
"guest_view/mime_handler_view/mime_handler_view_container_manager.h",
"guest_view/mime_handler_view/mime_handler_view_frame_container.cc",
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/renderer/guest_view/extensions_guest_view_container.h"
namespace extensions {
ExtensionsGuestViewContainer::ExtensionsGuestViewContainer(
content::RenderFrame* render_frame)
: GuestViewContainer(render_frame) {
}
ExtensionsGuestViewContainer::~ExtensionsGuestViewContainer() = default;
void ExtensionsGuestViewContainer::OnDestroy(bool embedder_frame_destroyed) {
}
} // namespace extensions
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_RENDERER_GUEST_VIEW_EXTENSIONS_GUEST_VIEW_CONTAINER_H_
#define EXTENSIONS_RENDERER_GUEST_VIEW_EXTENSIONS_GUEST_VIEW_CONTAINER_H_
#include "components/guest_view/renderer/guest_view_container.h"
namespace extensions {
class ExtensionsGuestViewContainer : public guest_view::GuestViewContainer {
public:
explicit ExtensionsGuestViewContainer(content::RenderFrame* render_frame);
ExtensionsGuestViewContainer(const ExtensionsGuestViewContainer&) = delete;
ExtensionsGuestViewContainer& operator=(const ExtensionsGuestViewContainer&) =
delete;
protected:
~ExtensionsGuestViewContainer() override;
private:
// GuestViewContainer implementation.
void OnDestroy(bool embedder_frame_destroyed) override;
};
} // namespace extensions
#endif // EXTENSIONS_RENDERER_GUEST_VIEW_EXTENSIONS_GUEST_VIEW_CONTAINER_H_
......@@ -22,7 +22,6 @@
#include "extensions/common/extension.h"
#include "extensions/common/extension_messages.h"
#include "extensions/common/guest_view/extensions_guest_view_messages.h"
#include "extensions/renderer/guest_view/extensions_guest_view_container.h"
#include "extensions/renderer/script_context.h"
#include "third_party/blink/public/mojom/frame/user_activation_notification_type.mojom.h"
#include "third_party/blink/public/web/web_custom_element.h"
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_RENDERER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_CONTAINER_H_
#define EXTENSIONS_RENDERER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_CONTAINER_H_
#include <stdint.h>
#include <memory>
#include <string>
#include <vector>
#include "base/macros.h"
#include "base/optional.h"
#include "components/guest_view/renderer/guest_view_container.h"
#include "extensions/common/api/mime_handler.mojom.h"
#include "extensions/common/mojom/guest_view.mojom.h"
#include "extensions/renderer/guest_view/mime_handler_view/post_message_support.h"
#include "ipc/ipc_message.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "services/network/public/mojom/url_loader.mojom.h"
#include "third_party/blink/public/mojom/loader/transferrable_url_loader.mojom.h"
#include "third_party/blink/public/web/web_associated_url_loader_client.h"
#include "ui/gfx/geometry/size.h"
#include "url/gurl.h"
#include "v8/include/v8.h"
namespace blink {
class URLLoaderThrottle;
class WebAssociatedURLLoader;
class WebFrame;
class WebLocalFrame;
} // namespace blink
namespace content {
class RenderFrame;
struct WebPluginInfo;
} // namespace content
namespace extensions {
// A container for loading up an extension inside a BrowserPlugin to handle a
// MIME type. A request for the URL of the data to load inside the container is
// made and a url is sent back in response which points to the URL which the
// container should be navigated to. There are two cases for making this URL
// request, the case where the plugin is embedded and the case where it is top
// level:
// 1) In the top level case a URL request for the data to load has already been
// made by the renderer on behalf of the plugin. The |DidReceiveData| and
// |DidFinishLoading| callbacks (from BrowserPluginDelegate) will be called
// when data is received and when it has finished being received,
// respectively.
// 2) In the embedded case, no URL request is automatically made by the
// renderer. We make a URL request for the data inside the container using
// a WebAssociatedURLLoader. In this case, the |didReceiveData| and
// |didFinishLoading| (from WebAssociatedURLLoaderClient) when data is
// received and when it has finished being received.
class MimeHandlerViewContainer : public blink::WebAssociatedURLLoaderClient,
public guest_view::GuestViewContainer,
public mime_handler::BeforeUnloadControl,
public PostMessageSupport::Delegate {
public:
MimeHandlerViewContainer(content::RenderFrame* render_frame,
const content::WebPluginInfo& info,
const std::string& mime_type,
const GURL& original_url);
static mojom::GuestView* GuestView();
// TODO(ekaramad): Remove this and make MimeHandlerViewContainerManager of
// |render_frame| hold on to the list of MimeHandlerViewContainer.
static std::vector<MimeHandlerViewContainer*> FromRenderFrame(
content::RenderFrame* render_frame);
// If the URL matches the same URL that this object has created and it hasn't
// added a throttle yet, it will return a new one for the purpose of
// intercepting it.
std::unique_ptr<blink::URLLoaderThrottle> MaybeCreatePluginThrottle(
const GURL& url);
// GuestViewContainer implementation.
bool OnMessage(const IPC::Message& message) override;
void OnReady() override;
// TODO(533069): Remove since BrowserPlugin has been removed.
void PluginDidFinishLoading();
void PluginDidReceiveData(const char* data, int data_length);
void DidResizeElement(const gfx::Size& new_size);
v8::Local<v8::Object> V8ScriptableObject(v8::Isolate*);
// GuestViewContainer overrides.
void OnRenderFrameDestroyed() override;
// PostMessageSupport::Delegate overrides.
blink::WebLocalFrame* GetSourceFrame() override;
blink::WebFrame* GetTargetFrame() override;
bool IsEmbedded() const override;
bool IsResourceAccessibleBySource() const override;
// WebAssociatedURLLoaderClient overrides.
void DidReceiveData(const char* data, int data_length) override;
void DidFinishLoading() override;
protected:
~MimeHandlerViewContainer() override;
private:
class PluginResourceThrottle;
// mime_handler::BeforeUnloadControl:
void SetShowBeforeUnloadDialog(
bool show_dialog,
SetShowBeforeUnloadDialogCallback callback) override;
void SendResourceRequest();
void EmbedderRenderFrameWillBeGone();
v8::Local<v8::Object> GetScriptableObjectInternal(v8::Isolate* isolate);
// Called for embedded plugins when network service is enabled. This is called
// by the URLLoaderThrottle which intercepts the resource load, which is then
// sent to the browser to be handed off to the plugin.
void SetEmbeddedLoader(
blink::mojom::TransferrableURLLoaderPtr transferrable_url_loader);
void CreateMimeHandlerViewGuestIfNecessary();
int32_t GetInstanceId() const;
gfx::Size GetElementSize() const;
// Message handlers.
void OnGuestAttached(int element_instance_id,
int guest_proxy_routing_id);
// Returns the frame which is embedding the corresponding plugin element.
content::RenderFrame* GetEmbedderRenderFrame() const;
bool guest_created() const { return guest_created_; }
// Used when network service is enabled:
bool waiting_to_create_throttle_ = false;
// The URL of the extension to navigate to.
std::string view_id_;
// Whether the plugin is embedded or not.
const bool is_embedded_;
// The original URL of the plugin.
const GURL original_url_;
// Path of the plugin.
const std::string plugin_path_;
// The MIME type of the plugin.
const std::string mime_type_;
// Used when network service is enabled:
blink::mojom::TransferrableURLLoaderPtr transferrable_url_loader_;
// Used when network service is disabled:
// A URL loader to load the |original_url_| when the plugin is embedded. In
// the embedded case, no URL request is made automatically.
std::unique_ptr<blink::WebAssociatedURLLoader> loader_;
// True if a guest process has been requested.
bool guest_created_ = false;
// The routing ID of the frame which contains the plugin element.
const int32_t embedder_render_frame_routing_id_;
mojo::Receiver<mime_handler::BeforeUnloadControl>
before_unload_control_receiver_{this};
// The RenderView routing ID of the guest.
int guest_proxy_routing_id_ = -1;
// Determines whether the embedder can access |original_url_|. Used for UMA.
const bool is_resource_accessible_to_embedder_;
// The size of the element.
base::Optional<gfx::Size> element_size_;
base::WeakPtrFactory<MimeHandlerViewContainer> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(MimeHandlerViewContainer);
};
} // namespace extensions
#endif // EXTENSIONS_RENDERER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_CONTAINER_H_
......@@ -14,9 +14,10 @@
#include "base/strings/string_util.h"
#include "content/public/common/webplugininfo.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_thread.h"
#include "extensions/common/mojom/guest_view.mojom.h"
#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h"
#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_frame_container.h"
#include "ipc/ipc_sync_channel.h"
#include "third_party/blink/public/web/web_document.h"
#include "third_party/blink/public/web/web_frame.h"
#include "third_party/blink/public/web/web_local_frame.h"
......@@ -34,6 +35,17 @@ RenderFrameMap* GetRenderFrameMap() {
return instance.get();
}
mojom::GuestView* GetGuestView() {
static base::NoDestructor<mojo::AssociatedRemote<mojom::GuestView>>
guest_view;
if (!*guest_view) {
content::RenderThread::Get()->GetChannel()->GetRemoteAssociatedInterface(
guest_view.get());
}
return guest_view->get();
}
} // namespace
// static
......@@ -110,8 +122,8 @@ void MimeHandlerViewContainerManager::
// This is the one injected by HTML string. Return true so that the
// HTMLPlugInElement creates a child frame to be used as the outer
// WebContents frame.
MimeHandlerViewContainer::GuestView()->ReadyToCreateMimeHandlerView(
render_frame()->GetRoutingID(), false);
GetGuestView()->ReadyToCreateMimeHandlerView(render_frame()->GetRoutingID(),
false);
}
}
......@@ -305,8 +317,8 @@ bool MimeHandlerViewContainerManager::IsManagedByContainerManager(
base::ToUpperASCII(plugin_element.GetAttribute("internalid").Utf8()) ==
internal_id_) {
plugin_element_ = plugin_element;
MimeHandlerViewContainer::GuestView()->ReadyToCreateMimeHandlerView(
render_frame()->GetRoutingID(), true);
GetGuestView()->ReadyToCreateMimeHandlerView(render_frame()->GetRoutingID(),
true);
}
return plugin_element_ == plugin_element;
}
......
......@@ -20,9 +20,9 @@ class WebLocalFrame;
namespace extensions {
class MimeHandlerViewContainerManager;
// This is a frame-based and light version of MimeHandlerViewContainer created
// in the embedder process to support postMessage from the embedder side to the
// corresponding MimeHandlerViewGuest. It is owned and managed by the
// A container for loading an extension in a guest to handle a MIME type.
// This is created in the embedder to support postMessage from the embedder side
// to the corresponding MimeHandlerViewGuest. It is owned and managed by the
// MimeHandlerViewContainerManager instance of the embedder frame.
// To understand the role of MHVFC container consider the rough sketch:
//
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment