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

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: Review fixes. 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
« no previous file with comments | « net/socket/ssl_client_socket_nss.h ('k') | net/socket/ssl_client_socket_openssl.h » ('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) 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 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 transport_send_busy_(false), 440 transport_send_busy_(false),
441 transport_recv_busy_(false), 441 transport_recv_busy_(false),
442 corked_(false), 442 corked_(false),
443 ALLOW_THIS_IN_INITIALIZER_LIST(handshake_io_callback_( 443 ALLOW_THIS_IN_INITIALIZER_LIST(handshake_io_callback_(
444 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete, 444 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete,
445 base::Unretained(this)))), 445 base::Unretained(this)))),
446 transport_(transport_socket), 446 transport_(transport_socket),
447 host_and_port_(host_and_port), 447 host_and_port_(host_and_port),
448 ssl_config_(ssl_config), 448 ssl_config_(ssl_config),
449 old_user_connect_callback_(NULL), 449 old_user_connect_callback_(NULL),
450 user_read_callback_(NULL), 450 old_user_read_callback_(NULL),
451 user_write_callback_(NULL), 451 user_write_callback_(NULL),
452 user_read_buf_len_(0), 452 user_read_buf_len_(0),
453 user_write_buf_len_(0), 453 user_write_buf_len_(0),
454 server_cert_nss_(NULL), 454 server_cert_nss_(NULL),
455 server_cert_verify_result_(NULL), 455 server_cert_verify_result_(NULL),
456 ssl_connection_status_(0), 456 ssl_connection_status_(0),
457 client_auth_cert_needed_(false), 457 client_auth_cert_needed_(false),
458 cert_verifier_(context.cert_verifier), 458 cert_verifier_(context.cert_verifier),
459 ob_cert_xtn_negotiated_(false), 459 ob_cert_xtn_negotiated_(false),
460 origin_bound_cert_service_(context.origin_bound_cert_service), 460 origin_bound_cert_service_(context.origin_bound_cert_service),
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 std::string* server_protos) { 569 std::string* server_protos) {
570 *proto = next_proto_; 570 *proto = next_proto_;
571 *server_protos = server_protos_; 571 *server_protos = server_protos_;
572 return next_proto_status_; 572 return next_proto_status_;
573 } 573 }
574 574
575 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) { 575 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) {
576 EnterFunction(""); 576 EnterFunction("");
577 DCHECK(transport_.get()); 577 DCHECK(transport_.get());
578 DCHECK(next_handshake_state_ == STATE_NONE); 578 DCHECK(next_handshake_state_ == STATE_NONE);
579 DCHECK(!user_read_callback_); 579 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
580 DCHECK(!user_write_callback_); 580 DCHECK(!user_write_callback_);
581 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 581 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
582 DCHECK(!user_read_buf_); 582 DCHECK(!user_read_buf_);
583 DCHECK(!user_write_buf_); 583 DCHECK(!user_write_buf_);
584 584
585 EnsureThreadIdAssigned(); 585 EnsureThreadIdAssigned();
586 586
587 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 587 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
588 588
589 int rv = Init(); 589 int rv = Init();
(...skipping 27 matching lines...) Expand all
617 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); 617 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
618 } 618 }
619 619
620 LeaveFunction(""); 620 LeaveFunction("");
621 return rv > OK ? OK : rv; 621 return rv > OK ? OK : rv;
622 } 622 }
623 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) { 623 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) {
624 EnterFunction(""); 624 EnterFunction("");
625 DCHECK(transport_.get()); 625 DCHECK(transport_.get());
626 DCHECK(next_handshake_state_ == STATE_NONE); 626 DCHECK(next_handshake_state_ == STATE_NONE);
627 DCHECK(!user_read_callback_); 627 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
628 DCHECK(!user_write_callback_); 628 DCHECK(!user_write_callback_);
629 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 629 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
630 DCHECK(!user_read_buf_); 630 DCHECK(!user_read_buf_);
631 DCHECK(!user_write_buf_); 631 DCHECK(!user_write_buf_);
632 632
633 EnsureThreadIdAssigned(); 633 EnsureThreadIdAssigned();
634 634
635 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 635 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
636 636
637 int rv = Init(); 637 int rv = Init();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 if (nss_fd_ != NULL) { 688 if (nss_fd_ != NULL) {
689 PR_Close(nss_fd_); 689 PR_Close(nss_fd_);
690 nss_fd_ = NULL; 690 nss_fd_ = NULL;
691 } 691 }
692 692
693 // Reset object state 693 // Reset object state
694 transport_send_busy_ = false; 694 transport_send_busy_ = false;
695 transport_recv_busy_ = false; 695 transport_recv_busy_ = false;
696 old_user_connect_callback_ = NULL; 696 old_user_connect_callback_ = NULL;
697 user_connect_callback_.Reset(); 697 user_connect_callback_.Reset();
698 user_read_callback_ = NULL; 698 old_user_read_callback_ = NULL;
699 user_read_callback_.Reset();
699 user_write_callback_ = NULL; 700 user_write_callback_ = NULL;
700 user_read_buf_ = NULL; 701 user_read_buf_ = NULL;
701 user_read_buf_len_ = 0; 702 user_read_buf_len_ = 0;
702 user_write_buf_ = NULL; 703 user_write_buf_ = NULL;
703 user_write_buf_len_ = 0; 704 user_write_buf_len_ = 0;
704 server_cert_ = NULL; 705 server_cert_ = NULL;
705 if (server_cert_nss_) { 706 if (server_cert_nss_) {
706 CERT_DestroyCertificate(server_cert_nss_); 707 CERT_DestroyCertificate(server_cert_nss_);
707 server_cert_nss_ = NULL; 708 server_cert_nss_ = NULL;
708 } 709 }
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 } 809 }
809 NOTREACHED(); 810 NOTREACHED();
810 return base::TimeDelta::FromMicroseconds(-1); 811 return base::TimeDelta::FromMicroseconds(-1);
811 } 812 }
812 813
813 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len, 814 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len,
814 OldCompletionCallback* callback) { 815 OldCompletionCallback* callback) {
815 EnterFunction(buf_len); 816 EnterFunction(buf_len);
816 DCHECK(completed_handshake_); 817 DCHECK(completed_handshake_);
817 DCHECK(next_handshake_state_ == STATE_NONE); 818 DCHECK(next_handshake_state_ == STATE_NONE);
818 DCHECK(!user_read_callback_); 819 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
819 DCHECK(!old_user_connect_callback_); 820 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
820 DCHECK(!user_read_buf_); 821 DCHECK(!user_read_buf_);
821 DCHECK(nss_bufs_); 822 DCHECK(nss_bufs_);
822 823
824 user_read_buf_ = buf;
825 user_read_buf_len_ = buf_len;
826
827 int rv = DoReadLoop(OK);
828
829 if (rv == ERR_IO_PENDING) {
830 old_user_read_callback_ = callback;
831 } else {
832 user_read_buf_ = NULL;
833 user_read_buf_len_ = 0;
834 }
835 LeaveFunction(rv);
836 return rv;
837 }
838 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len,
839 const CompletionCallback& callback) {
840 EnterFunction(buf_len);
841 DCHECK(completed_handshake_);
842 DCHECK(next_handshake_state_ == STATE_NONE);
843 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
844 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
845 DCHECK(!user_read_buf_);
846 DCHECK(nss_bufs_);
847
823 user_read_buf_ = buf; 848 user_read_buf_ = buf;
824 user_read_buf_len_ = buf_len; 849 user_read_buf_len_ = buf_len;
825 850
826 int rv = DoReadLoop(OK); 851 int rv = DoReadLoop(OK);
827 852
828 if (rv == ERR_IO_PENDING) { 853 if (rv == ERR_IO_PENDING) {
829 user_read_callback_ = callback; 854 user_read_callback_ = callback;
830 } else { 855 } else {
831 user_read_buf_ = NULL; 856 user_read_buf_ = NULL;
832 user_read_buf_len_ = 0; 857 user_read_buf_len_ = 0;
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
1193 } 1218 }
1194 #endif 1219 #endif
1195 1220
1196 if (ssl_config_.ssl3_fallback) 1221 if (ssl_config_.ssl3_fallback)
1197 ssl_connection_status_ |= SSL_CONNECTION_SSL3_FALLBACK; 1222 ssl_connection_status_ |= SSL_CONNECTION_SSL3_FALLBACK;
1198 } 1223 }
1199 1224
1200 void SSLClientSocketNSS::DoReadCallback(int rv) { 1225 void SSLClientSocketNSS::DoReadCallback(int rv) {
1201 EnterFunction(rv); 1226 EnterFunction(rv);
1202 DCHECK(rv != ERR_IO_PENDING); 1227 DCHECK(rv != ERR_IO_PENDING);
1203 DCHECK(user_read_callback_); 1228 DCHECK(old_user_read_callback_ || user_read_callback_.is_null());
1204 1229
1205 // Since Run may result in Read being called, clear |user_read_callback_| 1230 // Since Run may result in Read being called, clear |old_user_read_callback_|
1206 // up front. 1231 // up front.
1207 OldCompletionCallback* c = user_read_callback_; 1232 if (old_user_read_callback_) {
1208 user_read_callback_ = NULL; 1233 OldCompletionCallback* c = old_user_read_callback_;
1209 user_read_buf_ = NULL; 1234 old_user_read_callback_ = NULL;
1210 user_read_buf_len_ = 0; 1235 user_read_buf_ = NULL;
1211 c->Run(rv); 1236 user_read_buf_len_ = 0;
1237 c->Run(rv);
1238 } else {
1239 CompletionCallback c = user_read_callback_;
1240 user_read_callback_.Reset();
1241 user_read_buf_ = NULL;
1242 user_read_buf_len_ = 0;
1243 c.Run(rv);
1244 }
1212 LeaveFunction(""); 1245 LeaveFunction("");
1213 } 1246 }
1214 1247
1215 void SSLClientSocketNSS::DoWriteCallback(int rv) { 1248 void SSLClientSocketNSS::DoWriteCallback(int rv) {
1216 EnterFunction(rv); 1249 EnterFunction(rv);
1217 DCHECK(rv != ERR_IO_PENDING); 1250 DCHECK(rv != ERR_IO_PENDING);
1218 DCHECK(user_write_callback_); 1251 DCHECK(user_write_callback_);
1219 1252
1220 // Since Run may result in Write being called, clear |user_write_callback_| 1253 // Since Run may result in Write being called, clear |user_write_callback_|
1221 // up front. 1254 // up front.
(...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after
1857 // http://crbug.com/15630 for more info. 1890 // http://crbug.com/15630 for more info.
1858 1891
1859 // TODO(hclam): Skip logging if server cert was expected to be bad because 1892 // TODO(hclam): Skip logging if server cert was expected to be bad because
1860 // |server_cert_verify_results_| doesn't contain all the information about 1893 // |server_cert_verify_results_| doesn't contain all the information about
1861 // the cert. 1894 // the cert.
1862 if (result == OK) 1895 if (result == OK)
1863 LogConnectionTypeMetrics(); 1896 LogConnectionTypeMetrics();
1864 1897
1865 completed_handshake_ = true; 1898 completed_handshake_ = true;
1866 1899
1867 if (user_read_callback_) { 1900 if (old_user_read_callback_ || !user_read_callback_.is_null()) {
1868 int rv = DoReadLoop(OK); 1901 int rv = DoReadLoop(OK);
1869 if (rv != ERR_IO_PENDING) 1902 if (rv != ERR_IO_PENDING)
1870 DoReadCallback(rv); 1903 DoReadCallback(rv);
1871 } 1904 }
1872 1905
1873 // Exit DoHandshakeLoop and return the result to the caller to Connect. 1906 // Exit DoHandshakeLoop and return the result to the caller to Connect.
1874 DCHECK(next_handshake_state_ == STATE_NONE); 1907 DCHECK(next_handshake_state_ == STATE_NONE);
1875 return result; 1908 return result;
1876 } 1909 }
1877 1910
(...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after
2722 valid_thread_id_ = base::PlatformThread::CurrentId(); 2755 valid_thread_id_ = base::PlatformThread::CurrentId();
2723 } 2756 }
2724 2757
2725 bool SSLClientSocketNSS::CalledOnValidThread() const { 2758 bool SSLClientSocketNSS::CalledOnValidThread() const {
2726 EnsureThreadIdAssigned(); 2759 EnsureThreadIdAssigned();
2727 base::AutoLock auto_lock(lock_); 2760 base::AutoLock auto_lock(lock_);
2728 return valid_thread_id_ == base::PlatformThread::CurrentId(); 2761 return valid_thread_id_ == base::PlatformThread::CurrentId();
2729 } 2762 }
2730 2763
2731 } // namespace net 2764 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_nss.h ('k') | net/socket/ssl_client_socket_openssl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698