• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 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_SYSTEM_RESOURCE_H_
6 #define PPAPI_PROXY_FILE_SYSTEM_RESOURCE_H_
7 
8 #include <string>
9 
10 #include "base/memory/ref_counted.h"
11 #include "ppapi/c/pp_file_info.h"
12 #include "ppapi/c/private/ppb_isolated_file_system_private.h"
13 #include "ppapi/proxy/connection.h"
14 #include "ppapi/proxy/plugin_resource.h"
15 #include "ppapi/proxy/ppapi_proxy_export.h"
16 #include "ppapi/proxy/resource_message_params.h"
17 #include "ppapi/thunk/ppb_file_system_api.h"
18 
19 namespace ppapi {
20 
21 class TrackedCallback;
22 
23 namespace proxy {
24 
25 class PPAPI_PROXY_EXPORT FileSystemResource
26     : public PluginResource,
27       public NON_EXPORTED_BASE(thunk::PPB_FileSystem_API) {
28  public:
29   // Creates a new FileSystemResource. The resource must be subsequently opened
30   // via Open() before use.
31   FileSystemResource(Connection connection,
32                      PP_Instance instance,
33                      PP_FileSystemType type);
34   // Creates a FileSystemResource, attached to an existing pending host
35   // resource. The |pending_renderer_id| and |pending_browser_id| must be
36   // already-opened file systems.
37   FileSystemResource(Connection connection,
38                      PP_Instance instance,
39                      int pending_renderer_id,
40                      int pending_browser_id,
41                      PP_FileSystemType type);
42   virtual ~FileSystemResource();
43 
44   // Resource overrides.
45   virtual thunk::PPB_FileSystem_API* AsPPB_FileSystem_API() OVERRIDE;
46 
47   // PPB_FileSystem_API implementation.
48   virtual int32_t Open(int64_t expected_size,
49                        scoped_refptr<TrackedCallback> callback) OVERRIDE;
50   virtual PP_FileSystemType GetType() OVERRIDE;
51 
52   int32_t InitIsolatedFileSystem(const std::string& fsid,
53                                  PP_IsolatedFileSystemType_Private type,
54                                  const base::Callback<void(int32_t)>& callback);
55  private:
56   // Called when the host has responded to our open request.
57   void OpenComplete(scoped_refptr<TrackedCallback> callback,
58                     const ResourceMessageReplyParams& params);
59 
60   // Called when the host has responded to our InitIsolatedFileSystem request.
61   void InitIsolatedFileSystemComplete(
62       const base::Callback<void(int32_t)>& callback,
63       const ResourceMessageReplyParams& params);
64 
65   PP_FileSystemType type_;
66   bool called_open_;
67   uint32_t callback_count_;
68   int32_t callback_result_;
69 
70   DISALLOW_COPY_AND_ASSIGN(FileSystemResource);
71 };
72 
73 }  // namespace proxy
74 }  // namespace ppapi
75 
76 #endif  // PPAPI_PROXY_FILE_SYSTEM_RESOURCE_H_
77