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

Side by Side Diff: ppapi/proxy/ppb_flash_tcp_socket_proxy.cc

Issue 7535007: Implement PPB_Flash_TCPSocket.InitiateSSL. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
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
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "ppapi/proxy/ppb_flash_tcp_socket_proxy.h" 5 #include "ppapi/proxy/ppb_flash_tcp_socket_proxy.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <map> 9 #include <map>
10 10
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 PP_CompletionCallback callback) OVERRIDE; 82 PP_CompletionCallback callback) OVERRIDE;
83 virtual int32_t Write(const char* buffer, 83 virtual int32_t Write(const char* buffer,
84 int32_t bytes_to_write, 84 int32_t bytes_to_write,
85 PP_CompletionCallback callback) OVERRIDE; 85 PP_CompletionCallback callback) OVERRIDE;
86 virtual void Disconnect() OVERRIDE; 86 virtual void Disconnect() OVERRIDE;
87 87
88 // Notifications from the proxy. 88 // Notifications from the proxy.
89 void OnConnectCompleted(bool succeeded, 89 void OnConnectCompleted(bool succeeded,
90 const PP_Flash_NetAddress& local_addr, 90 const PP_Flash_NetAddress& local_addr,
91 const PP_Flash_NetAddress& remote_addr); 91 const PP_Flash_NetAddress& remote_addr);
92 void OnInitiateSSLCompleted(bool succeeded);
wtc 2011/08/09 21:21:29 I suggest that you change "InitiateSSL" to "SSLCon
yzshen1 2011/08/09 23:45:29 [I am open to making the change, just to make sure
92 void OnReadCompleted(bool succeeded, const std::string& data); 93 void OnReadCompleted(bool succeeded, const std::string& data);
93 void OnWriteCompleted(bool succeeded, int32_t bytes_written); 94 void OnWriteCompleted(bool succeeded, int32_t bytes_written);
94 95
95 private: 96 private:
96 enum ConnectionState { 97 enum ConnectionState {
97 // Before a connection is successfully established (including a connect 98 // Before a connection is successfully established (including a connect
98 // request is pending or a previous connect request failed). 99 // request is pending or a previous connect request failed).
99 BEFORE_CONNECT, 100 BEFORE_CONNECT,
101 // A connection has been successfully established (including a request of
102 // initiating SSL is pending).
100 CONNECTED, 103 CONNECTED,
104 // An SSL connection has been successfully established.
105 SSL_CONNECTED,
106 // The connection has been ended.
101 DISCONNECTED 107 DISCONNECTED
102 }; 108 };
103 109
110 bool IsConnected() const;
111
104 // Backend for both Connect() and ConnectWithNetAddress(). To keep things 112 // Backend for both Connect() and ConnectWithNetAddress(). To keep things
105 // generic, the message is passed in (on error, it's deleted). 113 // generic, the message is passed in (on error, it's deleted).
106 int32_t ConnectWithMessage(IPC::Message* msg, 114 int32_t ConnectWithMessage(IPC::Message* msg,
107 PP_CompletionCallback callback); 115 PP_CompletionCallback callback);
108 116
109 void PostAbortAndClearIfNecessary(PP_CompletionCallback* callback); 117 void PostAbortAndClearIfNecessary(PP_CompletionCallback* callback);
110 118
111 uint32 socket_id_; 119 uint32 socket_id_;
112 ConnectionState connection_state_; 120 ConnectionState connection_state_;
113 121
114 PP_CompletionCallback connect_callback_; 122 PP_CompletionCallback connect_callback_;
123 PP_CompletionCallback initiate_ssl_callback_;
115 PP_CompletionCallback read_callback_; 124 PP_CompletionCallback read_callback_;
116 PP_CompletionCallback write_callback_; 125 PP_CompletionCallback write_callback_;
117 126
118 char* read_buffer_; 127 char* read_buffer_;
119 int32_t bytes_to_read_; 128 int32_t bytes_to_read_;
120 129
121 PP_Flash_NetAddress local_addr_; 130 PP_Flash_NetAddress local_addr_;
122 PP_Flash_NetAddress remote_addr_; 131 PP_Flash_NetAddress remote_addr_;
123 132
124 DISALLOW_COPY_AND_ASSIGN(FlashTCPSocket); 133 DISALLOW_COPY_AND_ASSIGN(FlashTCPSocket);
125 }; 134 };
126 135
127 FlashTCPSocket::FlashTCPSocket(const HostResource& resource, uint32 socket_id) 136 FlashTCPSocket::FlashTCPSocket(const HostResource& resource, uint32 socket_id)
128 : PluginResource(resource), 137 : PluginResource(resource),
129 socket_id_(socket_id), 138 socket_id_(socket_id),
130 connection_state_(BEFORE_CONNECT), 139 connection_state_(BEFORE_CONNECT),
131 connect_callback_(PP_BlockUntilComplete()), 140 connect_callback_(PP_BlockUntilComplete()),
141 initiate_ssl_callback_(PP_BlockUntilComplete()),
132 read_callback_(PP_BlockUntilComplete()), 142 read_callback_(PP_BlockUntilComplete()),
133 write_callback_(PP_BlockUntilComplete()), 143 write_callback_(PP_BlockUntilComplete()),
134 read_buffer_(NULL), 144 read_buffer_(NULL),
135 bytes_to_read_(-1) { 145 bytes_to_read_(-1) {
136 DCHECK(socket_id != 0); 146 DCHECK(socket_id != 0);
137 147
138 local_addr_.size = 0; 148 local_addr_.size = 0;
139 memset(local_addr_.data, 0, sizeof(local_addr_.data)); 149 memset(local_addr_.data, 0, sizeof(local_addr_.data));
140 remote_addr_.size = 0; 150 remote_addr_.size = 0;
141 memset(remote_addr_.data, 0, sizeof(remote_addr_.data)); 151 memset(remote_addr_.data, 0, sizeof(remote_addr_.data));
(...skipping 29 matching lines...) Expand all
171 if (!addr) 181 if (!addr)
172 return PP_ERROR_BADARGUMENT; 182 return PP_ERROR_BADARGUMENT;
173 183
174 return ConnectWithMessage( 184 return ConnectWithMessage(
175 new PpapiHostMsg_PPBFlashTCPSocket_ConnectWithNetAddress( 185 new PpapiHostMsg_PPBFlashTCPSocket_ConnectWithNetAddress(
176 socket_id_, *addr), 186 socket_id_, *addr),
177 callback); 187 callback);
178 } 188 }
179 189
180 PP_Bool FlashTCPSocket::GetLocalAddress(PP_Flash_NetAddress* local_addr) { 190 PP_Bool FlashTCPSocket::GetLocalAddress(PP_Flash_NetAddress* local_addr) {
181 if (connection_state_ != CONNECTED || !local_addr) 191 if (!IsConnected() || !local_addr)
182 return PP_FALSE; 192 return PP_FALSE;
183 193
184 *local_addr = local_addr_; 194 *local_addr = local_addr_;
185 return PP_TRUE; 195 return PP_TRUE;
186 } 196 }
187 197
188 PP_Bool FlashTCPSocket::GetRemoteAddress(PP_Flash_NetAddress* remote_addr) { 198 PP_Bool FlashTCPSocket::GetRemoteAddress(PP_Flash_NetAddress* remote_addr) {
189 if (connection_state_ != CONNECTED || !remote_addr) 199 if (!IsConnected() || !remote_addr)
190 return PP_FALSE; 200 return PP_FALSE;
191 201
192 *remote_addr = remote_addr_; 202 *remote_addr = remote_addr_;
193 return PP_TRUE; 203 return PP_TRUE;
194 } 204 }
195 205
196 int32_t FlashTCPSocket::InitiateSSL(const char* server_name, 206 int32_t FlashTCPSocket::InitiateSSL(const char* server_name,
197 PP_CompletionCallback callback) { 207 PP_CompletionCallback callback) {
198 // TODO(yzshen): add it. 208 if (!server_name || !callback.func)
199 return PP_ERROR_FAILED; 209 return PP_ERROR_BADARGUMENT;
210
211 if (connection_state_ != CONNECTED)
212 return PP_ERROR_FAILED;
213 if (initiate_ssl_callback_.func || read_callback_.func ||
214 write_callback_.func)
215 return PP_ERROR_INPROGRESS;
216
217 initiate_ssl_callback_ = callback;
218
219 // Send the request, the browser will call us back via InitiateSSLACK.
220 GetDispatcher()->SendToBrowser(
221 new PpapiHostMsg_PPBFlashTCPSocket_InitiateSSL(socket_id_,
222 std::string(server_name)));
223 return PP_OK_COMPLETIONPENDING;
200 } 224 }
201 225
202 int32_t FlashTCPSocket::Read(char* buffer, 226 int32_t FlashTCPSocket::Read(char* buffer,
203 int32_t bytes_to_read, 227 int32_t bytes_to_read,
204 PP_CompletionCallback callback) { 228 PP_CompletionCallback callback) {
205 if (!buffer || bytes_to_read <= 0 || !callback.func) 229 if (!buffer || bytes_to_read <= 0 || !callback.func)
206 return PP_ERROR_BADARGUMENT; 230 return PP_ERROR_BADARGUMENT;
207 231
208 if (connection_state_ != CONNECTED) 232 if (!IsConnected())
209 return PP_ERROR_FAILED; 233 return PP_ERROR_FAILED;
210 if (read_callback_.func) 234 if (read_callback_.func || initiate_ssl_callback_.func)
211 return PP_ERROR_INPROGRESS; 235 return PP_ERROR_INPROGRESS;
212 236
213 read_buffer_ = buffer; 237 read_buffer_ = buffer;
214 bytes_to_read_ = std::min(bytes_to_read, kFlashTCPSocketMaxReadSize); 238 bytes_to_read_ = std::min(bytes_to_read, kFlashTCPSocketMaxReadSize);
215 read_callback_ = callback; 239 read_callback_ = callback;
216 240
217 // Send the request, the browser will call us back via ReadACK. 241 // Send the request, the browser will call us back via ReadACK.
218 GetDispatcher()->SendToBrowser( 242 GetDispatcher()->SendToBrowser(
219 new PpapiHostMsg_PPBFlashTCPSocket_Read(socket_id_, bytes_to_read_)); 243 new PpapiHostMsg_PPBFlashTCPSocket_Read(socket_id_, bytes_to_read_));
220 return PP_OK_COMPLETIONPENDING; 244 return PP_OK_COMPLETIONPENDING;
221 } 245 }
222 246
223 int32_t FlashTCPSocket::Write(const char* buffer, 247 int32_t FlashTCPSocket::Write(const char* buffer,
224 int32_t bytes_to_write, 248 int32_t bytes_to_write,
225 PP_CompletionCallback callback) { 249 PP_CompletionCallback callback) {
226 if (!buffer || bytes_to_write <= 0 || !callback.func) 250 if (!buffer || bytes_to_write <= 0 || !callback.func)
227 return PP_ERROR_BADARGUMENT; 251 return PP_ERROR_BADARGUMENT;
228 252
229 if (connection_state_ != CONNECTED) 253 if (!IsConnected())
230 return PP_ERROR_FAILED; 254 return PP_ERROR_FAILED;
231 if (write_callback_.func) 255 if (write_callback_.func || initiate_ssl_callback_.func)
232 return PP_ERROR_INPROGRESS; 256 return PP_ERROR_INPROGRESS;
233 257
234 if (bytes_to_write > kFlashTCPSocketMaxWriteSize) 258 if (bytes_to_write > kFlashTCPSocketMaxWriteSize)
235 bytes_to_write = kFlashTCPSocketMaxWriteSize; 259 bytes_to_write = kFlashTCPSocketMaxWriteSize;
236 260
237 write_callback_ = callback; 261 write_callback_ = callback;
238 262
239 // Send the request, the browser will call us back via WriteACK. 263 // Send the request, the browser will call us back via WriteACK.
240 GetDispatcher()->SendToBrowser( 264 GetDispatcher()->SendToBrowser(
241 new PpapiHostMsg_PPBFlashTCPSocket_Write( 265 new PpapiHostMsg_PPBFlashTCPSocket_Write(
242 socket_id_, std::string(buffer, bytes_to_write))); 266 socket_id_, std::string(buffer, bytes_to_write)));
243 return PP_OK_COMPLETIONPENDING; 267 return PP_OK_COMPLETIONPENDING;
244 } 268 }
245 269
246 void FlashTCPSocket::Disconnect() { 270 void FlashTCPSocket::Disconnect() {
247 if (connection_state_ == DISCONNECTED) 271 if (connection_state_ == DISCONNECTED)
248 return; 272 return;
249 273
250 connection_state_ = DISCONNECTED; 274 connection_state_ = DISCONNECTED;
251 // After removed from the mapping, this object won't receive any notfications 275 // After removed from the mapping, this object won't receive any notifications
252 // from the proxy. 276 // from the proxy.
253 DCHECK(g_id_to_socket->find(socket_id_) != g_id_to_socket->end()); 277 DCHECK(g_id_to_socket->find(socket_id_) != g_id_to_socket->end());
254 g_id_to_socket->erase(socket_id_); 278 g_id_to_socket->erase(socket_id_);
255 279
256 GetDispatcher()->SendToBrowser( 280 GetDispatcher()->SendToBrowser(
257 new PpapiHostMsg_PPBFlashTCPSocket_Disconnect(socket_id_)); 281 new PpapiHostMsg_PPBFlashTCPSocket_Disconnect(socket_id_));
258 socket_id_ = 0; 282 socket_id_ = 0;
259 283
260 PostAbortAndClearIfNecessary(&connect_callback_); 284 PostAbortAndClearIfNecessary(&connect_callback_);
285 PostAbortAndClearIfNecessary(&initiate_ssl_callback_);
261 PostAbortAndClearIfNecessary(&read_callback_); 286 PostAbortAndClearIfNecessary(&read_callback_);
262 PostAbortAndClearIfNecessary(&write_callback_); 287 PostAbortAndClearIfNecessary(&write_callback_);
263 read_buffer_ = NULL; 288 read_buffer_ = NULL;
264 bytes_to_read_ = -1; 289 bytes_to_read_ = -1;
265 } 290 }
266 291
267 void FlashTCPSocket::OnConnectCompleted( 292 void FlashTCPSocket::OnConnectCompleted(
268 bool succeeded, 293 bool succeeded,
269 const PP_Flash_NetAddress& local_addr, 294 const PP_Flash_NetAddress& local_addr,
270 const PP_Flash_NetAddress& remote_addr) { 295 const PP_Flash_NetAddress& remote_addr) {
271 if (connection_state_ != BEFORE_CONNECT || !connect_callback_.func) { 296 if (connection_state_ != BEFORE_CONNECT || !connect_callback_.func) {
272 NOTREACHED(); 297 NOTREACHED();
273 return; 298 return;
274 } 299 }
275 300
276 if (succeeded) { 301 if (succeeded) {
277 local_addr_ = local_addr; 302 local_addr_ = local_addr;
278 remote_addr_ = remote_addr; 303 remote_addr_ = remote_addr;
279 connection_state_ = CONNECTED; 304 connection_state_ = CONNECTED;
280 } 305 }
281 PP_RunAndClearCompletionCallback(&connect_callback_, 306 PP_RunAndClearCompletionCallback(&connect_callback_,
282 succeeded ? PP_OK : PP_ERROR_FAILED); 307 succeeded ? PP_OK : PP_ERROR_FAILED);
283 } 308 }
284 309
310 void FlashTCPSocket::OnInitiateSSLCompleted(bool succeeded) {
311 if (connection_state_ != CONNECTED || !initiate_ssl_callback_.func) {
312 NOTREACHED();
313 return;
314 }
315
316 if (succeeded) {
317 connection_state_ = SSL_CONNECTED;
318 PP_RunAndClearCompletionCallback(&initiate_ssl_callback_, PP_OK);
319 } else {
320 PP_RunAndClearCompletionCallback(&initiate_ssl_callback_, PP_ERROR_FAILED);
321 Disconnect();
322 }
323 }
324
285 void FlashTCPSocket::OnReadCompleted(bool succeeded, const std::string& data) { 325 void FlashTCPSocket::OnReadCompleted(bool succeeded, const std::string& data) {
286 if (!read_callback_.func || !read_buffer_) { 326 if (!read_callback_.func || !read_buffer_) {
287 NOTREACHED(); 327 NOTREACHED();
288 return; 328 return;
289 } 329 }
290 330
291 if (succeeded) { 331 if (succeeded) {
292 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_); 332 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_);
293 if (!data.empty()) 333 if (!data.empty())
294 memcpy(read_buffer_, data.c_str(), data.size()); 334 memcpy(read_buffer_, data.c_str(), data.size());
(...skipping 11 matching lines...) Expand all
306 if (!write_callback_.func || (succeeded && bytes_written < 0)) { 346 if (!write_callback_.func || (succeeded && bytes_written < 0)) {
307 NOTREACHED(); 347 NOTREACHED();
308 return; 348 return;
309 } 349 }
310 350
311 PP_RunAndClearCompletionCallback( 351 PP_RunAndClearCompletionCallback(
312 &write_callback_, 352 &write_callback_,
313 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); 353 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED));
314 } 354 }
315 355
356 bool FlashTCPSocket::IsConnected() const {
357 return connection_state_ == CONNECTED || connection_state_ == SSL_CONNECTED;
358 }
359
316 int32_t FlashTCPSocket::ConnectWithMessage(IPC::Message* msg, 360 int32_t FlashTCPSocket::ConnectWithMessage(IPC::Message* msg,
317 PP_CompletionCallback callback) { 361 PP_CompletionCallback callback) {
318 scoped_ptr<IPC::Message> msg_deletor(msg); 362 scoped_ptr<IPC::Message> msg_deletor(msg);
319 if (!callback.func) 363 if (!callback.func)
320 return PP_ERROR_BADARGUMENT; 364 return PP_ERROR_BADARGUMENT;
321 if (connection_state_ != BEFORE_CONNECT) 365 if (connection_state_ != BEFORE_CONNECT)
322 return PP_ERROR_FAILED; 366 return PP_ERROR_FAILED;
323 if (connect_callback_.func) 367 if (connect_callback_.func)
324 return PP_ERROR_INPROGRESS; // Can only have one pending request. 368 return PP_ERROR_INPROGRESS; // Can only have one pending request.
325 369
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 421
378 linked_ptr<FlashTCPSocket> object(new FlashTCPSocket( 422 linked_ptr<FlashTCPSocket> object(new FlashTCPSocket(
379 HostResource::MakeInstanceOnly(instance), socket_id)); 423 HostResource::MakeInstanceOnly(instance), socket_id));
380 return PluginResourceTracker::GetInstance()->AddResource(object); 424 return PluginResourceTracker::GetInstance()->AddResource(object);
381 } 425 }
382 426
383 bool PPB_Flash_TCPSocket_Proxy::OnMessageReceived(const IPC::Message& msg) { 427 bool PPB_Flash_TCPSocket_Proxy::OnMessageReceived(const IPC::Message& msg) {
384 bool handled = true; 428 bool handled = true;
385 IPC_BEGIN_MESSAGE_MAP(PPB_Flash_TCPSocket_Proxy, msg) 429 IPC_BEGIN_MESSAGE_MAP(PPB_Flash_TCPSocket_Proxy, msg)
386 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_ConnectACK, OnMsgConnectACK) 430 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_ConnectACK, OnMsgConnectACK)
431 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_InitiateSSLACK,
432 OnMsgInitiateSSLACK)
387 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_ReadACK, OnMsgReadACK) 433 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_ReadACK, OnMsgReadACK)
388 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_WriteACK, OnMsgWriteACK) 434 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_WriteACK, OnMsgWriteACK)
389 IPC_MESSAGE_UNHANDLED(handled = false) 435 IPC_MESSAGE_UNHANDLED(handled = false)
390 IPC_END_MESSAGE_MAP() 436 IPC_END_MESSAGE_MAP()
391 return handled; 437 return handled;
392 } 438 }
393 439
394 void PPB_Flash_TCPSocket_Proxy::OnMsgConnectACK( 440 void PPB_Flash_TCPSocket_Proxy::OnMsgConnectACK(
395 uint32 /* plugin_dispatcher_id */, 441 uint32 /* plugin_dispatcher_id */,
396 uint32 socket_id, 442 uint32 socket_id,
397 bool succeeded, 443 bool succeeded,
398 const PP_Flash_NetAddress& local_addr, 444 const PP_Flash_NetAddress& local_addr,
399 const PP_Flash_NetAddress& remote_addr) { 445 const PP_Flash_NetAddress& remote_addr) {
400 if (!g_id_to_socket) { 446 if (!g_id_to_socket) {
401 NOTREACHED(); 447 NOTREACHED();
402 return; 448 return;
403 } 449 }
404 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); 450 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id);
405 if (iter == g_id_to_socket->end()) 451 if (iter == g_id_to_socket->end())
406 return; 452 return;
407 iter->second->OnConnectCompleted(succeeded, local_addr, remote_addr); 453 iter->second->OnConnectCompleted(succeeded, local_addr, remote_addr);
408 } 454 }
409 455
456 void PPB_Flash_TCPSocket_Proxy::OnMsgInitiateSSLACK(
457 uint32 /* plugin_dispatcher_id */,
458 uint32 socket_id,
459 bool succeeded) {
460 if (!g_id_to_socket) {
461 NOTREACHED();
462 return;
463 }
464 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id);
465 if (iter == g_id_to_socket->end())
466 return;
467 iter->second->OnInitiateSSLCompleted(succeeded);
468 }
469
410 void PPB_Flash_TCPSocket_Proxy::OnMsgReadACK(uint32 /* plugin_dispatcher_id */, 470 void PPB_Flash_TCPSocket_Proxy::OnMsgReadACK(uint32 /* plugin_dispatcher_id */,
411 uint32 socket_id, 471 uint32 socket_id,
412 bool succeeded, 472 bool succeeded,
413 const std::string& data) { 473 const std::string& data) {
414 if (!g_id_to_socket) { 474 if (!g_id_to_socket) {
415 NOTREACHED(); 475 NOTREACHED();
416 return; 476 return;
417 } 477 }
418 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); 478 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id);
419 if (iter == g_id_to_socket->end()) 479 if (iter == g_id_to_socket->end())
(...skipping 10 matching lines...) Expand all
430 return; 490 return;
431 } 491 }
432 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); 492 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id);
433 if (iter == g_id_to_socket->end()) 493 if (iter == g_id_to_socket->end())
434 return; 494 return;
435 iter->second->OnWriteCompleted(succeeded, bytes_written); 495 iter->second->OnWriteCompleted(succeeded, bytes_written);
436 } 496 }
437 497
438 } // namespace proxy 498 } // namespace proxy
439 } // namespace pp 499 } // namespace pp
OLDNEW
« ppapi/proxy/ppapi_messages.h ('K') | « ppapi/proxy/ppb_flash_tcp_socket_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698