| OLD | NEW |
| 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 |
| OLD | NEW |