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

Side by Side Diff: ppapi/shared_impl/private/tcp_socket_private_impl.cc

Issue 10909244: PPAPI: Get TrackedCallback ready for running on non-main threads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged. Created 8 years, 1 month 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) 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 #include "ppapi/shared_impl/private/tcp_socket_private_impl.h" 5 #include "ppapi/shared_impl/private/tcp_socket_private_impl.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 !TrackedCallback::IsPending(connect_callback_)) { 225 !TrackedCallback::IsPending(connect_callback_)) {
226 NOTREACHED(); 226 NOTREACHED();
227 return; 227 return;
228 } 228 }
229 229
230 if (succeeded) { 230 if (succeeded) {
231 local_addr_ = local_addr; 231 local_addr_ = local_addr;
232 remote_addr_ = remote_addr; 232 remote_addr_ = remote_addr;
233 connection_state_ = CONNECTED; 233 connection_state_ = CONNECTED;
234 } 234 }
235 TrackedCallback::ClearAndRun(&connect_callback_, 235 connect_callback_->Run(succeeded ? PP_OK : PP_ERROR_FAILED);
236 succeeded ? PP_OK : PP_ERROR_FAILED);
237 } 236 }
238 237
239 void TCPSocketPrivateImpl::OnSSLHandshakeCompleted( 238 void TCPSocketPrivateImpl::OnSSLHandshakeCompleted(
240 bool succeeded, 239 bool succeeded,
241 const PPB_X509Certificate_Fields& certificate_fields) { 240 const PPB_X509Certificate_Fields& certificate_fields) {
242 if (connection_state_ != CONNECTED || 241 if (connection_state_ != CONNECTED ||
243 !TrackedCallback::IsPending(ssl_handshake_callback_)) { 242 !TrackedCallback::IsPending(ssl_handshake_callback_)) {
244 NOTREACHED(); 243 NOTREACHED();
245 return; 244 return;
246 } 245 }
247 246
248 if (succeeded) { 247 if (succeeded) {
249 connection_state_ = SSL_CONNECTED; 248 connection_state_ = SSL_CONNECTED;
250 server_certificate_ = new PPB_X509Certificate_Private_Shared( 249 server_certificate_ = new PPB_X509Certificate_Private_Shared(
251 resource_type_, 250 resource_type_,
252 pp_instance(), 251 pp_instance(),
253 certificate_fields); 252 certificate_fields);
254 TrackedCallback::ClearAndRun(&ssl_handshake_callback_, PP_OK); 253 ssl_handshake_callback_->Run(PP_OK);
255 } else { 254 } else {
256 // The resource might be released in the callback so we need to hold 255 // The resource might be released in the callback so we need to hold
257 // a reference so we can Disconnect() first. 256 // a reference so we can Disconnect() first.
258 AddRef(); 257 AddRef();
259 TrackedCallback::ClearAndRun(&ssl_handshake_callback_, PP_ERROR_FAILED); 258 ssl_handshake_callback_->Run(PP_ERROR_FAILED);
260 Disconnect(); 259 Disconnect();
261 Release(); 260 Release();
262 } 261 }
263 } 262 }
264 263
265 void TCPSocketPrivateImpl::OnReadCompleted(bool succeeded, 264 void TCPSocketPrivateImpl::OnReadCompleted(bool succeeded,
266 const std::string& data) { 265 const std::string& data) {
267 if (!TrackedCallback::IsPending(read_callback_) || !read_buffer_) { 266 if (!TrackedCallback::IsPending(read_callback_) || !read_buffer_) {
268 NOTREACHED(); 267 NOTREACHED();
269 return; 268 return;
270 } 269 }
271 270
272 if (succeeded) { 271 if (succeeded) {
273 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_); 272 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_);
274 if (!data.empty()) 273 if (!data.empty())
275 memcpy(read_buffer_, data.c_str(), data.size()); 274 memcpy(read_buffer_, data.c_str(), data.size());
276 } 275 }
277 read_buffer_ = NULL; 276 read_buffer_ = NULL;
278 bytes_to_read_ = -1; 277 bytes_to_read_ = -1;
279 278
280 TrackedCallback::ClearAndRun( 279 read_callback_->Run(
281 &read_callback_,
282 succeeded ? static_cast<int32_t>(data.size()) : 280 succeeded ? static_cast<int32_t>(data.size()) :
283 static_cast<int32_t>(PP_ERROR_FAILED)); 281 static_cast<int32_t>(PP_ERROR_FAILED));
284 } 282 }
285 283
286 void TCPSocketPrivateImpl::OnWriteCompleted(bool succeeded, 284 void TCPSocketPrivateImpl::OnWriteCompleted(bool succeeded,
287 int32_t bytes_written) { 285 int32_t bytes_written) {
288 if (!TrackedCallback::IsPending(write_callback_) || 286 if (!TrackedCallback::IsPending(write_callback_) ||
289 (succeeded && bytes_written < 0)) { 287 (succeeded && bytes_written < 0)) {
290 NOTREACHED(); 288 NOTREACHED();
291 return; 289 return;
292 } 290 }
293 291
294 TrackedCallback::ClearAndRun( 292 write_callback_->Run(
295 &write_callback_,
296 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); 293 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED));
297 } 294 }
298 295
299 void TCPSocketPrivateImpl::Init(uint32 socket_id) { 296 void TCPSocketPrivateImpl::Init(uint32 socket_id) {
300 DCHECK(socket_id != 0); 297 DCHECK(socket_id != 0);
301 socket_id_ = socket_id; 298 socket_id_ = socket_id;
302 connection_state_ = BEFORE_CONNECT; 299 connection_state_ = BEFORE_CONNECT;
303 read_buffer_ = NULL; 300 read_buffer_ = NULL;
304 bytes_to_read_ = -1; 301 bytes_to_read_ = -1;
305 302
306 local_addr_.size = 0; 303 local_addr_.size = 0;
307 memset(local_addr_.data, 0, 304 memset(local_addr_.data, 0,
308 arraysize(local_addr_.data) * sizeof(*local_addr_.data)); 305 arraysize(local_addr_.data) * sizeof(*local_addr_.data));
309 remote_addr_.size = 0; 306 remote_addr_.size = 0;
310 memset(remote_addr_.data, 0, 307 memset(remote_addr_.data, 0,
311 arraysize(remote_addr_.data) * sizeof(*remote_addr_.data)); 308 arraysize(remote_addr_.data) * sizeof(*remote_addr_.data));
312 } 309 }
313 310
314 bool TCPSocketPrivateImpl::IsConnected() const { 311 bool TCPSocketPrivateImpl::IsConnected() const {
315 return connection_state_ == CONNECTED || connection_state_ == SSL_CONNECTED; 312 return connection_state_ == CONNECTED || connection_state_ == SSL_CONNECTED;
316 } 313 }
317 314
318 void TCPSocketPrivateImpl::PostAbortIfNecessary( 315 void TCPSocketPrivateImpl::PostAbortIfNecessary(
319 scoped_refptr<TrackedCallback>* callback) { 316 scoped_refptr<TrackedCallback>* callback) {
320 if (callback->get()) 317 if (TrackedCallback::IsPending(*callback))
321 (*callback)->PostAbort(); 318 (*callback)->PostAbort();
322 } 319 }
323 320
324 } // namespace ppapi 321 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/shared_impl/private/ppb_tcp_server_socket_shared.cc ('k') | ppapi/shared_impl/private/udp_socket_private_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698