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/c/pp_file_info.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_file_ref.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_completion_callback.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/private/ppb_file_ref_private.h"
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/shared_impl/file_ref_create_info.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/shared_impl/proxy_lock.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/tracked_callback.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/enter.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/thunk.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_file_ref_api.h"
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/thunk/ppb_file_system_api.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/resource_creation_api.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace thunk {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef EnterResource<PPB_FileRef_API> EnterFileRef;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource Create(PP_Resource file_system, const char* path) {
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::Create()";
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ppapi::ProxyAutoLock lock;
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EnterResourceNoLock<PPB_FileSystem_API> enter_file_system(file_system, true);
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (enter_file_system.failed())
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  PP_Instance instance = enter_file_system.resource()->pp_instance();
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EnterResourceCreationNoLock enter(instance);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  FileRefCreateInfo info;
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  info.file_system_type = enter_file_system.object()->GetType();
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  info.internal_path = std::string(path);
39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  info.browser_pending_host_resource_id = 0;
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  info.renderer_pending_host_resource_id = 0;
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  info.file_system_plugin_resource = file_system;
42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return enter.functions()->CreateFileRef(instance, info);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsFileRef(PP_Resource resource) {
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::IsFileRef()";
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterFileRef enter(resource, false);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PP_FromBool(enter.succeeded());
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_FileSystemType GetFileSystemType(PP_Resource file_ref) {
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::GetFileSystemType()";
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterFileRef enter(file_ref, true);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_FILESYSTEMTYPE_INVALID;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetFileSystemType();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var GetName(PP_Resource file_ref) {
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::GetName()";
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterFileRef enter(file_ref, true);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakeUndefined();
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetName();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var GetPath(PP_Resource file_ref) {
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::GetPath()";
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterFileRef enter(file_ref, true);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakeUndefined();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetPath();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource GetParent(PP_Resource file_ref) {
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::GetParent()";
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterFileRef enter(file_ref, true);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetParent();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t MakeDirectory(PP_Resource directory_ref,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      PP_Bool make_ancestors,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      PP_CompletionCallback callback) {
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::MakeDirectory()";
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterFileRef enter(directory_ref, callback, true);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return enter.retval();
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int32_t flag = make_ancestors ? PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                : PP_MAKEDIRECTORYFLAG_NONE;
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.SetResult(enter.object()->MakeDirectory(
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      flag, enter.callback()));
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t MakeDirectory_1_2(PP_Resource directory_ref,
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                          int32_t make_directory_flags,
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                          PP_CompletionCallback callback) {
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_FileRef::MakeDirectory()";
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterFileRef enter(directory_ref, callback, true);
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return enter.retval();
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.SetResult(enter.object()->MakeDirectory(
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      make_directory_flags, enter.callback()));
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t Touch(PP_Resource file_ref,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              PP_Time last_access_time,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              PP_Time last_modified_time,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              PP_CompletionCallback callback) {
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::Touch()";
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterFileRef enter(file_ref, callback, true);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return enter.retval();
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.SetResult(enter.object()->Touch(
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      last_access_time, last_modified_time, enter.callback()));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t Delete(PP_Resource file_ref,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               PP_CompletionCallback callback) {
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::Delete()";
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterFileRef enter(file_ref, callback, true);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return enter.retval();
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.SetResult(enter.object()->Delete(enter.callback()));
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t Rename(PP_Resource file_ref,
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               PP_Resource new_file_ref,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               PP_CompletionCallback callback) {
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::Rename()";
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterFileRef enter(file_ref, callback, true);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return enter.retval();
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.SetResult(enter.object()->Rename(new_file_ref,
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                enter.callback()));
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int32_t Query(PP_Resource file_ref,
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              PP_FileInfo* info,
141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              PP_CompletionCallback callback) {
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::Query()";
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EnterFileRef enter(file_ref, callback, true);
144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (enter.failed())
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return enter.retval();
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return enter.SetResult(enter.object()->Query(info,
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                               enter.callback()));
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int32_t ReadDirectoryEntries(PP_Resource file_ref,
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             PP_ArrayOutput output,
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             PP_CompletionCallback callback) {
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EnterFileRef enter(file_ref, callback, true);
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (enter.failed())
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return enter.retval();
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return enter.SetResult(enter.object()->ReadDirectoryEntries(
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      output, enter.callback()));
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var GetAbsolutePath(PP_Resource file_ref) {
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_FileRef::GetAbsolutePath";
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterFileRef enter(file_ref, true);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakeUndefined();
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetAbsolutePath();
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const PPB_FileRef_1_0 g_ppb_file_ref_thunk_1_0 = {
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &Create,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &IsFileRef,
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetFileSystemType,
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetName,
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetPath,
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetParent,
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &MakeDirectory,
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &Touch,
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &Delete,
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &Rename
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const PPB_FileRef_1_1 g_ppb_file_ref_thunk_1_1 = {
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &Create,
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &IsFileRef,
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &GetFileSystemType,
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &GetName,
186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &GetPath,
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &GetParent,
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &MakeDirectory,
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &Touch,
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &Delete,
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &Rename,
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &Query,
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  &ReadDirectoryEntries
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const PPB_FileRef_1_2 g_ppb_file_ref_thunk_1_2 = {
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &Create,
1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &IsFileRef,
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetFileSystemType,
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetName,
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetPath,
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetParent,
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &MakeDirectory_1_2,
2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &Touch,
2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &Delete,
2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &Rename,
2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &Query,
2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &ReadDirectoryEntries
2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_FileRefPrivate g_ppb_file_ref_private_thunk = {
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetAbsolutePath
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_FileRef_1_0* GetPPB_FileRef_1_0_Thunk() {
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return &g_ppb_file_ref_thunk_1_0;
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const PPB_FileRef_1_1* GetPPB_FileRef_1_1_Thunk() {
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return &g_ppb_file_ref_thunk_1_1;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const PPB_FileRef_1_2* GetPPB_FileRef_1_2_Thunk() {
2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return &g_ppb_file_ref_thunk_1_2;
2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_FileRefPrivate_0_1* GetPPB_FileRefPrivate_0_1_Thunk() {
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_file_ref_private_thunk;
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace thunk
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ppapi
235