Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_file_io.cc

Issue 7740013: Cloning a bunch of stuff from the native_client repository at r6528 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Native Client 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 "native_client/src/shared/ppapi_proxy/plugin_ppb_file_io.h"
6
7 #include <string.h>
8 #include <cmath>
9
10 #include "native_client/src/include/nacl_scoped_ptr.h"
11 #include "native_client/src/include/portability.h"
12 #include "native_client/src/shared/ppapi_proxy/plugin_callback.h"
13 #include "native_client/src/shared/ppapi_proxy/plugin_globals.h"
14 #include "native_client/src/shared/ppapi_proxy/utility.h"
15 #include "ppapi/c/pp_completion_callback.h"
16 #include "ppapi/c/pp_file_info.h"
17 #include "ppapi/c/pp_errors.h"
18 #include "ppapi/c/ppb_file_io.h"
19 #include "srpcgen/ppb_rpc.h"
20
21 namespace ppapi_proxy {
22
23 namespace {
24
25 PP_Resource Create(PP_Instance instance) {
26 DebugPrintf("PPB_FileIO::Create: instance=%"NACL_PRIu32"\n", instance);
27 PP_Resource resource = kInvalidResourceId;
28 NaClSrpcError srpc_result =
29 PpbFileIORpcClient::PPB_FileIO_Create(
30 GetMainSrpcChannel(),
31 instance,
32 &resource);
33
34 DebugPrintf("PPB_FileIO::Create: %s\n", NaClSrpcErrorString(srpc_result));
35
36 if (srpc_result == NACL_SRPC_RESULT_OK)
37 return resource;
38 return kInvalidResourceId;
39 }
40
41 PP_Bool IsFileIO(PP_Resource resource) {
42 DebugPrintf("PPB_FileIO::IsFileIO: resource=%"NACL_PRIu32"\n", resource);
43
44 int32_t is_fileio = 0;
45 NaClSrpcError srpc_result =
46 PpbFileIORpcClient::PPB_FileIO_IsFileIO(
47 GetMainSrpcChannel(),
48 resource,
49 &is_fileio);
50
51 DebugPrintf("PPB_FileIO::IsFileIO: %s\n", NaClSrpcErrorString(srpc_result));
52
53 if (srpc_result == NACL_SRPC_RESULT_OK && is_fileio)
54 return PP_TRUE;
55 return PP_FALSE;
56 }
57
58 int32_t Open(PP_Resource file_io,
59 PP_Resource file_ref,
60 int32_t open_flags,
61 struct PP_CompletionCallback callback) {
62 DebugPrintf("PPB_FileIO::Open: file_io=%"NACL_PRIu32", "
63 "file_ref=%"NACL_PRIu32", open_flags=%"NACL_PRId32"\n", file_io,
64 file_ref, open_flags);
65
66 int32_t callback_id =
67 CompletionCallbackTable::Get()->AddCallback(callback);
68 if (callback_id == 0) // Just like Chrome, for now disallow blocking calls.
69 return PP_ERROR_BADARGUMENT;
70
71 int32_t pp_error;
72 NaClSrpcError srpc_result =
73 PpbFileIORpcClient::PPB_FileIO_Open(
74 GetMainSrpcChannel(),
75 file_io,
76 file_ref,
77 open_flags,
78 callback_id,
79 &pp_error);
80
81 DebugPrintf("PPB_FileIO::Open: %s\n", NaClSrpcErrorString(srpc_result));
82
83 if (srpc_result != NACL_SRPC_RESULT_OK)
84 pp_error = PP_ERROR_FAILED;
85 return MayForceCallback(callback, pp_error);
86 }
87
88 int32_t Query(PP_Resource file_io,
89 PP_FileInfo* info,
90 struct PP_CompletionCallback callback) {
91 DebugPrintf("PPB_FileIO::Query: file_io=%"NACL_PRIu32"\n", file_io);
92 if (callback.func == 0) // Just like Chrome, for now disallow blocking calls.
93 return PP_ERROR_BADARGUMENT;
94
95 int32_t callback_id = CompletionCallbackTable::Get()->AddCallback(
96 callback, reinterpret_cast<char*>(info));
97
98 nacl_abi_size_t info_size = 0;
99 int32_t pp_error = PP_ERROR_FAILED;
100 NaClSrpcError srpc_result =
101 PpbFileIORpcClient::PPB_FileIO_Query(
102 GetMainSrpcChannel(),
103 file_io,
104 sizeof(PP_FileInfo),
105 callback_id,
106 &info_size,
107 reinterpret_cast<char*>(info),
108 &pp_error);
109
110 DebugPrintf("PPB_FileIO::Query: %s\n", NaClSrpcErrorString(srpc_result));
111
112 if (srpc_result != NACL_SRPC_RESULT_OK)
113 pp_error = PP_ERROR_FAILED;
114 return MayForceCallback(callback, pp_error);
115 }
116
117 int32_t Touch(PP_Resource file_io,
118 PP_Time last_access_time,
119 PP_Time last_modified_time,
120 struct PP_CompletionCallback callback) {
121 DebugPrintf("PPB_FileIO::Touch: file_io=%"NACL_PRIu32", "
122 "last_access_time=%ls, last_modified_time=%lf\n", file_io,
123 last_access_time, last_modified_time);
124
125 if (std::isnan(last_access_time) ||
126 std::isnan(last_modified_time)) {
127 return PP_ERROR_BADARGUMENT;
128 }
129
130 int32_t callback_id =
131 CompletionCallbackTable::Get()->AddCallback(callback);
132 if (callback_id == 0) // Just like Chrome, for now disallow blocking calls.
133 return PP_ERROR_BADARGUMENT;
134
135
136 int32_t pp_error = PP_ERROR_FAILED;
137 NaClSrpcError srpc_result = PpbFileIORpcClient::PPB_FileIO_Touch(
138 GetMainSrpcChannel(),
139 file_io,
140 last_access_time,
141 last_modified_time,
142 callback_id,
143 &pp_error);
144
145 DebugPrintf("PPB_FileIO::Touch: %s\n", NaClSrpcErrorString(srpc_result));
146
147 if (srpc_result != NACL_SRPC_RESULT_OK)
148 pp_error = PP_ERROR_FAILED;
149 return MayForceCallback(callback, pp_error);
150 }
151
152 int32_t Read(PP_Resource file_io,
153 int64_t offset,
154 char* buffer,
155 int32_t bytes_to_read,
156 struct PP_CompletionCallback callback) {
157 DebugPrintf("PPB_FileIO::Read: file_io=%"NACL_PRIu32", "
158 "offset=%"NACL_PRId64", bytes_to_read=%"NACL_PRId32"\n", file_io,
159 offset, bytes_to_read);
160
161 if (bytes_to_read < 0)
162 bytes_to_read = 0;
163 nacl_abi_size_t buffer_size = bytes_to_read;
164
165 int32_t callback_id =
166 CompletionCallbackTable::Get()->AddCallback(callback, buffer);
167 if (callback_id == 0) // Just like Chrome, for now disallow blocking calls.
168 return PP_ERROR_BADARGUMENT;
169
170 int32_t pp_error_or_bytes;
171 NaClSrpcError srpc_result =
172 PpbFileIORpcClient::PPB_FileIO_Read(
173 GetMainSrpcChannel(),
174 file_io,
175 offset,
176 bytes_to_read,
177 callback_id,
178 &buffer_size,
179 buffer,
180 &pp_error_or_bytes);
181
182 DebugPrintf("PPB_FileIO::Read: %s\n", NaClSrpcErrorString(srpc_result));
183
184 if (srpc_result != NACL_SRPC_RESULT_OK)
185 pp_error_or_bytes = PP_ERROR_FAILED;
186 return MayForceCallback(callback, pp_error_or_bytes);
187 }
188
189 int32_t Write(PP_Resource file_io,
190 int64_t offset,
191 const char* buffer,
192 int32_t bytes_to_write,
193 struct PP_CompletionCallback callback) {
194 DebugPrintf("PPB_FileIO::Write: file_io=%"NACL_PRIu32", offset="
195 "%"NACL_PRId64", bytes_to_write=%"NACL_PRId32"\n", file_io,
196 offset, bytes_to_write);
197
198 if (bytes_to_write < 0)
199 bytes_to_write = 0;
200 nacl_abi_size_t buffer_size = static_cast<nacl_abi_size_t>(bytes_to_write);
201
202 int32_t callback_id =
203 CompletionCallbackTable::Get()->AddCallback(callback);
204 if (callback_id == 0) // Just like Chrome, for now disallow blocking calls.
205 return PP_ERROR_BADARGUMENT;
206
207 int32_t pp_error_or_bytes = PP_ERROR_FAILED;
208 NaClSrpcError srpc_result = PpbFileIORpcClient::PPB_FileIO_Write(
209 GetMainSrpcChannel(),
210 file_io,
211 offset,
212 buffer_size,
213 const_cast<char*>(buffer),
214 bytes_to_write,
215 callback_id,
216 &pp_error_or_bytes);
217
218 DebugPrintf("PPB_FileIO::Write: %s\n", NaClSrpcErrorString(srpc_result));
219
220 if (srpc_result != NACL_SRPC_RESULT_OK)
221 pp_error_or_bytes = PP_ERROR_FAILED;
222 return MayForceCallback(callback, pp_error_or_bytes);
223 }
224
225 int32_t SetLength(PP_Resource file_io,
226 int64_t length,
227 struct PP_CompletionCallback callback) {
228 DebugPrintf("PPB_FileIO::SetLength: file_io=%"NACL_PRIu32", length="
229 "%"NACL_PRId64"\n", file_io, length);
230
231 int32_t callback_id =
232 CompletionCallbackTable::Get()->AddCallback(callback);
233 if (callback_id == 0) // Just like Chrome, for now disallow blocking calls.
234 return PP_ERROR_BADARGUMENT;
235
236 int32_t pp_error = PP_ERROR_FAILED;
237 NaClSrpcError srpc_result = PpbFileIORpcClient::PPB_FileIO_SetLength(
238 GetMainSrpcChannel(),
239 file_io,
240 length,
241 callback_id,
242 &pp_error);
243
244 DebugPrintf("PPB_FileIO::SetLength: %s\n",
245 NaClSrpcErrorString(srpc_result));
246
247 if (srpc_result != NACL_SRPC_RESULT_OK)
248 pp_error = PP_ERROR_FAILED;
249 return MayForceCallback(callback, pp_error);
250 }
251
252 int32_t Flush(PP_Resource file_io,
253 struct PP_CompletionCallback callback) {
254 DebugPrintf("PPB_FileIO::Flush: file_io=%"NACL_PRIu32"\n", file_io);
255
256 int32_t callback_id =
257 CompletionCallbackTable::Get()->AddCallback(callback);
258 if (callback_id == 0) // Just like Chrome, for now disallow blocking calls.
259 return PP_ERROR_BADARGUMENT;
260
261 int32_t pp_error = PP_ERROR_FAILED;
262 NaClSrpcError srpc_result = PpbFileIORpcClient::PPB_FileIO_Flush(
263 GetMainSrpcChannel(),
264 file_io,
265 callback_id,
266 &pp_error);
267
268 DebugPrintf("PPB_FileIO::Flush: %s\n", NaClSrpcErrorString(srpc_result));
269
270 if (srpc_result != NACL_SRPC_RESULT_OK)
271 pp_error = PP_ERROR_FAILED;
272 return MayForceCallback(callback, pp_error);
273 }
274
275 void Close(PP_Resource file_io) {
276 DebugPrintf("PPB_FileIO::Close: file_io=%"NACL_PRIu32"\n", file_io);
277
278 NaClSrpcError srpc_result = PpbFileIORpcClient::PPB_FileIO_Close(
279 GetMainSrpcChannel(),
280 file_io);
281
282 DebugPrintf("PPB_FileIO::Close: %s\n", NaClSrpcErrorString(srpc_result));
283 }
284
285 } // namespace
286
287 const PPB_FileIO* PluginFileIO::GetInterface() {
288 static const PPB_FileIO file_io_interface = {
289 Create,
290 IsFileIO,
291 Open,
292 Query,
293 Touch,
294 Read,
295 Write,
296 SetLength,
297 Flush,
298 Close
299 };
300 return &file_io_interface;
301 }
302
303 } // namespace ppapi_proxy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698