1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef PPAPI_PROXY_PPB_BUFFER_PROXY_H_ 6#define PPAPI_PROXY_PPB_BUFFER_PROXY_H_ 7 8#include "base/memory/shared_memory.h" 9#include "ppapi/c/pp_instance.h" 10#include "ppapi/proxy/interface_proxy.h" 11#include "ppapi/shared_impl/resource.h" 12#include "ppapi/thunk/ppb_buffer_api.h" 13 14namespace ppapi { 15 16class HostResource; 17 18namespace proxy { 19 20class SerializedHandle; 21 22class Buffer : public thunk::PPB_Buffer_API, public Resource { 23 public: 24 Buffer(const HostResource& resource, 25 const base::SharedMemoryHandle& shm_handle, 26 uint32_t size); 27 virtual ~Buffer(); 28 29 // Resource overrides. 30 virtual thunk::PPB_Buffer_API* AsPPB_Buffer_API() OVERRIDE; 31 32 // PPB_Buffer_API implementation. 33 virtual PP_Bool Describe(uint32_t* size_in_bytes) OVERRIDE; 34 virtual PP_Bool IsMapped() OVERRIDE; 35 virtual void* Map() OVERRIDE; 36 virtual void Unmap() OVERRIDE; 37 38 // Trusted 39 virtual int32_t GetSharedMemory(int* handle) OVERRIDE; 40 41 private: 42 base::SharedMemory shm_; 43 uint32_t size_; 44 int map_count_; 45 46 DISALLOW_COPY_AND_ASSIGN(Buffer); 47}; 48 49class PPB_Buffer_Proxy : public InterfaceProxy { 50 public: 51 explicit PPB_Buffer_Proxy(Dispatcher* dispatcher); 52 virtual ~PPB_Buffer_Proxy(); 53 54 static PP_Resource CreateProxyResource(PP_Instance instance, 55 uint32_t size); 56 static PP_Resource AddProxyResource(const HostResource& resource, 57 base::SharedMemoryHandle shm_handle, 58 uint32_t size); 59 60 // InterfaceProxy implementation. 61 virtual bool OnMessageReceived(const IPC::Message& msg); 62 63 static const ApiID kApiID = API_ID_PPB_BUFFER; 64 65 private: 66 // Message handlers. 67 void OnMsgCreate(PP_Instance instance, 68 uint32_t size, 69 HostResource* result_resource, 70 ppapi::proxy::SerializedHandle* result_shm_handle); 71}; 72 73} // namespace proxy 74} // namespace ppapi 75 76#endif // PPAPI_PROXY_PPB_BUFFER_PROXY_H_ 77