Eliminate RenderFrame::GetInterfaceRegistry()'
R=rockot@chromium.org Change-Id: Ice65be679658f544f46e1906b79642de5f337d67 Reviewed-on: https://chromium-review.googlesource.com/580789 Commit-Queue: Ben Goodger <ben@chromium.org> Reviewed-by: Ken Rockot <rockot@chromium.org> Cr-Commit-Position: refs/heads/master@{#489127}
This commit is contained in:
chrome/renderer
chrome_render_frame_observer.ccchrome_render_frame_observer.hcontent_settings_observer.cccontent_settings_observer.h
components
autofill
content
contextual_search
dom_distiller
spellcheck
content
public
renderer
shell
renderer
layout_test
extensions/renderer
headless/lib/renderer
@ -122,10 +122,10 @@ ChromeRenderFrameObserver::ChromeRenderFrameObserver(
|
||||
: content::RenderFrameObserver(render_frame),
|
||||
translate_helper_(nullptr),
|
||||
phishing_classifier_(nullptr) {
|
||||
render_frame->GetInterfaceRegistry()->AddInterface(
|
||||
registry_.AddInterface(
|
||||
base::Bind(&ChromeRenderFrameObserver::OnImageContextMenuRendererRequest,
|
||||
base::Unretained(this)));
|
||||
render_frame->GetInterfaceRegistry()->AddInterface(
|
||||
registry_.AddInterface(
|
||||
base::Bind(&ChromeRenderFrameObserver::OnThumbnailCapturerRequest,
|
||||
base::Unretained(this)));
|
||||
|
||||
@ -145,6 +145,12 @@ ChromeRenderFrameObserver::ChromeRenderFrameObserver(
|
||||
ChromeRenderFrameObserver::~ChromeRenderFrameObserver() {
|
||||
}
|
||||
|
||||
void ChromeRenderFrameObserver::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
bool ChromeRenderFrameObserver::OnMessageReceived(const IPC::Message& message) {
|
||||
// Filter only.
|
||||
bool handled = true;
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "chrome/common/thumbnail_capturer.mojom.h"
|
||||
#include "content/public/renderer/render_frame_observer.h"
|
||||
#include "mojo/public/cpp/bindings/binding_set.h"
|
||||
#include "services/service_manager/public/cpp/binder_registry.h"
|
||||
|
||||
namespace gfx {
|
||||
class Size;
|
||||
@ -39,6 +40,9 @@ class ChromeRenderFrameObserver
|
||||
enum TextCaptureType { PRELIMINARY_CAPTURE, FINAL_CAPTURE };
|
||||
|
||||
// RenderFrameObserver implementation.
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
bool OnMessageReceived(const IPC::Message& message) override;
|
||||
void DidStartProvisionalLoad(blink::WebDataSource* data_source) override;
|
||||
void DidFinishLoad() override;
|
||||
@ -93,6 +97,8 @@ class ChromeRenderFrameObserver
|
||||
mojo::BindingSet<chrome::mojom::ThumbnailCapturer>
|
||||
thumbnail_capturer_bindings_;
|
||||
|
||||
service_manager::BinderRegistry registry_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ChromeRenderFrameObserver);
|
||||
};
|
||||
|
||||
|
@ -106,7 +106,7 @@ ContentSettingsObserver::ContentSettingsObserver(
|
||||
ClearBlockedContentSettings();
|
||||
render_frame->GetWebFrame()->SetContentSettingsClient(this);
|
||||
|
||||
render_frame->GetInterfaceRegistry()->AddInterface(
|
||||
registry_.AddInterface(
|
||||
base::Bind(&ContentSettingsObserver::OnInsecureContentRendererRequest,
|
||||
base::Unretained(this)));
|
||||
|
||||
@ -160,6 +160,12 @@ void ContentSettingsObserver::DidBlockContentType(
|
||||
}
|
||||
}
|
||||
|
||||
void ContentSettingsObserver::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
bool ContentSettingsObserver::OnMessageReceived(const IPC::Message& message) {
|
||||
bool handled = true;
|
||||
IPC_BEGIN_MESSAGE_MAP(ContentSettingsObserver, message)
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "content/public/renderer/render_frame_observer_tracker.h"
|
||||
#include "extensions/features/features.h"
|
||||
#include "mojo/public/cpp/bindings/binding_set.h"
|
||||
#include "services/service_manager/public/cpp/binder_registry.h"
|
||||
#include "third_party/WebKit/public/platform/WebContentSettingsClient.h"
|
||||
#include "url/gurl.h"
|
||||
|
||||
@ -95,6 +96,9 @@ class ContentSettingsObserver
|
||||
FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, PluginsTemporarilyAllowed);
|
||||
|
||||
// RenderFrameObserver implementation.
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
bool OnMessageReceived(const IPC::Message& message) override;
|
||||
void DidCommitProvisionalLoad(bool is_new_navigation,
|
||||
bool is_same_document_navigation) override;
|
||||
@ -170,6 +174,8 @@ class ContentSettingsObserver
|
||||
mojo::BindingSet<chrome::mojom::InsecureContentRenderer>
|
||||
insecure_content_renderer_bindings_;
|
||||
|
||||
service_manager::BinderRegistry registry_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ContentSettingsObserver);
|
||||
};
|
||||
|
||||
|
@ -161,8 +161,7 @@ AutofillAgent::AutofillAgent(content::RenderFrame* render_frame,
|
||||
render_frame->GetWebFrame()->SetAutofillClient(this);
|
||||
password_autofill_agent->SetAutofillAgent(this);
|
||||
|
||||
// AutofillAgent is guaranteed to outlive |render_frame|.
|
||||
render_frame->GetInterfaceRegistry()->AddInterface(
|
||||
registry_.AddInterface(
|
||||
base::Bind(&AutofillAgent::BindRequest, base::Unretained(this)));
|
||||
}
|
||||
|
||||
@ -178,6 +177,12 @@ bool AutofillAgent::FormDataCompare::operator()(const FormData& lhs,
|
||||
std::tie(rhs.name, rhs.origin, rhs.action, rhs.is_form_tag);
|
||||
}
|
||||
|
||||
void AutofillAgent::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
void AutofillAgent::DidCommitProvisionalLoad(bool is_new_navigation,
|
||||
bool is_same_document_navigation) {
|
||||
blink::WebFrame* frame = render_frame()->GetWebFrame();
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "components/autofill/content/renderer/page_click_tracker.h"
|
||||
#include "content/public/renderer/render_frame_observer.h"
|
||||
#include "mojo/public/cpp/bindings/binding.h"
|
||||
#include "services/service_manager/public/cpp/binder_registry.h"
|
||||
#include "third_party/WebKit/public/web/WebAutofillClient.h"
|
||||
#include "third_party/WebKit/public/web/WebFormControlElement.h"
|
||||
#include "third_party/WebKit/public/web/WebFormElement.h"
|
||||
@ -131,6 +132,9 @@ class AutofillAgent : public content::RenderFrameObserver,
|
||||
};
|
||||
|
||||
// content::RenderFrameObserver:
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
void DidCommitProvisionalLoad(bool is_new_navigation,
|
||||
bool is_same_document_navigation) override;
|
||||
void DidFinishDocumentLoad() override;
|
||||
@ -292,6 +296,8 @@ class AutofillAgent : public content::RenderFrameObserver,
|
||||
|
||||
mojom::AutofillDriverPtr autofill_driver_;
|
||||
|
||||
service_manager::BinderRegistry registry_;
|
||||
|
||||
base::WeakPtrFactory<AutofillAgent> weak_ptr_factory_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(AutofillAgent);
|
||||
|
@ -687,8 +687,7 @@ PasswordAutofillAgent::PasswordAutofillAgent(content::RenderFrame* render_frame)
|
||||
checked_safe_browsing_reputation_(false),
|
||||
binding_(this),
|
||||
form_element_observer_(nullptr) {
|
||||
// PasswordAutofillAgent is guaranteed to outlive |render_frame|.
|
||||
render_frame->GetInterfaceRegistry()->AddInterface(
|
||||
registry_.AddInterface(
|
||||
base::Bind(&PasswordAutofillAgent::BindRequest, base::Unretained(this)));
|
||||
}
|
||||
|
||||
@ -1282,6 +1281,12 @@ void PasswordAutofillAgent::SendPasswordForms(bool only_visible) {
|
||||
}
|
||||
}
|
||||
|
||||
void PasswordAutofillAgent::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
void PasswordAutofillAgent::DidFinishDocumentLoad() {
|
||||
// The |frame| contents have been parsed, but not yet rendered. Let the
|
||||
// PasswordManager know that forms are loaded, even though we can't yet tell
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "content/public/renderer/render_frame_observer.h"
|
||||
#include "content/public/renderer/render_view_observer.h"
|
||||
#include "mojo/public/cpp/bindings/binding.h"
|
||||
#include "services/service_manager/public/cpp/binder_registry.h"
|
||||
#include "third_party/WebKit/public/web/WebInputElement.h"
|
||||
|
||||
namespace blink {
|
||||
@ -201,6 +202,9 @@ class PasswordAutofillAgent : public content::RenderFrameObserver,
|
||||
};
|
||||
|
||||
// RenderFrameObserver:
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
void DidFinishDocumentLoad() override;
|
||||
void DidFinishLoad() override;
|
||||
void FrameDetached() override;
|
||||
@ -312,6 +316,8 @@ class PasswordAutofillAgent : public content::RenderFrameObserver,
|
||||
|
||||
blink::WebFormElementObserver* form_element_observer_;
|
||||
|
||||
service_manager::BinderRegistry registry_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(PasswordAutofillAgent);
|
||||
};
|
||||
|
||||
|
@ -167,9 +167,8 @@ PasswordGenerationAgent::PasswordGenerationAgent(
|
||||
password_agent_(password_agent),
|
||||
binding_(this) {
|
||||
LogBoolean(Logger::STRING_GENERATION_RENDERER_ENABLED, enabled_);
|
||||
// PasswordGenerationAgent is guaranteed to outlive |render_frame|.
|
||||
render_frame->GetInterfaceRegistry()->AddInterface(base::Bind(
|
||||
&PasswordGenerationAgent::BindRequest, base::Unretained(this)));
|
||||
registry_.AddInterface(base::Bind(&PasswordGenerationAgent::BindRequest,
|
||||
base::Unretained(this)));
|
||||
}
|
||||
PasswordGenerationAgent::~PasswordGenerationAgent() {}
|
||||
|
||||
@ -178,6 +177,12 @@ void PasswordGenerationAgent::BindRequest(
|
||||
binding_.Bind(std::move(request));
|
||||
}
|
||||
|
||||
void PasswordGenerationAgent::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
void PasswordGenerationAgent::DidFinishDocumentLoad() {
|
||||
// Update stats for main frame navigation.
|
||||
if (!render_frame()->GetWebFrame()->Parent()) {
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "components/autofill/content/renderer/renderer_save_password_progress_logger.h"
|
||||
#include "content/public/renderer/render_frame_observer.h"
|
||||
#include "mojo/public/cpp/bindings/binding.h"
|
||||
#include "services/service_manager/public/cpp/binder_registry.h"
|
||||
#include "third_party/WebKit/public/web/WebInputElement.h"
|
||||
#include "url/gurl.h"
|
||||
|
||||
@ -87,6 +88,9 @@ class PasswordGenerationAgent : public content::RenderFrameObserver,
|
||||
typedef std::vector<AccountCreationFormData> AccountCreationFormDataList;
|
||||
|
||||
// RenderFrameObserver:
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
void DidFinishDocumentLoad() override;
|
||||
void DidFinishLoad() override;
|
||||
void OnDestruct() override;
|
||||
@ -193,6 +197,8 @@ class PasswordGenerationAgent : public content::RenderFrameObserver,
|
||||
|
||||
mojo::Binding<mojom::PasswordGenerationAgent> binding_;
|
||||
|
||||
service_manager::BinderRegistry registry_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(PasswordGenerationAgent);
|
||||
};
|
||||
|
||||
|
@ -25,13 +25,19 @@ OverlayJsRenderFrameObserver::OverlayJsRenderFrameObserver(
|
||||
|
||||
OverlayJsRenderFrameObserver::~OverlayJsRenderFrameObserver() {}
|
||||
|
||||
void OverlayJsRenderFrameObserver::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
void OverlayJsRenderFrameObserver::DidStartProvisionalLoad(
|
||||
blink::WebDataSource* data_source) {
|
||||
RegisterMojoInterface();
|
||||
}
|
||||
|
||||
void OverlayJsRenderFrameObserver::RegisterMojoInterface() {
|
||||
render_frame()->GetInterfaceRegistry()->AddInterface(base::Bind(
|
||||
registry_.AddInterface(base::Bind(
|
||||
&OverlayJsRenderFrameObserver::CreateOverlayPageNotifierService,
|
||||
weak_factory_.GetWeakPtr()));
|
||||
}
|
||||
@ -62,11 +68,7 @@ void OverlayJsRenderFrameObserver::DidFinishLoad() {
|
||||
}
|
||||
|
||||
void OverlayJsRenderFrameObserver::DestroyOverlayPageNotifierService() {
|
||||
if (render_frame()) {
|
||||
render_frame()
|
||||
->GetInterfaceRegistry()
|
||||
->RemoveInterface<mojom::OverlayPageNotifierService>();
|
||||
}
|
||||
registry_.RemoveInterface<mojom::OverlayPageNotifierService>();
|
||||
}
|
||||
|
||||
void OverlayJsRenderFrameObserver::OnDestruct() {
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "components/contextual_search/common/overlay_page_notifier_service.mojom.h"
|
||||
#include "content/public/renderer/render_frame.h"
|
||||
#include "content/public/renderer/render_frame_observer.h"
|
||||
#include "services/service_manager/public/cpp/binder_registry.h"
|
||||
#include "third_party/WebKit/public/web/WebLocalFrame.h"
|
||||
#include "v8/include/v8.h"
|
||||
|
||||
@ -25,6 +26,9 @@ class OverlayJsRenderFrameObserver : public content::RenderFrameObserver {
|
||||
~OverlayJsRenderFrameObserver() override;
|
||||
|
||||
// RenderFrameObserver implementation.
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
void DidStartProvisionalLoad(blink::WebDataSource* data_source) override;
|
||||
void DidClearWindowObject() override;
|
||||
void DidFinishLoad() override;
|
||||
@ -49,6 +53,8 @@ class OverlayJsRenderFrameObserver : public content::RenderFrameObserver {
|
||||
// Track if the current page is presented in the contextual search overlay.
|
||||
bool is_contextual_search_overlay_;
|
||||
|
||||
service_manager::BinderRegistry registry_;
|
||||
|
||||
base::WeakPtrFactory<OverlayJsRenderFrameObserver> weak_factory_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(OverlayJsRenderFrameObserver);
|
||||
|
@ -27,6 +27,12 @@ DistillerJsRenderFrameObserver::DistillerJsRenderFrameObserver(
|
||||
|
||||
DistillerJsRenderFrameObserver::~DistillerJsRenderFrameObserver() {}
|
||||
|
||||
void DistillerJsRenderFrameObserver::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
void DistillerJsRenderFrameObserver::DidStartProvisionalLoad(
|
||||
blink::WebDataSource* data_source) {
|
||||
RegisterMojoInterface();
|
||||
@ -36,9 +42,7 @@ void DistillerJsRenderFrameObserver::DidFinishLoad() {
|
||||
// If no message about the distilled page was received at this point, there
|
||||
// will not be one; remove the mojom::DistillerPageNotifierService from the
|
||||
// registry.
|
||||
render_frame()
|
||||
->GetInterfaceRegistry()
|
||||
->RemoveInterface<mojom::DistillerPageNotifierService>();
|
||||
registry_.RemoveInterface<mojom::DistillerPageNotifierService>();
|
||||
}
|
||||
|
||||
void DistillerJsRenderFrameObserver::DidCreateScriptContext(
|
||||
@ -54,7 +58,7 @@ void DistillerJsRenderFrameObserver::DidCreateScriptContext(
|
||||
}
|
||||
|
||||
void DistillerJsRenderFrameObserver::RegisterMojoInterface() {
|
||||
render_frame()->GetInterfaceRegistry()->AddInterface(base::Bind(
|
||||
registry_.AddInterface(base::Bind(
|
||||
&DistillerJsRenderFrameObserver::CreateDistillerPageNotifierService,
|
||||
weak_factory_.GetWeakPtr()));
|
||||
}
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "components/dom_distiller/content/renderer/distiller_page_notifier_service_impl.h"
|
||||
#include "content/public/renderer/render_frame.h"
|
||||
#include "content/public/renderer/render_frame_observer.h"
|
||||
#include "services/service_manager/public/cpp/binder_registry.h"
|
||||
#include "third_party/WebKit/public/web/WebLocalFrame.h"
|
||||
#include "v8/include/v8.h"
|
||||
|
||||
@ -27,6 +28,9 @@ class DistillerJsRenderFrameObserver : public content::RenderFrameObserver {
|
||||
~DistillerJsRenderFrameObserver() override;
|
||||
|
||||
// RenderFrameObserver implementation.
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
void DidStartProvisionalLoad(blink::WebDataSource* data_source) override;
|
||||
void DidFinishLoad() override;
|
||||
void DidCreateScriptContext(v8::Local<v8::Context> context,
|
||||
@ -51,6 +55,8 @@ class DistillerJsRenderFrameObserver : public content::RenderFrameObserver {
|
||||
// Track if the current page is distilled. This is needed for testing.
|
||||
bool is_distiller_page_;
|
||||
|
||||
service_manager::BinderRegistry registry_;
|
||||
|
||||
// Handle to "distiller" JavaScript object functionality.
|
||||
std::unique_ptr<DistillerNativeJavaScript> native_javascript_handle_;
|
||||
base::WeakPtrFactory<DistillerJsRenderFrameObserver> weak_factory_;
|
||||
|
@ -29,13 +29,19 @@ SpellCheckPanel::SpellCheckPanel(content::RenderFrame* render_frame)
|
||||
: content::RenderFrameObserver(render_frame),
|
||||
spelling_panel_visible_(false) {
|
||||
DCHECK(render_frame);
|
||||
render_frame->GetInterfaceRegistry()->AddInterface(base::Bind(
|
||||
&SpellCheckPanel::SpellCheckPanelRequest, base::Unretained(this)));
|
||||
registry_.AddInterface(base::Bind(&SpellCheckPanel::SpellCheckPanelRequest,
|
||||
base::Unretained(this)));
|
||||
render_frame->GetWebFrame()->SetSpellCheckPanelHostClient(this);
|
||||
}
|
||||
|
||||
SpellCheckPanel::~SpellCheckPanel() = default;
|
||||
|
||||
void SpellCheckPanel::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
void SpellCheckPanel::OnDestruct() {
|
||||
delete this;
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "components/spellcheck/spellcheck_build_features.h"
|
||||
#include "content/public/renderer/render_frame_observer.h"
|
||||
#include "mojo/public/cpp/bindings/binding_set.h"
|
||||
#include "services/service_manager/public/cpp/binder_registry.h"
|
||||
#include "third_party/WebKit/public/platform/WebSpellCheckPanelHostClient.h"
|
||||
|
||||
#if !BUILDFLAG(HAS_SPELLCHECK_PANEL)
|
||||
@ -25,6 +26,9 @@ class SpellCheckPanel : public content::RenderFrameObserver,
|
||||
|
||||
private:
|
||||
// content::RenderFrameObserver:
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
void OnDestruct() override;
|
||||
|
||||
// blink::WebSpellCheckPanelHostClient:
|
||||
@ -47,6 +51,8 @@ class SpellCheckPanel : public content::RenderFrameObserver,
|
||||
// True if the browser is showing the spelling panel.
|
||||
bool spelling_panel_visible_;
|
||||
|
||||
service_manager::BinderRegistry registry_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(SpellCheckPanel);
|
||||
};
|
||||
|
||||
|
@ -163,9 +163,11 @@ class CONTENT_EXPORT RenderFrame : public IPC::Listener,
|
||||
// Return true if this frame is hidden.
|
||||
virtual bool IsHidden() = 0;
|
||||
|
||||
// Returns the BinderRegistry that this process uses to expose interfaces
|
||||
// to the application running in this frame.
|
||||
virtual service_manager::BinderRegistry* GetInterfaceRegistry() = 0;
|
||||
// Ask the RenderFrame (or its observers) to bind a request for
|
||||
// |interface_name| to |interface_pipe|.
|
||||
virtual void BindLocalInterface(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle interface_pipe) = 0;
|
||||
|
||||
// Returns the InterfaceProvider that this process can use to bind
|
||||
// interfaces exposed to it by the application running in this frame.
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "content/common/content_export.h"
|
||||
#include "ipc/ipc_listener.h"
|
||||
#include "ipc/ipc_sender.h"
|
||||
#include "mojo/public/cpp/system/message_pipe.h"
|
||||
#include "third_party/WebKit/public/platform/WebLoadingBehaviorFlag.h"
|
||||
#include "third_party/WebKit/public/platform/WebVector.h"
|
||||
#include "third_party/WebKit/public/web/WebMeaningfulLayout.h"
|
||||
@ -131,6 +132,12 @@ class CONTENT_EXPORT RenderFrameObserver : public IPC::Listener,
|
||||
// Called when a worker fetch context will be created.
|
||||
virtual void WillCreateWorkerFetchContext(blink::WebWorkerFetchContext*) {}
|
||||
|
||||
// Called to give the embedder an opportunity to bind an interface request
|
||||
// for a frame. If the request can be bound, |interface_pipe| will be taken.
|
||||
virtual void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {}
|
||||
|
||||
// IPC::Listener implementation.
|
||||
bool OnMessageReceived(const IPC::Message& message) override;
|
||||
|
||||
|
@ -1201,13 +1201,12 @@ RenderFrameImpl::RenderFrameImpl(const CreateParams& params)
|
||||
base::Bind(&RenderFrameImpl::RequestOverlayRoutingToken,
|
||||
base::Unretained(this))),
|
||||
weak_factory_(this) {
|
||||
interface_registry_ = base::MakeUnique<service_manager::BinderRegistry>();
|
||||
service_manager::mojom::InterfaceProviderPtr remote_interfaces;
|
||||
pending_remote_interface_provider_request_ = MakeRequest(&remote_interfaces);
|
||||
remote_interfaces_.reset(new service_manager::InterfaceProvider);
|
||||
remote_interfaces_->Bind(std::move(remote_interfaces));
|
||||
blink_interface_registry_.reset(
|
||||
new BlinkInterfaceRegistryImpl(interface_registry_->GetWeakPtr()));
|
||||
new BlinkInterfaceRegistryImpl(registry_.GetWeakPtr()));
|
||||
|
||||
// Must call after binding our own remote interfaces.
|
||||
media_factory_.SetupMojo();
|
||||
@ -1353,8 +1352,14 @@ void RenderFrameImpl::InitializeBlameContext(RenderFrameImpl* parent_frame) {
|
||||
void RenderFrameImpl::GetInterface(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle interface_pipe) {
|
||||
// TODO(beng): We should be getting this info from the frame factory request.
|
||||
interface_registry_->BindInterface(interface_name, std::move(interface_pipe));
|
||||
if (registry_.TryBindInterface(interface_name, &interface_pipe))
|
||||
return;
|
||||
|
||||
for (auto& observer : observers_) {
|
||||
observer.OnInterfaceRequestForFrame(interface_name, &interface_pipe);
|
||||
if (!interface_pipe.is_valid())
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
RenderWidget* RenderFrameImpl::GetRenderWidget() {
|
||||
@ -2652,8 +2657,10 @@ void RenderFrameImpl::ExecuteJavaScript(const base::string16& javascript) {
|
||||
OnJavaScriptExecuteRequest(javascript, 0, false);
|
||||
}
|
||||
|
||||
service_manager::BinderRegistry* RenderFrameImpl::GetInterfaceRegistry() {
|
||||
return interface_registry_.get();
|
||||
void RenderFrameImpl::BindLocalInterface(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle interface_pipe) {
|
||||
GetInterface(interface_name, std::move(interface_pipe));
|
||||
}
|
||||
|
||||
service_manager::InterfaceProvider* RenderFrameImpl::GetRemoteInterfaces() {
|
||||
@ -6289,7 +6296,7 @@ void RenderFrameImpl::InitializeUserMediaClient() {
|
||||
this, RenderThreadImpl::current()->GetPeerConnectionDependencyFactory(),
|
||||
base::MakeUnique<MediaStreamDispatcher>(this),
|
||||
render_thread->GetWorkerTaskRunner());
|
||||
GetInterfaceRegistry()->AddInterface(
|
||||
registry_.AddInterface(
|
||||
base::Bind(&MediaDevicesListenerImpl::Create, GetRoutingID()));
|
||||
#endif
|
||||
}
|
||||
@ -6682,13 +6689,13 @@ void RenderFrameImpl::RegisterMojoInterfaces() {
|
||||
GetAssociatedInterfaceRegistry()->AddInterface(base::Bind(
|
||||
&RenderFrameImpl::BindFrameBindingsControl, weak_factory_.GetWeakPtr()));
|
||||
|
||||
GetInterfaceRegistry()->AddInterface(base::Bind(
|
||||
&FrameInputHandlerImpl::CreateMojoService, weak_factory_.GetWeakPtr()));
|
||||
registry_.AddInterface(base::Bind(&FrameInputHandlerImpl::CreateMojoService,
|
||||
weak_factory_.GetWeakPtr()));
|
||||
|
||||
if (!frame_->Parent()) {
|
||||
// Only main frame have ImageDownloader service.
|
||||
GetInterfaceRegistry()->AddInterface(base::Bind(
|
||||
&ImageDownloaderImpl::CreateMojoService, base::Unretained(this)));
|
||||
registry_.AddInterface(base::Bind(&ImageDownloaderImpl::CreateMojoService,
|
||||
base::Unretained(this)));
|
||||
|
||||
// Host zoom is per-page, so only added on the main frame.
|
||||
GetAssociatedInterfaceRegistry()->AddInterface(base::Bind(
|
||||
|
@ -432,7 +432,9 @@ class CONTENT_EXPORT RenderFrameImpl
|
||||
void ExecuteJavaScript(const base::string16& javascript) override;
|
||||
bool IsMainFrame() override;
|
||||
bool IsHidden() override;
|
||||
service_manager::BinderRegistry* GetInterfaceRegistry() override;
|
||||
void BindLocalInterface(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle interface_pipe) override;
|
||||
service_manager::InterfaceProvider* GetRemoteInterfaces() override;
|
||||
AssociatedInterfaceRegistry* GetAssociatedInterfaceRegistry() override;
|
||||
AssociatedInterfaceProvider* GetRemoteAssociatedInterfaces() override;
|
||||
@ -1309,7 +1311,7 @@ class CONTENT_EXPORT RenderFrameImpl
|
||||
// The PushMessagingClient attached to this frame, lazily initialized.
|
||||
PushMessagingClient* push_messaging_client_;
|
||||
|
||||
std::unique_ptr<service_manager::BinderRegistry> interface_registry_;
|
||||
service_manager::BinderRegistry registry_;
|
||||
std::unique_ptr<service_manager::InterfaceProvider> remote_interfaces_;
|
||||
std::unique_ptr<BlinkInterfaceRegistryImpl> blink_interface_registry_;
|
||||
service_manager::mojom::InterfaceProviderRequest
|
||||
|
@ -700,13 +700,10 @@ void BlinkTestRunner::DispatchBeforeInstallPromptEvent(
|
||||
const std::vector<std::string>& event_platforms,
|
||||
const base::Callback<void(bool)>& callback) {
|
||||
app_banner_service_.reset(new test_runner::AppBannerService());
|
||||
|
||||
service_manager::BinderRegistry* registry =
|
||||
render_view()->GetMainRenderFrame()->GetInterfaceRegistry();
|
||||
blink::mojom::AppBannerControllerRequest request =
|
||||
mojo::MakeRequest(&app_banner_service_->controller());
|
||||
registry->BindInterface(blink::mojom::AppBannerController::Name_,
|
||||
request.PassMessagePipe());
|
||||
render_view()->GetMainRenderFrame()->BindLocalInterface(
|
||||
blink::mojom::AppBannerController::Name_, request.PassMessagePipe());
|
||||
app_banner_service_->SendBannerPromptRequest(event_platforms, callback);
|
||||
}
|
||||
|
||||
|
@ -81,7 +81,7 @@ ExtensionsRenderFrameObserver::ExtensionsRenderFrameObserver(
|
||||
content::RenderFrame* render_frame)
|
||||
: content::RenderFrameObserver(render_frame),
|
||||
webview_visually_deemphasized_(false) {
|
||||
render_frame->GetInterfaceRegistry()->AddInterface(
|
||||
registry_.AddInterface(
|
||||
base::Bind(&ExtensionsRenderFrameObserver::BindAppWindowRequest,
|
||||
base::Unretained(this)));
|
||||
}
|
||||
@ -105,6 +105,12 @@ void ExtensionsRenderFrameObserver::SetVisuallyDeemphasized(bool deemphasized) {
|
||||
render_frame()->GetRenderView()->GetWebView()->SetPageOverlayColor(color);
|
||||
}
|
||||
|
||||
void ExtensionsRenderFrameObserver::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
void ExtensionsRenderFrameObserver::DetailedConsoleMessageAdded(
|
||||
const base::string16& message,
|
||||
const base::string16& source,
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "content/public/renderer/render_frame_observer.h"
|
||||
#include "extensions/common/mojo/app_window.mojom.h"
|
||||
#include "mojo/public/cpp/bindings/binding_set.h"
|
||||
#include "services/service_manager/public/cpp/binder_registry.h"
|
||||
|
||||
namespace extensions {
|
||||
|
||||
@ -31,6 +32,9 @@ class ExtensionsRenderFrameObserver : public content::RenderFrameObserver,
|
||||
void SetVisuallyDeemphasized(bool deemphasized) override;
|
||||
|
||||
// RenderFrameObserver implementation.
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
void DetailedConsoleMessageAdded(const base::string16& message,
|
||||
const base::string16& source,
|
||||
const base::string16& stack_trace,
|
||||
@ -43,6 +47,8 @@ class ExtensionsRenderFrameObserver : public content::RenderFrameObserver,
|
||||
|
||||
mojo::BindingSet<mojom::AppWindow> bindings_;
|
||||
|
||||
service_manager::BinderRegistry registry_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ExtensionsRenderFrameObserver);
|
||||
};
|
||||
|
||||
|
@ -16,7 +16,7 @@ HeadlessRenderFrameControllerImpl::HeadlessRenderFrameControllerImpl(
|
||||
: content::RenderFrameObserver(render_frame),
|
||||
render_frame_(render_frame),
|
||||
weak_ptr_factory_(this) {
|
||||
render_frame->GetInterfaceRegistry()->AddInterface(base::Bind(
|
||||
registry_.AddInterface(base::Bind(
|
||||
&HeadlessRenderFrameControllerImpl::OnRenderFrameControllerRequest,
|
||||
base::Unretained(this)));
|
||||
}
|
||||
@ -68,6 +68,12 @@ void HeadlessRenderFrameControllerImpl::SendMessageToTabSocket(
|
||||
find_it->second.OnMessageFromEmbedder(message);
|
||||
}
|
||||
|
||||
void HeadlessRenderFrameControllerImpl::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
void HeadlessRenderFrameControllerImpl::DidCreateScriptContext(
|
||||
v8::Local<v8::Context> context,
|
||||
int world_id) {
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "headless/lib/renderer/headless_tab_socket_bindings.h"
|
||||
#include "headless/lib/tab_socket.mojom.h"
|
||||
#include "mojo/public/cpp/bindings/binding_set.h"
|
||||
#include "services/service_manager/public/cpp/binder_registry.h"
|
||||
|
||||
namespace headless {
|
||||
|
||||
@ -33,6 +34,9 @@ class HeadlessRenderFrameControllerImpl : public HeadlessRenderFrameController,
|
||||
int32_t world_id) override;
|
||||
|
||||
// content::RenderFrameObserver implementation:
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
void DidCreateScriptContext(v8::Local<v8::Context> context,
|
||||
int world_id) override;
|
||||
|
||||
@ -51,6 +55,7 @@ class HeadlessRenderFrameControllerImpl : public HeadlessRenderFrameController,
|
||||
headless::TabSocketPtr tab_socket_ptr_;
|
||||
InstallMainWorldTabSocketCallback
|
||||
pending_install_main_world_tab_socket_callback_;
|
||||
service_manager::BinderRegistry registry_;
|
||||
base::WeakPtrFactory<HeadlessRenderFrameControllerImpl> weak_ptr_factory_;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user