Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: components/cronet/url_request_context_config.cc

Issue 2416473004: Add functionality for embedders to configure NQE (Closed)
Patch Set: ps Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/cronet/url_request_context_config.h" 5 #include "components/cronet/url_request_context_config.h"
6 6
7 #include <map>
7 #include <utility> 8 #include <utility>
8 9
10 #include "base/compiler_specific.h"
9 #include "base/json/json_reader.h" 11 #include "base/json/json_reader.h"
10 #include "base/logging.h" 12 #include "base/logging.h"
11 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
12 #include "base/sequenced_task_runner.h" 14 #include "base/sequenced_task_runner.h"
13 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/string_piece.h" 16 #include "base/strings/string_piece.h"
15 #include "base/strings/string_split.h" 17 #include "base/strings/string_split.h"
16 #include "base/values.h" 18 #include "base/values.h"
17 #include "components/cronet/stale_host_resolver.h" 19 #include "components/cronet/stale_host_resolver.h"
18 #include "net/base/address_family.h" 20 #include "net/base/address_family.h"
19 #include "net/cert/caching_cert_verifier.h" 21 #include "net/cert/caching_cert_verifier.h"
20 #include "net/cert/cert_verifier.h" 22 #include "net/cert/cert_verifier.h"
21 #include "net/cert/cert_verify_proc.h" 23 #include "net/cert/cert_verify_proc.h"
22 #include "net/cert/multi_threaded_cert_verifier.h" 24 #include "net/cert/multi_threaded_cert_verifier.h"
23 #include "net/dns/host_resolver.h" 25 #include "net/dns/host_resolver.h"
24 #include "net/dns/mapped_host_resolver.h" 26 #include "net/dns/mapped_host_resolver.h"
25 #include "net/http/http_server_properties.h" 27 #include "net/http/http_server_properties.h"
28 #include "net/nqe/network_quality_estimator_params.h"
26 #include "net/quic/chromium/quic_utils_chromium.h" 29 #include "net/quic/chromium/quic_utils_chromium.h"
27 #include "net/quic/core/quic_packets.h" 30 #include "net/quic/core/quic_packets.h"
28 #include "net/socket/ssl_client_socket.h" 31 #include "net/socket/ssl_client_socket.h"
29 #include "net/url_request/url_request_context_builder.h" 32 #include "net/url_request/url_request_context_builder.h"
30 33
31 namespace cronet { 34 namespace cronet {
32 35
33 namespace { 36 namespace {
34 37
35 // Name of disk cache directory. 38 // Name of disk cache directory.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 const char kStaleDnsMaxStaleUses[] = "max_stale_uses"; 75 const char kStaleDnsMaxStaleUses[] = "max_stale_uses";
73 // Name of boolean to allow stale DNS results from other networks to be used on 76 // Name of boolean to allow stale DNS results from other networks to be used on
74 // the current network. 77 // the current network.
75 const char kStaleDnsAllowOtherNetwork[] = "allow_other_network"; 78 const char kStaleDnsAllowOtherNetwork[] = "allow_other_network";
76 79
77 // Rules to override DNS resolution. Intended for testing. 80 // Rules to override DNS resolution. Intended for testing.
78 // See explanation of format in net/dns/mapped_host_resolver.h. 81 // See explanation of format in net/dns/mapped_host_resolver.h.
79 const char kHostResolverRulesFieldTrialName[] = "HostResolverRules"; 82 const char kHostResolverRulesFieldTrialName[] = "HostResolverRules";
80 const char kHostResolverRules[] = "host_resolver_rules"; 83 const char kHostResolverRules[] = "host_resolver_rules";
81 84
85 // NetworkQualityEstimator experiment dictionary name.
86 const char kNetworkQualityEstimatorFieldTrialName[] = "NetworkQualityEstimator";
87
82 // Disable IPv6 when on WiFi. This is a workaround for a known issue on certain 88 // Disable IPv6 when on WiFi. This is a workaround for a known issue on certain
83 // Android phones, and should not be necessary when not on one of those devices. 89 // Android phones, and should not be necessary when not on one of those devices.
84 // See https://crbug.com/696569 for details. 90 // See https://crbug.com/696569 for details.
85 const char kDisableIPv6OnWifi[] = "disable_ipv6_on_wifi"; 91 const char kDisableIPv6OnWifi[] = "disable_ipv6_on_wifi";
86 92
87 const char kSSLKeyLogFile[] = "ssl_key_log_file"; 93 const char kSSLKeyLogFile[] = "ssl_key_log_file";
88 94
89 } // namespace 95 } // namespace
90 96
91 URLRequestContextConfig::QuicHint::QuicHint(const std::string& host, 97 URLRequestContextConfig::QuicHint::QuicHint(const std::string& host,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 : enable_quic(enable_quic), 129 : enable_quic(enable_quic),
124 quic_user_agent_id(quic_user_agent_id), 130 quic_user_agent_id(quic_user_agent_id),
125 enable_spdy(enable_spdy), 131 enable_spdy(enable_spdy),
126 enable_sdch(enable_sdch), 132 enable_sdch(enable_sdch),
127 enable_brotli(enable_brotli), 133 enable_brotli(enable_brotli),
128 http_cache(http_cache), 134 http_cache(http_cache),
129 http_cache_max_size(http_cache_max_size), 135 http_cache_max_size(http_cache_max_size),
130 load_disable_cache(load_disable_cache), 136 load_disable_cache(load_disable_cache),
131 storage_path(storage_path), 137 storage_path(storage_path),
132 user_agent(user_agent), 138 user_agent(user_agent),
133 experimental_options(experimental_options),
134 mock_cert_verifier(std::move(mock_cert_verifier)), 139 mock_cert_verifier(std::move(mock_cert_verifier)),
135 enable_network_quality_estimator(enable_network_quality_estimator), 140 enable_network_quality_estimator(enable_network_quality_estimator),
136 bypass_public_key_pinning_for_local_trust_anchors( 141 bypass_public_key_pinning_for_local_trust_anchors(
137 bypass_public_key_pinning_for_local_trust_anchors), 142 bypass_public_key_pinning_for_local_trust_anchors),
138 cert_verifier_data(cert_verifier_data) {} 143 cert_verifier_data(cert_verifier_data),
144 experimental_options(experimental_options) {}
139 145
140 URLRequestContextConfig::~URLRequestContextConfig() {} 146 URLRequestContextConfig::~URLRequestContextConfig() {}
141 147
142 void URLRequestContextConfig::ParseAndSetExperimentalOptions( 148 void URLRequestContextConfig::ParseAndSetExperimentalOptions(
143 net::URLRequestContextBuilder* context_builder, 149 net::URLRequestContextBuilder* context_builder,
144 net::NetLog* net_log, 150 net::NetLog* net_log,
145 const scoped_refptr<base::SequencedTaskRunner>& file_task_runner) { 151 const scoped_refptr<base::SequencedTaskRunner>& file_task_runner) {
152 nqe_params.reset(new net::NetworkQualityEstimatorParams(
mgersh 2017/06/28 18:26:50 base::MakeUnique is preferred over raw new.
tbansal1 2017/06/29 01:17:58 Done.
153 std::map<std::string, std::string>()));
146 if (experimental_options.empty()) 154 if (experimental_options.empty())
147 return; 155 return;
148 156
149 DCHECK(net_log); 157 DCHECK(net_log);
150 158
151 DVLOG(1) << "Experimental Options:" << experimental_options; 159 DVLOG(1) << "Experimental Options:" << experimental_options;
152 std::unique_ptr<base::Value> options = 160 std::unique_ptr<base::Value> options =
153 base::JSONReader::Read(experimental_options); 161 base::JSONReader::Read(experimental_options);
154 162
155 if (!options) { 163 if (!options) {
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 if (!ssl_key_log_file.empty() && file_task_runner) { 326 if (!ssl_key_log_file.empty() && file_task_runner) {
319 // SetSSLKeyLogFile is only safe to call before any SSLClientSockets 327 // SetSSLKeyLogFile is only safe to call before any SSLClientSockets
320 // are created. This should not be used if there are multiple 328 // are created. This should not be used if there are multiple
321 // CronetEngine. 329 // CronetEngine.
322 // TODO(xunjieli): Expose this as a stable API after crbug.com/458365 330 // TODO(xunjieli): Expose this as a stable API after crbug.com/458365
323 // is resolved. 331 // is resolved.
324 net::SSLClientSocket::SetSSLKeyLogFile(ssl_key_log_file, 332 net::SSLClientSocket::SetSSLKeyLogFile(ssl_key_log_file,
325 file_task_runner); 333 file_task_runner);
326 } 334 }
327 } 335 }
336 } else if (it.key() == kNetworkQualityEstimatorFieldTrialName) {
337 const base::DictionaryValue* nqe_args = nullptr;
338 if (!it.value().GetAsDictionary(&nqe_args)) {
339 LOG(ERROR) << "\"" << it.key() << "\" config params \"" << it.value()
340 << "\" is not a dictionary value";
341 effective_experimental_options->Remove(it.key(), nullptr);
342 continue;
343 }
344
345 std::string nqe_option;
346 if (nqe_args->GetString("persistent_cache_reading_enabled",
mgersh 2017/06/28 18:26:50 This string can be moved to the top with the other
tbansal1 2017/06/29 01:17:58 Done.
347 &nqe_option)) {
348 nqe_params->set_persistent_cache_reading_enabled(
349 nqe_option == "true" ? true : false);
mgersh 2017/06/28 18:26:50 This option could be a boolean instead of a string
tbansal1 2017/06/29 01:17:58 Thanks, that's much better.
350 }
351
352 if (nqe_args->GetString("effective_connection_type_algorithm",
mgersh 2017/06/28 18:26:50 This string too.
tbansal1 2017/06/29 01:17:58 Done.
353 &nqe_option)) {
354 nqe_params->SetEffectiveConnectionTypeAlgorithm(
355 net::NetworkQualityEstimatorParams::
356 GetEffectiveConnectionTypeAlgorithmFromString(nqe_option));
357 }
358
359 if (nqe_args->GetString(net::kForceEffectiveConnectionType,
360 &nqe_option)) {
361 net::EffectiveConnectionType forced_effective_connection_type =
362 net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
363 bool effective_connection_type_available =
364 net::GetEffectiveConnectionTypeForName(
365 nqe_option, &forced_effective_connection_type);
366 DCHECK(effective_connection_type_available);
mgersh 2017/06/28 18:26:50 This depends on a user-provided value being correc
tbansal1 2017/06/29 01:17:58 Done.
367 ALLOW_UNUSED_LOCAL(effective_connection_type_available);
368 nqe_params->SetForcedEffectiveConnectionType(
369 forced_effective_connection_type);
370 }
371
328 } else { 372 } else {
329 LOG(WARNING) << "Unrecognized Cronet experimental option \"" << it.key() 373 LOG(WARNING) << "Unrecognized Cronet experimental option \"" << it.key()
330 << "\" with params \"" << it.value(); 374 << "\" with params \"" << it.value();
331 effective_experimental_options->Remove(it.key(), nullptr); 375 effective_experimental_options->Remove(it.key(), nullptr);
332 } 376 }
333 } 377 }
334 378
335 if (async_dns_enable || stale_dns_enable || host_resolver_rules_enable || 379 if (async_dns_enable || stale_dns_enable || host_resolver_rules_enable ||
336 disable_ipv6_on_wifi) { 380 disable_ipv6_on_wifi) {
337 CHECK(net_log) << "All DNS-related experiments require NetLog."; 381 CHECK(net_log) << "All DNS-related experiments require NetLog.";
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 URLRequestContextConfigBuilder::Build() { 454 URLRequestContextConfigBuilder::Build() {
411 return base::MakeUnique<URLRequestContextConfig>( 455 return base::MakeUnique<URLRequestContextConfig>(
412 enable_quic, quic_user_agent_id, enable_spdy, enable_sdch, enable_brotli, 456 enable_quic, quic_user_agent_id, enable_spdy, enable_sdch, enable_brotli,
413 http_cache, http_cache_max_size, load_disable_cache, storage_path, 457 http_cache, http_cache_max_size, load_disable_cache, storage_path,
414 user_agent, experimental_options, std::move(mock_cert_verifier), 458 user_agent, experimental_options, std::move(mock_cert_verifier),
415 enable_network_quality_estimator, 459 enable_network_quality_estimator,
416 bypass_public_key_pinning_for_local_trust_anchors, cert_verifier_data); 460 bypass_public_key_pinning_for_local_trust_anchors, cert_verifier_data);
417 } 461 }
418 462
419 } // namespace cronet 463 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698