Skip to content

Commit

Permalink
[Fuchsia] Replace FuchsiaCdmProvider with FuchsiaMediaResourceProvider
Browse files Browse the repository at this point in the history
Renamed media::mojom::FuchsiaCdmProvider to
FuchsiaMediaResourceProvider and moved the implementation to the
content layer, so it can be shared with Chrome. This CL doesn't enable
CDM support in Chrome yet - Chrome will need to be updated to initialize
FuchsiaCdmManager as appropriate.

Bug: 1293605, 1258238
Change-Id: I8fec7dd1d38d1cc28d435174f3ff3f7c605be4df
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3484964
Reviewed-by: David Dorwin <ddorwin@chromium.org>
Reviewed-by: Nasko Oskov <nasko@chromium.org>
Commit-Queue: Sergey Ulanov <sergeyu@chromium.org>
Cr-Commit-Position: refs/heads/main@{#989660}
  • Loading branch information
SergeyUlanov authored and Chromium LUCI CQ committed Apr 6, 2022
1 parent 43f24fd commit ff752e4
Show file tree
Hide file tree
Showing 21 changed files with 214 additions and 218 deletions.
4 changes: 4 additions & 0 deletions content/browser/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -2462,9 +2462,13 @@ source_set("browser") {
"font_access/font_enumeration_data_source_fuchsia.cc",
"font_access/font_enumeration_data_source_fuchsia.h",
"memory/swap_metrics_driver_impl_fuchsia.cc",
"renderer_host/media/media_resource_provider_fuchsia.cc",
"renderer_host/media/media_resource_provider_fuchsia.h",
"speech/tts_fuchsia.cc",
]
deps += [
"//media/fuchsia/cdm/service",
"//media/fuchsia/mojom:fuchsia_media_resource_provider",
"//third_party/abseil-cpp:absl",
"//third_party/fuchsia-sdk/sdk/fidl/fuchsia.accessibility.semantics",
"//third_party/fuchsia-sdk/sdk/pkg/inspect",
Expand Down
12 changes: 11 additions & 1 deletion content/browser/browser_interface_binders.cc
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,12 @@
#if BUILDFLAG(IS_CHROMEOS)
#include "content/browser/lock_screen/lock_screen_service_impl.h"
#include "third_party/blink/public/mojom/lock_screen/lock_screen.mojom.h"
#endif // BUILDFLAG(IS_CHROMEOS)
#endif

#if BUILDFLAG(IS_FUCHSIA)
#include "content/browser/renderer_host/media/media_resource_provider_fuchsia.h"
#include "media/fuchsia/mojom/fuchsia_media_resource_provider.mojom.h"
#endif

namespace blink {
class StorageKey;
Expand Down Expand Up @@ -1170,6 +1175,11 @@ void PopulateBinderMapWithContext(
base::BindRepeating(&LockScreenServiceImpl::Create));
}
#endif

#if BUILDFLAG(IS_FUCHSIA)
map->Add<media::mojom::FuchsiaMediaResourceProvider>(
base::BindRepeating(&MediaResourceProviderFuchsia::Bind));
#endif
}

void PopulateBinderMap(RenderFrameHostImpl* host, mojo::BinderMap* map) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// Copyright 2022 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 "content/browser/renderer_host/media/media_resource_provider_fuchsia.h"

#include "base/bind.h"
#include "base/fuchsia/process_context.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/provision_fetcher_factory.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/storage_partition.h"
#include "media/base/provision_fetcher.h"
#include "media/fuchsia/cdm/service/fuchsia_cdm_manager.h"

namespace content {

// static
void MediaResourceProviderFuchsia::Bind(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<media::mojom::FuchsiaMediaResourceProvider>
receiver) {
// The object will delete itself when connection to the frame is broken.
new MediaResourceProviderFuchsia(frame_host, std::move(receiver));
}

MediaResourceProviderFuchsia::MediaResourceProviderFuchsia(
content::RenderFrameHost* render_frame_host,
mojo::PendingReceiver<media::mojom::FuchsiaMediaResourceProvider> receiver)
: DocumentService(render_frame_host, std::move(receiver)) {}
MediaResourceProviderFuchsia::~MediaResourceProviderFuchsia() = default;

void MediaResourceProviderFuchsia::CreateCdm(
const std::string& key_system,
fidl::InterfaceRequest<fuchsia::media::drm::ContentDecryptionModule>
request) {
auto* cdm_manager = media::FuchsiaCdmManager::GetInstance();
if (!cdm_manager) {
DLOG(WARNING) << "FuchsiaCdmManager hasn't been initialized. Dropping "
"CreateCdm() request.";
return;
}

scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory =
render_frame_host()
->GetStoragePartition()
->GetURLLoaderFactoryForBrowserProcess();

media::CreateFetcherCB create_fetcher_cb = base::BindRepeating(
&content::CreateProvisionFetcher, std::move(url_loader_factory));
cdm_manager->CreateAndProvision(
key_system, origin(), std::move(create_fetcher_cb), std::move(request));
}

} // namespace content
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Copyright 2022 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 CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_RESOURCE_PROVIDER_FUCHSIA_H_
#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_RESOURCE_PROVIDER_FUCHSIA_H_

#include "content/public/browser/document_service.h"
#include "media/fuchsia/mojom/fuchsia_media_resource_provider.mojom.h"

namespace content {

class MediaResourceProviderFuchsia final
: public content::DocumentService<
media::mojom::FuchsiaMediaResourceProvider> {
public:
~MediaResourceProviderFuchsia() final;

MediaResourceProviderFuchsia(const MediaResourceProviderFuchsia&) = delete;
MediaResourceProviderFuchsia& operator=(const MediaResourceProviderFuchsia&) =
delete;

static void Bind(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<media::mojom::FuchsiaMediaResourceProvider>
receiver);

private:
MediaResourceProviderFuchsia(
content::RenderFrameHost* render_frame_host,
mojo::PendingReceiver<media::mojom::FuchsiaMediaResourceProvider>
receiver);

// media::mojom::FuchsiaMediaResourceProvider implementation.
void CreateCdm(
const std::string& key_system,
fidl::InterfaceRequest<fuchsia::media::drm::ContentDecryptionModule>
request) final;
};

} // namespace content

#endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_RESOURCE_PROVIDER_FUCHSIA_H_
3 changes: 0 additions & 3 deletions fuchsia/engine/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,6 @@ component("web_engine_core") {
"//gpu/command_buffer/service",
"//media",
"//media/fuchsia/cdm/service",
"//media/fuchsia/mojom:cdm_provider",
"//media/mojo/common",
"//media/mojo/services",
"//mojo/public/cpp/bindings",
Expand Down Expand Up @@ -221,8 +220,6 @@ component("web_engine_core") {
"browser/accessibility_bridge.h",
"browser/ax_tree_converter.cc",
"browser/ax_tree_converter.h",
"browser/cdm_provider_service.cc",
"browser/cdm_provider_service.h",
"browser/content_directory_loader_factory.cc",
"browser/content_directory_loader_factory.h",
"browser/context_impl.cc",
Expand Down
142 changes: 0 additions & 142 deletions fuchsia/engine/browser/cdm_provider_service.cc

This file was deleted.

33 changes: 0 additions & 33 deletions fuchsia/engine/browser/cdm_provider_service.h

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,12 @@

#include "fuchsia/engine/browser/web_engine_browser_interface_binders.h"

#include "fuchsia/engine/browser/cdm_provider_service.h"
#include "fuchsia/engine/browser/frame_impl.h"
#include "fuchsia/engine/browser/web_engine_media_resource_provider_impl.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"

void PopulateFuchsiaFrameBinders(
mojo::BinderMapWithContext<content::RenderFrameHost*>* map,
CdmProviderService* cdm_provider_service) {
mojo::BinderMapWithContext<content::RenderFrameHost*>* map) {
map->Add<mojom::WebEngineMediaResourceProvider>(
base::BindRepeating(&WebEngineMediaResourceProviderImpl::Bind));
map->Add<media::mojom::FuchsiaCdmProvider>(base::BindRepeating(
&CdmProviderService::Bind, base::Unretained(cdm_provider_service)));
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,11 @@ namespace content {
class RenderFrameHost;
} // namespace content

class CdmProviderService;

// PopulateFuchsiaFrameBinders() registers BrowserInterfaceBroker's
// GetInterface() handler callbacks for Fuchsia-specific RenferFrame-scoped
// interfaces. This mechanism will replace interface registries and binders used
// for handling InterfaceProvider's GetInterface() calls (see crbug.com/718652).
void PopulateFuchsiaFrameBinders(
mojo::BinderMapWithContext<content::RenderFrameHost*>* map,
CdmProviderService* cdm_provider_service);
mojo::BinderMapWithContext<content::RenderFrameHost*>* map);

#endif // FUCHSIA_ENGINE_BROWSER_WEB_ENGINE_BROWSER_INTERFACE_BINDERS_H_
Loading

0 comments on commit ff752e4

Please sign in to comment.