summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-10 23:21:53 +0000
committerxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-10 23:21:53 +0000
commit4b556cfa4c747c6aa5e35fbe04669b974a013531 (patch)
tree0fd30c0106cf89f6ba2803838ef87029339c7b2e /content
parentff1a10b45ad9190a9545768411f1a884273ef27d (diff)
downloadchromium_src-4b556cfa4c747c6aa5e35fbe04669b974a013531.zip
chromium_src-4b556cfa4c747c6aa5e35fbe04669b974a013531.tar.gz
chromium_src-4b556cfa4c747c6aa5e35fbe04669b974a013531.tar.bz2
Introduce the ENABLE_BROWSER_CDMS macro.
This will be defined when a platform needs to use browser side CDM to implement EME API. Currently this is only used on Android. Note that MediaWebContentsObserver is shared by Android media player managers and browser CDM managers. Since ENABLE_BROWSER_CDMS is always true on Android, we only check ENABLE_BROWSER_CDMS to decide whether MediaWebContentsObserver should be used. Also, in media_web_contents_observer.*, we only check OS_ANDROID to decide whether Android media player code should be used. This is not perfect but makes the current code simple. This will be fixed when we have a general (not Android specic) media player manager. TBR=yfriedman@chromium.org BUG=315312 TEST=Compiles on Android. Test pages still work on Android. Compiles when I choose to use browser CDM on Linux. Review URL: https://codereview.chromium.org/318753010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276200 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/android/child_process_launcher_android.cc2
-rw-r--r--content/browser/android/content_view_core_impl.cc2
-rw-r--r--content/browser/android/surface_texture_peer_browser_impl.cc2
-rw-r--r--content/browser/media/cdm/browser_cdm_manager.cc (renamed from content/browser/media/android/browser_cdm_manager.cc)2
-rw-r--r--content/browser/media/cdm/browser_cdm_manager.h (renamed from content/browser/media/android/browser_cdm_manager.h)6
-rw-r--r--content/browser/media/media_web_contents_observer.cc (renamed from content/browser/media/android/media_web_contents_observer.cc)103
-rw-r--r--content/browser/media/media_web_contents_observer.h (renamed from content/browser/media/android/media_web_contents_observer.h)38
-rw-r--r--content/browser/renderer_host/render_view_host_impl.cc8
-rw-r--r--content/browser/renderer_host/render_view_host_impl.h9
-rw-r--r--content/browser/renderer_host/render_widget_host_view_android.cc2
-rw-r--r--content/content_browser.gypi13
-rw-r--r--content/content_renderer.gypi12
-rw-r--r--content/renderer/media/cdm_session_adapter.cc10
-rw-r--r--content/renderer/media/cdm_session_adapter.h9
-rw-r--r--content/renderer/media/crypto/content_decryption_module_factory.cc8
-rw-r--r--content/renderer/media/crypto/content_decryption_module_factory.h4
-rw-r--r--content/renderer/media/crypto/proxy_decryptor.cc12
-rw-r--r--content/renderer/media/crypto/proxy_decryptor.h10
-rw-r--r--content/renderer/media/webcontentdecryptionmodule_impl.cc10
-rw-r--r--content/renderer/media/webcontentdecryptionmodule_impl.h8
-rw-r--r--content/renderer/media/webmediaplayer_impl.cc2
-rw-r--r--content/renderer/render_frame_impl.cc17
-rw-r--r--content/renderer/render_frame_impl.h22
23 files changed, 180 insertions, 131 deletions
diff --git a/content/browser/android/child_process_launcher_android.cc b/content/browser/android/child_process_launcher_android.cc
index 06fa0cb..baac2b0 100644
--- a/content/browser/android/child_process_launcher_android.cc
+++ b/content/browser/android/child_process_launcher_android.cc
@@ -10,7 +10,7 @@
#include "base/memory/scoped_ptr.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/media/android/browser_media_player_manager.h"
-#include "content/browser/media/android/media_web_contents_observer.h"
+#include "content/browser/media/media_web_contents_observer.h"
#include "content/browser/renderer_host/compositor_impl_android.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/public/browser/browser_thread.h"
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index 8fdfb8c..9f74b84 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -24,7 +24,7 @@
#include "content/browser/frame_host/navigation_controller_impl.h"
#include "content/browser/frame_host/navigation_entry_impl.h"
#include "content/browser/geolocation/geolocation_dispatcher_host.h"
-#include "content/browser/media/android/media_web_contents_observer.h"
+#include "content/browser/media/media_web_contents_observer.h"
#include "content/browser/renderer_host/compositor_impl_android.h"
#include "content/browser/renderer_host/input/motion_event_android.h"
#include "content/browser/renderer_host/input/web_input_event_builders_android.h"
diff --git a/content/browser/android/surface_texture_peer_browser_impl.cc b/content/browser/android/surface_texture_peer_browser_impl.cc
index 99e2c08..4f61887 100644
--- a/content/browser/android/surface_texture_peer_browser_impl.cc
+++ b/content/browser/android/surface_texture_peer_browser_impl.cc
@@ -6,7 +6,7 @@
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/media/android/browser_media_player_manager.h"
-#include "content/browser/media/android/media_web_contents_observer.h"
+#include "content/browser/media/media_web_contents_observer.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
diff --git a/content/browser/media/android/browser_cdm_manager.cc b/content/browser/media/cdm/browser_cdm_manager.cc
index 20013ec..d66692e 100644
--- a/content/browser/media/android/browser_cdm_manager.cc
+++ b/content/browser/media/cdm/browser_cdm_manager.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/browser/media/android/browser_cdm_manager.h"
+#include "content/browser/media/cdm/browser_cdm_manager.h"
#include "base/command_line.h"
#include "base/stl_util.h"
diff --git a/content/browser/media/android/browser_cdm_manager.h b/content/browser/media/cdm/browser_cdm_manager.h
index d55c50c..fcdfe2d 100644
--- a/content/browser/media/android/browser_cdm_manager.h
+++ b/content/browser/media/cdm/browser_cdm_manager.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_BROWSER_MEDIA_ANDROID_BROWSER_CDM_MANAGER_H_
-#define CONTENT_BROWSER_MEDIA_ANDROID_BROWSER_CDM_MANAGER_H_
+#ifndef CONTENT_BROWSER_MEDIA_CDM_BROWSER_CDM_MANAGER_H_
+#define CONTENT_BROWSER_MEDIA_CDM_BROWSER_CDM_MANAGER_H_
#include <map>
#include <string>
@@ -122,4 +122,4 @@ class CONTENT_EXPORT BrowserCdmManager {
} // namespace content
-#endif // CONTENT_BROWSER_MEDIA_ANDROID_BROWSER_CDM_MANAGER_H_
+#endif // CONTENT_BROWSER_MEDIA_CDM_BROWSER_CDM_MANAGER_H_
diff --git a/content/browser/media/android/media_web_contents_observer.cc b/content/browser/media/media_web_contents_observer.cc
index 063085b..de1fb89 100644
--- a/content/browser/media/android/media_web_contents_observer.cc
+++ b/content/browser/media/media_web_contents_observer.cc
@@ -2,24 +2,24 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/browser/media/android/media_web_contents_observer.h"
+#include "content/browser/media/media_web_contents_observer.h"
#include "base/memory/scoped_ptr.h"
#include "base/stl_util.h"
-#include "content/browser/media/android/browser_cdm_manager.h"
-#include "content/browser/media/android/browser_media_player_manager.h"
+#include "content/browser/media/cdm/browser_cdm_manager.h"
#include "content/common/media/cdm_messages.h"
-#include "content/common/media/media_player_messages_android.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "ipc/ipc_message_macros.h"
+
+#if defined(OS_ANDROID)
+#include "content/browser/media/android/browser_media_player_manager.h"
+#include "content/common/media/media_player_messages_android.h"
#include "media/base/android/media_player_android.h"
+#endif // defined(OS_ANDROID)
namespace content {
-using media::BrowserCdm;
-using media::MediaPlayerAndroid;
-
MediaWebContentsObserver::MediaWebContentsObserver(
RenderViewHost* render_view_host)
: WebContentsObserver(WebContents::FromRenderViewHost(render_view_host)) {
@@ -31,25 +31,67 @@ MediaWebContentsObserver::~MediaWebContentsObserver() {
void MediaWebContentsObserver::RenderFrameDeleted(
RenderFrameHost* render_frame_host) {
uintptr_t key = reinterpret_cast<uintptr_t>(render_frame_host);
- media_player_managers_.erase(key);
cdm_managers_.erase(key);
+#if defined(OS_ANDROID)
+ media_player_managers_.erase(key);
+#endif
}
bool MediaWebContentsObserver::OnMessageReceived(
const IPC::Message& msg,
RenderFrameHost* render_frame_host) {
+#if defined(OS_ANDROID)
+ // Handles MediaPlayer messages first because MediaPlayers messages are much
+ // more frequent than CDM messages.
if (OnMediaPlayerMessageReceived(msg, render_frame_host))
return true;
- if (OnCdmMessageReceived(msg, render_frame_host))
+ if (OnMediaPlayerSetCdmMessageReceived(msg, render_frame_host))
return true;
+#endif // defined(OS_ANDROID)
- if (OnMediaPlayerSetCdmMessageReceived(msg, render_frame_host))
+ if (OnCdmMessageReceived(msg, render_frame_host))
return true;
return false;
}
+bool MediaWebContentsObserver::OnCdmMessageReceived(
+ const IPC::Message& msg,
+ RenderFrameHost* render_frame_host) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserver, msg)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_InitializeCdm,
+ GetCdmManager(render_frame_host),
+ BrowserCdmManager::OnInitializeCdm)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_CreateSession,
+ GetCdmManager(render_frame_host),
+ BrowserCdmManager::OnCreateSession)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_UpdateSession,
+ GetCdmManager(render_frame_host),
+ BrowserCdmManager::OnUpdateSession)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_ReleaseSession,
+ GetCdmManager(render_frame_host),
+ BrowserCdmManager::OnReleaseSession)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_DestroyCdm,
+ GetCdmManager(render_frame_host),
+ BrowserCdmManager::OnDestroyCdm)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+BrowserCdmManager* MediaWebContentsObserver::GetCdmManager(
+ RenderFrameHost* render_frame_host) {
+ uintptr_t key = reinterpret_cast<uintptr_t>(render_frame_host);
+ if (!cdm_managers_.contains(key)) {
+ cdm_managers_.set(
+ key, make_scoped_ptr(BrowserCdmManager::Create(render_frame_host)));
+ }
+ return cdm_managers_.get(key);
+}
+
+#if defined(OS_ANDROID)
bool MediaWebContentsObserver::OnMediaPlayerMessageReceived(
const IPC::Message& msg,
RenderFrameHost* render_frame_host) {
@@ -93,31 +135,6 @@ bool MediaWebContentsObserver::OnMediaPlayerMessageReceived(
GetMediaPlayerManager(render_frame_host),
BrowserMediaPlayerManager::OnNotifyExternalSurface)
#endif // defined(VIDEO_HOLE)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
-bool MediaWebContentsObserver::OnCdmMessageReceived(
- const IPC::Message& msg,
- RenderFrameHost* render_frame_host) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserver, msg)
- IPC_MESSAGE_FORWARD(CdmHostMsg_InitializeCdm,
- GetCdmManager(render_frame_host),
- BrowserCdmManager::OnInitializeCdm)
- IPC_MESSAGE_FORWARD(CdmHostMsg_CreateSession,
- GetCdmManager(render_frame_host),
- BrowserCdmManager::OnCreateSession)
- IPC_MESSAGE_FORWARD(CdmHostMsg_UpdateSession,
- GetCdmManager(render_frame_host),
- BrowserCdmManager::OnUpdateSession)
- IPC_MESSAGE_FORWARD(CdmHostMsg_ReleaseSession,
- GetCdmManager(render_frame_host),
- BrowserCdmManager::OnReleaseSession)
- IPC_MESSAGE_FORWARD(CdmHostMsg_DestroyCdm,
- GetCdmManager(render_frame_host),
- BrowserCdmManager::OnDestroyCdm)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -138,14 +155,14 @@ bool MediaWebContentsObserver::OnMediaPlayerSetCdmMessageReceived(
void MediaWebContentsObserver::OnSetCdm(RenderFrameHost* render_frame_host,
int player_id,
int cdm_id) {
- MediaPlayerAndroid* media_player =
+ media::MediaPlayerAndroid* media_player =
GetMediaPlayerManager(render_frame_host)->GetPlayer(player_id);
if (!media_player) {
NOTREACHED() << "OnSetCdm: MediaPlayer not found for " << player_id;
return;
}
- BrowserCdm* cdm = GetCdmManager(render_frame_host)->GetCdm(cdm_id);
+ media::BrowserCdm* cdm = GetCdmManager(render_frame_host)->GetCdm(cdm_id);
if (!cdm) {
NOTREACHED() << "OnSetCdm: CDM not found for " << cdm_id;
return;
@@ -167,16 +184,6 @@ BrowserMediaPlayerManager* MediaWebContentsObserver::GetMediaPlayerManager(
return media_player_managers_.get(key);
}
-BrowserCdmManager* MediaWebContentsObserver::GetCdmManager(
- RenderFrameHost* render_frame_host) {
- uintptr_t key = reinterpret_cast<uintptr_t>(render_frame_host);
- if (!cdm_managers_.contains(key)) {
- cdm_managers_.set(
- key, make_scoped_ptr(BrowserCdmManager::Create(render_frame_host)));
- }
- return cdm_managers_.get(key);
-}
-
void MediaWebContentsObserver::PauseVideo() {
for (MediaPlayerManagerMap::iterator iter = media_player_managers_.begin();
iter != media_player_managers_.end(); ++iter) {
@@ -195,4 +202,6 @@ void MediaWebContentsObserver::OnFrameInfoUpdated() {
}
#endif // defined(VIDEO_HOLE)
+#endif // defined(OS_ANDROID)
+
} // namespace content
diff --git a/content/browser/media/android/media_web_contents_observer.h b/content/browser/media/media_web_contents_observer.h
index 38b82b2..8ed8993 100644
--- a/content/browser/media/android/media_web_contents_observer.h
+++ b/content/browser/media/media_web_contents_observer.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_WEB_CONTENTS_OBSERVER_H_
-#define CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_WEB_CONTENTS_OBSERVER_H_
+#ifndef CONTENT_BROWSER_MEDIA_MEDIA_WEB_CONTENTS_OBSERVER_H_
+#define CONTENT_BROWSER_MEDIA_MEDIA_WEB_CONTENTS_OBSERVER_H_
#include "base/compiler_specific.h"
#include "base/containers/scoped_ptr_hash_map.h"
@@ -13,7 +13,9 @@
namespace content {
class BrowserCdmManager;
+#if defined(OS_ANDROID)
class BrowserMediaPlayerManager;
+#endif // defined(OS_ANDROID)
class RenderViewHost;
// This class manages all RenderFrame based media related managers at the
@@ -30,12 +32,20 @@ class CONTENT_EXPORT MediaWebContentsObserver : public WebContentsObserver {
virtual bool OnMessageReceived(const IPC::Message& message,
RenderFrameHost* render_frame_host) OVERRIDE;
- // Helper functions to handle various IPC messages. Returns whether the
+ // Helper function to handle CDM IPC messages. Returns whether the |message|
+ // is handled in the function.
+ bool OnCdmMessageReceived(const IPC::Message& message,
+ RenderFrameHost* render_frame_host);
+
+ // Gets the CDM manager associated with |render_frame_host|. Creates
+ // a new one if it doesn't exist. The caller doesn't own the returned pointer.
+ BrowserCdmManager* GetCdmManager(RenderFrameHost* render_frame_host);
+
+#if defined(OS_ANDROID)
+ // Helper functions to handle media player IPC messages. Returns whether the
// |message| is handled in the function.
bool OnMediaPlayerMessageReceived(const IPC::Message& message,
RenderFrameHost* render_frame_host);
- bool OnCdmMessageReceived(const IPC::Message& message,
- RenderFrameHost* render_frame_host);
bool OnMediaPlayerSetCdmMessageReceived(const IPC::Message& message,
RenderFrameHost* render_frame_host);
@@ -44,10 +54,6 @@ class CONTENT_EXPORT MediaWebContentsObserver : public WebContentsObserver {
BrowserMediaPlayerManager* GetMediaPlayerManager(
RenderFrameHost* render_frame_host);
- // Gets the CDM manager associated with |render_frame_host|. Creates
- // a new one if it doesn't exist. The caller doesn't own the returned pointer.
- BrowserCdmManager* GetCdmManager(RenderFrameHost* render_frame_host);
-
void OnSetCdm(RenderFrameHost* render_frame_host, int player_id, int cdm_id);
// Pauses all media player.
@@ -57,19 +63,23 @@ class CONTENT_EXPORT MediaWebContentsObserver : public WebContentsObserver {
void OnFrameInfoUpdated();
#endif // defined(VIDEO_HOLE)
+#endif // defined(OS_ANDROID)
+
private:
+ // Map from RenderFrameHost* to BrowserCdmManager.
+ typedef base::ScopedPtrHashMap<uintptr_t, BrowserCdmManager> CdmManagerMap;
+ CdmManagerMap cdm_managers_;
+
+#if defined(OS_ANDROID)
// Map from RenderFrameHost* to BrowserMediaPlayerManager.
typedef base::ScopedPtrHashMap<uintptr_t, BrowserMediaPlayerManager>
MediaPlayerManagerMap;
MediaPlayerManagerMap media_player_managers_;
-
- // Map from RenderFrameHost* to BrowserCdmManager.
- typedef base::ScopedPtrHashMap<uintptr_t, BrowserCdmManager> CdmManagerMap;
- CdmManagerMap cdm_managers_;
+#endif // defined(OS_ANDROID)
DISALLOW_COPY_AND_ASSIGN(MediaWebContentsObserver);
};
} // namespace content
-#endif // CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_WEB_CONTENTS_OBSERVER_H_
+#endif // CONTENT_BROWSER_MEDIA_MEDIA_WEB_CONTENTS_OBSERVER_H_
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index bbbffe7..7cc1ae7 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -91,12 +91,14 @@
#if defined(OS_MACOSX)
#include "content/browser/renderer_host/popup_menu_helper_mac.h"
-#elif defined(OS_ANDROID)
-#include "content/browser/media/android/media_web_contents_observer.h"
#elif defined(OS_WIN)
#include "base/win/win_util.h"
#endif
+#if defined(ENABLE_BROWSER_CDMS)
+#include "content/browser/media/media_web_contents_observer.h"
+#endif
+
using base::TimeDelta;
using blink::WebConsoleMessage;
using blink::WebDragOperation;
@@ -223,7 +225,7 @@ RenderViewHostImpl::RenderViewHostImpl(
GetProcess()->GetID(), GetRoutingID()));
}
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
media_web_contents_observer_.reset(new MediaWebContentsObserver(this));
#endif
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
index f389992..d034769 100644
--- a/content/browser/renderer_host/render_view_host_impl.h
+++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -391,11 +391,13 @@ class CONTENT_EXPORT RenderViewHostImpl
void DidCancelPopupMenu();
#endif
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
MediaWebContentsObserver* media_web_contents_observer() {
return media_web_contents_observer_.get();
}
+#endif
+#if defined(OS_ANDROID)
void DidSelectPopupMenuItems(const std::vector<int>& selected_indices);
void DidCancelPopupMenu();
#endif
@@ -620,9 +622,8 @@ class CONTENT_EXPORT RenderViewHostImpl
// Set to true if we requested the on screen keyboard to be displayed.
bool virtual_keyboard_requested_;
-#if defined(OS_ANDROID)
- // Manages all the android mediaplayer managers and forwards IPCs to the
- // managers.
+#if defined(ENABLE_BROWSER_CDMS)
+ // Manages all the media player and CDM managers and forwards IPCs to them.
scoped_ptr<MediaWebContentsObserver> media_web_contents_observer_;
#endif
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 1cc054c..b3cb189 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -35,7 +35,7 @@
#include "content/browser/gpu/gpu_data_manager_impl.h"
#include "content/browser/gpu/gpu_process_host_ui_shim.h"
#include "content/browser/gpu/gpu_surface_tracker.h"
-#include "content/browser/media/android/media_web_contents_observer.h"
+#include "content/browser/media/media_web_contents_observer.h"
#include "content/browser/renderer_host/compositor_impl_android.h"
#include "content/browser/renderer_host/dip_util.h"
#include "content/browser/renderer_host/image_transport_factory_android.h"
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index 966dd96..7144e6b 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -783,8 +783,6 @@
'browser/loader/upload_data_stream_builder.h',
'browser/mach_broker_mac.h',
'browser/mach_broker_mac.mm',
- 'browser/media/android/browser_cdm_manager.cc',
- 'browser/media/android/browser_cdm_manager.h',
'browser/media/android/browser_demuxer_android.cc',
'browser/media/android/browser_demuxer_android.h',
'browser/media/android/browser_media_player_manager.cc',
@@ -793,8 +791,6 @@
'browser/media/android/media_drm_credential_manager.h',
'browser/media/android/media_resource_getter_impl.cc',
'browser/media/android/media_resource_getter_impl.h',
- 'browser/media/android/media_web_contents_observer.cc',
- 'browser/media/android/media_web_contents_observer.h',
'browser/media/capture/audio_mirroring_manager.cc',
'browser/media/capture/audio_mirroring_manager.h',
'browser/media/capture/content_video_capture_device_core.cc',
@@ -1766,5 +1762,14 @@
'browser/geolocation/wifi_data_provider_linux.cc',
],
}],
+ ['enable_browser_cdms==1', {
+ 'sources': [
+ 'browser/media/cdm/browser_cdm_manager.cc',
+ 'browser/media/cdm/browser_cdm_manager.h',
+ # This works on Android because enable_browser_cdms==1 on Android.
+ 'browser/media/media_web_contents_observer.cc',
+ 'browser/media/media_web_contents_observer.h',
+ ],
+ }],
],
}
diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi
index fb31680..dd10f21 100644
--- a/content/content_renderer.gypi
+++ b/content/content_renderer.gypi
@@ -255,10 +255,6 @@
'renderer/media/crypto/ppapi_decryptor.h',
'renderer/media/crypto/proxy_decryptor.cc',
'renderer/media/crypto/proxy_decryptor.h',
- 'renderer/media/crypto/proxy_media_keys.cc',
- 'renderer/media/crypto/proxy_media_keys.h',
- 'renderer/media/crypto/renderer_cdm_manager.cc',
- 'renderer/media/crypto/renderer_cdm_manager.h',
'renderer/media/media_stream_audio_level_calculator.cc',
'renderer/media/media_stream_audio_level_calculator.h',
'renderer/media/media_stream_audio_renderer.cc',
@@ -828,6 +824,14 @@
'renderer/media/crypto/ppapi_decryptor.h',
],
}],
+ ['enable_browser_cdms==1', {
+ 'sources': [
+ 'renderer/media/crypto/proxy_media_keys.cc',
+ 'renderer/media/crypto/proxy_media_keys.h',
+ 'renderer/media/crypto/renderer_cdm_manager.cc',
+ 'renderer/media/crypto/renderer_cdm_manager.h',
+ ],
+ }],
],
'target_conditions': [
['OS=="android"', {
diff --git a/content/renderer/media/cdm_session_adapter.cc b/content/renderer/media/cdm_session_adapter.cc
index 42b2a43..5550c44 100644
--- a/content/renderer/media/cdm_session_adapter.cc
+++ b/content/renderer/media/cdm_session_adapter.cc
@@ -17,7 +17,7 @@
namespace content {
CdmSessionAdapter::CdmSessionAdapter() :
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
cdm_id_(0),
#endif
weak_ptr_factory_(this) {}
@@ -27,7 +27,7 @@ CdmSessionAdapter::~CdmSessionAdapter() {}
bool CdmSessionAdapter::Initialize(
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* manager,
#endif // defined(ENABLE_PEPPER_CDMS)
const std::string& key_system,
@@ -38,7 +38,7 @@ bool CdmSessionAdapter::Initialize(
security_origin,
#if defined(ENABLE_PEPPER_CDMS)
create_pepper_cdm_cb,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
manager,
&cdm_id_,
#endif // defined(ENABLE_PEPPER_CDMS)
@@ -100,11 +100,11 @@ media::Decryptor* CdmSessionAdapter::GetDecryptor() {
return media_keys_->GetDecryptor();
}
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
int CdmSessionAdapter::GetCdmId() const {
return cdm_id_;
}
-#endif // defined(OS_ANDROID)
+#endif // defined(ENABLE_BROWSER_CDMS)
void CdmSessionAdapter::OnSessionMessage(const std::string& web_session_id,
const std::vector<uint8>& message,
diff --git a/content/renderer/media/cdm_session_adapter.h b/content/renderer/media/cdm_session_adapter.h
index b05ebe3..de27125 100644
--- a/content/renderer/media/cdm_session_adapter.h
+++ b/content/renderer/media/cdm_session_adapter.h
@@ -23,9 +23,10 @@ class GURL;
namespace content {
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
class RendererCdmManager;
#endif
+
class WebContentDecryptionModuleSessionImpl;
// Owns the CDM instance and makes calls from session objects to the CDM.
@@ -40,7 +41,7 @@ class CdmSessionAdapter : public base::RefCounted<CdmSessionAdapter> {
bool Initialize(
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* manager,
#endif
const std::string& key_system,
@@ -87,7 +88,7 @@ class CdmSessionAdapter : public base::RefCounted<CdmSessionAdapter> {
// after WebContentDecryptionModule is freed. http://crbug.com/330324
media::Decryptor* GetDecryptor();
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
// Returns the CDM ID associated with the |media_keys_|. May be kInvalidCdmId
// if no CDM ID is associated.
int GetCdmId() const;
@@ -120,7 +121,7 @@ class CdmSessionAdapter : public base::RefCounted<CdmSessionAdapter> {
SessionMap sessions_;
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
int cdm_id_;
#endif
diff --git a/content/renderer/media/crypto/content_decryption_module_factory.cc b/content/renderer/media/crypto/content_decryption_module_factory.cc
index 982192d..328f1c0 100644
--- a/content/renderer/media/crypto/content_decryption_module_factory.cc
+++ b/content/renderer/media/crypto/content_decryption_module_factory.cc
@@ -11,7 +11,7 @@
#if defined(ENABLE_PEPPER_CDMS)
#include "content/renderer/media/crypto/ppapi_decryptor.h"
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
#include "content/renderer/media/crypto/proxy_media_keys.h"
#include "content/renderer/media/crypto/renderer_cdm_manager.h"
#endif // defined(ENABLE_PEPPER_CDMS)
@@ -23,7 +23,7 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create(
const GURL& security_origin,
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* manager,
int* cdm_id,
#endif // defined(ENABLE_PEPPER_CDMS)
@@ -36,7 +36,7 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create(
// check the security origin before calling.
// DCHECK(security_origin.is_valid());
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
*cdm_id = RendererCdmManager::kInvalidCdmId;
#endif
@@ -53,7 +53,7 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create(
session_ready_cb,
session_closed_cb,
session_error_cb));
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
scoped_ptr<ProxyMediaKeys> proxy_media_keys =
ProxyMediaKeys::Create(key_system,
security_origin,
diff --git a/content/renderer/media/crypto/content_decryption_module_factory.h b/content/renderer/media/crypto/content_decryption_module_factory.h
index ae92af6..c18bf9d 100644
--- a/content/renderer/media/crypto/content_decryption_module_factory.h
+++ b/content/renderer/media/crypto/content_decryption_module_factory.h
@@ -18,7 +18,9 @@ class GURL;
namespace content {
+#if defined(ENABLE_BROWSER_CDMS)
class RendererCdmManager;
+#endif
class ContentDecryptionModuleFactory {
public:
@@ -29,7 +31,7 @@ class ContentDecryptionModuleFactory {
const GURL& security_origin,
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* manager,
int* cdm_id, // Output parameter indicating the CDM ID of the MediaKeys.
#endif // defined(ENABLE_PEPPER_CDMS)
diff --git a/content/renderer/media/crypto/proxy_decryptor.cc b/content/renderer/media/crypto/proxy_decryptor.cc
index 7d79070..192cde3 100644
--- a/content/renderer/media/crypto/proxy_decryptor.cc
+++ b/content/renderer/media/crypto/proxy_decryptor.cc
@@ -19,9 +19,9 @@
#include "content/renderer/media/crypto/pepper_cdm_wrapper.h"
#endif // defined(ENABLE_PEPPER_CDMS)
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
#include "content/renderer/media/crypto/renderer_cdm_manager.h"
-#endif // defined(OS_ANDROID)
+#endif // defined(ENABLE_BROWSER_CDMS)
namespace content {
@@ -33,7 +33,7 @@ const int kSessionClosedSystemCode = 29127;
ProxyDecryptor::ProxyDecryptor(
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* manager,
#endif // defined(ENABLE_PEPPER_CDMS)
const KeyAddedCB& key_added_cb,
@@ -42,7 +42,7 @@ ProxyDecryptor::ProxyDecryptor(
:
#if defined(ENABLE_PEPPER_CDMS)
create_pepper_cdm_cb_(create_pepper_cdm_cb),
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
manager_(manager),
cdm_id_(RendererCdmManager::kInvalidCdmId),
#endif // defined(ENABLE_PEPPER_CDMS)
@@ -68,7 +68,7 @@ media::Decryptor* ProxyDecryptor::GetDecryptor() {
return media_keys_ ? media_keys_->GetDecryptor() : NULL;
}
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
int ProxyDecryptor::GetCdmId() {
return cdm_id_;
}
@@ -212,7 +212,7 @@ scoped_ptr<media::MediaKeys> ProxyDecryptor::CreateMediaKeys(
security_origin,
#if defined(ENABLE_PEPPER_CDMS)
create_pepper_cdm_cb_,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
manager_,
&cdm_id_,
#endif // defined(ENABLE_PEPPER_CDMS)
diff --git a/content/renderer/media/crypto/proxy_decryptor.h b/content/renderer/media/crypto/proxy_decryptor.h
index 98bfbb1..e4fd7ea 100644
--- a/content/renderer/media/crypto/proxy_decryptor.h
+++ b/content/renderer/media/crypto/proxy_decryptor.h
@@ -23,9 +23,9 @@ class GURL;
namespace content {
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
class RendererCdmManager;
-#endif // defined(OS_ANDROID)
+#endif // defined(ENABLE_BROWSER_CDMS)
// ProxyDecryptor is for EME v0.1b only. It should not be used for the WD API.
// A decryptor proxy that creates a real decryptor object on demand and
@@ -49,7 +49,7 @@ class ProxyDecryptor {
ProxyDecryptor(
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* manager,
#endif // defined(ENABLE_PEPPER_CDMS)
const KeyAddedCB& key_added_cb,
@@ -61,7 +61,7 @@ class ProxyDecryptor {
// Decryptor is associated.
media::Decryptor* GetDecryptor();
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
// Returns the CDM ID associated with this object. May be kInvalidCdmId if no
// CDM ID is associated, such as when Clear Key is used.
int GetCdmId();
@@ -102,7 +102,7 @@ class ProxyDecryptor {
#if defined(ENABLE_PEPPER_CDMS)
// Callback to create the Pepper plugin.
CreatePepperCdmCB create_pepper_cdm_cb_;
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* manager_;
int cdm_id_;
#endif // defined(ENABLE_PEPPER_CDMS)
diff --git a/content/renderer/media/webcontentdecryptionmodule_impl.cc b/content/renderer/media/webcontentdecryptionmodule_impl.cc
index 99c44a1..c1e455e 100644
--- a/content/renderer/media/webcontentdecryptionmodule_impl.cc
+++ b/content/renderer/media/webcontentdecryptionmodule_impl.cc
@@ -29,14 +29,14 @@ namespace content {
WebContentDecryptionModuleImpl* WebContentDecryptionModuleImpl::Create(
#if defined(ENABLE_PEPPER_CDMS)
blink::WebLocalFrame* frame,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* manager,
#endif
const blink::WebSecurityOrigin& security_origin,
const base::string16& key_system) {
#if defined(ENABLE_PEPPER_CDMS)
DCHECK(frame);
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
DCHECK(manager);
#endif
DCHECK(!security_origin.isNull());
@@ -65,7 +65,7 @@ WebContentDecryptionModuleImpl* WebContentDecryptionModuleImpl::Create(
if (!adapter->Initialize(
#if defined(ENABLE_PEPPER_CDMS)
base::Bind(&PepperCdmWrapperImpl::Create, frame),
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
manager,
#endif
key_system_ascii,
@@ -94,10 +94,10 @@ media::Decryptor* WebContentDecryptionModuleImpl::GetDecryptor() {
return adapter_->GetDecryptor();
}
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
int WebContentDecryptionModuleImpl::GetCdmId() const {
return adapter_->GetCdmId();
}
-#endif // defined(OS_ANDROID)
+#endif // defined(ENABLE_BROWSER_CDMS)
} // namespace content
diff --git a/content/renderer/media/webcontentdecryptionmodule_impl.h b/content/renderer/media/webcontentdecryptionmodule_impl.h
index 152f962..871ca27 100644
--- a/content/renderer/media/webcontentdecryptionmodule_impl.h
+++ b/content/renderer/media/webcontentdecryptionmodule_impl.h
@@ -27,7 +27,7 @@ class MediaKeys;
namespace content {
class CdmSessionAdapter;
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
class RendererCdmManager;
#endif
class WebContentDecryptionModuleSessionImpl;
@@ -38,7 +38,7 @@ class WebContentDecryptionModuleImpl
static WebContentDecryptionModuleImpl* Create(
#if defined(ENABLE_PEPPER_CDMS)
blink::WebLocalFrame* frame,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* manager,
#endif
const blink::WebSecurityOrigin& security_origin,
@@ -52,11 +52,11 @@ class WebContentDecryptionModuleImpl
// after WebContentDecryptionModule is freed. http://crbug.com/330324
media::Decryptor* GetDecryptor();
-#if defined(OS_ANDROID)
+#if defined(ENABLE_BROWSER_CDMS)
// Returns the CDM ID associated with this object. May be kInvalidCdmId if no
// CDM ID is associated, such as when Clear Key is used.
int GetCdmId() const;
-#endif // defined(OS_ANDROID)
+#endif // defined(ENABLE_BROWSER_CDMS)
// blink::WebContentDecryptionModule implementation.
virtual blink::WebContentDecryptionModuleSession* createSession(
diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
index da95623..7b8bb49 100644
--- a/content/renderer/media/webmediaplayer_impl.cc
+++ b/content/renderer/media/webmediaplayer_impl.cc
@@ -762,6 +762,8 @@ WebMediaPlayerImpl::GenerateKeyRequestInternal(const std::string& key_system,
// Create() must be called synchronously as |frame_| may not be
// valid afterwards.
base::Bind(&PepperCdmWrapperImpl::Create, frame_),
+#elif defined(ENABLE_BROWSER_CDMS)
+#error Browser side CDM in WMPI for prefixed EME API not supported yet.
#endif
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyAdded),
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyError),
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index d167078..cbe9236 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -127,6 +127,9 @@
#include "content/renderer/media/android/renderer_media_player_manager.h"
#include "content/renderer/media/android/stream_texture_factory_impl.h"
#include "content/renderer/media/android/webmediaplayer_android.h"
+#endif
+
+#if defined(ENABLE_BROWSER_CDMS)
#include "content/renderer/media/crypto/renderer_cdm_manager.h"
#endif
@@ -416,6 +419,8 @@ RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id)
web_user_media_client_(NULL),
#if defined(OS_ANDROID)
media_player_manager_(NULL),
+#endif
+#if defined(ENABLE_BROWSER_CDMS)
cdm_manager_(NULL),
#endif
geolocation_dispatcher_(NULL),
@@ -441,10 +446,10 @@ RenderFrameImpl::~RenderFrameImpl() {
FOR_EACH_OBSERVER(RenderFrameObserver, observers_, RenderFrameGone());
FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnDestruct());
-#if defined(VIDEO_HOLE)
+#if defined(OS_ANDROID) && defined(VIDEO_HOLE)
if (media_player_manager_)
render_view_->UnregisterVideoHoleFrame(this);
-#endif // defined(VIDEO_HOLE)
+#endif
render_view_->UnregisterRenderFrame(this);
g_routing_id_frame_map.Get().erase(routing_id_);
@@ -1422,7 +1427,7 @@ RenderFrameImpl::createContentDecryptionModule(
return WebContentDecryptionModuleImpl::Create(
#if defined(ENABLE_PEPPER_CDMS)
frame,
-#elif defined(OS_ANDROID)
+#elif defined(ENABLE_BROWSER_CDMS)
GetCdmManager(),
#endif
security_origin,
@@ -3571,12 +3576,14 @@ RendererMediaPlayerManager* RenderFrameImpl::GetMediaPlayerManager() {
return media_player_manager_;
}
+#endif // defined(OS_ANDROID)
+
+#if defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* RenderFrameImpl::GetCdmManager() {
if (!cdm_manager_)
cdm_manager_ = new RendererCdmManager(this);
return cdm_manager_;
}
-
-#endif // defined(OS_ANDROID)
+#endif // defined(ENABLE_BROWSER_CDMS)
} // namespace content
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 2b4fbe0..3fb83ac 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -62,6 +62,8 @@ class GeolocationDispatcher;
class MediaStreamRendererFactory;
class NotificationProvider;
class PepperPluginInstanceImpl;
+class RendererCdmManager;
+class RendererMediaPlayerManager;
class RendererPpapiHost;
class RenderFrameObserver;
class RenderViewImpl;
@@ -69,11 +71,6 @@ class RenderWidget;
class RenderWidgetFullscreenPepper;
struct CustomContextMenuContext;
-#if defined(OS_ANDROID)
-class RendererCdmManager;
-class RendererMediaPlayerManager;
-#endif
-
class CONTENT_EXPORT RenderFrameImpl
: public RenderFrame,
NON_EXPORTED_BASE(public blink::WebFrameClient),
@@ -542,6 +539,9 @@ class CONTENT_EXPORT RenderFrameImpl
blink::WebMediaPlayerClient* client);
RendererMediaPlayerManager* GetMediaPlayerManager();
+#endif
+
+#if defined(ENABLE_BROWSER_CDMS)
RendererCdmManager* GetCdmManager();
#endif
@@ -611,10 +611,16 @@ class CONTENT_EXPORT RenderFrameImpl
blink::WebUserMediaClient* web_user_media_client_;
#if defined(OS_ANDROID)
- // These manage all media players and CDMs in this render frame for
- // communicating with the real media player and CDM objects in the browser
- // process. It's okay to use raw pointers since they are RenderFrameObservers.
+ // Manages all media players in this render frame for communicating with the
+ // real media player in the browser process. It's okay to use a raw pointer
+ // since it's a RenderFrameObserver.
RendererMediaPlayerManager* media_player_manager_;
+#endif
+
+#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