| Index: net/http/http_stream_factory_impl_unittest.cc
|
| diff --git a/net/http/http_stream_factory_impl_unittest.cc b/net/http/http_stream_factory_impl_unittest.cc
|
| index 637b612401c128e757e14e12b87b6b25f62de690..92c81cfdeb72c3b6552c3760d0f0d1beae856a24 100644
|
| --- a/net/http/http_stream_factory_impl_unittest.cc
|
| +++ b/net/http/http_stream_factory_impl_unittest.cc
|
| @@ -27,6 +27,8 @@
|
| #include "net/log/net_log.h"
|
| #include "net/proxy/proxy_info.h"
|
| #include "net/proxy/proxy_service.h"
|
| +#include "net/quic/quic_server_id.h"
|
| +#include "net/quic/test_tools/quic_stream_factory_peer.h"
|
| #include "net/socket/client_socket_handle.h"
|
| #include "net/socket/mock_client_socket_pool_manager.h"
|
| #include "net/socket/next_proto.h"
|
| @@ -116,7 +118,6 @@ class MockHttpStreamFactoryImplForPreconnect : public HttpStreamFactoryImpl {
|
| preconnect_done_(false),
|
| waiting_for_preconnect_(false) {}
|
|
|
| -
|
| void WaitForPreconnects() {
|
| while (!preconnect_done_) {
|
| waiting_for_preconnect_ = true;
|
| @@ -639,6 +640,7 @@ TEST_P(HttpStreamFactoryTest, UnreachableQuicProxyMarkedAsBad) {
|
|
|
| HttpNetworkSession::Params params;
|
| params.enable_quic = true;
|
| + params.quic_disable_preconnect_if_0rtt = false;
|
| params.enable_quic_for_proxies = true;
|
| scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
|
| new SSLConfigServiceDefaults);
|
| @@ -700,6 +702,7 @@ TEST_P(HttpStreamFactoryTest, QuicLossyProxyMarkedAsBad) {
|
| HttpNetworkSession::Params params;
|
| params.enable_quic = true;
|
| params.enable_quic_for_proxies = true;
|
| + params.quic_disable_preconnect_if_0rtt = false;
|
| scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
|
| new SSLConfigServiceDefaults);
|
| HttpServerPropertiesImpl http_server_properties;
|
| @@ -748,6 +751,105 @@ TEST_P(HttpStreamFactoryTest, QuicLossyProxyMarkedAsBad) {
|
| EXPECT_TRUE(iter != retry_info.end());
|
| }
|
|
|
| +TEST_P(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) {
|
| + for (int num_streams = 1; num_streams < 3; ++num_streams) {
|
| + GURL url = GURL("https://www.google.com");
|
| +
|
| + // Set up QUIC as alternative_service.
|
| + HttpServerPropertiesImpl http_server_properties;
|
| + const AlternativeService alternative_service(QUIC, url.host().c_str(),
|
| + url.IntPort());
|
| + AlternativeServiceInfoVector alternative_service_info_vector;
|
| + base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
|
| + alternative_service_info_vector.push_back(
|
| + AlternativeServiceInfo(alternative_service, 1.0, expiration));
|
| + HostPortPair host_port_pair(alternative_service.host_port_pair());
|
| + http_server_properties.SetAlternativeServices(
|
| + host_port_pair, alternative_service_info_vector);
|
| +
|
| + SpdySessionDependencies session_deps(
|
| + GetParam(), ProxyService::CreateFixed("http_proxy"));
|
| +
|
| + // Setup params to disable preconnect, but QUIC doesn't 0RTT.
|
| + HttpNetworkSession::Params params =
|
| + SpdySessionDependencies::CreateSessionParams(&session_deps);
|
| + params.enable_quic = true;
|
| + params.quic_disable_preconnect_if_0rtt = true;
|
| + params.http_server_properties = http_server_properties.GetWeakPtr();
|
| +
|
| + scoped_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
|
| + HttpNetworkSessionPeer peer(session.get());
|
| + HostPortPair proxy_host("http_proxy", 80);
|
| + CapturePreconnectsHttpProxySocketPool* http_proxy_pool =
|
| + new CapturePreconnectsHttpProxySocketPool(
|
| + session_deps.host_resolver.get(), session_deps.cert_verifier.get());
|
| + CapturePreconnectsSSLSocketPool* ssl_conn_pool =
|
| + new CapturePreconnectsSSLSocketPool(session_deps.host_resolver.get(),
|
| + session_deps.cert_verifier.get());
|
| + scoped_ptr<MockClientSocketPoolManager> mock_pool_manager(
|
| + new MockClientSocketPoolManager);
|
| + mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool);
|
| + mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool);
|
| + peer.SetClientSocketPoolManager(mock_pool_manager.Pass());
|
| + PreconnectHelperForURL(num_streams, url, session.get());
|
| + EXPECT_EQ(num_streams, ssl_conn_pool->last_num_streams());
|
| + }
|
| +}
|
| +
|
| +TEST_P(HttpStreamFactoryTest, QuicDisablePreConnectIfZeroRtt) {
|
| + for (int num_streams = 1; num_streams < 3; ++num_streams) {
|
| + GURL url = GURL("https://www.google.com");
|
| +
|
| + // Set up QUIC as alternative_service.
|
| + HttpServerPropertiesImpl http_server_properties;
|
| + const AlternativeService alternative_service(QUIC, "www.google.com", 443);
|
| + AlternativeServiceInfoVector alternative_service_info_vector;
|
| + base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
|
| + alternative_service_info_vector.push_back(
|
| + AlternativeServiceInfo(alternative_service, 1.0, expiration));
|
| + HostPortPair host_port_pair(alternative_service.host_port_pair());
|
| + http_server_properties.SetAlternativeServices(
|
| + host_port_pair, alternative_service_info_vector);
|
| +
|
| + SpdySessionDependencies session_deps(GetParam());
|
| +
|
| + // Setup params to disable preconnect, but QUIC does 0RTT.
|
| + HttpNetworkSession::Params params =
|
| + SpdySessionDependencies::CreateSessionParams(&session_deps);
|
| + params.enable_quic = true;
|
| + params.quic_disable_preconnect_if_0rtt = true;
|
| + params.http_server_properties = http_server_properties.GetWeakPtr();
|
| +
|
| + scoped_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
|
| +
|
| + // Setup 0RTT for QUIC.
|
| + QuicStreamFactory* factory = session->quic_stream_factory();
|
| + factory->set_require_confirmation(false);
|
| + test::QuicStreamFactoryPeer::CacheDummyServerConfig(
|
| + factory, QuicServerId(host_port_pair, PRIVACY_MODE_DISABLED));
|
| +
|
| + HttpNetworkSessionPeer peer(session.get());
|
| + CapturePreconnectsTransportSocketPool* transport_conn_pool =
|
| + new CapturePreconnectsTransportSocketPool(
|
| + session_deps.host_resolver.get(), session_deps.cert_verifier.get());
|
| + scoped_ptr<MockClientSocketPoolManager> mock_pool_manager(
|
| + new MockClientSocketPoolManager);
|
| + mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
|
| + peer.SetClientSocketPoolManager(mock_pool_manager.Pass());
|
| +
|
| + HttpRequestInfo request;
|
| + request.method = "GET";
|
| + request.url = url;
|
| + request.load_flags = 0;
|
| +
|
| + SSLConfig ssl_config;
|
| + session->ssl_config_service()->GetSSLConfig(&ssl_config);
|
| + session->http_stream_factory()->PreconnectStreams(num_streams, request,
|
| + ssl_config, ssl_config);
|
| + EXPECT_EQ(-1, transport_conn_pool->last_num_streams());
|
| + }
|
| +}
|
| +
|
| namespace {
|
|
|
| TEST_P(HttpStreamFactoryTest, PrivacyModeDisablesChannelId) {
|
|
|