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

Side by Side Diff: src/shared/ppapi_proxy/browser_ppb_url_loader_rpc_server.cc

Issue 6177007: ppapi_proxy: Support loading and reading urls. Proxy URLLoader.... (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: '' Created 9 years, 11 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 2011 The Native Client Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can
3 // be found in the LICENSE file.
4 //
5 // SRPC-abstraction wrappers around PPB_URLLoader functions.
6
7 #include <stdio.h>
8 #include <string.h>
9
10 #include "native_client/src/include/nacl_macros.h"
11 #include "native_client/src/include/portability.h"
12 #include "native_client/src/shared/ppapi_proxy/browser_callback.h"
13 #include "native_client/src/shared/ppapi_proxy/browser_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_errors.h"
17 #include "ppapi/c/ppb_url_loader.h"
18 #include "srpcgen/ppb_rpc.h"
19
20 using ppapi_proxy::PPBURLLoaderInterface;
21 using ppapi_proxy::DebugPrintf;
22 using ppapi_proxy::MakeRemoteCompletionCallback;
23 using ppapi_proxy::DeleteRemoteCallbackInfo;
24
25 void PpbURLLoaderRpcServer::PPB_URLLoader_Create(
26 NaClSrpcRpc* rpc,
27 NaClSrpcClosure* done,
28 // inputsles
29 PP_Instance instance,
30 // outputs
31 PP_Resource* resource) {
32 NaClSrpcClosureRunner runner(done);
33 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
34
35 *resource = PPBURLLoaderInterface()->Create(instance);
36 DebugPrintf("PPB_URLLoader::Create: resource=%"NACL_PRIx64"\n", *resource);
37
38 rpc->result = NACL_SRPC_RESULT_OK;
39 }
40
41 void PpbURLLoaderRpcServer::PPB_URLLoader_IsURLLoader(
42 NaClSrpcRpc* rpc,
43 NaClSrpcClosure* done,
44 // inputs
45 PP_Resource resource,
46 // outputs
47 int32_t* success) {
48 NaClSrpcClosureRunner runner(done);
49 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
50
51 PP_Bool pp_success = PPBURLLoaderInterface()->IsURLLoader(resource);
52 DebugPrintf("PPB_URLLoader::IsURLLoader: pp_success=%d\n", pp_success);
53
54 *success = (pp_success == PP_TRUE);
55 rpc->result = NACL_SRPC_RESULT_OK;
56 }
57
58 void PpbURLLoaderRpcServer::PPB_URLLoader_Open(
59 NaClSrpcRpc* rpc,
60 NaClSrpcClosure* done,
61 // inputs
62 PP_Resource loader,
63 PP_Resource request,
64 int32_t callback_id,
65 // outputs
66 int32_t* pp_error) {
67 NaClSrpcClosureRunner runner(done);
68 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
69
70 PP_CompletionCallback remote_callback =
71 MakeRemoteCompletionCallback(rpc->channel, callback_id);
72 if (remote_callback.func == NULL)
73 return;
74
75 *pp_error = PPBURLLoaderInterface()->Open(loader, request, remote_callback);
76 DebugPrintf("PPB_URLLoader::Open: pp_error=%"NACL_PRId32"\n", *pp_error);
77
78 if (*pp_error != PP_ERROR_WOULDBLOCK) // Async error. No callback scheduled.
79 DeleteRemoteCallbackInfo(remote_callback);
80 rpc->result = NACL_SRPC_RESULT_OK;
81 }
82
83 void PpbURLLoaderRpcServer::PPB_URLLoader_FollowRedirect(
84 NaClSrpcRpc* rpc,
85 NaClSrpcClosure* done,
86 // inputs
87 PP_Resource loader,
88 int32_t callback_id,
89 // outputs
90 int32_t* pp_error) {
91 NACL_UNTESTED();
92 NaClSrpcClosureRunner runner(done);
93 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
94
95 PP_CompletionCallback remote_callback =
96 MakeRemoteCompletionCallback(rpc->channel, callback_id);
97 if (remote_callback.func == NULL)
98 return;
99
100 *pp_error = PPBURLLoaderInterface()->FollowRedirect(loader, remote_callback);
101 DebugPrintf("PPB_URLLoader::FollowRedirect: pp_error=%"NACL_PRId32"\n",
102 *pp_error);
103 if (*pp_error != PP_ERROR_WOULDBLOCK) // Async error. No callback scheduled.
104 DeleteRemoteCallbackInfo(remote_callback);
105
106 rpc->result = NACL_SRPC_RESULT_OK;
107 }
108
109 void PpbURLLoaderRpcServer::PPB_URLLoader_GetUploadProgress(
110 NaClSrpcRpc* rpc,
111 NaClSrpcClosure* done,
112 // inputs
113 PP_Resource loader,
114 // outputs
115 int64_t* bytes_sent,
116 int64_t* total_bytes_to_be_sent,
117 int32_t* success) {
118 NACL_UNTESTED();
119 NaClSrpcClosureRunner runner(done);
120 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
121
122 PP_Bool pp_success = PPBURLLoaderInterface()->GetUploadProgress(
123 loader, bytes_sent, total_bytes_to_be_sent);
124 DebugPrintf("PPB_URLLoader::GetUploadProgress: pp_success=%d\n", pp_success);
125
126 *success = (pp_success == PP_TRUE);
127 rpc->result = NACL_SRPC_RESULT_OK;
128 }
129
130 void PpbURLLoaderRpcServer::PPB_URLLoader_GetDownloadProgress(
131 NaClSrpcRpc* rpc,
132 NaClSrpcClosure* done,
133 // inputs
134 PP_Resource loader,
135 // outputs
136 int64_t* bytes_received,
137 int64_t* total_bytes_to_be_received,
138 int32_t* success) {
139 NACL_UNTESTED();
140 NaClSrpcClosureRunner runner(done);
141 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
142
143 PP_Bool pp_success = PPBURLLoaderInterface()->GetDownloadProgress(
144 loader, bytes_received, total_bytes_to_be_received);
145 DebugPrintf("PPB_URLLoader::GetDownloadProgress: pp_success=%d\n",
146 pp_success);
147
148 *success = (pp_success == PP_TRUE);
149 rpc->result = NACL_SRPC_RESULT_OK;
150 }
151
152 void PpbURLLoaderRpcServer::PPB_URLLoader_GetResponseInfo(
153 NaClSrpcRpc* rpc,
154 NaClSrpcClosure* done,
155 // inputs
156 PP_Resource loader,
157 // outputs
158 PP_Resource* response) {
159 NaClSrpcClosureRunner runner(done);
160 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
161
162 *response = PPBURLLoaderInterface()->GetResponseInfo(loader);
163 DebugPrintf("PPB_URLLoader::GetResponseInfo: response=%"NACL_PRIx64"\n",
164 *response);
165
166 rpc->result = NACL_SRPC_RESULT_OK;
167 }
168
169 void PpbURLLoaderRpcServer::PPB_URLLoader_ReadResponseBody(
170 NaClSrpcRpc* rpc,
171 NaClSrpcClosure* done,
172 // inputs
173 PP_Resource loader,
174 int32_t bytes_to_read,
175 int32_t callback_id,
176 // outputs
177 nacl_abi_size_t* buffer_size, char* buffer,
178 int32_t* pp_error_or_bytes) {
179 NaClSrpcClosureRunner runner(done);
180 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
181
182 // |buffer| is allocated by the rpc server and will be freed after this
183 // function returns. Hence we must provide our own byte storage for
184 // a non-blocking call and tie it to the callback.
185 char* callback_buffer = NULL;
186 PP_CompletionCallback remote_callback = MakeRemoteCompletionCallback(
187 rpc->channel, callback_id, bytes_to_read, &callback_buffer);
188 if (remote_callback.func == NULL)
189 return;
190
191 *pp_error_or_bytes = PPBURLLoaderInterface()->ReadResponseBody(
192 loader, callback_buffer, bytes_to_read, remote_callback);
193 DebugPrintf("PPB_URLLoader::ReadResponseBody: pp_error_or_bytes=%"
194 NACL_PRId32"\n", *pp_error_or_bytes);
195
196 if (*pp_error_or_bytes > 0) { // Bytes read into |callback_buffer|.
197 // No callback scheduled.
198 *buffer_size = static_cast<nacl_abi_size_t>(*pp_error_or_bytes);
199 memcpy(buffer, callback_buffer, *buffer_size);
200 DeleteRemoteCallbackInfo(remote_callback);
201 } else if (*pp_error_or_bytes != PP_ERROR_WOULDBLOCK) { // Async error.
202 // No callback scheduled.
203 *buffer_size = 0;
204 DeleteRemoteCallbackInfo(remote_callback);
205 } else {
206 // Callback scheduled.
207 *buffer_size = 0;
208 }
209
210 rpc->result = NACL_SRPC_RESULT_OK;
211 }
212
213 void PpbURLLoaderRpcServer::PPB_URLLoader_FinishStreamingToFile(
214 NaClSrpcRpc* rpc,
215 NaClSrpcClosure* done,
216 // inputs
217 PP_Resource loader,
218 int32_t callback_id,
219 // outputs
220 int32_t* pp_error) {
221 NaClSrpcClosureRunner runner(done);
222 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
223
224 PP_CompletionCallback remote_callback =
225 MakeRemoteCompletionCallback(rpc->channel, callback_id);
226 if (remote_callback.func == NULL)
227 return;
228
229 *pp_error =
230 PPBURLLoaderInterface()->FinishStreamingToFile(loader, remote_callback);
231 DebugPrintf("PPB_URLLoader::FinishStreamingToFile: pp_error=%"NACL_PRId32"\n",
232 *pp_error);
233 if (*pp_error != PP_ERROR_WOULDBLOCK) // Async error. No callback scheduled.
234 DeleteRemoteCallbackInfo(remote_callback);
235 rpc->result = NACL_SRPC_RESULT_OK;
236 }
237
238 void PpbURLLoaderRpcServer::PPB_URLLoader_Close(
239 NaClSrpcRpc* rpc,
240 NaClSrpcClosure* done,
241 // inputs
242 PP_Resource loader) {
243 NACL_UNTESTED();
244 NaClSrpcClosureRunner runner(done);
245 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
246 PPBURLLoaderInterface()->Close(loader);
247 rpc->result = NACL_SRPC_RESULT_OK;
248 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698