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

Unified Diff: ppapi/proxy/ppb_talk_private_proxy.cc

Issue 9666020: Add a private PPB_Talk_Private interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 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
« no previous file with comments | « ppapi/proxy/ppb_talk_private_proxy.h ('k') | ppapi/proxy/resource_creation_proxy.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/ppb_talk_private_proxy.cc
diff --git a/ppapi/proxy/ppb_talk_private_proxy.cc b/ppapi/proxy/ppb_talk_private_proxy.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b2bae247b15369be7f06a259e62f017c08fe0a2d
--- /dev/null
+++ b/ppapi/proxy/ppb_talk_private_proxy.cc
@@ -0,0 +1,120 @@
+// 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/ppb_talk_private_proxy.h"
+
+#include "ipc/ipc_message_macros.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/proxy/plugin_dispatcher.h"
+#include "ppapi/proxy/plugin_globals.h"
+#include "ppapi/proxy/plugin_proxy_delegate.h"
+#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/resource.h"
+#include "ppapi/shared_impl/tracked_callback.h"
+#include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppb_talk_private_api.h"
+
+namespace ppapi {
+namespace proxy {
+
+namespace {
+
+class Talk : public Resource, public thunk::PPB_Talk_Private_API {
+ public:
+ Talk(PP_Instance instance) : Resource(OBJECT_IS_PROXY, instance) {
+ }
+
+ // Resource overrides.
+ thunk::PPB_Talk_Private_API* AsPPB_Talk_Private_API() { return this; }
+
+ // PPB_Talk_API implementation.
+ int32_t GetPermission(const PP_CompletionCallback& callback) {
+ if (TrackedCallback::IsPending(callback_))
+ return PP_ERROR_INPROGRESS;
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(
+ pp_instance());
+ if (!dispatcher)
+ return PP_ERROR_FAILED;
+
+ callback_ = new TrackedCallback(this, callback);
+ dispatcher->Send(
+ new PpapiHostMsg_PPBTalk_GetPermission(
+ API_ID_PPB_TALK, pp_resource()));
+ return PP_OK_COMPLETIONPENDING;
+ }
+
+ void GotCompletion(int32_t result) {
+ TrackedCallback::ClearAndRun(&callback_, result);
+ }
+
+ private:
+ scoped_refptr<TrackedCallback> callback_;
+
+ DISALLOW_COPY_AND_ASSIGN(Talk);
+};
+
+PP_Resource Create(PP_Instance instance) {
+ return (new Talk(instance))->GetReference();
+}
+
+int32_t GetPermission(PP_Resource talk_resource,
+ PP_CompletionCallback callback) {
+ ppapi::EnterResource<PPB_Talk_API> enter(resource, callback, true);
+ if (enter.failed())
+ return enter.retval();
+ return enter.SetResult(enter.object()->GetPermission(callback));
+}
+
+const PPB_Talk_Private_1_0 talk_interface = {
+ &Create,
+ &GetPermission
+};
+
+} // namespace
+
+PPB_Talk_Private_Proxy::PPB_Talk_Private_Proxy(Dispatcher* dispatcher)
+ : InterfaceProxy(dispatcher) {
+}
+
+// static
+const PPB_Talk_Private_1_0* PPB_Talk_Private_Proxy::GetInterface() const {
+ return talk_interface;
+}
+
+bool PPB_Talk_Private_Proxy::OnMessageReceived(const IPC::Message& msg) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(PPB_Talk_Private_Proxy, msg)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBTalk_GetPermission,
+ OnMsgGetPermission)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBTalk_GetPermissionACK,
+ OnMsgGetPermissionACK)
+ IPC_MESSAGE_UNHANDLED(handled = false);
+ IPC_END_MESSAGE_MAP();
+ return handled;
+}
+
+void PPB_Talk_Private_Proxy::OnMsgGetPermission(const HostResource& resource) {
+ // Add a completion callback factory and implement
+ EnterHostFromHostResourceForceCallback<thunk::PPB_Talk_Private_API> enter(
+ &factory_, // Need to add to this class
+ &OnGotPermission,
+ resource);
+ if (enter.succeeded())
+ // Copy another place that uses EnterHostFromHostResourceForceCallback
+}
+
+void PPB_Talk_Private_Proxy::OnMsgGetPermissionACK(const HostResource& resource,
+ int32_t result) {
+ thunk::EnterPluginFromHostResource<thunk::PPB_Talk_Private_API> enter(
+ resource, false);
+ if (enter.succeeded())
+ static_cast<Talk*>(enter.object())->GotCompletion(result);
+}
+
+OnGotPermission(int32_t result, const HostResource& resource) {
+ // Forward to the plugin process
+ Send(new ...ACK(result));
+}
+} // namespace proxy
+} // namespace ppapi
« no previous file with comments | « ppapi/proxy/ppb_talk_private_proxy.h ('k') | ppapi/proxy/resource_creation_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698