media: Remove Browser CDM implementation
This has been superceded by mojo CDM.
BUG=581746,570711
TEST=This removes an obsolete code path.
Review-Url: https://codereview.chromium.org/2380743004
Cr-Commit-Position: refs/heads/master@{#422140}
diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn
index 78cfa35..05d48a9 100644
--- a/build/config/BUILD.gn
+++ b/build/config/BUILD.gn
@@ -72,10 +72,6 @@
# TODO(brettw) should probably be "=1"
defines += [ "ENABLE_PEPPER_CDMS" ]
}
- if (enable_browser_cdms) {
- # TODO(brettw) should probably be "=1"
- defines += [ "ENABLE_BROWSER_CDMS" ]
- }
if (enable_plugins) {
defines += [ "ENABLE_PLUGINS=1" ]
}
diff --git a/build/config/features.gni b/build/config/features.gni
index 1f7ae34..05a25510 100644
--- a/build/config/features.gni
+++ b/build/config/features.gni
@@ -67,10 +67,6 @@
enable_remoting = !is_ios && !is_chromecast
- # Enables browser side Content Decryption Modules. Required for embedders
- # (e.g. Android and ChromeCast) that use a browser side CDM.
- enable_browser_cdms = is_android || is_chromecast
-
# Hangout services is an extension that adds extra features to Hangouts.
# For official GYP builds, this flag is set.
enable_hangout_services_extension = false
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 1f21772..f897a941 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -1899,13 +1899,6 @@
deps += [ "//dbus" ]
}
- if (enable_browser_cdms) {
- sources += [
- "media/cdm/browser_cdm_manager.cc",
- "media/cdm/browser_cdm_manager.h",
- ]
- }
-
if (is_linux) {
deps += [ "//third_party/boringssl" ]
}
diff --git a/content/browser/media/android/media_web_contents_observer_android.cc b/content/browser/media/android/media_web_contents_observer_android.cc
index af973d4..2e585b1 100644
--- a/content/browser/media/android/media_web_contents_observer_android.cc
+++ b/content/browser/media/android/media_web_contents_observer_android.cc
@@ -10,7 +10,6 @@
#include "content/browser/media/android/browser_media_player_manager.h"
#include "content/browser/media/android/browser_media_session_manager.h"
#include "content/browser/media/android/browser_surface_view_manager.h"
-#include "content/browser/media/cdm/browser_cdm_manager.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/media/media_player_delegate_messages.h"
#include "content/common/media/media_player_messages_android.h"
@@ -115,21 +114,9 @@
RenderFrameHost* render_frame_host) {
MediaWebContentsObserver::RenderFrameDeleted(render_frame_host);
- // Always destroy the media players before CDMs because we do not support
- // detaching CDMs from media players yet. See http://crbug.com/330324
media_player_managers_.erase(render_frame_host);
media_session_managers_.erase(render_frame_host);
surface_view_managers_.erase(render_frame_host);
-
- // TODO(xhwang): Currently MediaWebContentsObserver, BrowserMediaPlayerManager
- // and BrowserCdmManager all run on browser UI thread. So this call is okay.
- // In the future we need to support the case where MediaWebContentsObserver
- // get notified on browser UI thread, but BrowserMediaPlayerManager and
- // BrowserCdmManager run on a different thread.
- BrowserCdmManager* browser_cdm_manager =
- BrowserCdmManager::FromProcess(render_frame_host->GetProcess()->GetID());
- if (browser_cdm_manager)
- browser_cdm_manager->RenderFrameDeleted(render_frame_host->GetRoutingID());
}
bool MediaWebContentsObserverAndroid::OnMessageReceived(
@@ -141,9 +128,6 @@
if (OnMediaPlayerMessageReceived(msg, render_frame_host))
return true;
- if (OnMediaPlayerSetCdmMessageReceived(msg, render_frame_host))
- return true;
-
if (OnMediaSessionMessageReceived(msg, render_frame_host))
return true;
@@ -197,18 +181,6 @@
return handled;
}
-bool MediaWebContentsObserverAndroid::OnMediaPlayerSetCdmMessageReceived(
- const IPC::Message& msg,
- RenderFrameHost* render_frame_host) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(MediaWebContentsObserverAndroid, msg,
- render_frame_host)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetCdm, OnSetCdm)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
bool MediaWebContentsObserverAndroid::OnMediaSessionMessageReceived(
const IPC::Message& msg,
RenderFrameHost* render_frame_host) {
@@ -246,35 +218,4 @@
return handled;
}
-void MediaWebContentsObserverAndroid::OnSetCdm(
- RenderFrameHost* render_frame_host,
- int player_id,
- int cdm_id) {
- media::MediaPlayerAndroid* media_player =
- GetMediaPlayerManager(render_frame_host)->GetPlayer(player_id);
- if (!media_player) {
- NOTREACHED() << "OnSetCdm: MediaPlayer not found for " << player_id;
- return;
- }
-
- // MediaPlayerAndroid runs on the same thread as BrowserCdmManager.
- BrowserCdmManager* browser_cdm_manager =
- BrowserCdmManager::FromProcess(render_frame_host->GetProcess()->GetID());
- if (!browser_cdm_manager) {
- NOTREACHED() << "OnSetCdm: CDM not found for " << cdm_id;
- return;
- }
-
- scoped_refptr<media::MediaKeys> cdm =
- browser_cdm_manager->GetCdm(render_frame_host->GetRoutingID(), cdm_id);
- if (!cdm) {
- NOTREACHED() << "OnSetCdm: CDM not found for " << cdm_id;
- return;
- }
-
- // TODO(xhwang): This could possibly fail. In that case we should reject the
- // promise.
- media_player->SetCdm(cdm);
-}
-
} // namespace content
diff --git a/content/browser/media/android/media_web_contents_observer_android.h b/content/browser/media/android/media_web_contents_observer_android.h
index f546aae..f000a2c 100644
--- a/content/browser/media/android/media_web_contents_observer_android.h
+++ b/content/browser/media/android/media_web_contents_observer_android.h
@@ -20,7 +20,6 @@
namespace content {
-class BrowserCdmManager;
class BrowserMediaPlayerManager;
class BrowserMediaSessionManager;
class BrowserSurfaceViewManager;
@@ -82,17 +81,12 @@
bool OnMediaPlayerMessageReceived(const IPC::Message& message,
RenderFrameHost* render_frame_host);
- bool OnMediaPlayerSetCdmMessageReceived(const IPC::Message& message,
- RenderFrameHost* render_frame_host);
-
bool OnMediaSessionMessageReceived(const IPC::Message& message,
RenderFrameHost* render_frame_host);
bool OnSurfaceViewManagerMessageReceived(const IPC::Message& message,
RenderFrameHost* render_frame_host);
- void OnSetCdm(RenderFrameHost* render_frame_host, int player_id, int cdm_id);
-
// Map from RenderFrameHost* to BrowserMediaPlayerManager.
using MediaPlayerManagerMap =
base::ScopedPtrHashMap<RenderFrameHost*,
diff --git a/content/browser/media/cdm/browser_cdm_manager.cc b/content/browser/media/cdm/browser_cdm_manager.cc
deleted file mode 100644
index 7202c95..0000000
--- a/content/browser/media/cdm/browser_cdm_manager.cc
+++ /dev/null
@@ -1,716 +0,0 @@
-// Copyright 2014 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/media/cdm/browser_cdm_manager.h"
-
-#include <stddef.h>
-
-#include <memory>
-#include <string>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/lazy_instance.h"
-#include "base/task_runner.h"
-#include "build/build_config.h"
-#include "content/public/browser/browser_context.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/content_browser_client.h"
-#include "content/public/browser/permission_manager.h"
-#include "content/public/browser/permission_type.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_process_host_observer.h"
-#include "content/public/browser/storage_partition.h"
-#include "content/public/browser/web_contents.h"
-#include "media/base/cdm_config.h"
-#include "media/base/cdm_factory.h"
-#include "media/base/cdm_promise.h"
-#include "media/base/limits.h"
-
-#if defined(OS_ANDROID)
-#include "content/public/browser/android/provision_fetcher_factory.h"
-#include "content/public/common/renderer_preferences.h"
-#include "media/base/android/android_cdm_factory.h"
-#endif
-
-namespace content {
-
-using media::MediaKeys;
-
-namespace {
-
-#if defined(OS_ANDROID)
-// Android only supports 128-bit key IDs.
-const size_t kAndroidKeyIdBytes = 128 / 8;
-#endif
-
-// The ID used in this class is a concatenation of |render_frame_id| and
-// |cdm_id|, i.e. (render_frame_id << 32) + cdm_id.
-
-uint64_t GetId(int render_frame_id, int cdm_id) {
- return (static_cast<uint64_t>(render_frame_id) << 32) +
- static_cast<uint64_t>(cdm_id);
-}
-
-bool IdBelongsToFrame(uint64_t id, int render_frame_id) {
- return (id >> 32) == static_cast<uint64_t>(render_frame_id);
-}
-
-// media::CdmPromiseTemplate implementation backed by a BrowserCdmManager.
-template <typename... T>
-class CdmPromiseInternal : public media::CdmPromiseTemplate<T...> {
- public:
- CdmPromiseInternal(const base::WeakPtr<BrowserCdmManager>& manager,
- int render_frame_id,
- int cdm_id,
- uint32_t promise_id)
- : manager_(manager),
- render_frame_id_(render_frame_id),
- cdm_id_(cdm_id),
- promise_id_(promise_id) {
- DCHECK(manager_);
- }
-
- ~CdmPromiseInternal() final {
- if (!IsPromiseSettled())
- RejectPromiseOnDestruction();
- }
-
- // CdmPromiseTemplate<> implementation.
- void resolve(const T&... result) final;
-
- void reject(MediaKeys::Exception exception,
- uint32_t system_code,
- const std::string& error_message) final {
- MarkPromiseSettled();
- if (manager_) {
- manager_->RejectPromise(render_frame_id_, cdm_id_, promise_id_, exception,
- system_code, error_message);
- }
- }
-
- private:
- using media::CdmPromiseTemplate<T...>::IsPromiseSettled;
- using media::CdmPromiseTemplate<T...>::MarkPromiseSettled;
- using media::CdmPromiseTemplate<T...>::RejectPromiseOnDestruction;
-
- base::WeakPtr<BrowserCdmManager> const manager_;
- const int render_frame_id_;
- const int cdm_id_;
- const uint32_t promise_id_;
-};
-
-template <>
-void CdmPromiseInternal<>::resolve() {
- MarkPromiseSettled();
- if (manager_)
- manager_->ResolvePromise(render_frame_id_, cdm_id_, promise_id_);
-}
-
-template <>
-void CdmPromiseInternal<std::string>::resolve(const std::string& session_id) {
- MarkPromiseSettled();
- if (manager_) {
- manager_->ResolvePromiseWithSession(render_frame_id_, cdm_id_, promise_id_,
- session_id);
- }
-}
-
-typedef CdmPromiseInternal<> SimplePromise;
-typedef CdmPromiseInternal<std::string> NewSessionPromise;
-
-// Render process ID to BrowserCdmManager map.
-typedef std::map<int, BrowserCdmManager*> BrowserCdmManagerMap;
-base::LazyInstance<BrowserCdmManagerMap>::Leaky g_browser_cdm_manager_map =
- LAZY_INSTANCE_INITIALIZER;
-
-// Keeps the BrowserCdmManager alive, and in the global map, for as long as the
-// RenderProcessHost is connected to the child process. This class is a
-// self-owned observer.
-class BrowserCdmManagerProcessWatcher : public RenderProcessHostObserver {
- public:
- BrowserCdmManagerProcessWatcher(
- int render_process_id,
- const scoped_refptr<BrowserCdmManager>& manager)
- : browser_cdm_manager_(manager) {
- RenderProcessHost::FromID(render_process_id)->AddObserver(this);
- CHECK(g_browser_cdm_manager_map.Get()
- .insert(std::make_pair(render_process_id, manager.get()))
- .second);
- }
-
- // RenderProcessHostObserver:
- void RenderProcessExited(RenderProcessHost* host,
- base::TerminationStatus /* status */,
- int /* exit_code */) override {
- RemoveHostObserverAndDestroy(host);
- }
-
- void RenderProcessHostDestroyed(RenderProcessHost* host) override {
- RemoveHostObserverAndDestroy(host);
- }
-
- private:
- void RemoveHostObserverAndDestroy(RenderProcessHost* host) {
- CHECK(g_browser_cdm_manager_map.Get().erase(host->GetID()));
- host->RemoveObserver(this);
- delete this;
- }
-
- const scoped_refptr<BrowserCdmManager> browser_cdm_manager_;
-};
-
-} // namespace
-
-// static
-BrowserCdmManager* BrowserCdmManager::FromProcess(int render_process_id) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- auto& map = g_browser_cdm_manager_map.Get();
- auto iterator = map.find(render_process_id);
- return (iterator == map.end()) ? nullptr : iterator->second;
-}
-
-BrowserCdmManager::BrowserCdmManager(
- int render_process_id,
- const scoped_refptr<base::TaskRunner>& task_runner)
- : BrowserMessageFilter(CdmMsgStart),
- render_process_id_(render_process_id),
- task_runner_(task_runner),
- weak_ptr_factory_(this) {
- DVLOG(1) << __FUNCTION__ << ": " << render_process_id_;
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- new BrowserCdmManagerProcessWatcher(render_process_id, this);
-
- if (!task_runner_.get()) {
- task_runner_ = BrowserThread::GetTaskRunnerForThread(BrowserThread::UI);
- }
-}
-
-BrowserCdmManager::~BrowserCdmManager() {
- DVLOG(1) << __FUNCTION__ << ": " << render_process_id_;
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-}
-
-// Makes sure BrowserCdmManager is always deleted on the Browser UI thread.
-void BrowserCdmManager::OnDestruct() const {
- DVLOG(1) << __FUNCTION__ << ": " << render_process_id_;
- if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- delete this;
- } else {
- BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, this);
- }
-}
-
-base::TaskRunner* BrowserCdmManager::OverrideTaskRunnerForMessage(
- const IPC::Message& message) {
- // Only handles CDM messages.
- if (IPC_MESSAGE_CLASS(message) != CdmMsgStart)
- return NULL;
-
- return task_runner_.get();
-}
-
-bool BrowserCdmManager::OnMessageReceived(const IPC::Message& msg) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(BrowserCdmManager, msg)
- IPC_MESSAGE_HANDLER(CdmHostMsg_InitializeCdm, OnInitializeCdm)
- IPC_MESSAGE_HANDLER(CdmHostMsg_SetServerCertificate, OnSetServerCertificate)
- IPC_MESSAGE_HANDLER(CdmHostMsg_CreateSessionAndGenerateRequest,
- OnCreateSessionAndGenerateRequest)
- IPC_MESSAGE_HANDLER(CdmHostMsg_LoadSession, OnLoadSession)
- IPC_MESSAGE_HANDLER(CdmHostMsg_UpdateSession, OnUpdateSession)
- IPC_MESSAGE_HANDLER(CdmHostMsg_CloseSession, OnCloseSession)
- IPC_MESSAGE_HANDLER(CdmHostMsg_RemoveSession, OnRemoveSession)
- IPC_MESSAGE_HANDLER(CdmHostMsg_DestroyCdm, OnDestroyCdm)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
-scoped_refptr<MediaKeys> BrowserCdmManager::GetCdm(int render_frame_id,
- int cdm_id) const {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
- const auto& iter = cdm_map_.find(GetId(render_frame_id, cdm_id));
- return iter == cdm_map_.end() ? nullptr : iter->second;
-}
-
-void BrowserCdmManager::RenderFrameDeleted(int render_frame_id) {
- if (!task_runner_->RunsTasksOnCurrentThread()) {
- task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&BrowserCdmManager::RemoveAllCdmForFrame,
- this, render_frame_id));
- return;
- }
- RemoveAllCdmForFrame(render_frame_id);
-}
-
-void BrowserCdmManager::ResolvePromise(int render_frame_id,
- int cdm_id,
- uint32_t promise_id) {
- Send(new CdmMsg_ResolvePromise(render_frame_id, cdm_id, promise_id));
-}
-
-void BrowserCdmManager::ResolvePromiseWithSession(
- int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const std::string& session_id) {
- if (session_id.length() > media::limits::kMaxSessionIdLength) {
- RejectPromise(render_frame_id, cdm_id, promise_id,
- MediaKeys::INVALID_ACCESS_ERROR, 0,
- "Session ID is too long.");
- return;
- }
-
- Send(new CdmMsg_ResolvePromiseWithSession(render_frame_id, cdm_id, promise_id,
- session_id));
-}
-
-void BrowserCdmManager::RejectPromise(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- MediaKeys::Exception exception,
- uint32_t system_code,
- const std::string& error_message) {
- Send(new CdmMsg_RejectPromise(render_frame_id, cdm_id, promise_id, exception,
- system_code, error_message));
-}
-
-media::CdmFactory* BrowserCdmManager::GetCdmFactory() {
- if (!cdm_factory_) {
- // Create a new CdmFactory.
- cdm_factory_ = GetContentClient()->browser()->CreateCdmFactory();
-
-#if defined(OS_ANDROID)
- if (!cdm_factory_) {
- // Obtain http request context for the current render process.
- net::URLRequestContextGetter* context_getter =
- BrowserContext::GetDefaultStoragePartition(
- RenderProcessHost::FromID(render_process_id_)->
- GetBrowserContext())->GetURLRequestContext();
- DCHECK(context_getter);
-
- cdm_factory_.reset(new media::AndroidCdmFactory(
- base::Bind(&CreateProvisionFetcher, context_getter)));
- }
-#endif
- }
-
- return cdm_factory_.get();
-}
-
-void BrowserCdmManager::OnSessionMessage(int render_frame_id,
- int cdm_id,
- const std::string& session_id,
- MediaKeys::MessageType message_type,
- const std::vector<uint8_t>& message) {
- Send(new CdmMsg_SessionMessage(render_frame_id, cdm_id, session_id,
- message_type, message));
-}
-
-void BrowserCdmManager::OnSessionClosed(int render_frame_id,
- int cdm_id,
- const std::string& session_id) {
- Send(new CdmMsg_SessionClosed(render_frame_id, cdm_id, session_id));
-}
-
-void BrowserCdmManager::OnSessionKeysChange(int render_frame_id,
- int cdm_id,
- const std::string& session_id,
- bool has_additional_usable_key,
- media::CdmKeysInfo keys_info) {
- std::vector<media::CdmKeyInformation> key_info_vector;
- for (auto* key_info : keys_info)
- key_info_vector.push_back(*key_info);
- Send(new CdmMsg_SessionKeysChange(render_frame_id, cdm_id, session_id,
- has_additional_usable_key,
- key_info_vector));
-}
-
-void BrowserCdmManager::OnSessionExpirationUpdate(
- int render_frame_id,
- int cdm_id,
- const std::string& session_id,
- const base::Time& new_expiry_time) {
- Send(new CdmMsg_SessionExpirationUpdate(render_frame_id, cdm_id, session_id,
- new_expiry_time));
-}
-
-// Use a weak pointer here instead of |this| to avoid circular references.
-#define BROWSER_CDM_MANAGER_CB(func, ...) \
- base::Bind(&BrowserCdmManager::func, weak_ptr_factory_.GetWeakPtr(), \
- render_frame_id, cdm_id, ##__VA_ARGS__)
-
-void BrowserCdmManager::OnInitializeCdm(
- int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const CdmHostMsg_InitializeCdm_Params& params) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
- DCHECK(!GetCdm(render_frame_id, cdm_id));
-
- std::unique_ptr<SimplePromise> promise(new SimplePromise(
- weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
-
- if (params.key_system.size() > media::limits::kMaxKeySystemLength) {
- NOTREACHED() << "Invalid key system: " << params.key_system;
- promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Invalid key system.");
- return;
- }
-
- if (!GetCdmFactory()) {
- NOTREACHED() << "CDM not supported.";
- promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "CDM not supported.");
- return;
- }
-
- // The render process makes sure |allow_distinctive_identifier| and
- // |allow_persistent_state| are true. See RenderCdmFactory::Create().
- // TODO(xhwang): Pass |allow_distinctive_identifier| and
- // |allow_persistent_state| from the render process.
- media::CdmConfig cdm_config;
- cdm_config.allow_distinctive_identifier = true;
- cdm_config.allow_persistent_state = true;
- cdm_config.use_hw_secure_codecs = params.use_hw_secure_codecs;
-
- GetCdmFactory()->Create(
- params.key_system, params.security_origin, cdm_config,
- BROWSER_CDM_MANAGER_CB(OnSessionMessage),
- BROWSER_CDM_MANAGER_CB(OnSessionClosed),
- BROWSER_CDM_MANAGER_CB(OnSessionKeysChange),
- BROWSER_CDM_MANAGER_CB(OnSessionExpirationUpdate),
- BROWSER_CDM_MANAGER_CB(OnCdmCreated, params.security_origin,
- base::Passed(&promise)));
-}
-
-void BrowserCdmManager::OnSetServerCertificate(
- int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const std::vector<uint8_t>& certificate) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- std::unique_ptr<SimplePromise> promise(new SimplePromise(
- weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
-
- scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
- if (!cdm) {
- promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
- return;
- }
-
- if (certificate.empty()) {
- promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Empty certificate.");
- return;
- }
-
- cdm->SetServerCertificate(certificate, std::move(promise));
-}
-
-void BrowserCdmManager::OnCreateSessionAndGenerateRequest(
- const CdmHostMsg_CreateSessionAndGenerateRequest_Params& params) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- int render_frame_id = params.render_frame_id;
- int cdm_id = params.cdm_id;
- const std::vector<uint8_t>& init_data = params.init_data;
- std::unique_ptr<NewSessionPromise> promise(
- new NewSessionPromise(weak_ptr_factory_.GetWeakPtr(), render_frame_id,
- cdm_id, params.promise_id));
-
- if (init_data.size() > media::limits::kMaxInitDataLength) {
- LOG(WARNING) << "InitData for ID: " << cdm_id
- << " too long: " << init_data.size();
- promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Init data too long.");
- return;
- }
-#if defined(OS_ANDROID)
- // 'webm' initData is a single key ID. On Android the length is restricted.
- if (params.init_data_type == INIT_DATA_TYPE_WEBM &&
- init_data.size() != kAndroidKeyIdBytes) {
- promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0,
- "'webm' initData is not the correct length.");
- return;
- }
-#endif
-
- media::EmeInitDataType eme_init_data_type;
- switch (params.init_data_type) {
- case INIT_DATA_TYPE_WEBM:
- eme_init_data_type = media::EmeInitDataType::WEBM;
- break;
-#if defined(USE_PROPRIETARY_CODECS)
- case INIT_DATA_TYPE_CENC:
- eme_init_data_type = media::EmeInitDataType::CENC;
- break;
-#endif
- default:
- NOTREACHED();
- promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0,
- "Invalid init data type.");
- return;
- }
-
- scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
- if (!cdm) {
- DLOG(WARNING) << "No CDM found for: " << render_frame_id << ", " << cdm_id;
- promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
- return;
- }
-
- CheckPermissionStatus(
- render_frame_id, cdm_id,
- base::Bind(&BrowserCdmManager::CreateSessionAndGenerateRequestIfPermitted,
- this, render_frame_id, cdm_id, params.session_type,
- eme_init_data_type, init_data, base::Passed(&promise)));
-}
-
-void BrowserCdmManager::OnLoadSession(
- int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- media::MediaKeys::SessionType session_type,
- const std::string& session_id) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- std::unique_ptr<NewSessionPromise> promise(new NewSessionPromise(
- weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
-
- scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
- if (!cdm) {
- DLOG(WARNING) << "No CDM found for: " << render_frame_id << ", " << cdm_id;
- promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
- return;
- }
-
- CheckPermissionStatus(
- render_frame_id, cdm_id,
- base::Bind(&BrowserCdmManager::LoadSessionIfPermitted,
- this, render_frame_id, cdm_id, session_type,
- session_id, base::Passed(&promise)));
-}
-
-void BrowserCdmManager::OnUpdateSession(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const std::string& session_id,
- const std::vector<uint8_t>& response) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- std::unique_ptr<SimplePromise> promise(new SimplePromise(
- weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
-
- scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
- if (!cdm) {
- promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
- return;
- }
-
- if (response.size() > media::limits::kMaxSessionResponseLength) {
- LOG(WARNING) << "Response for ID " << cdm_id
- << " is too long: " << response.size();
- promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Response too long.");
- return;
- }
-
- if (response.empty()) {
- promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Response is empty.");
- return;
- }
-
- cdm->UpdateSession(session_id, response, std::move(promise));
-}
-
-void BrowserCdmManager::OnCloseSession(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const std::string& session_id) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- std::unique_ptr<SimplePromise> promise(new SimplePromise(
- weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
-
- scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
- if (!cdm) {
- promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
- return;
- }
-
- cdm->CloseSession(session_id, std::move(promise));
-}
-
-void BrowserCdmManager::OnRemoveSession(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const std::string& session_id) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- std::unique_ptr<SimplePromise> promise(new SimplePromise(
- weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
-
- scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
- if (!cdm) {
- promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
- return;
- }
-
- cdm->RemoveSession(session_id, std::move(promise));
-}
-
-void BrowserCdmManager::OnDestroyCdm(int render_frame_id, int cdm_id) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
- RemoveCdm(GetId(render_frame_id, cdm_id));
-}
-
-void BrowserCdmManager::OnCdmCreated(
- int render_frame_id,
- int cdm_id,
- const GURL& security_origin,
- std::unique_ptr<media::SimpleCdmPromise> promise,
- const scoped_refptr<media::MediaKeys>& cdm,
- const std::string& error_message) {
- if (!cdm) {
- DVLOG(1) << "Failed to create CDM: " << error_message;
- promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, error_message);
- return;
- }
-
- uint64_t id = GetId(render_frame_id, cdm_id);
- cdm_map_[id] = cdm;
- cdm_security_origin_map_[id] = security_origin;
- promise->resolve();
-}
-
-void BrowserCdmManager::RemoveAllCdmForFrame(int render_frame_id) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- std::vector<uint64_t> ids_to_remove;
- for (const auto& entry : cdm_map_) {
- if (IdBelongsToFrame(entry.first, render_frame_id))
- ids_to_remove.push_back(entry.first);
- }
-
- for (const auto& id_to_remove : ids_to_remove)
- RemoveCdm(id_to_remove);
-}
-
-void BrowserCdmManager::RemoveCdm(uint64_t id) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- cdm_map_.erase(id);
- cdm_security_origin_map_.erase(id);
-}
-
-void BrowserCdmManager::CheckPermissionStatus(
- int render_frame_id,
- int cdm_id,
- const PermissionStatusCB& permission_status_cb) {
- // Always called on |task_runner_|, which may not be on the UI thread.
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- GURL security_origin;
- std::map<uint64_t, GURL>::const_iterator iter =
- cdm_security_origin_map_.find(GetId(render_frame_id, cdm_id));
- DCHECK(iter != cdm_security_origin_map_.end());
- if (iter != cdm_security_origin_map_.end())
- security_origin = iter->second;
-
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&BrowserCdmManager::CheckPermissionStatusOnUIThread, this,
- render_frame_id, security_origin, permission_status_cb));
- } else {
- CheckPermissionStatusOnUIThread(render_frame_id, security_origin,
- permission_status_cb);
- }
-}
-
-// Note: This function runs on the UI thread, which may be different from
-// |task_runner_|. Be careful about thread safety!
-void BrowserCdmManager::CheckPermissionStatusOnUIThread(
- int render_frame_id,
- const GURL& security_origin,
- const base::Callback<void(bool)>& permission_status_cb) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- RenderFrameHost* rfh =
- RenderFrameHost::FromID(render_process_id_, render_frame_id);
- WebContents* web_contents = WebContents::FromRenderFrameHost(rfh);
- PermissionManager* permission_manager =
- web_contents->GetBrowserContext()->GetPermissionManager();
- if (!permission_manager) {
- permission_status_cb.Run(false);
- return;
- }
-
- blink::mojom::PermissionStatus permission_status =
- permission_manager->GetPermissionStatus(
- PermissionType::PROTECTED_MEDIA_IDENTIFIER, security_origin,
- web_contents->GetLastCommittedURL().GetOrigin());
-
- bool allowed = (permission_status == blink::mojom::PermissionStatus::GRANTED);
- if (!task_runner_->RunsTasksOnCurrentThread()) {
- task_runner_->PostTask(FROM_HERE,
- base::Bind(permission_status_cb, allowed));
- } else {
- permission_status_cb.Run(allowed);
- }
-}
-
-void BrowserCdmManager::CreateSessionAndGenerateRequestIfPermitted(
- int render_frame_id,
- int cdm_id,
- media::MediaKeys::SessionType session_type,
- media::EmeInitDataType init_data_type,
- const std::vector<uint8_t>& init_data,
- std::unique_ptr<media::NewSessionCdmPromise> promise,
- bool permission_was_allowed) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- if (!permission_was_allowed) {
- promise->reject(MediaKeys::NOT_SUPPORTED_ERROR, 0, "Permission denied.");
- return;
- }
-
- scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
- if (!cdm) {
- promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
- return;
- }
-
- cdm->CreateSessionAndGenerateRequest(session_type, init_data_type, init_data,
- std::move(promise));
-}
-
-void BrowserCdmManager::LoadSessionIfPermitted(
- int render_frame_id,
- int cdm_id,
- media::MediaKeys::SessionType session_type,
- const std::string& session_id,
- std::unique_ptr<media::NewSessionCdmPromise> promise,
- bool permission_was_allowed) {
- DCHECK_NE(media::MediaKeys::SessionType::TEMPORARY_SESSION, session_type);
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
-
- if (!permission_was_allowed) {
- promise->reject(MediaKeys::NOT_SUPPORTED_ERROR, 0, "Permission denied.");
- return;
- }
-
- scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
- if (!cdm) {
- promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
- return;
- }
-
- cdm->LoadSession(session_type, session_id, std::move(promise));
-}
-
-} // namespace content
diff --git a/content/browser/media/cdm/browser_cdm_manager.h b/content/browser/media/cdm/browser_cdm_manager.h
deleted file mode 100644
index 51b0369..0000000
--- a/content/browser/media/cdm/browser_cdm_manager.h
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright 2014 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_MEDIA_CDM_BROWSER_CDM_MANAGER_H_
-#define CONTENT_BROWSER_MEDIA_CDM_BROWSER_CDM_MANAGER_H_
-
-#include <stdint.h>
-
-#include <map>
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-#include "content/common/content_export.h"
-#include "content/common/media/cdm_messages.h"
-#include "content/common/media/cdm_messages_enums.h"
-#include "content/public/browser/browser_message_filter.h"
-#include "ipc/ipc_message.h"
-#include "media/base/cdm_promise.h"
-#include "media/base/eme_constants.h"
-#include "media/base/media_keys.h"
-#include "third_party/WebKit/public/platform/modules/permissions/permission_status.mojom.h"
-#include "url/gurl.h"
-
-struct CdmHostMsg_CreateSessionAndGenerateRequest_Params;
-
-namespace media {
-class CdmFactory;
-}
-
-namespace content {
-
-// This class manages all CDM objects. It receives control operations from the
-// the render process, and forwards them to corresponding CDM object. Callbacks
-// from CDM objects are converted to IPCs and then sent to the render process.
-class CONTENT_EXPORT BrowserCdmManager : public BrowserMessageFilter {
- public:
- // Returns the BrowserCdmManager associated with the |render_process_id|.
- // Returns NULL if no BrowserCdmManager is associated.
- static BrowserCdmManager* FromProcess(int render_process_id);
-
- // Constructs the BrowserCdmManager for |render_process_id| which runs on
- // |task_runner|.
- // If |task_runner| is not NULL, all CDM messages are posted to it. Otherwise,
- // all messages are posted to the browser UI thread.
- BrowserCdmManager(int render_process_id,
- const scoped_refptr<base::TaskRunner>& task_runner);
-
- // BrowserMessageFilter implementations.
- void OnDestruct() const override;
- base::TaskRunner* OverrideTaskRunnerForMessage(
- const IPC::Message& message) override;
- bool OnMessageReceived(const IPC::Message& message) override;
-
- // Returns the CDM associated with |render_frame_id| and |cdm_id|. Returns
- // null if no such CDM exists.
- scoped_refptr<media::MediaKeys> GetCdm(int render_frame_id, int cdm_id) const;
-
- // Notifies that the render frame has been deleted so that all CDMs belongs
- // to this render frame needs to be destroyed as well. This is needed because
- // in some cases (e.g. fast termination of the renderer), the message to
- // destroy the CDM will not be received.
- void RenderFrameDeleted(int render_frame_id);
-
- // Promise handlers.
- void ResolvePromise(int render_frame_id, int cdm_id, uint32_t promise_id);
- void ResolvePromiseWithSession(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const std::string& session_id);
- void RejectPromise(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- media::MediaKeys::Exception exception,
- uint32_t system_code,
- const std::string& error_message);
-
- protected:
- friend class base::RefCountedThreadSafe<BrowserCdmManager>;
- friend class base::DeleteHelper<BrowserCdmManager>;
- ~BrowserCdmManager() override;
-
- private:
- // Returns the CdmFactory that can be used to create CDMs. Returns null if
- // CDM is not supported.
- media::CdmFactory* GetCdmFactory();
-
- // CDM callbacks.
- void OnSessionMessage(int render_frame_id,
- int cdm_id,
- const std::string& session_id,
- media::MediaKeys::MessageType message_type,
- const std::vector<uint8_t>& message);
- void OnSessionClosed(int render_frame_id,
- int cdm_id,
- const std::string& session_id);
- void OnSessionKeysChange(int render_frame_id,
- int cdm_id,
- const std::string& session_id,
- bool has_additional_usable_key,
- media::CdmKeysInfo keys_info);
- void OnSessionExpirationUpdate(int render_frame_id,
- int cdm_id,
- const std::string& session_id,
- const base::Time& new_expiry_time);
-
- // Message handlers.
- void OnInitializeCdm(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const CdmHostMsg_InitializeCdm_Params& params);
- void OnSetServerCertificate(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const std::vector<uint8_t>& certificate);
- void OnCreateSessionAndGenerateRequest(
- const CdmHostMsg_CreateSessionAndGenerateRequest_Params& params);
- void OnLoadSession(
- int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- media::MediaKeys::SessionType session_type,
- const std::string& session_id);
- void OnUpdateSession(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const std::string& session_id,
- const std::vector<uint8_t>& response);
- void OnCloseSession(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const std::string& session_id);
- void OnRemoveSession(int render_frame_id,
- int cdm_id,
- uint32_t promise_id,
- const std::string& session_id);
- void OnDestroyCdm(int render_frame_id, int cdm_id);
-
- // Callback for CDM creation.
- void OnCdmCreated(int render_frame_id,
- int cdm_id,
- const GURL& security_origin,
- std::unique_ptr<media::SimpleCdmPromise> promise,
- const scoped_refptr<media::MediaKeys>& cdm,
- const std::string& error_message);
-
- // Removes all CDMs associated with |render_frame_id|.
- void RemoveAllCdmForFrame(int render_frame_id);
-
- // Removes the CDM with the specified id.
- void RemoveCdm(uint64_t id);
-
- using PermissionStatusCB = base::Callback<void(bool)>;
-
- // Checks protected media identifier permission for the given
- // |render_frame_id| and |cdm_id|.
- void CheckPermissionStatus(int render_frame_id,
- int cdm_id,
- const PermissionStatusCB& permission_status_cb);
-
- // Checks permission status on Browser UI thread. Runs |permission_status_cb|
- // on the |task_runner_| with the permission status.
- void CheckPermissionStatusOnUIThread(
- int render_frame_id,
- const GURL& security_origin,
- const PermissionStatusCB& permission_status_cb);
-
- // Calls CreateSessionAndGenerateRequest() on the CDM if
- // |permission_was_allowed| is true. Otherwise rejects the |promise|.
- void CreateSessionAndGenerateRequestIfPermitted(
- int render_frame_id,
- int cdm_id,
- media::MediaKeys::SessionType session_type,
- media::EmeInitDataType init_data_type,
- const std::vector<uint8_t>& init_data,
- std::unique_ptr<media::NewSessionCdmPromise> promise,
- bool permission_was_allowed);
-
- // Calls LoadSession() on the CDM if |permission_was_allowed| is true.
- // Otherwise rejects |promise|.
- void LoadSessionIfPermitted(
- int render_frame_id,
- int cdm_id,
- media::MediaKeys::SessionType session_type,
- const std::string& session_id,
- std::unique_ptr<media::NewSessionCdmPromise> promise,
- bool permission_was_allowed);
-
- const int render_process_id_;
-
- // TaskRunner to dispatch all CDM messages to. If it's NULL, all messages are
- // dispatched to the browser UI thread.
- scoped_refptr<base::TaskRunner> task_runner_;
-
- std::unique_ptr<media::CdmFactory> cdm_factory_;
-
- // The key in the following maps is a combination of |render_frame_id| and
- // |cdm_id|.
-
- // Map of managed CDMs.
- typedef std::map<uint64_t, scoped_refptr<media::MediaKeys>> CdmMap;
- CdmMap cdm_map_;
-
- // Map of CDM's security origin.
- std::map<uint64_t, GURL> cdm_security_origin_map_;
-
- base::WeakPtrFactory<BrowserCdmManager> weak_ptr_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(BrowserCdmManager);
-};
-
-} // namespace content
-
-#endif // CONTENT_BROWSER_MEDIA_CDM_BROWSER_CDM_MANAGER_H_
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 2d679e32..93ce6b0 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -224,10 +224,6 @@
#include "ui/ozone/public/ozone_switches.h"
#endif
-#if defined(ENABLE_BROWSER_CDMS)
-#include "content/browser/media/cdm/browser_cdm_manager.h"
-#endif
-
#if defined(ENABLE_PLUGINS)
#include "content/browser/plugin_service_impl.h"
#endif
@@ -1146,9 +1142,6 @@
// should eventually be if (!ShouldUseDirectWrite()) guarded.
channel_->AddFilter(new FontCacheDispatcher());
#endif
-#if defined(ENABLE_BROWSER_CDMS)
- AddFilter(new BrowserCdmManager(GetID(), NULL));
-#endif
message_port_message_filter_ = new MessagePortMessageFilter(
base::Bind(&RenderWidgetHelper::GetNextRoutingID,
@@ -1360,18 +1353,6 @@
return init_time_;
}
-#if defined(ENABLE_BROWSER_CDMS)
-scoped_refptr<media::MediaKeys> RenderProcessHostImpl::GetCdm(
- int render_frame_id,
- int cdm_id) const {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- BrowserCdmManager* manager = BrowserCdmManager::FromProcess(GetID());
- if (!manager)
- return nullptr;
- return manager->GetCdm(render_frame_id, cdm_id);
-}
-#endif
-
bool RenderProcessHostImpl::IsProcessBackgrounded() const {
return is_process_backgrounded_;
}
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index 6e6a0f2..a9e6e1b 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -55,7 +55,6 @@
namespace content {
class AudioInputRendererHost;
class AudioRendererHost;
-class BrowserCdmManager;
class InProcessChildThreadParams;
class MessagePortMessageFilter;
class MojoChildConnection;
@@ -167,10 +166,6 @@
std::unique_ptr<base::SharedPersistentMemoryAllocator> TakeMetricsAllocator()
override;
const base::TimeTicks& GetInitTimeForNavigationMetrics() const override;
-#if defined(ENABLE_BROWSER_CDMS)
- scoped_refptr<media::MediaKeys> GetCdm(int render_frame_id,
- int cdm_id) const override;
-#endif
bool IsProcessBackgrounded() const override;
void IncrementServiceWorkerRefCount() override;
void DecrementServiceWorkerRefCount() override;
diff --git a/content/common/media/media_player_messages_android.h b/content/common/media/media_player_messages_android.h
index 60c51a62..b1738c1e 100644
--- a/content/common/media/media_player_messages_android.h
+++ b/content/common/media/media_player_messages_android.h
@@ -176,8 +176,3 @@
// Control media playing on a remote device.
IPC_MESSAGE_ROUTED1(MediaPlayerHostMsg_RequestRemotePlaybackControl,
int /* player_id */)
-
-// Requests the player with |player_id| to use the CDM with |cdm_id|.
-IPC_MESSAGE_ROUTED2(MediaPlayerHostMsg_SetCdm,
- int /* player_id */,
- int /* cdm_id */)
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index 8f7e45e..fd48052 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -287,13 +287,6 @@
virtual void GetAudioOutputControllers(
const GetAudioOutputControllersCallback& callback) const = 0;
-#if defined(ENABLE_BROWSER_CDMS)
- // Returns the CDM instance associated with |render_frame_id| and |cdm_id|,
- // or nullptr if not found.
- virtual scoped_refptr<media::MediaKeys> GetCdm(int render_frame_id,
- int cdm_id) const = 0;
-#endif
-
// Returns true if this process currently has backgrounded priority.
virtual bool IsProcessBackgrounded() const = 0;
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc
index 6d20cc6..b068e091 100644
--- a/content/public/test/mock_render_process_host.cc
+++ b/content/public/test/mock_render_process_host.cc
@@ -29,10 +29,6 @@
#include "content/public/browser/render_widget_host_iterator.h"
#include "content/public/browser/storage_partition.h"
-#if defined(ENABLE_BROWSER_CDMS)
-#include "media/base/media_keys.h"
-#endif
-
namespace content {
MockRenderProcessHost::MockRenderProcessHost(BrowserContext* browser_context)
@@ -274,14 +270,6 @@
return dummy_time;
}
-#if defined(ENABLE_BROWSER_CDMS)
-scoped_refptr<media::MediaKeys> MockRenderProcessHost::GetCdm(
- int render_frame_id,
- int cdm_id) const {
- return nullptr;
-}
-#endif
-
bool MockRenderProcessHost::IsProcessBackgrounded() const {
return is_process_backgrounded_;
}
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h
index 3e50c5f4..2591212 100644
--- a/content/public/test/mock_render_process_host.h
+++ b/content/public/test/mock_render_process_host.h
@@ -97,10 +97,6 @@
std::unique_ptr<base::SharedPersistentMemoryAllocator> TakeMetricsAllocator()
override;
const base::TimeTicks& GetInitTimeForNavigationMetrics() const override;
-#if defined(ENABLE_BROWSER_CDMS)
- scoped_refptr<media::MediaKeys> GetCdm(int render_frame_id,
- int cdm_id) const override;
-#endif
bool IsProcessBackgrounded() const override;
void IncrementServiceWorkerRefCount() override;
void DecrementServiceWorkerRefCount() override;
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index 749b5fa..ca620ed67 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -868,15 +868,6 @@
deps += [ "//printing" ]
}
- if (enable_browser_cdms) {
- sources += [
- "media/cdm/proxy_media_keys.cc",
- "media/cdm/proxy_media_keys.h",
- "media/cdm/renderer_cdm_manager.cc",
- "media/cdm/renderer_cdm_manager.h",
- ]
- }
-
if (enable_mojo_media) {
sources += [
"media/media_interface_provider.cc",
diff --git a/content/renderer/media/android/renderer_media_player_manager.cc b/content/renderer/media/android/renderer_media_player_manager.cc
index 18b0332..c4642bae 100644
--- a/content/renderer/media/android/renderer_media_player_manager.cc
+++ b/content/renderer/media/android/renderer_media_player_manager.cc
@@ -8,9 +8,7 @@
#include "content/common/media/media_player_messages_android.h"
#include "content/public/common/renderer_preferences.h"
#include "content/renderer/media/android/webmediaplayer_android.h"
-#include "content/renderer/media/cdm/renderer_cdm_manager.h"
#include "content/renderer/render_view_impl.h"
-#include "media/base/cdm_context.h"
#include "media/base/media_switches.h"
#include "ui/gfx/geometry/rect_f.h"
@@ -242,14 +240,6 @@
Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id));
}
-void RendererMediaPlayerManager::SetCdm(int player_id, int cdm_id) {
- if (cdm_id == media::CdmContext::kInvalidCdmId) {
- NOTREACHED();
- return;
- }
- Send(new MediaPlayerHostMsg_SetCdm(routing_id(), player_id, cdm_id));
-}
-
int RendererMediaPlayerManager::RegisterMediaPlayer(
media::RendererMediaPlayerInterface* player) {
media_players_[next_media_player_id_] = player;
diff --git a/content/renderer/media/android/renderer_media_player_manager.h b/content/renderer/media/android/renderer_media_player_manager.h
index 2b6b74c..608a55e 100644
--- a/content/renderer/media/android/renderer_media_player_manager.h
+++ b/content/renderer/media/android/renderer_media_player_manager.h
@@ -84,11 +84,6 @@
// Requests the player to enter fullscreen.
void EnterFullscreen(int player_id);
- // Requests the player with |player_id| to use the CDM with |cdm_id|.
- // Does nothing if |cdm_id| is kInvalidCdmId.
- // TODO(xhwang): Update this when we implement setCdm(0).
- void SetCdm(int player_id, int cdm_id);
-
// Registers and unregisters a WebMediaPlayerAndroid object.
int RegisterMediaPlayer(media::RendererMediaPlayerInterface* player) override;
void UnregisterMediaPlayer(int player_id) override;
diff --git a/content/renderer/media/android/webmediaplayer_android.h b/content/renderer/media/android/webmediaplayer_android.h
index b42c78a..ec3eda7 100644
--- a/content/renderer/media/android/webmediaplayer_android.h
+++ b/content/renderer/media/android/webmediaplayer_android.h
@@ -57,7 +57,6 @@
}
namespace media {
-class CdmContext;
class MediaLog;
class WebContentDecryptionModuleImpl;
}
diff --git a/content/renderer/media/cdm/proxy_media_keys.cc b/content/renderer/media/cdm/proxy_media_keys.cc
deleted file mode 100644
index 2fd6c42..0000000
--- a/content/renderer/media/cdm/proxy_media_keys.cc
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright 2014 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/renderer/media/cdm/proxy_media_keys.h"
-
-#include <utility>
-#include <vector>
-
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "content/renderer/media/cdm/renderer_cdm_manager.h"
-#include "media/base/cdm_initialized_promise.h"
-#include "media/base/cdm_key_information.h"
-#include "media/base/cdm_promise.h"
-
-namespace content {
-
-void ProxyMediaKeys::Create(
- const std::string& key_system,
- const GURL& security_origin,
- bool use_hw_secure_codecs,
- RendererCdmManager* manager,
- const media::SessionMessageCB& session_message_cb,
- const media::SessionClosedCB& session_closed_cb,
- const media::SessionKeysChangeCB& session_keys_change_cb,
- const media::SessionExpirationUpdateCB& session_expiration_update_cb,
- const media::CdmCreatedCB& cdm_created_cb) {
- DCHECK(manager);
- scoped_refptr<ProxyMediaKeys> proxy_media_keys(
- new ProxyMediaKeys(manager, session_message_cb, session_closed_cb,
- session_keys_change_cb, session_expiration_update_cb));
-
- // ProxyMediaKeys ownership passed to the promise.
- std::unique_ptr<media::CdmInitializedPromise> promise(
- new media::CdmInitializedPromise(cdm_created_cb, proxy_media_keys));
-
- proxy_media_keys->InitializeCdm(key_system, security_origin,
- use_hw_secure_codecs, std::move(promise));
-}
-
-void ProxyMediaKeys::SetServerCertificate(
- const std::vector<uint8_t>& certificate,
- std::unique_ptr<media::SimpleCdmPromise> promise) {
- uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise));
- manager_->SetServerCertificate(cdm_id_, promise_id, certificate);
-}
-
-void ProxyMediaKeys::CreateSessionAndGenerateRequest(
- SessionType session_type,
- media::EmeInitDataType init_data_type,
- const std::vector<uint8_t>& init_data,
- std::unique_ptr<media::NewSessionCdmPromise> promise) {
- CdmHostMsg_CreateSession_InitDataType create_session_init_data_type =
- INIT_DATA_TYPE_WEBM;
- switch (init_data_type) {
- case media::EmeInitDataType::CENC:
- create_session_init_data_type = INIT_DATA_TYPE_CENC;
- break;
- case media::EmeInitDataType::WEBM:
- create_session_init_data_type = INIT_DATA_TYPE_WEBM;
- break;
- case media::EmeInitDataType::KEYIDS:
- case media::EmeInitDataType::UNKNOWN:
- DLOG(ERROR) << "Unsupported EME CreateSession init data type";
- promise->reject(NOT_SUPPORTED_ERROR, 0,
- "Unsupported EME CreateSession init data type");
- return;
- }
-
- uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise));
- manager_->CreateSessionAndGenerateRequest(cdm_id_, promise_id, session_type,
- create_session_init_data_type,
- init_data);
-}
-
-void ProxyMediaKeys::LoadSession(
- SessionType session_type,
- const std::string& session_id,
- std::unique_ptr<media::NewSessionCdmPromise> promise) {
- uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise));
- manager_->LoadSession(cdm_id_, promise_id, session_type, session_id);
-}
-
-void ProxyMediaKeys::UpdateSession(
- const std::string& session_id,
- const std::vector<uint8_t>& response,
- std::unique_ptr<media::SimpleCdmPromise> promise) {
- uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise));
- manager_->UpdateSession(cdm_id_, promise_id, session_id, response);
-}
-
-void ProxyMediaKeys::CloseSession(
- const std::string& session_id,
- std::unique_ptr<media::SimpleCdmPromise> promise) {
- uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise));
- manager_->CloseSession(cdm_id_, promise_id, session_id);
-}
-
-void ProxyMediaKeys::RemoveSession(
- const std::string& session_id,
- std::unique_ptr<media::SimpleCdmPromise> promise) {
- uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise));
- manager_->RemoveSession(cdm_id_, promise_id, session_id);
-}
-
-media::CdmContext* ProxyMediaKeys::GetCdmContext() {
- return this;
-}
-
-media::Decryptor* ProxyMediaKeys::GetDecryptor() {
- return nullptr;
-}
-
-int ProxyMediaKeys::GetCdmId() const {
- return cdm_id_;
-}
-
-void ProxyMediaKeys::OnSessionMessage(
- const std::string& session_id,
- media::MediaKeys::MessageType message_type,
- const std::vector<uint8_t>& message) {
- session_message_cb_.Run(session_id, message_type, message);
-}
-
-void ProxyMediaKeys::OnSessionClosed(const std::string& session_id) {
- session_closed_cb_.Run(session_id);
-}
-
-void ProxyMediaKeys::OnSessionKeysChange(const std::string& session_id,
- bool has_additional_usable_key,
- media::CdmKeysInfo keys_info) {
- session_keys_change_cb_.Run(session_id, has_additional_usable_key,
- std::move(keys_info));
-}
-
-void ProxyMediaKeys::OnSessionExpirationUpdate(
- const std::string& session_id,
- const base::Time& new_expiry_time) {
- session_expiration_update_cb_.Run(session_id, new_expiry_time);
-}
-
-void ProxyMediaKeys::OnPromiseResolved(uint32_t promise_id) {
- cdm_promise_adapter_.ResolvePromise(promise_id);
-}
-
-void ProxyMediaKeys::OnPromiseResolvedWithSession(
- uint32_t promise_id,
- const std::string& session_id) {
- cdm_promise_adapter_.ResolvePromise(promise_id, session_id);
-}
-
-void ProxyMediaKeys::OnPromiseRejected(uint32_t promise_id,
- media::MediaKeys::Exception exception,
- uint32_t system_code,
- const std::string& error_message) {
- cdm_promise_adapter_.RejectPromise(promise_id, exception, system_code,
- error_message);
-}
-
-ProxyMediaKeys::ProxyMediaKeys(
- RendererCdmManager* manager,
- const media::SessionMessageCB& session_message_cb,
- const media::SessionClosedCB& session_closed_cb,
- const media::SessionKeysChangeCB& session_keys_change_cb,
- const media::SessionExpirationUpdateCB& session_expiration_update_cb)
- : manager_(manager),
- session_message_cb_(session_message_cb),
- session_closed_cb_(session_closed_cb),
- session_keys_change_cb_(session_keys_change_cb),
- session_expiration_update_cb_(session_expiration_update_cb) {
- cdm_id_ = manager->RegisterMediaKeys(this);
-}
-
-ProxyMediaKeys::~ProxyMediaKeys() {
- manager_->DestroyCdm(cdm_id_);
- manager_->UnregisterMediaKeys(cdm_id_);
- cdm_promise_adapter_.Clear();
-}
-
-void ProxyMediaKeys::InitializeCdm(
- const std::string& key_system,
- const GURL& security_origin,
- bool use_hw_secure_codecs,
- std::unique_ptr<media::SimpleCdmPromise> promise) {
- uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise));
- manager_->InitializeCdm(cdm_id_, promise_id, this, key_system,
- security_origin, use_hw_secure_codecs);
-}
-
-} // namespace content
diff --git a/content/renderer/media/cdm/proxy_media_keys.h b/content/renderer/media/cdm/proxy_media_keys.h
deleted file mode 100644
index c50aa7ac..0000000
--- a/content/renderer/media/cdm/proxy_media_keys.h
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2014 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_RENDERER_MEDIA_CDM_PROXY_MEDIA_KEYS_H_
-#define CONTENT_RENDERER_MEDIA_CDM_PROXY_MEDIA_KEYS_H_
-
-#include <stdint.h>
-
-#include <map>
-#include <string>
-#include <vector>
-
-#include "base/containers/hash_tables.h"
-#include "base/containers/scoped_ptr_hash_map.h"
-#include "base/macros.h"
-#include "media/base/cdm_context.h"
-#include "media/base/cdm_factory.h"
-#include "media/base/cdm_promise.h"
-#include "media/base/cdm_promise_adapter.h"
-#include "media/base/media_keys.h"
-
-class GURL;
-
-namespace content {
-
-class RendererCdmManager;
-
-// A MediaKeys proxy that wraps the EME part of RendererCdmManager.
-class ProxyMediaKeys : public media::MediaKeys, public media::CdmContext {
- public:
- static void Create(
- const std::string& key_system,
- const GURL& security_origin,
- bool use_hw_secure_codecs,
- RendererCdmManager* manager,
- const media::SessionMessageCB& session_message_cb,
- const media::SessionClosedCB& session_closed_cb,
- const media::SessionKeysChangeCB& session_keys_change_cb,
- const media::SessionExpirationUpdateCB& session_expiration_update_cb,
- const media::CdmCreatedCB& cdm_created_cb);
-
- // MediaKeys implementation.
- void SetServerCertificate(
- const std::vector<uint8_t>& certificate,
- std::unique_ptr<media::SimpleCdmPromise> promise) override;
- void CreateSessionAndGenerateRequest(
- SessionType session_type,
- media::EmeInitDataType init_data_type,
- const std::vector<uint8_t>& init_data,
- std::unique_ptr<media::NewSessionCdmPromise> promise) override;
- void LoadSession(
- SessionType session_type,
- const std::string& session_id,
- std::unique_ptr<media::NewSessionCdmPromise> promise) override;
- void UpdateSession(const std::string& session_id,
- const std::vector<uint8_t>& response,
- std::unique_ptr<media::SimpleCdmPromise> promise) override;
- void CloseSession(const std::string& session_id,
- std::unique_ptr<media::SimpleCdmPromise> promise) override;
- void RemoveSession(const std::string& session_id,
- std::unique_ptr<media::SimpleCdmPromise> promise) override;
- media::CdmContext* GetCdmContext() override;
-
- // media::CdmContext implementation.
- media::Decryptor* GetDecryptor() override;
- int GetCdmId() const override;
-
- // Callbacks.
- void OnSessionMessage(const std::string& session_id,
- media::MediaKeys::MessageType message_type,
- const std::vector<uint8_t>& message);
- void OnSessionClosed(const std::string& session_id);
- void OnSessionKeysChange(const std::string& session_id,
- bool has_additional_usable_key,
- media::CdmKeysInfo keys_info);
- void OnSessionExpirationUpdate(const std::string& session_id,
- const base::Time& new_expiry_time);
-
- void OnPromiseResolved(uint32_t promise_id);
- void OnPromiseResolvedWithSession(uint32_t promise_id,
- const std::string& session_id);
- void OnPromiseRejected(uint32_t promise_id,
- media::MediaKeys::Exception exception,
- uint32_t system_code,
- const std::string& error_message);
-
- private:
- ProxyMediaKeys(
- RendererCdmManager* manager,
- const media::SessionMessageCB& session_message_cb,
- const media::SessionClosedCB& session_closed_cb,
- const media::SessionKeysChangeCB& session_keys_change_cb,
- const media::SessionExpirationUpdateCB& session_expiration_update_cb);
-
- ~ProxyMediaKeys() override;
-
- void InitializeCdm(const std::string& key_system,
- const GURL& security_origin,
- bool use_hw_secure_codecs,
- std::unique_ptr<media::SimpleCdmPromise> promise);
-
- RendererCdmManager* manager_;
- int cdm_id_;
-
- media::SessionMessageCB session_message_cb_;
- media::SessionClosedCB session_closed_cb_;
- media::SessionKeysChangeCB session_keys_change_cb_;
- media::SessionExpirationUpdateCB session_expiration_update_cb_;
-
- media::CdmPromiseAdapter cdm_promise_adapter_;
-
- DISALLOW_COPY_AND_ASSIGN(ProxyMediaKeys);
-};
-
-} // namespace content
-
-#endif // CONTENT_RENDERER_MEDIA_CDM_PROXY_MEDIA_KEYS_H_
diff --git a/content/renderer/media/cdm/render_cdm_factory.cc b/content/renderer/media/cdm/render_cdm_factory.cc
index e461d0a..fb2335ed 100644
--- a/content/renderer/media/cdm/render_cdm_factory.cc
+++ b/content/renderer/media/cdm/render_cdm_factory.cc
@@ -19,8 +19,6 @@
#include "url/gurl.h"
#if defined(ENABLE_PEPPER_CDMS)
#include "content/renderer/media/cdm/ppapi_decryptor.h"
-#elif defined(ENABLE_BROWSER_CDMS)
-#include "content/renderer/media/cdm/proxy_media_keys.h"
#endif // defined(ENABLE_PEPPER_CDMS)
namespace content {
@@ -29,9 +27,6 @@
RenderCdmFactory::RenderCdmFactory(
const CreatePepperCdmCB& create_pepper_cdm_cb)
: create_pepper_cdm_cb_(create_pepper_cdm_cb) {}
-#elif defined(ENABLE_BROWSER_CDMS)
-RenderCdmFactory::RenderCdmFactory(RendererCdmManager* manager)
- : manager_(manager) {}
#else
RenderCdmFactory::RenderCdmFactory() {}
#endif // defined(ENABLE_PEPPER_CDMS)
@@ -75,13 +70,6 @@
cdm_config.allow_persistent_state, create_pepper_cdm_cb_,
session_message_cb, session_closed_cb, session_keys_change_cb,
session_expiration_update_cb, cdm_created_cb);
-#elif defined(ENABLE_BROWSER_CDMS)
- DCHECK(cdm_config.allow_distinctive_identifier);
- DCHECK(cdm_config.allow_persistent_state);
- ProxyMediaKeys::Create(
- key_system, security_origin, cdm_config.use_hw_secure_codecs, manager_,
- session_message_cb, session_closed_cb, session_keys_change_cb,
- session_expiration_update_cb, cdm_created_cb);
#else
// No possible CDM to create, so fail the request.
base::ThreadTaskRunnerHandle::Get()->PostTask(
diff --git a/content/renderer/media/cdm/render_cdm_factory.h b/content/renderer/media/cdm/render_cdm_factory.h
index f5016e7..1b03c4017 100644
--- a/content/renderer/media/cdm/render_cdm_factory.h
+++ b/content/renderer/media/cdm/render_cdm_factory.h
@@ -25,18 +25,12 @@
namespace content {
-#if defined(ENABLE_BROWSER_CDMS)
-class RendererCdmManager;
-#endif
-
// CdmFactory implementation in content/renderer. This class is not thread safe
// and should only be used on one thread.
class RenderCdmFactory : public media::CdmFactory {
public:
#if defined(ENABLE_PEPPER_CDMS)
explicit RenderCdmFactory(const CreatePepperCdmCB& create_pepper_cdm_cb);
-#elif defined(ENABLE_BROWSER_CDMS)
- explicit RenderCdmFactory(RendererCdmManager* manager);
#else
RenderCdmFactory();
#endif // defined(ENABLE_PEPPER_CDMS)
@@ -57,9 +51,6 @@
private:
#if defined(ENABLE_PEPPER_CDMS)
CreatePepperCdmCB create_pepper_cdm_cb_;
-#elif defined(ENABLE_BROWSER_CDMS)
- // The |manager_| is a per render frame object owned by RenderFrameImpl.
- RendererCdmManager* manager_;
#endif
base::ThreadChecker thread_checker_;
diff --git a/content/renderer/media/cdm/renderer_cdm_manager.cc b/content/renderer/media/cdm/renderer_cdm_manager.cc
deleted file mode 100644
index ba4b738..0000000
--- a/content/renderer/media/cdm/renderer_cdm_manager.cc
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright 2014 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/renderer/media/cdm/renderer_cdm_manager.h"
-
-#include <stddef.h>
-#include <utility>
-
-#include "base/stl_util.h"
-#include "content/common/media/cdm_messages.h"
-#include "content/renderer/media/cdm/proxy_media_keys.h"
-#include "media/base/cdm_context.h"
-#include "media/base/limits.h"
-
-namespace content {
-
-using media::MediaKeys;
-
-// Maximum sizes for various EME API parameters. These are checks to prevent
-// unnecessarily large messages from being passed around, and the sizes
-// are somewhat arbitrary as the EME spec doesn't specify any limits.
-const size_t kMaxSessionMessageLength = 10240; // 10 KB
-
-RendererCdmManager::RendererCdmManager(RenderFrame* render_frame)
- : RenderFrameObserver(render_frame),
- next_cdm_id_(media::CdmContext::kInvalidCdmId + 1) {}
-
-RendererCdmManager::~RendererCdmManager() {
- DCHECK(proxy_media_keys_map_.empty())
- << "RendererCdmManager is owned by RenderFrameImpl and is destroyed only "
- "after all ProxyMediaKeys are destroyed and unregistered.";
-}
-
-bool RendererCdmManager::OnMessageReceived(const IPC::Message& msg) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(RendererCdmManager, msg)
- IPC_MESSAGE_HANDLER(CdmMsg_SessionMessage, OnSessionMessage)
- IPC_MESSAGE_HANDLER(CdmMsg_SessionClosed, OnSessionClosed)
- IPC_MESSAGE_HANDLER(CdmMsg_SessionKeysChange, OnSessionKeysChange)
- IPC_MESSAGE_HANDLER(CdmMsg_SessionExpirationUpdate,
- OnSessionExpirationUpdate)
- IPC_MESSAGE_HANDLER(CdmMsg_ResolvePromise, OnPromiseResolved)
- IPC_MESSAGE_HANDLER(CdmMsg_ResolvePromiseWithSession,
- OnPromiseResolvedWithSession)
- IPC_MESSAGE_HANDLER(CdmMsg_RejectPromise, OnPromiseRejected)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
-void RendererCdmManager::OnDestruct() {
- delete this;
-}
-
-void RendererCdmManager::InitializeCdm(int cdm_id,
- uint32_t promise_id,
- ProxyMediaKeys* media_keys,
- const std::string& key_system,
- const GURL& security_origin,
- bool use_hw_secure_codecs) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- CdmHostMsg_InitializeCdm_Params params;
- params.key_system = key_system;
- params.security_origin = security_origin;
- params.use_hw_secure_codecs = use_hw_secure_codecs;
- Send(new CdmHostMsg_InitializeCdm(routing_id(), cdm_id, promise_id, params));
-}
-
-void RendererCdmManager::SetServerCertificate(
- int cdm_id,
- uint32_t promise_id,
- const std::vector<uint8_t>& certificate) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- Send(new CdmHostMsg_SetServerCertificate(routing_id(), cdm_id, promise_id,
- certificate));
-}
-
-void RendererCdmManager::CreateSessionAndGenerateRequest(
- int cdm_id,
- uint32_t promise_id,
- media::MediaKeys::SessionType session_type,
- CdmHostMsg_CreateSession_InitDataType init_data_type,
- const std::vector<uint8_t>& init_data) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- CdmHostMsg_CreateSessionAndGenerateRequest_Params params;
- params.render_frame_id = routing_id();
- params.cdm_id = cdm_id;
- params.promise_id = promise_id;
- params.session_type = session_type;
- params.init_data_type = init_data_type;
- params.init_data = init_data;
- Send(new CdmHostMsg_CreateSessionAndGenerateRequest(params));
-}
-
-void RendererCdmManager::LoadSession(int cdm_id,
- uint32_t promise_id,
- media::MediaKeys::SessionType session_type,
- const std::string& session_id) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- Send(new CdmHostMsg_LoadSession(routing_id(), cdm_id, promise_id,
- session_type, session_id));
-}
-
-void RendererCdmManager::UpdateSession(int cdm_id,
- uint32_t promise_id,
- const std::string& session_id,
- const std::vector<uint8_t>& response) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- Send(new CdmHostMsg_UpdateSession(routing_id(), cdm_id, promise_id,
- session_id, response));
-}
-
-void RendererCdmManager::CloseSession(int cdm_id,
- uint32_t promise_id,
- const std::string& session_id) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- Send(new CdmHostMsg_CloseSession(routing_id(), cdm_id, promise_id,
- session_id));
-}
-
-void RendererCdmManager::RemoveSession(int cdm_id,
- uint32_t promise_id,
- const std::string& session_id) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- Send(new CdmHostMsg_RemoveSession(routing_id(), cdm_id, promise_id,
- session_id));
-}
-
-void RendererCdmManager::DestroyCdm(int cdm_id) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- Send(new CdmHostMsg_DestroyCdm(routing_id(), cdm_id));
-}
-
-void RendererCdmManager::OnSessionMessage(
- int cdm_id,
- const std::string& session_id,
- media::MediaKeys::MessageType message_type,
- const std::vector<uint8_t>& message) {
- if (message.size() > kMaxSessionMessageLength) {
- NOTREACHED();
- LOG(ERROR) << "Message is too long and dropped.";
- return;
- }
-
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnSessionMessage(session_id, message_type, message);
-}
-
-void RendererCdmManager::OnSessionClosed(int cdm_id,
- const std::string& session_id) {
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnSessionClosed(session_id);
-}
-
-void RendererCdmManager::OnSessionKeysChange(
- int cdm_id,
- const std::string& session_id,
- bool has_additional_usable_key,
- const std::vector<media::CdmKeyInformation>& key_info_vector) {
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (!media_keys)
- return;
-
- media::CdmKeysInfo keys_info;
- keys_info.reserve(key_info_vector.size());
- for (const auto& key_info : key_info_vector)
- keys_info.push_back(new media::CdmKeyInformation(key_info));
-
- media_keys->OnSessionKeysChange(session_id, has_additional_usable_key,
- std::move(keys_info));
-}
-
-void RendererCdmManager::OnSessionExpirationUpdate(
- int cdm_id,
- const std::string& session_id,
- const base::Time& new_expiry_time) {
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnSessionExpirationUpdate(session_id, new_expiry_time);
-}
-
-void RendererCdmManager::OnPromiseResolved(int cdm_id, uint32_t promise_id) {
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnPromiseResolved(promise_id);
-}
-
-void RendererCdmManager::OnPromiseResolvedWithSession(
- int cdm_id,
- uint32_t promise_id,
- const std::string& session_id) {
- if (session_id.length() > media::limits::kMaxSessionIdLength) {
- NOTREACHED();
- OnPromiseRejected(cdm_id, promise_id, MediaKeys::INVALID_ACCESS_ERROR, 0,
- "Session ID is too long");
- return;
- }
-
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnPromiseResolvedWithSession(promise_id, session_id);
-}
-
-void RendererCdmManager::OnPromiseRejected(int cdm_id,
- uint32_t promise_id,
- MediaKeys::Exception exception,
- uint32_t system_code,
- const std::string& error_message) {
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnPromiseRejected(promise_id, exception, system_code,
- error_message);
-}
-
-int RendererCdmManager::RegisterMediaKeys(ProxyMediaKeys* media_keys) {
- int cdm_id = next_cdm_id_++;
- DCHECK_NE(cdm_id, media::CdmContext::kInvalidCdmId);
- DCHECK(!base::ContainsKey(proxy_media_keys_map_, cdm_id));
- proxy_media_keys_map_[cdm_id] = media_keys;
- return cdm_id;
-}
-
-void RendererCdmManager::UnregisterMediaKeys(int cdm_id) {
- DCHECK(base::ContainsKey(proxy_media_keys_map_, cdm_id));
- proxy_media_keys_map_.erase(cdm_id);
-}
-
-ProxyMediaKeys* RendererCdmManager::GetMediaKeys(int cdm_id) {
- std::map<int, ProxyMediaKeys*>::iterator iter =
- proxy_media_keys_map_.find(cdm_id);
- return (iter != proxy_media_keys_map_.end()) ? iter->second : NULL;
-}
-
-} // namespace content
diff --git a/content/renderer/media/cdm/renderer_cdm_manager.h b/content/renderer/media/cdm/renderer_cdm_manager.h
deleted file mode 100644
index 5713f54..0000000
--- a/content/renderer/media/cdm/renderer_cdm_manager.h
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2014 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_RENDERER_MEDIA_CDM_RENDERER_CDM_MANAGER_H_
-#define CONTENT_RENDERER_MEDIA_CDM_RENDERER_CDM_MANAGER_H_
-
-#include <stdint.h>
-
-#include <map>
-#include <string>
-#include <vector>
-
-#include "base/macros.h"
-#include "content/common/media/cdm_messages_enums.h"
-#include "content/public/renderer/render_frame_observer.h"
-#include "media/base/media_keys.h"
-#include "url/gurl.h"
-
-namespace blink {
-class WebFrame;
-}
-
-namespace content {
-
-class ProxyMediaKeys;
-
-// Class for managing all the CDM objects in the same RenderFrame.
-class RendererCdmManager : public RenderFrameObserver {
- public:
- // Constructs a RendererCdmManager object for the |render_frame|.
- explicit RendererCdmManager(RenderFrame* render_frame);
- ~RendererCdmManager() override;
-
- // RenderFrameObserver overrides.
- bool OnMessageReceived(const IPC::Message& msg) override;
-
- // Encrypted media related methods.
- void InitializeCdm(int cdm_id,
- uint32_t promise_id,
- ProxyMediaKeys* media_keys,
- const std::string& key_system,
- const GURL& security_origin,
- bool use_hw_secure_codecs);
- void SetServerCertificate(int cdm_id,
- uint32_t promise_id,
- const std::vector<uint8_t>& certificate);
- void CreateSessionAndGenerateRequest(
- int cdm_id,
- uint32_t promise_id,
- media::MediaKeys::SessionType session_type,
- CdmHostMsg_CreateSession_InitDataType init_data_type,
- const std::vector<uint8_t>& init_data);
- void LoadSession(int cdm_id,
- uint32_t promise_id,
- media::MediaKeys::SessionType session_type,
- const std::string& session_id);
- void UpdateSession(int cdm_id,
- uint32_t promise_id,
- const std::string& session_id,
- const std::vector<uint8_t>& response);
- void CloseSession(int cdm_id,
- uint32_t promise_id,
- const std::string& session_id);
- void RemoveSession(int cdm_id,
- uint32_t promise_id,
- const std::string& session_id);
- void DestroyCdm(int cdm_id);
-
- // Registers a ProxyMediaKeys object. Returns allocated CDM ID.
- int RegisterMediaKeys(ProxyMediaKeys* media_keys);
-
- // Unregisters a ProxyMediaKeys object identified by |cdm_id|.
- void UnregisterMediaKeys(int cdm_id);
-
- private:
- // RenderFrameObserver implementation.
- void OnDestruct() override;
-
- // Gets the pointer to ProxyMediaKeys given the |cdm_id|.
- ProxyMediaKeys* GetMediaKeys(int cdm_id);
-
- // Message handlers.
- void OnSessionMessage(int cdm_id,
- const std::string& session_id,
- media::MediaKeys::MessageType message_type,
- const std::vector<uint8_t>& message);
- void OnSessionClosed(int cdm_id, const std::string& session_id);
- void OnSessionKeysChange(
- int cdm_id,
- const std::string& session_id,
- bool has_additional_usable_key,
- const std::vector<media::CdmKeyInformation>& key_info_vector);
- void OnSessionExpirationUpdate(int cdm_id,
- const std::string& session_id,
- const base::Time& new_expiry_time);
-
- void OnPromiseResolved(int cdm_id, uint32_t promise_id);
- void OnPromiseResolvedWithSession(int cdm_id,
- uint32_t promise_id,
- const std::string& session_id);
- void OnPromiseRejected(int cdm_id,
- uint32_t promise_id,
- media::MediaKeys::Exception exception,
- uint32_t system_code,
- const std::string& error_message);
-
- // CDM ID should be unique per renderer frame.
- // TODO(xhwang): Use uint32_t to prevent undefined overflow behavior.
- int next_cdm_id_;
-
- // CDM ID to ProxyMediaKeys mapping.
- std::map<int, ProxyMediaKeys*> proxy_media_keys_map_;
-
- DISALLOW_COPY_AND_ASSIGN(RendererCdmManager);
-};
-
-} // namespace content
-
-#endif // CONTENT_RENDERER_MEDIA_CDM_RENDERER_CDM_MANAGER_H_
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 7132bd3..495cf76 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -230,9 +230,6 @@
#if defined(ENABLE_PEPPER_CDMS)
#include "content/renderer/media/cdm/pepper_cdm_wrapper_impl.h"
#include "content/renderer/media/cdm/render_cdm_factory.h"
-#elif defined(ENABLE_BROWSER_CDMS)
-#include "content/renderer/media/cdm/render_cdm_factory.h"
-#include "content/renderer/media/cdm/renderer_cdm_manager.h"
#endif
#if defined(ENABLE_MOJO_MEDIA)
@@ -823,10 +820,9 @@
#if defined(ENABLE_MOJO_CDM)
// Returns whether mojo CDM should be used at runtime. Note that even when mojo
// CDM is enabled at compile time (ENABLE_MOJO_CDM is defined), there are cases
-// where we want to choose other CDM types. For example, on Android when we use
-// WebMediaPlayerAndroid, we still want to use ProxyMediaKeys. In the future,
-// when we experiment mojo CDM on desktop, we will choose between mojo CDM and
-// pepper CDM at runtime.
+// where we want to choose other CDM types. For example, in the future, when we
+// experiment mojo CDM on desktop, we will choose between mojo CDM and pepper
+// CDM at runtime.
// TODO(xhwang): Remove this when we use mojo CDM for all remote CDM cases by
// default.
bool UseMojoCdm() {
@@ -1062,9 +1058,6 @@
media_session_manager_(NULL),
#endif
media_surface_manager_(nullptr),
-#if defined(ENABLE_BROWSER_CDMS)
- cdm_manager_(NULL),
-#endif
devtools_agent_(nullptr),
push_messaging_dispatcher_(NULL),
presentation_dispatcher_(NULL),
@@ -6250,10 +6243,6 @@
DCHECK(frame_);
cdm_factory_.reset(
new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_)));
-#elif defined(ENABLE_BROWSER_CDMS)
- if (!cdm_manager_)
- cdm_manager_ = new RendererCdmManager(this);
- cdm_factory_.reset(new RenderCdmFactory(cdm_manager_));
#endif // defined(ENABLE_PEPPER_CDMS)
return cdm_factory_.get();
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 58b4b93d..b5904b22 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -1190,13 +1190,6 @@
// process. Always use the GetRemoterFactory() accessor instead of this.
media::mojom::RemoterFactoryPtr remoter_factory_;
-#if defined(ENABLE_BROWSER_CDMS)
- // Manage all CDMs in this render frame for communicating with the real CDM in
- // the browser process. It's okay to use a raw pointer since it's a
- // RenderFrameObserver.
- RendererCdmManager* cdm_manager_;
-#endif
-
// The CDM and decoder factory attached to this frame, lazily initialized.
std::unique_ptr<media::CdmFactory> cdm_factory_;
std::unique_ptr<media::DecoderFactory> decoder_factory_;