| 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)
|
|
|