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
|
// 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 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_
|