0

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:
Ben Goodger
2017-07-24 23:11:36 +00:00
committed by Commit Bot
parent 471aa60b45
commit d5ee3cc2bf
25 changed files with 170 additions and 45 deletions

@ -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_;
};