Index: ppapi/proxy/ppb_core_proxy.cc |
=================================================================== |
--- ppapi/proxy/ppb_core_proxy.cc (revision 0) |
+++ ppapi/proxy/ppb_core_proxy.cc (revision 0) |
@@ -0,0 +1,118 @@ |
+// Copyright (c) 2010 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_core_proxy.h" |
+ |
+#include <stdlib.h> // For malloc |
+ |
+#include "base/logging.h" |
+#include "base/message_loop.h" |
+#include "base/message_loop_proxy.h" |
+#include "base/time.h" |
+#include "ppapi/c/pp_completion_callback.h" |
+#include "ppapi/c/pp_resource.h" |
+#include "ppapi/c/ppb_core.h" |
+#include "ppapi/proxy/plugin_dispatcher.h" |
+#include "ppapi/proxy/ppapi_messages.h" |
+ |
+namespace pp { |
+namespace proxy { |
+ |
+namespace { |
+ |
+base::MessageLoopProxy* GetMainThreadMessageLoop() { |
+ static scoped_refptr<base::MessageLoopProxy> proxy( |
+ base::MessageLoopProxy::CreateForCurrentThread()); |
+ return proxy.get(); |
+} |
+ |
+void AddRefResource(PP_Resource resource) { |
+ PluginDispatcher::Get()->plugin_resource_tracker()->AddRefResource(resource); |
+} |
+ |
+void ReleaseResource(PP_Resource resource) { |
+ PluginDispatcher::Get()->plugin_resource_tracker()->ReleaseResource(resource); |
+} |
+ |
+void* MemAlloc(size_t num_bytes) { |
+ return malloc(num_bytes); |
+} |
+ |
+void MemFree(void* ptr) { |
+ free(ptr); |
+} |
+ |
+double GetTime() { |
+ return base::Time::Now().ToDoubleT(); |
+} |
+ |
+double GetTimeTicks() { |
+ // TODO(brettw) http://code.google.com/p/chromium/issues/detail?id=57448 |
+ // This should be a tick timer rather than wall clock time, but needs to |
+ // match message times, which also currently use wall clock time. |
+ return GetTime(); |
+} |
+ |
+void CallOnMainThread(int delay_in_ms, |
+ PP_CompletionCallback callback, |
+ int32_t result) { |
+ GetMainThreadMessageLoop()->PostDelayedTask( |
+ FROM_HERE, |
+ NewRunnableFunction(callback.func, callback.user_data, result), |
+ delay_in_ms); |
+} |
+ |
+bool IsMainThread() { |
+ return GetMainThreadMessageLoop()->BelongsToCurrentThread(); |
+} |
+ |
+const PPB_Core core_interface = { |
+ &AddRefResource, |
+ &ReleaseResource, |
+ &MemAlloc, |
+ &MemFree, |
+ &GetTime, |
+ &GetTimeTicks, |
+ &CallOnMainThread, |
+ &IsMainThread |
+}; |
+ |
+} // namespace |
+ |
+PPB_Core_Proxy::PPB_Core_Proxy(Dispatcher* dispatcher, |
+ const void* target_interface) |
+ : InterfaceProxy(dispatcher, target_interface) { |
+} |
+ |
+PPB_Core_Proxy::~PPB_Core_Proxy() { |
+} |
+ |
+const void* PPB_Core_Proxy::GetSourceInterface() const { |
+ return &core_interface; |
+} |
+ |
+InterfaceID PPB_Core_Proxy::GetInterfaceId() const { |
+ return INTERFACE_ID_PPB_CORE; |
+} |
+ |
+void PPB_Core_Proxy::OnMessageReceived(const IPC::Message& msg) { |
+ IPC_BEGIN_MESSAGE_MAP(PPB_Core_Proxy, msg) |
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCore_AddRefResource, |
+ OnMsgAddRefResource) |
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCore_ReleaseResource, |
+ OnMsgReleaseResource) |
+ IPC_END_MESSAGE_MAP() |
+ // TODO(brettw) handle bad messages! |
+} |
+ |
+void PPB_Core_Proxy::OnMsgAddRefResource(PP_Resource resource) { |
+ ppb_core_target()->AddRefResource(resource); |
+} |
+ |
+void PPB_Core_Proxy::OnMsgReleaseResource(PP_Resource resource) { |
+ ppb_core_target()->ReleaseResource(resource); |
+} |
+ |
+} // namespace proxy |
+} // namespace pp |
Property changes on: ppapi/proxy/ppb_core_proxy.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |