• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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