Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(932)

Unified Diff: media/blink/webcontentdecryptionmodulesession_impl.cc

Issue 2831963003: EME: Allow temporary sessions to be removed for ClearKey only. (Closed)
Patch Set: add test Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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<>(

Powered by Google App Engine
This is Rietveld 408576698