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

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

Issue 2115213002: Disable SPDY/3.1. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase on https://crrev.com/2129973002. Created 4 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/network_session_configurator/network_session_configurator.h " 5 #include "components/network_session_configurator/network_session_configurator.h "
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 14 matching lines...) Expand all
25 // Map from name to value for all parameters associate with a field trial. 25 // Map from name to value for all parameters associate with a field trial.
26 using VariationParameters = std::map<std::string, std::string>; 26 using VariationParameters = std::map<std::string, std::string>;
27 27
28 const char kTCPFastOpenFieldTrialName[] = "TCPFastOpen"; 28 const char kTCPFastOpenFieldTrialName[] = "TCPFastOpen";
29 const char kTCPFastOpenHttpsEnabledGroupName[] = "HttpsEnabled"; 29 const char kTCPFastOpenHttpsEnabledGroupName[] = "HttpsEnabled";
30 30
31 const char kQuicFieldTrialName[] = "QUIC"; 31 const char kQuicFieldTrialName[] = "QUIC";
32 const char kQuicFieldTrialEnabledGroupName[] = "Enabled"; 32 const char kQuicFieldTrialEnabledGroupName[] = "Enabled";
33 const char kQuicFieldTrialHttpsEnabledGroupName[] = "HttpsEnabled"; 33 const char kQuicFieldTrialHttpsEnabledGroupName[] = "HttpsEnabled";
34 34
35 // The SPDY trial composes two different trial plus control groups: 35 // Field trial for HTTP/2.
36 // * A "holdback" group with SPDY disabled, and corresponding control 36 const char kHttp2FieldTrialName[] = "HTTP2";
37 // (SPDY/3.1). The primary purpose of the holdback group is to encourage site 37 const char kHttp2FieldTrialDisablePrefix[] = "Disable";
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 38
48 // Field trial for priority dependencies. 39 // Field trial for priority dependencies.
49 const char kSpdyDependenciesFieldTrial[] = "SpdyEnableDependencies"; 40 const char kSpdyDependenciesFieldTrial[] = "SpdyEnableDependencies";
50 const char kSpdyDependenciesFieldTrialEnable[] = "Enable"; 41 const char kSpdyDependenciesFieldTrialEnable[] = "Enable";
51 const char kSpdyDepencenciesFieldTrialDisable[] = "Disable"; 42 const char kSpdyDepencenciesFieldTrialDisable[] = "Disable";
52 43
53 int GetSwitchValueAsInt(const base::CommandLine& command_line, 44 int GetSwitchValueAsInt(const base::CommandLine& command_line,
54 const std::string& switch_name) { 45 const std::string& switch_name) {
55 int value; 46 int value;
56 if (!base::StringToInt(command_line.GetSwitchValueASCII(switch_name), 47 if (!base::StringToInt(command_line.GetSwitchValueASCII(switch_name),
(...skipping 14 matching lines...) Expand all
71 62
72 return it->second; 63 return it->second;
73 } 64 }
74 65
75 void ConfigureTCPFastOpenParams(base::StringPiece tfo_trial_group, 66 void ConfigureTCPFastOpenParams(base::StringPiece tfo_trial_group,
76 net::HttpNetworkSession::Params* params) { 67 net::HttpNetworkSession::Params* params) {
77 if (tfo_trial_group == kTCPFastOpenHttpsEnabledGroupName) 68 if (tfo_trial_group == kTCPFastOpenHttpsEnabledGroupName)
78 params->enable_tcp_fast_open_for_ssl = true; 69 params->enable_tcp_fast_open_for_ssl = true;
79 } 70 }
80 71
81 void ConfigureSpdyParams(const base::CommandLine& command_line, 72 void ConfigureHttp2Params(const base::CommandLine& command_line,
82 base::StringPiece spdy_trial_group, 73 base::StringPiece http2_trial_group,
83 const VariationParameters& spdy_trial_params, 74 net::HttpNetworkSession::Params* params) {
84 bool is_spdy_allowed_by_policy,
85 net::HttpNetworkSession::Params* params) {
86 // Only handle SPDY field trial parameters and command line flags if
87 // "spdy.disabled" preference is not forced via policy.
88 if (!is_spdy_allowed_by_policy) {
89 params->enable_spdy31 = false;
90 return;
91 }
92
93 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests)) 75 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests))
94 net::URLFetcher::SetIgnoreCertificateRequests(true); 76 net::URLFetcher::SetIgnoreCertificateRequests(true);
95 77
96 if (command_line.HasSwitch(switches::kDisableHttp2)) { 78 if (command_line.HasSwitch(switches::kDisableHttp2)) {
97 params->enable_spdy31 = false;
98 params->enable_http2 = false; 79 params->enable_http2 = false;
99 return; 80 return;
100 } 81 }
101 82
102 if (spdy_trial_group.starts_with(kSpdyFieldTrialHoldbackGroupNamePrefix)) { 83 if (http2_trial_group.starts_with(kHttp2FieldTrialDisablePrefix)) {
103 net::HttpStreamFactory::set_spdy_enabled(false);
104 return;
105 }
106 if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy31GroupNamePrefix)) {
107 params->enable_spdy31 = true;
108 params->enable_http2 = false; 84 params->enable_http2 = false;
109 return;
110 }
111 if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy4GroupNamePrefix)) {
112 params->enable_spdy31 = true;
113 params->enable_http2 = true;
114 return;
115 }
116 if (spdy_trial_group.starts_with(kSpdyFieldTrialParametrizedPrefix)) {
117 bool spdy_enabled = false;
118 params->enable_spdy31 = false;
119 params->enable_http2 = false;
120 if (base::LowerCaseEqualsASCII(
121 GetVariationParam(spdy_trial_params, "enable_http2"), "true")) {
122 spdy_enabled = true;
123 params->enable_http2 = true;
124 }
125 if (base::LowerCaseEqualsASCII(
126 GetVariationParam(spdy_trial_params, "enable_spdy31"), "true")) {
127 spdy_enabled = true;
128 params->enable_spdy31 = true;
129 }
130 // TODO(bnc): https://crbug.com/521597
131 // HttpStreamFactory::spdy_enabled_ is redundant with params->enable_http2
132 // and enable_spdy31, can it be eliminated?
133 net::HttpStreamFactory::set_spdy_enabled(spdy_enabled);
134 return;
135 } 85 }
136 } 86 }
137 87
138 void ConfigurePriorityDependencies( 88 void ConfigurePriorityDependencies(
139 base::StringPiece priority_dependencies_trial_group, 89 base::StringPiece priority_dependencies_trial_group,
140 net::HttpNetworkSession::Params* params) { 90 net::HttpNetworkSession::Params* params) {
141 if (priority_dependencies_trial_group.starts_with( 91 if (priority_dependencies_trial_group.starts_with(
142 kSpdyDependenciesFieldTrialEnable)) { 92 kSpdyDependenciesFieldTrialEnable)) {
143 params->enable_priority_dependencies = true; 93 params->enable_priority_dependencies = true;
144 } else if (priority_dependencies_trial_group.starts_with( 94 } else if (priority_dependencies_trial_group.starts_with(
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 params->origins_to_force_quic_on.insert(net::HostPortPair()); 431 params->origins_to_force_quic_on.insert(net::HostPortPair());
482 net::HostPortPair quic_origin = net::HostPortPair::FromString(host_port); 432 net::HostPortPair quic_origin = net::HostPortPair::FromString(host_port);
483 if (!quic_origin.IsEmpty()) 433 if (!quic_origin.IsEmpty())
484 params->origins_to_force_quic_on.insert(quic_origin); 434 params->origins_to_force_quic_on.insert(quic_origin);
485 } 435 }
486 } 436 }
487 } 437 }
488 438
489 void ParseFieldTrialsAndCommandLineInternal( 439 void ParseFieldTrialsAndCommandLineInternal(
490 const base::CommandLine& command_line, 440 const base::CommandLine& command_line,
491 bool is_spdy_allowed_by_policy,
492 bool is_quic_allowed_by_policy, 441 bool is_quic_allowed_by_policy,
493 const std::string& quic_user_agent_id, 442 const std::string& quic_user_agent_id,
494 net::HttpNetworkSession::Params* params) { 443 net::HttpNetworkSession::Params* params) {
495 // Parameters only controlled by command line. 444 // Parameters only controlled by command line.
496 if (command_line.HasSwitch(switches::kIgnoreCertificateErrors)) 445 if (command_line.HasSwitch(switches::kIgnoreCertificateErrors))
497 params->ignore_certificate_errors = true; 446 params->ignore_certificate_errors = true;
498 if (command_line.HasSwitch(switches::kTestingFixedHttpPort)) { 447 if (command_line.HasSwitch(switches::kTestingFixedHttpPort)) {
499 params->testing_fixed_http_port = 448 params->testing_fixed_http_port =
500 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpPort); 449 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpPort);
501 } 450 }
502 if (command_line.HasSwitch(switches::kTestingFixedHttpsPort)) { 451 if (command_line.HasSwitch(switches::kTestingFixedHttpsPort)) {
503 params->testing_fixed_https_port = 452 params->testing_fixed_https_port =
504 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpsPort); 453 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpsPort);
505 } 454 }
506 455
507 // Always fetch the field trial groups to ensure they are reported correctly. 456 // Always fetch the field trial groups to ensure they are reported correctly.
508 // The command line flags will be associated with a group that is reported so 457 // The command line flags will be associated with a group that is reported so
509 // long as trial is actually queried. 458 // long as trial is actually queried.
510 459
511 std::string quic_trial_group = 460 std::string quic_trial_group =
512 base::FieldTrialList::FindFullName(kQuicFieldTrialName); 461 base::FieldTrialList::FindFullName(kQuicFieldTrialName);
513 VariationParameters quic_trial_params; 462 VariationParameters quic_trial_params;
514 if (!variations::GetVariationParams(kQuicFieldTrialName, &quic_trial_params)) 463 if (!variations::GetVariationParams(kQuicFieldTrialName, &quic_trial_params))
515 quic_trial_params.clear(); 464 quic_trial_params.clear();
516 ConfigureQuicParams(command_line, quic_trial_group, quic_trial_params, 465 ConfigureQuicParams(command_line, quic_trial_group, quic_trial_params,
517 is_quic_allowed_by_policy, quic_user_agent_id, params); 466 is_quic_allowed_by_policy, quic_user_agent_id, params);
518 467
519 if (!is_spdy_allowed_by_policy) { 468 std::string http2_trial_group =
520 base::FieldTrial* trial = base::FieldTrialList::Find(kSpdyFieldTrialName); 469 base::FieldTrialList::FindFullName(kHttp2FieldTrialName);
521 if (trial) 470 ConfigureHttp2Params(command_line, http2_trial_group, params);
522 trial->Disable();
523 }
524 std::string spdy_trial_group =
525 base::FieldTrialList::FindFullName(kSpdyFieldTrialName);
526 VariationParameters spdy_trial_params;
527 if (!variations::GetVariationParams(kSpdyFieldTrialName, &spdy_trial_params))
528 spdy_trial_params.clear();
529 ConfigureSpdyParams(command_line, spdy_trial_group, spdy_trial_params,
530 is_spdy_allowed_by_policy, params);
531 471
532 const std::string tfo_trial_group = 472 const std::string tfo_trial_group =
533 base::FieldTrialList::FindFullName(kTCPFastOpenFieldTrialName); 473 base::FieldTrialList::FindFullName(kTCPFastOpenFieldTrialName);
534 ConfigureTCPFastOpenParams(tfo_trial_group, params); 474 ConfigureTCPFastOpenParams(tfo_trial_group, params);
535 475
536 std::string priority_dependencies_trial_group = 476 std::string priority_dependencies_trial_group =
537 base::FieldTrialList::FindFullName(kSpdyDependenciesFieldTrial); 477 base::FieldTrialList::FindFullName(kSpdyDependenciesFieldTrial);
538 ConfigurePriorityDependencies(priority_dependencies_trial_group, params); 478 ConfigurePriorityDependencies(priority_dependencies_trial_group, params);
539 } 479 }
540 480
541 } // anonymous namespace 481 } // anonymous namespace
542 482
543 namespace network_session_configurator { 483 namespace network_session_configurator {
544 484
545 void ParseFieldTrials(bool is_spdy_allowed_by_policy, 485 void ParseFieldTrials(bool is_quic_allowed_by_policy,
546 bool is_quic_allowed_by_policy,
547 const std::string& quic_user_agent_id, 486 const std::string& quic_user_agent_id,
548 net::HttpNetworkSession::Params* params) { 487 net::HttpNetworkSession::Params* params) {
549 const base::CommandLine command_line(base::CommandLine::NO_PROGRAM); 488 const base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
550 ParseFieldTrialsAndCommandLineInternal( 489 ParseFieldTrialsAndCommandLineInternal(
551 command_line, is_spdy_allowed_by_policy, is_quic_allowed_by_policy, 490 command_line, is_quic_allowed_by_policy, quic_user_agent_id, params);
552 quic_user_agent_id, params);
553 } 491 }
554 492
555 void ParseFieldTrialsAndCommandLine(bool is_spdy_allowed_by_policy, 493 void ParseFieldTrialsAndCommandLine(bool is_quic_allowed_by_policy,
556 bool is_quic_allowed_by_policy,
557 const std::string& quic_user_agent_id, 494 const std::string& quic_user_agent_id,
558 net::HttpNetworkSession::Params* params) { 495 net::HttpNetworkSession::Params* params) {
559 const base::CommandLine& command_line = 496 const base::CommandLine& command_line =
560 *base::CommandLine::ForCurrentProcess(); 497 *base::CommandLine::ForCurrentProcess();
561 ParseFieldTrialsAndCommandLineInternal( 498 ParseFieldTrialsAndCommandLineInternal(
562 command_line, is_spdy_allowed_by_policy, is_quic_allowed_by_policy, 499 command_line, is_quic_allowed_by_policy, quic_user_agent_id, params);
563 quic_user_agent_id, params);
564 } 500 }
565 501
566 } // namespace network_session_configurator 502 } // namespace network_session_configurator
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698