Chromium Code Reviews| Index: ppapi/proxy/ppb_buffer_proxy.cc |
| =================================================================== |
| --- ppapi/proxy/ppb_buffer_proxy.cc (revision 0) |
| +++ ppapi/proxy/ppb_buffer_proxy.cc (revision 0) |
| @@ -0,0 +1,153 @@ |
| +// 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_buffer_proxy.h" |
| + |
| +#include <string.h> // For memcpy |
|
viettrungluu
2010/11/11 20:27:51
Silly nit: Apparently, comments are supposed to be
|
| + |
| +#include <vector> |
| + |
| +#include "base/logging.h" |
| +#include "build/build_config.h" |
| +#include "ppapi/c/pp_completion_callback.h" |
| +#include "ppapi/c/pp_resource.h" |
| +#include "ppapi/c/dev/ppb_buffer_dev.h" |
| +#include "ppapi/proxy/plugin_dispatcher.h" |
| +#include "ppapi/proxy/plugin_resource.h" |
| +#include "ppapi/proxy/ppapi_messages.h" |
| + |
| +namespace pp { |
| +namespace proxy { |
| + |
| +class Buffer : public PluginResource { |
| + public: |
| + Buffer(uint64_t memory_handle, int32_t size); |
| + virtual ~Buffer(); |
| + |
| + // Resource overrides. |
| + virtual Buffer* AsBuffer() { return this; } |
| + |
| + int32_t size() const { return size_; } |
| + |
| + void* Map(); |
| + void Unmap(); |
| + |
| + private: |
| + uint64_t memory_handle_; |
| + int32_t size_; |
| + |
| + void* mapped_data_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(Buffer); |
| +}; |
| + |
| +Buffer::Buffer(uint64_t memory_handle, int32_t size) |
| + : memory_handle_(memory_handle), |
| + size_(size), |
| + mapped_data_(NULL) { |
| +} |
| + |
| +Buffer::~Buffer() { |
| + Unmap(); |
| +} |
| + |
| +void* Buffer::Map() { |
| + // TODO(brettw) implement this. |
| + return mapped_data_; |
| +} |
| + |
| +void Buffer::Unmap() { |
| + // TODO(brettw) implement this. |
| +} |
| + |
| +namespace { |
| + |
| +PP_Resource Create(PP_Module module_id, int32_t size) { |
| + PP_Resource result = 0; |
| + uint64_t shm_handle = -1; |
| + PluginDispatcher::Get()->Send( |
| + new PpapiHostMsg_PPBBuffer_Create( |
| + INTERFACE_ID_PPB_BUFFER, module_id, size, |
| + &result, &shm_handle)); |
| + if (!result) |
| + return 0; |
| + |
| + linked_ptr<Buffer> object(new Buffer(shm_handle, size)); |
| + PluginDispatcher::Get()->plugin_resource_tracker()->AddResource( |
| + result, object); |
| + return result; |
| +} |
| + |
| +PP_Bool IsBuffer(PP_Resource resource) { |
| + Buffer* object = PluginResource::GetAs<Buffer>(resource); |
| + return BoolToPPBool(!!object); |
| +} |
| + |
| +PP_Bool Describe(PP_Resource resource, int32_t* size_in_bytes) { |
| + Buffer* object = PluginResource::GetAs<Buffer>(resource); |
| + if (!object) { |
| + *size_in_bytes = 0; |
| + return PP_FALSE; |
| + } |
| + *size_in_bytes = object->size(); |
| + return PP_TRUE; |
| +} |
| + |
| +void* Map(PP_Resource resource) { |
| + Buffer* object = PluginResource::GetAs<Buffer>(resource); |
| + if (!object) |
| + return NULL; |
| + return object->Map(); |
| +} |
| + |
| +void Unmap(PP_Resource resource) { |
| + Buffer* object = PluginResource::GetAs<Buffer>(resource); |
| + if (object) |
| + object->Unmap(); |
| +} |
| + |
| +const PPB_Buffer_Dev ppb_buffer = { |
| + &Create, |
| + &IsBuffer, |
| + &Describe, |
| + &Map, |
| + &Unmap, |
| +}; |
| + |
| +} // namespace |
| + |
| +PPB_Buffer_Proxy::PPB_Buffer_Proxy(Dispatcher* dispatcher, |
| + const void* target_interface) |
| + : InterfaceProxy(dispatcher, target_interface) { |
| +} |
| + |
| +PPB_Buffer_Proxy::~PPB_Buffer_Proxy() { |
| +} |
| + |
| +const void* PPB_Buffer_Proxy::GetSourceInterface() const { |
| + return &ppb_buffer; |
| +} |
| + |
| +InterfaceID PPB_Buffer_Proxy::GetInterfaceId() const { |
| + return INTERFACE_ID_PPB_BUFFER; |
| +} |
| + |
| +void PPB_Buffer_Proxy::OnMessageReceived(const IPC::Message& msg) { |
| + IPC_BEGIN_MESSAGE_MAP(PPB_Buffer_Proxy, msg) |
| + IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBBuffer_Create, OnMsgCreate) |
| + IPC_END_MESSAGE_MAP() |
| + // TODO(brettw) handle bad messages! |
| +} |
| + |
| +void PPB_Buffer_Proxy::OnMsgCreate(PP_Module module, |
| + int32_t size, |
| + PP_Resource* result_resource, |
| + uint64_t* result_shm_handle) { |
| + *result_resource = ppb_buffer_target()->Create(module, size); |
| + // TODO(brettw) set the shm handle from a trusted interface. |
| + *result_shm_handle = 0; |
| +} |
| + |
| +} // namespace proxy |
| +} // namespace pp |
| Property changes on: ppapi/proxy/ppb_buffer_proxy.cc |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |