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

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: 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..26127fdbf9d8d12f676488791e3e4a8191ff9631 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::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));
+}
+
+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));
}
@@ -647,6 +678,31 @@ void ContentDecryptorDelegate::OnPromiseResolvedWithSession(
}
}
+void ContentDecryptorDelegate::OnPromiseResolvedWithKeyIds(uint32 promise_id,
+ PP_Var key_ids) {
ddorwin 2014/08/22 20:49:20 ..._array?
jrummell 2014/08/25 21:54:36 Done.
+ scoped_ptr<CdmPromise> promise = TakePromise(promise_id);
+
+ ArrayVar* key_ids_array = ArrayVar::FromPPVar(key_ids);
+ media::KeyIdsVector key_ids_vector;
+ if (key_ids_array) {
ddorwin 2014/08/22 20:49:20 DCHECK? Or can this be null if the array is empty?
jrummell 2014/08/25 21:54:36 Done.
+ for (size_t i = 0; i < key_ids_array->GetLength(); ++i) {
+ ArrayBufferVar* array_buffer =
+ ArrayBufferVar::FromPPVar(key_ids_array->Get(i));
+ if (array_buffer) {
ddorwin 2014/08/22 20:49:20 DCHECK?
jrummell 2014/08/25 21:54:36 Done.
+ std::vector<uint8> item;
ddorwin 2014/08/22 20:49:20 How about key_id?
jrummell 2014/08/25 21:54:36 Done.
+ const uint8* data = static_cast<const uint8*>(array_buffer->Map());
+ item.assign(data, data + array_buffer->ByteLength());
+ key_ids_vector.push_back(item);
+ }
+ }
+ }
+
+ if (promise) {
ddorwin 2014/08/22 20:49:20 DCHECK? I wonder why existing code does not have t
jrummell 2014/08/25 21:54:36 The other OnPromise...() do check that promise is
+ KeyIdsPromise* key_ids_promise(static_cast<KeyIdsPromise*>(promise.get()));
ddorwin 2014/08/22 20:49:20 This promise ID is coming from a plugin process, w
jrummell 2014/08/25 21:54:36 Added type on CdmPromise so it can be verified.
+ key_ids_promise->resolve(key_ids_vector);
+ }
+}
+
void ContentDecryptorDelegate::OnPromiseRejected(
uint32 promise_id,
PP_CdmExceptionCode exception_code,
@@ -693,6 +749,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