Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "net/quic/quic_client_session.h" | 5 #include "net/quic/quic_client_session.h" |
| 6 | 6 |
| 7 #include "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/metrics/sparse_histogram.h" | 10 #include "base/metrics/sparse_histogram.h" |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 164 NetLog* net_log) | 164 NetLog* net_log) |
| 165 : QuicClientSessionBase(connection, config), | 165 : QuicClientSessionBase(connection, config), |
| 166 require_confirmation_(false), | 166 require_confirmation_(false), |
| 167 stream_factory_(stream_factory), | 167 stream_factory_(stream_factory), |
| 168 socket_(socket.Pass()), | 168 socket_(socket.Pass()), |
| 169 read_buffer_(new IOBufferWithSize(kMaxPacketSize)), | 169 read_buffer_(new IOBufferWithSize(kMaxPacketSize)), |
| 170 transport_security_state_(transport_security_state), | 170 transport_security_state_(transport_security_state), |
| 171 server_info_(server_info.Pass()), | 171 server_info_(server_info.Pass()), |
| 172 read_pending_(false), | 172 read_pending_(false), |
| 173 num_total_streams_(0), | 173 num_total_streams_(0), |
| 174 number_of_handshakes_(0), | |
| 174 task_runner_(task_runner), | 175 task_runner_(task_runner), |
| 175 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_QUIC_SESSION)), | 176 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_QUIC_SESSION)), |
| 176 dns_resolution_end_time_(dns_resolution_end_time), | 177 dns_resolution_end_time_(dns_resolution_end_time), |
| 177 logger_(new QuicConnectionLogger(this, connection_description, net_log_)), | 178 logger_(new QuicConnectionLogger(this, connection_description, net_log_)), |
| 178 num_packets_read_(0), | 179 num_packets_read_(0), |
| 179 going_away_(false), | 180 going_away_(false), |
| 180 weak_factory_(this) { | 181 weak_factory_(this) { |
| 181 connection->set_debug_visitor(logger_.get()); | 182 connection->set_debug_visitor(logger_.get()); |
| 182 IPEndPoint address; | 183 IPEndPoint address; |
| 183 if (socket && socket->GetLocalAddress(&address) == OK && | 184 if (socket && socket->GetLocalAddress(&address) == OK && |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 529 return ERR_QUIC_HANDSHAKE_FAILED; | 530 return ERR_QUIC_HANDSHAKE_FAILED; |
| 530 | 531 |
| 531 callback_ = callback; | 532 callback_ = callback; |
| 532 return ERR_IO_PENDING; | 533 return ERR_IO_PENDING; |
| 533 } | 534 } |
| 534 | 535 |
| 535 int QuicClientSession::GetNumSentClientHellos() const { | 536 int QuicClientSession::GetNumSentClientHellos() const { |
| 536 return crypto_stream_->num_sent_client_hellos(); | 537 return crypto_stream_->num_sent_client_hellos(); |
| 537 } | 538 } |
| 538 | 539 |
| 540 int QuicClientSession::PacketLossRate() const { | |
| 541 return logger_->PacketLossRate(); | |
| 542 } | |
| 543 | |
| 539 bool QuicClientSession::CanPool(const std::string& hostname, | 544 bool QuicClientSession::CanPool(const std::string& hostname, |
| 540 PrivacyMode privacy_mode) const { | 545 PrivacyMode privacy_mode) const { |
| 541 DCHECK(connection()->connected()); | 546 DCHECK(connection()->connected()); |
| 542 if (privacy_mode != server_id_.privacy_mode()) { | 547 if (privacy_mode != server_id_.privacy_mode()) { |
| 543 // Privacy mode must always match. | 548 // Privacy mode must always match. |
| 544 return false; | 549 return false; |
| 545 } | 550 } |
| 546 SSLInfo ssl_info; | 551 SSLInfo ssl_info; |
| 547 if (!GetSSLInfo(&ssl_info) || !ssl_info.cert.get()) { | 552 if (!GetSSLInfo(&ssl_info) || !ssl_info.cert.get()) { |
| 548 // We can always pool with insecure QUIC sessions. | 553 // We can always pool with insecure QUIC sessions. |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 613 // for reading of QUIC server information from disk cache. We could use | 618 // for reading of QUIC server information from disk cache. We could use |
| 614 // this data to compare total time taken if we were to cancel the disk | 619 // this data to compare total time taken if we were to cancel the disk |
| 615 // cache read vs waiting for the read to complete. | 620 // cache read vs waiting for the read to complete. |
| 616 base::TimeTicks wait_for_data_start_time = | 621 base::TimeTicks wait_for_data_start_time = |
| 617 server_info_->wait_for_data_start_time(); | 622 server_info_->wait_for_data_start_time(); |
| 618 if (!wait_for_data_start_time.is_null()) { | 623 if (!wait_for_data_start_time.is_null()) { |
| 619 UMA_HISTOGRAM_TIMES( | 624 UMA_HISTOGRAM_TIMES( |
| 620 "Net.QuicServerInfo.WaitForDataReady.HandshakeConfirmedTime", | 625 "Net.QuicServerInfo.WaitForDataReady.HandshakeConfirmedTime", |
| 621 base::TimeTicks::Now() - wait_for_data_start_time); | 626 base::TimeTicks::Now() - wait_for_data_start_time); |
| 622 } | 627 } |
| 628 | |
| 629 // TODO(rtenneti): Handle ERROR condition from OnCryptoHandshakeCompleted. | |
| 630 ++number_of_handshakes_; | |
|
Ryan Hamilton
2015/03/21 00:04:46
I'm not sure that I understand what this member do
ramant (doing other things)
2015/03/21 03:46:05
Done.
| |
| 631 stream_factory_->OnCryptoHandshakeCompleted(this, server_id_, | |
| 632 number_of_handshakes_); | |
| 623 } | 633 } |
| 634 | |
| 624 // Track how long it has taken to finish handshake after we have finished | 635 // Track how long it has taken to finish handshake after we have finished |
| 625 // DNS host resolution. | 636 // DNS host resolution. |
| 626 if (!dns_resolution_end_time_.is_null()) { | 637 if (!dns_resolution_end_time_.is_null()) { |
| 627 UMA_HISTOGRAM_TIMES( | 638 UMA_HISTOGRAM_TIMES( |
| 628 "Net.QuicSession.HostResolution.HandshakeConfirmedTime", | 639 "Net.QuicSession.HostResolution.HandshakeConfirmedTime", |
| 629 base::TimeTicks::Now() - dns_resolution_end_time_); | 640 base::TimeTicks::Now() - dns_resolution_end_time_); |
| 630 } | 641 } |
| 631 | 642 |
| 632 ObserverSet::iterator it = observers_.begin(); | 643 ObserverSet::iterator it = observers_.begin(); |
| 633 while (it != observers_.end()) { | 644 while (it != observers_.end()) { |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 939 stream_factory_->OnSessionClosed(this); | 950 stream_factory_->OnSessionClosed(this); |
| 940 } | 951 } |
| 941 | 952 |
| 942 void QuicClientSession::OnConnectTimeout() { | 953 void QuicClientSession::OnConnectTimeout() { |
| 943 DCHECK(callback_.is_null()); | 954 DCHECK(callback_.is_null()); |
| 944 DCHECK(IsEncryptionEstablished()); | 955 DCHECK(IsEncryptionEstablished()); |
| 945 | 956 |
| 946 if (IsCryptoHandshakeConfirmed()) | 957 if (IsCryptoHandshakeConfirmed()) |
| 947 return; | 958 return; |
| 948 | 959 |
| 960 ++number_of_handshakes_; | |
| 961 stream_factory_->OnCryptoHandshakeCompleted(this, server_id_, | |
| 962 number_of_handshakes_); | |
| 949 // TODO(rch): re-enable this code once beta is cut. | 963 // TODO(rch): re-enable this code once beta is cut. |
| 950 // if (stream_factory_) | 964 // if (stream_factory_) |
| 951 // stream_factory_->OnSessionConnectTimeout(this); | 965 // stream_factory_->OnSessionConnectTimeout(this); |
| 952 // CloseAllStreams(ERR_QUIC_HANDSHAKE_FAILED); | 966 // CloseAllStreams(ERR_QUIC_HANDSHAKE_FAILED); |
| 953 // DCHECK_EQ(0u, GetNumOpenStreams()); | 967 // DCHECK_EQ(0u, GetNumOpenStreams()); |
| 954 } | 968 } |
| 955 | 969 |
| 956 } // namespace net | 970 } // namespace net |
| OLD | NEW |