| 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 e6d4b1da1e73e3b285bf29309c521a3e2afe1506..791b00c363c041c27f2bbcf8c2cb888b25a71e78 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"
|
| @@ -812,7 +813,7 @@ 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());
|
| + std::string());
|
| #if defined(OS_ANDROID) && defined(ENABLE_MOJO_CDM)
|
| registry->AddInterface(
|
| base::Bind(&ProvisionFetcherImpl::Create, this));
|
| @@ -822,6 +823,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));
|
|
|
| @@ -1536,6 +1539,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;
|
| + browser_info_ = local_info;
|
| + renderer_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.
|
| @@ -2587,7 +2599,19 @@ void RenderFrameHostImpl::SetUpMojoIfNeeded() {
|
| return;
|
|
|
| interface_registry_ = base::MakeUnique<service_manager::InterfaceRegistry>(
|
| - service_manager::Identity(), service_manager::InterfaceProviderSpec());
|
| + mojom::kNavigation_FrameSpec);
|
| +
|
| + ServiceManagerConnection* service_manager_connection =
|
| + BrowserContext::GetServiceManagerConnectionFor(
|
| + GetProcess()->GetBrowserContext());
|
| + // |service_manager_connection| may not be set in unit tests using
|
| + // TestBrowserContext.
|
| + if (service_manager_connection) {
|
| + on_connect_handler_id_ = service_manager_connection->AddOnConnectHandler(
|
| + base::Bind(&RenderFrameHostImpl::OnRendererConnect,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| + }
|
| +
|
| if (!GetProcess()->GetRemoteInterfaces())
|
| return;
|
|
|
| @@ -2607,6 +2631,16 @@ void RenderFrameHostImpl::SetUpMojoIfNeeded() {
|
|
|
| void RenderFrameHostImpl::InvalidateMojoConnection() {
|
| interface_registry_.reset();
|
| +
|
| + ServiceManagerConnection* service_manager_connection =
|
| + BrowserContext::GetServiceManagerConnectionFor(
|
| + GetProcess()->GetBrowserContext());
|
| + // |service_manager_connection| may be null in tests using TestBrowserContext.
|
| + if (service_manager_connection) {
|
| + service_manager_connection->RemoveOnConnectHandler(on_connect_handler_id_);
|
| + on_connect_handler_id_ = 0;
|
| + }
|
| +
|
| frame_.reset();
|
| frame_host_binding_.Close();
|
|
|
| @@ -2875,9 +2909,17 @@ void RenderFrameHostImpl::FilesSelectedInChooser(
|
|
|
| void RenderFrameHostImpl::GetInterfaceProvider(
|
| service_manager::mojom::InterfaceProviderRequest interfaces) {
|
| + service_manager::InterfaceProviderSpec browser_spec, renderer_spec;
|
| + // TODO(beng): CHECK these return true.
|
| + service_manager::GetInterfaceProviderSpec(
|
| + mojom::kNavigation_FrameSpec, browser_info_.interface_provider_specs,
|
| + &browser_spec);
|
| + service_manager::GetInterfaceProviderSpec(
|
| + mojom::kNavigation_FrameSpec, renderer_info_.interface_provider_specs,
|
| + &renderer_spec);
|
| interface_registry_->Bind(std::move(interfaces),
|
| - service_manager::Identity(),
|
| - service_manager::InterfaceProviderSpec());
|
| + browser_info_.identity, browser_spec,
|
| + renderer_info_.identity, renderer_spec);
|
| }
|
|
|
| #if defined(USE_EXTERNAL_POPUP_MENU)
|
|
|