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

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

Issue 2600973002: Implement HTTP/2 settings field trial parameters. (Closed)
Patch Set: Created 3 years, 11 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 #include <unordered_set>
8 9
9 #include "base/metrics/field_trial.h" 10 #include "base/metrics/field_trial.h"
10 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/string_piece.h" 12 #include "base/strings/string_piece.h"
12 #include "base/strings/string_split.h" 13 #include "base/strings/string_split.h"
13 #include "base/strings/string_util.h" 14 #include "base/strings/string_util.h"
14 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param s.h" 15 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param s.h"
15 #include "components/variations/variations_associated_data.h" 16 #include "components/variations/variations_associated_data.h"
16 #include "components/version_info/version_info.h" 17 #include "components/version_info/version_info.h"
17 #include "net/http/http_stream_factory.h" 18 #include "net/http/http_stream_factory.h"
18 #include "net/quic/chromium/quic_utils_chromium.h" 19 #include "net/quic/chromium/quic_utils_chromium.h"
19 #include "net/quic/core/quic_packets.h" 20 #include "net/quic/core/quic_packets.h"
21 #include "net/spdy/spdy_protocol.h"
20 #include "net/url_request/url_fetcher.h" 22 #include "net/url_request/url_fetcher.h"
21 23
22 namespace { 24 namespace {
23 25
24 // Map from name to value for all parameters associate with a field trial. 26 // Map from name to value for all parameters associate with a field trial.
25 using VariationParameters = std::map<std::string, std::string>; 27 using VariationParameters = std::map<std::string, std::string>;
26 28
27 const char kTCPFastOpenFieldTrialName[] = "TCPFastOpen"; 29 const char kTCPFastOpenFieldTrialName[] = "TCPFastOpen";
28 const char kTCPFastOpenHttpsEnabledGroupName[] = "HttpsEnabled"; 30 const char kTCPFastOpenHttpsEnabledGroupName[] = "HttpsEnabled";
29 31
(...skipping 16 matching lines...) Expand all
46 48
47 return it->second; 49 return it->second;
48 } 50 }
49 51
50 void ConfigureTCPFastOpenParams(base::StringPiece tfo_trial_group, 52 void ConfigureTCPFastOpenParams(base::StringPiece tfo_trial_group,
51 net::HttpNetworkSession::Params* params) { 53 net::HttpNetworkSession::Params* params) {
52 if (tfo_trial_group == kTCPFastOpenHttpsEnabledGroupName) 54 if (tfo_trial_group == kTCPFastOpenHttpsEnabledGroupName)
53 params->enable_tcp_fast_open_for_ssl = true; 55 params->enable_tcp_fast_open_for_ssl = true;
54 } 56 }
55 57
58 net::SettingsMap GetHttp2Settings(
59 const VariationParameters& http2_trial_params) {
60 net::SettingsMap http2_settings;
61
62 const std::string settings_string =
63 GetVariationParam(http2_trial_params, "http2_settings");
64
65 base::StringPairs key_value_pairs;
66 if (!base::SplitStringIntoKeyValuePairs(settings_string, ':', ',',
67 &key_value_pairs)) {
68 return http2_settings;
69 }
70
71 for (auto key_value : key_value_pairs) {
72 uint32_t key;
73 if (!base::StringToUint(key_value.first, &key))
74 continue;
75 uint32_t value;
76 if (!base::StringToUint(key_value.second, &value))
77 continue;
78 http2_settings[static_cast<net::SpdySettingsIds>(key)] = value;
79 }
80
81 return http2_settings;
82 }
83
56 void ConfigureHttp2Params(base::StringPiece http2_trial_group, 84 void ConfigureHttp2Params(base::StringPiece http2_trial_group,
85 const VariationParameters& http2_trial_params,
57 net::HttpNetworkSession::Params* params) { 86 net::HttpNetworkSession::Params* params) {
58 if (http2_trial_group.starts_with(kHttp2FieldTrialDisablePrefix)) { 87 if (http2_trial_group.starts_with(kHttp2FieldTrialDisablePrefix)) {
59 params->enable_http2 = false; 88 params->enable_http2 = false;
89 return;
60 } 90 }
91 params->http2_settings = GetHttp2Settings(http2_trial_params);
61 } 92 }
62 93
63 bool ShouldEnableQuic(base::StringPiece quic_trial_group, 94 bool ShouldEnableQuic(base::StringPiece quic_trial_group,
64 bool is_quic_force_disabled, 95 bool is_quic_force_disabled,
65 bool is_quic_force_enabled) { 96 bool is_quic_force_enabled) {
66 if (is_quic_force_disabled) 97 if (is_quic_force_disabled)
67 return false; 98 return false;
68 if (is_quic_force_enabled) 99 if (is_quic_force_enabled)
69 return true; 100 return true;
70 101
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 GetVariationParam(quic_trial_params, 235 GetVariationParam(quic_trial_params,
205 "packet_reader_yield_after_duration_milliseconds"), 236 "packet_reader_yield_after_duration_milliseconds"),
206 &value)) { 237 &value)) {
207 return value; 238 return value;
208 } 239 }
209 return 0; 240 return 0;
210 } 241 }
211 242
212 bool ShouldQuicRaceCertVerification( 243 bool ShouldQuicRaceCertVerification(
213 const VariationParameters& quic_trial_params) { 244 const VariationParameters& quic_trial_params) {
214 return base::LowerCaseEqualsASCII( 245 return base::LowerCaseEqualsASCII(
215 GetVariationParam(quic_trial_params, "race_cert_verification"), 246 GetVariationParam(quic_trial_params, "race_cert_verification"), "true");
216 "true");
217 } 247 }
218 248
219 bool ShouldQuicDoNotFragment( 249 bool ShouldQuicDoNotFragment(const VariationParameters& quic_trial_params) {
220 const VariationParameters& quic_trial_params) { 250 return base::LowerCaseEqualsASCII(
221 return base::LowerCaseEqualsASCII( 251 GetVariationParam(quic_trial_params, "do_not_fragment"), "true");
222 GetVariationParam(quic_trial_params, "do_not_fragment"),
223 "true");
224 } 252 }
225 253
226 bool ShouldQuicDisablePreConnectIfZeroRtt( 254 bool ShouldQuicDisablePreConnectIfZeroRtt(
227 const VariationParameters& quic_trial_params) { 255 const VariationParameters& quic_trial_params) {
228 return base::LowerCaseEqualsASCII( 256 return base::LowerCaseEqualsASCII(
229 GetVariationParam(quic_trial_params, "disable_preconnect_if_0rtt"), 257 GetVariationParam(quic_trial_params, "disable_preconnect_if_0rtt"),
230 "true"); 258 "true");
231 } 259 }
232 260
233 std::unordered_set<std::string> GetQuicHostWhitelist( 261 std::unordered_set<std::string> GetQuicHostWhitelist(
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 base::FieldTrialList::FindFullName(kQuicFieldTrialName); 420 base::FieldTrialList::FindFullName(kQuicFieldTrialName);
393 VariationParameters quic_trial_params; 421 VariationParameters quic_trial_params;
394 if (!variations::GetVariationParams(kQuicFieldTrialName, &quic_trial_params)) 422 if (!variations::GetVariationParams(kQuicFieldTrialName, &quic_trial_params))
395 quic_trial_params.clear(); 423 quic_trial_params.clear();
396 ConfigureQuicParams(quic_trial_group, quic_trial_params, 424 ConfigureQuicParams(quic_trial_group, quic_trial_params,
397 is_quic_force_disabled, is_quic_force_enabled, 425 is_quic_force_disabled, is_quic_force_enabled,
398 quic_user_agent_id, params); 426 quic_user_agent_id, params);
399 427
400 std::string http2_trial_group = 428 std::string http2_trial_group =
401 base::FieldTrialList::FindFullName(kHttp2FieldTrialName); 429 base::FieldTrialList::FindFullName(kHttp2FieldTrialName);
402 ConfigureHttp2Params(http2_trial_group, params); 430 VariationParameters http2_trial_params;
431 if (!variations::GetVariationParams(kHttp2FieldTrialName,
432 &http2_trial_params))
433 http2_trial_params.clear();
434 ConfigureHttp2Params(http2_trial_group, http2_trial_params, params);
403 435
404 const std::string tfo_trial_group = 436 const std::string tfo_trial_group =
405 base::FieldTrialList::FindFullName(kTCPFastOpenFieldTrialName); 437 base::FieldTrialList::FindFullName(kTCPFastOpenFieldTrialName);
406 ConfigureTCPFastOpenParams(tfo_trial_group, params); 438 ConfigureTCPFastOpenParams(tfo_trial_group, params);
407 } 439 }
408 440
409 } // namespace network_session_configurator 441 } // namespace network_session_configurator
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698