• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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_FILE_MAPPING_RESOURCE_H_
6 #define PPAPI_PROXY_FILE_MAPPING_RESOURCE_H_
7 
8 #include "ppapi/proxy/file_io_resource.h"
9 #include "ppapi/proxy/plugin_resource.h"
10 #include "ppapi/proxy/ppapi_proxy_export.h"
11 #include "ppapi/thunk/ppb_file_mapping_api.h"
12 
13 namespace ppapi {
14 namespace proxy {
15 
16 // The proxy-side resource for PPB_FileMapping.
17 class PPAPI_PROXY_EXPORT FileMappingResource
18       : public PluginResource,
19         public thunk::PPB_FileMapping_API {
20  public:
21   FileMappingResource(Connection connection, PP_Instance instance);
22 
23  private:
24   virtual ~FileMappingResource();
25 
26   // Resource implementation.
27   virtual thunk::PPB_FileMapping_API* AsPPB_FileMapping_API() OVERRIDE;
28 
29   // PPB_FileMapping_API implementation.
30   virtual int32_t Map(PP_Instance instance,
31                       PP_Resource file_io,
32                       int64_t length,
33                       uint32_t protection,
34                       uint32_t flags,
35                       int64_t offset,
36                       void** address,
37                       scoped_refptr<TrackedCallback> callback) OVERRIDE;
38   virtual int32_t Unmap(PP_Instance instance,
39                         const void* address,
40                         int64_t length,
41                         scoped_refptr<TrackedCallback> callback) OVERRIDE;
42   virtual int64_t GetMapPageSize(PP_Instance instance) OVERRIDE;
43 
44   struct MapResult {
MapResultMapResult45     MapResult() : result(PP_ERROR_FAILED), address(NULL) {
46     }
47     int32_t result;
48     void* address;
49   };
50   void OnMapCompleted(void** mapped_address_out_param,
51                       int64_t length,
52                       scoped_refptr<TrackedCallback> callback,
53                       const MapResult& map_result);
54 
55   // These functions perform potentially blocking operations so they should not
56   // be called on the main thread or while we hold the proxy lock. Their
57   // implementation is platform specific. See file_mapping_resource_posix.cc and
58   // file_mapping_resource_win.cc.
59   static MapResult DoMapBlocking(
60       scoped_refptr<FileIOResource::FileHolder> file_holder,
61       void* address_hint,
62       int64_t length,
63       uint32_t protection,
64       uint32_t flags,
65       int64_t offset);
66   static int32_t DoUnmapBlocking(const void* address, int64_t length);
67   // DoGetMapPageSize is platform-specific, but fast enough that we can call it
68   // on the main thread with the lock.
69   static int64_t DoGetMapPageSize();
70 
71   DISALLOW_COPY_AND_ASSIGN(FileMappingResource);
72 };
73 
74 }  // namespace proxy
75 }  // namespace ppapi
76 
77 #endif  // PPAPI_PROXY_FILE_MAPPING_RESOURCE_H_
78