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

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

Issue 2426813002: EME: Close existing sessions on CDM failure (Closed)
Patch Set: Created 4 years, 2 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
« media/base/cdm_session_tracker.h ('K') | « media/mojo/clients/mojo_cdm.h ('k') | no next file » | 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 3d1f227e7e2306121ee30256bf4e88017684bcf4..26b6157d85343e81c6e8da93c6f0e1310961e335 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));
@@ -75,6 +75,8 @@ MojoCdm::MojoCdm(mojom::ContentDecryptionModulePtr remote_cdm,
DCHECK(!session_expiration_update_cb_.is_null());
remote_cdm_->SetClient(binding_.CreateInterfacePtrAndBind());
+ binding_.set_connection_error_handler(
+ base::Bind(&MojoCdm::OnConnectionError, base::Unretained(this)));
xhwang 2016/10/18 18:07:28 This is registered on line 117. Will that work as
jrummell 2016/10/20 22:11:25 There won't be any sessions created until Initiali
}
MojoCdm::~MojoCdm() {
@@ -98,7 +100,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());
@@ -125,13 +127,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(NOT_SUPPORTED_ERROR, 0,
+ "Mojo CDM creation failed.");
+ pending_init_promise_.reset();
+ }
- pending_init_promise_->reject(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 +211,7 @@ CdmContext* MojoCdm::GetCdmContext() {
return this;
}
-media::Decryptor* MojoCdm::GetDecryptor() {
+Decryptor* MojoCdm::GetDecryptor() {
base::AutoLock auto_lock(lock_);
if (!decryptor_task_runner_)
@@ -248,6 +251,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);
}
@@ -270,11 +274,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));
@@ -335,9 +339,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));
}
« media/base/cdm_session_tracker.h ('K') | « media/mojo/clients/mojo_cdm.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698