summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/io_thread.cc13
-rw-r--r--chrome/browser/io_thread.h5
-rw-r--r--chrome/browser/io_thread_unittest.cc29
-rw-r--r--net/http/http_network_session.cc2
-rw-r--r--net/http/http_network_session.h1
-rw-r--r--net/quic/quic_stream_factory.cc27
-rw-r--r--net/quic/quic_stream_factory.h6
-rw-r--r--net/quic/quic_stream_factory_test.cc1
8 files changed, 75 insertions, 9 deletions
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 8f34934..aaf9faa 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -1060,6 +1060,8 @@ void IOThread::InitializeNetworkSessionParamsFromGlobals(
&params->quic_disable_connection_pooling);
globals.quic_load_server_info_timeout_ms.CopyToIfSet(
&params->quic_load_server_info_timeout_ms);
+ globals.quic_disable_loading_server_info_for_new_servers.CopyToIfSet(
+ &params->quic_disable_loading_server_info_for_new_servers);
globals.enable_quic_port_selection.CopyToIfSet(
&params->enable_quic_port_selection);
globals.quic_max_packet_length.CopyToIfSet(&params->quic_max_packet_length);
@@ -1210,6 +1212,8 @@ void IOThread::ConfigureQuicGlobals(
globals->quic_load_server_info_timeout_ms.set(
load_server_info_timeout_ms);
}
+ globals->quic_disable_loading_server_info_for_new_servers.set(
+ ShouldDisableLoadingServerInfoForNewServers(quic_trial_params));
globals->enable_quic_port_selection.set(
ShouldEnableQuicPortSelection(command_line));
globals->quic_connection_options =
@@ -1374,6 +1378,15 @@ int IOThread::GetQuicLoadServerInfoTimeout(
}
// static
+bool IOThread::ShouldDisableLoadingServerInfoForNewServers(
+ const VariationParameters& quic_trial_params) {
+ return LowerCaseEqualsASCII(
+ GetVariationParam(quic_trial_params,
+ "disable_loading_server_info_for_new_servers"),
+ "true");
+}
+
+// static
size_t IOThread::GetQuicMaxPacketLength(
const CommandLine& command_line,
base::StringPiece quic_trial_group,
diff --git a/chrome/browser/io_thread.h b/chrome/browser/io_thread.h
index 0b2106e..5aa2acf 100644
--- a/chrome/browser/io_thread.h
+++ b/chrome/browser/io_thread.h
@@ -192,6 +192,7 @@ class IOThread : public content::BrowserThreadDelegate {
Optional<bool> quic_always_require_handshake_confirmation;
Optional<bool> quic_disable_connection_pooling;
Optional<int> quic_load_server_info_timeout_ms;
+ Optional<bool> quic_disable_loading_server_info_for_new_servers;
Optional<size_t> quic_max_packet_length;
net::QuicTagVector quic_connection_options;
Optional<std::string> quic_user_agent_id;
@@ -371,6 +372,10 @@ class IOThread : public content::BrowserThreadDelegate {
static int GetQuicLoadServerInfoTimeout(
const VariationParameters& quic_trial_params);
+ // Returns true if QUIC sever information shouldn't be loaded for new servers.
+ static bool ShouldDisableLoadingServerInfoForNewServers(
+ const VariationParameters& quic_trial_params);
+
// Returns the maximum length for QUIC packets, based on any flags in
// |command_line| or the field trial. Returns 0 if there is an error
// parsing any of the options, or if the default value should be used.
diff --git a/chrome/browser/io_thread_unittest.cc b/chrome/browser/io_thread_unittest.cc
index e11676a..1a457a4 100644
--- a/chrome/browser/io_thread_unittest.cc
+++ b/chrome/browser/io_thread_unittest.cc
@@ -133,6 +133,7 @@ TEST_F(IOThreadTest, EnableQuicFromFieldTrialGroup) {
EXPECT_FALSE(params.quic_always_require_handshake_confirmation);
EXPECT_FALSE(params.quic_disable_connection_pooling);
EXPECT_EQ(0, params.quic_load_server_info_timeout_ms);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, EnableQuicFromCommandLine) {
@@ -142,6 +143,7 @@ TEST_F(IOThreadTest, EnableQuicFromCommandLine) {
net::HttpNetworkSession::Params params;
InitializeNetworkSessionParams(&params);
EXPECT_TRUE(params.enable_quic);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, EnablePacingFromCommandLine) {
@@ -154,6 +156,7 @@ TEST_F(IOThreadTest, EnablePacingFromCommandLine) {
net::QuicTagVector options;
options.push_back(net::kPACE);
EXPECT_EQ(options, params.quic_connection_options);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, EnablePacingFromFieldTrialParams) {
@@ -166,6 +169,7 @@ TEST_F(IOThreadTest, EnablePacingFromFieldTrialParams) {
net::QuicTagVector options;
options.push_back(net::kPACE);
EXPECT_EQ(options, params.quic_connection_options);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, PacketLengthFromCommandLine) {
@@ -176,6 +180,7 @@ TEST_F(IOThreadTest, PacketLengthFromCommandLine) {
net::HttpNetworkSession::Params params;
InitializeNetworkSessionParams(&params);
EXPECT_EQ(1450u, params.quic_max_packet_length);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, PacketLengthFromFieldTrialParams) {
@@ -186,6 +191,7 @@ TEST_F(IOThreadTest, PacketLengthFromFieldTrialParams) {
net::HttpNetworkSession::Params params;
InitializeNetworkSessionParams(&params);
EXPECT_EQ(1450u, params.quic_max_packet_length);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, QuicVersionFromCommandLine) {
@@ -199,8 +205,8 @@ TEST_F(IOThreadTest, QuicVersionFromCommandLine) {
InitializeNetworkSessionParams(&params);
net::QuicVersionVector supported_versions;
supported_versions.push_back(net::QuicSupportedVersions().back());
- EXPECT_EQ(supported_versions,
- params.quic_supported_versions);
+ EXPECT_EQ(supported_versions, params.quic_supported_versions);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, QuicVersionFromFieldTrialParams) {
@@ -213,8 +219,8 @@ TEST_F(IOThreadTest, QuicVersionFromFieldTrialParams) {
InitializeNetworkSessionParams(&params);
net::QuicVersionVector supported_versions;
supported_versions.push_back(net::QuicSupportedVersions().back());
- EXPECT_EQ(supported_versions,
- params.quic_supported_versions);
+ EXPECT_EQ(supported_versions, params.quic_supported_versions);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, QuicConnectionOptionsFromCommandLine) {
@@ -232,6 +238,7 @@ TEST_F(IOThreadTest, QuicConnectionOptionsFromCommandLine) {
options.push_back(net::kTBBR);
options.push_back(net::kREJ);
EXPECT_EQ(options, params.quic_connection_options);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, QuicConnectionOptionsFromFieldTrialParams) {
@@ -248,6 +255,7 @@ TEST_F(IOThreadTest, QuicConnectionOptionsFromFieldTrialParams) {
options.push_back(net::kTBBR);
options.push_back(net::kREJ);
EXPECT_EQ(options, params.quic_connection_options);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, QuicConnectionOptionsFromDeprecatedFieldTrialParams) {
@@ -264,6 +272,7 @@ TEST_F(IOThreadTest, QuicConnectionOptionsFromDeprecatedFieldTrialParams) {
options.push_back(net::kTBBR);
options.push_back(net::kREJ);
EXPECT_EQ(options, params.quic_connection_options);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest,
@@ -274,6 +283,7 @@ TEST_F(IOThreadTest,
net::HttpNetworkSession::Params params;
InitializeNetworkSessionParams(&params);
EXPECT_TRUE(params.quic_always_require_handshake_confirmation);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest,
@@ -284,6 +294,7 @@ TEST_F(IOThreadTest,
net::HttpNetworkSession::Params params;
InitializeNetworkSessionParams(&params);
EXPECT_TRUE(params.quic_disable_connection_pooling);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest, QuicLoadServerInfoTimeoutFromFieldTrialParams) {
@@ -293,6 +304,16 @@ TEST_F(IOThreadTest, QuicLoadServerInfoTimeoutFromFieldTrialParams) {
net::HttpNetworkSession::Params params;
InitializeNetworkSessionParams(&params);
EXPECT_EQ(50, params.quic_load_server_info_timeout_ms);
+ EXPECT_FALSE(params.quic_disable_loading_server_info_for_new_servers);
+}
+
+TEST_F(IOThreadTest, QuicDisableLoadingServerInfoForNewServers) {
+ field_trial_group_ = "Enabled";
+ field_trial_params_["disable_loading_server_info_for_new_servers"] = "true";
+ ConfigureQuicGlobals();
+ net::HttpNetworkSession::Params params;
+ InitializeNetworkSessionParams(&params);
+ EXPECT_TRUE(params.quic_disable_loading_server_info_for_new_servers);
}
TEST_F(IOThreadTest,
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc
index 405c88c..7d7a718 100644
--- a/net/http/http_network_session.cc
+++ b/net/http/http_network_session.cc
@@ -89,6 +89,7 @@ HttpNetworkSession::Params::Params()
quic_always_require_handshake_confirmation(false),
quic_disable_connection_pooling(false),
quic_load_server_info_timeout_ms(0),
+ quic_disable_loading_server_info_for_new_servers(false),
quic_clock(NULL),
quic_random(NULL),
quic_max_packet_length(kDefaultMaxPacketSize),
@@ -132,6 +133,7 @@ HttpNetworkSession::HttpNetworkSession(const Params& params)
params.quic_always_require_handshake_confirmation,
params.quic_disable_connection_pooling,
params.quic_load_server_info_timeout_ms,
+ params.quic_disable_loading_server_info_for_new_servers,
params.quic_connection_options),
spdy_session_pool_(params.host_resolver,
params.ssl_config_service,
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h
index c9704a4..39605c6 100644
--- a/net/http/http_network_session.h
+++ b/net/http/http_network_session.h
@@ -117,6 +117,7 @@ class NET_EXPORT HttpNetworkSession
bool quic_always_require_handshake_confirmation;
bool quic_disable_connection_pooling;
int quic_load_server_info_timeout_ms;
+ bool quic_disable_loading_server_info_for_new_servers;
HostPortPair origin_to_force_quic_on;
QuicClock* quic_clock; // Will be owned by QuicStreamFactory.
QuicRandom* quic_random;
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 45c60c0..3253e90 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -545,6 +545,7 @@ QuicStreamFactory::QuicStreamFactory(
bool always_require_handshake_confirmation,
bool disable_connection_pooling,
int load_server_info_timeout,
+ bool disable_loading_server_info_for_new_servers,
const QuicTagVector& connection_options)
: require_confirmation_(true),
host_resolver_(host_resolver),
@@ -563,6 +564,8 @@ QuicStreamFactory::QuicStreamFactory(
always_require_handshake_confirmation),
disable_connection_pooling_(disable_connection_pooling),
load_server_info_timeout_ms_(load_server_info_timeout),
+ disable_loading_server_info_for_new_servers_(
+ disable_loading_server_info_for_new_servers),
port_seed_(random_generator_->RandUint64()),
check_persisted_supports_quic_(true),
task_runner_(nullptr),
@@ -623,11 +626,25 @@ int QuicStreamFactory::Create(const HostPortPair& host_port_pair,
QuicServerInfo* quic_server_info = nullptr;
if (quic_server_info_factory_) {
- QuicCryptoClientConfig::CachedState* cached =
- crypto_config_.LookupOrCreate(server_id);
- DCHECK(cached);
- if (cached->IsEmpty()) {
- quic_server_info = quic_server_info_factory_->GetForServer(server_id);
+ bool load_from_disk_cache = true;
+ if (disable_loading_server_info_for_new_servers_) {
+ const AlternateProtocolMap& alternate_protocol_map =
+ http_server_properties_->alternate_protocol_map();
+ AlternateProtocolMap::const_iterator it =
+ alternate_protocol_map.Peek(server_id.host_port_pair());
+ if (it == alternate_protocol_map.end() || it->second.protocol != QUIC) {
+ // If there is no entry for QUIC, consider that as a new server and
+ // don't wait for Cache thread to load the data for that server.
+ load_from_disk_cache = false;
+ }
+ }
+ if (load_from_disk_cache) {
+ QuicCryptoClientConfig::CachedState* cached =
+ crypto_config_.LookupOrCreate(server_id);
+ DCHECK(cached);
+ if (cached->IsEmpty()) {
+ quic_server_info = quic_server_info_factory_->GetForServer(server_id);
+ }
}
}
// TODO(rtenneti): Initialize task_runner_ in the constructor after
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
index 2fad1fc..5d24c9b 100644
--- a/net/quic/quic_stream_factory.h
+++ b/net/quic/quic_stream_factory.h
@@ -105,6 +105,7 @@ class NET_EXPORT_PRIVATE QuicStreamFactory
bool always_require_handshake_confirmation,
bool disable_connection_pooling,
int load_server_info_timeout,
+ bool disable_loading_server_info_for_new_servers,
const QuicTagVector& connection_options);
~QuicStreamFactory() override;
@@ -288,6 +289,11 @@ class NET_EXPORT_PRIVATE QuicStreamFactory
// |load_server_info_timeout_ms_| to 0.
int load_server_info_timeout_ms_;
+ // Set to disable loading of QUIC server information from disk cache for new
+ // servers. New servers are those servers for which there is no QUIC protocol
+ // entry in AlternateProtocolMap.
+ bool disable_loading_server_info_for_new_servers_;
+
// Each profile will (probably) have a unique port_seed_ value. This value is
// used to help seed a pseudo-random number generator (PortSuggester) so that
// we consistently (within this profile) suggest the same ephemeral port when
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index 05234c0..b386527 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -163,6 +163,7 @@ class QuicStreamFactoryTest : public ::testing::TestWithParam<QuicVersion> {
/*always_require_handshake_confirmation=*/false,
/*disable_connection_pooling=*/false,
/*load_server_info_timeout=*/0u,
+ /*disable_loading_server_info_for_new_servers=*/false,
QuicTagVector()),
host_port_pair_(kDefaultServerHostName, kDefaultServerPort),
is_https_(false),