summaryrefslogtreecommitdiff
path: root/chromium/net/quic/quic_stream_factory.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/quic/quic_stream_factory.cc')
-rw-r--r--chromium/net/quic/quic_stream_factory.cc46
1 files changed, 27 insertions, 19 deletions
diff --git a/chromium/net/quic/quic_stream_factory.cc b/chromium/net/quic/quic_stream_factory.cc
index dd06a3085a0..2ce8734149b 100644
--- a/chromium/net/quic/quic_stream_factory.cc
+++ b/chromium/net/quic/quic_stream_factory.cc
@@ -17,6 +17,7 @@
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/no_destructor.h"
+#include "base/numerics/safe_conversions.h"
#include "base/single_thread_task_runner.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
@@ -71,6 +72,7 @@
#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
#include "third_party/boringssl/src/include/openssl/aead.h"
#include "url/gurl.h"
+#include "url/scheme_host_port.h"
#include "url/url_constants.h"
using NetworkHandle = net::NetworkChangeNotifier::NetworkHandle;
@@ -187,7 +189,8 @@ void SetInitialRttEstimate(base::TimeDelta estimate,
UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.InitialRttEsitmateSource", source,
INITIAL_RTT_SOURCE_MAX);
if (estimate != base::TimeDelta())
- config->SetInitialRoundTripTimeUsToSend(estimate.InMicroseconds());
+ config->SetInitialRoundTripTimeUsToSend(
+ base::checked_cast<uint64_t>(estimate.InMicroseconds()));
}
// An implementation of quic::QuicCryptoClientConfig::ServerIdFilter that wraps
@@ -971,7 +974,7 @@ QuicStreamRequest::~QuicStreamRequest() {
}
int QuicStreamRequest::Request(
- const HostPortPair& destination,
+ url::SchemeHostPort destination,
quic::ParsedQuicVersion quic_version,
PrivacyMode privacy_mode,
RequestPriority priority,
@@ -998,9 +1001,9 @@ int QuicStreamRequest::Request(
QuicSessionKey(HostPortPair::FromURL(url), privacy_mode, socket_tag,
network_isolation_key, secure_dns_policy);
- int rv =
- factory_->Create(session_key_, destination, quic_version, priority,
- use_dns_aliases, cert_verify_flags, url, net_log, this);
+ int rv = factory_->Create(session_key_, std::move(destination), quic_version,
+ priority, use_dns_aliases, cert_verify_flags, url,
+ net_log, this);
if (rv == ERR_IO_PENDING) {
net_log_ = net_log;
callback_ = std::move(callback);
@@ -1069,9 +1072,10 @@ void QuicStreamRequest::SetSession(
}
QuicStreamFactory::QuicSessionAliasKey::QuicSessionAliasKey(
- const HostPortPair& destination,
- const QuicSessionKey& session_key)
- : destination_(destination), session_key_(session_key) {}
+ url::SchemeHostPort destination,
+ QuicSessionKey session_key)
+ : destination_(std::move(destination)),
+ session_key_(std::move(session_key)) {}
bool QuicStreamFactory::QuicSessionAliasKey::operator<(
const QuicSessionAliasKey& other) const {
@@ -1081,7 +1085,7 @@ bool QuicStreamFactory::QuicSessionAliasKey::operator<(
bool QuicStreamFactory::QuicSessionAliasKey::operator==(
const QuicSessionAliasKey& other) const {
- return destination_.Equals(other.destination_) &&
+ return destination_ == other.destination_ &&
session_key_ == other.session_key_;
}
@@ -1170,14 +1174,15 @@ QuicStreamFactory::~QuicStreamFactory() {
}
}
-bool QuicStreamFactory::CanUseExistingSession(const QuicSessionKey& session_key,
- const HostPortPair& destination) {
+bool QuicStreamFactory::CanUseExistingSession(
+ const QuicSessionKey& session_key,
+ const url::SchemeHostPort& destination) {
if (base::Contains(active_sessions_, session_key))
return true;
for (const auto& key_value : active_sessions_) {
QuicChromiumClientSession* session = key_value.second;
- if (destination.Equals(all_sessions_[session].destination()) &&
+ if (destination == all_sessions_[session].destination() &&
session->CanPool(session_key.host(), session_key)) {
return true;
}
@@ -1187,7 +1192,7 @@ bool QuicStreamFactory::CanUseExistingSession(const QuicSessionKey& session_key,
}
int QuicStreamFactory::Create(const QuicSessionKey& session_key,
- const HostPortPair& destination,
+ url::SchemeHostPort destination,
quic::ParsedQuicVersion quic_version,
RequestPriority priority,
bool use_dns_aliases,
@@ -1210,7 +1215,7 @@ int QuicStreamFactory::Create(const QuicSessionKey& session_key,
if (!promised)
continue;
DCHECK_EQ(promised->session(), session.second);
- request->SetSession(session.second->CreateHandle(destination));
+ request->SetSession(session.second->CreateHandle(std::move(destination)));
++num_push_streams_created_;
return OK;
}
@@ -1219,7 +1224,7 @@ int QuicStreamFactory::Create(const QuicSessionKey& session_key,
auto active_session = active_sessions_.find(session_key);
if (active_session != active_sessions_.end()) {
QuicChromiumClientSession* session = active_session->second;
- request->SetSession(session->CreateHandle(destination));
+ request->SetSession(session->CreateHandle(std::move(destination)));
return OK;
}
@@ -1241,9 +1246,9 @@ int QuicStreamFactory::Create(const QuicSessionKey& session_key,
if (!active_sessions_.empty()) {
for (const auto& key_value : active_sessions_) {
QuicChromiumClientSession* session = key_value.second;
- if (destination.Equals(all_sessions_[session].destination()) &&
+ if (destination == all_sessions_[session].destination() &&
session->CanPool(session_key.server_id().host(), session_key)) {
- request->SetSession(session->CreateHandle(destination));
+ request->SetSession(session->CreateHandle(std::move(destination)));
return OK;
}
}
@@ -1278,7 +1283,7 @@ int QuicStreamFactory::Create(const QuicSessionKey& session_key,
if (it == active_sessions_.end())
return ERR_QUIC_PROTOCOL_ERROR;
QuicChromiumClientSession* session = it->second;
- request->SetSession(session->CreateHandle(destination));
+ request->SetSession(session->CreateHandle(std::move(destination)));
}
return rv;
}
@@ -1905,7 +1910,10 @@ void QuicStreamFactory::ConfigureInitialRttEstimate(
quic::QuicConfig* config) {
const base::TimeDelta* srtt =
GetServerNetworkStatsSmoothedRtt(server_id, network_isolation_key);
- if (srtt != nullptr) {
+ // Sometimes *srtt is negative. See https://crbug.com/1225616.
+ // TODO(ricea): When the root cause of the negative value is fixed, change the
+ // non-negative assertion to a DCHECK.
+ if (srtt != nullptr && *srtt > base::TimeDelta()) {
SetInitialRttEstimate(*srtt, INITIAL_RTT_CACHED, config);
return;
}