// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef PPAPI_CPP_FILE_REF_H_ #define PPAPI_CPP_FILE_REF_H_ #include "ppapi/c/pp_file_info.h" #include "ppapi/c/pp_stdint.h" #include "ppapi/c/ppb_file_ref.h" #include "ppapi/cpp/resource.h" #include "ppapi/cpp/var.h" /// @file /// This file defines the API to create a file reference or "weak pointer" to a /// file in a file system. namespace pp { class DirectoryEntry; class FileSystem; class CompletionCallback; template <typename T> class CompletionCallbackWithOutput; /// The <code>FileRef</code> class represents a "weak pointer" to a file in /// a file system. class FileRef : public Resource { public: /// Default constructor for creating an is_null() <code>FileRef</code> /// object. FileRef() {} /// A constructor used when you have an existing PP_Resource for a FileRef /// and which to create a C++ object that takes an additional reference to /// the resource. /// /// @param[in] resource A PP_Resource corresponding to file reference. explicit FileRef(PP_Resource resource); /// A constructor used when you have received a PP_Resource as a return /// value that has already been reference counted. /// /// @param[in] resource A PP_Resource corresponding to file reference. FileRef(PassRef, PP_Resource resource); /// A constructor that creates a weak pointer to a file in the given file /// system. File paths are POSIX style. /// /// If the <code>path</code> is malformed, the resulting <code>FileRef</code> /// will have a null <code>PP_Resource</code>. /// /// @param[in] file_system A <code>FileSystem</code> corresponding to a file /// system type. /// @param[in] path A path to the file. Must begin with a '/' character. FileRef(const FileSystem& file_system, const char* path); /// The copy constructor for <code>FileRef</code>. /// /// @param[in] other A pointer to a <code>FileRef</code>. FileRef(const FileRef& other); /// GetFileSystemType() returns the type of the file system. /// /// @return A <code>PP_FileSystemType</code> with the file system type if /// valid or <code>PP_FILESYSTEMTYPE_INVALID</code> if the provided resource /// is not a valid file reference. PP_FileSystemType GetFileSystemType() const; /// GetName() returns the name of the file. /// /// @return A <code>Var</code> containing the name of the file. The value /// returned by this function does not include any path components (such as /// the name of the parent directory, for example). It is just the name of the /// file. Use GetPath() to get the full file path. Var GetName() const; /// GetPath() returns the absolute path of the file. /// /// @return A <code>Var</code> containing the absolute path of the file. /// This function fails if the file system type is /// <code>PP_FileSystemType_External</code>. Var GetPath() const; /// GetParent() returns the parent directory of this file. If /// <code>file_ref</code> points to the root of the filesystem, then the root /// is returned. /// /// @return A <code>FileRef</code> containing the parent directory of the /// file. This function fails if the file system type is /// <code>PP_FileSystemType_External</code>. FileRef GetParent() const; /// MakeDirectory() makes a new directory in the file system. It is not /// valid to make a directory in the external file system. /// <strong>Note:</strong> Use MakeDirectoryIncludingAncestors() to create /// parent directories. /// /// @param[in] cc A <code>CompletionCallback</code> to be called upon /// completion of MakeDirectory(). /// /// @return An int32_t containing an error code from <code>pp_errors.h</code>. /// Succeeds if the directory already exists. Fails if ancestor /// directortories do not exist (see MakeDirectoryIncludingAncestors for the /// alternative). int32_t MakeDirectory(const CompletionCallback& cc); /// MakeDirectoryIncludingAncestors() makes a new directory in the file /// system as well as any parent directories. It is not valid to make a /// directory in the external file system. /// /// @param[in] cc A <code>CompletionCallback</code> to be called upon /// completion of MakeDirectoryIncludingAncestors(). /// /// @return An int32_t containing an error code from <code>pp_errors.h</code>. /// Succeeds if the directory already exists. int32_t MakeDirectoryIncludingAncestors(const CompletionCallback& cc); /// Touch() Updates time stamps for a file. You must have write access to the /// file if it exists in the external filesystem. /// /// @param[in] last_access_time The last time the file was accessed. /// @param[in] last_modified_time The last time the file was modified. /// @param[in] cc A <code>CompletionCallback</code> to be called upon /// completion of Touch(). /// /// @return An int32_t containing an error code from <code>pp_errors.h</code>. int32_t Touch(PP_Time last_access_time, PP_Time last_modified_time, const CompletionCallback& cc); /// Delete() deletes a file or directory. If <code>file_ref</code> refers to /// a directory, then the directory must be empty. It is an error to delete a /// file or directory that is in use. It is not valid to delete a file in /// the external file system. /// /// @param[in] cc A <code>CompletionCallback</code> to be called upon /// completion of Delete(). /// /// @return An int32_t containing an error code from <code>pp_errors.h</code>. int32_t Delete(const CompletionCallback& cc); /// Rename() renames a file or directory. Argument <code>new_file_ref</code> /// must refer to files in the same file system as in this object. It is an /// error to rename a file or directory that is in use. It is not valid to /// rename a file in the external file system. /// /// @param[in] new_file_ref A <code>FileRef</code> corresponding to a new /// file reference. /// @param[in] cc A <code>CompletionCallback</code> to be called upon /// completion of Rename(). /// /// @return An int32_t containing an error code from <code>pp_errors.h</code>. int32_t Rename(const FileRef& new_file_ref, const CompletionCallback& cc); /// Query() queries info about a file or directory. You must have access to /// read this file or directory if it exists in the external filesystem. /// /// @param[in] callback A <code>CompletionCallbackWithOutput</code> /// to be called upon completion of Query(). /// /// @return An int32_t containing an error code from <code>pp_errors.h</code>. int32_t Query(const CompletionCallbackWithOutput<PP_FileInfo>& callback); /// ReadDirectoryEntries() Reads all entries in the directory. /// /// @param[in] cc A <code>CompletionCallbackWithOutput</code> to be called /// upon completion of ReadDirectoryEntries(). On success, the /// directory entries will be passed to the given function. /// /// Normally you would use a CompletionCallbackFactory to allow callbacks to /// be bound to your class. See completion_callback_factory.h for more /// discussion on how to use this. Your callback will generally look like: /// /// @code /// void OnReadDirectoryEntries( /// int32_t result, /// const std::vector<DirectoryEntry>& entries) { /// if (result == PP_OK) /// // use entries... /// } /// @endcode /// /// @return An int32_t containing an error code from <code>pp_errors.h</code>. int32_t ReadDirectoryEntries( const CompletionCallbackWithOutput< std::vector<DirectoryEntry> >& callback); }; } // namespace pp #endif // PPAPI_CPP_FILE_REF_H_