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

Side by Side Diff: chrome/browser/chromeos/web_socket_proxy.cc

Issue 14113053: chrome: Use base::MessageLoop. (Part 3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase again Created 7 years, 6 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) 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 "chrome/browser/chromeos/web_socket_proxy.h" 5 #include "chrome/browser/chromeos/web_socket_proxy.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 #include <stdlib.h> 8 #include <stdlib.h>
9 #include <string.h> 9 #include <string.h>
10 10
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 430
431 // Used to schedule a timeout for initial phase of connection. 431 // Used to schedule a timeout for initial phase of connection.
432 scoped_ptr<struct event> destconnect_timeout_event_; 432 scoped_ptr<struct event> destconnect_timeout_event_;
433 433
434 static base::LazyInstance<EventKeyMap>::Leaky evkey_map_; 434 static base::LazyInstance<EventKeyMap>::Leaky evkey_map_;
435 static EventKey last_evkey_; 435 static EventKey last_evkey_;
436 436
437 DISALLOW_COPY_AND_ASSIGN(Conn); 437 DISALLOW_COPY_AND_ASSIGN(Conn);
438 }; 438 };
439 439
440 class SSLChan : public MessageLoopForIO::Watcher { 440 class SSLChan : public base::MessageLoopForIO::Watcher {
441 public: 441 public:
442 static void Start(const net::AddressList& address_list, 442 static void Start(const net::AddressList& address_list,
443 const net::HostPortPair& host_port_pair, 443 const net::HostPortPair& host_port_pair,
444 int read_pipe, 444 int read_pipe,
445 int write_pipe) { 445 int write_pipe) {
446 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 446 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
447 SSLChan* ALLOW_UNUSED chan = new SSLChan( 447 SSLChan* ALLOW_UNUSED chan = new SSLChan(
448 address_list, host_port_pair, read_pipe, write_pipe); 448 address_list, host_port_pair, read_pipe, write_pipe);
449 } 449 }
450 450
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 578
579 void Shut(int ALLOW_UNUSED net_error_code) { 579 void Shut(int ALLOW_UNUSED net_error_code) {
580 if (phase_ != PHASE_CLOSED) { 580 if (phase_ != PHASE_CLOSED) {
581 phase_ = PHASE_CLOSING; 581 phase_ = PHASE_CLOSING;
582 scoped_refptr<net::IOBufferWithSize> buf[] = { 582 scoped_refptr<net::IOBufferWithSize> buf[] = {
583 outbound_stream_.GetIOBufferToProcess(), 583 outbound_stream_.GetIOBufferToProcess(),
584 inbound_stream_.GetIOBufferToProcess() 584 inbound_stream_.GetIOBufferToProcess()
585 }; 585 };
586 for (int i = arraysize(buf); i--;) { 586 for (int i = arraysize(buf); i--;) {
587 if (buf[i] && buf[i]->size() > 0) { 587 if (buf[i] && buf[i]->size() > 0) {
588 MessageLoop::current()->PostTask( 588 base::MessageLoop::current()->PostTask(
589 FROM_HERE, 589 FROM_HERE,
590 base::Bind(&SSLChan::Proceed, weak_factory_.GetWeakPtr())); 590 base::Bind(&SSLChan::Proceed, weak_factory_.GetWeakPtr()));
591 return; 591 return;
592 } 592 }
593 } 593 }
594 phase_ = PHASE_CLOSED; 594 phase_ = PHASE_CLOSED;
595 if (socket_ != NULL) { 595 if (socket_ != NULL) {
596 socket_->Disconnect(); 596 socket_->Disconnect();
597 socket_.reset(); 597 socket_.reset();
598 } 598 }
599 MessageLoop::current()->DeleteSoon(FROM_HERE, this); 599 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
600 } 600 }
601 } 601 }
602 602
603 void OnSocketConnect(int result) { 603 void OnSocketConnect(int result) {
604 if (phase_ != PHASE_CONNECTING) { 604 if (phase_ != PHASE_CONNECTING) {
605 NOTREACHED(); 605 NOTREACHED();
606 return; 606 return;
607 } 607 }
608 if (result) { 608 if (result) {
609 Shut(result); 609 Shut(result);
(...skipping 22 matching lines...) Expand all
632 632
633 void OnSSLHandshakeCompleted(int result) { 633 void OnSSLHandshakeCompleted(int result) {
634 if (result) { 634 if (result) {
635 Shut(result); 635 Shut(result);
636 return; 636 return;
637 } 637 }
638 is_socket_read_pending_ = false; 638 is_socket_read_pending_ = false;
639 is_socket_write_pending_ = false; 639 is_socket_write_pending_ = false;
640 is_read_pipe_blocked_ = false; 640 is_read_pipe_blocked_ = false;
641 is_write_pipe_blocked_ = false; 641 is_write_pipe_blocked_ = false;
642 MessageLoopForIO::current()->WatchFileDescriptor( 642 base::MessageLoopForIO::current()->WatchFileDescriptor(
643 read_pipe_, false, MessageLoopForIO::WATCH_READ, 643 read_pipe_, false, base::MessageLoopForIO::WATCH_READ,
644 &read_pipe_controller_, this); 644 &read_pipe_controller_, this);
645 MessageLoopForIO::current()->WatchFileDescriptor( 645 base::MessageLoopForIO::current()->WatchFileDescriptor(
646 write_pipe_, false, MessageLoopForIO::WATCH_WRITE, 646 write_pipe_, false, base::MessageLoopForIO::WATCH_WRITE,
647 &write_pipe_controller_, this); 647 &write_pipe_controller_, this);
648 phase_ = PHASE_RUNNING; 648 phase_ = PHASE_RUNNING;
649 Proceed(); 649 Proceed();
650 } 650 }
651 651
652 void OnSocketRead(int result) { 652 void OnSocketRead(int result) {
653 DCHECK(is_socket_read_pending_); 653 DCHECK(is_socket_read_pending_);
654 is_socket_read_pending_ = false; 654 is_socket_read_pending_ = false;
655 if (result <= 0) { 655 if (result <= 0) {
656 Shut(result); 656 Shut(result);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 if (!is_read_pipe_blocked_ && phase_ == PHASE_RUNNING) { 700 if (!is_read_pipe_blocked_ && phase_ == PHASE_RUNNING) {
701 scoped_refptr<net::IOBufferWithSize> buf = 701 scoped_refptr<net::IOBufferWithSize> buf =
702 outbound_stream_.GetIOBufferToFill(); 702 outbound_stream_.GetIOBufferToFill();
703 if (buf && buf->size() > 0) { 703 if (buf && buf->size() > 0) {
704 int rv = read(read_pipe_, buf->data(), buf->size()); 704 int rv = read(read_pipe_, buf->data(), buf->size());
705 if (rv > 0) { 705 if (rv > 0) {
706 outbound_stream_.DidFill(rv); 706 outbound_stream_.DidFill(rv);
707 proceed = true; 707 proceed = true;
708 } else if (rv == -1 && errno == EAGAIN) { 708 } else if (rv == -1 && errno == EAGAIN) {
709 is_read_pipe_blocked_ = true; 709 is_read_pipe_blocked_ = true;
710 MessageLoopForIO::current()->WatchFileDescriptor( 710 base::MessageLoopForIO::current()->WatchFileDescriptor(
711 read_pipe_, false, MessageLoopForIO::WATCH_READ, 711 read_pipe_, false, base::MessageLoopForIO::WATCH_READ,
712 &read_pipe_controller_, this); 712 &read_pipe_controller_, this);
713 } else if (rv == 0) { 713 } else if (rv == 0) {
714 Shut(0); 714 Shut(0);
715 } else { 715 } else {
716 DCHECK_LT(rv, 0); 716 DCHECK_LT(rv, 0);
717 Shut(net::ERR_UNEXPECTED); 717 Shut(net::ERR_UNEXPECTED);
718 return; 718 return;
719 } 719 }
720 } 720 }
721 } 721 }
722 if (!is_socket_read_pending_ && phase_ == PHASE_RUNNING) { 722 if (!is_socket_read_pending_ && phase_ == PHASE_RUNNING) {
723 scoped_refptr<net::IOBufferWithSize> buf = 723 scoped_refptr<net::IOBufferWithSize> buf =
724 inbound_stream_.GetIOBufferToFill(); 724 inbound_stream_.GetIOBufferToFill();
725 if (buf && buf->size() > 0) { 725 if (buf && buf->size() > 0) {
726 int rv = socket_->Read( 726 int rv = socket_->Read(
727 buf, buf->size(), 727 buf, buf->size(),
728 base::Bind(&SSLChan::OnSocketRead, base::Unretained(this))); 728 base::Bind(&SSLChan::OnSocketRead, base::Unretained(this)));
729 is_socket_read_pending_ = true; 729 is_socket_read_pending_ = true;
730 if (rv != net::ERR_IO_PENDING) { 730 if (rv != net::ERR_IO_PENDING) {
731 MessageLoop::current()->PostTask( 731 base::MessageLoop::current()->PostTask(
732 FROM_HERE, base::Bind(&SSLChan::OnSocketRead, 732 FROM_HERE, base::Bind(&SSLChan::OnSocketRead,
733 weak_factory_.GetWeakPtr(), rv)); 733 weak_factory_.GetWeakPtr(), rv));
734 } 734 }
735 } 735 }
736 } 736 }
737 if (!is_socket_write_pending_) { 737 if (!is_socket_write_pending_) {
738 scoped_refptr<net::IOBufferWithSize> buf = 738 scoped_refptr<net::IOBufferWithSize> buf =
739 outbound_stream_.GetIOBufferToProcess(); 739 outbound_stream_.GetIOBufferToProcess();
740 if (buf && buf->size() > 0) { 740 if (buf && buf->size() > 0) {
741 int rv = socket_->Write( 741 int rv = socket_->Write(
742 buf, buf->size(), 742 buf, buf->size(),
743 base::Bind(&SSLChan::OnSocketWrite, base::Unretained(this))); 743 base::Bind(&SSLChan::OnSocketWrite, base::Unretained(this)));
744 is_socket_write_pending_ = true; 744 is_socket_write_pending_ = true;
745 if (rv != net::ERR_IO_PENDING) { 745 if (rv != net::ERR_IO_PENDING) {
746 MessageLoop::current()->PostTask( 746 base::MessageLoop::current()->PostTask(
747 FROM_HERE, base::Bind(&SSLChan::OnSocketWrite, 747 FROM_HERE, base::Bind(&SSLChan::OnSocketWrite,
748 weak_factory_.GetWeakPtr(), rv)); 748 weak_factory_.GetWeakPtr(), rv));
749 } 749 }
750 } else if (phase_ == PHASE_CLOSING) { 750 } else if (phase_ == PHASE_CLOSING) {
751 Shut(0); 751 Shut(0);
752 } 752 }
753 } 753 }
754 if (!is_write_pipe_blocked_) { 754 if (!is_write_pipe_blocked_) {
755 scoped_refptr<net::IOBufferWithSize> buf = 755 scoped_refptr<net::IOBufferWithSize> buf =
756 inbound_stream_.GetIOBufferToProcess(); 756 inbound_stream_.GetIOBufferToProcess();
757 if (buf && buf->size() > 0) { 757 if (buf && buf->size() > 0) {
758 int rv = write(write_pipe_, buf->data(), buf->size()); 758 int rv = write(write_pipe_, buf->data(), buf->size());
759 if (rv > 0) { 759 if (rv > 0) {
760 inbound_stream_.DidProcess(rv); 760 inbound_stream_.DidProcess(rv);
761 proceed = true; 761 proceed = true;
762 } else if (rv == -1 && errno == EAGAIN) { 762 } else if (rv == -1 && errno == EAGAIN) {
763 is_write_pipe_blocked_ = true; 763 is_write_pipe_blocked_ = true;
764 MessageLoopForIO::current()->WatchFileDescriptor( 764 base::MessageLoopForIO::current()->WatchFileDescriptor(
765 write_pipe_, false, MessageLoopForIO::WATCH_WRITE, 765 write_pipe_, false, base::MessageLoopForIO::WATCH_WRITE,
766 &write_pipe_controller_, this); 766 &write_pipe_controller_, this);
767 } else { 767 } else {
768 DCHECK_LE(rv, 0); 768 DCHECK_LE(rv, 0);
769 inbound_stream_.Clear(); 769 inbound_stream_.Clear();
770 Shut(net::ERR_UNEXPECTED); 770 Shut(net::ERR_UNEXPECTED);
771 return; 771 return;
772 } 772 }
773 } else if (phase_ == PHASE_CLOSING) { 773 } else if (phase_ == PHASE_CLOSING) {
774 Shut(0); 774 Shut(0);
775 } 775 }
776 } 776 }
777 } 777 }
778 } 778 }
779 779
780 Phase phase_; 780 Phase phase_;
781 scoped_ptr<net::StreamSocket> socket_; 781 scoped_ptr<net::StreamSocket> socket_;
782 net::HostPortPair host_port_pair_; 782 net::HostPortPair host_port_pair_;
783 scoped_ptr<net::CertVerifier> cert_verifier_; 783 scoped_ptr<net::CertVerifier> cert_verifier_;
784 net::SSLConfig ssl_config_; 784 net::SSLConfig ssl_config_;
785 IOBufferQueue inbound_stream_; 785 IOBufferQueue inbound_stream_;
786 IOBufferQueue outbound_stream_; 786 IOBufferQueue outbound_stream_;
787 int read_pipe_; 787 int read_pipe_;
788 int write_pipe_; 788 int write_pipe_;
789 bool is_socket_read_pending_; 789 bool is_socket_read_pending_;
790 bool is_socket_write_pending_; 790 bool is_socket_write_pending_;
791 bool is_read_pipe_blocked_; 791 bool is_read_pipe_blocked_;
792 bool is_write_pipe_blocked_; 792 bool is_write_pipe_blocked_;
793 base::WeakPtrFactory<SSLChan> weak_factory_; 793 base::WeakPtrFactory<SSLChan> weak_factory_;
794 MessageLoopForIO::FileDescriptorWatcher read_pipe_controller_; 794 base::MessageLoopForIO::FileDescriptorWatcher read_pipe_controller_;
795 MessageLoopForIO::FileDescriptorWatcher write_pipe_controller_; 795 base::MessageLoopForIO::FileDescriptorWatcher write_pipe_controller_;
796 796
797 friend class base::DeleteHelper<SSLChan>; 797 friend class base::DeleteHelper<SSLChan>;
798 DISALLOW_COPY_AND_ASSIGN(SSLChan); 798 DISALLOW_COPY_AND_ASSIGN(SSLChan);
799 }; 799 };
800 800
801 Serv::Serv() 801 Serv::Serv()
802 : evbase_(NULL), 802 : evbase_(NULL),
803 listening_sock_(-1), 803 listening_sock_(-1),
804 extra_listening_sock_(-1), 804 extra_listening_sock_(-1),
805 shutdown_requested_(false) { 805 shutdown_requested_(false) {
(...skipping 1095 matching lines...) Expand 10 before | Expand all | Expand 10 after
1901 1901
1902 void WebSocketProxy::Shutdown() { 1902 void WebSocketProxy::Shutdown() {
1903 static_cast<Serv*>(impl_)->Shutdown(); 1903 static_cast<Serv*>(impl_)->Shutdown();
1904 } 1904 }
1905 1905
1906 void WebSocketProxy::OnNetworkChange() { 1906 void WebSocketProxy::OnNetworkChange() {
1907 static_cast<Serv*>(impl_)->OnNetworkChange(); 1907 static_cast<Serv*>(impl_)->OnNetworkChange();
1908 } 1908 }
1909 1909
1910 } // namespace chromeos 1910 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/system_key_event_listener.cc ('k') | chrome/browser/chromeos/web_socket_proxy_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698