OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |