Commit a31239f1 authored by Ryan Hamilton's avatar Ryan Hamilton Committed by Commit Bot

Add a new set_quic_flags QUIC cronet option which allows QUIC flags to be set.

Bug: 984738
Change-Id: Iff1257a3cb730fad8215b2bb9a755c7dcd67aed5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1821859Reviewed-by: default avatarZhongyi Shi <zhongyi@chromium.org>
Commit-Queue: Ryan Hamilton <rch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#699953}
parent b0660507
......@@ -90,6 +90,7 @@ const char kQuicHostWhitelist[] = "host_whitelist";
const char kQuicEnableSocketRecvOptimization[] =
"enable_socket_recv_optimization";
const char kQuicVersion[] = "quic_version";
const char kQuicFlags[] = "set_quic_flags";
// AsyncDNS experiment dictionary name.
const char kAsyncDnsFieldTrialName[] = "AsyncDNS";
......@@ -551,6 +552,19 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions(
}
}
std::string quic_flags;
if (quic_args->GetString(kQuicFlags, &quic_flags)) {
for (const auto& flag :
base::SplitString(quic_flags, ",", base::TRIM_WHITESPACE,
base::SPLIT_WANT_ALL)) {
std::vector<std::string> tokens = base::SplitString(
flag, "=", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
if (tokens.size() != 2)
continue;
SetQuicFlagByName(tokens[0], tokens[1]);
}
}
} else if (it.key() == kAsyncDnsFieldTrialName) {
const base::DictionaryValue* async_dns_args = nullptr;
if (!it.value().GetAsDictionary(&async_dns_args)) {
......
......@@ -70,6 +70,10 @@ TEST(URLRequestContextConfigTest, TestExperimentalOptionParsing) {
options.SetPath({"QUIC", "close_sessions_on_ip_change"}, base::Value(true));
options.SetPath({"QUIC", "race_cert_verification"}, base::Value(true));
options.SetPath({"QUIC", "connection_options"}, base::Value("TIME,TBBR,REJ"));
options.SetPath(
{"QUIC", "set_quic_flags"},
base::Value("FLAGS_quic_reloadable_flag_quic_supports_tls_handshake=true,"
"FLAGS_quic_reloadable_flag_quic_enable_version_99=true"));
options.SetPath({"AsyncDNS", "enable"}, base::Value(true));
options.SetPath({"NetworkErrorLogging", "enable"}, base::Value(true));
options.SetPath({"NetworkErrorLogging", "preloaded_report_to_headers"},
......@@ -140,6 +144,10 @@ TEST(URLRequestContextConfigTest, TestExperimentalOptionParsing) {
std::string options_json;
EXPECT_TRUE(base::JSONWriter::Write(options, &options_json));
// Initialize QUIC flags set by the config.
FLAGS_quic_reloadable_flag_quic_supports_tls_handshake = false;
FLAGS_quic_reloadable_flag_quic_enable_version_99 = false;
URLRequestContextConfig config(
// Enable QUIC.
true,
......@@ -191,6 +199,9 @@ TEST(URLRequestContextConfigTest, TestExperimentalOptionParsing) {
quic_connection_options.push_back(quic::kREJ);
EXPECT_EQ(quic_connection_options, params->quic_params.connection_options);
EXPECT_TRUE(FLAGS_quic_reloadable_flag_quic_supports_tls_handshake);
EXPECT_TRUE(FLAGS_quic_reloadable_flag_quic_enable_version_99);
// Check Custom QUIC User Agent Id.
EXPECT_EQ("Custom QUIC UAID", params->quic_params.user_agent_id);
......
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