diff options
author | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-19 13:41:43 +0000 |
---|---|---|
committer | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-19 13:41:43 +0000 |
commit | 1c637bcb13a000b67e570f31ef187b9072b854e4 (patch) | |
tree | c1191e6ea75fa041c9c568051242cd2a01c06dc3 /webkit/renderer/media/crypto | |
parent | 69ea87175787600f5e7cfbd8cda1895fafa3176e (diff) | |
download | chromium_src-1c637bcb13a000b67e570f31ef187b9072b854e4.zip chromium_src-1c637bcb13a000b67e570f31ef187b9072b854e4.tar.gz chromium_src-1c637bcb13a000b67e570f31ef187b9072b854e4.tar.bz2 |
EME: ProxyDecryptor creates MediaKeys instead of Decryptor.
ProxyDecryptor will be the MediaKeys manager for EME v0.1b. So it'll create and
manage MediaKeys instead of Decryptors. Also add GetDecryptor() method in
MediaKey interface so that we can get a Decryptor through the MediaKeys interface.
BUG=163552
Review URL: https://chromiumcodereview.appspot.com/17381007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207233 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/renderer/media/crypto')
-rw-r--r-- | webkit/renderer/media/crypto/ppapi_decryptor.cc | 2 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/ppapi_decryptor.h | 2 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/proxy_decryptor.cc | 42 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/proxy_decryptor.h | 11 |
4 files changed, 27 insertions, 30 deletions
diff --git a/webkit/renderer/media/crypto/ppapi_decryptor.cc b/webkit/renderer/media/crypto/ppapi_decryptor.cc index 786eb19..71f4685f5 100644 --- a/webkit/renderer/media/crypto/ppapi_decryptor.cc +++ b/webkit/renderer/media/crypto/ppapi_decryptor.cc @@ -126,7 +126,7 @@ void PpapiDecryptor::CancelKeyRequest(const std::string& session_id) { ReportFailureToCallPlugin(session_id); } -media::MediaKeys* PpapiDecryptor::GetMediaKeys() { +media::Decryptor* PpapiDecryptor::GetDecryptor() { return this; } diff --git a/webkit/renderer/media/crypto/ppapi_decryptor.h b/webkit/renderer/media/crypto/ppapi_decryptor.h index 30c9698..6a360f477 100644 --- a/webkit/renderer/media/crypto/ppapi_decryptor.h +++ b/webkit/renderer/media/crypto/ppapi_decryptor.h @@ -51,9 +51,9 @@ class PpapiDecryptor : public media::MediaKeys, public media::Decryptor { const uint8* init_data, int init_data_length, const std::string& session_id) OVERRIDE; virtual void CancelKeyRequest(const std::string& session_id) OVERRIDE; + virtual Decryptor* GetDecryptor() OVERRIDE; // media::Decryptor implementation. - virtual media::MediaKeys* GetMediaKeys() OVERRIDE; virtual void RegisterNewKeyCB(StreamType stream_type, const NewKeyCB& key_added_cb) OVERRIDE; virtual void Decrypt(StreamType stream_type, diff --git a/webkit/renderer/media/crypto/proxy_decryptor.cc b/webkit/renderer/media/crypto/proxy_decryptor.cc index 0c1f6bf..2aa0804 100644 --- a/webkit/renderer/media/crypto/proxy_decryptor.cc +++ b/webkit/renderer/media/crypto/proxy_decryptor.cc @@ -70,7 +70,7 @@ ProxyDecryptor::~ProxyDecryptor() { // Destroy the decryptor explicitly before destroying the plugin. { base::AutoLock auto_lock(lock_); - decryptor_.reset(); + media_keys_.reset(); } } @@ -92,8 +92,8 @@ void ProxyDecryptor::SetDecryptorReadyCB( // Normal decryptor request. DCHECK(decryptor_ready_cb_.is_null()); - if (decryptor_) { - decryptor_ready_cb.Run(decryptor_.get()); + if (media_keys_) { + decryptor_ready_cb.Run(media_keys_->GetDecryptor()); return; } decryptor_ready_cb_ = decryptor_ready_cb; @@ -104,26 +104,22 @@ bool ProxyDecryptor::InitializeCDM(const std::string& key_system) { base::AutoLock auto_lock(lock_); - DCHECK(!decryptor_); - decryptor_ = CreateDecryptor(key_system); + DCHECK(!media_keys_); + media_keys_ = CreateMediaKeys(key_system); - return decryptor_ != NULL; + return media_keys_ != NULL; } - bool ProxyDecryptor::GenerateKeyRequest(const std::string& type, const uint8* init_data, int init_data_length) { - DCHECK(decryptor_); - - if (!decryptor_->GetMediaKeys()->GenerateKeyRequest( - type, init_data, init_data_length)) { - decryptor_.reset(); + if (!media_keys_->GenerateKeyRequest(type, init_data, init_data_length)) { + media_keys_.reset(); return false; } if (!decryptor_ready_cb_.is_null()) - base::ResetAndReturn(&decryptor_ready_cb_).Run(decryptor_.get()); + base::ResetAndReturn(&decryptor_ready_cb_).Run(media_keys_->GetDecryptor()); return true; } @@ -136,19 +132,18 @@ void ProxyDecryptor::AddKey(const uint8* key, DVLOG(1) << "AddKey()"; // WebMediaPlayerImpl ensures GenerateKeyRequest() has been called. - decryptor_->GetMediaKeys()->AddKey( - key, key_length, init_data, init_data_length, session_id); + media_keys_->AddKey(key, key_length, init_data, init_data_length, session_id); } void ProxyDecryptor::CancelKeyRequest(const std::string& session_id) { DVLOG(1) << "CancelKeyRequest()"; // WebMediaPlayerImpl ensures GenerateKeyRequest() has been called. - decryptor_->GetMediaKeys()->CancelKeyRequest(session_id); + media_keys_->CancelKeyRequest(session_id); } #if defined(ENABLE_PEPPER_CDMS) -scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor( +scoped_ptr<media::MediaKeys> ProxyDecryptor::CreatePpapiDecryptor( const std::string& key_system) { DCHECK(web_media_player_client_); DCHECK(web_frame_); @@ -159,7 +154,7 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor( CreateHelperPlugin(plugin_type, web_media_player_client_, web_frame_); if (!plugin_instance.get()) { DVLOG(1) << "ProxyDecryptor: plugin instance creation failed."; - return scoped_ptr<media::Decryptor>(); + return scoped_ptr<media::MediaKeys>(); } scoped_ptr<webkit_media::PpapiDecryptor> decryptor = PpapiDecryptor::Create( @@ -176,18 +171,19 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor( DestroyHelperPlugin(); // Else the new object will call destroy_plugin_cb to destroy Helper Plugin. - return scoped_ptr<media::Decryptor>(decryptor.Pass()); + return scoped_ptr<media::MediaKeys>(decryptor.Pass()); } #endif // defined(ENABLE_PEPPER_CDMS) -scoped_ptr<media::Decryptor> ProxyDecryptor::CreateDecryptor( +scoped_ptr<media::MediaKeys> ProxyDecryptor::CreateMediaKeys( const std::string& key_system) { - if (CanUseAesDecryptor(key_system)) - return scoped_ptr<media::Decryptor>(new media::AesDecryptor( + if (CanUseAesDecryptor(key_system)) { + return scoped_ptr<media::MediaKeys>(new media::AesDecryptor( base::Bind(&ProxyDecryptor::KeyAdded, weak_ptr_factory_.GetWeakPtr()), base::Bind(&ProxyDecryptor::KeyError, weak_ptr_factory_.GetWeakPtr()), base::Bind(&ProxyDecryptor::KeyMessage, weak_ptr_factory_.GetWeakPtr()), base::Bind(&ProxyDecryptor::NeedKey, weak_ptr_factory_.GetWeakPtr()))); + } #if defined(ENABLE_PEPPER_CDMS) // We only support AesDecryptor and PpapiDecryptor. So if we cannot @@ -195,7 +191,7 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreateDecryptor( // |key_system|. return CreatePpapiDecryptor(key_system); #else - return scoped_ptr<media::Decryptor>(); + return scoped_ptr<media::MediaKeys>(); #endif // defined(ENABLE_PEPPER_CDMS) } diff --git a/webkit/renderer/media/crypto/proxy_decryptor.h b/webkit/renderer/media/crypto/proxy_decryptor.h index 54efc8a..0bffe56 100644 --- a/webkit/renderer/media/crypto/proxy_decryptor.h +++ b/webkit/renderer/media/crypto/proxy_decryptor.h @@ -55,10 +55,11 @@ class ProxyDecryptor : public media::MediaKeys { virtual void CancelKeyRequest(const std::string& session_id) OVERRIDE; private: - // Helper functions to create decryptors to handle the given |key_system|. - scoped_ptr<media::Decryptor> CreateDecryptor(const std::string& key_system); + // Helper functions to create MediaKeys to handle the given |key_system|. + scoped_ptr<media::MediaKeys> CreateMediaKeys(const std::string& key_system); + #if defined(ENABLE_PEPPER_CDMS) - scoped_ptr<media::Decryptor> CreatePpapiDecryptor( + scoped_ptr<media::MediaKeys> CreatePpapiDecryptor( const std::string& key_system); // Callback for cleaning up a Pepper CDM. void DestroyHelperPlugin(); @@ -92,9 +93,9 @@ class ProxyDecryptor : public media::MediaKeys { media::DecryptorReadyCB decryptor_ready_cb_; - // The real decryptor that does decryption for the ProxyDecryptor. + // The real MediaKeys that manages key operations for the ProxyDecryptor. // This pointer is protected by the |lock_|. - scoped_ptr<media::Decryptor> decryptor_; + scoped_ptr<media::MediaKeys> media_keys_; base::WeakPtrFactory<ProxyDecryptor> weak_ptr_factory_; |