15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/file_ref.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/pp_bool.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/completion_callback.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/cpp/directory_entry.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/file_system.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module_impl.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_FileRef_1_0>() {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_FILEREF_INTERFACE_1_0;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template <> const char* interface_name<PPB_FileRef_1_1>() {
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return PPB_FILEREF_INTERFACE_1_1;
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)template <> const char* interface_name<PPB_FileRef_1_2>() {
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return PPB_FILEREF_INTERFACE_1_2;
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileRef::FileRef(PP_Resource resource) : Resource(resource) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileRef::FileRef(PassRef, PP_Resource resource) : Resource(PASS_REF, resource) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileRef::FileRef(const FileSystem& file_system,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const char* path) {
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>()) {
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    PassRefFromConstructor(get_interface<PPB_FileRef_1_2>()->Create(
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        file_system.pp_resource(), path));
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  } else if (has_interface<PPB_FileRef_1_1>()) {
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    PassRefFromConstructor(get_interface<PPB_FileRef_1_1>()->Create(
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        file_system.pp_resource(), path));
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  } else if (has_interface<PPB_FileRef_1_0>()) {
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    PassRefFromConstructor(get_interface<PPB_FileRef_1_0>()->Create(
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        file_system.pp_resource(), path));
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileRef::FileRef(const FileRef& other)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : Resource(other) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_FileSystemType FileRef::GetFileSystemType() const {
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>())
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return get_interface<PPB_FileRef_1_2>()->GetFileSystemType(pp_resource());
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_1>())
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_FileRef_1_1>()->GetFileSystemType(pp_resource());
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_0>())
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_FileRef_1_0>()->GetFileSystemType(pp_resource());
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return PP_FILESYSTEMTYPE_EXTERNAL;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Var FileRef::GetName() const {
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>()) {
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return Var(PASS_REF,
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               get_interface<PPB_FileRef_1_2>()->GetName(pp_resource()));
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_1>()) {
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return Var(PASS_REF,
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               get_interface<PPB_FileRef_1_1>()->GetName(pp_resource()));
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_0>()) {
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return Var(PASS_REF,
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               get_interface<PPB_FileRef_1_0>()->GetName(pp_resource()));
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return Var();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Var FileRef::GetPath() const {
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>()) {
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return Var(PASS_REF,
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               get_interface<PPB_FileRef_1_2>()->GetPath(pp_resource()));
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_1>()) {
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return Var(PASS_REF,
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               get_interface<PPB_FileRef_1_1>()->GetPath(pp_resource()));
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_0>()) {
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return Var(PASS_REF,
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               get_interface<PPB_FileRef_1_0>()->GetPath(pp_resource()));
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return Var();
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileRef FileRef::GetParent() const {
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>()) {
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return FileRef(PASS_REF,
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   get_interface<PPB_FileRef_1_2>()->GetParent(pp_resource()));
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_1>()) {
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return FileRef(PASS_REF,
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                   get_interface<PPB_FileRef_1_1>()->GetParent(pp_resource()));
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_0>()) {
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return FileRef(PASS_REF,
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                   get_interface<PPB_FileRef_1_0>()->GetParent(pp_resource()));
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return FileRef();
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t FileRef::MakeDirectory(int32_t make_directory_flags,
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                               const CompletionCallback& cc) {
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>()) {
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return get_interface<PPB_FileRef_1_2>()->MakeDirectory(
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource(),
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        make_directory_flags,
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        cc.pp_completion_callback());
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_1>()) {
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (make_directory_flags & ~PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS)
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return cc.MayForce(PP_ERROR_NOTSUPPORTED);
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_FileRef_1_1>()->MakeDirectory(
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource(),
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        PP_FromBool(make_directory_flags & PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS),
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        cc.pp_completion_callback());
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_0>()) {
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (make_directory_flags & ~PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS)
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return cc.MayForce(PP_ERROR_NOTSUPPORTED);
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_FileRef_1_0>()->MakeDirectory(
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource(),
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        PP_FromBool(make_directory_flags & PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS),
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        cc.pp_completion_callback());
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return cc.MayForce(PP_ERROR_NOINTERFACE);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t FileRef::Touch(PP_Time last_access_time,
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       PP_Time last_modified_time,
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const CompletionCallback& cc) {
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>()) {
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return get_interface<PPB_FileRef_1_2>()->Touch(
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        pp_resource(), last_access_time, last_modified_time,
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        cc.pp_completion_callback());
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_1>()) {
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_FileRef_1_1>()->Touch(
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource(), last_access_time, last_modified_time,
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        cc.pp_completion_callback());
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_0>()) {
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_FileRef_1_0>()->Touch(
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource(), last_access_time, last_modified_time,
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        cc.pp_completion_callback());
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return cc.MayForce(PP_ERROR_NOINTERFACE);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t FileRef::Delete(const CompletionCallback& cc) {
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>()) {
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return get_interface<PPB_FileRef_1_2>()->Delete(
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        pp_resource(), cc.pp_completion_callback());
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_1>()) {
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_FileRef_1_1>()->Delete(
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource(), cc.pp_completion_callback());
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_0>()) {
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_FileRef_1_0>()->Delete(
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource(), cc.pp_completion_callback());
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return cc.MayForce(PP_ERROR_NOINTERFACE);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t FileRef::Rename(const FileRef& new_file_ref,
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const CompletionCallback& cc) {
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>()) {
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return get_interface<PPB_FileRef_1_2>()->Rename(
1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        pp_resource(), new_file_ref.pp_resource(), cc.pp_completion_callback());
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_1>()) {
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_FileRef_1_1>()->Rename(
186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource(), new_file_ref.pp_resource(), cc.pp_completion_callback());
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_FileRef_1_0>()) {
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_FileRef_1_0>()->Rename(
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource(), new_file_ref.pp_resource(), cc.pp_completion_callback());
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return cc.MayForce(PP_ERROR_NOINTERFACE);
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int32_t FileRef::Query(const CompletionCallbackWithOutput<PP_FileInfo>& cc) {
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>()) {
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return get_interface<PPB_FileRef_1_2>()->Query(
1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        pp_resource(), cc.output(), cc.pp_completion_callback());
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_1>()) {
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return get_interface<PPB_FileRef_1_1>()->Query(
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        pp_resource(), cc.output(), cc.pp_completion_callback());
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return cc.MayForce(PP_ERROR_NOINTERFACE);
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int32_t FileRef::ReadDirectoryEntries(
208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const CompletionCallbackWithOutput<std::vector<DirectoryEntry> >&
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        callback) {
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_2>()) {
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return get_interface<PPB_FileRef_1_2>()->ReadDirectoryEntries(
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        pp_resource(), callback.output(), callback.pp_completion_callback());
2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (has_interface<PPB_FileRef_1_1>()) {
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return get_interface<PPB_FileRef_1_1>()->ReadDirectoryEntries(
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        pp_resource(), callback.output(), callback.pp_completion_callback());
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return callback.MayForce(PP_ERROR_NOINTERFACE);
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace pp
222