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

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: 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 NPN. 39 // Field trial for NPN.
49 const char kNpnTrialName[] = "NPN"; 40 const char kNpnTrialName[] = "NPN";
50 const char kNpnTrialEnabledGroupNamePrefix[] = "Enable"; 41 const char kNpnTrialEnabledGroupNamePrefix[] = "Enable";
51 const char kNpnTrialDisabledGroupNamePrefix[] = "Disable"; 42 const char kNpnTrialDisabledGroupNamePrefix[] = "Disable";
52 43
53 // Field trial for priority dependencies. 44 // Field trial for priority dependencies.
54 const char kSpdyDependenciesFieldTrial[] = "SpdyEnableDependencies"; 45 const char kSpdyDependenciesFieldTrial[] = "SpdyEnableDependencies";
55 const char kSpdyDependenciesFieldTrialEnable[] = "Enable"; 46 const char kSpdyDependenciesFieldTrialEnable[] = "Enable";
56 const char kSpdyDepencenciesFieldTrialDisable[] = "Disable"; 47 const char kSpdyDepencenciesFieldTrialDisable[] = "Disable";
(...skipping 19 matching lines...) Expand all
76 67
77 return it->second; 68 return it->second;
78 } 69 }
79 70
80 void ConfigureTCPFastOpenParams(base::StringPiece tfo_trial_group, 71 void ConfigureTCPFastOpenParams(base::StringPiece tfo_trial_group,
81 net::HttpNetworkSession::Params* params) { 72 net::HttpNetworkSession::Params* params) {
82 if (tfo_trial_group == kTCPFastOpenHttpsEnabledGroupName) 73 if (tfo_trial_group == kTCPFastOpenHttpsEnabledGroupName)
83 params->enable_tcp_fast_open_for_ssl = true; 74 params->enable_tcp_fast_open_for_ssl = true;
84 } 75 }
85 76
86 void ConfigureSpdyParams(const base::CommandLine& command_line, 77 void ConfigureHttp2Params(const base::CommandLine& command_line,
87 base::StringPiece spdy_trial_group, 78 base::StringPiece http2_trial_group,
88 const VariationParameters& spdy_trial_params, 79 net::HttpNetworkSession::Params* params) {
89 bool is_spdy_allowed_by_policy,
90 net::HttpNetworkSession::Params* params) {
91 // Only handle SPDY field trial parameters and command line flags if
92 // "spdy.disabled" preference is not forced via policy.
93 if (!is_spdy_allowed_by_policy) {
94 params->enable_spdy31 = false;
95 return;
96 }
97
98 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests)) 80 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests))
99 net::URLFetcher::SetIgnoreCertificateRequests(true); 81 net::URLFetcher::SetIgnoreCertificateRequests(true);
100 82
101 if (command_line.HasSwitch(switches::kDisableHttp2)) { 83 if (command_line.HasSwitch(switches::kDisableHttp2)) {
102 params->enable_spdy31 = false;
103 params->enable_http2 = false; 84 params->enable_http2 = false;
104 return; 85 return;
105 } 86 }
106 87
107 if (spdy_trial_group.starts_with(kSpdyFieldTrialHoldbackGroupNamePrefix)) { 88 if (http2_trial_group.starts_with(kHttp2FieldTrialDisablePrefix)) {
108 net::HttpStreamFactory::set_spdy_enabled(false);
109 return;
110 }
111 if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy31GroupNamePrefix)) {
112 params->enable_spdy31 = true;
113 params->enable_http2 = false; 89 params->enable_http2 = false;
114 return;
115 }
116 if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy4GroupNamePrefix)) {
117 params->enable_spdy31 = true;
118 params->enable_http2 = true;
119 return;
120 }
121 if (spdy_trial_group.starts_with(kSpdyFieldTrialParametrizedPrefix)) {
122 bool spdy_enabled = false;
123 params->enable_spdy31 = false;
124 params->enable_http2 = false;
125 if (base::LowerCaseEqualsASCII(
126 GetVariationParam(spdy_trial_params, "enable_http2"), "true")) {
127 spdy_enabled = true;
128 params->enable_http2 = true;
129 }
130 if (base::LowerCaseEqualsASCII(
131 GetVariationParam(spdy_trial_params, "enable_spdy31"), "true")) {
132 spdy_enabled = true;
133 params->enable_spdy31 = true;
134 }
135 // TODO(bnc): https://crbug.com/521597
136 // HttpStreamFactory::spdy_enabled_ is redundant with params->enable_http2
137 // and enable_spdy31, can it be eliminated?
138 net::HttpStreamFactory::set_spdy_enabled(spdy_enabled);
139 return;
140 } 90 }
141 } 91 }
142 92
143 void ConfigureNPNParams(const base::CommandLine& command_line, 93 void ConfigureNPNParams(const base::CommandLine& command_line,
144 base::StringPiece npn_trial_group, 94 base::StringPiece npn_trial_group,
145 net::HttpNetworkSession::Params* params) { 95 net::HttpNetworkSession::Params* params) {
146 if (npn_trial_group.starts_with(kNpnTrialEnabledGroupNamePrefix)) { 96 if (npn_trial_group.starts_with(kNpnTrialEnabledGroupNamePrefix)) {
147 params->enable_npn = true; 97 params->enable_npn = true;
148 } else if (npn_trial_group.starts_with(kNpnTrialDisabledGroupNamePrefix)) { 98 } else if (npn_trial_group.starts_with(kNpnTrialDisabledGroupNamePrefix)) {
149 params->enable_npn = false; 99 params->enable_npn = false;
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 params->origins_to_force_quic_on.insert(net::HostPortPair()); 446 params->origins_to_force_quic_on.insert(net::HostPortPair());
497 net::HostPortPair quic_origin = net::HostPortPair::FromString(host_port); 447 net::HostPortPair quic_origin = net::HostPortPair::FromString(host_port);
498 if (!quic_origin.IsEmpty()) 448 if (!quic_origin.IsEmpty())
499 params->origins_to_force_quic_on.insert(quic_origin); 449 params->origins_to_force_quic_on.insert(quic_origin);
500 } 450 }
501 } 451 }
502 } 452 }
503 453
504 void ParseFieldTrialsAndCommandLineInternal( 454 void ParseFieldTrialsAndCommandLineInternal(
505 const base::CommandLine& command_line, 455 const base::CommandLine& command_line,
506 bool is_spdy_allowed_by_policy,
507 bool is_quic_allowed_by_policy, 456 bool is_quic_allowed_by_policy,
508 const std::string& quic_user_agent_id, 457 const std::string& quic_user_agent_id,
509 net::HttpNetworkSession::Params* params) { 458 net::HttpNetworkSession::Params* params) {
510 // Parameters only controlled by command line. 459 // Parameters only controlled by command line.
511 if (command_line.HasSwitch(switches::kIgnoreCertificateErrors)) 460 if (command_line.HasSwitch(switches::kIgnoreCertificateErrors))
512 params->ignore_certificate_errors = true; 461 params->ignore_certificate_errors = true;
513 if (command_line.HasSwitch(switches::kTestingFixedHttpPort)) { 462 if (command_line.HasSwitch(switches::kTestingFixedHttpPort)) {
514 params->testing_fixed_http_port = 463 params->testing_fixed_http_port =
515 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpPort); 464 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpPort);
516 } 465 }
517 if (command_line.HasSwitch(switches::kTestingFixedHttpsPort)) { 466 if (command_line.HasSwitch(switches::kTestingFixedHttpsPort)) {
518 params->testing_fixed_https_port = 467 params->testing_fixed_https_port =
519 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpsPort); 468 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpsPort);
520 } 469 }
521 470
522 // Always fetch the field trial groups to ensure they are reported correctly. 471 // Always fetch the field trial groups to ensure they are reported correctly.
523 // The command line flags will be associated with a group that is reported so 472 // The command line flags will be associated with a group that is reported so
524 // long as trial is actually queried. 473 // long as trial is actually queried.
525 474
526 std::string quic_trial_group = 475 std::string quic_trial_group =
527 base::FieldTrialList::FindFullName(kQuicFieldTrialName); 476 base::FieldTrialList::FindFullName(kQuicFieldTrialName);
528 VariationParameters quic_trial_params; 477 VariationParameters quic_trial_params;
529 if (!variations::GetVariationParams(kQuicFieldTrialName, &quic_trial_params)) 478 if (!variations::GetVariationParams(kQuicFieldTrialName, &quic_trial_params))
530 quic_trial_params.clear(); 479 quic_trial_params.clear();
531 ConfigureQuicParams(command_line, quic_trial_group, quic_trial_params, 480 ConfigureQuicParams(command_line, quic_trial_group, quic_trial_params,
532 is_quic_allowed_by_policy, quic_user_agent_id, params); 481 is_quic_allowed_by_policy, quic_user_agent_id, params);
533 482
534 if (!is_spdy_allowed_by_policy) { 483 std::string http2_trial_group =
535 base::FieldTrial* trial = base::FieldTrialList::Find(kSpdyFieldTrialName); 484 base::FieldTrialList::FindFullName(kHttp2FieldTrialName);
536 if (trial) 485 ConfigureHttp2Params(command_line, http2_trial_group, params);
537 trial->Disable();
538 }
539 std::string spdy_trial_group =
540 base::FieldTrialList::FindFullName(kSpdyFieldTrialName);
541 VariationParameters spdy_trial_params;
542 if (!variations::GetVariationParams(kSpdyFieldTrialName, &spdy_trial_params))
543 spdy_trial_params.clear();
544 ConfigureSpdyParams(command_line, spdy_trial_group, spdy_trial_params,
545 is_spdy_allowed_by_policy, params);
546 486
547 const std::string tfo_trial_group = 487 const std::string tfo_trial_group =
548 base::FieldTrialList::FindFullName(kTCPFastOpenFieldTrialName); 488 base::FieldTrialList::FindFullName(kTCPFastOpenFieldTrialName);
549 ConfigureTCPFastOpenParams(tfo_trial_group, params); 489 ConfigureTCPFastOpenParams(tfo_trial_group, params);
550 490
551 std::string npn_trial_group = 491 std::string npn_trial_group =
552 base::FieldTrialList::FindFullName(kNpnTrialName); 492 base::FieldTrialList::FindFullName(kNpnTrialName);
553 ConfigureNPNParams(command_line, npn_trial_group, params); 493 ConfigureNPNParams(command_line, npn_trial_group, params);
554 494
555 std::string priority_dependencies_trial_group = 495 std::string priority_dependencies_trial_group =
556 base::FieldTrialList::FindFullName(kSpdyDependenciesFieldTrial); 496 base::FieldTrialList::FindFullName(kSpdyDependenciesFieldTrial);
557 ConfigurePriorityDependencies(priority_dependencies_trial_group, params); 497 ConfigurePriorityDependencies(priority_dependencies_trial_group, params);
558 } 498 }
559 499
560 } // anonymous namespace 500 } // anonymous namespace
561 501
562 namespace network_session_configurator { 502 namespace network_session_configurator {
563 503
564 void ParseFieldTrials(bool is_spdy_allowed_by_policy, 504 void ParseFieldTrials(bool is_quic_allowed_by_policy,
565 bool is_quic_allowed_by_policy,
566 const std::string& quic_user_agent_id, 505 const std::string& quic_user_agent_id,
567 net::HttpNetworkSession::Params* params) { 506 net::HttpNetworkSession::Params* params) {
568 const base::CommandLine command_line(base::CommandLine::NO_PROGRAM); 507 const base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
569 ParseFieldTrialsAndCommandLineInternal( 508 ParseFieldTrialsAndCommandLineInternal(
570 command_line, is_spdy_allowed_by_policy, is_quic_allowed_by_policy, 509 command_line, is_quic_allowed_by_policy, quic_user_agent_id, params);
571 quic_user_agent_id, params);
572 } 510 }
573 511
574 void ParseFieldTrialsAndCommandLine(bool is_spdy_allowed_by_policy, 512 void ParseFieldTrialsAndCommandLine(bool is_quic_allowed_by_policy,
575 bool is_quic_allowed_by_policy,
576 const std::string& quic_user_agent_id, 513 const std::string& quic_user_agent_id,
577 net::HttpNetworkSession::Params* params) { 514 net::HttpNetworkSession::Params* params) {
578 const base::CommandLine& command_line = 515 const base::CommandLine& command_line =
579 *base::CommandLine::ForCurrentProcess(); 516 *base::CommandLine::ForCurrentProcess();
580 ParseFieldTrialsAndCommandLineInternal( 517 ParseFieldTrialsAndCommandLineInternal(
581 command_line, is_spdy_allowed_by_policy, is_quic_allowed_by_policy, 518 command_line, is_quic_allowed_by_policy, quic_user_agent_id, params);
582 quic_user_agent_id, params);
583 } 519 }
584 520
585 } // namespace network_session_configurator 521 } // namespace network_session_configurator
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698