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

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: Rebase. Created 4 years, 7 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 ShouldQuicCloseSessionsOnIpChange(
347 const VariationParameters& quic_trial_params) {
348 return base::LowerCaseEqualsASCII(
349 GetVariationParam(quic_trial_params, "close_sessions_on_ip_change"),
350 "true");
351 }
352
353 int GetQuicIdleConnectionTimeoutSeconds(
354 const VariationParameters& quic_trial_params) {
355 int value;
356 if (base::StringToInt(GetVariationParam(quic_trial_params,
357 "idle_connection_timeout_seconds"),
358 &value)) {
359 return value;
360 }
361 return 0;
362 }
363
364 bool ShouldQuicDisablePreConnectIfZeroRtt(
365 const VariationParameters& quic_trial_params) {
366 return base::LowerCaseEqualsASCII(
367 GetVariationParam(quic_trial_params, "disable_preconnect_if_0rtt"),
368 "true");
369 }
370
371 std::unordered_set<std::string> GetQuicHostWhitelist(
372 const base::CommandLine& command_line,
373 const VariationParameters& quic_trial_params) {
374 std::string whitelist;
375 if (command_line.HasSwitch(switches::kQuicHostWhitelist)) {
376 whitelist = command_line.GetSwitchValueASCII(switches::kQuicHostWhitelist);
377 } else {
378 whitelist = GetVariationParam(quic_trial_params, "quic_host_whitelist");
379 }
380 std::unordered_set<std::string> hosts;
381 for (const std::string& host : base::SplitString(
382 whitelist, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) {
383 hosts.insert(host);
384 }
385 return hosts;
386 }
387
388 bool ShouldQuicMigrateSessionsOnNetworkChange(
389 const VariationParameters& quic_trial_params) {
390 return base::LowerCaseEqualsASCII(
391 GetVariationParam(quic_trial_params,
392 "migrate_sessions_on_network_change"),
393 "true");
394 }
395
396 bool ShouldQuicMigrateSessionsEarly(
397 const VariationParameters& quic_trial_params) {
398 return base::LowerCaseEqualsASCII(
399 GetVariationParam(quic_trial_params, "migrate_sessions_early"), "true");
400 }
401
402 size_t GetQuicMaxPacketLength(const base::CommandLine& command_line,
403 const VariationParameters& quic_trial_params) {
404 if (command_line.HasSwitch(switches::kQuicMaxPacketLength)) {
405 unsigned value;
406 if (!base::StringToUint(
407 command_line.GetSwitchValueASCII(switches::kQuicMaxPacketLength),
408 &value)) {
409 return 0;
410 }
411 return value;
412 }
413
414 unsigned value;
415 if (base::StringToUint(
416 GetVariationParam(quic_trial_params, "max_packet_length"), &value)) {
417 return value;
418 }
419 return 0;
420 }
421
422 net::QuicVersion ParseQuicVersion(const std::string& quic_version) {
423 net::QuicVersionVector supported_versions = net::QuicSupportedVersions();
424 for (size_t i = 0; i < supported_versions.size(); ++i) {
425 net::QuicVersion version = supported_versions[i];
426 if (net::QuicVersionToString(version) == quic_version) {
427 return version;
428 }
429 }
430
431 return net::QUIC_VERSION_UNSUPPORTED;
432 }
433
434 net::QuicVersion GetQuicVersion(const base::CommandLine& command_line,
435 const VariationParameters& quic_trial_params) {
436 if (command_line.HasSwitch(switches::kQuicVersion)) {
437 return ParseQuicVersion(
438 command_line.GetSwitchValueASCII(switches::kQuicVersion));
439 }
440
441 return ParseQuicVersion(GetVariationParam(quic_trial_params, "quic_version"));
442 }
443
444 void ConfigureQuicParams(const base::CommandLine& command_line,
445 base::StringPiece quic_trial_group,
446 const VariationParameters& quic_trial_params,
447 bool is_quic_allowed_by_policy,
448 const std::string& quic_user_agent_id,
449 net::HttpNetworkSession::Params* params) {
450 params->enable_quic = ShouldEnableQuic(command_line, quic_trial_group,
451 is_quic_allowed_by_policy);
452 params->disable_quic_on_timeout_with_open_streams =
453 ShouldDisableQuicWhenConnectionTimesOutWithOpenStreams(quic_trial_params);
454 params->enable_quic_for_proxies = ShouldEnableQuicForProxies(
455 command_line, quic_trial_group, is_quic_allowed_by_policy);
456
457 if (ShouldQuicEnableAlternativeServicesForDifferentHost(command_line,
458 quic_trial_params)) {
459 params->enable_alternative_service_with_different_host = true;
460 params->parse_alternative_services = true;
461 } else {
462 params->enable_alternative_service_with_different_host = false;
463 }
464
465 if (params->enable_quic) {
466 params->quic_always_require_handshake_confirmation =
467 ShouldQuicAlwaysRequireHandshakeConfirmation(quic_trial_params);
468 params->quic_disable_connection_pooling =
469 ShouldQuicDisableConnectionPooling(quic_trial_params);
470 int receive_buffer_size = GetQuicSocketReceiveBufferSize(quic_trial_params);
471 if (receive_buffer_size != 0) {
472 params->quic_socket_receive_buffer_size = receive_buffer_size;
473 }
474 float load_server_info_timeout_srtt_multiplier =
475 GetQuicLoadServerInfoTimeoutSrttMultiplier(quic_trial_params);
476 if (load_server_info_timeout_srtt_multiplier != 0) {
477 params->quic_load_server_info_timeout_srtt_multiplier =
478 load_server_info_timeout_srtt_multiplier;
479 }
480 params->quic_enable_connection_racing =
481 ShouldQuicEnableConnectionRacing(quic_trial_params);
482 params->quic_enable_non_blocking_io =
483 ShouldQuicEnableNonBlockingIO(quic_trial_params);
484 params->quic_disable_disk_cache =
485 ShouldQuicDisableDiskCache(quic_trial_params);
486 params->quic_prefer_aes = ShouldQuicPreferAes(quic_trial_params);
487 int max_number_of_lossy_connections =
488 GetQuicMaxNumberOfLossyConnections(quic_trial_params);
489 if (max_number_of_lossy_connections != 0) {
490 params->quic_max_number_of_lossy_connections =
491 max_number_of_lossy_connections;
492 }
493 float packet_loss_threshold = GetQuicPacketLossThreshold(quic_trial_params);
494 if (packet_loss_threshold != 0)
495 params->quic_packet_loss_threshold = packet_loss_threshold;
496 params->enable_quic_port_selection =
497 ShouldEnableQuicPortSelection(command_line);
498 params->quic_connection_options =
499 GetQuicConnectionOptions(command_line, quic_trial_params);
500 params->quic_close_sessions_on_ip_change =
501 ShouldQuicCloseSessionsOnIpChange(quic_trial_params);
502 int idle_connection_timeout_seconds =
503 GetQuicIdleConnectionTimeoutSeconds(quic_trial_params);
504 if (idle_connection_timeout_seconds != 0) {
505 params->quic_idle_connection_timeout_seconds =
506 idle_connection_timeout_seconds;
507 }
508 params->quic_disable_preconnect_if_0rtt =
509 ShouldQuicDisablePreConnectIfZeroRtt(quic_trial_params);
510 params->quic_host_whitelist =
511 GetQuicHostWhitelist(command_line, quic_trial_params);
512 params->quic_migrate_sessions_on_network_change =
513 ShouldQuicMigrateSessionsOnNetworkChange(quic_trial_params);
514 params->quic_migrate_sessions_early =
515 ShouldQuicMigrateSessionsEarly(quic_trial_params);
516 }
517
518 size_t max_packet_length =
519 GetQuicMaxPacketLength(command_line, quic_trial_params);
520 if (max_packet_length != 0) {
521 params->quic_max_packet_length = max_packet_length;
522 }
523
524 params->quic_user_agent_id = quic_user_agent_id;
525
526 net::QuicVersion version = GetQuicVersion(command_line, quic_trial_params);
527 if (version != net::QUIC_VERSION_UNSUPPORTED) {
528 net::QuicVersionVector supported_versions;
529 supported_versions.push_back(version);
530 params->quic_supported_versions = supported_versions;
531 }
532
533 if (command_line.HasSwitch(switches::kOriginToForceQuicOn)) {
534 std::string origins =
535 command_line.GetSwitchValueASCII(switches::kOriginToForceQuicOn);
536 for (const std::string& host_port : base::SplitString(
537 origins, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) {
538 net::HostPortPair quic_origin = net::HostPortPair::FromString(host_port);
539 if (!quic_origin.IsEmpty())
540 params->origins_to_force_quic_on.insert(quic_origin);
541 }
542 }
543 }
544
545 void ParseFieldTrialsAndCommandLineInternal(
546 const base::CommandLine& command_line,
547 bool is_spdy_allowed_by_policy,
548 bool is_quic_allowed_by_policy,
549 const std::string& quic_user_agent_id,
550 net::HttpNetworkSession::Params* params) {
551 // Parameters only controlled by command line.
552 if (command_line.HasSwitch(switches::kIgnoreCertificateErrors))
553 params->ignore_certificate_errors = true;
554 if (command_line.HasSwitch(switches::kTestingFixedHttpPort)) {
555 params->testing_fixed_http_port =
556 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpPort);
557 }
558 if (command_line.HasSwitch(switches::kTestingFixedHttpsPort)) {
559 params->testing_fixed_https_port =
560 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpsPort);
561 }
562
563 // Always fetch the field trial groups to ensure they are reported correctly.
564 // The command line flags will be associated with a group that is reported so
565 // long as trial is actually queried.
566
567 std::string altsvc_trial_group =
568 base::FieldTrialList::FindFullName(kAltSvcFieldTrialName);
569 ConfigureAltSvcParams(command_line, altsvc_trial_group, params);
570
571 std::string quic_trial_group =
572 base::FieldTrialList::FindFullName(kQuicFieldTrialName);
573 VariationParameters quic_trial_params;
574 if (!variations::GetVariationParams(kQuicFieldTrialName, &quic_trial_params))
575 quic_trial_params.clear();
576 ConfigureQuicParams(command_line, quic_trial_group, quic_trial_params,
577 is_quic_allowed_by_policy, quic_user_agent_id, params);
578
579 if (!is_spdy_allowed_by_policy) {
580 base::FieldTrial* trial = base::FieldTrialList::Find(kSpdyFieldTrialName);
581 if (trial)
582 trial->Disable();
583 }
584 std::string spdy_trial_group =
585 base::FieldTrialList::FindFullName(kSpdyFieldTrialName);
586 VariationParameters spdy_trial_params;
587 if (!variations::GetVariationParams(kSpdyFieldTrialName, &spdy_trial_params))
588 spdy_trial_params.clear();
589 ConfigureSpdyParams(command_line, spdy_trial_group, spdy_trial_params,
590 is_spdy_allowed_by_policy, params);
591
592 const std::string tfo_trial_group =
593 base::FieldTrialList::FindFullName(kTCPFastOpenFieldTrialName);
594 ConfigureTCPFastOpenParams(tfo_trial_group, params);
595
596 std::string npn_trial_group =
597 base::FieldTrialList::FindFullName(kNpnTrialName);
598 ConfigureNPNParams(command_line, npn_trial_group, params);
599
600 std::string priority_dependencies_trial_group =
601 base::FieldTrialList::FindFullName(kSpdyDependenciesFieldTrial);
602 ConfigurePriorityDependencies(priority_dependencies_trial_group, params);
603 }
604
605 } // anonymous namespace
606
607 namespace network_session_configurator {
608
609 void ParseFieldTrials(bool is_spdy_allowed_by_policy,
610 bool is_quic_allowed_by_policy,
611 const std::string& quic_user_agent_id,
612 net::HttpNetworkSession::Params* params) {
613 const base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
614 ParseFieldTrialsAndCommandLineInternal(
615 command_line, is_spdy_allowed_by_policy, is_quic_allowed_by_policy,
616 quic_user_agent_id, params);
617 }
618
619 void ParseFieldTrialsAndCommandLine(bool is_spdy_allowed_by_policy,
620 bool is_quic_allowed_by_policy,
621 const std::string& quic_user_agent_id,
622 net::HttpNetworkSession::Params* params) {
623 const base::CommandLine& command_line =
624 *base::CommandLine::ForCurrentProcess();
625 ParseFieldTrialsAndCommandLineInternal(
626 command_line, is_spdy_allowed_by_policy, is_quic_allowed_by_policy,
627 quic_user_agent_id, params);
628 }
629
630 bool ShouldEnableQuicForDataReductionProxy(
631 const base::CommandLine& command_line) {
632 if (command_line.HasSwitch(switches::kDisableQuic))
633 return false;
634
635 return data_reduction_proxy::params::IsIncludedInQuicFieldTrial();
636 }
637
638 } // namespace network_session_configurator
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698