summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-14 08:17:42 +0000
committerxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-14 08:17:42 +0000
commit98a54b764f5e5f61c6e660b348b169976977e411 (patch)
tree8226f8d492f9d5fa3686d15ee937fcaddf605a1a
parent1886ed653de28cfd398d6fab9aaacbad29fffb0a (diff)
downloadchromium_src-98a54b764f5e5f61c6e660b348b169976977e411.zip
chromium_src-98a54b764f5e5f61c6e660b348b169976977e411.tar.gz
chromium_src-98a54b764f5e5f61c6e660b348b169976977e411.tar.bz2
EME: Call InitializeCDM at the renderer side.
BUG=163552 TEST=none Review URL: https://chromiumcodereview.appspot.com/18439003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@211593 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/renderer/media/android/proxy_media_keys.cc10
-rw-r--r--content/renderer/media/android/proxy_media_keys.h2
-rw-r--r--content/renderer/media/android/webmediaplayer_android.cc6
-rw-r--r--content/renderer/media/crypto/content_decryption_module_factory.cc13
-rw-r--r--content/renderer/media/crypto/content_decryption_module_factory.h8
-rw-r--r--content/renderer/media/crypto/proxy_decryptor.cc9
-rw-r--r--content/renderer/media/crypto/proxy_decryptor.h8
-rw-r--r--content/renderer/media/webcontentdecryptionmodule_impl.cc9
8 files changed, 47 insertions, 18 deletions
diff --git a/content/renderer/media/android/proxy_media_keys.cc b/content/renderer/media/android/proxy_media_keys.cc
index 8724fc2..43a94e6 100644
--- a/content/renderer/media/android/proxy_media_keys.cc
+++ b/content/renderer/media/android/proxy_media_keys.cc
@@ -4,8 +4,12 @@
#include "content/renderer/media/android/proxy_media_keys.h"
+#include <vector>
+
+#include "base/basictypes.h"
#include "base/logging.h"
#include "content/renderer/media/android/webmediaplayer_proxy_android.h"
+#include "content/renderer/media/crypto/key_systems.h"
namespace content {
@@ -15,6 +19,12 @@ ProxyMediaKeys::ProxyMediaKeys(WebMediaPlayerProxyAndroid* proxy,
DCHECK(proxy_);
}
+void ProxyMediaKeys::InitializeCDM(const std::string& key_system) {
+ std::vector<uint8> uuid = GetUUID(key_system);
+ DCHECK(!uuid.empty());
+ proxy_->InitializeCDM(media_keys_id_, uuid);
+}
+
bool ProxyMediaKeys::GenerateKeyRequest(const std::string& type,
const uint8* init_data,
int init_data_length) {
diff --git a/content/renderer/media/android/proxy_media_keys.h b/content/renderer/media/android/proxy_media_keys.h
index 8185800..ca13279 100644
--- a/content/renderer/media/android/proxy_media_keys.h
+++ b/content/renderer/media/android/proxy_media_keys.h
@@ -20,6 +20,8 @@ class ProxyMediaKeys : public media::MediaKeys {
public:
ProxyMediaKeys(WebMediaPlayerProxyAndroid* proxy, int media_keys_id);
+ void InitializeCDM(const std::string& key_system);
+
// MediaKeys implementation.
virtual bool GenerateKeyRequest(const std::string& type,
const uint8* init_data,
diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc
index 2414ea6..80419f3 100644
--- a/content/renderer/media/android/webmediaplayer_android.cc
+++ b/content/renderer/media/android/webmediaplayer_android.cc
@@ -143,9 +143,9 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
client,
frame,
#else
- // TODO(xhwang): Use media_keys_id when MediaKeys are separated from
- // WebMediaPlayer.
- scoped_ptr<media::MediaKeys>(new ProxyMediaKeys(proxy_, player_id_)),
+ proxy_,
+ player_id_, // TODO(xhwang): Use media_keys_id when MediaKeys are
+ // separated from WebMediaPlayer.
#endif // defined(ENABLE_PEPPER_CDMS)
// |decryptor_| is owned, so Unretained() is safe here.
base::Bind(&WebMediaPlayerAndroid::OnKeyAdded, base::Unretained(this)),
diff --git a/content/renderer/media/crypto/content_decryption_module_factory.cc b/content/renderer/media/crypto/content_decryption_module_factory.cc
index 65c9398..d3eb9e1 100644
--- a/content/renderer/media/crypto/content_decryption_module_factory.cc
+++ b/content/renderer/media/crypto/content_decryption_module_factory.cc
@@ -15,7 +15,12 @@
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
#include "webkit/plugins/ppapi/ppapi_webplugin_impl.h"
#include "webkit/renderer/media/crypto/ppapi_decryptor.h"
+#elif defined(OS_ANDROID)
+#include "content/renderer/media/android/proxy_media_keys.h"
+#include "content/renderer/media/android/webmediaplayer_proxy_android.h"
+#endif // defined(ENABLE_PEPPER_CDMS)
+#if defined(ENABLE_PEPPER_CDMS)
using webkit_media::PpapiDecryptor;
#endif // defined(ENABLE_PEPPER_CDMS)
@@ -94,7 +99,8 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create(
WebKit::WebFrame* web_frame,
const base::Closure& destroy_plugin_cb,
#elif defined(OS_ANDROID)
- scoped_ptr<media::MediaKeys> proxy_media_keys,
+ WebMediaPlayerProxyAndroid* proxy,
+ int media_keys_id,
#endif // defined(ENABLE_PEPPER_CDMS)
const media::KeyAddedCB& key_added_cb,
const media::KeyErrorCB& key_error_cb,
@@ -114,7 +120,10 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create(
key_system, key_added_cb, key_error_cb, key_message_cb,
destroy_plugin_cb, web_media_player_client, web_frame);
#elif defined(OS_ANDROID)
- return proxy_media_keys.Pass();
+ scoped_ptr<ProxyMediaKeys> proxy_media_keys(
+ new ProxyMediaKeys(proxy, media_keys_id));
+ proxy_media_keys->InitializeCDM(key_system);
+ return proxy_media_keys.PassAs<media::MediaKeys>();
#else
return scoped_ptr<media::MediaKeys>();
#endif // defined(ENABLE_PEPPER_CDMS)
diff --git a/content/renderer/media/crypto/content_decryption_module_factory.h b/content/renderer/media/crypto/content_decryption_module_factory.h
index 5f0cd45..f891128 100644
--- a/content/renderer/media/crypto/content_decryption_module_factory.h
+++ b/content/renderer/media/crypto/content_decryption_module_factory.h
@@ -19,6 +19,8 @@ class WebMediaPlayerClient;
namespace content {
+class WebMediaPlayerProxyAndroid;
+
class ContentDecryptionModuleFactory {
public:
static scoped_ptr<media::MediaKeys> Create(
@@ -29,10 +31,8 @@ class ContentDecryptionModuleFactory {
WebKit::WebFrame* web_frame,
const base::Closure& destroy_plugin_cb,
#elif defined(OS_ANDROID)
- // TODO(scherkus): Revert the ProxyDecryptor changes from r208040 so that
- // this class always creates the MediaKeys.
- // A ProxyMediaKeys to be used if |key_system| is not Clear Key.
- scoped_ptr<media::MediaKeys> proxy_media_keys,
+ WebMediaPlayerProxyAndroid* proxy,
+ int media_keys_id,
#endif // defined(ENABLE_PEPPER_CDMS)
const media::KeyAddedCB& key_added_cb,
const media::KeyErrorCB& key_error_cb,
diff --git a/content/renderer/media/crypto/proxy_decryptor.cc b/content/renderer/media/crypto/proxy_decryptor.cc
index 5b34138..6f77317 100644
--- a/content/renderer/media/crypto/proxy_decryptor.cc
+++ b/content/renderer/media/crypto/proxy_decryptor.cc
@@ -23,7 +23,8 @@ ProxyDecryptor::ProxyDecryptor(
WebKit::WebMediaPlayerClient* web_media_player_client,
WebKit::WebFrame* web_frame,
#elif defined(OS_ANDROID)
- scoped_ptr<media::MediaKeys> media_keys,
+ WebMediaPlayerProxyAndroid* proxy,
+ int media_keys_id,
#endif // defined(ENABLE_PEPPER_CDMS)
const media::KeyAddedCB& key_added_cb,
const media::KeyErrorCB& key_error_cb,
@@ -33,7 +34,8 @@ ProxyDecryptor::ProxyDecryptor(
web_media_player_client_(web_media_player_client),
web_frame_(web_frame),
#elif defined(OS_ANDROID)
- proxy_media_keys_(media_keys.Pass()),
+ proxy_(proxy),
+ media_keys_id_(media_keys_id),
#endif // defined(ENABLE_PEPPER_CDMS)
key_added_cb_(key_added_cb),
key_error_cb_(key_error_cb),
@@ -126,7 +128,8 @@ scoped_ptr<media::MediaKeys> ProxyDecryptor::CreateMediaKeys(
base::Bind(&ProxyDecryptor::DestroyHelperPlugin,
weak_ptr_factory_.GetWeakPtr()),
#elif defined(OS_ANDROID)
- proxy_media_keys_.Pass(),
+ proxy_,
+ media_keys_id_,
#endif // defined(ENABLE_PEPPER_CDMS)
base::Bind(&ProxyDecryptor::KeyAdded, weak_ptr_factory_.GetWeakPtr()),
base::Bind(&ProxyDecryptor::KeyError, weak_ptr_factory_.GetWeakPtr()),
diff --git a/content/renderer/media/crypto/proxy_decryptor.h b/content/renderer/media/crypto/proxy_decryptor.h
index bf878c2..399665f 100644
--- a/content/renderer/media/crypto/proxy_decryptor.h
+++ b/content/renderer/media/crypto/proxy_decryptor.h
@@ -24,6 +24,8 @@ class WebMediaPlayerClient;
namespace content {
+class WebMediaPlayerProxyAndroid;
+
// 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
// forwards decryptor calls to it.
@@ -37,7 +39,8 @@ class ProxyDecryptor : public media::MediaKeys {
WebKit::WebMediaPlayerClient* web_media_player_client,
WebKit::WebFrame* web_frame,
#elif defined(OS_ANDROID)
- scoped_ptr<media::MediaKeys> media_keys,
+ WebMediaPlayerProxyAndroid* proxy,
+ int media_keys_id,
#endif // defined(ENABLE_PEPPER_CDMS)
const media::KeyAddedCB& key_added_cb,
const media::KeyErrorCB& key_error_cb,
@@ -86,7 +89,8 @@ class ProxyDecryptor : public media::MediaKeys {
WebKit::WebMediaPlayerClient* web_media_player_client_;
WebKit::WebFrame* web_frame_;
#elif defined(OS_ANDROID)
- scoped_ptr<media::MediaKeys> proxy_media_keys_;
+ WebMediaPlayerProxyAndroid* proxy_;
+ int media_keys_id_;
#endif // defined(ENABLE_PEPPER_CDMS)
// The real MediaKeys that manages key operations for the ProxyDecryptor.
diff --git a/content/renderer/media/webcontentdecryptionmodule_impl.cc b/content/renderer/media/webcontentdecryptionmodule_impl.cc
index 59be6d03f..0a430ad 100644
--- a/content/renderer/media/webcontentdecryptionmodule_impl.cc
+++ b/content/renderer/media/webcontentdecryptionmodule_impl.cc
@@ -85,11 +85,12 @@ bool SessionIdAdapter::Initialize(const std::string& key_system,
base::Closure(),
#elif defined(OS_ANDROID)
// TODO(xhwang): Support Android.
- scoped_ptr<media::MediaKeys>(),
+ NULL,
+ 0,
#endif // defined(ENABLE_PEPPER_CDMS)
- base::Bind(&SessionIdAdapter::KeyAdded, weak_this),
- base::Bind(&SessionIdAdapter::KeyError, weak_this),
- base::Bind(&SessionIdAdapter::KeyMessage, weak_this));
+ base::Bind(&SessionIdAdapter::KeyAdded, weak_this),
+ base::Bind(&SessionIdAdapter::KeyError, weak_this),
+ base::Bind(&SessionIdAdapter::KeyMessage, weak_this));
if (!created_media_keys)
return false;