| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index 449258f7269d9ba5139ace615cc61db75ea5089a..c92437cec6572ab2536fb4212d53e6790d391c5a 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -73,6 +73,7 @@
|
| #include "content/public/common/file_chooser_file_info.h"
|
| #include "content/public/common/file_chooser_params.h"
|
| #include "content/public/common/isolated_world_ids.h"
|
| +#include "content/public/common/mojo_shell_connection.h"
|
| #include "content/public/common/page_state.h"
|
| #include "content/public/common/resource_response.h"
|
| #include "content/public/common/url_constants.h"
|
| @@ -112,7 +113,7 @@
|
| #include "content/renderer/media/user_media_client_impl.h"
|
| #include "content/renderer/media/web_media_element_source_utils.h"
|
| #include "content/renderer/media/webmediaplayer_ms.h"
|
| -#include "content/renderer/mojo/service_registry_js_wrapper.h"
|
| +#include "content/renderer/mojo/interface_provider_js_wrapper.h"
|
| #include "content/renderer/mojo_bindings_controller.h"
|
| #include "content/renderer/navigation_state_impl.h"
|
| #include "content/renderer/notification_permission_dispatcher.h"
|
| @@ -153,6 +154,8 @@
|
| #include "net/base/net_errors.h"
|
| #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
|
| #include "net/http/http_util.h"
|
| +#include "services/shell/public/cpp/interface_provider.h"
|
| +#include "services/shell/public/cpp/interface_registry.h"
|
| #include "storage/common/data_element.h"
|
| #include "third_party/WebKit/public/platform/FilePathConversion.h"
|
| #include "third_party/WebKit/public/platform/URLConversion.h"
|
| @@ -1091,7 +1094,6 @@ RenderFrameImpl::RenderFrameImpl(const CreateParams& params)
|
| devtools_agent_(nullptr),
|
| push_messaging_dispatcher_(NULL),
|
| presentation_dispatcher_(NULL),
|
| - blink_service_registry_(service_registry_.GetWeakPtr()),
|
| screen_orientation_dispatcher_(NULL),
|
| manifest_manager_(NULL),
|
| accessibility_mode_(AccessibilityModeOff),
|
| @@ -1109,6 +1111,17 @@ RenderFrameImpl::RenderFrameImpl(const CreateParams& params)
|
| #endif
|
| frame_binding_(this),
|
| weak_factory_(this) {
|
| + // We don't have a shell::Connection at this point, so use nullptr.
|
| + // TODO(beng): We should fix this, so we can apply policy about which
|
| + // interfaces get exposed.
|
| + interface_registry_.reset(new shell::InterfaceRegistry(nullptr));
|
| + shell::mojom::InterfaceProviderPtr remote_interfaces;
|
| + pending_remote_interface_provider_request_ = GetProxy(&remote_interfaces);
|
| + remote_interfaces_.reset(
|
| + new shell::InterfaceProvider(std::move(remote_interfaces)));
|
| + blink_service_registry_.reset(new BlinkServiceRegistryImpl(
|
| + remote_interfaces_->GetWeakPtr()));
|
| +
|
| std::pair<RoutingIDFrameMap::iterator, bool> result =
|
| g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this));
|
| CHECK(result.second) << "Inserting a duplicate item.";
|
| @@ -1213,7 +1226,7 @@ void RenderFrameImpl::Initialize() {
|
| devtools_agent_ = new DevToolsAgent(this);
|
| }
|
|
|
| - RegisterMojoServices();
|
| + RegisterMojoInterfaces();
|
|
|
| // We delay calling this until we have the WebFrame so that any observer or
|
| // embedder can call GetWebFrame on any RenderFrame.
|
| @@ -1602,7 +1615,8 @@ void RenderFrameImpl::Bind(mojom::FrameRequest request,
|
| mojom::FrameHostPtr host) {
|
| frame_binding_.Bind(std::move(request));
|
| frame_host_ = std::move(host);
|
| - frame_host_->GetInterfaceProvider(service_registry_.TakeRemoteRequest());
|
| + frame_host_->GetInterfaceProvider(
|
| + std::move(pending_remote_interface_provider_request_));
|
| }
|
|
|
| ManifestManager* RenderFrameImpl::manifest_manager() {
|
| @@ -2412,8 +2426,12 @@ void RenderFrameImpl::ExecuteJavaScript(const base::string16& javascript) {
|
| OnJavaScriptExecuteRequest(javascript, 0, false);
|
| }
|
|
|
| -ServiceRegistry* RenderFrameImpl::GetServiceRegistry() {
|
| - return &service_registry_;
|
| +shell::InterfaceRegistry* RenderFrameImpl::GetInterfaceRegistry() {
|
| + return interface_registry_.get();
|
| +}
|
| +
|
| +shell::InterfaceProvider* RenderFrameImpl::GetRemoteInterfaces() {
|
| + return remote_interfaces_.get();
|
| }
|
|
|
| #if defined(ENABLE_PLUGINS)
|
| @@ -2476,13 +2494,14 @@ void RenderFrameImpl::EnsureMojoBuiltinsAreAvailable(
|
| registry->AddBuiltinModule(isolate, mojo::edk::js::Support::kModuleName,
|
| mojo::edk::js::Support::GetModule(isolate));
|
| registry->AddBuiltinModule(
|
| - isolate, ServiceRegistryJsWrapper::kPerFrameModuleName,
|
| - ServiceRegistryJsWrapper::Create(isolate, context, &service_registry_)
|
| + isolate, InterfaceProviderJsWrapper::kPerFrameModuleName,
|
| + InterfaceProviderJsWrapper::Create(
|
| + isolate, context, remote_interfaces_.get())
|
| .ToV8());
|
| registry->AddBuiltinModule(
|
| - isolate, ServiceRegistryJsWrapper::kPerProcessModuleName,
|
| - ServiceRegistryJsWrapper::Create(
|
| - isolate, context, RenderThread::Get()->GetServiceRegistry())
|
| + isolate, InterfaceProviderJsWrapper::kPerProcessModuleName,
|
| + InterfaceProviderJsWrapper::Create(
|
| + isolate, context, RenderThread::Get()->GetRemoteInterfaces())
|
| .ToV8());
|
| }
|
|
|
| @@ -2521,7 +2540,7 @@ bool RenderFrameImpl::IsPasting() const {
|
|
|
| void RenderFrameImpl::GetInterfaceProvider(
|
| shell::mojom::InterfaceProviderRequest request) {
|
| - service_registry_.Bind(std::move(request));
|
| + interface_registry_->Bind(std::move(request));
|
| }
|
|
|
| // blink::WebFrameClient implementation ----------------------------------------
|
| @@ -4424,9 +4443,10 @@ bool RenderFrameImpl::exitFullscreen() {
|
| }
|
|
|
| blink::WebPermissionClient* RenderFrameImpl::permissionClient() {
|
| - if (!permission_client_)
|
| - permission_client_.reset(new PermissionDispatcher(GetServiceRegistry()));
|
| -
|
| + if (!permission_client_) {
|
| + permission_client_.reset(
|
| + new PermissionDispatcher(GetRemoteInterfaces()));
|
| + }
|
| return permission_client_.get();
|
| }
|
|
|
| @@ -4462,9 +4482,8 @@ void RenderFrameImpl::unregisterProtocolHandler(const WebString& scheme,
|
| }
|
|
|
| blink::WebBluetooth* RenderFrameImpl::bluetooth() {
|
| - if (!bluetooth_.get()) {
|
| - bluetooth_.reset(new WebBluetoothImpl(GetServiceRegistry()));
|
| - }
|
| + if (!bluetooth_.get())
|
| + bluetooth_.reset(new WebBluetoothImpl(GetRemoteInterfaces()));
|
| return bluetooth_.get();
|
| }
|
|
|
| @@ -6134,23 +6153,23 @@ media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() {
|
| return decoder_factory_.get();
|
| }
|
|
|
| -void RenderFrameImpl::RegisterMojoServices() {
|
| +void RenderFrameImpl::RegisterMojoInterfaces() {
|
| // Only main frame have ImageDownloader service.
|
| if (!frame_->parent()) {
|
| - GetServiceRegistry()->AddService(base::Bind(
|
| + GetInterfaceRegistry()->AddInterface(base::Bind(
|
| &ImageDownloaderImpl::CreateMojoService, base::Unretained(this)));
|
| }
|
| }
|
|
|
| template <typename Interface>
|
| void RenderFrameImpl::GetInterface(mojo::InterfaceRequest<Interface> request) {
|
| - GetServiceRegistry()->ConnectToRemoteService(std::move(request));
|
| + GetRemoteInterfaces()->GetInterface(std::move(request));
|
| }
|
|
|
| shell::mojom::InterfaceProviderPtr RenderFrameImpl::ConnectToApplication(
|
| const GURL& url) {
|
| if (!connector_)
|
| - GetServiceRegistry()->ConnectToRemoteService(mojo::GetProxy(&connector_));
|
| + GetRemoteInterfaces()->GetInterface(&connector_);
|
| shell::mojom::InterfaceProviderPtr interface_provider;
|
| shell::mojom::IdentityPtr target(shell::mojom::Identity::New());
|
| target->name = url.spec();
|
| @@ -6180,7 +6199,7 @@ void RenderFrameImpl::checkIfAudioSinkExistsAndIsAuthorized(
|
| }
|
|
|
| blink::ServiceRegistry* RenderFrameImpl::serviceRegistry() {
|
| - return &blink_service_registry_;
|
| + return blink_service_registry_.get();
|
| }
|
|
|
| blink::WebPlugin* RenderFrameImpl::GetWebPluginForFind() {
|
|
|