summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy/ppb_buffer_proxy.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ppapi/proxy/ppb_buffer_proxy.cc')
-rw-r--r--ppapi/proxy/ppb_buffer_proxy.cc117
1 files changed, 55 insertions, 62 deletions
diff --git a/ppapi/proxy/ppb_buffer_proxy.cc b/ppapi/proxy/ppb_buffer_proxy.cc
index a74bf18..d6f910f 100644
--- a/ppapi/proxy/ppb_buffer_proxy.cc
+++ b/ppapi/proxy/ppb_buffer_proxy.cc
@@ -14,11 +14,23 @@
#include "ppapi/proxy/plugin_dispatcher.h"
#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/thunk/ppb_buffer_api.h"
+#include "ppapi/thunk/thunk.h"
namespace pp {
namespace proxy {
-class Buffer : public PluginResource {
+namespace {
+
+InterfaceProxy* CreateBufferProxy(Dispatcher* dispatcher,
+ const void* target_interface) {
+ return new PPB_Buffer_Proxy(dispatcher, target_interface);
+}
+
+} // namespace
+
+class Buffer : public ppapi::thunk::PPB_Buffer_API,
+ public PluginResource {
public:
Buffer(const HostResource& resource,
int memory_handle,
@@ -26,12 +38,16 @@ class Buffer : public PluginResource {
virtual ~Buffer();
// Resource overrides.
- virtual Buffer* AsBuffer() { return this; }
+ virtual Buffer* AsBuffer() OVERRIDE;
- uint32_t size() const { return size_; }
+ // ResourceObjectBase overries.
+ virtual ppapi::thunk::PPB_Buffer_API* AsBuffer_API() OVERRIDE;
- void* Map();
- void Unmap();
+ // PPB_Buffer_API implementation.
+ virtual PP_Bool Describe(uint32_t* size_in_bytes) OVERRIDE;
+ virtual PP_Bool IsMapped() OVERRIDE;
+ virtual void* Map() OVERRIDE;
+ virtual void Unmap() OVERRIDE;
private:
int memory_handle_;
@@ -55,75 +71,32 @@ Buffer::~Buffer() {
Unmap();
}
-void* Buffer::Map() {
- // TODO(brettw) implement this.
- return mapped_data_;
+Buffer* Buffer::AsBuffer() {
+ return this;
}
-void Buffer::Unmap() {
- // TODO(brettw) implement this.
+ppapi::thunk::PPB_Buffer_API* Buffer::AsBuffer_API() {
+ return this;
}
-namespace {
-
-PP_Resource Create(PP_Instance instance, uint32_t size) {
- HostResource result;
- int32_t shm_handle = -1;
- PluginDispatcher::GetForInstance(instance)->Send(
- new PpapiHostMsg_PPBBuffer_Create(
- INTERFACE_ID_PPB_BUFFER, instance, size,
- &result, &shm_handle));
- if (result.is_null())
- return 0;
-
- linked_ptr<Buffer> object(new Buffer(result,
- static_cast<int>(shm_handle), size));
- return PluginResourceTracker::GetInstance()->AddResource(object);
-}
-
-PP_Bool IsBuffer(PP_Resource resource) {
- Buffer* object = PluginResource::GetAs<Buffer>(resource);
- return BoolToPPBool(!!object);
-}
-
-PP_Bool Describe(PP_Resource resource, uint32_t* size_in_bytes) {
- Buffer* object = PluginResource::GetAs<Buffer>(resource);
- if (!object) {
- *size_in_bytes = 0;
- return PP_FALSE;
- }
- *size_in_bytes = object->size();
+PP_Bool Buffer::Describe(uint32_t* size_in_bytes) {
+ *size_in_bytes = size_;
return PP_TRUE;
}
-void* Map(PP_Resource resource) {
- Buffer* object = PluginResource::GetAs<Buffer>(resource);
- if (!object)
- return NULL;
- return object->Map();
+PP_Bool Buffer::IsMapped() {
+ return PP_FromBool(!!mapped_data_);
}
-void Unmap(PP_Resource resource) {
- Buffer* object = PluginResource::GetAs<Buffer>(resource);
- if (object)
- object->Unmap();
+void* Buffer::Map() {
+ // TODO(brettw) implement this.
+ return mapped_data_;
}
-const PPB_Buffer_Dev buffer_interface = {
- &Create,
- &IsBuffer,
- &Describe,
- &Map,
- &Unmap,
-};
-
-InterfaceProxy* CreateBufferProxy(Dispatcher* dispatcher,
- const void* target_interface) {
- return new PPB_Buffer_Proxy(dispatcher, target_interface);
+void Buffer::Unmap() {
+ // TODO(brettw) implement this.
}
-} // namespace
-
PPB_Buffer_Proxy::PPB_Buffer_Proxy(Dispatcher* dispatcher,
const void* target_interface)
: InterfaceProxy(dispatcher, target_interface) {
@@ -135,7 +108,7 @@ PPB_Buffer_Proxy::~PPB_Buffer_Proxy() {
// static
const InterfaceProxy::Info* PPB_Buffer_Proxy::GetInfo() {
static const Info info = {
- &buffer_interface,
+ ppapi::thunk::GetPPB_Buffer_Thunk(),
PPB_BUFFER_DEV_INTERFACE,
INTERFACE_ID_PPB_BUFFER,
false,
@@ -144,6 +117,26 @@ const InterfaceProxy::Info* PPB_Buffer_Proxy::GetInfo() {
return &info;
}
+// static
+PP_Resource PPB_Buffer_Proxy::CreateProxyResource(PP_Instance instance,
+ uint32_t size) {
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
+ if (!dispatcher)
+ return 0;
+
+ HostResource result;
+ int32_t shm_handle = -1;
+ dispatcher->Send(new PpapiHostMsg_PPBBuffer_Create(
+ INTERFACE_ID_PPB_BUFFER, instance, size,
+ &result, &shm_handle));
+ if (result.is_null())
+ return 0;
+
+ linked_ptr<Buffer> object(new Buffer(result,
+ static_cast<int>(shm_handle), size));
+ return PluginResourceTracker::GetInstance()->AddResource(object);
+}
+
bool PPB_Buffer_Proxy::OnMessageReceived(const IPC::Message& msg) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(PPB_Buffer_Proxy, msg)