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

Unified Diff: media/cdm/ppapi/cdm_adapter.cc

Issue 1102363005: Initialize the CDM asynchronously (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Create() changes Created 5 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/cdm/ppapi/cdm_adapter.cc
diff --git a/media/cdm/ppapi/cdm_adapter.cc b/media/cdm/ppapi/cdm_adapter.cc
index 1d765d07d95bef207b5c0a14aa8b7082794aff1c..9d076f9478f5dc94e36733e8c00b410af7b46a3e 100644
--- a/media/cdm/ppapi/cdm_adapter.cc
+++ b/media/cdm/ppapi/cdm_adapter.cc
@@ -348,26 +348,21 @@ bool CdmAdapter::CreateCdmInstance(const std::string& key_system) {
return success;
}
-// No errors should be reported in this function because the spec says:
-// "Store this new error object internally with the MediaKeys instance being
-// created. This will be used to fire an error against any session created for
-// this instance." These errors will be reported during session creation
-// (CreateSession()) or session loading (LoadSession()).
-// TODO(xhwang): If necessary, we need to store the error here if we want to
-// support more specific error reporting (other than "Unknown").
-void CdmAdapter::Initialize(const std::string& key_system,
+void CdmAdapter::Initialize(uint32_t promise_id,
+ const std::string& key_system,
bool allow_distinctive_identifier,
bool allow_persistent_state) {
PP_DCHECK(!key_system.empty());
- // TODO(jrummell): Remove this check when CDM creation is asynchronous.
- // http://crbug.com/469003
- PP_DCHECK(key_system_.empty() || (key_system_ == key_system && cdm_));
#if defined(CHECK_DOCUMENT_URL)
PP_URLComponents_Dev url_components = {};
const pp::URLUtil_Dev* url_util = pp::URLUtil_Dev::Get();
- if (!url_util)
+ if (!url_util) {
+ RejectPromise(promise_id, cdm::kInvalidAccessError, 0,
ddorwin 2015/05/04 22:46:02 Not sure this is correct. Probably kUnknownError.
jrummell 2015/05/05 00:54:17 Done.
+ "Unable to determine origin.");
return;
+ }
+
pp::Var href = url_util->GetDocumentURL(pp::InstanceHandle(pp_instance()),
&url_components);
PP_DCHECK(href.is_string());
@@ -382,14 +377,18 @@ void CdmAdapter::Initialize(const std::string& key_system,
}
#endif // defined(CHECK_DOCUMENT_URL)
- if (!cdm_ && !CreateCdmInstance(key_system))
+ if (!cdm_ && !CreateCdmInstance(key_system)) {
ddorwin 2015/05/04 22:46:02 I think cdm_ must be NULL. You can DCHECK at 356.
jrummell 2015/05/05 00:54:17 Done.
+ RejectPromise(promise_id, cdm::kInvalidAccessError, 0,
+ "Unable to create CDM.");
return;
+ }
PP_DCHECK(cdm_);
key_system_ = key_system;
allow_distinctive_identifier_ = allow_distinctive_identifier;
allow_persistent_state_ = allow_persistent_state;
cdm_->Initialize(allow_distinctive_identifier, allow_persistent_state);
+ OnResolvePromise(promise_id);
}
void CdmAdapter::SetServerCertificate(uint32_t promise_id,
@@ -406,17 +405,6 @@ void CdmAdapter::SetServerCertificate(uint32_t promise_id,
return;
}
- // Initialize() doesn't report an error, so SetServerCertificate() can be
- // called even if Initialize() failed.
- // TODO(jrummell): Remove this code when prefixed EME gets removed.
- if (!cdm_) {
- RejectPromise(promise_id,
- cdm::kInvalidStateError,
- 0,
- "CDM has not been initialized.");
- return;
- }
-
cdm_->SetServerCertificate(
promise_id, server_certificate_ptr, server_certificate_size);
}
@@ -425,19 +413,6 @@ void CdmAdapter::CreateSessionAndGenerateRequest(uint32_t promise_id,
PP_SessionType session_type,
PP_InitDataType init_data_type,
pp::VarArrayBuffer init_data) {
- // Initialize() doesn't report an error, so CreateSession() can be called
- // even if Initialize() failed.
- // TODO(jrummell): Remove this code when prefixed EME gets removed.
- // TODO(jrummell): Verify that Initialize() failing does not resolve the
- // MediaKeys.create() promise.
- if (!cdm_) {
- RejectPromise(promise_id,
- cdm::kInvalidStateError,
- 0,
- "CDM has not been initialized.");
- return;
- }
-
cdm_->CreateSessionAndGenerateRequest(
promise_id, PpSessionTypeToCdmSessionType(session_type),
PpInitDataTypeToCdmInitDataType(init_data_type),
@@ -447,19 +422,6 @@ void CdmAdapter::CreateSessionAndGenerateRequest(uint32_t promise_id,
void CdmAdapter::LoadSession(uint32_t promise_id,
PP_SessionType session_type,
const std::string& session_id) {
- // Initialize() doesn't report an error, so LoadSession() can be called
- // even if Initialize() failed.
- // TODO(jrummell): Remove this code when prefixed EME gets removed.
- // TODO(jrummell): Verify that Initialize() failing does not resolve the
- // MediaKeys.create() promise.
- if (!cdm_) {
- RejectPromise(promise_id,
- cdm::kInvalidStateError,
- 0,
- "CDM has not been initialized.");
- return;
- }
-
cdm_->LoadSession(promise_id, PpSessionTypeToCdmSessionType(session_type),
session_id.data(), session_id.size());
}

Powered by Google App Engine
This is Rietveld 408576698