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
3 // found in the LICENSE file.
5 #include "ppapi/c/pp_file_info.h"
6 #include "ppapi/c/ppb_file_ref.h"
7 #include "ppapi/c/pp_completion_callback.h"
8 #include "ppapi/c/pp_errors.h"
9 #include "ppapi/c/private/ppb_file_ref_private.h"
10 #include "ppapi/shared_impl/tracked_callback.h"
11 #include "ppapi/thunk/enter.h"
12 #include "ppapi/thunk/thunk.h"
13 #include "ppapi/thunk/ppb_file_ref_api.h"
14 #include "ppapi/thunk/resource_creation_api.h"
21 typedef EnterResource
<PPB_FileRef_API
> EnterFileRef
;
23 PP_Resource
Create(PP_Resource file_system
, const char* path
) {
25 PpapiGlobals::Get()->GetResourceTracker()->GetResource(file_system
);
28 EnterResourceCreation
enter(object
->pp_instance());
31 return enter
.functions()->CreateFileRef(file_system
, path
);
34 PP_Bool
IsFileRef(PP_Resource resource
) {
35 EnterFileRef
enter(resource
, false);
36 return PP_FromBool(enter
.succeeded());
39 PP_FileSystemType
GetFileSystemType(PP_Resource file_ref
) {
40 EnterFileRef
enter(file_ref
, true);
42 return PP_FILESYSTEMTYPE_INVALID
;
43 return enter
.object()->GetFileSystemType();
46 PP_Var
GetName(PP_Resource file_ref
) {
47 EnterFileRef
enter(file_ref
, true);
49 return PP_MakeUndefined();
50 return enter
.object()->GetName();
53 PP_Var
GetPath(PP_Resource file_ref
) {
54 EnterFileRef
enter(file_ref
, true);
56 return PP_MakeUndefined();
57 return enter
.object()->GetPath();
60 PP_Resource
GetParent(PP_Resource file_ref
) {
61 EnterFileRef
enter(file_ref
, true);
64 return enter
.object()->GetParent();
67 int32_t MakeDirectory(PP_Resource directory_ref
,
68 PP_Bool make_ancestors
,
69 PP_CompletionCallback callback
) {
70 EnterFileRef
enter(directory_ref
, callback
, true);
72 return enter
.retval();
73 return enter
.SetResult(enter
.object()->MakeDirectory(make_ancestors
,
77 int32_t Touch(PP_Resource file_ref
,
78 PP_Time last_access_time
,
79 PP_Time last_modified_time
,
80 PP_CompletionCallback callback
) {
81 EnterFileRef
enter(file_ref
, callback
, true);
83 return enter
.retval();
84 return enter
.SetResult(enter
.object()->Touch(
85 last_access_time
, last_modified_time
, enter
.callback()));
88 int32_t Delete(PP_Resource file_ref
,
89 PP_CompletionCallback callback
) {
90 EnterFileRef
enter(file_ref
, callback
, true);
92 return enter
.retval();
93 return enter
.SetResult(enter
.object()->Delete(enter
.callback()));
96 int32_t Rename(PP_Resource file_ref
,
97 PP_Resource new_file_ref
,
98 PP_CompletionCallback callback
) {
99 EnterFileRef
enter(file_ref
, callback
, true);
101 return enter
.retval();
102 return enter
.SetResult(enter
.object()->Rename(new_file_ref
,
106 PP_Var
GetAbsolutePath(PP_Resource file_ref
) {
107 EnterFileRef
enter(file_ref
, true);
109 return PP_MakeUndefined();
110 return enter
.object()->GetAbsolutePath();
113 const PPB_FileRef g_ppb_file_ref_thunk
= {
126 const PPB_FileRefPrivate g_ppb_file_ref_private_thunk
= {
132 const PPB_FileRef_1_0
* GetPPB_FileRef_1_0_Thunk() {
133 return &g_ppb_file_ref_thunk
;
136 const PPB_FileRefPrivate_0_1
* GetPPB_FileRefPrivate_0_1_Thunk() {
137 return &g_ppb_file_ref_private_thunk
;