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 <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "base/compiler_specific.h" | 11 #include "base/compiler_specific.h" |
| 12 #include "net/base/capturing_net_log.h" |
12 #include "net/base/net_log.h" | 13 #include "net/base/net_log.h" |
13 #include "net/base/test_completion_callback.h" | 14 #include "net/base/test_completion_callback.h" |
14 #include "net/cert/mock_cert_verifier.h" | 15 #include "net/cert/mock_cert_verifier.h" |
15 #include "net/dns/mock_host_resolver.h" | 16 #include "net/dns/mock_host_resolver.h" |
16 #include "net/http/http_auth_handler_factory.h" | 17 #include "net/http/http_auth_handler_factory.h" |
17 #include "net/http/http_network_session.h" | 18 #include "net/http/http_network_session.h" |
18 #include "net/http/http_network_session_peer.h" | 19 #include "net/http/http_network_session_peer.h" |
19 #include "net/http/http_network_transaction.h" | 20 #include "net/http/http_network_transaction.h" |
20 #include "net/http/http_request_info.h" | 21 #include "net/http/http_request_info.h" |
21 #include "net/http/http_server_properties.h" | 22 #include "net/http/http_server_properties.h" |
22 #include "net/http/http_server_properties_impl.h" | 23 #include "net/http/http_server_properties_impl.h" |
23 #include "net/http/http_stream.h" | 24 #include "net/http/http_stream.h" |
24 #include "net/http/transport_security_state.h" | 25 #include "net/http/transport_security_state.h" |
25 #include "net/proxy/proxy_info.h" | 26 #include "net/proxy/proxy_info.h" |
26 #include "net/proxy/proxy_service.h" | 27 #include "net/proxy/proxy_service.h" |
| 28 #include "net/quic/test_tools/mock_clock.h" |
| 29 #include "net/quic/test_tools/mock_crypto_client_stream_factory.h" |
| 30 #include "net/quic/test_tools/mock_random.h" |
27 #include "net/socket/client_socket_handle.h" | 31 #include "net/socket/client_socket_handle.h" |
28 #include "net/socket/mock_client_socket_pool_manager.h" | 32 #include "net/socket/mock_client_socket_pool_manager.h" |
29 #include "net/socket/next_proto.h" | 33 #include "net/socket/next_proto.h" |
30 #include "net/socket/socket_test_util.h" | 34 #include "net/socket/socket_test_util.h" |
31 #include "net/spdy/spdy_session.h" | 35 #include "net/spdy/spdy_session.h" |
32 #include "net/spdy/spdy_session_pool.h" | 36 #include "net/spdy/spdy_session_pool.h" |
33 #include "net/spdy/spdy_test_util_common.h" | 37 #include "net/spdy/spdy_test_util_common.h" |
34 #include "net/ssl/ssl_config_service.h" | 38 #include "net/ssl/ssl_config_service.h" |
35 #include "net/ssl/ssl_config_service_defaults.h" | 39 #include "net/ssl/ssl_config_service_defaults.h" |
36 // This file can be included from net/http even though | 40 // This file can be included from net/http even though |
(...skipping 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1101 HostPortPair("myproxy", 8888)))); | 1105 HostPortPair("myproxy", 8888)))); |
1102 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( | 1106 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( |
1103 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, | 1107 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, |
1104 HostPortPair("myproxy", 8888)))); | 1108 HostPortPair("myproxy", 8888)))); |
1105 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( | 1109 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( |
1106 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, | 1110 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, |
1107 HostPortPair("myproxy", 8888)))); | 1111 HostPortPair("myproxy", 8888)))); |
1108 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); | 1112 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); |
1109 } | 1113 } |
1110 | 1114 |
| 1115 TEST_P(HttpStreamFactoryTest, RequestQuicHTTPStream) { |
| 1116 bool UnencryptedHTTP11Flag[2] = {false, true}; |
| 1117 for (auto loadFlag : UnencryptedHTTP11Flag) { |
| 1118 scoped_ptr<ProxyService> proxy_service; |
| 1119 proxy_service.reset(ProxyService::CreateFixedFromPacResult("DIRECT")); |
| 1120 |
| 1121 HttpNetworkSession::Params params; |
| 1122 MockClock* clock_ = new MockClock(); |
| 1123 MockRandom random_generator_; |
| 1124 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
| 1125 MockCertVerifier cert_verifier_; |
| 1126 |
| 1127 params.enable_quic = true; |
| 1128 params.enable_quic_for_proxies = true; |
| 1129 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service( |
| 1130 new SSLConfigServiceDefaults); |
| 1131 HttpServerPropertiesImpl http_server_properties; |
| 1132 MockClientSocketFactory socket_factory; |
| 1133 params.client_socket_factory = &socket_factory; |
| 1134 MockHostResolver host_resolver; |
| 1135 params.host_resolver = &host_resolver; |
| 1136 TransportSecurityState transport_security_state; |
| 1137 params.transport_security_state = &transport_security_state; |
| 1138 params.proxy_service = proxy_service.get(); |
| 1139 params.ssl_config_service = ssl_config_service.get(); |
| 1140 params.http_server_properties = http_server_properties.GetWeakPtr(); |
| 1141 params.use_alternate_protocols = true; |
| 1142 params.next_protos = NextProtosWithSpdyAndQuic(true, true); |
| 1143 params.quic_clock = clock_; |
| 1144 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
| 1145 params.quic_random = &random_generator_; |
| 1146 params.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; |
| 1147 params.cert_verifier = &cert_verifier_; |
| 1148 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; |
| 1149 params.http_auth_handler_factory = auth_handler_factory_.get(); |
| 1150 params.quic_supported_versions.push_back(QUIC_VERSION_24); |
| 1151 |
| 1152 params.origin_to_force_quic_on = |
| 1153 HostPortPair::FromString("www.google.com:80"); |
| 1154 |
| 1155 scoped_refptr<HttpNetworkSession> session; |
| 1156 session = new HttpNetworkSession(params); |
| 1157 session->quic_stream_factory()->set_require_confirmation(false); |
| 1158 |
| 1159 MockRead http_reads[] = { |
| 1160 MockRead("HTTP/1.1 200 OK\r\n"), |
| 1161 MockRead("Alternate-Protocol: 80:quic\r\n\r\n"), |
| 1162 MockRead("hello world"), |
| 1163 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 1164 MockRead(ASYNC, OK), |
| 1165 }; |
| 1166 |
| 1167 HttpRequestInfo request_info; |
| 1168 request_info.method = "GET"; |
| 1169 request_info.url = GURL("http://www.google.com"); |
| 1170 request_info.load_flags = loadFlag ? LOAD_UNENCRYPTED_HTTP11 : 0; |
| 1171 |
| 1172 SSLConfig ssl_config; |
| 1173 EXPECT_TRUE(params.enable_quic) << loadFlag; |
| 1174 |
| 1175 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
| 1176 nullptr, 0); |
| 1177 socket_factory.AddSocketDataProvider(&http_data); |
| 1178 |
| 1179 scoped_ptr<HttpNetworkTransaction> trans( |
| 1180 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1181 |
| 1182 CapturingBoundNetLog net_log_; |
| 1183 TestCompletionCallback callback; |
| 1184 int rv = trans.get()->Start(&request_info, callback.callback(), |
| 1185 net_log_.bound()); |
| 1186 EXPECT_EQ(ERR_IO_PENDING, rv) << loadFlag; |
| 1187 EXPECT_EQ(loadFlag, OK == callback.WaitForResult()) << loadFlag; |
| 1188 |
| 1189 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1190 // When LOAD_UNENCRYPTED_HTTP11 is not enabled, request fails because |
| 1191 // there is no QUIC mock socket. |
| 1192 EXPECT_EQ(loadFlag, response != nullptr) << loadFlag; |
| 1193 if (!loadFlag) { |
| 1194 continue; |
| 1195 } |
| 1196 ASSERT_TRUE(response->headers.get() != nullptr) << loadFlag; |
| 1197 EXPECT_FALSE(response->was_fetched_via_spdy) << loadFlag; |
| 1198 EXPECT_FALSE(response->was_npn_negotiated) << loadFlag; |
| 1199 |
| 1200 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP1, |
| 1201 response->connection_info) |
| 1202 << loadFlag; |
| 1203 } |
| 1204 } |
| 1205 |
1111 TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) { | 1206 TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) { |
1112 SpdySessionDependencies session_deps(GetParam(), | 1207 SpdySessionDependencies session_deps(GetParam(), |
1113 ProxyService::CreateDirect()); | 1208 ProxyService::CreateDirect()); |
1114 | 1209 |
1115 MockRead mock_read(ASYNC, OK); | 1210 MockRead mock_read(ASYNC, OK); |
1116 DeterministicSocketData socket_data(&mock_read, 1, nullptr, 0); | 1211 DeterministicSocketData socket_data(&mock_read, 1, nullptr, 0); |
1117 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 1212 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
1118 session_deps.deterministic_socket_factory->AddSocketDataProvider( | 1213 session_deps.deterministic_socket_factory->AddSocketDataProvider( |
1119 &socket_data); | 1214 &socket_data); |
1120 | 1215 |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1360 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1455 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
1361 | 1456 |
1362 // Make sure there is no orphaned job. it is already canceled. | 1457 // Make sure there is no orphaned job. it is already canceled. |
1363 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( | 1458 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( |
1364 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); | 1459 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); |
1365 } | 1460 } |
1366 | 1461 |
1367 } // namespace | 1462 } // namespace |
1368 | 1463 |
1369 } // namespace net | 1464 } // namespace net |
OLD | NEW |