Chromium Code Reviews| Index: webkit/media/crypto/proxy_decryptor.cc |
| diff --git a/webkit/media/crypto/proxy_decryptor.cc b/webkit/media/crypto/proxy_decryptor.cc |
| index 3e445c418161a272e97b12ea570596ce4531e789..c61975ec440cadf8376e44b0254e52ca76ee7db3 100644 |
| --- a/webkit/media/crypto/proxy_decryptor.cc |
| +++ b/webkit/media/crypto/proxy_decryptor.cc |
| @@ -68,6 +68,7 @@ ProxyDecryptor::ProxyDecryptor( |
| key_error_cb_(key_error_cb), |
| key_message_cb_(key_message_cb), |
| need_key_cb_(need_key_cb), |
| + decryptor_(NULL), |
| weak_ptr_factory_(this) { |
| } |
| @@ -75,7 +76,8 @@ ProxyDecryptor::~ProxyDecryptor() { |
| // Destroy the decryptor explicitly before destroying the plugin. |
| { |
| base::AutoLock auto_lock(lock_); |
| - decryptor_.reset(); |
| + media_keys_.reset(); |
| + decryptor_ = NULL; |
| } |
| #if defined(ENABLE_PEPPER_CDMS) |
| @@ -105,7 +107,7 @@ void ProxyDecryptor::SetDecryptorReadyCB( |
| // Normal decryptor request. |
| DCHECK(decryptor_ready_cb_.is_null()); |
| if (decryptor_) { |
| - decryptor_ready_cb.Run(decryptor_.get()); |
| + decryptor_ready_cb.Run(decryptor_); |
| return; |
| } |
| decryptor_ready_cb_ = decryptor_ready_cb; |
| @@ -121,23 +123,25 @@ bool ProxyDecryptor::GenerateKeyRequest(const std::string& key_system, |
| base::AutoLock auto_lock(lock_); |
|
ddorwin
2013/05/24 20:39:12
We should probably
DCHECK((media_keys_ == NULL)
xhwang
2013/05/24 23:15:56
This is not necessary now.
|
| - if (!decryptor_) { |
| - decryptor_ = CreateDecryptor(key_system); |
| - if (!decryptor_) { |
| + if (!media_keys_) { |
| + if (!CreateDecryptor(key_system)) { |
| key_error_cb_.Run( |
| - key_system, std::string(), media::Decryptor::kClientError, 0); |
| + key_system, std::string(), media::MediaKeys::kClientError, 0); |
| return false; |
| } |
| } |
| - if (!decryptor_->GenerateKeyRequest(key_system, type, |
| - init_data, init_data_length)) { |
| - decryptor_.reset(); |
| + DCHECK(decryptor_); |
| + |
| + if (!media_keys_->GenerateKeyRequest(key_system, type, |
|
ddorwin
2013/05/24 20:39:12
We only use media_keys_ in three places. This clas
xhwang
2013/05/24 23:15:56
Done.
|
| + init_data, init_data_length)) { |
| + media_keys_.reset(); |
| + decryptor_ = NULL; |
| return false; |
| } |
| if (!decryptor_ready_cb_.is_null()) |
| - base::ResetAndReturn(&decryptor_ready_cb_).Run(decryptor_.get()); |
| + base::ResetAndReturn(&decryptor_ready_cb_).Run(decryptor_); |
| return true; |
| } |
| @@ -151,8 +155,8 @@ void ProxyDecryptor::AddKey(const std::string& key_system, |
| DVLOG(1) << "AddKey()"; |
| // WebMediaPlayerImpl ensures GenerateKeyRequest() has been called. |
| - decryptor_->AddKey(key_system, key, key_length, init_data, init_data_length, |
| - session_id); |
| + media_keys_->AddKey( |
| + key_system, key, key_length, init_data, init_data_length, session_id); |
| } |
| void ProxyDecryptor::CancelKeyRequest(const std::string& key_system, |
| @@ -160,11 +164,11 @@ void ProxyDecryptor::CancelKeyRequest(const std::string& key_system, |
| DVLOG(1) << "CancelKeyRequest()"; |
| // WebMediaPlayerImpl ensures GenerateKeyRequest() has been called. |
| - decryptor_->CancelKeyRequest(key_system, session_id); |
| + media_keys_->CancelKeyRequest(key_system, session_id); |
| } |
| #if defined(ENABLE_PEPPER_CDMS) |
| -scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor( |
| +scoped_ptr<PpapiDecryptor> ProxyDecryptor::CreatePpapiDecryptor( |
| const std::string& key_system) { |
| DCHECK(web_media_player_client_); |
| DCHECK(web_frame_); |
| @@ -176,10 +180,10 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor( |
| did_create_helper_plugin_ = plugin_instance != NULL; |
| if (!did_create_helper_plugin_) { |
| DVLOG(1) << "ProxyDecryptor: plugin instance creation failed."; |
| - return scoped_ptr<media::Decryptor>(); |
| + return scoped_ptr<PpapiDecryptor>(); |
| } |
| - return scoped_ptr<media::Decryptor>(new PpapiDecryptor( |
| + return scoped_ptr<PpapiDecryptor>(new PpapiDecryptor( |
| plugin_instance, |
| base::Bind(&ProxyDecryptor::KeyAdded, weak_ptr_factory_.GetWeakPtr()), |
| base::Bind(&ProxyDecryptor::KeyError, weak_ptr_factory_.GetWeakPtr()), |
| @@ -188,23 +192,31 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor( |
| } |
| #endif // defined(ENABLE_PEPPER_CDMS) |
| -scoped_ptr<media::Decryptor> ProxyDecryptor::CreateDecryptor( |
| - const std::string& key_system) { |
| - if (CanUseAesDecryptor(key_system)) |
| - return scoped_ptr<media::Decryptor>(new media::AesDecryptor( |
| +bool ProxyDecryptor::CreateDecryptor(const std::string& key_system) { |
| + if (CanUseAesDecryptor(key_system)) { |
| + scoped_ptr<media::AesDecryptor> aes_decryptor(new media::AesDecryptor( |
|
ddorwin
2013/05/24 20:39:12
media_keys_ =
xhwang
2013/05/24 23:15:56
This change is reverted.
|
| 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()))); |
| + decryptor_ = aes_decryptor.get(); |
| + media_keys_ = aes_decryptor.Pass(); |
| + return true; |
| + } |
| #if defined(ENABLE_PEPPER_CDMS) |
| // We only support AesDecryptor and PpapiDecryptor. So if we cannot |
| // use the AesDecryptor, then we'll try to create a PpapiDecryptor for given |
| // |key_system|. |
| - return CreatePpapiDecryptor(key_system); |
| -#else |
| - return scoped_ptr<media::Decryptor>(); |
| + scoped_ptr<PpapiDecryptor> ppapi_decryptor = CreatePpapiDecryptor(key_system); |
|
ddorwin
2013/05/24 20:39:12
same
xhwang
2013/05/24 23:15:56
This change is reverted.
|
| + if (ppapi_decryptor) { |
| + decryptor_ = ppapi_decryptor.get(); |
| + media_keys_ = ppapi_decryptor.Pass(); |
| + return true; |
| + } |
| #endif // defined(ENABLE_PEPPER_CDMS) |
| + |
| + return false; |
| } |
| void ProxyDecryptor::KeyAdded(const std::string& key_system, |
| @@ -214,7 +226,7 @@ void ProxyDecryptor::KeyAdded(const std::string& key_system, |
| void ProxyDecryptor::KeyError(const std::string& key_system, |
| const std::string& session_id, |
| - media::Decryptor::KeyError error_code, |
| + media::MediaKeys::KeyError error_code, |
| int system_code) { |
| key_error_cb_.Run(key_system, session_id, error_code, system_code); |
| } |