Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(530)

Unified Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 2456493003: Add frame-specific InterfaceProviderSpec. (Closed)
Patch Set: . Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/frame_host/render_frame_host_impl.cc
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 2fd975e66ceff2b3345e3d2b75077b01168a85df..e4d7757bc63940046d2e1a455649ed7a2c33e000 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -88,6 +88,7 @@
#include "content/public/common/file_chooser_params.h"
#include "content/public/common/isolated_world_ids.h"
#include "content/public/common/service_manager_connection.h"
+#include "content/public/common/service_names.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/url_utils.h"
#include "device/generic_sensor/sensor_provider_impl.h"
@@ -811,8 +812,7 @@ void RenderFrameHostImpl::RenderProcessGone(SiteInstanceImpl* site_instance) {
void RenderFrameHostImpl::Create(
const service_manager::Identity& remote_identity,
media::mojom::InterfaceFactoryRequest request) {
- auto registry = base::MakeUnique<service_manager::InterfaceRegistry>(
- service_manager::Identity(), service_manager::InterfaceProviderSpec());
+ auto registry = base::MakeUnique<service_manager::InterfaceRegistry>();
#if defined(OS_ANDROID) && defined(ENABLE_MOJO_CDM)
registry->AddInterface(
base::Bind(&ProvisionFetcherImpl::Create, this));
@@ -822,6 +822,8 @@ void RenderFrameHostImpl::Create(
service_manager::mojom::InterfaceProviderPtr interfaces;
registry->Bind(GetProxy(&interfaces),
service_manager::Identity(),
+ service_manager::InterfaceProviderSpec(),
+ service_manager::Identity(),
service_manager::InterfaceProviderSpec());
media_registries_.push_back(std::move(registry));
@@ -1532,6 +1534,15 @@ void RenderFrameHostImpl::DisableSwapOutTimerForTesting() {
swapout_event_monitor_timeout_.reset();
}
+void RenderFrameHostImpl::OnRendererConnect(
+ const service_manager::ServiceInfo& local_info,
+ const service_manager::ServiceInfo& remote_info) {
+ if (remote_info.identity.name() != kRendererServiceName)
+ return;
+ local_info_ = local_info;
+ remote_info_ = remote_info;
+}
+
void RenderFrameHostImpl::OnContextMenu(const ContextMenuParams& params) {
// Validate the URLs in |params|. If the renderer can't request the URLs
// directly, don't show them in the context menu.
@@ -2582,8 +2593,15 @@ void RenderFrameHostImpl::SetUpMojoIfNeeded() {
if (interface_registry_.get())
return;
- interface_registry_ = base::MakeUnique<service_manager::InterfaceRegistry>(
- service_manager::Identity(), service_manager::InterfaceProviderSpec());
+ interface_registry_ = base::MakeUnique<service_manager::InterfaceRegistry>();
+
+ ServiceManagerConnection* service_manager_connection =
+ BrowserContext::GetServiceManagerConnectionFor(
+ GetProcess()->GetBrowserContext());
+ on_connect_handler_id_ = service_manager_connection->AddOnConnectHandler(
+ base::Bind(&RenderFrameHostImpl::OnRendererConnect,
+ weak_ptr_factory_.GetWeakPtr()));
+
if (!GetProcess()->GetRemoteInterfaces())
return;
@@ -2603,6 +2621,13 @@ void RenderFrameHostImpl::SetUpMojoIfNeeded() {
void RenderFrameHostImpl::InvalidateMojoConnection() {
interface_registry_.reset();
+
+ ServiceManagerConnection* service_manager_connection =
+ BrowserContext::GetServiceManagerConnectionFor(
+ GetProcess()->GetBrowserContext());
+ service_manager_connection->RemoveOnConnectHandler(on_connect_handler_id_);
+ on_connect_handler_id_ = 0;
+
frame_.reset();
frame_host_binding_.Close();
@@ -2867,9 +2892,17 @@ void RenderFrameHostImpl::FilesSelectedInChooser(
void RenderFrameHostImpl::GetInterfaceProvider(
service_manager::mojom::InterfaceProviderRequest interfaces) {
+ service_manager::InterfaceProviderSpec local_spec, remote_spec;
+ // TODO(beng): CHECK these return true.
+ service_manager::GetInterfaceProviderSpec(
+ mojom::kNavigation_FrameSpec, local_info_.interface_provider_specs,
+ &local_spec);
+ service_manager::GetInterfaceProviderSpec(
+ mojom::kNavigation_FrameSpec, remote_info_.interface_provider_specs,
+ &remote_spec);
interface_registry_->Bind(std::move(interfaces),
- service_manager::Identity(),
- service_manager::InterfaceProviderSpec());
+ local_info_.identity, local_spec,
+ remote_info_.identity, remote_spec);
}
#if defined(USE_EXTERNAL_POPUP_MENU)

Powered by Google App Engine
This is Rietveld 408576698