diff options
author | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-14 08:17:42 +0000 |
---|---|---|
committer | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-14 08:17:42 +0000 |
commit | 98a54b764f5e5f61c6e660b348b169976977e411 (patch) | |
tree | 8226f8d492f9d5fa3686d15ee937fcaddf605a1a | |
parent | 1886ed653de28cfd398d6fab9aaacbad29fffb0a (diff) | |
download | chromium_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
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; |