Home | History | Annotate | Download | only in proxy
      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 <map>
      9 #include <queue>
     10 #include <string>
     11 
     12 #include "base/memory/ref_counted.h"
     13 #include "ppapi/c/pp_file_info.h"
     14 #include "ppapi/c/pp_resource.h"
     15 #include "ppapi/c/private/ppb_isolated_file_system_private.h"
     16 #include "ppapi/proxy/connection.h"
     17 #include "ppapi/proxy/plugin_resource.h"
     18 #include "ppapi/proxy/ppapi_proxy_export.h"
     19 #include "ppapi/proxy/resource_message_params.h"
     20 #include "ppapi/thunk/ppb_file_system_api.h"
     21 
     22 namespace ppapi {
     23 
     24 class TrackedCallback;
     25 
     26 namespace proxy {
     27 
     28 class PPAPI_PROXY_EXPORT FileSystemResource
     29     : public PluginResource,
     30       public NON_EXPORTED_BASE(thunk::PPB_FileSystem_API) {
     31  public:
     32   // Creates a new FileSystemResource. The resource must be subsequently opened
     33   // via Open() before use.
     34   FileSystemResource(Connection connection,
     35                      PP_Instance instance,
     36                      PP_FileSystemType type);
     37   // Creates a FileSystemResource, attached to an existing pending host
     38   // resource. The |pending_renderer_id| and |pending_browser_id| must be
     39   // already-opened file systems.
     40   FileSystemResource(Connection connection,
     41                      PP_Instance instance,
     42                      int pending_renderer_id,
     43                      int pending_browser_id,
     44                      PP_FileSystemType type);
     45   virtual ~FileSystemResource();
     46 
     47   // Resource overrides.
     48   virtual thunk::PPB_FileSystem_API* AsPPB_FileSystem_API() OVERRIDE;
     49 
     50   // PPB_FileSystem_API implementation.
     51   virtual int32_t Open(int64_t expected_size,
     52                        scoped_refptr<TrackedCallback> callback) OVERRIDE;
     53   virtual PP_FileSystemType GetType() OVERRIDE;
     54   virtual void OpenQuotaFile(PP_Resource file_io) OVERRIDE;
     55   virtual void CloseQuotaFile(PP_Resource file_io) OVERRIDE;
     56   typedef base::Callback<void(int64_t)> RequestQuotaCallback;
     57   virtual int64_t RequestQuota(int64_t amount,
     58                                const RequestQuotaCallback& callback) OVERRIDE;
     59 
     60   int32_t InitIsolatedFileSystem(const std::string& fsid,
     61                                  PP_IsolatedFileSystemType_Private type,
     62                                  const base::Callback<void(int32_t)>& callback);
     63  private:
     64   struct QuotaRequest {
     65     QuotaRequest(int64_t amount,
     66                  const RequestQuotaCallback& callback);
     67     ~QuotaRequest();
     68 
     69     int64_t amount;
     70     RequestQuotaCallback callback;
     71   };
     72 
     73   // Called when the host has responded to our open request.
     74   void OpenComplete(scoped_refptr<TrackedCallback> callback,
     75                     const ResourceMessageReplyParams& params);
     76 
     77   // Called when the host has responded to our InitIsolatedFileSystem request.
     78   void InitIsolatedFileSystemComplete(
     79       const base::Callback<void(int32_t)>& callback,
     80       const ResourceMessageReplyParams& params);
     81 
     82   void ReserveQuota(int64_t amount);
     83   typedef std::map<int32_t, int64_t> OffsetMap;
     84   void ReserveQuotaComplete(const ResourceMessageReplyParams& params,
     85                             int64_t amount,
     86                             const OffsetMap& max_written_offsets);
     87 
     88   PP_FileSystemType type_;
     89   bool called_open_;
     90   uint32_t callback_count_;
     91   int32_t callback_result_;
     92 
     93   std::set<PP_Resource> files_;
     94   std::queue<QuotaRequest> pending_quota_requests_;
     95   int64_t reserved_quota_;
     96   bool reserving_quota_;
     97 
     98   DISALLOW_COPY_AND_ASSIGN(FileSystemResource);
     99 };
    100 
    101 }  // namespace proxy
    102 }  // namespace ppapi
    103 
    104 #endif  // PPAPI_PROXY_FILE_SYSTEM_RESOURCE_H_
    105