Commit ff359581 authored by Zhongyi Shi's avatar Zhongyi Shi Committed by Commit Bot

Add finch config param for cronet and Chrome to retry QUIC connection on the...

Add finch config param for cronet and Chrome to retry QUIC connection on the alternate network before handshake.

The feature will be controlled by "retry_on_alternate_network_before_handshake".

Bug: 790547
Cq-Include-Trybots: luci.chromium.try:ios-simulator-cronet;master.tryserver.chromium.android:android_cronet_tester
Change-Id: I5812083fe317f996313adce49f9bbd1d14b22f37
Reviewed-on: https://chromium-review.googlesource.com/1242038Reviewed-by: default avatarMisha Efimov <mef@chromium.org>
Reviewed-by: default avatarRyan Hamilton <rch@chromium.org>
Commit-Queue: Misha Efimov <mef@chromium.org>
Cr-Commit-Position: refs/heads/master@{#594386}
parent f3725369
......@@ -74,6 +74,8 @@ const char kQuicMaxMigrationsToNonDefaultNetworkOnPathDegrading[] =
"max_migrations_to_non_default_network_on_path_degrading";
const char kQuicUserAgentId[] = "user_agent_id";
const char kQuicMigrateSessionsEarlyV2[] = "migrate_sessions_early_v2";
const char kQuicRetryOnAlternateNetworkBeforeHandshake[] =
"retry_on_alternate_network_before_handshake";
const char kQuicDisableBidirectionalStreams[] =
"quic_disable_bidirectional_streams";
const char kQuicRaceCertVerification[] = "race_cert_verification";
......@@ -433,6 +435,14 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions(
quic_migrate_sessions_early_v2;
}
bool quic_retry_on_alternate_network_before_handshake = false;
if (quic_args->GetBoolean(
kQuicRetryOnAlternateNetworkBeforeHandshake,
&quic_retry_on_alternate_network_before_handshake)) {
session_params->quic_retry_on_alternate_network_before_handshake =
quic_retry_on_alternate_network_before_handshake;
}
bool quic_disable_bidirectional_streams = false;
if (quic_args->GetBoolean(kQuicDisableBidirectionalStreams,
&quic_disable_bidirectional_streams)) {
......
......@@ -203,6 +203,7 @@ TEST(URLRequestContextConfigTest, TestExperimentalOptionParsing) {
EXPECT_FALSE(params->quic_allow_server_migration);
EXPECT_FALSE(params->quic_migrate_sessions_on_network_change_v2);
EXPECT_FALSE(params->quic_migrate_sessions_early_v2);
EXPECT_FALSE(params->quic_retry_on_alternate_network_before_handshake);
// Check race_cert_verification.
EXPECT_TRUE(params->quic_race_cert_verification);
......@@ -545,6 +546,7 @@ TEST(URLRequestContextConfigTest, SetQuicConnectionMigrationV2Options) {
// JSON encoded experimental options.
"{\"QUIC\":{\"migrate_sessions_on_network_change_v2\":true,"
"\"migrate_sessions_early_v2\":true,"
"\"retry_on_alternate_network_before_handshake\":true,"
"\"max_time_on_non_default_network_seconds\":10,"
"\"max_migrations_to_non_default_network_on_write_error\":3,"
"\"max_migrations_to_non_default_network_on_path_degrading\":4}}",
......@@ -570,6 +572,7 @@ TEST(URLRequestContextConfigTest, SetQuicConnectionMigrationV2Options) {
EXPECT_TRUE(params->quic_migrate_sessions_on_network_change_v2);
EXPECT_TRUE(params->quic_migrate_sessions_early_v2);
EXPECT_TRUE(params->quic_retry_on_alternate_network_before_handshake);
EXPECT_EQ(base::TimeDelta::FromSeconds(10),
params->quic_max_time_on_non_default_network);
EXPECT_EQ(3,
......
......@@ -315,6 +315,14 @@ bool ShouldQuicMigrateSessionsEarlyV2(
"true");
}
bool ShouldQuicRetryOnAlternateNetworkBeforeHandshake(
const VariationParameters& quic_trial_params) {
return base::LowerCaseEqualsASCII(
GetVariationParam(quic_trial_params,
"retry_on_alternate_network_before_handshake"),
"true");
}
bool ShouldQuicGoawayOnPathDegrading(
const VariationParameters& quic_trial_params) {
return base::LowerCaseEqualsASCII(
......@@ -461,6 +469,8 @@ void ConfigureQuicParams(base::StringPiece quic_trial_group,
ShouldQuicMigrateSessionsOnNetworkChangeV2(quic_trial_params);
params->quic_migrate_sessions_early_v2 =
ShouldQuicMigrateSessionsEarlyV2(quic_trial_params);
params->quic_retry_on_alternate_network_before_handshake =
ShouldQuicRetryOnAlternateNetworkBeforeHandshake(quic_trial_params);
params->quic_go_away_on_path_degrading =
ShouldQuicGoawayOnPathDegrading(quic_trial_params);
int max_time_on_non_default_network_seconds =
......
......@@ -118,6 +118,7 @@ TEST_F(NetworkSessionConfiguratorTest, EnableQuicFromFieldTrialGroup) {
EXPECT_FALSE(params_.quic_estimate_initial_rtt);
EXPECT_FALSE(params_.quic_migrate_sessions_on_network_change_v2);
EXPECT_FALSE(params_.quic_migrate_sessions_early_v2);
EXPECT_FALSE(params_.quic_retry_on_alternate_network_before_handshake);
EXPECT_FALSE(params_.quic_go_away_on_path_degrading);
EXPECT_FALSE(params_.quic_allow_server_migration);
EXPECT_TRUE(params_.quic_host_whitelist.empty());
......@@ -347,6 +348,18 @@ TEST_F(NetworkSessionConfiguratorTest,
EXPECT_TRUE(params_.quic_migrate_sessions_early_v2);
}
TEST_F(NetworkSessionConfiguratorTest,
QuicRetryOnAlternateNetworkBeforeHandshakeFromFieldTrialParams) {
std::map<std::string, std::string> field_trial_params;
field_trial_params["retry_on_alternate_network_before_handshake"] = "true";
variations::AssociateVariationParams("QUIC", "Enabled", field_trial_params);
base::FieldTrialList::CreateFieldTrial("QUIC", "Enabled");
ParseFieldTrials();
EXPECT_TRUE(params_.quic_retry_on_alternate_network_before_handshake);
}
TEST_F(NetworkSessionConfiguratorTest,
QuicGoawayOnPathDegradingFromFieldTrialParams) {
std::map<std::string, std::string> field_trial_params;
......
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