summaryrefslogtreecommitdiffstats
path: root/components/cronet
diff options
context:
space:
mode:
authormef <mef@chromium.org>2016-02-09 12:14:23 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-09 20:15:32 +0000
commitc5da5713830e1c6ad09c75638e06f018396ca40d (patch)
tree5222c55a71bce4126118b47a3f0feefd51ff508f /components/cronet
parent11565e0ec4c1c02bddaf1ed8ac726124e5c61400 (diff)
downloadchromium_src-c5da5713830e1c6ad09c75638e06f018396ca40d.zip
chromium_src-c5da5713830e1c6ad09c75638e06f018396ca40d.tar.gz
chromium_src-c5da5713830e1c6ad09c75638e06f018396ca40d.tar.bz2
[Cronet] Expose quic_user_agent_id and quic_prefer_aes config options.
- QUIC will soon require that user agent id field is non-empty, but normal User-Agent request header is too rich and verbose to be used for this purpose. The app can override default value using 'user_agent_id' quic experimental option. - prefer_aes experimental option is needed to experiment with performance of using AES instead of ChaCha20. BUG=575771 Review URL: https://codereview.chromium.org/1665503002 Cr-Commit-Position: refs/heads/master@{#374438}
Diffstat (limited to 'components/cronet')
-rw-r--r--components/cronet/android/BUILD.gn3
-rw-r--r--components/cronet/android/api/src/org/chromium/net/CronetEngine.java17
-rw-r--r--components/cronet/android/api/src/org/chromium/net/UserAgent.java21
-rw-r--r--components/cronet/android/cronet_url_request_context_adapter.cc5
-rw-r--r--components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java15
-rw-r--r--components/cronet/android/test/cronet_url_request_context_config_test.cc5
-rw-r--r--components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java2
-rw-r--r--components/cronet/url_request_context_config.cc16
-rw-r--r--components/cronet/url_request_context_config.h4
-rw-r--r--components/cronet/url_request_context_config_unittest.cc10
10 files changed, 83 insertions, 15 deletions
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn
index b1a3469..34b4cbb 100644
--- a/components/cronet/android/BUILD.gn
+++ b/components/cronet/android/BUILD.gn
@@ -411,6 +411,7 @@ shared_library("cronet_tests") {
deps = [
":cronet_static",
":cronet_tests_jni_headers",
+ ":cronet_version_header",
"//base",
"//base:i18n",
"//net",
@@ -419,6 +420,8 @@ shared_library("cronet_tests") {
"//third_party/icu",
]
+ include_dirs = [ _cronet_version_header_include_dir ]
+
if (cronet_enable_data_reduction_proxy_support) {
deps += [ "//components/data_reduction_proxy/core/browser" ]
}
diff --git a/components/cronet/android/api/src/org/chromium/net/CronetEngine.java b/components/cronet/android/api/src/org/chromium/net/CronetEngine.java
index a07ae3c..a249839 100644
--- a/components/cronet/android/api/src/org/chromium/net/CronetEngine.java
+++ b/components/cronet/android/api/src/org/chromium/net/CronetEngine.java
@@ -131,8 +131,8 @@ public abstract class CronetEngine {
}
/**
- * Constructs a User-Agent string including Cronet version, and
- * application name and version.
+ * Constructs a User-Agent string including application name and version,
+ * system build version, model and id, and Cronet version.
*
* @return User-Agent string.
*/
@@ -240,7 +240,8 @@ public abstract class CronetEngine {
/**
* Sets whether <a href="https://www.chromium.org/quic">QUIC</a> protocol
- * is enabled. Defaults to disabled.
+ * is enabled. Defaults to disabled. If QUIC is enabled, then QUIC User Agent Id
+ * containing application name and Cronet version is sent to the server.
* @param value {@code true} to enable QUIC, {@code false} to disable.
* @return the builder to facilitate chaining.
*/
@@ -254,6 +255,16 @@ public abstract class CronetEngine {
}
/**
+ * Constructs default QUIC User Agent Id string including application name
+ * and Cronet version. Returns empty string if QUIC is not enabled.
+ *
+ * @return QUIC User Agent ID string.
+ */
+ String getDefaultQuicUserAgentId() {
+ return mQuicEnabled ? UserAgent.getQuicUserAgentIdFrom(mContext) : "";
+ }
+
+ /**
* Sets whether <a href="https://tools.ietf.org/html/rfc7540">HTTP/2</a>
* protocol is enabled. Defaults to enabled.
* @param value {@code true} to enable HTTP/2, {@code false} to disable.
diff --git a/components/cronet/android/api/src/org/chromium/net/UserAgent.java b/components/cronet/android/api/src/org/chromium/net/UserAgent.java
index a0ce85f..5837473 100644
--- a/components/cronet/android/api/src/org/chromium/net/UserAgent.java
+++ b/components/cronet/android/api/src/org/chromium/net/UserAgent.java
@@ -29,8 +29,8 @@ public final class UserAgent {
}
/**
- * Constructs a User-Agent string including Cronet version, and application
- * name and version.
+ * Constructs a User-Agent string including application name and version,
+ * system build version, model and Id, and Cronet version.
* @param context the context to fetch the application name and version
* from.
* @return User-Agent string.
@@ -69,6 +69,23 @@ public final class UserAgent {
return builder.toString();
}
+ /**
+ * Constructs default QUIC User Agent Id string including application name
+ * and Cronet version.
+ * @param context the context to fetch the application name from.
+ * @return User-Agent string.
+ */
+ static String getQuicUserAgentIdFrom(Context context) {
+ StringBuilder builder = new StringBuilder();
+
+ // Application name and cronet version.
+ builder.append(context.getPackageName());
+ builder.append(" Cronet/");
+ builder.append(Version.CRONET_VERSION);
+
+ return builder.toString();
+ }
+
private static int versionFromContext(Context context) {
synchronized (sLock) {
if (sVersionCode == VERSION_CODE_UNINITIALIZED) {
diff --git a/components/cronet/android/cronet_url_request_context_adapter.cc b/components/cronet/android/cronet_url_request_context_adapter.cc
index 49ba22a..776fec7 100644
--- a/components/cronet/android/cronet_url_request_context_adapter.cc
+++ b/components/cronet/android/cronet_url_request_context_adapter.cc
@@ -687,6 +687,7 @@ static jlong CreateRequestContextConfig(
const JavaParamRef<jstring>& juser_agent,
const JavaParamRef<jstring>& jstorage_path,
jboolean jquic_enabled,
+ const JavaParamRef<jstring>& jquic_default_user_agent_id,
jboolean jhttp2_enabled,
jboolean jsdch_enabled,
const JavaParamRef<jstring>& jdata_reduction_proxy_key,
@@ -699,7 +700,9 @@ static jlong CreateRequestContextConfig(
const JavaParamRef<jstring>& jexperimental_quic_connection_options,
jlong jmock_cert_verifier) {
return reinterpret_cast<jlong>(new URLRequestContextConfig(
- jquic_enabled, jhttp2_enabled, jsdch_enabled,
+ jquic_enabled,
+ base::android::ConvertJavaStringToUTF8(env, jquic_default_user_agent_id),
+ jhttp2_enabled, jsdch_enabled,
static_cast<URLRequestContextConfig::HttpCacheType>(jhttp_cache_mode),
jhttp_cache_max_size, jdisable_cache,
base::android::ConvertJavaStringToUTF8(env, jstorage_path),
diff --git a/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java b/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java
index 4d935b7..ae28ecb 100644
--- a/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java
+++ b/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java
@@ -107,8 +107,9 @@ class CronetUrlRequestContext extends CronetEngine {
static long createNativeUrlRequestContextConfig(CronetEngine.Builder builder) {
final long urlRequestContextConfig = nativeCreateRequestContextConfig(
builder.getUserAgent(), builder.storagePath(), builder.quicEnabled(),
- builder.http2Enabled(), builder.sdchEnabled(), builder.dataReductionProxyKey(),
- builder.dataReductionProxyPrimaryProxy(), builder.dataReductionProxyFallbackProxy(),
+ builder.getDefaultQuicUserAgentId(), builder.http2Enabled(), builder.sdchEnabled(),
+ builder.dataReductionProxyKey(), builder.dataReductionProxyPrimaryProxy(),
+ builder.dataReductionProxyFallbackProxy(),
builder.dataReductionProxySecureProxyCheckUrl(), builder.cacheDisabled(),
builder.httpCacheMode(), builder.httpCacheMaxSize(), builder.experimentalOptions(),
builder.mockCertVerifier());
@@ -465,11 +466,11 @@ class CronetUrlRequestContext extends CronetEngine {
// Native methods are implemented in cronet_url_request_context_adapter.cc.
private static native long nativeCreateRequestContextConfig(String userAgent,
- String storagePath, boolean quicEnabled, boolean http2Enabled, boolean sdchEnabled,
- String dataReductionProxyKey, String dataReductionProxyPrimaryProxy,
- String dataReductionProxyFallbackProxy, String dataReductionProxySecureProxyCheckUrl,
- boolean disableCache, int httpCacheMode, long httpCacheMaxSize,
- String experimentalOptions, long mockCertVerifier);
+ String storagePath, boolean quicEnabled, String quicUserAgentId, boolean http2Enabled,
+ boolean sdchEnabled, String dataReductionProxyKey,
+ String dataReductionProxyPrimaryProxy, String dataReductionProxyFallbackProxy,
+ String dataReductionProxySecureProxyCheckUrl, boolean disableCache, int httpCacheMode,
+ long httpCacheMaxSize, String experimentalOptions, long mockCertVerifier);
private static native void nativeAddQuicHint(
long urlRequestContextConfig, String host, int port, int alternatePort);
diff --git a/components/cronet/android/test/cronet_url_request_context_config_test.cc b/components/cronet/android/test/cronet_url_request_context_config_test.cc
index c879fe9..d3156c0 100644
--- a/components/cronet/android/test/cronet_url_request_context_config_test.cc
+++ b/components/cronet/android/test/cronet_url_request_context_config_test.cc
@@ -11,6 +11,7 @@
#include "base/android/scoped_java_ref.h"
#include "base/logging.h"
#include "components/cronet/url_request_context_config.h"
+#include "components/cronet/version.h"
#include "jni/CronetUrlRequestContextTest_jni.h"
namespace cronet {
@@ -32,6 +33,8 @@ static void VerifyUrlRequestContextConfig(
CHECK_EQ((*config->quic_hints.begin())->host, "example.com");
CHECK_EQ((*config->quic_hints.begin())->port, 12);
CHECK_EQ((*config->quic_hints.begin())->alternate_port, 34);
+ CHECK_NE(config->quic_user_agent_id.find("Cronet/" CRONET_VERSION),
+ std::string::npos);
CHECK_EQ(config->load_disable_cache, false);
CHECK_EQ(config->http_cache, URLRequestContextConfig::HttpCacheType::MEMORY);
CHECK_EQ(config->http_cache_max_size, 54321);
@@ -49,4 +52,4 @@ bool RegisterCronetUrlRequestContextConfigTest(JNIEnv* env) {
return RegisterNativesImpl(env);
}
-} // namespace cronet \ No newline at end of file
+} // namespace cronet
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java
index 655c2f3..45369d3 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java
@@ -48,7 +48,7 @@ public class QuicTest extends CronetTestBase {
.put("packet_loss_threshold", 0.5)
.put("idle_connection_timeout_seconds", 300)
.put("close_sessions_on_ip_change", true)
- .put("migrate_sessions_on_network_change", true);
+ .put("migrate_sessions_on_network_change", false);
JSONObject experimentalOptions = new JSONObject().put("QUIC", quicParams);
mBuilder.setExperimentalOptions(experimentalOptions.toString());
diff --git a/components/cronet/url_request_context_config.cc b/components/cronet/url_request_context_config.cc
index 4627628..49af1af 100644
--- a/components/cronet/url_request_context_config.cc
+++ b/components/cronet/url_request_context_config.cc
@@ -41,6 +41,8 @@ const char kQuicHostWhitelist[] = "host_whitelist";
const char kQuicCloseSessionsOnIpChange[] = "close_sessions_on_ip_change";
const char kQuicMigrateSessionsOnNetworkChange[] =
"migrate_sessions_on_network_change";
+const char kQuicPreferAes[] = "prefer_aes";
+const char kQuicUserAgentId[] = "user_agent_id";
// AsyncDNS experiment dictionary name.
const char kAsyncDnsFieldTrialName[] = "AsyncDNS";
@@ -148,6 +150,16 @@ void ParseAndSetExperimentalOptions(
context_builder->set_quic_migrate_sessions_on_network_change(
quic_migrate_sessions_on_network_change);
}
+
+ bool quic_prefer_aes = false;
+ if (quic_args->GetBoolean(kQuicPreferAes, &quic_prefer_aes)) {
+ context_builder->set_quic_prefer_aes(quic_prefer_aes);
+ }
+
+ std::string quic_user_agent_id;
+ if (quic_args->GetString(kQuicUserAgentId, &quic_user_agent_id)) {
+ context_builder->set_quic_user_agent_id(quic_user_agent_id);
+ }
}
const base::DictionaryValue* async_dns_args = nullptr;
@@ -187,6 +199,7 @@ URLRequestContextConfig::Pkp::~Pkp() {}
URLRequestContextConfig::URLRequestContextConfig(
bool enable_quic,
+ const std::string& quic_user_agent_id,
bool enable_spdy,
bool enable_sdch,
HttpCacheType http_cache,
@@ -201,6 +214,7 @@ URLRequestContextConfig::URLRequestContextConfig(
const std::string& data_reduction_secure_proxy_check_url,
scoped_ptr<net::CertVerifier> mock_cert_verifier)
: enable_quic(enable_quic),
+ quic_user_agent_id(quic_user_agent_id),
enable_spdy(enable_spdy),
enable_sdch(enable_sdch),
http_cache(http_cache),
@@ -239,6 +253,8 @@ void URLRequestContextConfig::ConfigureURLRequestContextBuilder(
context_builder->set_user_agent(user_agent);
context_builder->SetSpdyAndQuicEnabled(enable_spdy, enable_quic);
context_builder->set_sdch_enabled(enable_sdch);
+ if (enable_quic)
+ context_builder->set_quic_user_agent_id(quic_user_agent_id);
ParseAndSetExperimentalOptions(experimental_options, context_builder,
net_log);
diff --git a/components/cronet/url_request_context_config.h b/components/cronet/url_request_context_config.h
index 29e1c85..4031447 100644
--- a/components/cronet/url_request_context_config.h
+++ b/components/cronet/url_request_context_config.h
@@ -73,6 +73,8 @@ struct URLRequestContextConfig {
URLRequestContextConfig(
// Enable QUIC.
bool enable_quic,
+ // QUIC User Agent ID.
+ const std::string& quic_user_agent_id,
// Enable SPDY.
bool enable_spdy,
// Enable SDCH.
@@ -109,6 +111,8 @@ struct URLRequestContextConfig {
// Enable QUIC.
const bool enable_quic;
+ // QUIC User Agent ID.
+ const std::string quic_user_agent_id;
// Enable SPDY.
const bool enable_spdy;
// Enable SDCH.
diff --git a/components/cronet/url_request_context_config_unittest.cc b/components/cronet/url_request_context_config_unittest.cc
index f309e25..b140c34 100644
--- a/components/cronet/url_request_context_config_unittest.cc
+++ b/components/cronet/url_request_context_config_unittest.cc
@@ -19,6 +19,8 @@ TEST(URLRequestContextConfigTest, SetQuicExperimentalOptions) {
URLRequestContextConfig config(
// Enable QUIC.
true,
+ // QUIC User Agent ID.
+ "Default QUIC User Agent ID",
// Enable SPDY.
true,
// Enable SDCH.
@@ -38,6 +40,8 @@ TEST(URLRequestContextConfigTest, SetQuicExperimentalOptions) {
"{\"QUIC\":{\"max_server_configs_stored_in_properties\":2,"
"\"delay_tcp_race\":true,"
"\"max_number_of_lossy_connections\":10,"
+ "\"prefer_aes\":true,"
+ "\"user_agent_id\":\"Custom QUIC UAID\","
"\"packet_loss_threshold\":0.5,"
"\"idle_connection_timeout_seconds\":300,"
"\"close_sessions_on_ip_change\":true,"
@@ -71,12 +75,18 @@ TEST(URLRequestContextConfigTest, SetQuicExperimentalOptions) {
quic_connection_options.push_back(net::kREJ);
EXPECT_EQ(quic_connection_options, params->quic_connection_options);
+ // Check Custom QUIC User Agent Id.
+ EXPECT_EQ("Custom QUIC UAID", params->quic_user_agent_id);
+
// Check max_server_configs_stored_in_properties.
EXPECT_EQ(2u, params->quic_max_server_configs_stored_in_properties);
// Check delay_tcp_race.
EXPECT_TRUE(params->quic_delay_tcp_race);
+ // Check prefer_aes.
+ EXPECT_TRUE(params->quic_prefer_aes);
+
// Check max_number_of_lossy_connections and packet_loss_threshold.
EXPECT_EQ(10, params->quic_max_number_of_lossy_connections);
EXPECT_FLOAT_EQ(0.5f, params->quic_packet_loss_threshold);