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( ...@@ -1144,6 +1144,8 @@ void IOThread::InitializeNetworkSessionParamsFromGlobals(
globals.enable_brotli.CopyToIfSet(&params->enable_brotli); globals.enable_brotli.CopyToIfSet(&params->enable_brotli);
globals.enable_quic.CopyToIfSet(&params->enable_quic); 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.enable_quic_for_proxies.CopyToIfSet(&params->enable_quic_for_proxies);
globals.quic_always_require_handshake_confirmation.CopyToIfSet( globals.quic_always_require_handshake_confirmation.CopyToIfSet(
&params->quic_always_require_handshake_confirmation); &params->quic_always_require_handshake_confirmation);
...@@ -1268,6 +1270,8 @@ void IOThread::ConfigureQuicGlobals( ...@@ -1268,6 +1270,8 @@ void IOThread::ConfigureQuicGlobals(
bool enable_quic = ShouldEnableQuic(command_line, quic_trial_group, bool enable_quic = ShouldEnableQuic(command_line, quic_trial_group,
quic_allowed_by_policy); quic_allowed_by_policy);
globals->enable_quic.set(enable_quic); 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( bool enable_quic_for_proxies = ShouldEnableQuicForProxies(
command_line, quic_trial_group, quic_allowed_by_policy); command_line, quic_trial_group, quic_allowed_by_policy);
globals->enable_quic_for_proxies.set(enable_quic_for_proxies); globals->enable_quic_for_proxies.set(enable_quic_for_proxies);
...@@ -1366,6 +1370,14 @@ void IOThread::ConfigureQuicGlobals( ...@@ -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, bool IOThread::ShouldEnableQuic(const base::CommandLine& command_line,
base::StringPiece quic_trial_group, base::StringPiece quic_trial_group,
bool quic_allowed_by_policy) { bool quic_allowed_by_policy) {
......
...@@ -219,6 +219,7 @@ class IOThread : public content::BrowserThreadDelegate { ...@@ -219,6 +219,7 @@ class IOThread : public content::BrowserThreadDelegate {
Optional<bool> enable_brotli; Optional<bool> enable_brotli;
Optional<bool> enable_quic; Optional<bool> enable_quic;
Optional<bool> disable_quic_on_timeout_with_open_streams;
Optional<bool> enable_quic_for_proxies; Optional<bool> enable_quic_for_proxies;
Optional<bool> enable_quic_port_selection; Optional<bool> enable_quic_port_selection;
Optional<bool> quic_always_require_handshake_confirmation; Optional<bool> quic_always_require_handshake_confirmation;
...@@ -371,6 +372,11 @@ class IOThread : public content::BrowserThreadDelegate { ...@@ -371,6 +372,11 @@ class IOThread : public content::BrowserThreadDelegate {
bool quic_allowed_by_policy, bool quic_allowed_by_policy,
Globals* globals); 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 // Returns true if QUIC should be enabled, either as a result
// of a field trial or a command line flag. // of a field trial or a command line flag.
static bool ShouldEnableQuic( static bool ShouldEnableQuic(
......
...@@ -213,6 +213,7 @@ TEST_F(IOThreadTest, EnableQuicFromFieldTrialGroup) { ...@@ -213,6 +213,7 @@ TEST_F(IOThreadTest, EnableQuicFromFieldTrialGroup) {
net::HttpNetworkSession::Params params; net::HttpNetworkSession::Params params;
InitializeNetworkSessionParams(&params); InitializeNetworkSessionParams(&params);
EXPECT_TRUE(params.enable_quic); EXPECT_TRUE(params.enable_quic);
EXPECT_FALSE(params.disable_quic_on_timeout_with_open_streams);
EXPECT_TRUE(params.enable_quic_for_proxies); EXPECT_TRUE(params.enable_quic_for_proxies);
EXPECT_EQ(1350u, params.quic_max_packet_length); EXPECT_EQ(1350u, params.quic_max_packet_length);
EXPECT_EQ(1.0, params.alternative_service_probability_threshold); EXPECT_EQ(1.0, params.alternative_service_probability_threshold);
...@@ -239,6 +240,16 @@ TEST_F(IOThreadTest, EnableQuicFromFieldTrialGroup) { ...@@ -239,6 +240,16 @@ TEST_F(IOThreadTest, EnableQuicFromFieldTrialGroup) {
EXPECT_TRUE(params.quic_host_whitelist.empty()); 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) { TEST_F(IOThreadTest, EnableQuicFromQuicProxyFieldTrialGroup) {
const struct { const struct {
std::string field_trial_group_name; std::string field_trial_group_name;
......
...@@ -101,6 +101,7 @@ HttpNetworkSession::Params::Params() ...@@ -101,6 +101,7 @@ HttpNetworkSession::Params::Params()
enable_npn(true), enable_npn(true),
enable_brotli(false), enable_brotli(false),
enable_quic(false), enable_quic(false),
disable_quic_on_timeout_with_open_streams(false),
enable_quic_for_proxies(false), enable_quic_for_proxies(false),
enable_quic_port_selection(true), enable_quic_port_selection(true),
quic_always_require_handshake_confirmation(false), quic_always_require_handshake_confirmation(false),
......
...@@ -121,6 +121,8 @@ class NET_EXPORT HttpNetworkSession ...@@ -121,6 +121,8 @@ class NET_EXPORT HttpNetworkSession
// Enables QUIC support. // Enables QUIC support.
bool enable_quic; 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. // Enables QUIC for proxies.
bool enable_quic_for_proxies; bool enable_quic_for_proxies;
// Instruct QUIC to use consistent ephemeral ports when talking to // 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