Home | History | Annotate | Download | only in proxy
      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