Chromium Code Reviews| Index: media/blink/webcontentdecryptionmodulesession_impl.cc |
| diff --git a/media/blink/webcontentdecryptionmodulesession_impl.cc b/media/blink/webcontentdecryptionmodulesession_impl.cc |
| index c7512325e7c445587b9b4a1d06ccf264f05fcd6f..9dfdbe8775353918dca3ae47c116ee7a4554d070 100644 |
| --- a/media/blink/webcontentdecryptionmodulesession_impl.cc |
| +++ b/media/blink/webcontentdecryptionmodulesession_impl.cc |
| @@ -252,6 +252,7 @@ WebContentDecryptionModuleSessionImpl::WebContentDecryptionModuleSessionImpl( |
| : adapter_(adapter), |
| has_close_been_called_(false), |
| is_closed_(false), |
| + is_persistent_session_(false), |
| weak_ptr_factory_(this) {} |
| WebContentDecryptionModuleSessionImpl:: |
| @@ -357,8 +358,11 @@ void WebContentDecryptionModuleSessionImpl::InitializeNewSession( |
| // 10.8 Let cdm be the CDM instance represented by this object's cdm |
| // instance value. |
| // 10.9 Use the cdm to execute the following steps: |
| + CdmSessionType cdm_session_type = convertSessionType(session_type); |
| + is_persistent_session_ = |
| + cdm_session_type != CdmSessionType::TEMPORARY_SESSION; |
| adapter_->InitializeNewSession( |
| - eme_init_data_type, sanitized_init_data, convertSessionType(session_type), |
| + eme_init_data_type, sanitized_init_data, cdm_session_type, |
| std::unique_ptr<NewSessionCdmPromise>(new NewSessionCdmResultPromise( |
| result, adapter_->GetKeySystemUMAPrefix(), kGenerateRequestUMAName, |
| base::Bind( |
| @@ -391,6 +395,7 @@ void WebContentDecryptionModuleSessionImpl::Load( |
| // TODO(jrummell): Now that there are 2 types of persistent sessions, the |
| // session type should be passed from blink. Type should also be passed in the |
| // constructor (and removed from initializeNewSession()). |
| + is_persistent_session_ = true; |
| adapter_->LoadSession( |
| CdmSessionType::PERSISTENT_LICENSE_SESSION, sanitized_session_id, |
| std::unique_ptr<NewSessionCdmPromise>(new NewSessionCdmResultPromise( |
| @@ -459,6 +464,16 @@ void WebContentDecryptionModuleSessionImpl::Remove( |
| blink::WebContentDecryptionModuleResult result) { |
| DCHECK(!session_id_.empty()); |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| + |
| + // TODO(http://crbug.com/616166). Once all supported CDMs allow remove() on |
| + // temporary sessions, remove this code. |
| + if (!is_persistent_session_ && !IsClearKey(adapter_->GetKeySystem())) { |
| + result.CompleteWithError( |
| + blink::kWebContentDecryptionModuleExceptionTypeError, 0, |
| + "The session type is not persistent."); |
|
xhwang
2017/04/25 16:43:48
This string is not an error... How about something
jrummell
2017/04/25 17:54:10
I just copied the error from MKS. Done.
|
| + return; |
| + } |
| + |
| adapter_->RemoveSession( |
| session_id_, |
| std::unique_ptr<SimpleCdmPromise>(new CdmResultPromise<>( |