1 // Copyright (c) 2011 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/thunk/common.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 PP_Resource
Create(PP_Resource file_system
, const char* path
) {
22 EnterFunctionGivenResource
<ResourceCreationAPI
> enter(file_system
, true);
25 return enter
.functions()->CreateFileRef(file_system
, path
);
28 PP_Bool
IsFileRef(PP_Resource resource
) {
29 EnterResource
<PPB_FileRef_API
> enter(resource
, false);
30 return PP_FromBool(enter
.succeeded());
33 PP_FileSystemType
GetFileSystemType(PP_Resource file_ref
) {
34 EnterResource
<PPB_FileRef_API
> enter(file_ref
, true);
36 return PP_FILESYSTEMTYPE_INVALID
;
37 return enter
.object()->GetFileSystemType();
40 PP_Var
GetName(PP_Resource file_ref
) {
41 EnterResource
<PPB_FileRef_API
> enter(file_ref
, true);
43 return PP_MakeUndefined();
44 return enter
.object()->GetName();
47 PP_Var
GetPath(PP_Resource file_ref
) {
48 EnterResource
<PPB_FileRef_API
> enter(file_ref
, true);
50 return PP_MakeUndefined();
51 return enter
.object()->GetPath();
54 PP_Resource
GetParent(PP_Resource file_ref
) {
55 EnterResource
<PPB_FileRef_API
> enter(file_ref
, true);
57 return PP_ERROR_BADRESOURCE
;
58 return enter
.object()->GetParent();
61 int32_t MakeDirectory(PP_Resource directory_ref
,
62 PP_Bool make_ancestors
,
63 PP_CompletionCallback callback
) {
64 EnterResource
<PPB_FileRef_API
> enter(directory_ref
, true);
66 return MayForceCallback(callback
, PP_ERROR_BADRESOURCE
);
67 int32_t result
= enter
.object()->MakeDirectory(make_ancestors
, callback
);
68 return MayForceCallback(callback
, result
);
71 int32_t Touch(PP_Resource file_ref
,
72 PP_Time last_access_time
,
73 PP_Time last_modified_time
,
74 PP_CompletionCallback callback
) {
75 EnterResource
<PPB_FileRef_API
> enter(file_ref
, true);
77 return MayForceCallback(callback
, PP_ERROR_BADRESOURCE
);
78 int32_t result
= enter
.object()->Touch(last_access_time
, last_modified_time
,
80 return MayForceCallback(callback
, result
);
83 int32_t Delete(PP_Resource file_ref
,
84 PP_CompletionCallback callback
) {
85 EnterResource
<PPB_FileRef_API
> enter(file_ref
, true);
87 return MayForceCallback(callback
, PP_ERROR_BADRESOURCE
);
88 int32_t result
= enter
.object()->Delete(callback
);
89 return MayForceCallback(callback
, result
);
92 int32_t Rename(PP_Resource file_ref
,
93 PP_Resource new_file_ref
,
94 PP_CompletionCallback callback
) {
95 EnterResource
<PPB_FileRef_API
> enter(file_ref
, true);
97 return MayForceCallback(callback
, PP_ERROR_BADRESOURCE
);
98 int32_t result
= enter
.object()->Rename(new_file_ref
, callback
);
99 return MayForceCallback(callback
, result
);
102 PP_Var
GetAbsolutePath(PP_Resource file_ref
) {
103 EnterResource
<PPB_FileRef_API
> enter(file_ref
, true);
105 return PP_MakeUndefined();
106 return enter
.object()->GetAbsolutePath();
109 const PPB_FileRef g_ppb_file_ref_thunk
= {
122 const PPB_FileRefPrivate g_ppb_file_ref_private_thunk
= {
128 const PPB_FileRef
* GetPPB_FileRef_Thunk() {
129 return &g_ppb_file_ref_thunk
;
132 const PPB_FileRefPrivate
* GetPPB_FileRefPrivate_Thunk() {
133 return &g_ppb_file_ref_private_thunk
;