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

Unified Diff: content/renderer/pepper/content_decryptor_delegate.cc

Issue 496143002: Update Pepper interface for EME (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: reorder Created 6 years, 4 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/pepper/content_decryptor_delegate.cc
diff --git a/content/renderer/pepper/content_decryptor_delegate.cc b/content/renderer/pepper/content_decryptor_delegate.cc
index e1b0b1ba3e5d1100275908abf15dd578ec1b86a9..d5d40abf3b18b9671907507534156a98731f950e 100644
--- a/content/renderer/pepper/content_decryptor_delegate.cc
+++ b/content/renderer/pepper/content_decryptor_delegate.cc
@@ -20,6 +20,7 @@
#include "media/base/video_decoder_config.h"
#include "media/base/video_frame.h"
#include "media/base/video_util.h"
+#include "ppapi/shared_impl/array_var.h"
#include "ppapi/shared_impl/scoped_pp_resource.h"
#include "ppapi/shared_impl/var.h"
#include "ppapi/shared_impl/var_tracker.h"
@@ -29,10 +30,12 @@
using media::CdmPromise;
using media::Decryptor;
+using media::KeyIdsPromise;
using media::MediaKeys;
using media::NewSessionCdmPromise;
using media::SimpleCdmPromise;
using ppapi::ArrayBufferVar;
+using ppapi::ArrayVar;
using ppapi::PpapiGlobals;
using ppapi::ScopedPPResource;
using ppapi::StringVar;
@@ -330,6 +333,18 @@ void ContentDecryptorDelegate::InstanceCrashed() {
SatisfyAllPendingCallbacksOnError();
}
+void ContentDecryptorDelegate::SetServerCertificate(
+ const uint8* certificate,
+ int certificate_length,
+ scoped_ptr<media::SimpleCdmPromise> promise) {
+ uint32_t promise_id = SavePromise(promise.PassAs<CdmPromise>());
+ PP_Var certificate_array =
+ PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar(
+ certificate_length, certificate);
+ plugin_decryption_interface_->SetServerCertificate(
+ pp_instance_, promise_id, certificate_array);
+}
+
void ContentDecryptorDelegate::CreateSession(
const std::string& init_data_type,
const uint8* init_data,
@@ -372,11 +387,27 @@ void ContentDecryptorDelegate::UpdateSession(
response_array);
}
-void ContentDecryptorDelegate::ReleaseSession(
+void ContentDecryptorDelegate::CloseSession(
+ const std::string& web_session_id,
+ scoped_ptr<SimpleCdmPromise> promise) {
+ uint32_t promise_id = SavePromise(promise.PassAs<CdmPromise>());
+ plugin_decryption_interface_->CloseSession(
+ pp_instance_, promise_id, StringVar::StringToPPVar(web_session_id));
+}
+
+void ContentDecryptorDelegate::RemoveSession(
const std::string& web_session_id,
scoped_ptr<SimpleCdmPromise> promise) {
uint32_t promise_id = SavePromise(promise.PassAs<CdmPromise>());
- plugin_decryption_interface_->ReleaseSession(
+ plugin_decryption_interface_->RemoveSession(
+ pp_instance_, promise_id, StringVar::StringToPPVar(web_session_id));
+}
+
+void ContentDecryptorDelegate::GetUsableKeyIds(
+ const std::string& web_session_id,
+ scoped_ptr<media::KeyIdsPromise> promise) {
+ uint32_t promise_id = SavePromise(promise.PassAs<CdmPromise>());
+ plugin_decryption_interface_->GetUsableKeyIds(
pp_instance_, promise_id, StringVar::StringToPPVar(web_session_id));
}
@@ -625,7 +656,8 @@ bool ContentDecryptorDelegate::DecryptAndDecodeVideo(
void ContentDecryptorDelegate::OnPromiseResolved(uint32 promise_id) {
scoped_ptr<CdmPromise> promise = TakePromise(promise_id);
- if (promise) {
+ DCHECK(promise->Type() == media::CdmPromise::SIMPLE_TYPE);
ddorwin 2014/08/25 22:55:01 promise && ? If you can't do that, this could cras
jrummell 2014/08/26 00:19:23 Done.
+ if (promise && promise->Type() == media::CdmPromise::SIMPLE_TYPE) {
SimpleCdmPromise* simple_promise(
static_cast<SimpleCdmPromise*>(promise.get()));
simple_promise->resolve();
@@ -640,13 +672,42 @@ void ContentDecryptorDelegate::OnPromiseResolvedWithSession(
StringVar* web_session_id_string = StringVar::FromPPVar(web_session_id);
DCHECK(web_session_id_string);
- if (promise) {
+ DCHECK(promise->Type() == media::CdmPromise::NEW_SESSION_TYPE);
ddorwin 2014/08/25 22:55:01 ditto
jrummell 2014/08/26 00:19:23 Done.
+ if (promise && promise->Type() == media::CdmPromise::NEW_SESSION_TYPE) {
NewSessionCdmPromise* session_promise(
static_cast<NewSessionCdmPromise*>(promise.get()));
session_promise->resolve(web_session_id_string->value());
}
}
+void ContentDecryptorDelegate::OnPromiseResolvedWithKeyIds(
+ uint32 promise_id,
+ PP_Var key_ids_array) {
+ scoped_ptr<CdmPromise> promise = TakePromise(promise_id);
+
+ ArrayVar* key_ids = ArrayVar::FromPPVar(key_ids_array);
+ media::KeyIdsVector key_ids_vector;
+ DCHECK(key_ids);
+ if (key_ids) {
+ for (size_t i = 0; i < key_ids->GetLength(); ++i) {
+ ArrayBufferVar* array_buffer = ArrayBufferVar::FromPPVar(key_ids->Get(i));
+ DCHECK(array_buffer);
+ if (array_buffer) {
+ std::vector<uint8> key_id;
+ const uint8* data = static_cast<const uint8*>(array_buffer->Map());
+ key_id.assign(data, data + array_buffer->ByteLength());
+ key_ids_vector.push_back(key_id);
+ }
+ }
+ }
+
+ DCHECK(promise->Type() == media::CdmPromise::KEY_IDS_TYPE);
ddorwin 2014/08/25 22:55:01 ditto
jrummell 2014/08/26 00:19:23 Done.
+ if (promise && promise->Type() == media::CdmPromise::KEY_IDS_TYPE) {
+ KeyIdsPromise* key_ids_promise(static_cast<KeyIdsPromise*>(promise.get()));
+ key_ids_promise->resolve(key_ids_vector);
+ }
+}
+
void ContentDecryptorDelegate::OnPromiseRejected(
uint32 promise_id,
PP_CdmExceptionCode exception_code,
@@ -656,6 +717,7 @@ void ContentDecryptorDelegate::OnPromiseRejected(
DCHECK(error_description_string);
scoped_ptr<CdmPromise> promise = TakePromise(promise_id);
+ DCHECK(promise);
if (promise) {
promise->reject(PpExceptionTypeToMediaException(exception_code),
system_code,
@@ -693,6 +755,18 @@ void ContentDecryptorDelegate::OnSessionMessage(PP_Var web_session_id,
web_session_id_string->value(), message_vector, verified_gurl);
}
+void ContentDecryptorDelegate::OnSessionKeysChange(
+ PP_Var web_session_id,
+ PP_Bool has_additional_usable_key) {
+ // TODO(jrummell): Pass this event on.
+}
+
+void ContentDecryptorDelegate::OnSessionExpirationChange(
+ PP_Var web_session_id,
+ PP_Time new_expiry_time) {
+ // TODO(jrummell): Pass this event on.
+}
+
void ContentDecryptorDelegate::OnSessionReady(PP_Var web_session_id) {
if (session_ready_cb_.is_null())
return;

Powered by Google App Engine
This is Rietveld 408576698