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

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

Issue 8824006: Migrate net/socket/socket.h, net/socket/stream_socket.h to base::Bind(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased 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 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 return r; 425 return r;
426 } 426 }
427 427
428 } // namespace 428 } // namespace
429 429
430 SSLClientSocketNSS::SSLClientSocketNSS(ClientSocketHandle* transport_socket, 430 SSLClientSocketNSS::SSLClientSocketNSS(ClientSocketHandle* transport_socket,
431 const HostPortPair& host_and_port, 431 const HostPortPair& host_and_port,
432 const SSLConfig& ssl_config, 432 const SSLConfig& ssl_config,
433 SSLHostInfo* ssl_host_info, 433 SSLHostInfo* ssl_host_info,
434 const SSLClientSocketContext& context) 434 const SSLClientSocketContext& context)
435 : ALLOW_THIS_IN_INITIALIZER_LIST(buffer_send_callback_( 435 : transport_send_busy_(false),
436 this, &SSLClientSocketNSS::BufferSendComplete)),
437 ALLOW_THIS_IN_INITIALIZER_LIST(buffer_recv_callback_(
438 this, &SSLClientSocketNSS::BufferRecvComplete)),
439 transport_send_busy_(false),
440 transport_recv_busy_(false), 436 transport_recv_busy_(false),
441 corked_(false), 437 corked_(false),
442 ALLOW_THIS_IN_INITIALIZER_LIST(handshake_io_callback_(
443 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete,
444 base::Unretained(this)))),
445 transport_(transport_socket), 438 transport_(transport_socket),
446 host_and_port_(host_and_port), 439 host_and_port_(host_and_port),
447 ssl_config_(ssl_config), 440 ssl_config_(ssl_config),
448 old_user_connect_callback_(NULL),
449 old_user_read_callback_(NULL),
450 user_write_callback_(NULL),
451 user_read_buf_len_(0), 441 user_read_buf_len_(0),
452 user_write_buf_len_(0), 442 user_write_buf_len_(0),
453 server_cert_nss_(NULL), 443 server_cert_nss_(NULL),
454 server_cert_verify_result_(NULL), 444 server_cert_verify_result_(NULL),
455 ssl_connection_status_(0), 445 ssl_connection_status_(0),
456 client_auth_cert_needed_(false), 446 client_auth_cert_needed_(false),
457 cert_verifier_(context.cert_verifier), 447 cert_verifier_(context.cert_verifier),
458 ob_cert_xtn_negotiated_(false), 448 ob_cert_xtn_negotiated_(false),
459 origin_bound_cert_service_(context.origin_bound_cert_service), 449 origin_bound_cert_service_(context.origin_bound_cert_service),
460 ob_cert_request_handle_(NULL), 450 ob_cert_request_handle_(NULL),
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 } 553 }
564 554
565 SSLClientSocket::NextProtoStatus 555 SSLClientSocket::NextProtoStatus
566 SSLClientSocketNSS::GetNextProto(std::string* proto, 556 SSLClientSocketNSS::GetNextProto(std::string* proto,
567 std::string* server_protos) { 557 std::string* server_protos) {
568 *proto = next_proto_; 558 *proto = next_proto_;
569 *server_protos = server_protos_; 559 *server_protos = server_protos_;
570 return next_proto_status_; 560 return next_proto_status_;
571 } 561 }
572 562
573 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) {
574 EnterFunction("");
575 DCHECK(transport_.get());
576 DCHECK(next_handshake_state_ == STATE_NONE);
577 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
578 DCHECK(!user_write_callback_);
579 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
580 DCHECK(!user_read_buf_);
581 DCHECK(!user_write_buf_);
582
583 EnsureThreadIdAssigned();
584
585 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
586
587 int rv = Init();
588 if (rv != OK) {
589 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
590 return rv;
591 }
592
593 rv = InitializeSSLOptions();
594 if (rv != OK) {
595 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
596 return rv;
597 }
598
599 rv = InitializeSSLPeerName();
600 if (rv != OK) {
601 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
602 return rv;
603 }
604
605 if (ssl_config_.cached_info_enabled && ssl_host_info_.get()) {
606 GotoState(STATE_LOAD_SSL_HOST_INFO);
607 } else {
608 GotoState(STATE_HANDSHAKE);
609 }
610
611 rv = DoHandshakeLoop(OK);
612 if (rv == ERR_IO_PENDING) {
613 old_user_connect_callback_ = callback;
614 } else {
615 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
616 }
617
618 LeaveFunction("");
619 return rv > OK ? OK : rv;
620 }
621 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) { 563 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) {
622 EnterFunction(""); 564 EnterFunction("");
623 DCHECK(transport_.get()); 565 DCHECK(transport_.get());
624 DCHECK(next_handshake_state_ == STATE_NONE); 566 DCHECK(next_handshake_state_ == STATE_NONE);
625 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); 567 DCHECK(user_read_callback_.is_null());
626 DCHECK(!user_write_callback_); 568 DCHECK(user_write_callback_.is_null());
627 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 569 DCHECK(user_connect_callback_.is_null());
628 DCHECK(!user_read_buf_); 570 DCHECK(!user_read_buf_);
629 DCHECK(!user_write_buf_); 571 DCHECK(!user_write_buf_);
630 572
631 EnsureThreadIdAssigned(); 573 EnsureThreadIdAssigned();
632 574
633 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 575 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
634 576
635 int rv = Init(); 577 int rv = Init();
636 if (rv != OK) { 578 if (rv != OK) {
637 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); 579 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
(...skipping 27 matching lines...) Expand all
665 607
666 LeaveFunction(""); 608 LeaveFunction("");
667 return rv > OK ? OK : rv; 609 return rv > OK ? OK : rv;
668 } 610 }
669 611
670 void SSLClientSocketNSS::Disconnect() { 612 void SSLClientSocketNSS::Disconnect() {
671 EnterFunction(""); 613 EnterFunction("");
672 614
673 CHECK(CalledOnValidThread()); 615 CHECK(CalledOnValidThread());
674 616
675 // Shut down anything that may call us back (through buffer_send_callback_, 617 // Shut down anything that may call us back.
676 // buffer_recv_callback, or handshake_io_callback_).
677 verifier_.reset(); 618 verifier_.reset();
678 transport_->socket()->Disconnect(); 619 transport_->socket()->Disconnect();
679 620
680 if (ob_cert_request_handle_ != NULL) { 621 if (ob_cert_request_handle_ != NULL) {
681 origin_bound_cert_service_->CancelRequest(ob_cert_request_handle_); 622 origin_bound_cert_service_->CancelRequest(ob_cert_request_handle_);
682 ob_cert_request_handle_ = NULL; 623 ob_cert_request_handle_ = NULL;
683 } 624 }
684 625
685 // TODO(wtc): Send SSL close_notify alert. 626 // TODO(wtc): Send SSL close_notify alert.
686 if (nss_fd_ != NULL) { 627 if (nss_fd_ != NULL) {
687 PR_Close(nss_fd_); 628 PR_Close(nss_fd_);
688 nss_fd_ = NULL; 629 nss_fd_ = NULL;
689 } 630 }
690 631
691 // Reset object state 632 // Reset object state.
633 user_connect_callback_.Reset();
634 user_read_callback_.Reset();
635 user_write_callback_.Reset();
692 transport_send_busy_ = false; 636 transport_send_busy_ = false;
693 transport_recv_busy_ = false; 637 transport_recv_busy_ = false;
694 old_user_connect_callback_ = NULL;
695 user_connect_callback_.Reset();
696 old_user_read_callback_ = NULL;
697 user_read_callback_.Reset();
698 user_write_callback_ = NULL;
699 user_read_buf_ = NULL; 638 user_read_buf_ = NULL;
700 user_read_buf_len_ = 0; 639 user_read_buf_len_ = 0;
701 user_write_buf_ = NULL; 640 user_write_buf_ = NULL;
702 user_write_buf_len_ = 0; 641 user_write_buf_len_ = 0;
703 server_cert_ = NULL; 642 server_cert_ = NULL;
704 if (server_cert_nss_) { 643 if (server_cert_nss_) {
705 CERT_DestroyCertificate(server_cert_nss_); 644 CERT_DestroyCertificate(server_cert_nss_);
706 server_cert_nss_ = NULL; 645 server_cert_nss_ = NULL;
707 } 646 }
708 local_server_cert_verify_result_.Reset(); 647 local_server_cert_verify_result_.Reset();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 742
804 base::TimeDelta SSLClientSocketNSS::GetConnectTimeMicros() const { 743 base::TimeDelta SSLClientSocketNSS::GetConnectTimeMicros() const {
805 if (transport_.get() && transport_->socket()) { 744 if (transport_.get() && transport_->socket()) {
806 return transport_->socket()->GetConnectTimeMicros(); 745 return transport_->socket()->GetConnectTimeMicros();
807 } 746 }
808 NOTREACHED(); 747 NOTREACHED();
809 return base::TimeDelta::FromMicroseconds(-1); 748 return base::TimeDelta::FromMicroseconds(-1);
810 } 749 }
811 750
812 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len, 751 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len,
813 OldCompletionCallback* callback) {
814 EnterFunction(buf_len);
815 DCHECK(completed_handshake_);
816 DCHECK(next_handshake_state_ == STATE_NONE);
817 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
818 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
819 DCHECK(!user_read_buf_);
820 DCHECK(nss_bufs_);
821
822 user_read_buf_ = buf;
823 user_read_buf_len_ = buf_len;
824
825 int rv = DoReadLoop(OK);
826
827 if (rv == ERR_IO_PENDING) {
828 old_user_read_callback_ = callback;
829 } else {
830 user_read_buf_ = NULL;
831 user_read_buf_len_ = 0;
832 }
833 LeaveFunction(rv);
834 return rv;
835 }
836 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len,
837 const CompletionCallback& callback) { 752 const CompletionCallback& callback) {
838 EnterFunction(buf_len); 753 EnterFunction(buf_len);
839 DCHECK(completed_handshake_); 754 DCHECK(completed_handshake_);
840 DCHECK(next_handshake_state_ == STATE_NONE); 755 DCHECK(next_handshake_state_ == STATE_NONE);
841 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); 756 DCHECK(user_read_callback_.is_null());
842 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 757 DCHECK(user_connect_callback_.is_null());
843 DCHECK(!user_read_buf_); 758 DCHECK(!user_read_buf_);
844 DCHECK(nss_bufs_); 759 DCHECK(nss_bufs_);
845 760
846 user_read_buf_ = buf; 761 user_read_buf_ = buf;
847 user_read_buf_len_ = buf_len; 762 user_read_buf_len_ = buf_len;
848 763
849 int rv = DoReadLoop(OK); 764 int rv = DoReadLoop(OK);
850 765
851 if (rv == ERR_IO_PENDING) { 766 if (rv == ERR_IO_PENDING) {
852 user_read_callback_ = callback; 767 user_read_callback_ = callback;
853 } else { 768 } else {
854 user_read_buf_ = NULL; 769 user_read_buf_ = NULL;
855 user_read_buf_len_ = 0; 770 user_read_buf_len_ = 0;
856 } 771 }
857 LeaveFunction(rv); 772 LeaveFunction(rv);
858 return rv; 773 return rv;
859 } 774 }
860 775
861 int SSLClientSocketNSS::Write(IOBuffer* buf, int buf_len, 776 int SSLClientSocketNSS::Write(IOBuffer* buf, int buf_len,
862 OldCompletionCallback* callback) { 777 const CompletionCallback& callback) {
863 EnterFunction(buf_len); 778 EnterFunction(buf_len);
864 DCHECK(completed_handshake_); 779 DCHECK(completed_handshake_);
865 DCHECK(next_handshake_state_ == STATE_NONE); 780 DCHECK(next_handshake_state_ == STATE_NONE);
866 DCHECK(!user_write_callback_); 781 DCHECK(user_write_callback_.is_null());
867 DCHECK(!old_user_connect_callback_); 782 DCHECK(user_connect_callback_.is_null());
868 DCHECK(!user_write_buf_); 783 DCHECK(!user_write_buf_);
869 DCHECK(nss_bufs_); 784 DCHECK(nss_bufs_);
870 785
871 user_write_buf_ = buf; 786 user_write_buf_ = buf;
872 user_write_buf_len_ = buf_len; 787 user_write_buf_len_ = buf_len;
873 788
874 if (corked_) { 789 if (corked_) {
875 corked_ = false; 790 corked_ = false;
876 uncork_timer_.Reset(); 791 uncork_timer_.Reset();
877 } 792 }
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
1216 } 1131 }
1217 #endif 1132 #endif
1218 1133
1219 if (ssl_config_.ssl3_fallback) 1134 if (ssl_config_.ssl3_fallback)
1220 ssl_connection_status_ |= SSL_CONNECTION_SSL3_FALLBACK; 1135 ssl_connection_status_ |= SSL_CONNECTION_SSL3_FALLBACK;
1221 } 1136 }
1222 1137
1223 void SSLClientSocketNSS::DoReadCallback(int rv) { 1138 void SSLClientSocketNSS::DoReadCallback(int rv) {
1224 EnterFunction(rv); 1139 EnterFunction(rv);
1225 DCHECK(rv != ERR_IO_PENDING); 1140 DCHECK(rv != ERR_IO_PENDING);
1226 DCHECK(old_user_read_callback_ || user_read_callback_.is_null()); 1141 DCHECK(!user_read_callback_.is_null());
1227 1142
1228 // Since Run may result in Read being called, clear |old_user_read_callback_| 1143 // Since Run may result in Read being called, clear |user_read_callback_|
1229 // up front. 1144 // up front.
1230 if (old_user_read_callback_) { 1145 CompletionCallback c = user_read_callback_;
1231 OldCompletionCallback* c = old_user_read_callback_; 1146 user_read_callback_.Reset();
1232 old_user_read_callback_ = NULL; 1147 user_read_buf_ = NULL;
1233 user_read_buf_ = NULL; 1148 user_read_buf_len_ = 0;
1234 user_read_buf_len_ = 0; 1149 c.Run(rv);
1235 c->Run(rv);
1236 } else {
1237 CompletionCallback c = user_read_callback_;
1238 user_read_callback_.Reset();
1239 user_read_buf_ = NULL;
1240 user_read_buf_len_ = 0;
1241 c.Run(rv);
1242 }
1243 LeaveFunction(""); 1150 LeaveFunction("");
1244 } 1151 }
1245 1152
1246 void SSLClientSocketNSS::DoWriteCallback(int rv) { 1153 void SSLClientSocketNSS::DoWriteCallback(int rv) {
1247 EnterFunction(rv); 1154 EnterFunction(rv);
1248 DCHECK(rv != ERR_IO_PENDING); 1155 DCHECK(rv != ERR_IO_PENDING);
1249 DCHECK(user_write_callback_); 1156 DCHECK(!user_write_callback_.is_null());
1250 1157
1251 // Since Run may result in Write being called, clear |user_write_callback_| 1158 // Since Run may result in Write being called, clear |user_write_callback_|
1252 // up front. 1159 // up front.
1253 OldCompletionCallback* c = user_write_callback_; 1160 CompletionCallback c = user_write_callback_;
1254 user_write_callback_ = NULL; 1161 user_write_callback_.Reset();
1255 user_write_buf_ = NULL; 1162 user_write_buf_ = NULL;
1256 user_write_buf_len_ = 0; 1163 user_write_buf_len_ = 0;
1257 c->Run(rv); 1164 c.Run(rv);
1258 LeaveFunction(""); 1165 LeaveFunction("");
1259 } 1166 }
1260 1167
1261 // As part of Connect(), the SSLClientSocketNSS object performs an SSL 1168 // As part of Connect(), the SSLClientSocketNSS object performs an SSL
1262 // handshake. This requires network IO, which in turn calls 1169 // handshake. This requires network IO, which in turn calls
1263 // BufferRecvComplete() with a non-zero byte count. This byte count eventually 1170 // BufferRecvComplete() with a non-zero byte count. This byte count eventually
1264 // winds its way through the state machine and ends up being passed to the 1171 // winds its way through the state machine and ends up being passed to the
1265 // callback. For Read() and Write(), that's what we want. But for Connect(), 1172 // callback. For Read() and Write(), that's what we want. But for Connect(),
1266 // the caller expects OK (i.e. 0) for success. 1173 // the caller expects OK (i.e. 0) for success.
1267 // 1174 //
1268 void SSLClientSocketNSS::DoConnectCallback(int rv) { 1175 void SSLClientSocketNSS::DoConnectCallback(int rv) {
1269 EnterFunction(rv); 1176 EnterFunction(rv);
1270 DCHECK_NE(rv, ERR_IO_PENDING); 1177 DCHECK_NE(rv, ERR_IO_PENDING);
1271 DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null()); 1178 DCHECK(!user_connect_callback_.is_null());
1272 1179
1273 if (old_user_connect_callback_) { 1180 CompletionCallback c = user_connect_callback_;
1274 OldCompletionCallback* c = old_user_connect_callback_; 1181 user_connect_callback_.Reset();
1275 old_user_connect_callback_ = NULL; 1182 c.Run(rv > OK ? OK : rv);
1276 c->Run(rv > OK ? OK : rv);
1277 } else {
1278 CompletionCallback c = user_connect_callback_;
1279 user_connect_callback_.Reset();
1280 c.Run(rv > OK ? OK : rv);
1281 }
1282 LeaveFunction(""); 1183 LeaveFunction("");
1283 } 1184 }
1284 1185
1285 void SSLClientSocketNSS::OnHandshakeIOComplete(int result) { 1186 void SSLClientSocketNSS::OnHandshakeIOComplete(int result) {
1286 EnterFunction(result); 1187 EnterFunction(result);
1287 int rv = DoHandshakeLoop(result); 1188 int rv = DoHandshakeLoop(result);
1288 if (rv != ERR_IO_PENDING) { 1189 if (rv != ERR_IO_PENDING) {
1289 net_log_.EndEventWithNetErrorCode(net::NetLog::TYPE_SSL_CONNECT, rv); 1190 net_log_.EndEventWithNetErrorCode(net::NetLog::TYPE_SSL_CONNECT, rv);
1290 DoConnectCallback(rv); 1191 DoConnectCallback(rv);
1291 } 1192 }
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
1476 1377
1477 rv = SSL_SetPredictedPeerCertificates(nss_fd_, certs.get(), certs_in.size()); 1378 rv = SSL_SetPredictedPeerCertificates(nss_fd_, certs.get(), certs_in.size());
1478 DestroyCertificates(&certs[0], certs_in.size()); 1379 DestroyCertificates(&certs[0], certs_in.size());
1479 DCHECK_EQ(SECSuccess, rv); 1380 DCHECK_EQ(SECSuccess, rv);
1480 1381
1481 return true; 1382 return true;
1482 } 1383 }
1483 1384
1484 int SSLClientSocketNSS::DoLoadSSLHostInfo() { 1385 int SSLClientSocketNSS::DoLoadSSLHostInfo() {
1485 EnterFunction(""); 1386 EnterFunction("");
1486 int rv = ssl_host_info_->WaitForDataReady(handshake_io_callback_); 1387 int rv = ssl_host_info_->WaitForDataReady(
1388 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete,
1389 base::Unretained(this)));
1487 GotoState(STATE_HANDSHAKE); 1390 GotoState(STATE_HANDSHAKE);
1488 1391
1489 if (rv == OK) { 1392 if (rv == OK) {
1490 if (!LoadSSLHostInfo()) 1393 if (!LoadSSLHostInfo())
1491 LOG(WARNING) << "LoadSSLHostInfo failed: " << host_and_port_.ToString(); 1394 LOG(WARNING) << "LoadSSLHostInfo failed: " << host_and_port_.ToString();
1492 } else { 1395 } else {
1493 DCHECK_EQ(ERR_IO_PENDING, rv); 1396 DCHECK_EQ(ERR_IO_PENDING, rv);
1494 GotoState(STATE_LOAD_SSL_HOST_INFO); 1397 GotoState(STATE_LOAD_SSL_HOST_INFO);
1495 } 1398 }
1496 1399
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
1779 // chain. So, if the prediction was correct, we should wait for that 1682 // chain. So, if the prediction was correct, we should wait for that
1780 // verification to finish rather than start our own. 1683 // verification to finish rather than start our own.
1781 net_log_.AddEvent(NetLog::TYPE_SSL_VERIFICATION_MERGED, NULL); 1684 net_log_.AddEvent(NetLog::TYPE_SSL_VERIFICATION_MERGED, NULL);
1782 UMA_HISTOGRAM_ENUMERATION("Net.SSLVerificationMerged", 1 /* true */, 2); 1685 UMA_HISTOGRAM_ENUMERATION("Net.SSLVerificationMerged", 1 /* true */, 2);
1783 base::TimeTicks end_time = ssl_host_info_->verification_end_time(); 1686 base::TimeTicks end_time = ssl_host_info_->verification_end_time();
1784 if (end_time.is_null()) 1687 if (end_time.is_null())
1785 end_time = base::TimeTicks::Now(); 1688 end_time = base::TimeTicks::Now();
1786 UMA_HISTOGRAM_TIMES("Net.SSLVerificationMergedMsSaved", 1689 UMA_HISTOGRAM_TIMES("Net.SSLVerificationMergedMsSaved",
1787 end_time - ssl_host_info_->verification_start_time()); 1690 end_time - ssl_host_info_->verification_start_time());
1788 server_cert_verify_result_ = &ssl_host_info_->cert_verify_result(); 1691 server_cert_verify_result_ = &ssl_host_info_->cert_verify_result();
1789 return ssl_host_info_->WaitForCertVerification(handshake_io_callback_); 1692 return ssl_host_info_->WaitForCertVerification(
1693 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete,
1694 base::Unretained(this)));
1790 } else { 1695 } else {
1791 UMA_HISTOGRAM_ENUMERATION("Net.SSLVerificationMerged", 0 /* false */, 2); 1696 UMA_HISTOGRAM_ENUMERATION("Net.SSLVerificationMerged", 0 /* false */, 2);
1792 } 1697 }
1793 1698
1794 int flags = 0; 1699 int flags = 0;
1795 if (ssl_config_.rev_checking_enabled) 1700 if (ssl_config_.rev_checking_enabled)
1796 flags |= X509Certificate::VERIFY_REV_CHECKING_ENABLED; 1701 flags |= X509Certificate::VERIFY_REV_CHECKING_ENABLED;
1797 if (ssl_config_.verify_ev_cert) 1702 if (ssl_config_.verify_ev_cert)
1798 flags |= X509Certificate::VERIFY_EV_CERT; 1703 flags |= X509Certificate::VERIFY_EV_CERT;
1799 verifier_.reset(new SingleRequestCertVerifier(cert_verifier_)); 1704 verifier_.reset(new SingleRequestCertVerifier(cert_verifier_));
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1882 // http://crbug.com/15630 for more info. 1787 // http://crbug.com/15630 for more info.
1883 1788
1884 // TODO(hclam): Skip logging if server cert was expected to be bad because 1789 // TODO(hclam): Skip logging if server cert was expected to be bad because
1885 // |server_cert_verify_result_| doesn't contain all the information about 1790 // |server_cert_verify_result_| doesn't contain all the information about
1886 // the cert. 1791 // the cert.
1887 if (result == OK) 1792 if (result == OK)
1888 LogConnectionTypeMetrics(); 1793 LogConnectionTypeMetrics();
1889 1794
1890 completed_handshake_ = true; 1795 completed_handshake_ = true;
1891 1796
1892 if (old_user_read_callback_ || !user_read_callback_.is_null()) { 1797 if (!user_read_callback_.is_null()) {
1893 int rv = DoReadLoop(OK); 1798 int rv = DoReadLoop(OK);
1894 if (rv != ERR_IO_PENDING) 1799 if (rv != ERR_IO_PENDING)
1895 DoReadCallback(rv); 1800 DoReadCallback(rv);
1896 } 1801 }
1897 1802
1898 //#if defined(OFFICIAL_BUILD) && !defined(OS_ANDROID) 1803 //#if defined(OFFICIAL_BUILD) && !defined(OS_ANDROID)
1899 // Take care of any mandates for public key pinning. 1804 // Take care of any mandates for public key pinning.
1900 // 1805 //
1901 // Pinning is only enabled for official builds to make sure that others don't 1806 // Pinning is only enabled for official builds to make sure that others don't
1902 // end up with pins that cannot be easily updated. 1807 // end up with pins that cannot be easily updated.
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
2099 const unsigned int len = len1 + len2; 2004 const unsigned int len = len1 + len2;
2100 2005
2101 if (corked_ && len < kRecvBufferSize / 2) 2006 if (corked_ && len < kRecvBufferSize / 2)
2102 return 0; 2007 return 0;
2103 2008
2104 int rv = 0; 2009 int rv = 0;
2105 if (len) { 2010 if (len) {
2106 scoped_refptr<IOBuffer> send_buffer(new IOBuffer(len)); 2011 scoped_refptr<IOBuffer> send_buffer(new IOBuffer(len));
2107 memcpy(send_buffer->data(), buf1, len1); 2012 memcpy(send_buffer->data(), buf1, len1);
2108 memcpy(send_buffer->data() + len1, buf2, len2); 2013 memcpy(send_buffer->data() + len1, buf2, len2);
2109 rv = transport_->socket()->Write(send_buffer, len, 2014 rv = transport_->socket()->Write(
2110 &buffer_send_callback_); 2015 send_buffer, len,
2016 base::Bind(&SSLClientSocketNSS::BufferSendComplete,
2017 base::Unretained(this)));
2111 if (rv == ERR_IO_PENDING) { 2018 if (rv == ERR_IO_PENDING) {
2112 transport_send_busy_ = true; 2019 transport_send_busy_ = true;
2113 } else { 2020 } else {
2114 memio_PutWriteResult(nss_bufs_, MapErrorToNSS(rv)); 2021 memio_PutWriteResult(nss_bufs_, MapErrorToNSS(rv));
2115 } 2022 }
2116 } 2023 }
2117 2024
2118 LeaveFunction(rv); 2025 LeaveFunction(rv);
2119 return rv; 2026 return rv;
2120 } 2027 }
(...skipping 11 matching lines...) Expand all
2132 2039
2133 char *buf; 2040 char *buf;
2134 int nb = memio_GetReadParams(nss_bufs_, &buf); 2041 int nb = memio_GetReadParams(nss_bufs_, &buf);
2135 EnterFunction(nb); 2042 EnterFunction(nb);
2136 int rv; 2043 int rv;
2137 if (!nb) { 2044 if (!nb) {
2138 // buffer too full to read into, so no I/O possible at moment 2045 // buffer too full to read into, so no I/O possible at moment
2139 rv = ERR_IO_PENDING; 2046 rv = ERR_IO_PENDING;
2140 } else { 2047 } else {
2141 recv_buffer_ = new IOBuffer(nb); 2048 recv_buffer_ = new IOBuffer(nb);
2142 rv = transport_->socket()->Read(recv_buffer_, nb, &buffer_recv_callback_); 2049 rv = transport_->socket()->Read(
2050 recv_buffer_, nb,
2051 base::Bind(&SSLClientSocketNSS::BufferRecvComplete,
2052 base::Unretained(this)));
2143 if (rv == ERR_IO_PENDING) { 2053 if (rv == ERR_IO_PENDING) {
2144 transport_recv_busy_ = true; 2054 transport_recv_busy_ = true;
2145 } else { 2055 } else {
2146 if (rv > 0) 2056 if (rv > 0)
2147 memcpy(buf, recv_buffer_->data(), rv); 2057 memcpy(buf, recv_buffer_->data(), rv);
2148 memio_PutReadResult(nss_bufs_, MapErrorToNSS(rv)); 2058 memio_PutReadResult(nss_bufs_, MapErrorToNSS(rv));
2149 recv_buffer_ = NULL; 2059 recv_buffer_ = NULL;
2150 } 2060 }
2151 } 2061 }
2152 LeaveFunction(rv); 2062 LeaveFunction(rv);
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after
2791 valid_thread_id_ = base::PlatformThread::CurrentId(); 2701 valid_thread_id_ = base::PlatformThread::CurrentId();
2792 } 2702 }
2793 2703
2794 bool SSLClientSocketNSS::CalledOnValidThread() const { 2704 bool SSLClientSocketNSS::CalledOnValidThread() const {
2795 EnsureThreadIdAssigned(); 2705 EnsureThreadIdAssigned();
2796 base::AutoLock auto_lock(lock_); 2706 base::AutoLock auto_lock(lock_);
2797 return valid_thread_id_ == base::PlatformThread::CurrentId(); 2707 return valid_thread_id_ == base::PlatformThread::CurrentId();
2798 } 2708 }
2799 2709
2800 } // namespace net 2710 } // 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