Commit 75527dd8 authored by zhongyi's avatar zhongyi Committed by Commit bot

Add a finch trial param to disable QUIC when connection times out with open streams

BUG=571098

Review URL: https://codereview.chromium.org/1603203002

Cr-Commit-Position: refs/heads/master@{#370806}
parent dee06429
......@@ -1144,6 +1144,8 @@ void IOThread::InitializeNetworkSessionParamsFromGlobals(
globals.enable_brotli.CopyToIfSet(&params->enable_brotli);
globals.enable_quic.CopyToIfSet(&params->enable_quic);
globals.disable_quic_on_timeout_with_open_streams.CopyToIfSet(
&params->disable_quic_on_timeout_with_open_streams);
globals.enable_quic_for_proxies.CopyToIfSet(&params->enable_quic_for_proxies);
globals.quic_always_require_handshake_confirmation.CopyToIfSet(
&params->quic_always_require_handshake_confirmation);
......@@ -1268,6 +1270,8 @@ void IOThread::ConfigureQuicGlobals(
bool enable_quic = ShouldEnableQuic(command_line, quic_trial_group,
quic_allowed_by_policy);
globals->enable_quic.set(enable_quic);
globals->disable_quic_on_timeout_with_open_streams.set(
ShouldDisableQuicWhenConnectionTimesOutWithOpenStreams(quic_trial_params));
bool enable_quic_for_proxies = ShouldEnableQuicForProxies(
command_line, quic_trial_group, quic_allowed_by_policy);
globals->enable_quic_for_proxies.set(enable_quic_for_proxies);
......@@ -1366,6 +1370,14 @@ void IOThread::ConfigureQuicGlobals(
}
}
bool IOThread::ShouldDisableQuicWhenConnectionTimesOutWithOpenStreams(
const VariationParameters& quic_trial_params) {
return base::LowerCaseEqualsASCII(
GetVariationParam(quic_trial_params,
"disable_quic_on_timeout_with_open_streams"),
"true");
}
bool IOThread::ShouldEnableQuic(const base::CommandLine& command_line,
base::StringPiece quic_trial_group,
bool quic_allowed_by_policy) {
......
......@@ -219,6 +219,7 @@ class IOThread : public content::BrowserThreadDelegate {
Optional<bool> enable_brotli;
Optional<bool> enable_quic;
Optional<bool> disable_quic_on_timeout_with_open_streams;
Optional<bool> enable_quic_for_proxies;
Optional<bool> enable_quic_port_selection;
Optional<bool> quic_always_require_handshake_confirmation;
......@@ -371,6 +372,11 @@ class IOThread : public content::BrowserThreadDelegate {
bool quic_allowed_by_policy,
Globals* globals);
// Returns true if QUIC should be disabled when a connection times out with
// open streams.
static bool ShouldDisableQuicWhenConnectionTimesOutWithOpenStreams(
const VariationParameters& quic_trial_params);
// Returns true if QUIC should be enabled, either as a result
// of a field trial or a command line flag.
static bool ShouldEnableQuic(
......
......@@ -213,6 +213,7 @@ TEST_F(IOThreadTest, EnableQuicFromFieldTrialGroup) {
net::HttpNetworkSession::Params params;
InitializeNetworkSessionParams(&params);
EXPECT_TRUE(params.enable_quic);
EXPECT_FALSE(params.disable_quic_on_timeout_with_open_streams);
EXPECT_TRUE(params.enable_quic_for_proxies);
EXPECT_EQ(1350u, params.quic_max_packet_length);
EXPECT_EQ(1.0, params.alternative_service_probability_threshold);
......@@ -239,6 +240,16 @@ TEST_F(IOThreadTest, EnableQuicFromFieldTrialGroup) {
EXPECT_TRUE(params.quic_host_whitelist.empty());
}
TEST_F(IOThreadTest,
DisableQuicWhenConnectionTimesOutWithOpenStreamsFromFieldTrialParams) {
field_trial_group_ = "Enabled";
field_trial_params_["disable_quic_on_timeout_with_open_streams"] = "true";
ConfigureQuicGlobals();
net::HttpNetworkSession::Params params;
InitializeNetworkSessionParams(&params);
EXPECT_TRUE(params.disable_quic_on_timeout_with_open_streams);
}
TEST_F(IOThreadTest, EnableQuicFromQuicProxyFieldTrialGroup) {
const struct {
std::string field_trial_group_name;
......
......@@ -101,6 +101,7 @@ HttpNetworkSession::Params::Params()
enable_npn(true),
enable_brotli(false),
enable_quic(false),
disable_quic_on_timeout_with_open_streams(false),
enable_quic_for_proxies(false),
enable_quic_port_selection(true),
quic_always_require_handshake_confirmation(false),
......
......@@ -121,6 +121,8 @@ class NET_EXPORT HttpNetworkSession
// Enables QUIC support.
bool enable_quic;
// Disable QUIC if a connection times out with open streams.
bool disable_quic_on_timeout_with_open_streams;
// Enables QUIC for proxies.
bool enable_quic_for_proxies;
// Instruct QUIC to use consistent ephemeral ports when talking to
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment