diff options
23 files changed, 160 insertions, 209 deletions
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc index a048038..f015bc1 100644 --- a/chrome/browser/io_thread.cc +++ b/chrome/browser/io_thread.cc @@ -995,50 +995,52 @@ void IOThread::ConfigureSpdyGlobals( std::string spdy_mode = command_line.GetSwitchValueASCII(switches::kUseSpdy); ConfigureSpdyGlobalsFromUseSpdyArgument(spdy_mode, globals); + // TODO(bnc): https://crbug.com/547781 + // This command line flag is broken. + globals->enable_spdy31.set(false); + globals->enable_http2.set(false); return; } - globals->next_protos.clear(); - - bool enable_quic = false; - globals->enable_quic.CopyToIfSet(&enable_quic); - if (enable_quic) { - globals->next_protos.push_back(net::kProtoQUIC1SPDY3); - } - // No SPDY command-line flags have been specified. Examine trial groups. if (spdy_trial_group.starts_with(kSpdyFieldTrialHoldbackGroupNamePrefix)) { net::HttpStreamFactory::set_spdy_enabled(false); - } else if (spdy_trial_group.starts_with( - kSpdyFieldTrialSpdy31GroupNamePrefix)) { - globals->next_protos.push_back(net::kProtoSPDY31); - } else if (spdy_trial_group.starts_with( - kSpdyFieldTrialSpdy4GroupNamePrefix)) { - globals->next_protos.push_back(net::kProtoHTTP2); - globals->next_protos.push_back(net::kProtoSPDY31); - } else if (spdy_trial_group.starts_with(kSpdyFieldTrialParametrizedPrefix)) { + return; + } + if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy31GroupNamePrefix)) { + globals->enable_spdy31.set(true); + globals->enable_http2.set(false); + return; + } + if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy4GroupNamePrefix)) { + globals->enable_spdy31.set(true); + globals->enable_http2.set(true); + return; + } + if (spdy_trial_group.starts_with(kSpdyFieldTrialParametrizedPrefix)) { bool spdy_enabled = false; + globals->enable_spdy31.set(false); + globals->enable_http2.set(false); if (base::LowerCaseEqualsASCII( GetVariationParam(spdy_trial_params, "enable_http2"), "true")) { - globals->next_protos.push_back(net::kProtoHTTP2); spdy_enabled = true; + globals->enable_http2.set(true); } if (base::LowerCaseEqualsASCII( GetVariationParam(spdy_trial_params, "enable_spdy31"), "true")) { - globals->next_protos.push_back(net::kProtoSPDY31); spdy_enabled = true; + globals->enable_spdy31.set(true); } - // TODO(bnc): HttpStreamFactory::spdy_enabled_ is redundant with - // globals->next_protos, can it be eliminated? + // TODO(bnc): https://crbug.com/521597 + // HttpStreamFactory::spdy_enabled_ is redundant with globals->enable_http2 + // and enable_spdy31, can it be eliminated? net::HttpStreamFactory::set_spdy_enabled(spdy_enabled); - } else { - // By default, enable HTTP/2. - globals->next_protos.push_back(net::kProtoHTTP2); - globals->next_protos.push_back(net::kProtoSPDY31); + return; } - // Enable HTTP/1.1 in all cases as the last protocol. - globals->next_protos.push_back(net::kProtoHTTP11); + // By default, enable HTTP/2. + globals->enable_spdy31.set(true); + globals->enable_http2.set(true); } // static @@ -1166,7 +1168,8 @@ void IOThread::InitializeNetworkSessionParamsFromGlobals( ¶ms->enable_spdy_ping_based_connection_checking); globals.spdy_default_protocol.CopyToIfSet( ¶ms->spdy_default_protocol); - params->next_protos = globals.next_protos; + globals.enable_spdy31.CopyToIfSet(¶ms->enable_spdy31); + globals.enable_http2.CopyToIfSet(¶ms->enable_http2); globals.trusted_spdy_proxy.CopyToIfSet(¶ms->trusted_spdy_proxy); params->forced_spdy_exclusions = globals.forced_spdy_exclusions; globals.parse_alternative_services.CopyToIfSet( diff --git a/chrome/browser/io_thread.h b/chrome/browser/io_thread.h index cd1e3c2..2e49e55 100644 --- a/chrome/browser/io_thread.h +++ b/chrome/browser/io_thread.h @@ -30,7 +30,6 @@ #include "content/public/browser/browser_thread_delegate.h" #include "net/base/network_change_notifier.h" #include "net/http/http_network_session.h" -#include "net/socket/next_proto.h" class PrefProxyConfigTracker; class PrefService; @@ -208,7 +207,8 @@ class IOThread : public content::BrowserThreadDelegate { Optional<bool> enable_spdy_compression; Optional<bool> enable_spdy_ping_based_connection_checking; Optional<net::NextProto> spdy_default_protocol; - net::NextProtoVector next_protos; + Optional<bool> enable_spdy31; + Optional<bool> enable_http2; Optional<std::string> trusted_spdy_proxy; std::set<net::HostPortPair> forced_spdy_exclusions; Optional<bool> parse_alternative_services; diff --git a/chrome/browser/io_thread_unittest.cc b/chrome/browser/io_thread_unittest.cc index 8935e91..68dc4a6 100644 --- a/chrome/browser/io_thread_unittest.cc +++ b/chrome/browser/io_thread_unittest.cc @@ -153,34 +153,39 @@ TEST_F(IOThreadTest, SpdyFieldTrialHoldbackEnabled) { TEST_F(IOThreadTest, SpdyFieldTrialSpdy31Enabled) { field_trial_group_ = "Spdy31Enabled"; ConfigureSpdyGlobals(); - EXPECT_THAT(globals_.next_protos, - ElementsAre(net::kProtoSPDY31, net::kProtoHTTP11)); + net::HttpNetworkSession::Params params; + InitializeNetworkSessionParams(¶ms); + EXPECT_TRUE(params.enable_spdy31); + EXPECT_FALSE(params.enable_http2); } TEST_F(IOThreadTest, SpdyFieldTrialSpdy4Enabled) { field_trial_group_ = "Spdy4Enabled"; ConfigureSpdyGlobals(); - EXPECT_THAT( - globals_.next_protos, - ElementsAre(net::kProtoHTTP2, net::kProtoSPDY31, net::kProtoHTTP11)); + net::HttpNetworkSession::Params params; + InitializeNetworkSessionParams(¶ms); + EXPECT_TRUE(params.enable_spdy31); + EXPECT_TRUE(params.enable_http2); } TEST_F(IOThreadTest, SpdyFieldTrialDefault) { field_trial_group_ = ""; ConfigureSpdyGlobals(); - EXPECT_THAT( - globals_.next_protos, - ElementsAre(net::kProtoHTTP2, net::kProtoSPDY31, net::kProtoHTTP11)); + net::HttpNetworkSession::Params params; + InitializeNetworkSessionParams(¶ms); + EXPECT_TRUE(params.enable_spdy31); + EXPECT_TRUE(params.enable_http2); } TEST_F(IOThreadTest, SpdyFieldTrialParametrized) { field_trial_params_["enable_spdy31"] = "false"; - // Undefined parameter "enable_http2_14" should default to false. field_trial_params_["enable_http2"] = "true"; field_trial_group_ = "ParametrizedHTTP2Only"; ConfigureSpdyGlobals(); - EXPECT_THAT(globals_.next_protos, - ElementsAre(net::kProtoHTTP2, net::kProtoHTTP11)); + net::HttpNetworkSession::Params params; + InitializeNetworkSessionParams(¶ms); + EXPECT_FALSE(params.enable_spdy31); + EXPECT_TRUE(params.enable_http2); } TEST_F(IOThreadTest, SpdyCommandLineUseSpdyOff) { @@ -188,7 +193,10 @@ TEST_F(IOThreadTest, SpdyCommandLineUseSpdyOff) { // Command line should overwrite field trial group. field_trial_group_ = "Spdy4Enabled"; ConfigureSpdyGlobals(); - EXPECT_EQ(0u, globals_.next_protos.size()); + net::HttpNetworkSession::Params params; + InitializeNetworkSessionParams(¶ms); + EXPECT_FALSE(params.enable_spdy31); + EXPECT_FALSE(params.enable_http2); } TEST_F(IOThreadTest, NPNFieldTrialEnabled) { diff --git a/chrome/browser/resources/net_internals/spdy_view.html b/chrome/browser/resources/net_internals/spdy_view.html index e19c5f7..dd1bc16 100644 --- a/chrome/browser/resources/net_internals/spdy_view.html +++ b/chrome/browser/resources/net_internals/spdy_view.html @@ -1,6 +1,11 @@ <div id=spdy-view-tab-content class=content-box> <ul id=spdy-view-status style='margin-top:0'> - <li>HTTP/2 Enabled: <span jscontent="spdy_enabled"></span></li> + <!-- "enable_http2" and "enable_spdy31" are used since release 50, see + https://crrev.com/1651123002. "spdy_enabled" is here to support + importing netlog json files from earlier browsers. + TODO(bnc): Deprecate around 2016 July. --> + <li>HTTP/2 Enabled: <span jscontent="$this.enable_http2 == undefined ? $this.spdy_enabled : $this.enable_http2"></span></li> + <li>SPDY/3.1 Enabled: <span jscontent="$this.enable_spdy31 == undefined ? $this.spdy_enabled : $this.enable_spdy31"></span></li> <!-- "use_alternative_service" is used here since release 46, see https://crrev.com/1268313004. "use_alternate_protocols" is here to support importing netlog json files from earlier browsers. diff --git a/chromecast/browser/url_request_context_factory.cc b/chromecast/browser/url_request_context_factory.cc index bcfad11..dde307b 100644 --- a/chromecast/browser/url_request_context_factory.cc +++ b/chromecast/browser/url_request_context_factory.cc @@ -27,7 +27,6 @@ #include "net/http/http_server_properties_impl.h" #include "net/http/http_stream_factory.h" #include "net/proxy/proxy_service.h" -#include "net/socket/next_proto.h" #include "net/ssl/channel_id_service.h" #include "net/ssl/default_channel_id_store.h" #include "net/ssl/ssl_config_service_defaults.h" @@ -295,7 +294,8 @@ void URLRequestContextFactory::PopulateNetworkSessionParams( // TODO(lcwu): http://crbug.com/329681. Remove this once spdy is enabled // by default at the content level. - params->next_protos = net::NextProtosSpdy31(); + params->enable_spdy31 = true; + params->enable_http2 = false; params->parse_alternative_services = true; params->enable_alternative_service_with_different_host = true; } diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data_unittest.cc index f0436af..867a7c3 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data_unittest.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data_unittest.cc @@ -24,7 +24,6 @@ #include "net/log/net_log.h" #include "net/proxy/proxy_info.h" #include "net/proxy/proxy_service.h" -#include "net/socket/next_proto.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_interceptor.h" @@ -108,15 +107,11 @@ TEST_F(DataReductionProxyIODataTest, TestConstruction) { io_data->basic_url_request_context_getter_.get()->GetURLRequestContext(); const net::HttpNetworkSession::Params* http_params = request_context->GetNetworkSessionParams(); + EXPECT_FALSE(http_params->enable_spdy31); + EXPECT_FALSE(http_params->enable_http2); EXPECT_TRUE(http_params->parse_alternative_services); EXPECT_TRUE(http_params->enable_alternative_service_with_different_host); EXPECT_FALSE(http_params->enable_quic); - net::NextProtoVector expected_protos = - net::NextProtosWithSpdyAndQuic(false, false); - EXPECT_EQ(expected_protos.size(), http_params->next_protos.size()); - size_t proto_index = 0; - for (const auto& proto : expected_protos) - EXPECT_EQ(proto, http_params->next_protos[proto_index++]); // Check that io_data creates an interceptor. Such an interceptor is // thoroughly tested by DataReductionProxyInterceptoTest. diff --git a/ios/chrome/browser/ios_chrome_io_thread.cc b/ios/chrome/browser/ios_chrome_io_thread.cc index 3a65bb2..477490f 100644 --- a/ios/chrome/browser/ios_chrome_io_thread.cc +++ b/ios/chrome/browser/ios_chrome_io_thread.cc @@ -528,47 +528,45 @@ void IOSChromeIOThread::ConfigureSpdyGlobals( base::StringPiece spdy_trial_group, const VariationParameters& spdy_trial_params, IOSChromeIOThread::Globals* globals) { - globals->next_protos.clear(); - - bool enable_quic = false; - globals->enable_quic.CopyToIfSet(&enable_quic); - if (enable_quic) { - globals->next_protos.push_back(net::kProtoQUIC1SPDY3); - } - // No SPDY command-line flags have been specified. Examine trial groups. if (spdy_trial_group.starts_with(kSpdyFieldTrialHoldbackGroupNamePrefix)) { net::HttpStreamFactory::set_spdy_enabled(false); - } else if (spdy_trial_group.starts_with( - kSpdyFieldTrialSpdy31GroupNamePrefix)) { - globals->next_protos.push_back(net::kProtoSPDY31); - } else if (spdy_trial_group.starts_with( - kSpdyFieldTrialSpdy4GroupNamePrefix)) { - globals->next_protos.push_back(net::kProtoHTTP2); - globals->next_protos.push_back(net::kProtoSPDY31); - } else if (spdy_trial_group.starts_with(kSpdyFieldTrialParametrizedPrefix)) { + return; + } + if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy31GroupNamePrefix)) { + globals->enable_spdy31.set(true); + globals->enable_http2.set(false); + return; + } + if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy4GroupNamePrefix)) { + globals->enable_spdy31.set(true); + globals->enable_http2.set(true); + return; + } + if (spdy_trial_group.starts_with(kSpdyFieldTrialParametrizedPrefix)) { bool spdy_enabled = false; + globals->enable_spdy31.set(false); + globals->enable_http2.set(false); if (base::LowerCaseEqualsASCII( GetVariationParam(spdy_trial_params, "enable_http2"), "true")) { - globals->next_protos.push_back(net::kProtoHTTP2); spdy_enabled = true; + globals->enable_http2.set(true); } if (base::LowerCaseEqualsASCII( GetVariationParam(spdy_trial_params, "enable_spdy31"), "true")) { - globals->next_protos.push_back(net::kProtoSPDY31); spdy_enabled = true; + globals->enable_spdy31.set(true); } - // TODO(bnc): HttpStreamFactory::spdy_enabled_ is redundant with - // globals->next_protos, can it be eliminated? + // TODO(bnc): https://crbug.com/521597 + // HttpStreamFactory::spdy_enabled_ is redundant with globals->enable_http2 + // and enable_spdy31, can it be eliminated? net::HttpStreamFactory::set_spdy_enabled(spdy_enabled); - } else { - // By default, enable HTTP/2. - globals->next_protos.push_back(net::kProtoHTTP2); - globals->next_protos.push_back(net::kProtoSPDY31); + return; } - // Enable HTTP/1.1 in all cases as the last protocol. - globals->next_protos.push_back(net::kProtoHTTP11); + // By default, enable HTTP/2. + globals->enable_spdy31.set(true); + globals->enable_http2.set(true); } // static @@ -637,7 +635,8 @@ void IOSChromeIOThread::InitializeNetworkSessionParamsFromGlobals( globals.enable_spdy_compression.CopyToIfSet(¶ms->enable_spdy_compression); globals.enable_spdy_ping_based_connection_checking.CopyToIfSet( ¶ms->enable_spdy_ping_based_connection_checking); - params->next_protos = globals.next_protos; + globals.enable_spdy31.CopyToIfSet(¶ms->enable_spdy31); + globals.enable_http2.CopyToIfSet(¶ms->enable_http2); params->forced_spdy_exclusions = globals.forced_spdy_exclusions; globals.parse_alternative_services.CopyToIfSet( ¶ms->parse_alternative_services); diff --git a/ios/chrome/browser/ios_chrome_io_thread.h b/ios/chrome/browser/ios_chrome_io_thread.h index 5f0956f..878d28d 100644 --- a/ios/chrome/browser/ios_chrome_io_thread.h +++ b/ios/chrome/browser/ios_chrome_io_thread.h @@ -25,7 +25,6 @@ #include "ios/web/public/web_thread_delegate.h" #include "net/base/network_change_notifier.h" #include "net/http/http_network_session.h" -#include "net/socket/next_proto.h" class PrefProxyConfigTracker; class PrefService; @@ -138,7 +137,8 @@ class IOSChromeIOThread : public web::WebThreadDelegate { Optional<size_t> initial_max_spdy_concurrent_streams; Optional<bool> enable_spdy_compression; Optional<bool> enable_spdy_ping_based_connection_checking; - net::NextProtoVector next_protos; + Optional<bool> enable_spdy31; + Optional<bool> enable_http2; std::set<net::HostPortPair> forced_spdy_exclusions; Optional<bool> parse_alternative_services; Optional<bool> enable_alternative_service_with_different_host; diff --git a/ios/crnet/crnet_environment.mm b/ios/crnet/crnet_environment.mm index 7861322..939836a 100644 --- a/ios/crnet/crnet_environment.mm +++ b/ios/crnet/crnet_environment.mm @@ -47,7 +47,6 @@ #include "net/log/write_to_file_net_log_observer.h" #include "net/proxy/proxy_service.h" #include "net/sdch/sdch_owner.h" -#include "net/socket/next_proto.h" #include "net/ssl/channel_id_service.h" #include "net/ssl/default_channel_id_store.h" #include "net/ssl/ssl_config_service_defaults.h" @@ -439,8 +438,8 @@ void CrNetEnvironment::InitializeOnNetworkThread() { params.network_delegate = main_context_->network_delegate(); params.http_server_properties = main_context_->http_server_properties(); params.net_log = main_context_->net_log(); - params.next_protos = - net::NextProtosWithSpdyAndQuic(spdy_enabled(), quic_enabled()); + params.enable_spdy31 = spdy_enabled(); + params.enable_http2 = spdy_enabled(); params.parse_alternative_services = false; params.enable_quic = quic_enabled(); params.alternative_service_probability_threshold = diff --git a/jingle/glue/proxy_resolving_client_socket.cc b/jingle/glue/proxy_resolving_client_socket.cc index e54ca93..9443085 100644 --- a/jingle/glue/proxy_resolving_client_socket.cc +++ b/jingle/glue/proxy_resolving_client_socket.cc @@ -83,7 +83,8 @@ ProxyResolvingClientSocket::ProxyResolvingClientSocket( reference_params->testing_fixed_http_port; session_params.testing_fixed_https_port = reference_params->testing_fixed_https_port; - session_params.next_protos = reference_params->next_protos; + session_params.enable_spdy31 = reference_params->enable_spdy31; + session_params.enable_http2 = reference_params->enable_http2; session_params.trusted_spdy_proxy = reference_params->trusted_spdy_proxy; session_params.forced_spdy_exclusions = reference_params->forced_spdy_exclusions; diff --git a/jingle/glue/proxy_resolving_client_socket.h b/jingle/glue/proxy_resolving_client_socket.h index 4e3af23..fd9629d 100644 --- a/jingle/glue/proxy_resolving_client_socket.h +++ b/jingle/glue/proxy_resolving_client_socket.h @@ -20,6 +20,7 @@ #include "net/log/net_log.h" #include "net/proxy/proxy_info.h" #include "net/proxy/proxy_service.h" +#include "net/socket/next_proto.h" #include "net/socket/stream_socket.h" #include "net/ssl/ssl_config_service.h" #include "url/gurl.h" diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index fa6acb2..9dc5f94 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc @@ -92,6 +92,8 @@ HttpNetworkSession::Params::Params() enable_spdy_compression(true), enable_spdy_ping_based_connection_checking(true), spdy_default_protocol(kProtoUnknown), + enable_spdy31(false), + enable_http2(false), spdy_session_max_recv_window_size(kSpdySessionMaxRecvWindowSize), spdy_stream_max_recv_window_size(kSpdyStreamMaxRecvWindowSize), spdy_initial_max_concurrent_streams(0), @@ -216,31 +218,31 @@ HttpNetworkSession::HttpNetworkSession(const Params& params) enabled_protocols_[i - ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION] = false; } - // TODO(rtenneti): bug 116575 - consider combining the NextProto and - // AlternateProtocol. - for (std::vector<NextProto>::const_iterator it = params_.next_protos.begin(); - it != params_.next_protos.end(); ++it) { - NextProto proto = *it; - - // Add the protocol to the TLS next protocol list, except for QUIC - // since it uses UDP. - if (proto != kProtoQUIC1SPDY3) { - next_protos_.push_back(proto); - } - - // Enable the corresponding alternate protocol, except for HTTP - // which has not corresponding alternative. - if (proto != kProtoHTTP11) { - AlternateProtocol alternate = AlternateProtocolFromNextProto(proto); - if (!IsAlternateProtocolValid(alternate)) { - NOTREACHED() << "Invalid next proto: " << proto; - continue; - } - enabled_protocols_[alternate - ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION] = - true; - } + // TODO(rtenneti): https://crbug.com/116575 + // Consider combining the NextProto and AlternateProtocol. + if (params_.enable_http2) { + next_protos_.push_back(kProtoHTTP2); + AlternateProtocol alternate = AlternateProtocolFromNextProto(kProtoHTTP2); + enabled_protocols_[alternate - ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION] = + true; } + if (params_.enable_spdy31) { + next_protos_.push_back(kProtoSPDY31); + AlternateProtocol alternate = AlternateProtocolFromNextProto(kProtoSPDY31); + enabled_protocols_[alternate - ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION] = + true; + } + + if (params_.enable_quic) { + AlternateProtocol alternate = + AlternateProtocolFromNextProto(kProtoQUIC1SPDY3); + enabled_protocols_[alternate - ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION] = + true; + } + + next_protos_.push_back(kProtoHTTP11); + http_server_properties_->SetAlternativeServiceProbabilityThreshold( params.alternative_service_probability_threshold); http_server_properties_->SetMaxServerConfigsStoredInProperties( diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h index f3f336c..b22f3d4 100644 --- a/net/http/http_network_session.h +++ b/net/http/http_network_session.h @@ -91,12 +91,8 @@ class NET_EXPORT HttpNetworkSession // Use SPDY ping frames to test for connection health after idle. bool enable_spdy_ping_based_connection_checking; NextProto spdy_default_protocol; - // The protocols supported by NPN (next protocol negotiation) during the - // SSL handshake as well as by HTTP Alternate-Protocol. - // TODO(mmenke): This is currently empty by default, and alternate - // protocols are disabled. We should use some reasonable - // defaults. - NextProtoVector next_protos; + bool enable_spdy31; + bool enable_http2; size_t spdy_session_max_recv_window_size; size_t spdy_stream_max_recv_window_size; size_t spdy_initial_max_concurrent_streams; diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index 4d4b5471..d086f08 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc @@ -9570,7 +9570,6 @@ TEST_P(HttpNetworkTransactionTest, ChangeAuthRealms) { } TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { - session_deps_.next_protos = SpdyNextProtos(); session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; @@ -9633,7 +9632,6 @@ TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { } TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { - session_deps_.next_protos = SpdyNextProtos(); session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; @@ -9693,7 +9691,6 @@ TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { // Alternative Service headers must be ignored when // |parse_alternative_services| is false. TEST_P(HttpNetworkTransactionTest, DoNotHonorAlternativeServiceHeader) { - session_deps_.next_protos = SpdyNextProtos(); session_deps_.parse_alternative_services = false; std::string alternative_service_http_header = @@ -9751,7 +9748,6 @@ TEST_P(HttpNetworkTransactionTest, DoNotHonorAlternativeServiceHeader) { } TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeader) { - session_deps_.next_protos = SpdyNextProtos(); session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; @@ -9760,7 +9756,8 @@ TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeader) { MockRead("Alt-Svc: "), MockRead(GetAlternateProtocolFromParam()), MockRead("=\"www.example.com:443\";p=\"1.0\","), - MockRead("quic=\":1234\"\r\n\r\n"), + MockRead(GetAlternateProtocolFromParam()), + MockRead("=\":1234\"\r\n\r\n"), MockRead("hello world"), MockRead(SYNCHRONOUS, OK), }; @@ -9810,7 +9807,8 @@ TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeader) { alternative_service_vector[0].protocol); EXPECT_EQ("www.example.com", alternative_service_vector[0].host); EXPECT_EQ(443, alternative_service_vector[0].port); - EXPECT_EQ(QUIC, alternative_service_vector[1].protocol); + EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), + alternative_service_vector[1].protocol); EXPECT_EQ("www.example.org", alternative_service_vector[1].host); EXPECT_EQ(1234, alternative_service_vector[1].port); } @@ -9818,7 +9816,6 @@ TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeader) { // Alternate Protocol headers must be honored even if // |parse_alternative_services| is false. TEST_P(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { - session_deps_.next_protos = SpdyNextProtos(); session_deps_.parse_alternative_services = false; std::string alternate_protocol_http_header = @@ -9879,7 +9876,6 @@ TEST_P(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { } TEST_P(HttpNetworkTransactionTest, EmptyAlternateProtocolHeader) { - session_deps_.next_protos = SpdyNextProtos(); session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; @@ -9943,7 +9939,6 @@ TEST_P(HttpNetworkTransactionTest, EmptyAlternateProtocolHeader) { // When |session_deps_.parse_alternative_services = true| and the response has // an Alt-Svc header, then the Alternate-Protocol header is not parsed. TEST_P(HttpNetworkTransactionTest, AltSvcOverwritesAlternateProtocol) { - session_deps_.next_protos = SpdyNextProtos(); session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; @@ -10572,7 +10567,6 @@ TEST_P(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - session_deps_.next_protos = SpdyNextProtos(); HttpRequestInfo request; request.method = "GET"; @@ -10661,7 +10655,6 @@ TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - session_deps_.next_protos = SpdyNextProtos(); HttpRequestInfo request; request.method = "GET"; @@ -10783,7 +10776,6 @@ TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { TEST_P(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - session_deps_.next_protos = SpdyNextProtos(); HttpRequestInfo request; request.method = "GET"; @@ -10913,7 +10905,6 @@ TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForTunneledNpnSpdy) { session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - session_deps_.next_protos = SpdyNextProtos(); ProxyConfig proxy_config; proxy_config.set_auto_detect(true); @@ -11038,7 +11029,6 @@ TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - session_deps_.next_protos = SpdyNextProtos(); HttpRequestInfo request; request.method = "GET"; @@ -11737,11 +11727,10 @@ TEST_P(HttpNetworkTransactionTest, MultiRoundAuth) { // This tests the case that a request is issued via http instead of spdy after // npn is negotiated. TEST_P(HttpNetworkTransactionTest, NpnWithHttpOverSSL) { + session_deps_.enable_spdy31 = false; + session_deps_.enable_http2 = false; session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - NextProtoVector next_protos; - next_protos.push_back(kProtoHTTP11); - session_deps_.next_protos = next_protos; HttpRequestInfo request; request.method = "GET"; @@ -11805,7 +11794,6 @@ TEST_P(HttpNetworkTransactionTest, NpnWithHttpOverSSL) { TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - session_deps_.next_protos = SpdyNextProtos(); HttpRequestInfo request; request.method = "GET"; @@ -11867,7 +11855,6 @@ class UrlRecordingHttpAuthHandlerMock : public HttpAuthHandlerMock { TEST_P(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) { session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - session_deps_.next_protos = SpdyNextProtos(); session_deps_.proxy_service = ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); @@ -12797,7 +12784,6 @@ TEST_P(HttpNetworkTransactionTest, ClientAuthCertCache_Proxy_Fail) { TEST_P(HttpNetworkTransactionTest, UseIPConnectionPooling) { session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - session_deps_.next_protos = SpdyNextProtos(); // Set up a special HttpNetworkSession with a MockCachingHostResolver. session_deps_.host_resolver.reset(new MockCachingHostResolver()); @@ -12898,7 +12884,6 @@ TEST_P(HttpNetworkTransactionTest, UseIPConnectionPooling) { TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - session_deps_.next_protos = SpdyNextProtos(); // Set up a special HttpNetworkSession with a MockCachingHostResolver. session_deps_.host_resolver.reset(new MockCachingHostResolver()); @@ -13027,7 +13012,6 @@ TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingWithHostCacheExpiration) { session_deps_.parse_alternative_services = true; session_deps_.enable_alternative_service_with_different_host = false; - session_deps_.next_protos = SpdyNextProtos(); // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); @@ -13951,7 +13935,6 @@ TEST_P(HttpNetworkTransactionTest, ErrorSocketNotConnected) { } TEST_P(HttpNetworkTransactionTest, CloseIdleSpdySessionToOpenNewOne) { - session_deps_.next_protos = SpdyNextProtos(); ClientSocketPoolManager::set_max_sockets_per_group( HttpNetworkSession::NORMAL_SOCKET_POOL, 1); ClientSocketPoolManager::set_max_sockets_per_pool( @@ -15828,7 +15811,6 @@ TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesChunkedPost) { } TEST_P(HttpNetworkTransactionTest, EnableNPN) { - session_deps_.next_protos = NextProtosDefaults(); session_deps_.enable_npn = true; scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); @@ -15841,7 +15823,6 @@ TEST_P(HttpNetworkTransactionTest, EnableNPN) { } TEST_P(HttpNetworkTransactionTest, DisableNPN) { - session_deps_.next_protos = NextProtosDefaults(); session_deps_.enable_npn = false; scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); diff --git a/net/log/net_log_util.cc b/net/log/net_log_util.cc index 150b9f9..4d4dfa6 100644 --- a/net/log/net_log_util.cc +++ b/net/log/net_log_util.cc @@ -416,7 +416,12 @@ NET_EXPORT scoped_ptr<base::DictionaryValue> GetNetInfo( if (info_sources & NET_INFO_SPDY_STATUS) { base::DictionaryValue* status_dict = new base::DictionaryValue(); - status_dict->SetBoolean("spdy_enabled", HttpStreamFactory::spdy_enabled()); + status_dict->SetBoolean("enable_spdy31", + http_network_session->params().enable_spdy31 && + HttpStreamFactory::spdy_enabled()); + status_dict->SetBoolean("enable_http2", + http_network_session->params().enable_http2 && + HttpStreamFactory::spdy_enabled()); status_dict->SetBoolean( "use_alternative_services", http_network_session->params().parse_alternative_services); diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc index f161588..67f855b 100644 --- a/net/quic/quic_network_transaction_unittest.cc +++ b/net/quic/quic_network_transaction_unittest.cc @@ -442,9 +442,10 @@ class QuicNetworkTransactionTest test_network_quality_estimator_->AddRTTObserver(&rtt_observer_); if (use_next_protos) { + params_.enable_spdy31 = true; + params_.enable_http2 = true; params_.parse_alternative_services = true; params_.enable_alternative_service_with_different_host = true; - params_.next_protos = NextProtosWithSpdyAndQuic(true, true); } session_.reset(new HttpNetworkSession(params_)); diff --git a/net/socket/next_proto.cc b/net/socket/next_proto.cc index a22418c..a3e2e0b 100644 --- a/net/socket/next_proto.cc +++ b/net/socket/next_proto.cc @@ -6,35 +6,6 @@ namespace net { -NextProtoVector NextProtosDefaults() { - NextProtoVector next_protos; - next_protos.push_back(kProtoHTTP2); - next_protos.push_back(kProtoSPDY31); - next_protos.push_back(kProtoHTTP11); - return next_protos; -} - -NextProtoVector NextProtosWithSpdyAndQuic(bool spdy_enabled, - bool quic_enabled) { - NextProtoVector next_protos; - if (quic_enabled) - next_protos.push_back(kProtoQUIC1SPDY3); - if (spdy_enabled) { - next_protos.push_back(kProtoHTTP2); - next_protos.push_back(kProtoSPDY31); - } - next_protos.push_back(kProtoHTTP11); - return next_protos; -} - -NextProtoVector NextProtosSpdy31() { - NextProtoVector next_protos; - next_protos.push_back(kProtoQUIC1SPDY3); - next_protos.push_back(kProtoSPDY31); - next_protos.push_back(kProtoHTTP11); - return next_protos; -} - bool NextProtoIsSPDY(NextProto next_proto) { return next_proto >= kProtoSPDYMinimumVersion && next_proto <= kProtoSPDYMaximumVersion; diff --git a/net/socket/next_proto.h b/net/socket/next_proto.h index 3938d44..734e0dd 100644 --- a/net/socket/next_proto.h +++ b/net/socket/next_proto.h @@ -43,16 +43,6 @@ typedef std::vector<NextProto> NextProtoVector; // Convenience functions to create NextProtoVector. -// Default values, which are subject to change over time. -NET_EXPORT NextProtoVector NextProtosDefaults(); - -// Enable SPDY/3.1 and QUIC, but not HTTP/2. -NET_EXPORT NextProtoVector NextProtosSpdy31(); - -// Control SPDY/3.1 and HTTP/2 separately. -NET_EXPORT NextProtoVector NextProtosWithSpdyAndQuic(bool spdy_enabled, - bool quic_enabled); - // Returns true if |next_proto| is a version of SPDY or HTTP/2. bool NextProtoIsSPDY(NextProto next_proto); diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc index c25bc2b..a1e060c 100644 --- a/net/spdy/spdy_network_transaction_unittest.cc +++ b/net/spdy/spdy_network_transaction_unittest.cc @@ -103,7 +103,6 @@ void UpdateSpdySessionDependencies(SpdyNetworkTransactionTestParams test_params, SpdySessionDependencies* session_deps) { session_deps->parse_alternative_services = true; session_deps->enable_alternative_service_with_different_host = true; - session_deps->next_protos = SpdyNextProtos(); if (test_params.ssl_type == HTTP_SPDY_VIA_ALT_SVC) { base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); session_deps->http_server_properties.SetAlternativeService( @@ -4324,7 +4323,6 @@ TEST_P(SpdyNetworkTransactionTest, HTTP11RequiredRetry) { scoped_ptr<SpdySessionDependencies> session_deps( CreateSpdySessionDependencies(GetParam())); // Do not force SPDY so that second socket can negotiate HTTP/1.1. - session_deps->next_protos = SpdyNextProtos(); NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, BoundNetLog(), GetParam(), std::move(session_deps)); @@ -4343,9 +4341,9 @@ TEST_P(SpdyNetworkTransactionTest, HTTP11RequiredRetry) { scoped_ptr<SSLSocketDataProvider> ssl_provider0( new SSLSocketDataProvider(ASYNC, OK)); // Expect HTTP/2 protocols too in SSLConfig. - ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); - ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoSPDY31); ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP2); + ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoSPDY31); + ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); // Force SPDY. ssl_provider0->SetNextProto(GetParam().protocol); helper.AddDataWithSSLSocketDataProvider(&data0, std::move(ssl_provider0)); @@ -4416,7 +4414,6 @@ TEST_P(SpdyNetworkTransactionTest, HTTP11RequiredProxyRetry) { GetParam(), ProxyService::CreateFixedFromPacResult("HTTPS myproxy:70"))); // Do not force SPDY so that second socket can negotiate HTTP/1.1. - session_deps->next_protos = SpdyNextProtos(); NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, BoundNetLog(), GetParam(), std::move(session_deps)); @@ -4433,9 +4430,9 @@ TEST_P(SpdyNetworkTransactionTest, HTTP11RequiredProxyRetry) { scoped_ptr<SSLSocketDataProvider> ssl_provider0( new SSLSocketDataProvider(ASYNC, OK)); // Expect HTTP/2 protocols too in SSLConfig. - ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); - ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoSPDY31); ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP2); + ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoSPDY31); + ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); // Force SPDY. ssl_provider0->SetNextProto(GetParam().protocol); helper.AddDataWithSSLSocketDataProvider(&data0, std::move(ssl_provider0)); diff --git a/net/spdy/spdy_test_util_common.cc b/net/spdy/spdy_test_util_common.cc index 37373cf..7b970ea 100644 --- a/net/spdy/spdy_test_util_common.cc +++ b/net/spdy/spdy_test_util_common.cc @@ -54,15 +54,6 @@ void ParseUrl(base::StringPiece url, std::string* scheme, std::string* host, } // namespace -NextProtoVector SpdyNextProtos() { - NextProtoVector next_protos; - next_protos.push_back(kProtoHTTP11); - next_protos.push_back(kProtoSPDY31); - next_protos.push_back(kProtoHTTP2); - next_protos.push_back(kProtoQUIC1SPDY3); - return next_protos; -} - // Chop a frame into an array of MockWrites. // |frame| is the frame to chop. // |num_chunks| is the number of chunks to create. @@ -355,6 +346,8 @@ SpdySessionDependencies::SpdySessionDependencies(NextProto protocol) stream_max_recv_window_size( SpdySession::GetDefaultInitialWindowSize(protocol)), time_func(&base::TimeTicks::Now), + enable_spdy31(true), + enable_http2(true), parse_alternative_services(false), enable_alternative_service_with_different_host(false), net_log(NULL) { @@ -392,6 +385,8 @@ SpdySessionDependencies::SpdySessionDependencies( stream_max_recv_window_size( SpdySession::GetDefaultInitialWindowSize(protocol)), time_func(&base::TimeTicks::Now), + enable_spdy31(true), + enable_http2(true), parse_alternative_services(true), enable_alternative_service_with_different_host(true), net_log(NULL) { @@ -440,7 +435,8 @@ HttpNetworkSession::Params SpdySessionDependencies::CreateSessionParams( params.spdy_stream_max_recv_window_size = session_deps->stream_max_recv_window_size; params.time_func = session_deps->time_func; - params.next_protos = session_deps->next_protos; + params.enable_spdy31 = session_deps->enable_spdy31; + params.enable_http2 = session_deps->enable_http2; params.trusted_spdy_proxy = session_deps->trusted_spdy_proxy; params.parse_alternative_services = session_deps->parse_alternative_services; params.enable_alternative_service_with_different_host = diff --git a/net/spdy/spdy_test_util_common.h b/net/spdy/spdy_test_util_common.h index ed51936..6746d85 100644 --- a/net/spdy/spdy_test_util_common.h +++ b/net/spdy/spdy_test_util_common.h @@ -52,10 +52,6 @@ const char kDefaultURL[] = "http://www.example.org/"; const char kUploadData[] = "hello!"; const int kUploadDataSize = arraysize(kUploadData)-1; -// SpdyNextProtos returns a vector of next protocols for negotiating -// SPDY. -NextProtoVector SpdyNextProtos(); - // Chop a SpdyFrame into an array of MockWrites. // |frame| is the frame to chop. // |num_chunks| is the number of chunks to create. @@ -204,7 +200,8 @@ struct SpdySessionDependencies { size_t session_max_recv_window_size; size_t stream_max_recv_window_size; SpdySession::TimeFunc time_func; - NextProtoVector next_protos; + bool enable_spdy31; + bool enable_http2; std::string trusted_spdy_proxy; bool parse_alternative_services; bool enable_alternative_service_with_different_host; diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc index 82a23df..44109d7 100644 --- a/net/url_request/url_request_context_builder.cc +++ b/net/url_request/url_request_context_builder.cc @@ -179,7 +179,8 @@ URLRequestContextBuilder::HttpNetworkSessionParams::HttpNetworkSessionParams() host_mapping_rules(NULL), testing_fixed_http_port(0), testing_fixed_https_port(0), - next_protos(NextProtosDefaults()), + enable_spdy31(true), + enable_http2(true), parse_alternative_services(true), enable_alternative_service_with_different_host(true), enable_quic(false), @@ -237,8 +238,8 @@ void URLRequestContextBuilder::DisableHttpCache() { void URLRequestContextBuilder::SetSpdyAndQuicEnabled(bool spdy_enabled, bool quic_enabled) { - http_network_session_params_.next_protos = - NextProtosWithSpdyAndQuic(spdy_enabled, quic_enabled); + http_network_session_params_.enable_spdy31 = spdy_enabled; + http_network_session_params_.enable_http2 = spdy_enabled; http_network_session_params_.enable_quic = quic_enabled; } @@ -386,14 +387,17 @@ scoped_ptr<URLRequestContext> URLRequestContextBuilder::Build() { http_network_session_params_.testing_fixed_http_port; network_session_params.testing_fixed_https_port = http_network_session_params_.testing_fixed_https_port; + network_session_params.enable_spdy31 = + http_network_session_params_.enable_spdy31; + network_session_params.enable_http2 = + http_network_session_params_.enable_http2; + network_session_params.trusted_spdy_proxy = + http_network_session_params_.trusted_spdy_proxy; network_session_params.parse_alternative_services = http_network_session_params_.parse_alternative_services; network_session_params.enable_alternative_service_with_different_host = http_network_session_params_ .enable_alternative_service_with_different_host; - network_session_params.trusted_spdy_proxy = - http_network_session_params_.trusted_spdy_proxy; - network_session_params.next_protos = http_network_session_params_.next_protos; network_session_params.enable_quic = http_network_session_params_.enable_quic; network_session_params.quic_max_server_configs_stored_in_properties = http_network_session_params_.quic_max_server_configs_stored_in_properties; diff --git a/net/url_request/url_request_context_builder.h b/net/url_request/url_request_context_builder.h index d7a9def..83193d1 100644 --- a/net/url_request/url_request_context_builder.h +++ b/net/url_request/url_request_context_builder.h @@ -84,7 +84,8 @@ class NET_EXPORT URLRequestContextBuilder { HostMappingRules* host_mapping_rules; uint16_t testing_fixed_http_port; uint16_t testing_fixed_https_port; - NextProtoVector next_protos; + bool enable_spdy31; + bool enable_http2; std::string trusted_spdy_proxy; bool parse_alternative_services; bool enable_alternative_service_with_different_host; @@ -189,7 +190,6 @@ class NET_EXPORT URLRequestContextBuilder { transport_security_persister_path_ = transport_security_persister_path; } - // Adjust |http_network_session_params_.next_protos| to enable SPDY and QUIC. void SetSpdyAndQuicEnabled(bool spdy_enabled, bool quic_enabled); |