Chromium Code Reviews| Index: media/cdm/proxy_decryptor.cc |
| diff --git a/media/cdm/proxy_decryptor.cc b/media/cdm/proxy_decryptor.cc |
| index d1be9d8b204fe2b99d4dbf3a368cc733ea8af852..950d247575bba33d52fd7813949067ba89018430 100644 |
| --- a/media/cdm/proxy_decryptor.cc |
| +++ b/media/cdm/proxy_decryptor.cc |
| @@ -29,7 +29,8 @@ ProxyDecryptor::ProxyDecryptor(MediaPermission* media_permission, |
| const KeyAddedCB& key_added_cb, |
| const KeyErrorCB& key_error_cb, |
| const KeyMessageCB& key_message_cb) |
| - : key_added_cb_(key_added_cb), |
| + : media_permission_(media_permission), |
| + key_added_cb_(key_added_cb), |
| key_error_cb_(key_error_cb), |
| key_message_cb_(key_message_cb), |
| is_clear_key_(false), |
| @@ -59,6 +60,9 @@ bool ProxyDecryptor::InitializeCDM(CdmFactory* cdm_factory, |
| if (!media_keys_) |
| return false; |
| + key_system_ = key_system; |
| + security_origin_ = security_origin; |
| + |
| is_clear_key_ = |
| IsClearKey(key_system) || IsExternalClearKey(key_system); |
| return true; |
| @@ -120,12 +124,46 @@ bool ProxyDecryptor::GenerateKeyRequest(const std::string& init_data_type, |
| ? MediaKeys::PERSISTENT_LICENSE_SESSION |
| : MediaKeys::TEMPORARY_SESSION; |
| - media_keys_->CreateSessionAndGenerateRequest( |
| - session_type, init_data_type, init_data_vector_data, |
| - init_data_vector.size(), promise.Pass()); |
| + // No permission required when AesDecryptor is used. |
| + DCHECK(!key_system_.empty()); |
| + if (CanUseAesDecryptor(key_system_)) { |
| + OnPermissionStatus(session_type, init_data_type, init_data_vector, |
| + promise.Pass(), true /* granted */); |
| + return true; |
| + } |
| + |
| +#if defined(OS_CHROMEOS) |
| + media_permission_->RequestPermission( |
|
ddorwin
2015/03/12 03:58:12
External Clear Key will now prompt. I guess that's
xhwang
2015/03/12 17:35:27
Actually External Clear Key browser tests fail now
|
| + MediaPermission::PROTECTED_MEDIA_IDENTIFIER, security_origin_, |
| + base::Bind(&ProxyDecryptor::OnPermissionStatus, |
| + weak_ptr_factory_.GetWeakPtr(), session_type, init_data_type, |
| + init_data_vector, base::Passed(&promise))); |
| +#else |
| + // TODO(xhwang): Fix the Android path by requesting permission for key systems |
| + // that don't use AesDecryptor. |
|
ddorwin
2015/03/12 03:58:12
Bug? Deadline?
xhwang
2015/03/12 17:35:27
I'll do it right after this CL. Just don't want to
|
| + OnPermissionStatus(session_type, init_data_type, init_data_vector, |
| + promise.Pass(), true /* granted */); |
| +#endif |
| + |
| return true; |
| } |
| +void ProxyDecryptor::OnPermissionStatus( |
| + MediaKeys::SessionType session_type, |
| + const std::string& init_data_type, |
| + const std::vector<uint8>& init_data, |
| + scoped_ptr<NewSessionCdmPromise> promise, |
| + bool granted) { |
| + DVLOG_IF(1, !granted) << "Permission request rejected."; |
| + |
| + const uint8* init_data_vector_data = |
| + (init_data.size() > 0) ? &init_data[0] : nullptr; |
| + |
| + media_keys_->CreateSessionAndGenerateRequest( |
| + session_type, init_data_type, init_data_vector_data, init_data.size(), |
| + promise.Pass()); |
| +} |
| + |
| void ProxyDecryptor::AddKey(const uint8* key, |
| int key_length, |
| const uint8* init_data, |