1/* Copyright (c) 2012 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 6/** 7 * This file defines the API to create a file reference or "weak pointer" to a 8 * file in a file system. 9 */ 10 11label Chrome { 12 M14 = 1.0, 13 M28 = 1.1, 14 M34 = 1.2 15}; 16 17/** 18 * The <code>PP_MakeDirectoryFlags</code> enum contains flags used to control 19 * behavior of <code>PPB_FileRef.MakeDirectory()</code>. 20 */ 21enum PP_MakeDirectoryFlags { 22 PP_MAKEDIRECTORYFLAG_NONE = 0 << 0, 23 24 /** Requests that ancestor directories are created if they do not exist. */ 25 PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS = 1 << 0, 26 27 /** 28 * Requests that the PPB_FileRef.MakeDirectory() call fails if the directory 29 * already exists. 30 */ 31 PP_MAKEDIRECTORYFLAG_EXCLUSIVE = 1 << 1 32}; 33 34/** 35 * The <code>PPB_FileRef</code> struct represents a "weak pointer" to a file in 36 * a file system. This struct contains a <code>PP_FileSystemType</code> 37 * identifier and a file path string. 38 */ 39interface PPB_FileRef { 40 /** 41 * Create() creates a weak pointer to a file in the given file system. File 42 * paths are POSIX style. 43 * 44 * @param[in] resource A <code>PP_Resource</code> corresponding to a file 45 * system. 46 * @param[in] path A path to the file. Must begin with a '/' character. 47 * 48 * @return A <code>PP_Resource</code> corresponding to a file reference if 49 * successful or 0 if the path is malformed. 50 */ 51 PP_Resource Create([in] PP_Resource file_system, [in] str_t path); 52 /** 53 * IsFileRef() determines if the provided resource is a file reference. 54 * 55 * @param[in] resource A <code>PP_Resource</code> corresponding to a file 56 * reference. 57 * 58 * @return <code>PP_TRUE</code> if the resource is a 59 * <code>PPB_FileRef</code>, <code>PP_FALSE</code> if the resource is 60 * invalid or some type other than <code>PPB_FileRef</code>. 61 */ 62 PP_Bool IsFileRef([in] PP_Resource resource); 63 64 /** 65 * GetFileSystemType() returns the type of the file system. 66 * 67 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file 68 * reference. 69 * 70 * @return A <code>PP_FileSystemType</code> with the file system type if 71 * valid or <code>PP_FILESYSTEMTYPE_INVALID</code> if the provided resource 72 * is not a valid file reference. 73 */ 74 PP_FileSystemType GetFileSystemType([in] PP_Resource file_ref); 75 76 /** 77 * GetName() returns the name of the file. 78 * 79 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file 80 * reference. 81 * 82 * @return A <code>PP_Var</code> containing the name of the file. The value 83 * returned by this function does not include any path components (such as 84 * the name of the parent directory, for example). It is just the name of the 85 * file. Use GetPath() to get the full file path. 86 */ 87 PP_Var GetName([in] PP_Resource file_ref); 88 89 /** 90 * GetPath() returns the absolute path of the file. 91 * 92 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file 93 * reference. 94 * 95 * @return A <code>PP_Var</code> containing the absolute path of the file. 96 * This function fails if the file system type is 97 * <code>PP_FileSystemType_External</code>. 98 */ 99 PP_Var GetPath([in] PP_Resource file_ref); 100 101 /** 102 * GetParent() returns the parent directory of this file. If 103 * <code>file_ref</code> points to the root of the filesystem, then the root 104 * is returned. 105 * 106 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file 107 * reference. 108 * 109 * @return A <code>PP_Resource</code> containing the parent directory of the 110 * file. This function fails if the file system type is 111 * <code>PP_FileSystemType_External</code>. 112 */ 113 PP_Resource GetParent([in] PP_Resource file_ref); 114 115 /** 116 * MakeDirectory() makes a new directory in the file system as well as any 117 * parent directories if the <code>make_ancestors</code> argument is 118 * <code>PP_TRUE</code>. It is not valid to make a directory in the external 119 * file system. 120 * 121 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file 122 * reference. 123 * @param[in] make_ancestors A <code>PP_Bool</code> set to 124 * <code>PP_TRUE</code> to make ancestor directories or <code>PP_FALSE</code> 125 * if ancestor directories are not needed. 126 * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon 127 * completion of MakeDirectory(). 128 * 129 * @return An int32_t containing an error code from <code>pp_errors.h</code>. 130 * Succeeds if the directory already exists. Fails if ancestor directories 131 * do not exist and <code>make_ancestors</code> was passed as 132 * <code>PP_FALSE</code>. 133 */ 134 [deprecate=1.2] 135 int32_t MakeDirectory([in] PP_Resource directory_ref, 136 [in] PP_Bool make_ancestors, 137 [in] PP_CompletionCallback callback); 138 139 /** 140 * MakeDirectory() makes a new directory in the file system according to the 141 * given <code>make_directory_flags</code>, which is a bit-mask of the 142 * <code>PP_MakeDirectoryFlags</code> values. It is not valid to make a 143 * directory in the external file system. 144 * 145 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file 146 * reference. 147 * @param[in] make_directory_flags A bit-mask of the 148 * <code>PP_MakeDirectoryFlags</code> values. 149 * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon 150 * completion of MakeDirectory(). 151 * 152 * @return An int32_t containing an error code from <code>pp_errors.h</code>. 153 */ 154 [version=1.2] 155 int32_t MakeDirectory([in] PP_Resource directory_ref, 156 [in] int32_t make_directory_flags, 157 [in] PP_CompletionCallback callback); 158 159 /** 160 * Touch() Updates time stamps for a file. You must have write access to the 161 * file if it exists in the external filesystem. 162 * 163 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file 164 * reference. 165 * @param[in] last_access_time The last time the file was accessed. 166 * @param[in] last_modified_time The last time the file was modified. 167 * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon 168 * completion of Touch(). 169 * 170 * @return An int32_t containing an error code from <code>pp_errors.h</code>. 171 */ 172 int32_t Touch([in] PP_Resource file_ref, 173 [in] PP_Time last_access_time, 174 [in] PP_Time last_modified_time, 175 [in] PP_CompletionCallback callback); 176 177 /** 178 * Delete() deletes a file or directory. If <code>file_ref</code> refers to 179 * a directory, then the directory must be empty. It is an error to delete a 180 * file or directory that is in use. It is not valid to delete a file in 181 * the external file system. 182 * 183 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file 184 * reference. 185 * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon 186 * completion of Delete(). 187 * 188 * @return An int32_t containing an error code from <code>pp_errors.h</code>. 189 */ 190 int32_t Delete([in] PP_Resource file_ref, 191 [in] PP_CompletionCallback callback); 192 193 /** 194 * Rename() renames a file or directory. Arguments <code>file_ref</code> and 195 * <code>new_file_ref</code> must both refer to files in the same file 196 * system. It is an error to rename a file or directory that is in use. It 197 * is not valid to rename a file in the external file system. 198 * 199 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file 200 * reference. 201 * @param[in] new_file_ref A <code>PP_Resource</code> corresponding to a new 202 * file reference. 203 * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon 204 * completion of Rename(). 205 * 206 * @return An int32_t containing an error code from <code>pp_errors.h</code>. 207 */ 208 int32_t Rename([in] PP_Resource file_ref, 209 [in] PP_Resource new_file_ref, 210 [in] PP_CompletionCallback callback); 211 212 /** 213 * Query() queries info about a file or directory. You must have access to 214 * read this file or directory if it exists in the external filesystem. 215 * 216 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file 217 * reference. 218 * @param[out] info A pointer to a <code>PP_FileInfo</code> which will be 219 * populated with information about the file or directory. 220 * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon 221 * completion of Query(). 222 * 223 * @return An int32_t containing an error code from <code>pp_errors.h</code>. 224 */ 225 [version=1.1] 226 int32_t Query([in] PP_Resource file_ref, 227 [out] PP_FileInfo info, 228 [in] PP_CompletionCallback callback); 229 230 /** 231 * ReadDirectoryEntries() reads all entries in a directory. 232 * 233 * @param[in] file_ref A <code>PP_Resource</code> corresponding to a directory 234 * reference. 235 * @param[in] output An output array which will receive 236 * <code>PP_DirectoryEntry</code> objects on success. 237 * @param[in] callback A <code>PP_CompletionCallback</code> to run on 238 * completion. 239 * 240 * @return An int32_t containing an error code from <code>pp_errors.h</code>. 241 */ 242 [version=1.1] 243 int32_t ReadDirectoryEntries([in] PP_Resource file_ref, 244 [in] PP_ArrayOutput output, 245 [in] PP_CompletionCallback callback); 246}; 247 248