diff options
author | jrummell@chromium.org <jrummell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-31 23:32:31 +0000 |
---|---|---|
committer | jrummell@chromium.org <jrummell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-31 23:32:31 +0000 |
commit | 65b852866e1d00e42f730d9a065915a3c738fe46 (patch) | |
tree | 88aa8d399c8e605e3e9fd0668515b4566cff0cc1 /content/renderer/media/crypto | |
parent | 5e0fecd9898c5c944a1a9be7a576c931b4b5f783 (diff) | |
download | chromium_src-65b852866e1d00e42f730d9a065915a3c738fe46.zip chromium_src-65b852866e1d00e42f730d9a065915a3c738fe46.tar.gz chromium_src-65b852866e1d00e42f730d9a065915a3c738fe46.tar.bz2 |
Provide security origin to Android EME implementation
Rather than passing the URL when creating the CDM on Android, pass in
a WebSecurityOrigin.
BUG=349201, 353324
TEST=encrypted media layout and browser tests pass, encrypted content plays on Android
Review URL: https://codereview.chromium.org/213423005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260702 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/media/crypto')
5 files changed, 18 insertions, 20 deletions
diff --git a/content/renderer/media/crypto/content_decryption_module_factory.cc b/content/renderer/media/crypto/content_decryption_module_factory.cc index 77aad29..a7f4cc1 100644 --- a/content/renderer/media/crypto/content_decryption_module_factory.cc +++ b/content/renderer/media/crypto/content_decryption_module_factory.cc @@ -7,14 +7,10 @@ #include "base/logging.h" #include "content/renderer/media/crypto/key_systems.h" #include "media/cdm/aes_decryptor.h" +#include "url/gurl.h" #if defined(ENABLE_PEPPER_CDMS) #include "content/renderer/media/crypto/ppapi_decryptor.h" -#include "content/renderer/pepper/pepper_plugin_instance_impl.h" -#include "content/renderer/pepper/pepper_webplugin_impl.h" -#include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" -#include "third_party/WebKit/public/platform/WebString.h" -#include "third_party/WebKit/public/web/WebFrame.h" #elif defined(OS_ANDROID) #include "content/renderer/media/android/proxy_media_keys.h" #include "content/renderer/media/android/renderer_media_player_manager.h" @@ -24,11 +20,11 @@ namespace content { scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create( const std::string& key_system, + const GURL& security_origin, #if defined(ENABLE_PEPPER_CDMS) const CreatePepperCdmCB& create_pepper_cdm_cb, #elif defined(OS_ANDROID) RendererMediaPlayerManager* manager, - const GURL& frame_url, int* cdm_id, #endif // defined(ENABLE_PEPPER_CDMS) const media::SessionCreatedCB& session_created_cb, @@ -36,9 +32,15 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create( const media::SessionReadyCB& session_ready_cb, const media::SessionClosedCB& session_closed_cb, const media::SessionErrorCB& session_error_cb) { + // TODO(jrummell): Pass |security_origin| to all constructors. + // TODO(jrummell): Enable the following line once blink code updated to + // check the security origin before calling. + // DCHECK(security_origin.is_valid()); + #if defined(OS_ANDROID) *cdm_id = RendererMediaPlayerManager::kInvalidCdmId; #endif + if (CanUseAesDecryptor(key_system)) { return scoped_ptr<media::MediaKeys>( new media::AesDecryptor(session_created_cb, @@ -64,7 +66,7 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create( session_ready_cb, session_closed_cb, session_error_cb)); - proxy_media_keys->InitializeCdm(key_system, frame_url); + proxy_media_keys->InitializeCdm(key_system, security_origin); *cdm_id = proxy_media_keys->GetCdmId(); return proxy_media_keys.PassAs<media::MediaKeys>(); #else diff --git a/content/renderer/media/crypto/content_decryption_module_factory.h b/content/renderer/media/crypto/content_decryption_module_factory.h index df3f34e..d7d8269 100644 --- a/content/renderer/media/crypto/content_decryption_module_factory.h +++ b/content/renderer/media/crypto/content_decryption_module_factory.h @@ -26,11 +26,11 @@ class ContentDecryptionModuleFactory { // callbacks can be called asynchronously. static scoped_ptr<media::MediaKeys> Create( const std::string& key_system, + const GURL& security_origin, #if defined(ENABLE_PEPPER_CDMS) const CreatePepperCdmCB& create_pepper_cdm_cb, #elif defined(OS_ANDROID) RendererMediaPlayerManager* manager, - const GURL& frame_url, int* cdm_id, // Output parameter indicating the CDM ID of the MediaKeys. #endif // defined(ENABLE_PEPPER_CDMS) const media::SessionCreatedCB& session_created_cb, diff --git a/content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc b/content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc index f32dc03..69059cd 100644 --- a/content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc +++ b/content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc @@ -23,12 +23,7 @@ void WebHelperPluginDeleter::operator()(blink::WebHelperPlugin* plugin) const { scoped_ptr<PepperCdmWrapper> PepperCdmWrapperImpl::Create( blink::WebFrame* frame, const std::string& pluginType) { - - // TODO(jrummell): Convert to DCHECK(frame) once Blink starts passing the - // WebFrame to WebContentDecryptionModuleImpl. - if (!frame) - return scoped_ptr<PepperCdmWrapper>(); - + DCHECK(frame); ScopedHelperPlugin helper_plugin(blink::WebHelperPlugin::create( blink::WebString::fromUTF8(pluginType), frame)); if (!helper_plugin) diff --git a/content/renderer/media/crypto/proxy_decryptor.cc b/content/renderer/media/crypto/proxy_decryptor.cc index 189d8ad..95fe49f 100644 --- a/content/renderer/media/crypto/proxy_decryptor.cc +++ b/content/renderer/media/crypto/proxy_decryptor.cc @@ -82,11 +82,11 @@ int ProxyDecryptor::GetCdmId() { #endif bool ProxyDecryptor::InitializeCDM(const std::string& key_system, - const GURL& frame_url) { + const GURL& security_origin) { DVLOG(1) << "InitializeCDM: key_system = " << key_system; DCHECK(!media_keys_); - media_keys_ = CreateMediaKeys(key_system, frame_url); + media_keys_ = CreateMediaKeys(key_system, security_origin); if (!media_keys_) return false; @@ -189,14 +189,14 @@ void ProxyDecryptor::CancelKeyRequest(const std::string& session_id) { scoped_ptr<media::MediaKeys> ProxyDecryptor::CreateMediaKeys( const std::string& key_system, - const GURL& frame_url) { + const GURL& security_origin) { return ContentDecryptionModuleFactory::Create( key_system, + security_origin, #if defined(ENABLE_PEPPER_CDMS) create_pepper_cdm_cb_, #elif defined(OS_ANDROID) manager_, - frame_url, &cdm_id_, #endif // defined(ENABLE_PEPPER_CDMS) base::Bind(&ProxyDecryptor::OnSessionCreated, diff --git a/content/renderer/media/crypto/proxy_decryptor.h b/content/renderer/media/crypto/proxy_decryptor.h index c07af0ac..2919ef7 100644 --- a/content/renderer/media/crypto/proxy_decryptor.h +++ b/content/renderer/media/crypto/proxy_decryptor.h @@ -76,7 +76,8 @@ class ProxyDecryptor { #endif // Only call this once. - bool InitializeCDM(const std::string& key_system, const GURL& frame_url); + bool InitializeCDM(const std::string& key_system, + const GURL& security_origin); // May only be called after InitializeCDM() succeeds. bool GenerateKeyRequest(const std::string& type, @@ -93,7 +94,7 @@ class ProxyDecryptor { // Helper function to create MediaKeys to handle the given |key_system|. scoped_ptr<media::MediaKeys> CreateMediaKeys(const std::string& key_system, - const GURL& frame_url); + const GURL& security_origin); // Callbacks for firing session events. void OnSessionCreated(uint32 session_id, const std::string& web_session_id); |