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 14 namespace ppapi { 15 16 class HostResource; 17 18 namespace proxy { 19 20 class SerializedHandle; 21 22 class 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 49 class 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