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/proxy_decryptor.cc | |
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/proxy_decryptor.cc')
-rw-r--r-- | webkit/renderer/media/crypto/proxy_decryptor.cc | 42 |
1 files changed, 19 insertions, 23 deletions
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) } |