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

Side by Side Diff: net/socket/ssl_client_socket_nss.cc

Issue 8801005: base::Bind: Convert Socket::Read. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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
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 // This file includes code SSLClientSocketNSS::DoVerifyCertComplete() derived 5 // This file includes code SSLClientSocketNSS::DoVerifyCertComplete() derived
6 // from AuthCertificateCallback() in 6 // from AuthCertificateCallback() in
7 // mozilla/security/manager/ssl/src/nsNSSCallbacks.cpp. 7 // mozilla/security/manager/ssl/src/nsNSSCallbacks.cpp.
8 8
9 /* ***** BEGIN LICENSE BLOCK ***** 9 /* ***** BEGIN LICENSE BLOCK *****
10 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 10 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 transport_send_busy_(false), 439 transport_send_busy_(false),
440 transport_recv_busy_(false), 440 transport_recv_busy_(false),
441 corked_(false), 441 corked_(false),
442 ALLOW_THIS_IN_INITIALIZER_LIST(handshake_io_callback_( 442 ALLOW_THIS_IN_INITIALIZER_LIST(handshake_io_callback_(
443 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete, 443 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete,
444 base::Unretained(this)))), 444 base::Unretained(this)))),
445 transport_(transport_socket), 445 transport_(transport_socket),
446 host_and_port_(host_and_port), 446 host_and_port_(host_and_port),
447 ssl_config_(ssl_config), 447 ssl_config_(ssl_config),
448 old_user_connect_callback_(NULL), 448 old_user_connect_callback_(NULL),
449 user_read_callback_(NULL), 449 old_user_read_callback_(NULL),
450 user_write_callback_(NULL), 450 user_write_callback_(NULL),
451 user_read_buf_len_(0), 451 user_read_buf_len_(0),
452 user_write_buf_len_(0), 452 user_write_buf_len_(0),
453 server_cert_nss_(NULL), 453 server_cert_nss_(NULL),
454 server_cert_verify_result_(NULL), 454 server_cert_verify_result_(NULL),
455 ssl_connection_status_(0), 455 ssl_connection_status_(0),
456 client_auth_cert_needed_(false), 456 client_auth_cert_needed_(false),
457 cert_verifier_(context.cert_verifier), 457 cert_verifier_(context.cert_verifier),
458 ob_cert_xtn_negotiated_(false), 458 ob_cert_xtn_negotiated_(false),
459 origin_bound_cert_service_(context.origin_bound_cert_service), 459 origin_bound_cert_service_(context.origin_bound_cert_service),
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 SSLClientSocket::NextProtoStatus 560 SSLClientSocket::NextProtoStatus
561 SSLClientSocketNSS::GetNextProto(std::string* proto) { 561 SSLClientSocketNSS::GetNextProto(std::string* proto) {
562 *proto = next_proto_; 562 *proto = next_proto_;
563 return next_proto_status_; 563 return next_proto_status_;
564 } 564 }
565 565
566 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) { 566 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) {
567 EnterFunction(""); 567 EnterFunction("");
568 DCHECK(transport_.get()); 568 DCHECK(transport_.get());
569 DCHECK(next_handshake_state_ == STATE_NONE); 569 DCHECK(next_handshake_state_ == STATE_NONE);
570 DCHECK(!user_read_callback_); 570 DCHECK(!old_user_read_callback_);
csilv 2011/12/07 00:03:48 this should probably also check user_read_callback
James Hawkins 2011/12/07 00:19:37 Done.
571 DCHECK(!user_write_callback_); 571 DCHECK(!user_write_callback_);
572 DCHECK(!old_user_connect_callback_); 572 DCHECK(!old_user_connect_callback_);
csilv 2011/12/07 00:03:48 this should probably also check user_connect_callb
James Hawkins 2011/12/07 00:19:37 Done.
573 DCHECK(!user_read_buf_); 573 DCHECK(!user_read_buf_);
574 DCHECK(!user_write_buf_); 574 DCHECK(!user_write_buf_);
575 575
576 EnsureThreadIdAssigned(); 576 EnsureThreadIdAssigned();
577 577
578 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 578 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
579 579
580 int rv = Init(); 580 int rv = Init();
581 if (rv != OK) { 581 if (rv != OK) {
582 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); 582 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
(...skipping 25 matching lines...) Expand all
608 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); 608 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
609 } 609 }
610 610
611 LeaveFunction(""); 611 LeaveFunction("");
612 return rv > OK ? OK : rv; 612 return rv > OK ? OK : rv;
613 } 613 }
614 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) { 614 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) {
615 EnterFunction(""); 615 EnterFunction("");
616 DCHECK(transport_.get()); 616 DCHECK(transport_.get());
617 DCHECK(next_handshake_state_ == STATE_NONE); 617 DCHECK(next_handshake_state_ == STATE_NONE);
618 DCHECK(!user_read_callback_); 618 DCHECK(!old_user_read_callback_);
csilv 2011/12/07 00:03:48 this should probably also check user_read_callback
James Hawkins 2011/12/07 00:19:37 Done.
619 DCHECK(!user_write_callback_); 619 DCHECK(!user_write_callback_);
620 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 620 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
621 DCHECK(!user_read_buf_); 621 DCHECK(!user_read_buf_);
622 DCHECK(!user_write_buf_); 622 DCHECK(!user_write_buf_);
623 623
624 EnsureThreadIdAssigned(); 624 EnsureThreadIdAssigned();
625 625
626 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 626 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
627 627
628 int rv = Init(); 628 int rv = Init();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 if (nss_fd_ != NULL) { 679 if (nss_fd_ != NULL) {
680 PR_Close(nss_fd_); 680 PR_Close(nss_fd_);
681 nss_fd_ = NULL; 681 nss_fd_ = NULL;
682 } 682 }
683 683
684 // Reset object state 684 // Reset object state
685 transport_send_busy_ = false; 685 transport_send_busy_ = false;
686 transport_recv_busy_ = false; 686 transport_recv_busy_ = false;
687 old_user_connect_callback_ = NULL; 687 old_user_connect_callback_ = NULL;
688 user_connect_callback_.Reset(); 688 user_connect_callback_.Reset();
689 user_read_callback_ = NULL; 689 old_user_read_callback_ = NULL;
690 user_read_callback_.Reset();
690 user_write_callback_ = NULL; 691 user_write_callback_ = NULL;
691 user_read_buf_ = NULL; 692 user_read_buf_ = NULL;
692 user_read_buf_len_ = 0; 693 user_read_buf_len_ = 0;
693 user_write_buf_ = NULL; 694 user_write_buf_ = NULL;
694 user_write_buf_len_ = 0; 695 user_write_buf_len_ = 0;
695 server_cert_ = NULL; 696 server_cert_ = NULL;
696 if (server_cert_nss_) { 697 if (server_cert_nss_) {
697 CERT_DestroyCertificate(server_cert_nss_); 698 CERT_DestroyCertificate(server_cert_nss_);
698 server_cert_nss_ = NULL; 699 server_cert_nss_ = NULL;
699 } 700 }
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 } 800 }
800 NOTREACHED(); 801 NOTREACHED();
801 return base::TimeDelta::FromMicroseconds(-1); 802 return base::TimeDelta::FromMicroseconds(-1);
802 } 803 }
803 804
804 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len, 805 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len,
805 OldCompletionCallback* callback) { 806 OldCompletionCallback* callback) {
806 EnterFunction(buf_len); 807 EnterFunction(buf_len);
807 DCHECK(completed_handshake_); 808 DCHECK(completed_handshake_);
808 DCHECK(next_handshake_state_ == STATE_NONE); 809 DCHECK(next_handshake_state_ == STATE_NONE);
809 DCHECK(!user_read_callback_); 810 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
810 DCHECK(!old_user_connect_callback_); 811 DCHECK(!old_user_connect_callback_);
csilv 2011/12/07 00:03:48 this should probabably also check user_connect_cal
James Hawkins 2011/12/07 00:19:37 Done.
811 DCHECK(!user_read_buf_); 812 DCHECK(!user_read_buf_);
812 DCHECK(nss_bufs_); 813 DCHECK(nss_bufs_);
814
815 user_read_buf_ = buf;
816 user_read_buf_len_ = buf_len;
817
818 int rv = DoReadLoop(OK);
819
820 if (rv == ERR_IO_PENDING) {
821 old_user_read_callback_ = callback;
822 } else {
823 user_read_buf_ = NULL;
824 user_read_buf_len_ = 0;
825 }
826 LeaveFunction(rv);
827 return rv;
828 }
829 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len,
830 const CompletionCallback& callback) {
831 EnterFunction(buf_len);
832 DCHECK(completed_handshake_);
833 DCHECK(next_handshake_state_ == STATE_NONE);
834 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
835 DCHECK(!old_user_connect_callback_);
csilv 2011/12/07 00:03:48 this should probabably also check user_connect_cal
James Hawkins 2011/12/07 00:19:37 Done.
836 DCHECK(!user_read_buf_);
837 DCHECK(nss_bufs_);
813 838
814 user_read_buf_ = buf; 839 user_read_buf_ = buf;
815 user_read_buf_len_ = buf_len; 840 user_read_buf_len_ = buf_len;
816 841
817 int rv = DoReadLoop(OK); 842 int rv = DoReadLoop(OK);
818 843
819 if (rv == ERR_IO_PENDING) { 844 if (rv == ERR_IO_PENDING) {
820 user_read_callback_ = callback; 845 user_read_callback_ = callback;
821 } else { 846 } else {
822 user_read_buf_ = NULL; 847 user_read_buf_ = NULL;
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
1184 } 1209 }
1185 #endif 1210 #endif
1186 1211
1187 if (ssl_config_.ssl3_fallback) 1212 if (ssl_config_.ssl3_fallback)
1188 ssl_connection_status_ |= SSL_CONNECTION_SSL3_FALLBACK; 1213 ssl_connection_status_ |= SSL_CONNECTION_SSL3_FALLBACK;
1189 } 1214 }
1190 1215
1191 void SSLClientSocketNSS::DoReadCallback(int rv) { 1216 void SSLClientSocketNSS::DoReadCallback(int rv) {
1192 EnterFunction(rv); 1217 EnterFunction(rv);
1193 DCHECK(rv != ERR_IO_PENDING); 1218 DCHECK(rv != ERR_IO_PENDING);
1194 DCHECK(user_read_callback_); 1219 DCHECK(old_user_read_callback_ || user_read_callback_.is_null());
1195 1220
1196 // Since Run may result in Read being called, clear |user_read_callback_| 1221 // Since Run may result in Read being called, clear |old_user_read_callback_|
1197 // up front. 1222 // up front.
1198 OldCompletionCallback* c = user_read_callback_; 1223 if (old_user_read_callback_) {
1199 user_read_callback_ = NULL; 1224 OldCompletionCallback* c = old_user_read_callback_;
1200 user_read_buf_ = NULL; 1225 old_user_read_callback_ = NULL;
1201 user_read_buf_len_ = 0; 1226 user_read_buf_ = NULL;
1202 c->Run(rv); 1227 user_read_buf_len_ = 0;
1228 c->Run(rv);
1229 } else {
1230 CompletionCallback c = user_read_callback_;
1231 user_read_callback_.Reset();
1232 user_read_buf_ = NULL;
1233 user_read_buf_len_ = 0;
1234 c.Run(rv);
1235 }
1203 LeaveFunction(""); 1236 LeaveFunction("");
1204 } 1237 }
1205 1238
1206 void SSLClientSocketNSS::DoWriteCallback(int rv) { 1239 void SSLClientSocketNSS::DoWriteCallback(int rv) {
1207 EnterFunction(rv); 1240 EnterFunction(rv);
1208 DCHECK(rv != ERR_IO_PENDING); 1241 DCHECK(rv != ERR_IO_PENDING);
1209 DCHECK(user_write_callback_); 1242 DCHECK(user_write_callback_);
1210 1243
1211 // Since Run may result in Write being called, clear |user_write_callback_| 1244 // Since Run may result in Write being called, clear |user_write_callback_|
1212 // up front. 1245 // up front.
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
1820 // http://crbug.com/15630 for more info. 1853 // http://crbug.com/15630 for more info.
1821 1854
1822 // TODO(hclam): Skip logging if server cert was expected to be bad because 1855 // TODO(hclam): Skip logging if server cert was expected to be bad because
1823 // |server_cert_verify_results_| doesn't contain all the information about 1856 // |server_cert_verify_results_| doesn't contain all the information about
1824 // the cert. 1857 // the cert.
1825 if (result == OK) 1858 if (result == OK)
1826 LogConnectionTypeMetrics(); 1859 LogConnectionTypeMetrics();
1827 1860
1828 completed_handshake_ = true; 1861 completed_handshake_ = true;
1829 1862
1830 if (user_read_callback_) { 1863 if (old_user_read_callback_ || !user_read_callback_.is_null()) {
1831 int rv = DoReadLoop(OK); 1864 int rv = DoReadLoop(OK);
1832 if (rv != ERR_IO_PENDING) 1865 if (rv != ERR_IO_PENDING)
1833 DoReadCallback(rv); 1866 DoReadCallback(rv);
1834 } 1867 }
1835 1868
1836 // Exit DoHandshakeLoop and return the result to the caller to Connect. 1869 // Exit DoHandshakeLoop and return the result to the caller to Connect.
1837 DCHECK(next_handshake_state_ == STATE_NONE); 1870 DCHECK(next_handshake_state_ == STATE_NONE);
1838 return result; 1871 return result;
1839 } 1872 }
1840 1873
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after
2673 valid_thread_id_ = base::PlatformThread::CurrentId(); 2706 valid_thread_id_ = base::PlatformThread::CurrentId();
2674 } 2707 }
2675 2708
2676 bool SSLClientSocketNSS::CalledOnValidThread() const { 2709 bool SSLClientSocketNSS::CalledOnValidThread() const {
2677 EnsureThreadIdAssigned(); 2710 EnsureThreadIdAssigned();
2678 base::AutoLock auto_lock(lock_); 2711 base::AutoLock auto_lock(lock_);
2679 return valid_thread_id_ == base::PlatformThread::CurrentId(); 2712 return valid_thread_id_ == base::PlatformThread::CurrentId();
2680 } 2713 }
2681 2714
2682 } // namespace net 2715 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698