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

Unified Diff: ppapi/proxy/ppp_content_decryptor_private_proxy.cc

Issue 10827280: Add PPAPI decryptor implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix proxied interface definition. Created 8 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: ppapi/proxy/ppp_content_decryptor_private_proxy.cc
diff --git a/ppapi/proxy/ppp_content_decryptor_private_proxy.cc b/ppapi/proxy/ppp_content_decryptor_private_proxy.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d447a67afbd8542e1d66572a53f5ca081dce49d0
--- /dev/null
+++ b/ppapi/proxy/ppp_content_decryptor_private_proxy.cc
@@ -0,0 +1,236 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/proxy/ppp_content_decryptor_private_proxy.h"
+
+#include "ppapi/c/pp_bool.h"
+#include "ppapi/proxy/host_dispatcher.h"
+#include "ppapi/proxy/plugin_globals.h"
+#include "ppapi/proxy/plugin_resource_tracker.h"
+#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/proxy/serialized_var.h"
+#include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppb_instance_api.h"
+#include "ppapi/thunk/thunk.h"
+
+using ppapi::thunk::PPB_Instance_API;
+
+namespace ppapi {
+namespace proxy {
+
+namespace {
+
+PP_Bool GenerateKeyRequest(PP_Instance instance,
+ PP_Var key_system,
+ PP_Var init_data) {
+ HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance);
+ if (!dispatcher) {
+ NOTREACHED();
+ return PP_FALSE;
+ }
+
+ return PP_FromBool(dispatcher->Send(
+ new PpapiMsg_PPPContentDecryptor_GenerateKeyRequest(
+ API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE,
+ instance,
+ SerializedVarSendInput(dispatcher, key_system),
+ SerializedVarSendInput(dispatcher, init_data))));
+}
+
+PP_Bool AddKey(PP_Instance instance,
+ PP_Var session_id,
+ PP_Var key) {
+ HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance);
+ if (!dispatcher) {
+ NOTREACHED();
+ return PP_FALSE;
+ }
+
+ return PP_FromBool(dispatcher->Send(
+ new PpapiMsg_PPPContentDecryptor_AddKey(
+ API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE,
+ instance,
+ SerializedVarSendInput(dispatcher, session_id),
+ SerializedVarSendInput(dispatcher, key))));
+}
+
+PP_Bool CancelKeyRequest(PP_Instance instance, PP_Var session_id) {
+ HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance);
+ if (!dispatcher) {
+ return PP_FALSE;
+ }
+
+ return PP_FromBool(dispatcher->Send(
+ new PpapiMsg_PPPContentDecryptor_CancelKeyRequest(
+ API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE,
+ instance,
+ SerializedVarSendInput(dispatcher, session_id))));
+}
+
+PP_Bool Decrypt(PP_Instance instance,
+ PP_Resource encrypted_block,
+ int32_t request_id) {
+ HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance);
+ if (!dispatcher) {
+ NOTREACHED();
+ return PP_FALSE;
+ }
+
+ HostResource host_resource;
+ host_resource.SetHostResource(instance, encrypted_block);
+
+ return PP_FromBool(dispatcher->Send(
+ new PpapiMsg_PPPContentDecryptor_Decrypt(
+ API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE,
+ instance,
+ host_resource,
+ request_id)));
+}
+
+PP_Bool DecryptAndDecode(PP_Instance instance,
+ PP_Resource encrypted_block,
+ int32_t request_id) {
+ HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance);
+ if (!dispatcher) {
+ NOTREACHED();
+ return PP_FALSE;
+ }
+
+ HostResource host_resource;
+ host_resource.SetHostResource(instance, encrypted_block);
+
+ return PP_FromBool(dispatcher->Send(
+ new PpapiMsg_PPPContentDecryptor_DecryptAndDecode(
+ API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE,
+ instance,
+ host_resource,
+ request_id)));
+}
+
+static const PPP_ContentDecryptor_Private content_decryptor_interface = {
+ &GenerateKeyRequest,
+ &AddKey,
+ &CancelKeyRequest,
+ &Decrypt,
+ &DecryptAndDecode
+};
+
+InterfaceProxy* CreateContentDecryptorPPPProxy(Dispatcher* dispatcher) {
+ return new PPP_ContentDecryptor_Private_Proxy(dispatcher);
+}
+
+} // namespace
+
+PPP_ContentDecryptor_Private_Proxy::PPP_ContentDecryptor_Private_Proxy(
+ Dispatcher* dispatcher)
+ : InterfaceProxy(dispatcher),
+ ppp_decryptor_impl_(NULL) {
+ if (dispatcher->IsPlugin()) {
+ ppp_decryptor_impl_ = static_cast<const PPP_ContentDecryptor_Private*>(
+ dispatcher->local_get_interface()(
+ PPP_CONTENTDECRYPTOR_PRIVATE_INTERFACE));
+ }
+}
+
+PPP_ContentDecryptor_Private_Proxy::~PPP_ContentDecryptor_Private_Proxy() {
+}
+
+// static
+const InterfaceProxy::Info* PPP_ContentDecryptor_Private_Proxy::GetInfo() {
+ static const Info info = {
+ &content_decryptor_interface,
+ PPP_CONTENTDECRYPTOR_PRIVATE_INTERFACE,
+ API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE,
+ false,
+ &CreateContentDecryptorPPPProxy,
+ };
+ return &info;
+}
+
+bool PPP_ContentDecryptor_Private_Proxy::OnMessageReceived(
+ const IPC::Message& msg) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(PPP_ContentDecryptor_Private_Proxy, msg)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_GenerateKeyRequest,
+ OnMsgGenerateKeyRequest)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_AddKey,
+ OnMsgAddKey)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_CancelKeyRequest,
+ OnMsgCancelKeyRequest)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_Decrypt,
+ OnMsgDecrypt)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_DecryptAndDecode,
+ OnMsgDecryptAndDecode)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ DCHECK(handled);
+ return handled;
+}
+
+void PPP_ContentDecryptor_Private_Proxy::OnMsgGenerateKeyRequest(
+ PP_Instance instance,
+ SerializedVarReceiveInput key_system,
+ SerializedVarReceiveInput init_data) {
+ if (ppp_decryptor_impl_) {
+ CallWhileUnlocked(ppp_decryptor_impl_->GenerateKeyRequest,
+ instance,
+ key_system.Get(dispatcher()),
+ init_data.Get(dispatcher()));
+ }
+}
+
+void PPP_ContentDecryptor_Private_Proxy::OnMsgAddKey(
+ PP_Instance instance,
+ SerializedVarReceiveInput session_id,
+ SerializedVarReceiveInput key) {
+ if (ppp_decryptor_impl_) {
+ CallWhileUnlocked(ppp_decryptor_impl_->AddKey,
+ instance,
+ session_id.Get(dispatcher()),
+ key.Get(dispatcher()));
+ }
+}
+
+void PPP_ContentDecryptor_Private_Proxy::OnMsgCancelKeyRequest(
+ PP_Instance instance,
+ SerializedVarReceiveInput session_id) {
+ if (ppp_decryptor_impl_) {
+ CallWhileUnlocked(CancelKeyRequest,
+ instance,
+ session_id.Get(dispatcher()));
+ }
+}
+
+void PPP_ContentDecryptor_Private_Proxy::OnMsgDecrypt(
+ PP_Instance instance,
+ const HostResource& encrypted_block,
+ int32_t request_id) {
+ if (ppp_decryptor_impl_) {
+ PP_Resource plugin_resource =
+ PluginGlobals::Get()->plugin_resource_tracker()->
+ PluginResourceForHostResource(encrypted_block);
+ CallWhileUnlocked(ppp_decryptor_impl_->Decrypt,
+ instance,
+ plugin_resource,
+ request_id);
+ }
+}
+
+void PPP_ContentDecryptor_Private_Proxy::OnMsgDecryptAndDecode(
+ PP_Instance instance,
+ const HostResource& encrypted_block,
+ int32_t request_id) {
+ if (ppp_decryptor_impl_) {
+ PP_Resource plugin_resource =
+ PluginGlobals::Get()->plugin_resource_tracker()->
+ PluginResourceForHostResource(encrypted_block);
+ CallWhileUnlocked(ppp_decryptor_impl_->DecryptAndDecode,
+ instance,
+ plugin_resource,
+ request_id);
+ }
+}
+
+} // namespace proxy
+} // namespace ppapi

Powered by Google App Engine
This is Rietveld 408576698