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

Unified Diff: media/mojo/clients/mojo_cdm.cc

Issue 2426813002: EME: Close existing sessions on CDM failure (Closed)
Patch Set: rename result (+rebase) Created 4 years, 1 month 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
« no previous file with comments | « media/mojo/clients/mojo_cdm.h ('k') | media/test/data/eme_player_js/clearkey_player.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/mojo/clients/mojo_cdm.cc
diff --git a/media/mojo/clients/mojo_cdm.cc b/media/mojo/clients/mojo_cdm.cc
index c727b38712bd226037e01a8bdf2ec75658ebb43a..a4e051a4c1f9d74a09ea3c0f6674b6fc2fc09f24 100644
--- a/media/mojo/clients/mojo_cdm.cc
+++ b/media/mojo/clients/mojo_cdm.cc
@@ -36,13 +36,13 @@ static void RejectPromise(std::unique_ptr<PromiseType> promise,
void MojoCdm::Create(
const std::string& key_system,
const GURL& security_origin,
- const media::CdmConfig& cdm_config,
+ const CdmConfig& cdm_config,
mojom::ContentDecryptionModulePtr remote_cdm,
- const media::SessionMessageCB& session_message_cb,
- const media::SessionClosedCB& session_closed_cb,
- const media::SessionKeysChangeCB& session_keys_change_cb,
- const media::SessionExpirationUpdateCB& session_expiration_update_cb,
- const media::CdmCreatedCB& cdm_created_cb) {
+ const SessionMessageCB& session_message_cb,
+ const SessionClosedCB& session_closed_cb,
+ const SessionKeysChangeCB& session_keys_change_cb,
+ const SessionExpirationUpdateCB& session_expiration_update_cb,
+ const CdmCreatedCB& cdm_created_cb) {
scoped_refptr<MojoCdm> mojo_cdm(
new MojoCdm(std::move(remote_cdm), session_message_cb, session_closed_cb,
session_keys_change_cb, session_expiration_update_cb));
@@ -98,7 +98,7 @@ MojoCdm::~MojoCdm() {
void MojoCdm::InitializeCdm(const std::string& key_system,
const GURL& security_origin,
- const media::CdmConfig& cdm_config,
+ const CdmConfig& cdm_config,
std::unique_ptr<CdmInitializedPromise> promise) {
DVLOG(1) << __FUNCTION__ << ": " << key_system;
DCHECK(thread_checker_.CalledOnValidThread());
@@ -126,13 +126,14 @@ void MojoCdm::OnConnectionError() {
LOG(ERROR) << "Remote CDM connection error.";
DCHECK(thread_checker_.CalledOnValidThread());
- // We only handle initial connection error.
- if (!pending_init_promise_)
- return;
+ // Handle initial connection error.
+ if (pending_init_promise_) {
+ pending_init_promise_->reject(CdmPromise::NOT_SUPPORTED_ERROR, 0,
+ "Mojo CDM creation failed.");
+ pending_init_promise_.reset();
+ }
- pending_init_promise_->reject(CdmPromise::NOT_SUPPORTED_ERROR, 0,
- "Mojo CDM creation failed.");
- pending_init_promise_.reset();
+ cdm_session_tracker_.CloseRemainingSessions(session_closed_cb_);
}
void MojoCdm::SetServerCertificate(const std::vector<uint8_t>& certificate,
@@ -208,7 +209,7 @@ CdmContext* MojoCdm::GetCdmContext() {
return this;
}
-media::Decryptor* MojoCdm::GetDecryptor() {
+Decryptor* MojoCdm::GetDecryptor() {
base::AutoLock auto_lock(lock_);
if (!decryptor_task_runner_)
@@ -247,6 +248,7 @@ void MojoCdm::OnSessionClosed(const std::string& session_id) {
DVLOG(2) << __FUNCTION__;
DCHECK(thread_checker_.CalledOnValidThread());
+ cdm_session_tracker_.RemoveSession(session_id);
session_closed_cb_.Run(session_id);
}
@@ -269,11 +271,11 @@ void MojoCdm::OnSessionKeysChange(
}
}
- media::CdmKeysInfo key_data;
+ CdmKeysInfo key_data;
key_data.reserve(keys_info.size());
for (size_t i = 0; i < keys_info.size(); ++i) {
key_data.push_back(
- keys_info[i].To<std::unique_ptr<media::CdmKeyInformation>>().release());
+ keys_info[i].To<std::unique_ptr<CdmKeyInformation>>().release());
}
session_keys_change_cb_.Run(session_id, has_additional_usable_key,
std::move(key_data));
@@ -334,9 +336,10 @@ void MojoCdm::OnNewSessionCdmPromiseResult(
std::unique_ptr<NewSessionCdmPromise> promise,
mojom::CdmPromiseResultPtr result,
const std::string& session_id) {
- if (result->success)
+ if (result->success) {
+ cdm_session_tracker_.AddSession(session_id);
promise->resolve(session_id);
- else
+ } else
RejectPromise(std::move(promise), std::move(result));
}
« no previous file with comments | « media/mojo/clients/mojo_cdm.h ('k') | media/test/data/eme_player_js/clearkey_player.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698