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
12namespace ppapi {
13namespace thunk {
14
15namespace {
16
17// Returns 0 on failure.
18PP_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
25int32_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
35int32_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
45const PPB_Flash_File_FileRef g_ppb_flash_file_fileref_thunk = {
46  &OpenFile,
47  &QueryFile
48};
49
50}  // namespace
51
52const 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