Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Side by Side Diff: ppapi/cpp/file_ref.cc

Issue 113363004: PPAPI: Add new PPB_FileRef.MakeDirectory to support exclusive operation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/cpp/file_ref.h" 5 #include "ppapi/cpp/file_ref.h"
6 6
7 #include "ppapi/c/pp_errors.h" 7 #include "ppapi/c/pp_errors.h"
8 #include "ppapi/cpp/completion_callback.h" 8 #include "ppapi/cpp/completion_callback.h"
9 #include "ppapi/cpp/directory_entry.h" 9 #include "ppapi/cpp/directory_entry.h"
10 #include "ppapi/cpp/file_system.h" 10 #include "ppapi/cpp/file_system.h"
11 #include "ppapi/cpp/module_impl.h" 11 #include "ppapi/cpp/module_impl.h"
12 12
13 namespace pp { 13 namespace pp {
14 14
15 namespace { 15 namespace {
16 16
17 template <> const char* interface_name<PPB_FileRef_1_0>() { 17 template <> const char* interface_name<PPB_FileRef_1_0>() {
18 return PPB_FILEREF_INTERFACE_1_0; 18 return PPB_FILEREF_INTERFACE_1_0;
19 } 19 }
20 20
21 template <> const char* interface_name<PPB_FileRef_1_1>() { 21 template <> const char* interface_name<PPB_FileRef_1_1>() {
22 return PPB_FILEREF_INTERFACE_1_1; 22 return PPB_FILEREF_INTERFACE_1_1;
23 } 23 }
24 24
25 template <> const char* interface_name<PPB_FileRef_1_2>() {
26 return PPB_FILEREF_INTERFACE_1_2;
27 }
28
25 } // namespace 29 } // namespace
26 30
27 FileRef::FileRef(PP_Resource resource) : Resource(resource) { 31 FileRef::FileRef(PP_Resource resource) : Resource(resource) {
28 } 32 }
29 33
30 FileRef::FileRef(PassRef, PP_Resource resource) : Resource(PASS_REF, resource) { 34 FileRef::FileRef(PassRef, PP_Resource resource) : Resource(PASS_REF, resource) {
31 } 35 }
32 36
33 FileRef::FileRef(const FileSystem& file_system, 37 FileRef::FileRef(const FileSystem& file_system,
34 const char* path) { 38 const char* path) {
35 if (has_interface<PPB_FileRef_1_1>()) { 39 if (has_interface<PPB_FileRef_1_1>()) {
36 PassRefFromConstructor(get_interface<PPB_FileRef_1_1>()->Create( 40 PassRefFromConstructor(get_interface<PPB_FileRef_1_1>()->Create(
37 file_system.pp_resource(), path)); 41 file_system.pp_resource(), path));
38 } else if (has_interface<PPB_FileRef_1_0>()) { 42 } else if (has_interface<PPB_FileRef_1_0>()) {
39 PassRefFromConstructor(get_interface<PPB_FileRef_1_0>()->Create( 43 PassRefFromConstructor(get_interface<PPB_FileRef_1_0>()->Create(
40 file_system.pp_resource(), path)); 44 file_system.pp_resource(), path));
41 } 45 }
42 } 46 }
43 47
44 FileRef::FileRef(const FileRef& other) 48 FileRef::FileRef(const FileRef& other)
45 : Resource(other) { 49 : Resource(other) {
46 } 50 }
47 51
48 PP_FileSystemType FileRef::GetFileSystemType() const { 52 PP_FileSystemType FileRef::GetFileSystemType() const {
53 if (has_interface<PPB_FileRef_1_2>())
54 return get_interface<PPB_FileRef_1_2>()->GetFileSystemType(pp_resource());
49 if (has_interface<PPB_FileRef_1_1>()) 55 if (has_interface<PPB_FileRef_1_1>())
50 return get_interface<PPB_FileRef_1_1>()->GetFileSystemType(pp_resource()); 56 return get_interface<PPB_FileRef_1_1>()->GetFileSystemType(pp_resource());
51 if (has_interface<PPB_FileRef_1_0>()) 57 if (has_interface<PPB_FileRef_1_0>())
52 return get_interface<PPB_FileRef_1_0>()->GetFileSystemType(pp_resource()); 58 return get_interface<PPB_FileRef_1_0>()->GetFileSystemType(pp_resource());
53 return PP_FILESYSTEMTYPE_EXTERNAL; 59 return PP_FILESYSTEMTYPE_EXTERNAL;
54 } 60 }
55 61
56 Var FileRef::GetName() const { 62 Var FileRef::GetName() const {
63 if (has_interface<PPB_FileRef_1_2>()) {
64 return Var(PASS_REF,
65 get_interface<PPB_FileRef_1_2>()->GetName(pp_resource()));
66 }
57 if (has_interface<PPB_FileRef_1_1>()) { 67 if (has_interface<PPB_FileRef_1_1>()) {
58 return Var(PASS_REF, 68 return Var(PASS_REF,
59 get_interface<PPB_FileRef_1_1>()->GetName(pp_resource())); 69 get_interface<PPB_FileRef_1_1>()->GetName(pp_resource()));
60 } 70 }
61 if (has_interface<PPB_FileRef_1_0>()) { 71 if (has_interface<PPB_FileRef_1_0>()) {
62 return Var(PASS_REF, 72 return Var(PASS_REF,
63 get_interface<PPB_FileRef_1_0>()->GetName(pp_resource())); 73 get_interface<PPB_FileRef_1_0>()->GetName(pp_resource()));
64 } 74 }
65 return Var(); 75 return Var();
66 } 76 }
67 77
68 Var FileRef::GetPath() const { 78 Var FileRef::GetPath() const {
79 if (has_interface<PPB_FileRef_1_2>()) {
80 return Var(PASS_REF,
81 get_interface<PPB_FileRef_1_2>()->GetPath(pp_resource()));
82 }
69 if (has_interface<PPB_FileRef_1_1>()) { 83 if (has_interface<PPB_FileRef_1_1>()) {
70 return Var(PASS_REF, 84 return Var(PASS_REF,
71 get_interface<PPB_FileRef_1_1>()->GetPath(pp_resource())); 85 get_interface<PPB_FileRef_1_1>()->GetPath(pp_resource()));
72 } 86 }
73 if (has_interface<PPB_FileRef_1_0>()) { 87 if (has_interface<PPB_FileRef_1_0>()) {
74 return Var(PASS_REF, 88 return Var(PASS_REF,
75 get_interface<PPB_FileRef_1_0>()->GetPath(pp_resource())); 89 get_interface<PPB_FileRef_1_0>()->GetPath(pp_resource()));
76 } 90 }
77 return Var(); 91 return Var();
78 } 92 }
79 93
80 FileRef FileRef::GetParent() const { 94 FileRef FileRef::GetParent() const {
95 if (has_interface<PPB_FileRef_1_2>()) {
96 return FileRef(PASS_REF,
97 get_interface<PPB_FileRef_1_2>()->GetParent(pp_resource()));
98 }
81 if (has_interface<PPB_FileRef_1_1>()) { 99 if (has_interface<PPB_FileRef_1_1>()) {
82 return FileRef(PASS_REF, 100 return FileRef(PASS_REF,
83 get_interface<PPB_FileRef_1_1>()->GetParent(pp_resource())); 101 get_interface<PPB_FileRef_1_1>()->GetParent(pp_resource()));
84 } 102 }
85 if (has_interface<PPB_FileRef_1_0>()) { 103 if (has_interface<PPB_FileRef_1_0>()) {
86 return FileRef(PASS_REF, 104 return FileRef(PASS_REF,
87 get_interface<PPB_FileRef_1_0>()->GetParent(pp_resource())); 105 get_interface<PPB_FileRef_1_0>()->GetParent(pp_resource()));
88 } 106 }
89 return FileRef(); 107 return FileRef();
90 } 108 }
91 109
92 int32_t FileRef::MakeDirectory(const CompletionCallback& cc) { 110 int32_t FileRef::MakeDirectory(const CompletionCallback& cc) {
111 if (has_interface<PPB_FileRef_1_2>()) {
112 return get_interface<PPB_FileRef_1_2>()->MakeDirectory(
113 pp_resource(),
114 PP_FALSE, // make_ancestors
115 cc.pp_completion_callback());
116 }
93 if (has_interface<PPB_FileRef_1_1>()) { 117 if (has_interface<PPB_FileRef_1_1>()) {
94 return get_interface<PPB_FileRef_1_1>()->MakeDirectory( 118 return get_interface<PPB_FileRef_1_1>()->MakeDirectory(
95 pp_resource(), 119 pp_resource(),
96 PP_FALSE, // make_ancestors 120 PP_FALSE, // make_ancestors
97 cc.pp_completion_callback()); 121 cc.pp_completion_callback());
98 } 122 }
99 if (has_interface<PPB_FileRef_1_0>()) { 123 if (has_interface<PPB_FileRef_1_0>()) {
100 return get_interface<PPB_FileRef_1_0>()->MakeDirectory( 124 return get_interface<PPB_FileRef_1_0>()->MakeDirectory(
101 pp_resource(), 125 pp_resource(),
102 PP_FALSE, // make_ancestors 126 PP_FALSE, // make_ancestors
103 cc.pp_completion_callback()); 127 cc.pp_completion_callback());
104 } 128 }
105 return cc.MayForce(PP_ERROR_NOINTERFACE); 129 return cc.MayForce(PP_ERROR_NOINTERFACE);
106 } 130 }
107 131
108 int32_t FileRef::MakeDirectoryIncludingAncestors( 132 int32_t FileRef::MakeDirectoryIncludingAncestors(
109 const CompletionCallback& cc) { 133 const CompletionCallback& cc) {
134 if (has_interface<PPB_FileRef_1_2>()) {
135 return get_interface<PPB_FileRef_1_2>()->MakeDirectory(
136 pp_resource(),
137 PP_TRUE, // make_ancestors
138 cc.pp_completion_callback());
139 }
110 if (has_interface<PPB_FileRef_1_1>()) { 140 if (has_interface<PPB_FileRef_1_1>()) {
111 return get_interface<PPB_FileRef_1_1>()->MakeDirectory( 141 return get_interface<PPB_FileRef_1_1>()->MakeDirectory(
112 pp_resource(), 142 pp_resource(),
113 PP_TRUE, // make_ancestors 143 PP_TRUE, // make_ancestors
114 cc.pp_completion_callback()); 144 cc.pp_completion_callback());
115 } 145 }
116 if (has_interface<PPB_FileRef_1_0>()) { 146 if (has_interface<PPB_FileRef_1_0>()) {
117 return get_interface<PPB_FileRef_1_0>()->MakeDirectory( 147 return get_interface<PPB_FileRef_1_0>()->MakeDirectory(
118 pp_resource(), 148 pp_resource(),
119 PP_TRUE, // make_ancestors 149 PP_TRUE, // make_ancestors
120 cc.pp_completion_callback()); 150 cc.pp_completion_callback());
121 } 151 }
122 return cc.MayForce(PP_ERROR_NOINTERFACE); 152 return cc.MayForce(PP_ERROR_NOINTERFACE);
123 } 153 }
124 154
155 int32_t FileRef::MakeDirectoryExclusive(
156 PP_Bool make_ancestors,
157 const CompletionCallback& cc) {
158 if (has_interface<PPB_FileRef_1_2>()) {
159 return get_interface<PPB_FileRef_1_2>()->MakeDirectoryExclusive(
160 pp_resource(),
161 make_ancestors,
162 cc.pp_completion_callback());
163 }
164 return cc.MayForce(PP_ERROR_NOINTERFACE);
165 }
166
125 int32_t FileRef::Touch(PP_Time last_access_time, 167 int32_t FileRef::Touch(PP_Time last_access_time,
126 PP_Time last_modified_time, 168 PP_Time last_modified_time,
127 const CompletionCallback& cc) { 169 const CompletionCallback& cc) {
170 if (has_interface<PPB_FileRef_1_2>()) {
171 return get_interface<PPB_FileRef_1_2>()->Touch(
172 pp_resource(), last_access_time, last_modified_time,
173 cc.pp_completion_callback());
174 }
128 if (has_interface<PPB_FileRef_1_1>()) { 175 if (has_interface<PPB_FileRef_1_1>()) {
129 return get_interface<PPB_FileRef_1_1>()->Touch( 176 return get_interface<PPB_FileRef_1_1>()->Touch(
130 pp_resource(), last_access_time, last_modified_time, 177 pp_resource(), last_access_time, last_modified_time,
131 cc.pp_completion_callback()); 178 cc.pp_completion_callback());
132 } 179 }
133 if (has_interface<PPB_FileRef_1_0>()) { 180 if (has_interface<PPB_FileRef_1_0>()) {
134 return get_interface<PPB_FileRef_1_0>()->Touch( 181 return get_interface<PPB_FileRef_1_0>()->Touch(
135 pp_resource(), last_access_time, last_modified_time, 182 pp_resource(), last_access_time, last_modified_time,
136 cc.pp_completion_callback()); 183 cc.pp_completion_callback());
137 } 184 }
138 return cc.MayForce(PP_ERROR_NOINTERFACE); 185 return cc.MayForce(PP_ERROR_NOINTERFACE);
139 } 186 }
140 187
141 int32_t FileRef::Delete(const CompletionCallback& cc) { 188 int32_t FileRef::Delete(const CompletionCallback& cc) {
189 if (has_interface<PPB_FileRef_1_2>()) {
190 return get_interface<PPB_FileRef_1_2>()->Delete(
191 pp_resource(), cc.pp_completion_callback());
192 }
142 if (has_interface<PPB_FileRef_1_1>()) { 193 if (has_interface<PPB_FileRef_1_1>()) {
143 return get_interface<PPB_FileRef_1_1>()->Delete( 194 return get_interface<PPB_FileRef_1_1>()->Delete(
144 pp_resource(), cc.pp_completion_callback()); 195 pp_resource(), cc.pp_completion_callback());
145 } 196 }
146 if (has_interface<PPB_FileRef_1_0>()) { 197 if (has_interface<PPB_FileRef_1_0>()) {
147 return get_interface<PPB_FileRef_1_0>()->Delete( 198 return get_interface<PPB_FileRef_1_0>()->Delete(
148 pp_resource(), cc.pp_completion_callback()); 199 pp_resource(), cc.pp_completion_callback());
149 } 200 }
150 return cc.MayForce(PP_ERROR_NOINTERFACE); 201 return cc.MayForce(PP_ERROR_NOINTERFACE);
151 } 202 }
152 203
153 int32_t FileRef::Rename(const FileRef& new_file_ref, 204 int32_t FileRef::Rename(const FileRef& new_file_ref,
154 const CompletionCallback& cc) { 205 const CompletionCallback& cc) {
206 if (has_interface<PPB_FileRef_1_2>()) {
207 return get_interface<PPB_FileRef_1_2>()->Rename(
208 pp_resource(), new_file_ref.pp_resource(), cc.pp_completion_callback());
209 }
155 if (has_interface<PPB_FileRef_1_1>()) { 210 if (has_interface<PPB_FileRef_1_1>()) {
156 return get_interface<PPB_FileRef_1_1>()->Rename( 211 return get_interface<PPB_FileRef_1_1>()->Rename(
157 pp_resource(), new_file_ref.pp_resource(), cc.pp_completion_callback()); 212 pp_resource(), new_file_ref.pp_resource(), cc.pp_completion_callback());
158 } 213 }
159 if (has_interface<PPB_FileRef_1_0>()) { 214 if (has_interface<PPB_FileRef_1_0>()) {
160 return get_interface<PPB_FileRef_1_0>()->Rename( 215 return get_interface<PPB_FileRef_1_0>()->Rename(
161 pp_resource(), new_file_ref.pp_resource(), cc.pp_completion_callback()); 216 pp_resource(), new_file_ref.pp_resource(), cc.pp_completion_callback());
162 } 217 }
163 return cc.MayForce(PP_ERROR_NOINTERFACE); 218 return cc.MayForce(PP_ERROR_NOINTERFACE);
164 } 219 }
165 220
166 int32_t FileRef::Query(const CompletionCallbackWithOutput<PP_FileInfo>& cc) { 221 int32_t FileRef::Query(const CompletionCallbackWithOutput<PP_FileInfo>& cc) {
167 if (!has_interface<PPB_FileRef_1_1>()) 222 if (has_interface<PPB_FileRef_1_2>()) {
168 return cc.MayForce(PP_ERROR_NOINTERFACE); 223 return get_interface<PPB_FileRef_1_2>()->Query(
169 return get_interface<PPB_FileRef_1_1>()->Query( 224 pp_resource(), cc.output(), cc.pp_completion_callback());
170 pp_resource(), cc.output(), cc.pp_completion_callback()); 225 }
226 if (has_interface<PPB_FileRef_1_1>()) {
227 return get_interface<PPB_FileRef_1_1>()->Query(
228 pp_resource(), cc.output(), cc.pp_completion_callback());
229 }
230 return cc.MayForce(PP_ERROR_NOINTERFACE);
171 } 231 }
172 232
173 int32_t FileRef::ReadDirectoryEntries( 233 int32_t FileRef::ReadDirectoryEntries(
174 const CompletionCallbackWithOutput<std::vector<DirectoryEntry> >& 234 const CompletionCallbackWithOutput<std::vector<DirectoryEntry> >&
175 callback) { 235 callback) {
176 if (!has_interface<PPB_FileRef_1_1>()) 236 if (has_interface<PPB_FileRef_1_2>()) {
177 return callback.MayForce(PP_ERROR_NOINTERFACE); 237 return get_interface<PPB_FileRef_1_2>()->ReadDirectoryEntries(
178 return get_interface<PPB_FileRef_1_1>()->ReadDirectoryEntries( 238 pp_resource(), callback.output(), callback.pp_completion_callback());
179 pp_resource(), callback.output(), callback.pp_completion_callback()); 239 }
240 if (has_interface<PPB_FileRef_1_1>()) {
241 return get_interface<PPB_FileRef_1_1>()->ReadDirectoryEntries(
242 pp_resource(), callback.output(), callback.pp_completion_callback());
243 }
244 return callback.MayForce(PP_ERROR_NOINTERFACE);
180 } 245 }
181 246
182 } // namespace pp 247 } // namespace pp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698