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

Unified Diff: content/renderer/media/crypto/ppapi_decryptor.cc

Issue 555223004: Update MediaKeys interface for EME (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase + Android changes Created 6 years, 3 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: content/renderer/media/crypto/ppapi_decryptor.cc
diff --git a/content/renderer/media/crypto/ppapi_decryptor.cc b/content/renderer/media/crypto/ppapi_decryptor.cc
index 8b8836203585963ed69cf63f8d189706917c121b..12e82d745a3bec294e2658e18ebf1427f88f26c0 100644
--- a/content/renderer/media/crypto/ppapi_decryptor.cc
+++ b/content/renderer/media/crypto/ppapi_decryptor.cc
@@ -91,6 +91,8 @@ scoped_ptr<PpapiDecryptor> PpapiDecryptor::Create(
const GURL& security_origin,
const CreatePepperCdmCB& create_pepper_cdm_cb,
const media::SessionMessageCB& session_message_cb,
+ const media::SessionKeysChangeCB& session_keys_change_cb,
+ const media::SessionExpirationChangeCB& session_expiration_change_cb,
const media::SessionReadyCB& session_ready_cb,
const media::SessionClosedCB& session_closed_cb,
const media::SessionErrorCB& session_error_cb) {
@@ -107,6 +109,8 @@ scoped_ptr<PpapiDecryptor> PpapiDecryptor::Create(
new PpapiDecryptor(key_system,
pepper_cdm_wrapper.Pass(),
session_message_cb,
+ session_keys_change_cb,
+ session_expiration_change_cb,
session_ready_cb,
session_closed_cb,
session_error_cb));
@@ -116,11 +120,15 @@ PpapiDecryptor::PpapiDecryptor(
const std::string& key_system,
scoped_ptr<PepperCdmWrapper> pepper_cdm_wrapper,
const media::SessionMessageCB& session_message_cb,
+ const media::SessionKeysChangeCB& session_keys_change_cb,
+ const media::SessionExpirationChangeCB& session_expiration_change_cb,
const media::SessionReadyCB& session_ready_cb,
const media::SessionClosedCB& session_closed_cb,
const media::SessionErrorCB& session_error_cb)
: pepper_cdm_wrapper_(pepper_cdm_wrapper.Pass()),
session_message_cb_(session_message_cb),
+ session_keys_change_cb_(session_keys_change_cb),
+ session_expiration_change_cb_(session_expiration_change_cb),
session_ready_cb_(session_ready_cb),
session_closed_cb_(session_closed_cb),
session_error_cb_(session_error_cb),
@@ -128,6 +136,8 @@ PpapiDecryptor::PpapiDecryptor(
weak_ptr_factory_(this) {
DCHECK(pepper_cdm_wrapper_.get());
DCHECK(!session_message_cb_.is_null());
+ DCHECK(!session_keys_change_cb.is_null());
+ DCHECK(!session_expiration_change_cb.is_null());
DCHECK(!session_ready_cb_.is_null());
DCHECK(!session_closed_cb_.is_null());
DCHECK(!session_error_cb_.is_null());
@@ -136,6 +146,8 @@ PpapiDecryptor::PpapiDecryptor(
CdmDelegate()->Initialize(
key_system,
base::Bind(&PpapiDecryptor::OnSessionMessage, weak_this),
+ base::Bind(&PpapiDecryptor::OnSessionKeysChange, weak_this),
+ base::Bind(&PpapiDecryptor::OnSessionExpirationChange, weak_this),
base::Bind(&PpapiDecryptor::OnSessionReady, weak_this),
base::Bind(&PpapiDecryptor::OnSessionClosed, weak_this),
base::Bind(&PpapiDecryptor::OnSessionError, weak_this),
@@ -146,6 +158,22 @@ PpapiDecryptor::~PpapiDecryptor() {
pepper_cdm_wrapper_.reset();
}
+void PpapiDecryptor::SetServerCertificate(
+ const uint8* certificate_data,
+ int certificate_data_length,
+ scoped_ptr<media::SimpleCdmPromise> promise) {
+ DVLOG(2) << __FUNCTION__;
+ DCHECK(render_loop_proxy_->BelongsToCurrentThread());
+
+ if (!CdmDelegate()) {
+ promise->reject(INVALID_STATE_ERROR, 0, "CdmDelegate() does not exist.");
+ return;
+ }
+
+ CdmDelegate()->SetServerCertificate(
+ certificate_data, certificate_data_length, promise.Pass());
+}
+
void PpapiDecryptor::CreateSession(
const std::string& init_data_type,
const uint8* init_data,
@@ -211,7 +239,19 @@ void PpapiDecryptor::UpdateSession(
session_updated_promise.PassAs<media::SimpleCdmPromise>());
}
-void PpapiDecryptor::ReleaseSession(
+void PpapiDecryptor::CloseSession(const std::string& web_session_id,
+ scoped_ptr<media::SimpleCdmPromise> promise) {
+ DCHECK(render_loop_proxy_->BelongsToCurrentThread());
+
+ if (!CdmDelegate()) {
+ promise->reject(INVALID_STATE_ERROR, 0, "CdmDelegate() does not exist.");
+ return;
+ }
+
+ CdmDelegate()->CloseSession(web_session_id, promise.Pass());
+}
+
+void PpapiDecryptor::RemoveSession(
const std::string& web_session_id,
scoped_ptr<media::SimpleCdmPromise> promise) {
DCHECK(render_loop_proxy_->BelongsToCurrentThread());
@@ -221,7 +261,19 @@ void PpapiDecryptor::ReleaseSession(
return;
}
- CdmDelegate()->CloseSession(web_session_id, promise.Pass());
+ CdmDelegate()->RemoveSession(web_session_id, promise.Pass());
+}
+
+void PpapiDecryptor::GetUsableKeyIds(const std::string& web_session_id,
+ scoped_ptr<media::KeyIdsPromise> promise) {
+ DCHECK(render_loop_proxy_->BelongsToCurrentThread());
+
+ if (!CdmDelegate()) {
+ promise->reject(INVALID_STATE_ERROR, 0, "CdmDelegate() does not exist.");
+ return;
+ }
+
+ CdmDelegate()->GetUsableKeyIds(web_session_id, promise.Pass());
}
media::Decryptor* PpapiDecryptor::GetDecryptor() {
@@ -436,6 +488,23 @@ void PpapiDecryptor::OnSessionMessage(const std::string& web_session_id,
session_message_cb_.Run(web_session_id, message, destination_url);
}
+void PpapiDecryptor::OnSessionKeysChange(const std::string& web_session_id,
+ bool has_additional_usable_key) {
+ DCHECK(render_loop_proxy_->BelongsToCurrentThread());
+
+ if (has_additional_usable_key)
+ ResumePlayback();
ddorwin 2014/09/10 22:58:38 Why is this here instead of in a more general loca
jrummell 2014/09/11 21:21:54 Maybe the name ResumePlayback is wrong? It simply
ddorwin 2014/09/11 23:31:11 As discussed offline, the intent is that we can re
+
+ session_keys_change_cb_.Run(web_session_id, has_additional_usable_key);
+}
+
+void PpapiDecryptor::OnSessionExpirationChange(
+ const std::string& web_session_id,
+ double new_expiry_time) {
+ DCHECK(render_loop_proxy_->BelongsToCurrentThread());
+ session_expiration_change_cb_.Run(web_session_id, new_expiry_time);
+}
+
void PpapiDecryptor::OnSessionReady(const std::string& web_session_id) {
DCHECK(render_loop_proxy_->BelongsToCurrentThread());

Powered by Google App Engine
This is Rietveld 408576698