| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/http/http_stream_factory_impl.h" | 5 #include "net/http/http_stream_factory_impl.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 1091 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1102 EXPECT_EQ(static_cast<int>(i + 1), | 1102 EXPECT_EQ(static_cast<int>(i + 1), |
| 1103 test_proxy_delegate.get_alternative_proxy_invocations()); | 1103 test_proxy_delegate.get_alternative_proxy_invocations()); |
| 1104 } | 1104 } |
| 1105 } | 1105 } |
| 1106 } | 1106 } |
| 1107 | 1107 |
| 1108 TEST_F(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) { | 1108 TEST_F(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) { |
| 1109 for (int num_streams = 1; num_streams < 3; ++num_streams) { | 1109 for (int num_streams = 1; num_streams < 3; ++num_streams) { |
| 1110 GURL url = GURL("https://www.google.com"); | 1110 GURL url = GURL("https://www.google.com"); |
| 1111 | 1111 |
| 1112 // Set up QUIC as alternative_service. | |
| 1113 HttpServerPropertiesImpl http_server_properties; | |
| 1114 const AlternativeService alternative_service(kProtoQUIC, url.host().c_str(), | |
| 1115 url.IntPort()); | |
| 1116 AlternativeServiceInfoVector alternative_service_info_vector; | |
| 1117 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | |
| 1118 alternative_service_info_vector.push_back( | |
| 1119 AlternativeServiceInfo(alternative_service, expiration)); | |
| 1120 HostPortPair host_port_pair(alternative_service.host_port_pair()); | |
| 1121 url::SchemeHostPort server("https", host_port_pair.host(), | |
| 1122 host_port_pair.port()); | |
| 1123 http_server_properties.SetAlternativeServices( | |
| 1124 server, alternative_service_info_vector); | |
| 1125 | |
| 1126 SpdySessionDependencies session_deps( | 1112 SpdySessionDependencies session_deps( |
| 1127 ProxyService::CreateFixed("http_proxy")); | 1113 ProxyService::CreateFixed("http_proxy")); |
| 1128 | 1114 |
| 1129 // Setup params to disable preconnect, but QUIC doesn't 0RTT. | 1115 // Setup params to disable preconnect, but QUIC doesn't 0RTT. |
| 1130 HttpNetworkSession::Params session_params = | 1116 HttpNetworkSession::Params session_params = |
| 1131 SpdySessionDependencies::CreateSessionParams(&session_deps); | 1117 SpdySessionDependencies::CreateSessionParams(&session_deps); |
| 1132 session_params.enable_quic = true; | 1118 session_params.enable_quic = true; |
| 1133 | 1119 |
| 1120 // Set up QUIC as alternative_service. |
| 1121 HttpServerPropertiesImpl http_server_properties; |
| 1122 const AlternativeService alternative_service(kProtoQUIC, url.host().c_str(), |
| 1123 url.IntPort()); |
| 1124 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 1125 HostPortPair host_port_pair(alternative_service.host_port_pair()); |
| 1126 url::SchemeHostPort server("https", host_port_pair.host(), |
| 1127 host_port_pair.port()); |
| 1128 http_server_properties.SetQuicAlternativeService( |
| 1129 server, alternative_service, expiration, |
| 1130 session_params.quic_supported_versions); |
| 1131 |
| 1134 HttpNetworkSession::Context session_context = | 1132 HttpNetworkSession::Context session_context = |
| 1135 SpdySessionDependencies::CreateSessionContext(&session_deps); | 1133 SpdySessionDependencies::CreateSessionContext(&session_deps); |
| 1136 session_context.http_server_properties = &http_server_properties; | 1134 session_context.http_server_properties = &http_server_properties; |
| 1137 | 1135 |
| 1138 auto session = | 1136 auto session = |
| 1139 base::MakeUnique<HttpNetworkSession>(session_params, session_context); | 1137 base::MakeUnique<HttpNetworkSession>(session_params, session_context); |
| 1140 HttpNetworkSessionPeer peer(session.get()); | 1138 HttpNetworkSessionPeer peer(session.get()); |
| 1141 HostPortPair proxy_host("http_proxy", 80); | 1139 HostPortPair proxy_host("http_proxy", 80); |
| 1142 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = | 1140 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = |
| 1143 new CapturePreconnectsHttpProxySocketPool( | 1141 new CapturePreconnectsHttpProxySocketPool( |
| (...skipping 1121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2265 session_context.proxy_service = proxy_service_.get(); | 2263 session_context.proxy_service = proxy_service_.get(); |
| 2266 session_context.ssl_config_service = ssl_config_service_.get(); | 2264 session_context.ssl_config_service = ssl_config_service_.get(); |
| 2267 session_context.client_socket_factory = &socket_factory_; | 2265 session_context.client_socket_factory = &socket_factory_; |
| 2268 session_.reset(new HttpNetworkSession(params_, session_context)); | 2266 session_.reset(new HttpNetworkSession(params_, session_context)); |
| 2269 session_->quic_stream_factory()->set_require_confirmation(false); | 2267 session_->quic_stream_factory()->set_require_confirmation(false); |
| 2270 } | 2268 } |
| 2271 | 2269 |
| 2272 void AddQuicAlternativeService() { | 2270 void AddQuicAlternativeService() { |
| 2273 const AlternativeService alternative_service(kProtoQUIC, "www.example.org", | 2271 const AlternativeService alternative_service(kProtoQUIC, "www.example.org", |
| 2274 443); | 2272 443); |
| 2275 AlternativeServiceInfoVector alternative_service_info_vector; | |
| 2276 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 2273 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 2277 alternative_service_info_vector.push_back( | 2274 http_server_properties_.SetQuicAlternativeService( |
| 2278 AlternativeServiceInfo(alternative_service, expiration)); | 2275 url::SchemeHostPort(default_url_), alternative_service, expiration, |
| 2279 http_server_properties_.SetAlternativeServices( | 2276 session_->params().quic_supported_versions); |
| 2280 url::SchemeHostPort(default_url_), alternative_service_info_vector); | |
| 2281 } | 2277 } |
| 2282 | 2278 |
| 2283 test::QuicTestPacketMaker& client_packet_maker() { | 2279 test::QuicTestPacketMaker& client_packet_maker() { |
| 2284 return client_packet_maker_; | 2280 return client_packet_maker_; |
| 2285 } | 2281 } |
| 2286 test::QuicTestPacketMaker& server_packet_maker() { | 2282 test::QuicTestPacketMaker& server_packet_maker() { |
| 2287 return server_packet_maker_; | 2283 return server_packet_maker_; |
| 2288 } | 2284 } |
| 2289 | 2285 |
| 2290 MockClientSocketFactory& socket_factory() { return socket_factory_; } | 2286 MockClientSocketFactory& socket_factory() { return socket_factory_; } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2345 | 2341 |
| 2346 // Add hanging data for http job. | 2342 // Add hanging data for http job. |
| 2347 auto hanging_data = base::MakeUnique<StaticSocketDataProvider>(); | 2343 auto hanging_data = base::MakeUnique<StaticSocketDataProvider>(); |
| 2348 MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING); | 2344 MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| 2349 hanging_data->set_connect_data(hanging_connect); | 2345 hanging_data->set_connect_data(hanging_connect); |
| 2350 socket_factory().AddSocketDataProvider(hanging_data.get()); | 2346 socket_factory().AddSocketDataProvider(hanging_data.get()); |
| 2351 SSLSocketDataProvider ssl_data(ASYNC, OK); | 2347 SSLSocketDataProvider ssl_data(ASYNC, OK); |
| 2352 socket_factory().AddSSLSocketDataProvider(&ssl_data); | 2348 socket_factory().AddSSLSocketDataProvider(&ssl_data); |
| 2353 | 2349 |
| 2354 // Set up QUIC as alternative_service. | 2350 // Set up QUIC as alternative_service. |
| 2351 Initialize(); |
| 2355 AddQuicAlternativeService(); | 2352 AddQuicAlternativeService(); |
| 2356 Initialize(); | |
| 2357 | 2353 |
| 2358 // Now request a stream. | 2354 // Now request a stream. |
| 2359 SSLConfig ssl_config; | 2355 SSLConfig ssl_config; |
| 2360 HttpRequestInfo request_info; | 2356 HttpRequestInfo request_info; |
| 2361 request_info.method = "GET"; | 2357 request_info.method = "GET"; |
| 2362 request_info.url = default_url_; | 2358 request_info.url = default_url_; |
| 2363 request_info.load_flags = 0; | 2359 request_info.load_flags = 0; |
| 2364 | 2360 |
| 2365 StreamRequestWaiter waiter; | 2361 StreamRequestWaiter waiter; |
| 2366 std::unique_ptr<HttpStreamRequest> request( | 2362 std::unique_ptr<HttpStreamRequest> request( |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2409 RequestBidirectionalStreamImplQuicNotEnabled) { | 2405 RequestBidirectionalStreamImplQuicNotEnabled) { |
| 2410 // Make the http job fail. | 2406 // Make the http job fail. |
| 2411 auto http_job_data = base::MakeUnique<StaticSocketDataProvider>(); | 2407 auto http_job_data = base::MakeUnique<StaticSocketDataProvider>(); |
| 2412 MockConnect failed_connect(ASYNC, ERR_CONNECTION_REFUSED); | 2408 MockConnect failed_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| 2413 http_job_data->set_connect_data(failed_connect); | 2409 http_job_data->set_connect_data(failed_connect); |
| 2414 socket_factory().AddSocketDataProvider(http_job_data.get()); | 2410 socket_factory().AddSocketDataProvider(http_job_data.get()); |
| 2415 SSLSocketDataProvider ssl_data(ASYNC, OK); | 2411 SSLSocketDataProvider ssl_data(ASYNC, OK); |
| 2416 socket_factory().AddSSLSocketDataProvider(&ssl_data); | 2412 socket_factory().AddSSLSocketDataProvider(&ssl_data); |
| 2417 | 2413 |
| 2418 // Set up QUIC as alternative_service. | 2414 // Set up QUIC as alternative_service. |
| 2419 AddQuicAlternativeService(); | |
| 2420 DisableQuicBidirectionalStream(); | 2415 DisableQuicBidirectionalStream(); |
| 2421 Initialize(); | 2416 Initialize(); |
| 2417 AddQuicAlternativeService(); |
| 2422 | 2418 |
| 2423 // Now request a stream. | 2419 // Now request a stream. |
| 2424 SSLConfig ssl_config; | 2420 SSLConfig ssl_config; |
| 2425 HttpRequestInfo request_info; | 2421 HttpRequestInfo request_info; |
| 2426 request_info.method = "GET"; | 2422 request_info.method = "GET"; |
| 2427 request_info.url = default_url_; | 2423 request_info.url = default_url_; |
| 2428 request_info.load_flags = 0; | 2424 request_info.load_flags = 0; |
| 2429 | 2425 |
| 2430 StreamRequestWaiter waiter; | 2426 StreamRequestWaiter waiter; |
| 2431 std::unique_ptr<HttpStreamRequest> request( | 2427 std::unique_ptr<HttpStreamRequest> request( |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2471 | 2467 |
| 2472 // Make the http job fail. | 2468 // Make the http job fail. |
| 2473 auto http_job_data = base::MakeUnique<StaticSocketDataProvider>(); | 2469 auto http_job_data = base::MakeUnique<StaticSocketDataProvider>(); |
| 2474 MockConnect failed_connect(ASYNC, ERR_CONNECTION_REFUSED); | 2470 MockConnect failed_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| 2475 http_job_data->set_connect_data(failed_connect); | 2471 http_job_data->set_connect_data(failed_connect); |
| 2476 socket_factory().AddSocketDataProvider(http_job_data.get()); | 2472 socket_factory().AddSocketDataProvider(http_job_data.get()); |
| 2477 SSLSocketDataProvider ssl_data(ASYNC, OK); | 2473 SSLSocketDataProvider ssl_data(ASYNC, OK); |
| 2478 socket_factory().AddSSLSocketDataProvider(&ssl_data); | 2474 socket_factory().AddSSLSocketDataProvider(&ssl_data); |
| 2479 | 2475 |
| 2480 // Set up QUIC as alternative_service. | 2476 // Set up QUIC as alternative_service. |
| 2477 Initialize(); |
| 2481 AddQuicAlternativeService(); | 2478 AddQuicAlternativeService(); |
| 2482 Initialize(); | |
| 2483 | 2479 |
| 2484 // Now request a stream. | 2480 // Now request a stream. |
| 2485 SSLConfig ssl_config; | 2481 SSLConfig ssl_config; |
| 2486 HttpRequestInfo request_info; | 2482 HttpRequestInfo request_info; |
| 2487 request_info.method = "GET"; | 2483 request_info.method = "GET"; |
| 2488 request_info.url = default_url_; | 2484 request_info.url = default_url_; |
| 2489 request_info.load_flags = 0; | 2485 request_info.load_flags = 0; |
| 2490 | 2486 |
| 2491 StreamRequestWaiter waiter; | 2487 StreamRequestWaiter waiter; |
| 2492 std::unique_ptr<HttpStreamRequest> request( | 2488 std::unique_ptr<HttpStreamRequest> request( |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2574 HttpNetworkSession::NORMAL_SOCKET_POOL))); | 2570 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
| 2575 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetTransportSocketPool( | 2571 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetTransportSocketPool( |
| 2576 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 2572 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 2577 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( | 2573 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 2578 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 2574 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 2579 } | 2575 } |
| 2580 | 2576 |
| 2581 } // namespace | 2577 } // namespace |
| 2582 | 2578 |
| 2583 } // namespace net | 2579 } // namespace net |
| OLD | NEW |