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

Side by Side Diff: ppapi/proxy/websocket_resource.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
« no previous file with comments | « ppapi/proxy/printing_resource.cc ('k') | ppapi/shared_impl/ppb_audio_input_shared.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 (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/proxy/websocket_resource.h" 5 #include "ppapi/proxy/websocket_resource.h"
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 const std::string& protocol) { 364 const std::string& protocol) {
365 if (!TrackedCallback::IsPending(connect_callback_)) 365 if (!TrackedCallback::IsPending(connect_callback_))
366 return; 366 return;
367 367
368 int32_t result = params.result(); 368 int32_t result = params.result();
369 if (result == PP_OK) { 369 if (result == PP_OK) {
370 state_ = PP_WEBSOCKETREADYSTATE_OPEN; 370 state_ = PP_WEBSOCKETREADYSTATE_OPEN;
371 protocol_ = new StringVar(protocol); 371 protocol_ = new StringVar(protocol);
372 url_ = new StringVar(url); 372 url_ = new StringVar(url);
373 } 373 }
374 TrackedCallback::ClearAndRun(&connect_callback_, params.result()); 374 connect_callback_->Run(params.result());
375 } 375 }
376 376
377 void WebSocketResource::OnPluginMsgCloseReply( 377 void WebSocketResource::OnPluginMsgCloseReply(
378 const ResourceMessageReplyParams& params, 378 const ResourceMessageReplyParams& params,
379 unsigned long buffered_amount, 379 unsigned long buffered_amount,
380 bool was_clean, 380 bool was_clean,
381 unsigned short code, 381 unsigned short code,
382 const std::string& reason) { 382 const std::string& reason) {
383 // Set close related properties. 383 // Set close related properties.
384 state_ = PP_WEBSOCKETREADYSTATE_CLOSED; 384 state_ = PP_WEBSOCKETREADYSTATE_CLOSED;
(...skipping 20 matching lines...) Expand all
405 // Dispose packets after receiving an error or in invalid state. 405 // Dispose packets after receiving an error or in invalid state.
406 if (error_was_received_ || !InValidStateToReceive(state_)) 406 if (error_was_received_ || !InValidStateToReceive(state_))
407 return; 407 return;
408 408
409 // Append received data to queue. 409 // Append received data to queue.
410 received_messages_.push(scoped_refptr<Var>(new StringVar(message))); 410 received_messages_.push(scoped_refptr<Var>(new StringVar(message)));
411 411
412 if (!TrackedCallback::IsPending(receive_callback_)) 412 if (!TrackedCallback::IsPending(receive_callback_))
413 return; 413 return;
414 414
415 TrackedCallback::ClearAndRun(&receive_callback_, DoReceive()); 415 receive_callback_->Run(DoReceive());
416 } 416 }
417 417
418 void WebSocketResource::OnPluginMsgReceiveBinaryReply( 418 void WebSocketResource::OnPluginMsgReceiveBinaryReply(
419 const ResourceMessageReplyParams& params, 419 const ResourceMessageReplyParams& params,
420 const std::vector<uint8_t>& message) { 420 const std::vector<uint8_t>& message) {
421 // Dispose packets after receiving an error or in invalid state. 421 // Dispose packets after receiving an error or in invalid state.
422 if (error_was_received_ || !InValidStateToReceive(state_)) 422 if (error_was_received_ || !InValidStateToReceive(state_))
423 return; 423 return;
424 424
425 // Append received data to queue. 425 // Append received data to queue.
426 scoped_refptr<Var> message_var(ArrayBufferVar::FromPPVar( 426 scoped_refptr<Var> message_var(ArrayBufferVar::FromPPVar(
427 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( 427 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar(
428 message.size(), 428 message.size(),
429 &message.front()))); 429 &message.front())));
430 received_messages_.push(message_var); 430 received_messages_.push(message_var);
431 431
432 if (!TrackedCallback::IsPending(receive_callback_)) 432 if (!TrackedCallback::IsPending(receive_callback_))
433 return; 433 return;
434 434
435 TrackedCallback::ClearAndRun(&receive_callback_, DoReceive()); 435 receive_callback_->Run(DoReceive());
436 } 436 }
437 437
438 void WebSocketResource::OnPluginMsgErrorReply( 438 void WebSocketResource::OnPluginMsgErrorReply(
439 const ResourceMessageReplyParams& params) { 439 const ResourceMessageReplyParams& params) {
440 error_was_received_ = true; 440 error_was_received_ = true;
441 441
442 if (!TrackedCallback::IsPending(receive_callback_)) 442 if (!TrackedCallback::IsPending(receive_callback_))
443 return; 443 return;
444 444
445 // No more text or binary messages will be received. If there is ongoing 445 // No more text or binary messages will be received. If there is ongoing
446 // ReceiveMessage(), we must invoke the callback with error code here. 446 // ReceiveMessage(), we must invoke the callback with error code here.
447 receive_callback_var_ = NULL; 447 receive_callback_var_ = NULL;
448 TrackedCallback::ClearAndRun(&receive_callback_, PP_ERROR_FAILED); 448 receive_callback_->Run(PP_ERROR_FAILED);
449 } 449 }
450 450
451 void WebSocketResource::OnPluginMsgBufferedAmountReply( 451 void WebSocketResource::OnPluginMsgBufferedAmountReply(
452 const ResourceMessageReplyParams& params, 452 const ResourceMessageReplyParams& params,
453 unsigned long buffered_amount) { 453 unsigned long buffered_amount) {
454 buffered_amount_ = buffered_amount; 454 buffered_amount_ = buffered_amount;
455 } 455 }
456 456
457 void WebSocketResource::OnPluginMsgStateReply( 457 void WebSocketResource::OnPluginMsgStateReply(
458 const ResourceMessageReplyParams& params, 458 const ResourceMessageReplyParams& params,
(...skipping 15 matching lines...) Expand all
474 return PP_OK; 474 return PP_OK;
475 475
476 *receive_callback_var_ = received_messages_.front()->GetPPVar(); 476 *receive_callback_var_ = received_messages_.front()->GetPPVar();
477 received_messages_.pop(); 477 received_messages_.pop();
478 receive_callback_var_ = NULL; 478 receive_callback_var_ = NULL;
479 return PP_OK; 479 return PP_OK;
480 } 480 }
481 481
482 } // namespace proxy 482 } // namespace proxy
483 } // namespace ppapi 483 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/proxy/printing_resource.cc ('k') | ppapi/shared_impl/ppb_audio_input_shared.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698