Home | History | Annotate | Download | only in proxy
      1 // Copyright 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_REF_RESOURCE_H_
      6 #define PPAPI_PROXY_FILE_REF_RESOURCE_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "ppapi/c/pp_instance.h"
     13 #include "ppapi/c/pp_resource.h"
     14 #include "ppapi/c/pp_time.h"
     15 #include "ppapi/proxy/plugin_resource.h"
     16 #include "ppapi/proxy/ppapi_proxy_export.h"
     17 #include "ppapi/shared_impl/file_ref_create_info.h"
     18 #include "ppapi/shared_impl/scoped_pp_resource.h"
     19 #include "ppapi/thunk/ppb_file_ref_api.h"
     20 
     21 namespace ppapi {
     22 class StringVar;
     23 
     24 namespace proxy {
     25 
     26 class PPAPI_PROXY_EXPORT FileRefResource
     27     : public PluginResource,
     28       public thunk::PPB_FileRef_API {
     29  public:
     30   static PP_Resource CreateFileRef(Connection connection,
     31                                    PP_Instance instance,
     32                                    const FileRefCreateInfo& info);
     33 
     34   virtual ~FileRefResource();
     35 
     36   // Resource implementation.
     37   virtual thunk::PPB_FileRef_API* AsPPB_FileRef_API() OVERRIDE;
     38 
     39   // PPB_FileRef_API implementation.
     40   virtual PP_FileSystemType GetFileSystemType() const OVERRIDE;
     41   virtual PP_Var GetName() const OVERRIDE;
     42   virtual PP_Var GetPath() const OVERRIDE;
     43   virtual PP_Resource GetParent() OVERRIDE;
     44   virtual int32_t MakeDirectory(
     45       int32_t make_directory_flags,
     46       scoped_refptr<TrackedCallback> callback) OVERRIDE;
     47   virtual int32_t Touch(PP_Time last_access_time,
     48                         PP_Time last_modified_time,
     49                         scoped_refptr<TrackedCallback> callback) OVERRIDE;
     50   virtual int32_t Delete(scoped_refptr<TrackedCallback> callback) OVERRIDE;
     51   virtual int32_t Rename(PP_Resource new_file_ref,
     52                          scoped_refptr<TrackedCallback> callback) OVERRIDE;
     53   virtual int32_t Query(PP_FileInfo* info,
     54                         scoped_refptr<TrackedCallback> callback) OVERRIDE;
     55   virtual int32_t ReadDirectoryEntries(
     56       const PP_ArrayOutput& output,
     57       scoped_refptr<TrackedCallback> callback) OVERRIDE;
     58   virtual const FileRefCreateInfo& GetCreateInfo() const OVERRIDE;
     59 
     60   // Private API
     61   virtual PP_Var GetAbsolutePath() OVERRIDE;
     62 
     63  private:
     64   FileRefResource(Connection connection,
     65                   PP_Instance instance,
     66                   const FileRefCreateInfo& info);
     67 
     68   void RunTrackedCallback(scoped_refptr<TrackedCallback> callback,
     69                           const ResourceMessageReplyParams& params);
     70 
     71   void OnQueryReply(PP_FileInfo* out_info,
     72                     scoped_refptr<TrackedCallback> callback,
     73                     const ResourceMessageReplyParams& params,
     74                     const PP_FileInfo& info);
     75 
     76   void OnDirectoryEntriesReply(
     77       const PP_ArrayOutput& output,
     78       scoped_refptr<TrackedCallback> callback,
     79       const ResourceMessageReplyParams& params,
     80       const std::vector<ppapi::FileRefCreateInfo>& infos,
     81       const std::vector<PP_FileType>& file_types);
     82 
     83   bool uses_internal_paths() const;
     84 
     85   // Populated after creation.
     86   FileRefCreateInfo create_info_;
     87 
     88   // Some file ref operations may fail if the the file system resource inside
     89   // create_info_ is destroyed. Therefore, we explicitly hold a reference to
     90   // the file system resource to make sure it outlives the file ref.
     91   ScopedPPResource file_system_resource_;
     92 
     93   scoped_refptr<StringVar> name_var_;
     94   scoped_refptr<StringVar> path_var_;
     95   scoped_refptr<StringVar> absolute_path_var_;
     96 
     97   DISALLOW_COPY_AND_ASSIGN(FileRefResource);
     98 };
     99 
    100 }  // namespace proxy
    101 }  // namespace ppapi
    102 
    103 #endif  // PPAPI_PROXY_FILE_REF_RESOURCE_H_
    104