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.
4
5 #include "ppapi/c/pp_errors.h"
6 #include "ppapi/c/private/ppb_flash_file.h"
7 #include "ppapi/thunk/enter.h"
8 #include "ppapi/thunk/ppb_file_ref_api.h"
9 #include "ppapi/thunk/ppb_flash_file_api.h"
10 #include "ppapi/thunk/thunk.h"
11
12 namespace ppapi {
13 namespace thunk {
14
15 namespace {
16
17 // Returns 0 on failure.
GetInstanceFromFileRef(PP_Resource file_ref)18 PP_Instance GetInstanceFromFileRef(PP_Resource file_ref) {
19 thunk::EnterResource<thunk::PPB_FileRef_API> enter(file_ref, true);
20 if (enter.failed())
21 return 0;
22 return enter.resource()->pp_instance();
23 }
24
OpenFile(PP_Resource file_ref_id,int32_t mode,PP_FileHandle * file)25 int32_t OpenFile(PP_Resource file_ref_id, int32_t mode, PP_FileHandle* file) {
26 // TODO(brettw): this function should take an instance.
27 // To work around this, use the PP_Instance from the resource.
28 PP_Instance instance = GetInstanceFromFileRef(file_ref_id);
29 EnterInstanceAPI<PPB_Flash_File_API> enter(instance);
30 if (enter.failed())
31 return PP_ERROR_BADARGUMENT;
32 return enter.functions()->OpenFileRef(instance, file_ref_id, mode, file);
33 }
34
QueryFile(PP_Resource file_ref_id,struct PP_FileInfo * info)35 int32_t QueryFile(PP_Resource file_ref_id, struct PP_FileInfo* info) {
36 // TODO(brettw): this function should take an instance.
37 // To work around this, use the PP_Instance from the resource.
38 PP_Instance instance = GetInstanceFromFileRef(file_ref_id);
39 EnterInstanceAPI<PPB_Flash_File_API> enter(instance);
40 if (enter.failed())
41 return PP_ERROR_BADARGUMENT;
42 return enter.functions()->QueryFileRef(instance, file_ref_id, info);
43 }
44
45 const PPB_Flash_File_FileRef g_ppb_flash_file_fileref_thunk = {
46 &OpenFile,
47 &QueryFile
48 };
49
50 } // namespace
51
GetPPB_Flash_File_FileRef_Thunk()52 const PPB_Flash_File_FileRef* GetPPB_Flash_File_FileRef_Thunk() {
53 return &g_ppb_flash_file_fileref_thunk;
54 }
55
56 } // namespace thunk
57 } // namespace ppapi
58