1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
// Copyright 2011 The Chromium Authors
// 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 <vector>
#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);
FileRef& operator=(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 according to the
/// given <code>make_directory_flags</code>, which is a bit-mask of the
/// <code>PP_MakeDirectoryFlags</code> values. It is not valid to make a
/// directory in the external file system.
///
/// @param[in] make_directory_flags A bit-mask of the
/// <code>PP_MakeDirectoryFlags</code> values.
/// See <code>ppb_file_ref.h</code> for more details.
/// @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>.
int32_t MakeDirectory(int32_t make_directory_flags,
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_
|