| 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 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "net/base/net_log.h" | 10 #include "net/base/net_log.h" |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory; | 145 scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory; |
| 146 HttpServerPropertiesImpl http_server_properties; | 146 HttpServerPropertiesImpl http_server_properties; |
| 147 NetLog* net_log; | 147 NetLog* net_log; |
| 148 }; | 148 }; |
| 149 | 149 |
| 150 HttpNetworkSession* CreateSession(SessionDependencies* session_deps) { | 150 HttpNetworkSession* CreateSession(SessionDependencies* session_deps) { |
| 151 HttpNetworkSession::Params params; | 151 HttpNetworkSession::Params params; |
| 152 params.host_resolver = session_deps->host_resolver.get(); | 152 params.host_resolver = session_deps->host_resolver.get(); |
| 153 params.cert_verifier = session_deps->cert_verifier.get(); | 153 params.cert_verifier = session_deps->cert_verifier.get(); |
| 154 params.proxy_service = session_deps->proxy_service.get(); | 154 params.proxy_service = session_deps->proxy_service.get(); |
| 155 params.ssl_config_service = session_deps->ssl_config_service; | 155 params.ssl_config_service = session_deps->ssl_config_service.get(); |
| 156 params.client_socket_factory = &session_deps->socket_factory; | 156 params.client_socket_factory = &session_deps->socket_factory; |
| 157 params.http_auth_handler_factory = | 157 params.http_auth_handler_factory = |
| 158 session_deps->http_auth_handler_factory.get(); | 158 session_deps->http_auth_handler_factory.get(); |
| 159 params.net_log = session_deps->net_log; | 159 params.net_log = session_deps->net_log; |
| 160 params.http_server_properties = &session_deps->http_server_properties; | 160 params.http_server_properties = &session_deps->http_server_properties; |
| 161 return new HttpNetworkSession(params); | 161 return new HttpNetworkSession(params); |
| 162 } | 162 } |
| 163 | 163 |
| 164 struct TestCase { | 164 struct TestCase { |
| 165 int num_streams; | 165 int num_streams; |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 session_deps.cert_verifier.get()); | 314 session_deps.cert_verifier.get()); |
| 315 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 315 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 316 new CapturePreconnectsSSLSocketPool( | 316 new CapturePreconnectsSSLSocketPool( |
| 317 session_deps.host_resolver.get(), | 317 session_deps.host_resolver.get(), |
| 318 session_deps.cert_verifier.get()); | 318 session_deps.cert_verifier.get()); |
| 319 MockClientSocketPoolManager* mock_pool_manager = | 319 MockClientSocketPoolManager* mock_pool_manager = |
| 320 new MockClientSocketPoolManager; | 320 new MockClientSocketPoolManager; |
| 321 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 321 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
| 322 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); | 322 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
| 323 peer.SetClientSocketPoolManager(mock_pool_manager); | 323 peer.SetClientSocketPoolManager(mock_pool_manager); |
| 324 PreconnectHelper(kTests[i], session); | 324 PreconnectHelper(kTests[i], session.get()); |
| 325 if (kTests[i].ssl) | 325 if (kTests[i].ssl) |
| 326 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 326 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
| 327 else | 327 else |
| 328 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); | 328 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); |
| 329 } | 329 } |
| 330 } | 330 } |
| 331 | 331 |
| 332 TEST(HttpStreamFactoryTest, PreconnectHttpProxy) { | 332 TEST(HttpStreamFactoryTest, PreconnectHttpProxy) { |
| 333 for (size_t i = 0; i < arraysize(kTests); ++i) { | 333 for (size_t i = 0; i < arraysize(kTests); ++i) { |
| 334 SessionDependencies session_deps(ProxyService::CreateFixed("http_proxy")); | 334 SessionDependencies session_deps(ProxyService::CreateFixed("http_proxy")); |
| 335 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 335 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 336 HttpNetworkSessionPeer peer(session); | 336 HttpNetworkSessionPeer peer(session); |
| 337 HostPortPair proxy_host("http_proxy", 80); | 337 HostPortPair proxy_host("http_proxy", 80); |
| 338 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = | 338 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = |
| 339 new CapturePreconnectsHttpProxySocketPool( | 339 new CapturePreconnectsHttpProxySocketPool( |
| 340 session_deps.host_resolver.get(), | 340 session_deps.host_resolver.get(), |
| 341 session_deps.cert_verifier.get()); | 341 session_deps.cert_verifier.get()); |
| 342 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 342 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 343 new CapturePreconnectsSSLSocketPool( | 343 new CapturePreconnectsSSLSocketPool( |
| 344 session_deps.host_resolver.get(), | 344 session_deps.host_resolver.get(), |
| 345 session_deps.cert_verifier.get()); | 345 session_deps.cert_verifier.get()); |
| 346 MockClientSocketPoolManager* mock_pool_manager = | 346 MockClientSocketPoolManager* mock_pool_manager = |
| 347 new MockClientSocketPoolManager; | 347 new MockClientSocketPoolManager; |
| 348 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); | 348 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); |
| 349 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 349 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
| 350 peer.SetClientSocketPoolManager(mock_pool_manager); | 350 peer.SetClientSocketPoolManager(mock_pool_manager); |
| 351 PreconnectHelper(kTests[i], session); | 351 PreconnectHelper(kTests[i], session.get()); |
| 352 if (kTests[i].ssl) | 352 if (kTests[i].ssl) |
| 353 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 353 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
| 354 else | 354 else |
| 355 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); | 355 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); |
| 356 } | 356 } |
| 357 } | 357 } |
| 358 | 358 |
| 359 TEST(HttpStreamFactoryTest, PreconnectSocksProxy) { | 359 TEST(HttpStreamFactoryTest, PreconnectSocksProxy) { |
| 360 for (size_t i = 0; i < arraysize(kTests); ++i) { | 360 for (size_t i = 0; i < arraysize(kTests); ++i) { |
| 361 SessionDependencies session_deps( | 361 SessionDependencies session_deps( |
| 362 ProxyService::CreateFixed("socks4://socks_proxy:1080")); | 362 ProxyService::CreateFixed("socks4://socks_proxy:1080")); |
| 363 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 363 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 364 HttpNetworkSessionPeer peer(session); | 364 HttpNetworkSessionPeer peer(session); |
| 365 HostPortPair proxy_host("socks_proxy", 1080); | 365 HostPortPair proxy_host("socks_proxy", 1080); |
| 366 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = | 366 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = |
| 367 new CapturePreconnectsSOCKSSocketPool( | 367 new CapturePreconnectsSOCKSSocketPool( |
| 368 session_deps.host_resolver.get(), | 368 session_deps.host_resolver.get(), |
| 369 session_deps.cert_verifier.get()); | 369 session_deps.cert_verifier.get()); |
| 370 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 370 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 371 new CapturePreconnectsSSLSocketPool( | 371 new CapturePreconnectsSSLSocketPool( |
| 372 session_deps.host_resolver.get(), | 372 session_deps.host_resolver.get(), |
| 373 session_deps.cert_verifier.get()); | 373 session_deps.cert_verifier.get()); |
| 374 MockClientSocketPoolManager* mock_pool_manager = | 374 MockClientSocketPoolManager* mock_pool_manager = |
| 375 new MockClientSocketPoolManager; | 375 new MockClientSocketPoolManager; |
| 376 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); | 376 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); |
| 377 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 377 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
| 378 peer.SetClientSocketPoolManager(mock_pool_manager); | 378 peer.SetClientSocketPoolManager(mock_pool_manager); |
| 379 PreconnectHelper(kTests[i], session); | 379 PreconnectHelper(kTests[i], session.get()); |
| 380 if (kTests[i].ssl) | 380 if (kTests[i].ssl) |
| 381 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 381 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
| 382 else | 382 else |
| 383 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); | 383 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); |
| 384 } | 384 } |
| 385 } | 385 } |
| 386 | 386 |
| 387 TEST(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { | 387 TEST(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { |
| 388 for (size_t i = 0; i < arraysize(kTests); ++i) { | 388 for (size_t i = 0; i < arraysize(kTests); ++i) { |
| 389 SessionDependencies session_deps(ProxyService::CreateDirect()); | 389 SessionDependencies session_deps(ProxyService::CreateDirect()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 403 session_deps.cert_verifier.get()); | 403 session_deps.cert_verifier.get()); |
| 404 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 404 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 405 new CapturePreconnectsSSLSocketPool( | 405 new CapturePreconnectsSSLSocketPool( |
| 406 session_deps.host_resolver.get(), | 406 session_deps.host_resolver.get(), |
| 407 session_deps.cert_verifier.get()); | 407 session_deps.cert_verifier.get()); |
| 408 MockClientSocketPoolManager* mock_pool_manager = | 408 MockClientSocketPoolManager* mock_pool_manager = |
| 409 new MockClientSocketPoolManager; | 409 new MockClientSocketPoolManager; |
| 410 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 410 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
| 411 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); | 411 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
| 412 peer.SetClientSocketPoolManager(mock_pool_manager); | 412 peer.SetClientSocketPoolManager(mock_pool_manager); |
| 413 PreconnectHelper(kTests[i], session); | 413 PreconnectHelper(kTests[i], session.get()); |
| 414 // We shouldn't be preconnecting if we have an existing session, which is | 414 // We shouldn't be preconnecting if we have an existing session, which is |
| 415 // the case for https://www.google.com. | 415 // the case for https://www.google.com. |
| 416 if (kTests[i].ssl) | 416 if (kTests[i].ssl) |
| 417 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); | 417 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); |
| 418 else | 418 else |
| 419 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); | 419 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); |
| 420 } | 420 } |
| 421 } | 421 } |
| 422 | 422 |
| 423 // Verify that preconnects to unsafe ports are cancelled before they reach | 423 // Verify that preconnects to unsafe ports are cancelled before they reach |
| 424 // the SocketPool. | 424 // the SocketPool. |
| 425 TEST(HttpStreamFactoryTest, PreconnectUnsafePort) { | 425 TEST(HttpStreamFactoryTest, PreconnectUnsafePort) { |
| 426 ASSERT_FALSE(IsPortAllowedByDefault(7)); | 426 ASSERT_FALSE(IsPortAllowedByDefault(7)); |
| 427 ASSERT_FALSE(IsPortAllowedByOverride(7)); | 427 ASSERT_FALSE(IsPortAllowedByOverride(7)); |
| 428 | 428 |
| 429 SessionDependencies session_deps(ProxyService::CreateDirect()); | 429 SessionDependencies session_deps(ProxyService::CreateDirect()); |
| 430 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 430 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 431 HttpNetworkSessionPeer peer(session); | 431 HttpNetworkSessionPeer peer(session); |
| 432 CapturePreconnectsTransportSocketPool* transport_conn_pool = | 432 CapturePreconnectsTransportSocketPool* transport_conn_pool = |
| 433 new CapturePreconnectsTransportSocketPool( | 433 new CapturePreconnectsTransportSocketPool( |
| 434 session_deps.host_resolver.get(), | 434 session_deps.host_resolver.get(), |
| 435 session_deps.cert_verifier.get()); | 435 session_deps.cert_verifier.get()); |
| 436 MockClientSocketPoolManager* mock_pool_manager = | 436 MockClientSocketPoolManager* mock_pool_manager = |
| 437 new MockClientSocketPoolManager; | 437 new MockClientSocketPoolManager; |
| 438 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 438 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
| 439 peer.SetClientSocketPoolManager(mock_pool_manager); | 439 peer.SetClientSocketPoolManager(mock_pool_manager); |
| 440 | 440 |
| 441 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session); | 441 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session.get()); |
| 442 | 442 |
| 443 EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); | 443 EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); |
| 444 } | 444 } |
| 445 | 445 |
| 446 TEST(HttpStreamFactoryTest, JobNotifiesProxy) { | 446 TEST(HttpStreamFactoryTest, JobNotifiesProxy) { |
| 447 const char* kProxyString = "PROXY bad:99; PROXY maybe:80; DIRECT"; | 447 const char* kProxyString = "PROXY bad:99; PROXY maybe:80; DIRECT"; |
| 448 SessionDependencies session_deps( | 448 SessionDependencies session_deps( |
| 449 ProxyService::CreateFixedFromPacResult(kProxyString)); | 449 ProxyService::CreateFixedFromPacResult(kProxyString)); |
| 450 | 450 |
| 451 // First connection attempt fails | 451 // First connection attempt fails |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 606 &waiter, BoundNetLog())); | 606 &waiter, BoundNetLog())); |
| 607 | 607 |
| 608 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, request->GetLoadState()); | 608 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, request->GetLoadState()); |
| 609 | 609 |
| 610 waiter.WaitForStream(); | 610 waiter.WaitForStream(); |
| 611 } | 611 } |
| 612 | 612 |
| 613 } // namespace | 613 } // namespace |
| 614 | 614 |
| 615 } // namespace net | 615 } // namespace net |
| OLD | NEW |