Index: ppapi/proxy/ppb_instance_proxy.cc |
diff --git a/ppapi/proxy/ppb_instance_proxy.cc b/ppapi/proxy/ppb_instance_proxy.cc |
index 2780022d605b2e13f7efa82dbb956e71ff575379..0bd5865219eda5c42ef985f8f8c5ef19e2dbb910 100644 |
--- a/ppapi/proxy/ppb_instance_proxy.cc |
+++ b/ppapi/proxy/ppb_instance_proxy.cc |
@@ -6,6 +6,7 @@ |
#include "base/memory/ref_counted.h" |
#include "build/build_config.h" |
+#include "media/base/limits.h" |
#include "ppapi/c/pp_errors.h" |
#include "ppapi/c/pp_time.h" |
#include "ppapi/c/pp_var.h" |
@@ -34,6 +35,7 @@ |
#include "ppapi/proxy/serialized_var.h" |
#include "ppapi/proxy/truetype_font_singleton_resource.h" |
#include "ppapi/proxy/uma_private_resource.h" |
+#include "ppapi/shared_impl/array_var.h" |
#include "ppapi/shared_impl/ppapi_globals.h" |
#include "ppapi/shared_impl/ppb_url_util_shared.h" |
#include "ppapi/shared_impl/ppb_view_shared.h" |
@@ -179,10 +181,16 @@ bool PPB_Instance_Proxy::OnMessageReceived(const IPC::Message& msg) { |
OnHostMsgPromiseResolved) |
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_PromiseResolvedWithSession, |
OnHostMsgPromiseResolvedWithSession) |
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_PromiseResolvedWithKeyIds, |
+ OnHostMsgPromiseResolvedWithKeyIds) |
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_PromiseRejected, |
OnHostMsgPromiseRejected) |
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionMessage, |
OnHostMsgSessionMessage) |
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionKeysChange, |
+ OnHostMsgSessionKeysChange) |
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionExpirationChange, |
+ OnHostMsgSessionExpirationChange) |
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionReady, |
OnHostMsgSessionReady) |
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionClosed, |
@@ -577,6 +585,35 @@ void PPB_Instance_Proxy::PromiseResolvedWithSession(PP_Instance instance, |
SerializedVarSendInput(dispatcher(), web_session_id_var))); |
} |
+void PPB_Instance_Proxy::PromiseResolvedWithKeyIds(PP_Instance instance, |
+ uint32 promise_id, |
+ PP_Var key_ids_var) { |
+ ArrayVar* key_ids_array = ArrayVar::FromPPVar(key_ids_var); |
+ if (!key_ids_array || |
+ key_ids_array->GetLength() > media::limits::kMaxKeyIds) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ std::vector<std::vector<uint8_t> > key_ids; |
+ for (size_t i = 0; i < key_ids_array->GetLength(); ++i) { |
+ ArrayBufferVar* key_id = ArrayBufferVar::FromPPVar(key_ids_array->Get(i)); |
+ if (!key_id || key_id->ByteLength() < media::limits::kMinKeyIdLength || |
+ key_id->ByteLength() > media::limits::kMaxKeyIdLength) { |
+ NOTREACHED(); |
+ continue; |
+ } |
+ |
+ const uint8_t* key_id_ptr = static_cast<const uint8_t*>(key_id->Map()); |
+ const uint32_t key_id_size = key_id->ByteLength(); |
+ std::vector<uint8_t> key_id_vector(key_id_ptr, key_id_ptr + key_id_size); |
+ key_ids.push_back(key_id_vector); |
+ } |
+ |
+ dispatcher()->Send(new PpapiHostMsg_PPBInstance_PromiseResolvedWithKeyIds( |
+ API_ID_PPB_INSTANCE, instance, promise_id, key_ids)); |
+} |
+ |
void PPB_Instance_Proxy::PromiseRejected(PP_Instance instance, |
uint32 promise_id, |
PP_CdmExceptionCode exception_code, |
@@ -603,6 +640,37 @@ void PPB_Instance_Proxy::SessionMessage(PP_Instance instance, |
SerializedVarSendInput(dispatcher(), destination_url_var))); |
} |
+void PPB_Instance_Proxy::SessionKeysChange(PP_Instance instance, |
+ PP_Var web_session_id_var, |
+ PP_Bool has_additional_usable_key) { |
+ StringVar* session_id = StringVar::FromPPVar(web_session_id_var); |
+ if (!session_id || |
+ session_id->value().length() > media::limits::kMaxWebSessionIdLength) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ dispatcher()->Send(new PpapiHostMsg_PPBInstance_SessionKeysChange( |
+ API_ID_PPB_INSTANCE, |
+ instance, |
+ session_id->value(), |
+ has_additional_usable_key)); |
+} |
+ |
+void PPB_Instance_Proxy::SessionExpirationChange(PP_Instance instance, |
+ PP_Var web_session_id_var, |
+ PP_Time new_expiry_time) { |
+ StringVar* session_id = StringVar::FromPPVar(web_session_id_var); |
+ if (!session_id || |
+ session_id->value().length() > media::limits::kMaxWebSessionIdLength) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ dispatcher()->Send(new PpapiHostMsg_PPBInstance_SessionExpirationChange( |
+ API_ID_PPB_INSTANCE, instance, session_id->value(), new_expiry_time)); |
+} |
+ |
void PPB_Instance_Proxy::SessionReady(PP_Instance instance, |
PP_Var web_session_id_var) { |
dispatcher()->Send(new PpapiHostMsg_PPBInstance_SessionReady( |
@@ -1198,6 +1266,39 @@ void PPB_Instance_Proxy::OnHostMsgPromiseResolvedWithSession( |
} |
} |
+void PPB_Instance_Proxy::OnHostMsgPromiseResolvedWithKeyIds( |
+ PP_Instance instance, |
+ uint32_t promise_id, |
+ const std::vector<std::vector<uint8_t> >& key_ids) { |
+ if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE)) |
+ return; |
+ if (key_ids.size() > media::limits::kMaxKeyIds) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ scoped_refptr<ArrayVar> key_ids_array = new ArrayVar(); |
+ key_ids_array->SetLength(key_ids.size()); |
+ for (size_t i = 0; i < key_ids.size(); ++i) { |
+ const std::vector<uint8_t>& entry = key_ids[i]; |
+ if (entry.size() < media::limits::kMinKeyIdLength || |
+ entry.size() > media::limits::kMaxKeyIdLength) { |
+ NOTREACHED(); |
+ continue; |
+ } |
+ key_ids_array->Set( |
+ i, |
+ PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar(entry.size(), |
+ &entry[0])); |
+ } |
+ |
+ EnterInstanceNoLock enter(instance); |
+ if (enter.succeeded()) { |
+ enter.functions()->PromiseResolvedWithKeyIds( |
+ instance, promise_id, key_ids_array->GetPPVar()); |
dmichael (off chromium)
2014/09/04 21:17:11
GetPPVar increments the reference count, but you d
jrummell
2014/09/04 23:05:03
Done.
|
+ } |
+} |
+ |
void PPB_Instance_Proxy::OnHostMsgPromiseRejected( |
PP_Instance instance, |
uint32_t promise_id, |
@@ -1232,6 +1333,34 @@ void PPB_Instance_Proxy::OnHostMsgSessionMessage( |
} |
} |
+void PPB_Instance_Proxy::OnHostMsgSessionKeysChange( |
+ PP_Instance instance, |
+ const std::string& web_session_id, |
+ PP_Bool has_additional_usable_key) { |
+ if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE)) |
+ return; |
+ EnterInstanceNoLock enter(instance); |
+ if (enter.succeeded()) { |
+ enter.functions()->SessionKeysChange( |
+ instance, |
+ StringVar::StringToPPVar(web_session_id), |
dmichael (off chromium)
2014/09/04 21:17:11
Same problem here; StringToPPVar increments the re
jrummell
2014/09/04 23:05:03
Done.
|
+ has_additional_usable_key); |
+ } |
+} |
+ |
+void PPB_Instance_Proxy::OnHostMsgSessionExpirationChange( |
+ PP_Instance instance, |
+ const std::string& web_session_id, |
+ PP_Time new_expiry_time) { |
+ if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE)) |
+ return; |
+ EnterInstanceNoLock enter(instance); |
+ if (enter.succeeded()) { |
+ enter.functions()->SessionExpirationChange( |
+ instance, StringVar::StringToPPVar(web_session_id), new_expiry_time); |
dmichael (off chromium)
2014/09/04 21:17:11
ditto
jrummell
2014/09/04 23:05:03
Done.
|
+ } |
+} |
+ |
void PPB_Instance_Proxy::OnHostMsgSessionReady( |
PP_Instance instance, |
SerializedVarReceiveInput web_session_id) { |