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

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

Issue 9724007: WebSocket Pepper API: fix data corruption at ReceiveMessage in NaCl (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rebase Created 8 years, 9 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
« no previous file with comments | « chrome/test/ui/ppapi_uitest.cc ('k') | ppapi/tests/test_websocket.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // SRPC-abstraction wrappers around PPB_WebSocket functions. 5 // SRPC-abstraction wrappers around PPB_WebSocket functions.
6 6
7 #include "native_client/src/include/nacl_scoped_ptr.h" 7 #include "native_client/src/include/nacl_scoped_ptr.h"
8 #include "native_client/src/shared/ppapi_proxy/browser_callback.h" 8 #include "native_client/src/shared/ppapi_proxy/browser_callback.h"
9 #include "native_client/src/shared/ppapi_proxy/browser_globals.h" 9 #include "native_client/src/shared/ppapi_proxy/browser_globals.h"
10 #include "native_client/src/shared/ppapi_proxy/object_serialize.h" 10 #include "native_client/src/shared/ppapi_proxy/object_serialize.h"
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 // outputs 137 // outputs
138 int32_t* pp_error) { 138 int32_t* pp_error) {
139 NaClSrpcClosureRunner runner(done); 139 NaClSrpcClosureRunner runner(done);
140 rpc->result = NACL_SRPC_RESULT_APP_ERROR; 140 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
141 141
142 PP_Var* callback_var = NULL; 142 PP_Var* callback_var = NULL;
143 PP_CompletionCallback remote_callback = 143 PP_CompletionCallback remote_callback =
144 MakeRemoteCompletionCallback(rpc->channel, callback_id, &callback_var); 144 MakeRemoteCompletionCallback(rpc->channel, callback_id, &callback_var);
145 if (NULL == remote_callback.func) 145 if (NULL == remote_callback.func)
146 return; 146 return;
147 // TODO(toyoshim): Removing optional flag is easy way to expect asynchronous
148 // completion on the following PPBWebSocketInterface()->ReceiveMessage(). But
149 // from the viewpoint of performance, we should handle synchronous
150 // completion correctly.
151 remote_callback.flags &= ~PP_COMPLETIONCALLBACK_FLAG_OPTIONAL;
147 152
148 // The callback is always invoked asynchronously for now, so it doesn't care 153 // The callback is always invoked asynchronously for now, so it doesn't care
149 // about re-entrancy. 154 // about re-entrancy.
150 *pp_error = PPBWebSocketInterface()->ReceiveMessage( 155 *pp_error = PPBWebSocketInterface()->ReceiveMessage(
151 ws, callback_var, remote_callback); 156 ws, callback_var, remote_callback);
152 DebugPrintf("PPB_WebSocket::ReceiveMessage: pp_error=%"NACL_PRId32"\n", 157 DebugPrintf("PPB_WebSocket::ReceiveMessage: pp_error=%"NACL_PRId32"\n",
153 *pp_error); 158 *pp_error);
154 159 CHECK(*pp_error != PP_OK); // Should not complete synchronously
155 if (*pp_error != PP_OK_COMPLETIONPENDING) 160 if (*pp_error != PP_OK_COMPLETIONPENDING)
156 DeleteRemoteCallbackInfo(remote_callback); 161 DeleteRemoteCallbackInfo(remote_callback);
157 rpc->result = NACL_SRPC_RESULT_OK; 162 rpc->result = NACL_SRPC_RESULT_OK;
158 } 163 }
159 164
160 void PpbWebSocketRpcServer::PPB_WebSocket_SendMessage( 165 void PpbWebSocketRpcServer::PPB_WebSocket_SendMessage(
161 NaClSrpcRpc* rpc, 166 NaClSrpcRpc* rpc,
162 NaClSrpcClosure* done, 167 NaClSrpcClosure* done,
163 // inputs 168 // inputs
164 PP_Resource ws, 169 PP_Resource ws,
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 char* url_bytes) { 319 char* url_bytes) {
315 NaClSrpcClosureRunner runner(done); 320 NaClSrpcClosureRunner runner(done);
316 rpc->result = NACL_SRPC_RESULT_APP_ERROR; 321 rpc->result = NACL_SRPC_RESULT_APP_ERROR;
317 322
318 PP_Var url = PPBWebSocketInterface()->GetURL(ws); 323 PP_Var url = PPBWebSocketInterface()->GetURL(ws);
319 DebugPrintf("PPB_WebSocket::GetURL:: url.type=%d\n", url.type); 324 DebugPrintf("PPB_WebSocket::GetURL:: url.type=%d\n", url.type);
320 325
321 if (SerializeTo(&url, url_bytes, url_size)) 326 if (SerializeTo(&url, url_bytes, url_size))
322 rpc->result = NACL_SRPC_RESULT_OK; 327 rpc->result = NACL_SRPC_RESULT_OK;
323 } 328 }
OLDNEW
« no previous file with comments | « chrome/test/ui/ppapi_uitest.cc ('k') | ppapi/tests/test_websocket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698