diff options
Diffstat (limited to 'chromium/net/quic/quic_chromium_client_session.cc')
-rw-r--r-- | chromium/net/quic/quic_chromium_client_session.cc | 84 |
1 files changed, 44 insertions, 40 deletions
diff --git a/chromium/net/quic/quic_chromium_client_session.cc b/chromium/net/quic/quic_chromium_client_session.cc index afb07468ecf..25f7224f2ca 100644 --- a/chromium/net/quic/quic_chromium_client_session.cc +++ b/chromium/net/quic/quic_chromium_client_session.cc @@ -8,12 +8,13 @@ #include "base/callback_helpers.h" #include "base/location.h" +#include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/sparse_histogram.h" #include "base/single_thread_task_runner.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" -#include "base/thread_task_runner_handle.h" +#include "base/threading/thread_task_runner_handle.h" #include "base/values.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h" @@ -54,7 +55,7 @@ const size_t kMaxReadersPerQuicSession = 5; // Size of the MRU cache of Token Binding signatures. Since the material being // signed is constant and there aren't many keys being used to sign, a fairly // small number was chosen, somewhat arbitrarily, and to match -// SSLClientSocketOpenssl. +// SSLClientSocketImpl. const size_t kTokenBindingSignatureMapSize = 10; // Histograms for tracking down the crashes from http://crbug.com/354669 @@ -115,12 +116,12 @@ void RecordHandshakeState(HandshakeState state) { NUM_HANDSHAKE_STATES); } -scoped_ptr<base::Value> NetLogQuicClientSessionCallback( +std::unique_ptr<base::Value> NetLogQuicClientSessionCallback( const QuicServerId* server_id, int cert_verify_flags, bool require_confirmation, NetLogCaptureMode /* capture_mode */) { - scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); + std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); dict->SetString("host", server_id->host()); dict->SetInteger("port", server_id->port()); dict->SetBoolean("privacy_mode", @@ -130,26 +131,13 @@ scoped_ptr<base::Value> NetLogQuicClientSessionCallback( return std::move(dict); } -scoped_ptr<base::ListValue> SpdyHeaderBlockToListValue( - const SpdyHeaderBlock& headers, - NetLogCaptureMode capture_mode) { - scoped_ptr<base::ListValue> headers_list(new base::ListValue()); - for (const auto& it : headers) { - headers_list->AppendString( - it.first.as_string() + ": " + - ElideHeaderValueForNetLog(capture_mode, it.first.as_string(), - it.second.as_string())); - } - return headers_list; -} - -scoped_ptr<base::Value> NetLogQuicPushPromiseReceivedCallback( +std::unique_ptr<base::Value> NetLogQuicPushPromiseReceivedCallback( const SpdyHeaderBlock* headers, SpdyStreamId stream_id, SpdyStreamId promised_stream_id, NetLogCaptureMode capture_mode) { - scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); - dict->Set("headers", SpdyHeaderBlockToListValue(*headers, capture_mode)); + std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); + dict->Set("headers", ElideSpdyHeaderBlockForNetLog(*headers, capture_mode)); dict->SetInteger("id", stream_id); dict->SetInteger("promised_stream_id", promised_stream_id); return std::move(dict); @@ -199,12 +187,12 @@ void QuicChromiumClientSession::StreamRequest::OnRequestCompleteFailure( QuicChromiumClientSession::QuicChromiumClientSession( QuicConnection* connection, - scoped_ptr<DatagramClientSocket> socket, + std::unique_ptr<DatagramClientSocket> socket, QuicStreamFactory* stream_factory, QuicCryptoClientStreamFactory* crypto_client_stream_factory, QuicClock* clock, TransportSecurityState* transport_security_state, - scoped_ptr<QuicServerInfo> server_info, + std::unique_ptr<QuicServerInfo> server_info, const QuicServerId& server_id, int yield_after_packets, QuicTime::Delta yield_after_duration, @@ -215,7 +203,7 @@ QuicChromiumClientSession::QuicChromiumClientSession( base::TimeTicks dns_resolution_end_time, QuicClientPushPromiseIndex* push_promise_index, base::TaskRunner* task_runner, - scoped_ptr<SocketPerformanceWatcher> socket_performance_watcher, + std::unique_ptr<SocketPerformanceWatcher> socket_performance_watcher, NetLog* net_log) : QuicClientSessionBase(connection, push_promise_index, config), server_id_(server_id), @@ -239,12 +227,12 @@ QuicChromiumClientSession::QuicChromiumClientSession( streams_pushed_and_claimed_count_(0), weak_factory_(this) { sockets_.push_back(std::move(socket)); - packet_readers_.push_back(make_scoped_ptr(new QuicChromiumPacketReader( + packet_readers_.push_back(base::WrapUnique(new QuicChromiumPacketReader( sockets_.back().get(), clock, this, yield_after_packets, yield_after_duration, net_log_))); crypto_stream_.reset( crypto_client_stream_factory->CreateQuicCryptoClientStream( - server_id, this, make_scoped_ptr(new ProofVerifyContextChromium( + server_id, this, base::WrapUnique(new ProofVerifyContextChromium( cert_verify_flags, net_log_)), crypto_config)); connection->set_debug_visitor(logger_.get()); @@ -321,10 +309,7 @@ QuicChromiumClientSession::~QuicChromiumClientSession() { SSLInfo ssl_info; // QUIC supports only secure urls. if (GetSSLInfo(&ssl_info) && ssl_info.cert.get()) { - if (port_selected) { - UMA_HISTOGRAM_CUSTOM_COUNTS("Net.QuicSession.ConnectSelectPortForHTTPS", - round_trip_handshakes, 0, 3, 4); - } else { + if (!port_selected) { UMA_HISTOGRAM_CUSTOM_COUNTS("Net.QuicSession.ConnectRandomPortForHTTPS", round_trip_handshakes, 0, 3, 4); if (require_confirmation_) { @@ -695,7 +680,7 @@ QuicChromiumClientSession::CreateIncomingReliableStreamImpl(QuicStreamId id) { } void QuicChromiumClientSession::CloseStream(QuicStreamId stream_id) { - ReliableQuicStream* stream = GetStream(stream_id); + ReliableQuicStream* stream = GetOrCreateStream(stream_id); if (stream) { logger_->UpdateReceivedFrameCounts(stream_id, stream->num_frames_received(), stream->num_duplicate_frames_received()); @@ -720,7 +705,7 @@ void QuicChromiumClientSession::OnClosedStream() { request->OnRequestCompleteSuccess(CreateOutgoingReliableStreamImpl()); } - if (GetNumOpenOutgoingStreams() == 0) { + if (GetNumOpenOutgoingStreams() == 0 && stream_factory_) { stream_factory_->OnIdleSession(this); } } @@ -817,6 +802,12 @@ void QuicChromiumClientSession::OnConnectionClosed( UMA_HISTOGRAM_SPARSE_SLOWLY( "Net.QuicSession.ConnectionCloseErrorCodeServer.HandshakeConfirmed", error); + base::HistogramBase* histogram = base::SparseHistogram::FactoryGet( + "Net.QuicSession.StreamCloseErrorCodeServer.HandshakeConfirmed", + base::HistogramBase::kUmaTargetedHistogramFlag); + size_t num_streams = GetNumActiveStreams(); + if (num_streams > 0) + histogram->AddCount(error, num_streams); } UMA_HISTOGRAM_SPARSE_SLOWLY( "Net.QuicSession.ConnectionCloseErrorCodeServer", error); @@ -825,6 +816,12 @@ void QuicChromiumClientSession::OnConnectionClosed( UMA_HISTOGRAM_SPARSE_SLOWLY( "Net.QuicSession.ConnectionCloseErrorCodeClient.HandshakeConfirmed", error); + base::HistogramBase* histogram = base::SparseHistogram::FactoryGet( + "Net.QuicSession.StreamCloseErrorCodeClient.HandshakeConfirmed", + base::HistogramBase::kUmaTargetedHistogramFlag); + size_t num_streams = GetNumActiveStreams(); + if (num_streams > 0) + histogram->AddCount(error, num_streams); } UMA_HISTOGRAM_SPARSE_SLOWLY( "Net.QuicSession.ConnectionCloseErrorCodeClient", error); @@ -912,7 +909,14 @@ void QuicChromiumClientSession::OnSuccessfulVersionNegotiation( } void QuicChromiumClientSession::OnPathDegrading() { - stream_factory_->MaybeMigrateSessionEarly(this); + if (stream_factory_) { + stream_factory_->MaybeMigrateSessionEarly(this); + } +} + +bool QuicChromiumClientSession::HasOpenDynamicStreams() const { + return QuicSession::HasOpenDynamicStreams() || + GetNumDrainingOutgoingStreams() > 0; } void QuicChromiumClientSession::OnProofValid( @@ -942,7 +946,7 @@ void QuicChromiumClientSession::OnProofVerifyDetailsAvailable( cert_verify_result_.reset(new CertVerifyResult); cert_verify_result_->CopyFrom(verify_details_chromium->cert_verify_result); pinning_failure_log_ = verify_details_chromium->pinning_failure_log; - scoped_ptr<ct::CTVerifyResult> ct_verify_result_copy( + std::unique_ptr<ct::CTVerifyResult> ct_verify_result_copy( new ct::CTVerifyResult(verify_details_chromium->ct_verify_result)); ct_verify_result_ = std::move(ct_verify_result_copy); logger_->OnCertificateVerified(*cert_verify_result_); @@ -1008,12 +1012,12 @@ void QuicChromiumClientSession::CloseAllObservers(int net_error) { } } -scoped_ptr<base::Value> QuicChromiumClientSession::GetInfoAsValue( +std::unique_ptr<base::Value> QuicChromiumClientSession::GetInfoAsValue( const std::set<HostPortPair>& aliases) { - scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); + std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); dict->SetString("version", QuicVersionToString(connection()->version())); dict->SetInteger("open_streams", GetNumOpenOutgoingStreams()); - scoped_ptr<base::ListValue> stream_list(new base::ListValue()); + std::unique_ptr<base::ListValue> stream_list(new base::ListValue()); for (StreamMap::const_iterator it = dynamic_streams().begin(); it != dynamic_streams().end(); ++it) { stream_list->Append( @@ -1032,7 +1036,7 @@ scoped_ptr<base::Value> QuicChromiumClientSession::GetInfoAsValue( SSLInfo ssl_info; dict->SetBoolean("secure", GetSSLInfo(&ssl_info) && ssl_info.cert.get()); - scoped_ptr<base::ListValue> alias_list(new base::ListValue()); + std::unique_ptr<base::ListValue> alias_list(new base::ListValue()); for (std::set<HostPortPair>::const_iterator it = aliases.begin(); it != aliases.end(); it++) { alias_list->Append(new base::StringValue(it->ToString())); @@ -1125,9 +1129,9 @@ void QuicChromiumClientSession::OnConnectTimeout() { } bool QuicChromiumClientSession::MigrateToSocket( - scoped_ptr<DatagramClientSocket> socket, - scoped_ptr<QuicChromiumPacketReader> reader, - scoped_ptr<QuicPacketWriter> writer) { + std::unique_ptr<DatagramClientSocket> socket, + std::unique_ptr<QuicChromiumPacketReader> reader, + std::unique_ptr<QuicPacketWriter> writer) { DCHECK_EQ(sockets_.size(), packet_readers_.size()); if (sockets_.size() >= kMaxReadersPerQuicSession) { return false; |