ppb_file_io_thunk.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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_completion_callback.h" 6#include "ppapi/c/pp_errors.h" 7#include "ppapi/shared_impl/tracked_callback.h" 8#include "ppapi/thunk/enter.h" 9#include "ppapi/thunk/thunk.h" 10#include "ppapi/thunk/ppb_file_io_api.h" 11#include "ppapi/thunk/resource_creation_api.h" 12 13namespace ppapi { 14namespace thunk { 15 16namespace { 17 18typedef EnterResource<PPB_FileIO_API> EnterFileIO; 19 20PP_Resource Create(PP_Instance instance) { 21 EnterResourceCreation enter(instance); 22 if (enter.failed()) 23 return 0; 24 return enter.functions()->CreateFileIO(instance); 25} 26 27PP_Bool IsFileIO(PP_Resource resource) { 28 EnterFileIO enter(resource, false); 29 return PP_FromBool(enter.succeeded()); 30} 31 32int32_t Open(PP_Resource file_io, 33 PP_Resource file_ref, 34 int32_t open_flags, 35 PP_CompletionCallback callback) { 36 EnterFileIO enter(file_io, callback, true); 37 if (enter.failed()) 38 return enter.retval(); 39 return enter.SetResult(enter.object()->Open(file_ref, open_flags, 40 enter.callback())); 41} 42 43int32_t Query(PP_Resource file_io, 44 PP_FileInfo* info, 45 PP_CompletionCallback callback) { 46 EnterFileIO enter(file_io, callback, true); 47 if (enter.failed()) 48 return enter.retval(); 49 return enter.SetResult(enter.object()->Query(info, enter.callback())); 50} 51 52int32_t Touch(PP_Resource file_io, 53 PP_Time last_access_time, 54 PP_Time last_modified_time, 55 PP_CompletionCallback callback) { 56 EnterFileIO enter(file_io, callback, true); 57 if (enter.failed()) 58 return enter.retval(); 59 return enter.SetResult(enter.object()->Touch( 60 last_access_time, last_modified_time, enter.callback())); 61} 62 63int32_t Read(PP_Resource file_io, 64 int64_t offset, 65 char* buffer, 66 int32_t bytes_to_read, 67 PP_CompletionCallback callback) { 68 EnterFileIO enter(file_io, callback, true); 69 if (enter.failed()) 70 return enter.retval(); 71 return enter.SetResult(enter.object()->Read(offset, buffer, bytes_to_read, 72 enter.callback())); 73} 74 75int32_t Write(PP_Resource file_io, 76 int64_t offset, 77 const char* buffer, 78 int32_t bytes_to_write, 79 PP_CompletionCallback callback) { 80 EnterFileIO enter(file_io, callback, true); 81 if (enter.failed()) 82 return enter.retval(); 83 return enter.SetResult(enter.object()->Write(offset, buffer, bytes_to_write, 84 enter.callback())); 85} 86 87int32_t SetLength(PP_Resource file_io, 88 int64_t length, 89 PP_CompletionCallback callback) { 90 EnterFileIO enter(file_io, callback, true); 91 if (enter.failed()) 92 return enter.retval(); 93 return enter.SetResult(enter.object()->SetLength(length, enter.callback())); 94} 95 96int32_t Flush(PP_Resource file_io, 97 PP_CompletionCallback callback) { 98 EnterFileIO enter(file_io, callback, true); 99 if (enter.failed()) 100 return enter.retval(); 101 return enter.SetResult(enter.object()->Flush(enter.callback())); 102} 103 104void Close(PP_Resource file_io) { 105 EnterFileIO enter(file_io, true); 106 if (enter.succeeded()) 107 enter.object()->Close(); 108} 109 110const PPB_FileIO g_ppb_file_io_thunk = { 111 &Create, 112 &IsFileIO, 113 &Open, 114 &Query, 115 &Touch, 116 &Read, 117 &Write, 118 &SetLength, 119 &Flush, 120 &Close 121}; 122 123} // namespace 124 125const PPB_FileIO_1_0* GetPPB_FileIO_1_0_Thunk() { 126 return &g_ppb_file_io_thunk; 127} 128 129} // namespace thunk 130} // namespace ppapi 131