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_;