Commit 1875fdb2 authored by Yixin Wang's avatar Yixin Wang Committed by Commit Bot

Allow QUIC client_connection_options to be set for Cronet.

Bug: b/66944165
Cq-Include-Trybots: master.tryserver.chromium.android:android_cronet_tester;master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: Ia22b2b815bbaa6e26a30044fc06a58cf9a142807
Reviewed-on: https://chromium-review.googlesource.com/807363Reviewed-by: default avatarMisha Efimov <mef@chromium.org>
Reviewed-by: default avatarRyan Hamilton <rch@chromium.org>
Commit-Queue: Yixin Wang <wangyix@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521959}
parent 5994c2d8
...@@ -42,6 +42,7 @@ const char kDiskCacheDirectoryName[] = "disk_cache"; ...@@ -42,6 +42,7 @@ const char kDiskCacheDirectoryName[] = "disk_cache";
// TODO(xunjieli): Refactor constants in io_thread.cc. // TODO(xunjieli): Refactor constants in io_thread.cc.
const char kQuicFieldTrialName[] = "QUIC"; const char kQuicFieldTrialName[] = "QUIC";
const char kQuicConnectionOptions[] = "connection_options"; const char kQuicConnectionOptions[] = "connection_options";
const char kQuicClientConnectionOptions[] = "client_connection_options";
const char kQuicStoreServerConfigsInProperties[] = const char kQuicStoreServerConfigsInProperties[] =
"store_server_configs_in_properties"; "store_server_configs_in_properties";
const char kQuicMaxServerConfigsStoredInProperties[] = const char kQuicMaxServerConfigsStoredInProperties[] =
...@@ -227,6 +228,13 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions( ...@@ -227,6 +228,13 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions(
net::ParseQuicConnectionOptions(quic_connection_options); net::ParseQuicConnectionOptions(quic_connection_options);
} }
std::string quic_client_connection_options;
if (quic_args->GetString(kQuicClientConnectionOptions,
&quic_client_connection_options)) {
session_params->quic_client_connection_options =
net::ParseQuicConnectionOptions(quic_client_connection_options);
}
// TODO(rtenneti): Delete this option after apps stop using it. // TODO(rtenneti): Delete this option after apps stop using it.
// Added this for backward compatibility. // Added this for backward compatibility.
bool quic_store_server_configs_in_properties = false; bool quic_store_server_configs_in_properties = false;
......
...@@ -318,6 +318,65 @@ TEST(URLRequestContextConfigTest, SetQuicMaxTimeBeforeCryptoHandshake) { ...@@ -318,6 +318,65 @@ TEST(URLRequestContextConfigTest, SetQuicMaxTimeBeforeCryptoHandshake) {
EXPECT_EQ(11, params->quic_max_idle_time_before_crypto_handshake_seconds); EXPECT_EQ(11, params->quic_max_idle_time_before_crypto_handshake_seconds);
} }
TEST(URLURLRequestContextConfigTest, SetQuicConnectionOptions) {
base::test::ScopedTaskEnvironment scoped_task_environment_(
base::test::ScopedTaskEnvironment::MainThreadType::IO);
URLRequestContextConfig config(
// Enable QUIC.
true,
// QUIC User Agent ID.
"Default QUIC User Agent ID",
// Enable SPDY.
true,
// Enable Brotli.
false,
// Type of http cache.
URLRequestContextConfig::HttpCacheType::DISK,
// Max size of http cache in bytes.
1024000,
// Disable caching for HTTP responses. Other information may be stored in
// the cache.
false,
// Storage path for http cache and cookie storage.
"/data/data/org.chromium.net/app_cronet_test/test_storage",
// User-Agent request header field.
"fake agent",
// JSON encoded experimental options.
"{\"QUIC\":{\"connection_options\":\"TIME,TBBR,REJ\","
"\"client_connection_options\":\"TBBR,1RTT\"}}",
// MockCertVerifier to use for testing purposes.
std::unique_ptr<net::CertVerifier>(),
// Enable network quality estimator.
false,
// Enable Public Key Pinning bypass for local trust anchors.
true,
// Certificate verifier cache data.
"");
net::URLRequestContextBuilder builder;
net::NetLog net_log;
config.ConfigureURLRequestContextBuilder(&builder, &net_log);
// Set a ProxyConfigService to avoid DCHECK failure when building.
builder.set_proxy_config_service(
base::MakeUnique<net::ProxyConfigServiceFixed>(
net::ProxyConfig::CreateDirect()));
std::unique_ptr<net::URLRequestContext> context(builder.Build());
const net::HttpNetworkSession::Params* params =
context->GetNetworkSessionParams();
net::QuicTagVector connection_options;
connection_options.push_back(net::kTIME);
connection_options.push_back(net::kTBBR);
connection_options.push_back(net::kREJ);
EXPECT_EQ(connection_options, params->quic_connection_options);
net::QuicTagVector client_connection_options;
client_connection_options.push_back(net::kTBBR);
client_connection_options.push_back(net::k1RTT);
EXPECT_EQ(client_connection_options, params->quic_client_connection_options);
}
// See stale_host_resolver_unittest.cc for test of StaleDNS options. // See stale_host_resolver_unittest.cc for test of StaleDNS options.
} // namespace cronet } // namespace cronet
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