Index: components/network_session_configurator/network_session_configurator.cc |
diff --git a/components/network_session_configurator/network_session_configurator.cc b/components/network_session_configurator/network_session_configurator.cc |
index 6074c5676ed16bbd9332f2a06f1037f53a890eae..610039523154eb3e0baf5a484bad92f22923c9b2 100644 |
--- a/components/network_session_configurator/network_session_configurator.cc |
+++ b/components/network_session_configurator/network_session_configurator.cc |
@@ -5,6 +5,7 @@ |
#include "components/network_session_configurator/network_session_configurator.h" |
#include <map> |
+#include <unordered_set> |
#include "base/metrics/field_trial.h" |
#include "base/strings/string_number_conversions.h" |
@@ -17,6 +18,7 @@ |
#include "net/http/http_stream_factory.h" |
#include "net/quic/chromium/quic_utils_chromium.h" |
#include "net/quic/core/quic_packets.h" |
+#include "net/spdy/spdy_protocol.h" |
#include "net/url_request/url_fetcher.h" |
namespace { |
@@ -53,11 +55,40 @@ void ConfigureTCPFastOpenParams(base::StringPiece tfo_trial_group, |
params->enable_tcp_fast_open_for_ssl = true; |
} |
+net::SettingsMap GetHttp2Settings( |
+ const VariationParameters& http2_trial_params) { |
+ net::SettingsMap http2_settings; |
+ |
+ const std::string settings_string = |
+ GetVariationParam(http2_trial_params, "http2_settings"); |
+ |
+ base::StringPairs key_value_pairs; |
+ if (!base::SplitStringIntoKeyValuePairs(settings_string, ':', ',', |
+ &key_value_pairs)) { |
+ return http2_settings; |
+ } |
+ |
+ for (auto key_value : key_value_pairs) { |
+ uint32_t key; |
+ if (!base::StringToUint(key_value.first, &key)) |
+ continue; |
+ uint32_t value; |
+ if (!base::StringToUint(key_value.second, &value)) |
+ continue; |
+ http2_settings[static_cast<net::SpdySettingsIds>(key)] = value; |
+ } |
+ |
+ return http2_settings; |
+} |
+ |
void ConfigureHttp2Params(base::StringPiece http2_trial_group, |
+ const VariationParameters& http2_trial_params, |
net::HttpNetworkSession::Params* params) { |
if (http2_trial_group.starts_with(kHttp2FieldTrialDisablePrefix)) { |
params->enable_http2 = false; |
+ return; |
} |
+ params->http2_settings = GetHttp2Settings(http2_trial_params); |
} |
bool ShouldEnableQuic(base::StringPiece quic_trial_group, |
@@ -211,16 +242,13 @@ int GetQuicPacketReaderYieldAfterDurationMilliseconds( |
bool ShouldQuicRaceCertVerification( |
const VariationParameters& quic_trial_params) { |
- return base::LowerCaseEqualsASCII( |
- GetVariationParam(quic_trial_params, "race_cert_verification"), |
- "true"); |
+ return base::LowerCaseEqualsASCII( |
+ GetVariationParam(quic_trial_params, "race_cert_verification"), "true"); |
} |
-bool ShouldQuicDoNotFragment( |
- const VariationParameters& quic_trial_params) { |
- return base::LowerCaseEqualsASCII( |
- GetVariationParam(quic_trial_params, "do_not_fragment"), |
- "true"); |
+bool ShouldQuicDoNotFragment(const VariationParameters& quic_trial_params) { |
+ return base::LowerCaseEqualsASCII( |
+ GetVariationParam(quic_trial_params, "do_not_fragment"), "true"); |
} |
bool ShouldQuicDisablePreConnectIfZeroRtt( |
@@ -399,7 +427,11 @@ void ParseFieldTrials(bool is_quic_force_disabled, |
std::string http2_trial_group = |
base::FieldTrialList::FindFullName(kHttp2FieldTrialName); |
- ConfigureHttp2Params(http2_trial_group, params); |
+ VariationParameters http2_trial_params; |
+ if (!variations::GetVariationParams(kHttp2FieldTrialName, |
+ &http2_trial_params)) |
+ http2_trial_params.clear(); |
+ ConfigureHttp2Params(http2_trial_group, http2_trial_params, params); |
const std::string tfo_trial_group = |
base::FieldTrialList::FindFullName(kTCPFastOpenFieldTrialName); |