Commit f824dc03 authored by Miyoung Shin's avatar Miyoung Shin Committed by Commit Bot

Convert FuchsiaCdmProvider client to use BrowserInterfaceBroker

This CL converts FuchsiaCdmProvider mojom interface client in
content and media/fuchsia/cdm to use BrowserInterfaceBroker.
WebEngineContentBrowserClient derived from ContentBrowserClient
registers FuchsiaCdmProvider's binder.

Bug: 936482
Change-Id: I7062658611074dac7e2697d6592415ce984c7b2b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1924092Reviewed-by: default avatarSergey Ulanov <sergeyu@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarOksana Zhuravlova <oksamyt@chromium.org>
Commit-Queue: Miyoung Shin <myid.shin@igalia.com>
Cr-Commit-Position: refs/heads/master@{#718111}
parent 23a6ba8b
...@@ -202,7 +202,6 @@ const service_manager::Manifest& GetContentBrowserManifest() { ...@@ -202,7 +202,6 @@ const service_manager::Manifest& GetContentBrowserManifest() {
"content.mojom.RendererAudioOutputStreamFactory", "content.mojom.RendererAudioOutputStreamFactory",
"device.mojom.Geolocation", "device.mojom.Geolocation",
"discardable_memory.mojom.DiscardableSharedMemoryManager", "discardable_memory.mojom.DiscardableSharedMemoryManager",
"media.mojom.FuchsiaCdmProvider",
"media.mojom.InterfaceFactory", "media.mojom.InterfaceFactory",
"media.mojom.MediaMetricsProvider", "media.mojom.MediaMetricsProvider",
"media.mojom.RemoterFactory", "media.mojom.RemoterFactory",
......
...@@ -622,7 +622,8 @@ media::CdmFactory* MediaFactory::GetCdmFactory() { ...@@ -622,7 +622,8 @@ media::CdmFactory* MediaFactory::GetCdmFactory() {
return cdm_factory_.get(); return cdm_factory_.get();
#if defined(OS_FUCHSIA) #if defined(OS_FUCHSIA)
cdm_factory_ = media::CreateFuchsiaCdmFactory(remote_interfaces_); cdm_factory_ = media::CreateFuchsiaCdmFactory(
render_frame_->GetBrowserInterfaceBroker());
#elif BUILDFLAG(ENABLE_MOJO_CDM) #elif BUILDFLAG(ENABLE_MOJO_CDM)
cdm_factory_ = cdm_factory_ =
std::make_unique<media::MojoCdmFactory>(GetMediaInterfaceFactory()); std::make_unique<media::MojoCdmFactory>(GetMediaInterfaceFactory());
......
...@@ -138,6 +138,8 @@ component("web_engine_core") { ...@@ -138,6 +138,8 @@ component("web_engine_core") {
"browser/url_request_rewrite_rules_manager.h", "browser/url_request_rewrite_rules_manager.h",
"browser/web_engine_browser_context.cc", "browser/web_engine_browser_context.cc",
"browser/web_engine_browser_context.h", "browser/web_engine_browser_context.h",
"browser/web_engine_browser_interface_binders.cc",
"browser/web_engine_browser_interface_binders.h",
"browser/web_engine_browser_main.cc", "browser/web_engine_browser_main.cc",
"browser/web_engine_browser_main.h", "browser/web_engine_browser_main.h",
"browser/web_engine_browser_main_parts.cc", "browser/web_engine_browser_main_parts.cc",
......
...@@ -2,3 +2,7 @@ per-file *.mojom=set noparent ...@@ -2,3 +2,7 @@ per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS per-file *.mojom=file://ipc/SECURITY_OWNERS
per-file *_type_converter*.*=set noparent per-file *_type_converter*.*=set noparent
per-file *_type_converter*.*=file://ipc/SECURITY_OWNERS per-file *_type_converter*.*=file://ipc/SECURITY_OWNERS
# For security review.
per-file web_engine_browser_interface_binders.cc=set noparent
per-file web_engine_browser_interface_binders.cc=file://ipc/SECURITY_OWNERS
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "fuchsia/engine/browser/web_engine_browser_interface_binders.h"
#include "fuchsia/engine/browser/web_engine_cdm_service.h"
#include "media/fuchsia/mojom/fuchsia_cdm_provider.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
void PopulateFuchsiaFrameBinders(
service_manager::BinderMapWithContext<content::RenderFrameHost*>* map,
WebEngineCdmService* cdm_service) {
map->Add<::media::mojom::FuchsiaCdmProvider>(
base::BindRepeating(&WebEngineCdmService::BindFuchsiaCdmProvider,
base::Unretained(cdm_service)));
}
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FUCHSIA_ENGINE_BROWSER_WEB_ENGINE_BROWSER_INTERFACE_BINDERS_H_
#define FUCHSIA_ENGINE_BROWSER_WEB_ENGINE_BROWSER_INTERFACE_BINDERS_H_
#include "services/service_manager/public/cpp/binder_map.h"
namespace content {
class RenderFrameHost;
} // namespace content
class WebEngineCdmService;
// PopulateFuchsiaFrameBinders() registers BrowserInterfaceBroker's
// GetInterface() handler callbacks for fuchsia-specific document-scoped
// interfaces. This mechanism will replace interface registries and binders used
// for handling InterfaceProvider's GetInterface() calls (see crbug.com/718652).
void PopulateFuchsiaFrameBinders(
service_manager::BinderMapWithContext<content::RenderFrameHost*>* map,
WebEngineCdmService* cdm_service);
#endif // FUCHSIA_ENGINE_BROWSER_WEB_ENGINE_BROWSER_INTERFACE_BINDERS_H_
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include "media/base/provision_fetcher.h" #include "media/base/provision_fetcher.h"
#include "media/fuchsia/cdm/service/fuchsia_cdm_manager.h" #include "media/fuchsia/cdm/service/fuchsia_cdm_manager.h"
#include "media/fuchsia/mojom/fuchsia_cdm_provider.mojom.h" #include "media/fuchsia/mojom/fuchsia_cdm_provider.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "third_party/widevine/cdm/widevine_cdm_common.h" #include "third_party/widevine/cdm/widevine_cdm_common.h"
namespace { namespace {
...@@ -69,23 +68,6 @@ void FuchsiaCdmProviderImpl::CreateCdmInterface( ...@@ -69,23 +68,6 @@ void FuchsiaCdmProviderImpl::CreateCdmInterface(
std::move(request)); std::move(request));
} }
void BindFuchsiaCdmProvider(
media::FuchsiaCdmManager* cdm_manager,
mojo::PendingReceiver<media::mojom::FuchsiaCdmProvider> receiver,
content::RenderFrameHost* const frame_host) {
scoped_refptr<network::SharedURLLoaderFactory> loader_factory =
content::BrowserContext::GetDefaultStoragePartition(
frame_host->GetProcess()->GetBrowserContext())
->GetURLLoaderFactoryForBrowserProcess();
// The object will delete itself when connection to the frame is broken.
new FuchsiaCdmProviderImpl(
cdm_manager,
base::BindRepeating(&content::CreateProvisionFetcher,
std::move(loader_factory)),
frame_host, std::move(receiver));
}
class WidevineHandler : public media::FuchsiaCdmManager::KeySystemHandler { class WidevineHandler : public media::FuchsiaCdmManager::KeySystemHandler {
public: public:
WidevineHandler() = default; WidevineHandler() = default;
...@@ -154,16 +136,24 @@ std::unique_ptr<media::FuchsiaCdmManager> CreateCdmManager() { ...@@ -154,16 +136,24 @@ std::unique_ptr<media::FuchsiaCdmManager> CreateCdmManager() {
} // namespace } // namespace
WebEngineCdmService::WebEngineCdmService( WebEngineCdmService::WebEngineCdmService() : cdm_manager_(CreateCdmManager()) {
service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>*
registry)
: cdm_manager_(CreateCdmManager()), registry_(registry) {
DCHECK(cdm_manager_); DCHECK(cdm_manager_);
DCHECK(registry_);
registry_->AddInterface(
base::BindRepeating(&BindFuchsiaCdmProvider, cdm_manager_.get()));
} }
WebEngineCdmService::~WebEngineCdmService() { WebEngineCdmService::~WebEngineCdmService() = default;
registry_->RemoveInterface<media::mojom::FuchsiaCdmProvider>();
void WebEngineCdmService::BindFuchsiaCdmProvider(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<media::mojom::FuchsiaCdmProvider> receiver) {
scoped_refptr<network::SharedURLLoaderFactory> loader_factory =
content::BrowserContext::GetDefaultStoragePartition(
frame_host->GetProcess()->GetBrowserContext())
->GetURLLoaderFactoryForBrowserProcess();
// The object will delete itself when connection to the frame is broken.
new FuchsiaCdmProviderImpl(
cdm_manager_.get(),
base::BindRepeating(&content::CreateProvisionFetcher,
std::move(loader_factory)),
frame_host, std::move(receiver));
} }
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
#include <memory> #include <memory>
#include "services/service_manager/public/cpp/binder_registry.h" #include "media/fuchsia/mojom/fuchsia_cdm_provider.mojom-forward.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
namespace content { namespace content {
class RenderFrameHost; class RenderFrameHost;
...@@ -19,19 +20,17 @@ class FuchsiaCdmManager; ...@@ -19,19 +20,17 @@ class FuchsiaCdmManager;
class WebEngineCdmService { class WebEngineCdmService {
public: public:
explicit WebEngineCdmService( WebEngineCdmService();
service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>* WebEngineCdmService(const WebEngineCdmService&) = delete;
registry); WebEngineCdmService& operator=(const WebEngineCdmService&) = delete;
~WebEngineCdmService(); ~WebEngineCdmService();
void BindFuchsiaCdmProvider(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<media::mojom::FuchsiaCdmProvider> receiver);
private: private:
std::unique_ptr<media::FuchsiaCdmManager> cdm_manager_; std::unique_ptr<media::FuchsiaCdmManager> cdm_manager_;
// Not owned pointer. |registry_| must outlive |this|.
service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>* const
registry_;
DISALLOW_COPY_AND_ASSIGN(WebEngineCdmService);
}; };
#endif // FUCHSIA_ENGINE_BROWSER_WEB_ENGINE_CDM_SERVICE_H_ #endif // FUCHSIA_ENGINE_BROWSER_WEB_ENGINE_CDM_SERVICE_H_
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "content/public/common/web_preferences.h" #include "content/public/common/web_preferences.h"
#include "fuchsia/engine/browser/url_request_rewrite_rules_manager.h" #include "fuchsia/engine/browser/url_request_rewrite_rules_manager.h"
#include "fuchsia/engine/browser/web_engine_browser_context.h" #include "fuchsia/engine/browser/web_engine_browser_context.h"
#include "fuchsia/engine/browser/web_engine_browser_interface_binders.h"
#include "fuchsia/engine/browser/web_engine_browser_main_parts.h" #include "fuchsia/engine/browser/web_engine_browser_main_parts.h"
#include "fuchsia/engine/browser/web_engine_devtools_controller.h" #include "fuchsia/engine/browser/web_engine_devtools_controller.h"
#include "fuchsia/engine/common/web_engine_content_client.h" #include "fuchsia/engine/common/web_engine_content_client.h"
...@@ -56,7 +57,7 @@ class DevToolsManagerDelegate : public content::DevToolsManagerDelegate { ...@@ -56,7 +57,7 @@ class DevToolsManagerDelegate : public content::DevToolsManagerDelegate {
WebEngineContentBrowserClient::WebEngineContentBrowserClient( WebEngineContentBrowserClient::WebEngineContentBrowserClient(
fidl::InterfaceRequest<fuchsia::web::Context> request) fidl::InterfaceRequest<fuchsia::web::Context> request)
: request_(std::move(request)), cdm_service_(&mojo_service_registry_) { : request_(std::move(request)) {
allow_insecure_content_ = base::CommandLine::ForCurrentProcess()->HasSwitch( allow_insecure_content_ = base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAllowRunningInsecureContent); switches::kAllowRunningInsecureContent);
} }
...@@ -107,12 +108,9 @@ void WebEngineContentBrowserClient::OverrideWebkitPrefs( ...@@ -107,12 +108,9 @@ void WebEngineContentBrowserClient::OverrideWebkitPrefs(
web_prefs->allow_running_insecure_content = true; web_prefs->allow_running_insecure_content = true;
} }
void WebEngineContentBrowserClient::BindInterfaceRequestFromFrame( void WebEngineContentBrowserClient::RegisterBrowserInterfaceBindersForFrame(
content::RenderFrameHost* render_frame_host, service_manager::BinderMapWithContext<content::RenderFrameHost*>* map) {
const std::string& interface_name, PopulateFuchsiaFrameBinders(map, &cdm_service_);
mojo::ScopedMessagePipeHandle interface_pipe) {
mojo_service_registry_.BindInterface(
interface_name, std::move(interface_pipe), render_frame_host);
} }
void WebEngineContentBrowserClient:: void WebEngineContentBrowserClient::
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include "content/public/browser/content_browser_client.h" #include "content/public/browser/content_browser_client.h"
#include "fuchsia/engine/browser/content_directory_loader_factory.h" #include "fuchsia/engine/browser/content_directory_loader_factory.h"
#include "fuchsia/engine/browser/web_engine_cdm_service.h" #include "fuchsia/engine/browser/web_engine_cdm_service.h"
#include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/binder_map.h"
class WebEngineBrowserMainParts; class WebEngineBrowserMainParts;
...@@ -36,10 +36,9 @@ class WebEngineContentBrowserClient : public content::ContentBrowserClient { ...@@ -36,10 +36,9 @@ class WebEngineContentBrowserClient : public content::ContentBrowserClient {
std::string GetUserAgent() final; std::string GetUserAgent() final;
void OverrideWebkitPrefs(content::RenderViewHost* rvh, void OverrideWebkitPrefs(content::RenderViewHost* rvh,
content::WebPreferences* web_prefs) final; content::WebPreferences* web_prefs) final;
void BindInterfaceRequestFromFrame( void RegisterBrowserInterfaceBindersForFrame(
content::RenderFrameHost* render_frame_host, service_manager::BinderMapWithContext<content::RenderFrameHost*>* map)
const std::string& interface_name, final;
mojo::ScopedMessagePipeHandle interface_pipe) final;
void RegisterNonNetworkNavigationURLLoaderFactories( void RegisterNonNetworkNavigationURLLoaderFactories(
int frame_tree_node_id, int frame_tree_node_id,
NonNetworkURLLoaderFactoryMap* factories) final; NonNetworkURLLoaderFactoryMap* factories) final;
...@@ -67,8 +66,6 @@ class WebEngineContentBrowserClient : public content::ContentBrowserClient { ...@@ -67,8 +66,6 @@ class WebEngineContentBrowserClient : public content::ContentBrowserClient {
// Owned by content::BrowserMainLoop. // Owned by content::BrowserMainLoop.
WebEngineBrowserMainParts* main_parts_; WebEngineBrowserMainParts* main_parts_;
service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>
mojo_service_registry_;
WebEngineCdmService cdm_service_; WebEngineCdmService cdm_service_;
bool allow_insecure_content_; bool allow_insecure_content_;
......
include_rules = [ include_rules = [
"+fuchsia/base", "+fuchsia/base",
"+mojo/public", "+mojo/public",
"+services/service_manager/public", "+third_party/blink/public/common",
] ]
...@@ -15,6 +15,6 @@ source_set("client") { ...@@ -15,6 +15,6 @@ source_set("client") {
deps = [ deps = [
"//media", "//media",
"//media/fuchsia/mojom", "//media/fuchsia/mojom",
"//services/service_manager/public/cpp", "//third_party/blink/public:blink_headers",
] ]
} }
...@@ -6,13 +6,14 @@ ...@@ -6,13 +6,14 @@
#include "media/fuchsia/cdm/client/mojo_fuchsia_cdm_provider.h" #include "media/fuchsia/cdm/client/mojo_fuchsia_cdm_provider.h"
#include "media/fuchsia/cdm/fuchsia_cdm_factory.h" #include "media/fuchsia/cdm/fuchsia_cdm_factory.h"
#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
namespace media { namespace media {
std::unique_ptr<CdmFactory> CreateFuchsiaCdmFactory( std::unique_ptr<CdmFactory> CreateFuchsiaCdmFactory(
service_manager::InterfaceProvider* interface_provider) { blink::BrowserInterfaceBrokerProxy* interface_broker) {
return std::make_unique<FuchsiaCdmFactory>( return std::make_unique<FuchsiaCdmFactory>(
std::make_unique<MojoFuchsiaCdmProvider>(interface_provider)); std::make_unique<MojoFuchsiaCdmProvider>(interface_broker));
} }
} // namespace media } // namespace media
...@@ -7,15 +7,15 @@ ...@@ -7,15 +7,15 @@
#include <memory> #include <memory>
namespace service_manager { namespace blink {
class InterfaceProvider; class BrowserInterfaceBrokerProxy;
} }
namespace media { namespace media {
class CdmFactory; class CdmFactory;
std::unique_ptr<CdmFactory> CreateFuchsiaCdmFactory( std::unique_ptr<CdmFactory> CreateFuchsiaCdmFactory(
service_manager::InterfaceProvider* interface_provider); blink::BrowserInterfaceBrokerProxy* interface_broker);
} // namespace media } // namespace media
......
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "media/fuchsia/cdm/client/mojo_fuchsia_cdm_provider.h" #include "media/fuchsia/cdm/client/mojo_fuchsia_cdm_provider.h"
#include "services/service_manager/public/cpp/interface_provider.h" #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
namespace media { namespace media {
MojoFuchsiaCdmProvider::MojoFuchsiaCdmProvider( MojoFuchsiaCdmProvider::MojoFuchsiaCdmProvider(
service_manager::InterfaceProvider* interface_provider) blink::BrowserInterfaceBrokerProxy* interface_broker)
: interface_provider_(interface_provider) { : interface_broker_(interface_broker) {
DCHECK(interface_provider_); DCHECK(interface_broker_);
} }
MojoFuchsiaCdmProvider::~MojoFuchsiaCdmProvider() = default; MojoFuchsiaCdmProvider::~MojoFuchsiaCdmProvider() = default;
...@@ -20,8 +20,7 @@ void MojoFuchsiaCdmProvider::CreateCdmInterface( ...@@ -20,8 +20,7 @@ void MojoFuchsiaCdmProvider::CreateCdmInterface(
fidl::InterfaceRequest<fuchsia::media::drm::ContentDecryptionModule> fidl::InterfaceRequest<fuchsia::media::drm::ContentDecryptionModule>
cdm_request) { cdm_request) {
if (!cdm_provider_) { if (!cdm_provider_) {
interface_provider_->GetInterface( interface_broker_->GetInterface(cdm_provider_.BindNewPipeAndPassReceiver());
cdm_provider_.BindNewPipeAndPassReceiver());
} }
cdm_provider_->CreateCdmInterface(key_system, std::move(cdm_request)); cdm_provider_->CreateCdmInterface(key_system, std::move(cdm_request));
......
...@@ -10,17 +10,17 @@ ...@@ -10,17 +10,17 @@
#include "media/fuchsia/mojom/fuchsia_cdm_provider.mojom.h" #include "media/fuchsia/mojom/fuchsia_cdm_provider.mojom.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
namespace service_manager { namespace blink {
class InterfaceProvider; class BrowserInterfaceBrokerProxy;
} }
namespace media { namespace media {
class MojoFuchsiaCdmProvider : public FuchsiaCdmProvider { class MojoFuchsiaCdmProvider : public FuchsiaCdmProvider {
public: public:
// |interface_provider| must outlive this class. // |interface_broker| must outlive this class.
explicit MojoFuchsiaCdmProvider( explicit MojoFuchsiaCdmProvider(
service_manager::InterfaceProvider* interface_provider); blink::BrowserInterfaceBrokerProxy* interface_broker);
~MojoFuchsiaCdmProvider() override; ~MojoFuchsiaCdmProvider() override;
// FuchsiaCdmProvider implementation: // FuchsiaCdmProvider implementation:
...@@ -30,7 +30,7 @@ class MojoFuchsiaCdmProvider : public FuchsiaCdmProvider { ...@@ -30,7 +30,7 @@ class MojoFuchsiaCdmProvider : public FuchsiaCdmProvider {
cdm_request) override; cdm_request) override;
private: private:
service_manager::InterfaceProvider* const interface_provider_; blink::BrowserInterfaceBrokerProxy* const interface_broker_;
mojo::Remote<media::mojom::FuchsiaCdmProvider> cdm_provider_; mojo::Remote<media::mojom::FuchsiaCdmProvider> cdm_provider_;
DISALLOW_COPY_AND_ASSIGN(MojoFuchsiaCdmProvider); DISALLOW_COPY_AND_ASSIGN(MojoFuchsiaCdmProvider);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment