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

Side by Side Diff: components/network_session_configurator/network_session_configurator.cc

Issue 1892123003: Add components/network_session_configurator. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add dependencies for iOS. Created 4 years, 8 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
(Empty)
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/network_session_configurator/network_session_configurator.h "
6
7 #include <map>
8
9 #include "base/metrics/field_trial.h"
10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/string_piece.h"
12 #include "base/strings/string_split.h"
13 #include "base/strings/string_util.h"
14 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param s.h"
15 #include "components/network_session_configurator/switches.h"
16 #include "components/variations/variations_associated_data.h"
17 #include "components/version_info/version_info.h"
18 #include "net/http/http_stream_factory.h"
19 #include "net/quic/quic_protocol.h"
20 #include "net/quic/quic_utils.h"
21 #include "net/url_request/url_fetcher.h"
22
23 namespace {
24
25 // Map from name to value for all parameters associate with a field trial.
26 using VariationParameters = std::map<std::string, std::string>;
27
28 const char kTCPFastOpenFieldTrialName[] = "TCPFastOpen";
29 const char kTCPFastOpenHttpsEnabledGroupName[] = "HttpsEnabled";
30
31 const char kQuicFieldTrialName[] = "QUIC";
32 const char kQuicFieldTrialEnabledGroupName[] = "Enabled";
33 const char kQuicFieldTrialHttpsEnabledGroupName[] = "HttpsEnabled";
34
35 // The SPDY trial composes two different trial plus control groups:
36 // * A "holdback" group with SPDY disabled, and corresponding control
37 // (SPDY/3.1). The primary purpose of the holdback group is to encourage site
38 // operators to do feature detection rather than UA-sniffing. As such, this
39 // trial runs continuously.
40 // * A SPDY/4 experiment, for SPDY/4 (aka HTTP/2) vs SPDY/3.1 comparisons and
41 // eventual SPDY/4 deployment.
42 const char kSpdyFieldTrialName[] = "SPDY";
43 const char kSpdyFieldTrialHoldbackGroupNamePrefix[] = "SpdyDisabled";
44 const char kSpdyFieldTrialSpdy31GroupNamePrefix[] = "Spdy31Enabled";
45 const char kSpdyFieldTrialSpdy4GroupNamePrefix[] = "Spdy4Enabled";
46 const char kSpdyFieldTrialParametrizedPrefix[] = "Parametrized";
47
48 // The AltSvc trial controls whether Alt-Svc headers are parsed.
49 // Disabled:
50 // Alt-Svc headers are not parsed.
51 // Alternate-Protocol headers are parsed.
52 // Enabled:
53 // Alt-Svc headers are parsed, but only same-host entries are used by
54 // default. (Use "enable_alternative_service_with_different_host" QUIC
55 // parameter to enable entries with different hosts.)
56 // Alternate-Protocol headers are ignored for responses that have an Alt-Svc
57 // header.
58 const char kAltSvcFieldTrialName[] = "ParseAltSvc";
59 const char kAltSvcFieldTrialDisabledPrefix[] = "AltSvcDisabled";
60 const char kAltSvcFieldTrialEnabledPrefix[] = "AltSvcEnabled";
61
62 // Field trial for NPN.
63 const char kNpnTrialName[] = "NPN";
64 const char kNpnTrialEnabledGroupNamePrefix[] = "Enable";
65 const char kNpnTrialDisabledGroupNamePrefix[] = "Disable";
66
67 // Field trial for priority dependencies.
68 const char kSpdyDependenciesFieldTrial[] = "SpdyEnableDependencies";
69 const char kSpdyDependenciesFieldTrialEnable[] = "Enable";
70 const char kSpdyDepencenciesFieldTrialDisable[] = "Disable";
71
72 int GetSwitchValueAsInt(const base::CommandLine& command_line,
73 const std::string& switch_name) {
74 int value;
75 if (!base::StringToInt(command_line.GetSwitchValueASCII(switch_name),
76 &value)) {
77 return 0;
78 }
79 return value;
80 }
81
82 // Returns the value associated with |key| in |params| or "" if the
83 // key is not present in the map.
84 const std::string& GetVariationParam(
85 const std::map<std::string, std::string>& params,
86 const std::string& key) {
87 std::map<std::string, std::string>::const_iterator it = params.find(key);
88 if (it == params.end())
89 return base::EmptyString();
90
91 return it->second;
92 }
93
94 void ConfigureTCPFastOpenParams(base::StringPiece tfo_trial_group,
95 net::HttpNetworkSession::Params* params) {
96 if (tfo_trial_group == kTCPFastOpenHttpsEnabledGroupName)
97 params->enable_tcp_fast_open_for_ssl = true;
98 }
99
100 void ConfigureSpdyParams(const base::CommandLine& command_line,
101 base::StringPiece spdy_trial_group,
102 const VariationParameters& spdy_trial_params,
103 bool is_spdy_allowed_by_policy,
104 net::HttpNetworkSession::Params* params) {
105 // Only handle SPDY field trial parameters and command line flags if
106 // "spdy.disabled" preference is not forced via policy.
107 if (!is_spdy_allowed_by_policy) {
108 params->enable_spdy31 = false;
109 params->enable_http2 = false;
110 return;
111 }
112
113 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests))
114 net::URLFetcher::SetIgnoreCertificateRequests(true);
115
116 if (command_line.HasSwitch(switches::kDisableHttp2)) {
117 params->enable_spdy31 = false;
118 params->enable_http2 = false;
119 return;
120 }
121
122 if (spdy_trial_group.starts_with(kSpdyFieldTrialHoldbackGroupNamePrefix)) {
123 net::HttpStreamFactory::set_spdy_enabled(false);
124 return;
125 }
126 if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy31GroupNamePrefix)) {
127 params->enable_spdy31 = true;
128 params->enable_http2 = false;
129 return;
130 }
131 if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy4GroupNamePrefix)) {
132 params->enable_spdy31 = true;
133 params->enable_http2 = true;
134 return;
135 }
136 if (spdy_trial_group.starts_with(kSpdyFieldTrialParametrizedPrefix)) {
137 bool spdy_enabled = false;
138 params->enable_spdy31 = false;
139 params->enable_http2 = false;
140 if (base::LowerCaseEqualsASCII(
141 GetVariationParam(spdy_trial_params, "enable_http2"), "true")) {
142 spdy_enabled = true;
143 params->enable_http2 = true;
144 }
145 if (base::LowerCaseEqualsASCII(
146 GetVariationParam(spdy_trial_params, "enable_spdy31"), "true")) {
147 spdy_enabled = true;
148 params->enable_spdy31 = true;
149 }
150 // TODO(bnc): https://crbug.com/521597
151 // HttpStreamFactory::spdy_enabled_ is redundant with params->enable_http2
152 // and enable_spdy31, can it be eliminated?
153 net::HttpStreamFactory::set_spdy_enabled(spdy_enabled);
154 return;
155 }
156 }
157
158 void ConfigureAltSvcParams(const base::CommandLine& command_line,
159 base::StringPiece altsvc_trial_group,
160 net::HttpNetworkSession::Params* params) {
161 if (command_line.HasSwitch(switches::kEnableAlternativeServices) ||
162 altsvc_trial_group.starts_with(kAltSvcFieldTrialEnabledPrefix)) {
163 params->parse_alternative_services = true;
164 return;
165 }
166 if (altsvc_trial_group.starts_with(kAltSvcFieldTrialDisabledPrefix)) {
167 params->parse_alternative_services = false;
168 }
169 }
170
171 void ConfigureNPNParams(const base::CommandLine& command_line,
172 base::StringPiece npn_trial_group,
173 net::HttpNetworkSession::Params* params) {
174 if (npn_trial_group.starts_with(kNpnTrialEnabledGroupNamePrefix)) {
175 params->enable_npn = true;
176 } else if (npn_trial_group.starts_with(kNpnTrialDisabledGroupNamePrefix)) {
177 params->enable_npn = false;
178 }
179 }
180
181 void ConfigurePriorityDependencies(
182 base::StringPiece priority_dependencies_trial_group,
183 net::HttpNetworkSession::Params* params) {
184 if (priority_dependencies_trial_group.starts_with(
185 kSpdyDependenciesFieldTrialEnable)) {
186 params->enable_priority_dependencies = true;
187 } else if (priority_dependencies_trial_group.starts_with(
188 kSpdyDepencenciesFieldTrialDisable)) {
189 params->enable_priority_dependencies = false;
190 }
191 }
192
193 bool ShouldEnableQuic(const base::CommandLine& command_line,
194 base::StringPiece quic_trial_group,
195 bool is_quic_allowed_by_policy) {
196 if (command_line.HasSwitch(switches::kDisableQuic) ||
197 !is_quic_allowed_by_policy)
198 return false;
199
200 if (command_line.HasSwitch(switches::kEnableQuic))
201 return true;
202
203 return quic_trial_group.starts_with(kQuicFieldTrialEnabledGroupName) ||
204 quic_trial_group.starts_with(kQuicFieldTrialHttpsEnabledGroupName);
205 }
206
207 bool ShouldEnableQuicForProxies(const base::CommandLine& command_line,
208 base::StringPiece quic_trial_group,
209 bool is_quic_allowed_by_policy) {
210 return ShouldEnableQuic(command_line, quic_trial_group,
211 is_quic_allowed_by_policy) ||
212 network_session_configurator::ShouldEnableQuicForDataReductionProxy(
213 command_line);
214 }
215
216 bool ShouldDisableQuicWhenConnectionTimesOutWithOpenStreams(
217 const VariationParameters& quic_trial_params) {
218 return base::LowerCaseEqualsASCII(
219 GetVariationParam(quic_trial_params,
220 "disable_quic_on_timeout_with_open_streams"),
221 "true");
222 }
223
224 bool ShouldQuicDisableConnectionPooling(
225 const VariationParameters& quic_trial_params) {
226 return base::LowerCaseEqualsASCII(
227 GetVariationParam(quic_trial_params, "disable_connection_pooling"),
228 "true");
229 }
230
231 bool ShouldQuicEnableAlternativeServicesForDifferentHost(
232 const base::CommandLine& command_line,
233 const VariationParameters& quic_trial_params) {
234 // TODO(bnc): Remove inaccurately named "use_alternative_services" parameter.
235 return command_line.HasSwitch(switches::kEnableAlternativeServices) ||
236 base::LowerCaseEqualsASCII(
237 GetVariationParam(quic_trial_params, "use_alternative_services"),
238 "true") ||
239 base::LowerCaseEqualsASCII(
240 GetVariationParam(
241 quic_trial_params,
242 "enable_alternative_service_with_different_host"),
243 "true");
244 }
245
246 bool ShouldEnableQuicPortSelection(const base::CommandLine& command_line) {
247 if (command_line.HasSwitch(switches::kDisableQuicPortSelection))
248 return false;
249
250 if (command_line.HasSwitch(switches::kEnableQuicPortSelection))
251 return true;
252
253 return false; // Default to disabling port selection on all channels.
254 }
255
256 net::QuicTagVector GetQuicConnectionOptions(
257 const base::CommandLine& command_line,
258 const VariationParameters& quic_trial_params) {
259 if (command_line.HasSwitch(switches::kQuicConnectionOptions)) {
260 return net::QuicUtils::ParseQuicConnectionOptions(
261 command_line.GetSwitchValueASCII(switches::kQuicConnectionOptions));
262 }
263
264 VariationParameters::const_iterator it =
265 quic_trial_params.find("connection_options");
266 if (it == quic_trial_params.end()) {
267 return net::QuicTagVector();
268 }
269
270 return net::QuicUtils::ParseQuicConnectionOptions(it->second);
271 }
272
273 bool ShouldQuicAlwaysRequireHandshakeConfirmation(
274 const VariationParameters& quic_trial_params) {
275 return base::LowerCaseEqualsASCII(
276 GetVariationParam(quic_trial_params,
277 "always_require_handshake_confirmation"),
278 "true");
279 }
280
281 float GetQuicLoadServerInfoTimeoutSrttMultiplier(
282 const VariationParameters& quic_trial_params) {
283 double value;
284 if (base::StringToDouble(
285 GetVariationParam(quic_trial_params, "load_server_info_time_to_srtt"),
286 &value)) {
287 return static_cast<float>(value);
288 }
289 return 0.0f;
290 }
291
292 bool ShouldQuicEnableConnectionRacing(
293 const VariationParameters& quic_trial_params) {
294 return base::LowerCaseEqualsASCII(
295 GetVariationParam(quic_trial_params, "enable_connection_racing"), "true");
296 }
297
298 bool ShouldQuicEnableNonBlockingIO(
299 const VariationParameters& quic_trial_params) {
300 return base::LowerCaseEqualsASCII(
301 GetVariationParam(quic_trial_params, "enable_non_blocking_io"), "true");
302 }
303
304 bool ShouldQuicDisableDiskCache(const VariationParameters& quic_trial_params) {
305 return base::LowerCaseEqualsASCII(
306 GetVariationParam(quic_trial_params, "disable_disk_cache"), "true");
307 }
308
309 bool ShouldQuicPreferAes(const VariationParameters& quic_trial_params) {
310 return base::LowerCaseEqualsASCII(
311 GetVariationParam(quic_trial_params, "prefer_aes"), "true");
312 }
313
314 int GetQuicMaxNumberOfLossyConnections(
315 const VariationParameters& quic_trial_params) {
316 int value;
317 if (base::StringToInt(GetVariationParam(quic_trial_params,
318 "max_number_of_lossy_connections"),
319 &value)) {
320 return value;
321 }
322 return 0;
323 }
324
325 float GetQuicPacketLossThreshold(const VariationParameters& quic_trial_params) {
326 double value;
327 if (base::StringToDouble(
328 GetVariationParam(quic_trial_params, "packet_loss_threshold"),
329 &value)) {
330 return static_cast<float>(value);
331 }
332 return 0.0f;
333 }
334
335 int GetQuicSocketReceiveBufferSize(
336 const VariationParameters& quic_trial_params) {
337 int value;
338 if (base::StringToInt(
339 GetVariationParam(quic_trial_params, "receive_buffer_size"),
340 &value)) {
341 return value;
342 }
343 return 0;
344 }
345
346 bool ShouldQuicDelayTcpRace(const VariationParameters& quic_trial_params) {
347 return base::LowerCaseEqualsASCII(
348 GetVariationParam(quic_trial_params, "delay_tcp_race"), "true");
349 }
350
351 bool ShouldQuicCloseSessionsOnIpChange(
352 const VariationParameters& quic_trial_params) {
353 return base::LowerCaseEqualsASCII(
354 GetVariationParam(quic_trial_params, "close_sessions_on_ip_change"),
355 "true");
356 }
357
358 int GetQuicIdleConnectionTimeoutSeconds(
359 const VariationParameters& quic_trial_params) {
360 int value;
361 if (base::StringToInt(GetVariationParam(quic_trial_params,
362 "idle_connection_timeout_seconds"),
363 &value)) {
364 return value;
365 }
366 return 0;
367 }
368
369 bool ShouldQuicDisablePreConnectIfZeroRtt(
370 const VariationParameters& quic_trial_params) {
371 return base::LowerCaseEqualsASCII(
372 GetVariationParam(quic_trial_params, "disable_preconnect_if_0rtt"),
373 "true");
374 }
375
376 std::unordered_set<std::string> GetQuicHostWhitelist(
377 const base::CommandLine& command_line,
378 const VariationParameters& quic_trial_params) {
379 std::string whitelist;
380 if (command_line.HasSwitch(switches::kQuicHostWhitelist)) {
381 whitelist = command_line.GetSwitchValueASCII(switches::kQuicHostWhitelist);
382 } else {
383 whitelist = GetVariationParam(quic_trial_params, "quic_host_whitelist");
384 }
385 std::unordered_set<std::string> hosts;
386 for (const std::string& host : base::SplitString(
387 whitelist, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) {
388 hosts.insert(host);
389 }
390 return hosts;
391 }
392
393 bool ShouldQuicMigrateSessionsOnNetworkChange(
394 const VariationParameters& quic_trial_params) {
395 return base::LowerCaseEqualsASCII(
396 GetVariationParam(quic_trial_params,
397 "migrate_sessions_on_network_change"),
398 "true");
399 }
400
401 bool ShouldQuicMigrateSessionsEarly(
402 const VariationParameters& quic_trial_params) {
403 return base::LowerCaseEqualsASCII(
404 GetVariationParam(quic_trial_params, "migrate_sessions_early"), "true");
405 }
406
407 size_t GetQuicMaxPacketLength(const base::CommandLine& command_line,
408 const VariationParameters& quic_trial_params) {
409 if (command_line.HasSwitch(switches::kQuicMaxPacketLength)) {
410 unsigned value;
411 if (!base::StringToUint(
412 command_line.GetSwitchValueASCII(switches::kQuicMaxPacketLength),
413 &value)) {
414 return 0;
415 }
416 return value;
417 }
418
419 unsigned value;
420 if (base::StringToUint(
421 GetVariationParam(quic_trial_params, "max_packet_length"), &value)) {
422 return value;
423 }
424 return 0;
425 }
426
427 net::QuicVersion ParseQuicVersion(const std::string& quic_version) {
428 net::QuicVersionVector supported_versions = net::QuicSupportedVersions();
429 for (size_t i = 0; i < supported_versions.size(); ++i) {
430 net::QuicVersion version = supported_versions[i];
431 if (net::QuicVersionToString(version) == quic_version) {
432 return version;
433 }
434 }
435
436 return net::QUIC_VERSION_UNSUPPORTED;
437 }
438
439 net::QuicVersion GetQuicVersion(const base::CommandLine& command_line,
440 const VariationParameters& quic_trial_params) {
441 if (command_line.HasSwitch(switches::kQuicVersion)) {
442 return ParseQuicVersion(
443 command_line.GetSwitchValueASCII(switches::kQuicVersion));
444 }
445
446 return ParseQuicVersion(GetVariationParam(quic_trial_params, "quic_version"));
447 }
448
449 void ConfigureQuicParams(const base::CommandLine& command_line,
450 base::StringPiece quic_trial_group,
451 const VariationParameters& quic_trial_params,
452 bool is_quic_allowed_by_policy,
453 const std::string& quic_user_agent_id,
454 net::HttpNetworkSession::Params* params) {
455 params->enable_quic = ShouldEnableQuic(command_line, quic_trial_group,
456 is_quic_allowed_by_policy);
457 params->disable_quic_on_timeout_with_open_streams =
458 ShouldDisableQuicWhenConnectionTimesOutWithOpenStreams(quic_trial_params);
459 params->enable_quic_for_proxies = ShouldEnableQuicForProxies(
460 command_line, quic_trial_group, is_quic_allowed_by_policy);
461
462 if (ShouldQuicEnableAlternativeServicesForDifferentHost(command_line,
463 quic_trial_params)) {
464 params->enable_alternative_service_with_different_host = true;
465 params->parse_alternative_services = true;
466 } else {
467 params->enable_alternative_service_with_different_host = false;
468 }
469
470 if (params->enable_quic) {
471 params->quic_always_require_handshake_confirmation =
472 ShouldQuicAlwaysRequireHandshakeConfirmation(quic_trial_params);
473 params->quic_disable_connection_pooling =
474 ShouldQuicDisableConnectionPooling(quic_trial_params);
475 int receive_buffer_size = GetQuicSocketReceiveBufferSize(quic_trial_params);
476 if (receive_buffer_size != 0) {
477 params->quic_socket_receive_buffer_size = receive_buffer_size;
478 }
479 params->quic_delay_tcp_race = ShouldQuicDelayTcpRace(quic_trial_params);
480 float load_server_info_timeout_srtt_multiplier =
481 GetQuicLoadServerInfoTimeoutSrttMultiplier(quic_trial_params);
482 if (load_server_info_timeout_srtt_multiplier != 0) {
483 params->quic_load_server_info_timeout_srtt_multiplier =
484 load_server_info_timeout_srtt_multiplier;
485 }
486 params->quic_enable_connection_racing =
487 ShouldQuicEnableConnectionRacing(quic_trial_params);
488 params->quic_enable_non_blocking_io =
489 ShouldQuicEnableNonBlockingIO(quic_trial_params);
490 params->quic_disable_disk_cache =
491 ShouldQuicDisableDiskCache(quic_trial_params);
492 params->quic_prefer_aes = ShouldQuicPreferAes(quic_trial_params);
493 int max_number_of_lossy_connections =
494 GetQuicMaxNumberOfLossyConnections(quic_trial_params);
495 if (max_number_of_lossy_connections != 0) {
496 params->quic_max_number_of_lossy_connections =
497 max_number_of_lossy_connections;
498 }
499 float packet_loss_threshold = GetQuicPacketLossThreshold(quic_trial_params);
500 if (packet_loss_threshold != 0)
501 params->quic_packet_loss_threshold = packet_loss_threshold;
502 params->enable_quic_port_selection =
503 ShouldEnableQuicPortSelection(command_line);
504 params->quic_connection_options =
505 GetQuicConnectionOptions(command_line, quic_trial_params);
506 params->quic_close_sessions_on_ip_change =
507 ShouldQuicCloseSessionsOnIpChange(quic_trial_params);
508 int idle_connection_timeout_seconds =
509 GetQuicIdleConnectionTimeoutSeconds(quic_trial_params);
510 if (idle_connection_timeout_seconds != 0) {
511 params->quic_idle_connection_timeout_seconds =
512 idle_connection_timeout_seconds;
513 }
514 params->quic_disable_preconnect_if_0rtt =
515 ShouldQuicDisablePreConnectIfZeroRtt(quic_trial_params);
516 params->quic_host_whitelist =
517 GetQuicHostWhitelist(command_line, quic_trial_params);
518 params->quic_migrate_sessions_on_network_change =
519 ShouldQuicMigrateSessionsOnNetworkChange(quic_trial_params);
520 params->quic_migrate_sessions_early =
521 ShouldQuicMigrateSessionsEarly(quic_trial_params);
522 }
523
524 size_t max_packet_length =
525 GetQuicMaxPacketLength(command_line, quic_trial_params);
526 if (max_packet_length != 0) {
527 params->quic_max_packet_length = max_packet_length;
528 }
529
530 params->quic_user_agent_id = quic_user_agent_id;
531
532 net::QuicVersion version = GetQuicVersion(command_line, quic_trial_params);
533 if (version != net::QUIC_VERSION_UNSUPPORTED) {
534 net::QuicVersionVector supported_versions;
535 supported_versions.push_back(version);
536 params->quic_supported_versions = supported_versions;
537 }
538
539 if (command_line.HasSwitch(switches::kOriginToForceQuicOn)) {
540 std::string origins =
541 command_line.GetSwitchValueASCII(switches::kOriginToForceQuicOn);
542 for (const std::string& host_port : base::SplitString(
543 origins, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) {
544 net::HostPortPair quic_origin = net::HostPortPair::FromString(host_port);
545 if (!quic_origin.IsEmpty())
546 params->origins_to_force_quic_on.insert(quic_origin);
547 }
548 }
549 }
550
551 void ParseFieldTrialsAndCommandLineInternal(
552 const base::CommandLine& command_line,
553 bool is_spdy_allowed_by_policy,
554 bool is_quic_allowed_by_policy,
555 const std::string& quic_user_agent_id,
556 net::HttpNetworkSession::Params* params) {
557 // Parameters only controlled by command line.
558 if (command_line.HasSwitch(switches::kIgnoreCertificateErrors))
559 params->ignore_certificate_errors = true;
560 if (command_line.HasSwitch(switches::kTestingFixedHttpPort)) {
561 params->testing_fixed_http_port =
562 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpPort);
563 }
564 if (command_line.HasSwitch(switches::kTestingFixedHttpsPort)) {
565 params->testing_fixed_https_port =
566 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpsPort);
567 }
568
569 // Always fetch the field trial groups to ensure they are reported correctly.
570 // The command line flags will be associated with a group that is reported so
571 // long as trial is actually queried.
572
573 std::string altsvc_trial_group =
574 base::FieldTrialList::FindFullName(kAltSvcFieldTrialName);
575 ConfigureAltSvcParams(command_line, altsvc_trial_group, params);
576
577 std::string quic_trial_group =
578 base::FieldTrialList::FindFullName(kQuicFieldTrialName);
579 VariationParameters quic_trial_params;
580 if (!variations::GetVariationParams(kQuicFieldTrialName, &quic_trial_params))
581 quic_trial_params.clear();
582 ConfigureQuicParams(command_line, quic_trial_group, quic_trial_params,
583 is_quic_allowed_by_policy, quic_user_agent_id, params);
584
585 if (!is_spdy_allowed_by_policy) {
586 base::FieldTrial* trial = base::FieldTrialList::Find(kSpdyFieldTrialName);
587 if (trial)
588 trial->Disable();
589 }
590 std::string spdy_trial_group =
591 base::FieldTrialList::FindFullName(kSpdyFieldTrialName);
592 VariationParameters spdy_trial_params;
593 if (!variations::GetVariationParams(kSpdyFieldTrialName, &spdy_trial_params))
594 spdy_trial_params.clear();
595 ConfigureSpdyParams(command_line, spdy_trial_group, spdy_trial_params,
596 is_spdy_allowed_by_policy, params);
597
598 const std::string tfo_trial_group =
599 base::FieldTrialList::FindFullName(kTCPFastOpenFieldTrialName);
600 ConfigureTCPFastOpenParams(tfo_trial_group, params);
601
602 std::string npn_trial_group =
603 base::FieldTrialList::FindFullName(kNpnTrialName);
604 ConfigureNPNParams(command_line, npn_trial_group, params);
605
606 std::string priority_dependencies_trial_group =
607 base::FieldTrialList::FindFullName(kSpdyDependenciesFieldTrial);
608 ConfigurePriorityDependencies(priority_dependencies_trial_group, params);
609 }
610
611 } // anonymous namespace
612
613 namespace network_session_configurator {
614
615 void ParseFieldTrials(bool is_spdy_allowed_by_policy,
616 bool is_quic_allowed_by_policy,
617 const std::string& quic_user_agent_id,
618 net::HttpNetworkSession::Params* params) {
619 const base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
620 ParseFieldTrialsAndCommandLineInternal(
621 command_line, is_spdy_allowed_by_policy, is_quic_allowed_by_policy,
622 quic_user_agent_id, params);
623 }
624
625 void ParseFieldTrialsAndCommandLine(bool is_spdy_allowed_by_policy,
626 bool is_quic_allowed_by_policy,
627 const std::string& quic_user_agent_id,
628 net::HttpNetworkSession::Params* params) {
629 const base::CommandLine& command_line =
630 *base::CommandLine::ForCurrentProcess();
631 ParseFieldTrialsAndCommandLineInternal(
632 command_line, is_spdy_allowed_by_policy, is_quic_allowed_by_policy,
633 quic_user_agent_id, params);
634 }
635
636 bool ShouldEnableQuicForDataReductionProxy(
637 const base::CommandLine& command_line) {
638 if (command_line.HasSwitch(switches::kDisableQuic))
639 return false;
640
641 return data_reduction_proxy::params::IsIncludedInQuicFieldTrial();
642 }
643
644 } // namespace network_session_configurator
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698