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

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

Issue 46433002: Support using TrackedCallbacks as hints to determine the handling thread of resource reply messages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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
« no previous file with comments | « ppapi/proxy/talk_resource_unittest.cc ('k') | ppapi/proxy/udp_socket_resource_base.cc » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/tcp_socket_resource_base.h" 5 #include "ppapi/proxy/tcp_socket_resource_base.h"
6 6
7 #include <cstring> 7 #include <cstring>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 if (!state_.IsValidTransition(TCPSocketState::BIND)) 77 if (!state_.IsValidTransition(TCPSocketState::BIND))
78 return PP_ERROR_FAILED; 78 return PP_ERROR_FAILED;
79 79
80 bind_callback_ = callback; 80 bind_callback_ = callback;
81 state_.SetPendingTransition(TCPSocketState::BIND); 81 state_.SetPendingTransition(TCPSocketState::BIND);
82 82
83 Call<PpapiPluginMsg_TCPSocket_BindReply>( 83 Call<PpapiPluginMsg_TCPSocket_BindReply>(
84 BROWSER, 84 BROWSER,
85 PpapiHostMsg_TCPSocket_Bind(*addr), 85 PpapiHostMsg_TCPSocket_Bind(*addr),
86 base::Bind(&TCPSocketResourceBase::OnPluginMsgBindReply, 86 base::Bind(&TCPSocketResourceBase::OnPluginMsgBindReply,
87 base::Unretained(this))); 87 base::Unretained(this)),
88 callback);
88 return PP_OK_COMPLETIONPENDING; 89 return PP_OK_COMPLETIONPENDING;
89 } 90 }
90 91
91 int32_t TCPSocketResourceBase::ConnectImpl( 92 int32_t TCPSocketResourceBase::ConnectImpl(
92 const char* host, 93 const char* host,
93 uint16_t port, 94 uint16_t port,
94 scoped_refptr<TrackedCallback> callback) { 95 scoped_refptr<TrackedCallback> callback) {
95 if (!host) 96 if (!host)
96 return PP_ERROR_BADARGUMENT; 97 return PP_ERROR_BADARGUMENT;
97 if (state_.IsPending(TCPSocketState::CONNECT)) 98 if (state_.IsPending(TCPSocketState::CONNECT))
98 return PP_ERROR_INPROGRESS; 99 return PP_ERROR_INPROGRESS;
99 if (!state_.IsValidTransition(TCPSocketState::CONNECT)) 100 if (!state_.IsValidTransition(TCPSocketState::CONNECT))
100 return PP_ERROR_FAILED; 101 return PP_ERROR_FAILED;
101 102
102 connect_callback_ = callback; 103 connect_callback_ = callback;
103 state_.SetPendingTransition(TCPSocketState::CONNECT); 104 state_.SetPendingTransition(TCPSocketState::CONNECT);
104 105
105 Call<PpapiPluginMsg_TCPSocket_ConnectReply>( 106 Call<PpapiPluginMsg_TCPSocket_ConnectReply>(
106 BROWSER, 107 BROWSER,
107 PpapiHostMsg_TCPSocket_Connect(host, port), 108 PpapiHostMsg_TCPSocket_Connect(host, port),
108 base::Bind(&TCPSocketResourceBase::OnPluginMsgConnectReply, 109 base::Bind(&TCPSocketResourceBase::OnPluginMsgConnectReply,
109 base::Unretained(this))); 110 base::Unretained(this)),
111 callback);
110 return PP_OK_COMPLETIONPENDING; 112 return PP_OK_COMPLETIONPENDING;
111 } 113 }
112 114
113 int32_t TCPSocketResourceBase::ConnectWithNetAddressImpl( 115 int32_t TCPSocketResourceBase::ConnectWithNetAddressImpl(
114 const PP_NetAddress_Private* addr, 116 const PP_NetAddress_Private* addr,
115 scoped_refptr<TrackedCallback> callback) { 117 scoped_refptr<TrackedCallback> callback) {
116 if (!addr) 118 if (!addr)
117 return PP_ERROR_BADARGUMENT; 119 return PP_ERROR_BADARGUMENT;
118 if (state_.IsPending(TCPSocketState::CONNECT)) 120 if (state_.IsPending(TCPSocketState::CONNECT))
119 return PP_ERROR_INPROGRESS; 121 return PP_ERROR_INPROGRESS;
120 if (!state_.IsValidTransition(TCPSocketState::CONNECT)) 122 if (!state_.IsValidTransition(TCPSocketState::CONNECT))
121 return PP_ERROR_FAILED; 123 return PP_ERROR_FAILED;
122 124
123 connect_callback_ = callback; 125 connect_callback_ = callback;
124 state_.SetPendingTransition(TCPSocketState::CONNECT); 126 state_.SetPendingTransition(TCPSocketState::CONNECT);
125 127
126 Call<PpapiPluginMsg_TCPSocket_ConnectReply>( 128 Call<PpapiPluginMsg_TCPSocket_ConnectReply>(
127 BROWSER, 129 BROWSER,
128 PpapiHostMsg_TCPSocket_ConnectWithNetAddress(*addr), 130 PpapiHostMsg_TCPSocket_ConnectWithNetAddress(*addr),
129 base::Bind(&TCPSocketResourceBase::OnPluginMsgConnectReply, 131 base::Bind(&TCPSocketResourceBase::OnPluginMsgConnectReply,
130 base::Unretained(this))); 132 base::Unretained(this)),
133 callback);
131 return PP_OK_COMPLETIONPENDING; 134 return PP_OK_COMPLETIONPENDING;
132 } 135 }
133 136
134 PP_Bool TCPSocketResourceBase::GetLocalAddressImpl( 137 PP_Bool TCPSocketResourceBase::GetLocalAddressImpl(
135 PP_NetAddress_Private* local_addr) { 138 PP_NetAddress_Private* local_addr) {
136 if (!state_.IsBound() || !local_addr) 139 if (!state_.IsBound() || !local_addr)
137 return PP_FALSE; 140 return PP_FALSE;
138 *local_addr = local_addr_; 141 *local_addr = local_addr_;
139 return PP_TRUE; 142 return PP_TRUE;
140 } 143 }
(...skipping 24 matching lines...) Expand all
165 ssl_handshake_callback_ = callback; 168 ssl_handshake_callback_ = callback;
166 state_.SetPendingTransition(TCPSocketState::SSL_CONNECT); 169 state_.SetPendingTransition(TCPSocketState::SSL_CONNECT);
167 170
168 Call<PpapiPluginMsg_TCPSocket_SSLHandshakeReply>( 171 Call<PpapiPluginMsg_TCPSocket_SSLHandshakeReply>(
169 BROWSER, 172 BROWSER,
170 PpapiHostMsg_TCPSocket_SSLHandshake(server_name, 173 PpapiHostMsg_TCPSocket_SSLHandshake(server_name,
171 server_port, 174 server_port,
172 trusted_certificates_, 175 trusted_certificates_,
173 untrusted_certificates_), 176 untrusted_certificates_),
174 base::Bind(&TCPSocketResourceBase::OnPluginMsgSSLHandshakeReply, 177 base::Bind(&TCPSocketResourceBase::OnPluginMsgSSLHandshakeReply,
175 base::Unretained(this))); 178 base::Unretained(this)),
179 callback);
176 return PP_OK_COMPLETIONPENDING; 180 return PP_OK_COMPLETIONPENDING;
177 } 181 }
178 182
179 PP_Resource TCPSocketResourceBase::GetServerCertificateImpl() { 183 PP_Resource TCPSocketResourceBase::GetServerCertificateImpl() {
180 if (!server_certificate_.get()) 184 if (!server_certificate_.get())
181 return 0; 185 return 0;
182 return server_certificate_->GetReference(); 186 return server_certificate_->GetReference();
183 } 187 }
184 188
185 PP_Bool TCPSocketResourceBase::AddChainBuildingCertificateImpl( 189 PP_Bool TCPSocketResourceBase::AddChainBuildingCertificateImpl(
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 state_.IsPending(TCPSocketState::SSL_CONNECT)) 230 state_.IsPending(TCPSocketState::SSL_CONNECT))
227 return PP_ERROR_INPROGRESS; 231 return PP_ERROR_INPROGRESS;
228 read_buffer_ = buffer; 232 read_buffer_ = buffer;
229 bytes_to_read_ = std::min(bytes_to_read, kMaxReadSize); 233 bytes_to_read_ = std::min(bytes_to_read, kMaxReadSize);
230 read_callback_ = callback; 234 read_callback_ = callback;
231 235
232 Call<PpapiPluginMsg_TCPSocket_ReadReply>( 236 Call<PpapiPluginMsg_TCPSocket_ReadReply>(
233 BROWSER, 237 BROWSER,
234 PpapiHostMsg_TCPSocket_Read(bytes_to_read_), 238 PpapiHostMsg_TCPSocket_Read(bytes_to_read_),
235 base::Bind(&TCPSocketResourceBase::OnPluginMsgReadReply, 239 base::Bind(&TCPSocketResourceBase::OnPluginMsgReadReply,
236 base::Unretained(this))); 240 base::Unretained(this)),
241 callback);
237 return PP_OK_COMPLETIONPENDING; 242 return PP_OK_COMPLETIONPENDING;
238 } 243 }
239 244
240 int32_t TCPSocketResourceBase::WriteImpl( 245 int32_t TCPSocketResourceBase::WriteImpl(
241 const char* buffer, 246 const char* buffer,
242 int32_t bytes_to_write, 247 int32_t bytes_to_write,
243 scoped_refptr<TrackedCallback> callback) { 248 scoped_refptr<TrackedCallback> callback) {
244 if (!buffer || bytes_to_write <= 0) 249 if (!buffer || bytes_to_write <= 0)
245 return PP_ERROR_BADARGUMENT; 250 return PP_ERROR_BADARGUMENT;
246 251
247 if (!state_.IsConnected()) 252 if (!state_.IsConnected())
248 return PP_ERROR_FAILED; 253 return PP_ERROR_FAILED;
249 if (TrackedCallback::IsPending(write_callback_) || 254 if (TrackedCallback::IsPending(write_callback_) ||
250 state_.IsPending(TCPSocketState::SSL_CONNECT)) 255 state_.IsPending(TCPSocketState::SSL_CONNECT))
251 return PP_ERROR_INPROGRESS; 256 return PP_ERROR_INPROGRESS;
252 257
253 if (bytes_to_write > kMaxWriteSize) 258 if (bytes_to_write > kMaxWriteSize)
254 bytes_to_write = kMaxWriteSize; 259 bytes_to_write = kMaxWriteSize;
255 260
256 write_callback_ = callback; 261 write_callback_ = callback;
257 262
258 Call<PpapiPluginMsg_TCPSocket_WriteReply>( 263 Call<PpapiPluginMsg_TCPSocket_WriteReply>(
259 BROWSER, 264 BROWSER,
260 PpapiHostMsg_TCPSocket_Write(std::string(buffer, bytes_to_write)), 265 PpapiHostMsg_TCPSocket_Write(std::string(buffer, bytes_to_write)),
261 base::Bind(&TCPSocketResourceBase::OnPluginMsgWriteReply, 266 base::Bind(&TCPSocketResourceBase::OnPluginMsgWriteReply,
262 base::Unretained(this))); 267 base::Unretained(this)),
268 callback);
263 return PP_OK_COMPLETIONPENDING; 269 return PP_OK_COMPLETIONPENDING;
264 } 270 }
265 271
266 int32_t TCPSocketResourceBase::ListenImpl( 272 int32_t TCPSocketResourceBase::ListenImpl(
267 int32_t backlog, 273 int32_t backlog,
268 scoped_refptr<TrackedCallback> callback) { 274 scoped_refptr<TrackedCallback> callback) {
269 if (backlog <= 0) 275 if (backlog <= 0)
270 return PP_ERROR_BADARGUMENT; 276 return PP_ERROR_BADARGUMENT;
271 if (state_.IsPending(TCPSocketState::LISTEN)) 277 if (state_.IsPending(TCPSocketState::LISTEN))
272 return PP_ERROR_INPROGRESS; 278 return PP_ERROR_INPROGRESS;
273 if (!state_.IsValidTransition(TCPSocketState::LISTEN)) 279 if (!state_.IsValidTransition(TCPSocketState::LISTEN))
274 return PP_ERROR_FAILED; 280 return PP_ERROR_FAILED;
275 281
276 listen_callback_ = callback; 282 listen_callback_ = callback;
277 state_.SetPendingTransition(TCPSocketState::LISTEN); 283 state_.SetPendingTransition(TCPSocketState::LISTEN);
278 284
279 Call<PpapiPluginMsg_TCPSocket_ListenReply>( 285 Call<PpapiPluginMsg_TCPSocket_ListenReply>(
280 BROWSER, 286 BROWSER,
281 PpapiHostMsg_TCPSocket_Listen(backlog), 287 PpapiHostMsg_TCPSocket_Listen(backlog),
282 base::Bind(&TCPSocketResourceBase::OnPluginMsgListenReply, 288 base::Bind(&TCPSocketResourceBase::OnPluginMsgListenReply,
283 base::Unretained(this))); 289 base::Unretained(this)),
290 callback);
284 return PP_OK_COMPLETIONPENDING; 291 return PP_OK_COMPLETIONPENDING;
285 } 292 }
286 293
287 int32_t TCPSocketResourceBase::AcceptImpl( 294 int32_t TCPSocketResourceBase::AcceptImpl(
288 PP_Resource* accepted_tcp_socket, 295 PP_Resource* accepted_tcp_socket,
289 scoped_refptr<TrackedCallback> callback) { 296 scoped_refptr<TrackedCallback> callback) {
290 if (!accepted_tcp_socket) 297 if (!accepted_tcp_socket)
291 return PP_ERROR_BADARGUMENT; 298 return PP_ERROR_BADARGUMENT;
292 if (TrackedCallback::IsPending(accept_callback_)) 299 if (TrackedCallback::IsPending(accept_callback_))
293 return PP_ERROR_INPROGRESS; 300 return PP_ERROR_INPROGRESS;
294 if (state_.state() != TCPSocketState::LISTENING) 301 if (state_.state() != TCPSocketState::LISTENING)
295 return PP_ERROR_FAILED; 302 return PP_ERROR_FAILED;
296 303
297 accept_callback_ = callback; 304 accept_callback_ = callback;
298 accepted_tcp_socket_ = accepted_tcp_socket; 305 accepted_tcp_socket_ = accepted_tcp_socket;
299 306
300 Call<PpapiPluginMsg_TCPSocket_AcceptReply>( 307 Call<PpapiPluginMsg_TCPSocket_AcceptReply>(
301 BROWSER, 308 BROWSER,
302 PpapiHostMsg_TCPSocket_Accept(), 309 PpapiHostMsg_TCPSocket_Accept(),
303 base::Bind(&TCPSocketResourceBase::OnPluginMsgAcceptReply, 310 base::Bind(&TCPSocketResourceBase::OnPluginMsgAcceptReply,
304 base::Unretained(this))); 311 base::Unretained(this)),
312 callback);
305 return PP_OK_COMPLETIONPENDING; 313 return PP_OK_COMPLETIONPENDING;
306 } 314 }
307 315
308 void TCPSocketResourceBase::CloseImpl() { 316 void TCPSocketResourceBase::CloseImpl() {
309 if (state_.state() == TCPSocketState::CLOSED) 317 if (state_.state() == TCPSocketState::CLOSED)
310 return; 318 return;
311 319
312 state_.DoTransition(TCPSocketState::CLOSE, true); 320 state_.DoTransition(TCPSocketState::CLOSE, true);
313 321
314 Post(BROWSER, PpapiHostMsg_TCPSocket_Close()); 322 Post(BROWSER, PpapiHostMsg_TCPSocket_Close());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 return PP_ERROR_BADARGUMENT; 364 return PP_ERROR_BADARGUMENT;
357 } 365 }
358 } 366 }
359 367
360 set_option_callbacks_.push(callback); 368 set_option_callbacks_.push(callback);
361 369
362 Call<PpapiPluginMsg_TCPSocket_SetOptionReply>( 370 Call<PpapiPluginMsg_TCPSocket_SetOptionReply>(
363 BROWSER, 371 BROWSER,
364 PpapiHostMsg_TCPSocket_SetOption(name, option_data), 372 PpapiHostMsg_TCPSocket_SetOption(name, option_data),
365 base::Bind(&TCPSocketResourceBase::OnPluginMsgSetOptionReply, 373 base::Bind(&TCPSocketResourceBase::OnPluginMsgSetOptionReply,
366 base::Unretained(this))); 374 base::Unretained(this)),
375 callback);
367 return PP_OK_COMPLETIONPENDING; 376 return PP_OK_COMPLETIONPENDING;
368 } 377 }
369 378
370 void TCPSocketResourceBase::PostAbortIfNecessary( 379 void TCPSocketResourceBase::PostAbortIfNecessary(
371 scoped_refptr<TrackedCallback>* callback) { 380 scoped_refptr<TrackedCallback>* callback) {
372 if (TrackedCallback::IsPending(*callback)) 381 if (TrackedCallback::IsPending(*callback))
373 (*callback)->PostAbort(); 382 (*callback)->PostAbort();
374 } 383 }
375 384
376 void TCPSocketResourceBase::OnPluginMsgBindReply( 385 void TCPSocketResourceBase::OnPluginMsgBindReply(
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 } 521 }
513 522
514 void TCPSocketResourceBase::RunCallback(scoped_refptr<TrackedCallback> callback, 523 void TCPSocketResourceBase::RunCallback(scoped_refptr<TrackedCallback> callback,
515 int32_t pp_result) { 524 int32_t pp_result) {
516 callback->Run(ConvertNetworkAPIErrorForCompatibility( 525 callback->Run(ConvertNetworkAPIErrorForCompatibility(
517 pp_result, version_ == TCP_SOCKET_VERSION_PRIVATE)); 526 pp_result, version_ == TCP_SOCKET_VERSION_PRIVATE));
518 } 527 }
519 528
520 } // namespace ppapi 529 } // namespace ppapi
521 } // namespace proxy 530 } // namespace proxy
OLDNEW
« no previous file with comments | « ppapi/proxy/talk_resource_unittest.cc ('k') | ppapi/proxy/udp_socket_resource_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698