OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
6 | 6 |
7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
8 #include <stdarg.h> | 8 #include <stdarg.h> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 27 matching lines...) Expand all Loading... |
38 #include "net/http/http_network_session.h" | 38 #include "net/http/http_network_session.h" |
39 #include "net/http/http_network_session_peer.h" | 39 #include "net/http/http_network_session_peer.h" |
40 #include "net/http/http_server_properties_impl.h" | 40 #include "net/http/http_server_properties_impl.h" |
41 #include "net/http/http_stream.h" | 41 #include "net/http/http_stream.h" |
42 #include "net/http/http_stream_factory.h" | 42 #include "net/http/http_stream_factory.h" |
43 #include "net/http/http_transaction_unittest.h" | 43 #include "net/http/http_transaction_unittest.h" |
44 #include "net/proxy/proxy_config_service_fixed.h" | 44 #include "net/proxy/proxy_config_service_fixed.h" |
45 #include "net/proxy/proxy_resolver.h" | 45 #include "net/proxy/proxy_resolver.h" |
46 #include "net/proxy/proxy_service.h" | 46 #include "net/proxy/proxy_service.h" |
47 #include "net/socket/client_socket_factory.h" | 47 #include "net/socket/client_socket_factory.h" |
| 48 #include "net/socket/mock_client_socket_pool_manager.h" |
48 #include "net/socket/socket_test_util.h" | 49 #include "net/socket/socket_test_util.h" |
49 #include "net/socket/ssl_client_socket.h" | 50 #include "net/socket/ssl_client_socket.h" |
50 #include "net/spdy/spdy_framer.h" | 51 #include "net/spdy/spdy_framer.h" |
51 #include "net/spdy/spdy_session.h" | 52 #include "net/spdy/spdy_session.h" |
52 #include "net/spdy/spdy_session_pool.h" | 53 #include "net/spdy/spdy_session_pool.h" |
53 #include "net/spdy/spdy_test_util.h" | 54 #include "net/spdy/spdy_test_util.h" |
54 #include "testing/gtest/include/gtest/gtest.h" | 55 #include "testing/gtest/include/gtest/gtest.h" |
55 #include "testing/platform_test.h" | 56 #include "testing/platform_test.h" |
56 | 57 |
57 //----------------------------------------------------------------------------- | 58 //----------------------------------------------------------------------------- |
(...skipping 3241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3299 | 3300 |
3300 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3301 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3301 EXPECT_TRUE(response == NULL); | 3302 EXPECT_TRUE(response == NULL); |
3302 | 3303 |
3303 // Empty the current queue. This is necessary because idle sockets are | 3304 // Empty the current queue. This is necessary because idle sockets are |
3304 // added to the connection pool asynchronously with a PostTask. | 3305 // added to the connection pool asynchronously with a PostTask. |
3305 MessageLoop::current()->RunAllPending(); | 3306 MessageLoop::current()->RunAllPending(); |
3306 | 3307 |
3307 // We now check to make sure the TCPClientSocket was not added back to | 3308 // We now check to make sure the TCPClientSocket was not added back to |
3308 // the pool. | 3309 // the pool. |
3309 EXPECT_EQ(0, session->transport_socket_pool()->IdleSocketCount()); | 3310 EXPECT_EQ(0, session->GetTransportSocketPool()->IdleSocketCount()); |
3310 trans.reset(); | 3311 trans.reset(); |
3311 MessageLoop::current()->RunAllPending(); | 3312 MessageLoop::current()->RunAllPending(); |
3312 // Make sure that the socket didn't get recycled after calling the destructor. | 3313 // Make sure that the socket didn't get recycled after calling the destructor. |
3313 EXPECT_EQ(0, session->transport_socket_pool()->IdleSocketCount()); | 3314 EXPECT_EQ(0, session->GetTransportSocketPool()->IdleSocketCount()); |
3314 } | 3315 } |
3315 | 3316 |
3316 // Make sure that we recycle a socket after reading all of the response body. | 3317 // Make sure that we recycle a socket after reading all of the response body. |
3317 TEST_F(HttpNetworkTransactionTest, RecycleSocket) { | 3318 TEST_F(HttpNetworkTransactionTest, RecycleSocket) { |
3318 HttpRequestInfo request; | 3319 HttpRequestInfo request; |
3319 request.method = "GET"; | 3320 request.method = "GET"; |
3320 request.url = GURL("http://www.google.com/"); | 3321 request.url = GURL("http://www.google.com/"); |
3321 request.load_flags = 0; | 3322 request.load_flags = 0; |
3322 | 3323 |
3323 SessionDependencies session_deps; | 3324 SessionDependencies session_deps; |
(...skipping 22 matching lines...) Expand all Loading... |
3346 rv = callback.WaitForResult(); | 3347 rv = callback.WaitForResult(); |
3347 EXPECT_EQ(OK, rv); | 3348 EXPECT_EQ(OK, rv); |
3348 | 3349 |
3349 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3350 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3350 ASSERT_TRUE(response != NULL); | 3351 ASSERT_TRUE(response != NULL); |
3351 | 3352 |
3352 EXPECT_TRUE(response->headers != NULL); | 3353 EXPECT_TRUE(response->headers != NULL); |
3353 std::string status_line = response->headers->GetStatusLine(); | 3354 std::string status_line = response->headers->GetStatusLine(); |
3354 EXPECT_EQ("HTTP/1.1 200 OK", status_line); | 3355 EXPECT_EQ("HTTP/1.1 200 OK", status_line); |
3355 | 3356 |
3356 EXPECT_EQ(0, session->transport_socket_pool()->IdleSocketCount()); | 3357 EXPECT_EQ(0, session->GetTransportSocketPool()->IdleSocketCount()); |
3357 | 3358 |
3358 std::string response_data; | 3359 std::string response_data; |
3359 rv = ReadTransaction(trans.get(), &response_data); | 3360 rv = ReadTransaction(trans.get(), &response_data); |
3360 EXPECT_EQ(OK, rv); | 3361 EXPECT_EQ(OK, rv); |
3361 EXPECT_EQ("hello world", response_data); | 3362 EXPECT_EQ("hello world", response_data); |
3362 | 3363 |
3363 // Empty the current queue. This is necessary because idle sockets are | 3364 // Empty the current queue. This is necessary because idle sockets are |
3364 // added to the connection pool asynchronously with a PostTask. | 3365 // added to the connection pool asynchronously with a PostTask. |
3365 MessageLoop::current()->RunAllPending(); | 3366 MessageLoop::current()->RunAllPending(); |
3366 | 3367 |
3367 // We now check to make sure the socket was added back to the pool. | 3368 // We now check to make sure the socket was added back to the pool. |
3368 EXPECT_EQ(1, session->transport_socket_pool()->IdleSocketCount()); | 3369 EXPECT_EQ(1, session->GetTransportSocketPool()->IdleSocketCount()); |
3369 } | 3370 } |
3370 | 3371 |
3371 // Make sure that we recycle a SSL socket after reading all of the response | 3372 // Make sure that we recycle a SSL socket after reading all of the response |
3372 // body. | 3373 // body. |
3373 TEST_F(HttpNetworkTransactionTest, RecycleSSLSocket) { | 3374 TEST_F(HttpNetworkTransactionTest, RecycleSSLSocket) { |
3374 SessionDependencies session_deps; | 3375 SessionDependencies session_deps; |
3375 HttpRequestInfo request; | 3376 HttpRequestInfo request; |
3376 request.method = "GET"; | 3377 request.method = "GET"; |
3377 request.url = GURL("https://www.google.com/"); | 3378 request.url = GURL("https://www.google.com/"); |
3378 request.load_flags = 0; | 3379 request.load_flags = 0; |
(...skipping 26 matching lines...) Expand all Loading... |
3405 int rv = trans->Start(&request, &callback, BoundNetLog()); | 3406 int rv = trans->Start(&request, &callback, BoundNetLog()); |
3406 | 3407 |
3407 EXPECT_EQ(ERR_IO_PENDING, rv); | 3408 EXPECT_EQ(ERR_IO_PENDING, rv); |
3408 EXPECT_EQ(OK, callback.WaitForResult()); | 3409 EXPECT_EQ(OK, callback.WaitForResult()); |
3409 | 3410 |
3410 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3411 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3411 ASSERT_TRUE(response != NULL); | 3412 ASSERT_TRUE(response != NULL); |
3412 ASSERT_TRUE(response->headers != NULL); | 3413 ASSERT_TRUE(response->headers != NULL); |
3413 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 3414 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
3414 | 3415 |
3415 EXPECT_EQ(0, session->transport_socket_pool()->IdleSocketCount()); | 3416 EXPECT_EQ(0, session->GetTransportSocketPool()->IdleSocketCount()); |
3416 | 3417 |
3417 std::string response_data; | 3418 std::string response_data; |
3418 rv = ReadTransaction(trans.get(), &response_data); | 3419 rv = ReadTransaction(trans.get(), &response_data); |
3419 EXPECT_EQ(OK, rv); | 3420 EXPECT_EQ(OK, rv); |
3420 EXPECT_EQ("hello world", response_data); | 3421 EXPECT_EQ("hello world", response_data); |
3421 | 3422 |
3422 // Empty the current queue. This is necessary because idle sockets are | 3423 // Empty the current queue. This is necessary because idle sockets are |
3423 // added to the connection pool asynchronously with a PostTask. | 3424 // added to the connection pool asynchronously with a PostTask. |
3424 MessageLoop::current()->RunAllPending(); | 3425 MessageLoop::current()->RunAllPending(); |
3425 | 3426 |
3426 // We now check to make sure the socket was added back to the pool. | 3427 // We now check to make sure the socket was added back to the pool. |
3427 EXPECT_EQ(1, session->ssl_socket_pool()->IdleSocketCount()); | 3428 EXPECT_EQ(1, session->GetSSLSocketPool()->IdleSocketCount()); |
3428 } | 3429 } |
3429 | 3430 |
3430 // Grab a SSL socket, use it, and put it back into the pool. Then, reuse it | 3431 // Grab a SSL socket, use it, and put it back into the pool. Then, reuse it |
3431 // from the pool and make sure that we recover okay. | 3432 // from the pool and make sure that we recover okay. |
3432 TEST_F(HttpNetworkTransactionTest, RecycleDeadSSLSocket) { | 3433 TEST_F(HttpNetworkTransactionTest, RecycleDeadSSLSocket) { |
3433 SessionDependencies session_deps; | 3434 SessionDependencies session_deps; |
3434 HttpRequestInfo request; | 3435 HttpRequestInfo request; |
3435 request.method = "GET"; | 3436 request.method = "GET"; |
3436 request.url = GURL("https://www.google.com/"); | 3437 request.url = GURL("https://www.google.com/"); |
3437 request.load_flags = 0; | 3438 request.load_flags = 0; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3473 int rv = trans->Start(&request, &callback, BoundNetLog()); | 3474 int rv = trans->Start(&request, &callback, BoundNetLog()); |
3474 | 3475 |
3475 EXPECT_EQ(ERR_IO_PENDING, rv); | 3476 EXPECT_EQ(ERR_IO_PENDING, rv); |
3476 EXPECT_EQ(OK, callback.WaitForResult()); | 3477 EXPECT_EQ(OK, callback.WaitForResult()); |
3477 | 3478 |
3478 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3479 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3479 ASSERT_TRUE(response != NULL); | 3480 ASSERT_TRUE(response != NULL); |
3480 ASSERT_TRUE(response->headers != NULL); | 3481 ASSERT_TRUE(response->headers != NULL); |
3481 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 3482 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
3482 | 3483 |
3483 EXPECT_EQ(0, session->transport_socket_pool()->IdleSocketCount()); | 3484 EXPECT_EQ(0, session->GetTransportSocketPool()->IdleSocketCount()); |
3484 | 3485 |
3485 std::string response_data; | 3486 std::string response_data; |
3486 rv = ReadTransaction(trans.get(), &response_data); | 3487 rv = ReadTransaction(trans.get(), &response_data); |
3487 EXPECT_EQ(OK, rv); | 3488 EXPECT_EQ(OK, rv); |
3488 EXPECT_EQ("hello world", response_data); | 3489 EXPECT_EQ("hello world", response_data); |
3489 | 3490 |
3490 // Empty the current queue. This is necessary because idle sockets are | 3491 // Empty the current queue. This is necessary because idle sockets are |
3491 // added to the connection pool asynchronously with a PostTask. | 3492 // added to the connection pool asynchronously with a PostTask. |
3492 MessageLoop::current()->RunAllPending(); | 3493 MessageLoop::current()->RunAllPending(); |
3493 | 3494 |
3494 // We now check to make sure the socket was added back to the pool. | 3495 // We now check to make sure the socket was added back to the pool. |
3495 EXPECT_EQ(1, session->ssl_socket_pool()->IdleSocketCount()); | 3496 EXPECT_EQ(1, session->GetSSLSocketPool()->IdleSocketCount()); |
3496 | 3497 |
3497 // Now start the second transaction, which should reuse the previous socket. | 3498 // Now start the second transaction, which should reuse the previous socket. |
3498 | 3499 |
3499 trans.reset(new HttpNetworkTransaction(session)); | 3500 trans.reset(new HttpNetworkTransaction(session)); |
3500 | 3501 |
3501 rv = trans->Start(&request, &callback, BoundNetLog()); | 3502 rv = trans->Start(&request, &callback, BoundNetLog()); |
3502 | 3503 |
3503 EXPECT_EQ(ERR_IO_PENDING, rv); | 3504 EXPECT_EQ(ERR_IO_PENDING, rv); |
3504 EXPECT_EQ(OK, callback.WaitForResult()); | 3505 EXPECT_EQ(OK, callback.WaitForResult()); |
3505 | 3506 |
3506 response = trans->GetResponseInfo(); | 3507 response = trans->GetResponseInfo(); |
3507 ASSERT_TRUE(response != NULL); | 3508 ASSERT_TRUE(response != NULL); |
3508 ASSERT_TRUE(response->headers != NULL); | 3509 ASSERT_TRUE(response->headers != NULL); |
3509 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 3510 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
3510 | 3511 |
3511 EXPECT_EQ(0, session->transport_socket_pool()->IdleSocketCount()); | 3512 EXPECT_EQ(0, session->GetTransportSocketPool()->IdleSocketCount()); |
3512 | 3513 |
3513 rv = ReadTransaction(trans.get(), &response_data); | 3514 rv = ReadTransaction(trans.get(), &response_data); |
3514 EXPECT_EQ(OK, rv); | 3515 EXPECT_EQ(OK, rv); |
3515 EXPECT_EQ("hello world", response_data); | 3516 EXPECT_EQ("hello world", response_data); |
3516 | 3517 |
3517 // Empty the current queue. This is necessary because idle sockets are | 3518 // Empty the current queue. This is necessary because idle sockets are |
3518 // added to the connection pool asynchronously with a PostTask. | 3519 // added to the connection pool asynchronously with a PostTask. |
3519 MessageLoop::current()->RunAllPending(); | 3520 MessageLoop::current()->RunAllPending(); |
3520 | 3521 |
3521 // We now check to make sure the socket was added back to the pool. | 3522 // We now check to make sure the socket was added back to the pool. |
3522 EXPECT_EQ(1, session->ssl_socket_pool()->IdleSocketCount()); | 3523 EXPECT_EQ(1, session->GetSSLSocketPool()->IdleSocketCount()); |
3523 } | 3524 } |
3524 | 3525 |
3525 // Make sure that we recycle a socket after a zero-length response. | 3526 // Make sure that we recycle a socket after a zero-length response. |
3526 // http://crbug.com/9880 | 3527 // http://crbug.com/9880 |
3527 TEST_F(HttpNetworkTransactionTest, RecycleSocketAfterZeroContentLength) { | 3528 TEST_F(HttpNetworkTransactionTest, RecycleSocketAfterZeroContentLength) { |
3528 HttpRequestInfo request; | 3529 HttpRequestInfo request; |
3529 request.method = "GET"; | 3530 request.method = "GET"; |
3530 request.url = GURL("http://www.google.com/csi?v=3&s=web&action=&" | 3531 request.url = GURL("http://www.google.com/csi?v=3&s=web&action=&" |
3531 "tran=undefined&ei=mAXcSeegAo-SMurloeUN&" | 3532 "tran=undefined&ei=mAXcSeegAo-SMurloeUN&" |
3532 "e=17259,18167,19592,19773,19981,20133,20173,20233&" | 3533 "e=17259,18167,19592,19773,19981,20133,20173,20233&" |
(...skipping 24 matching lines...) Expand all Loading... |
3557 rv = callback.WaitForResult(); | 3558 rv = callback.WaitForResult(); |
3558 EXPECT_EQ(OK, rv); | 3559 EXPECT_EQ(OK, rv); |
3559 | 3560 |
3560 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3561 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3561 ASSERT_TRUE(response != NULL); | 3562 ASSERT_TRUE(response != NULL); |
3562 | 3563 |
3563 EXPECT_TRUE(response->headers != NULL); | 3564 EXPECT_TRUE(response->headers != NULL); |
3564 std::string status_line = response->headers->GetStatusLine(); | 3565 std::string status_line = response->headers->GetStatusLine(); |
3565 EXPECT_EQ("HTTP/1.1 204 No Content", status_line); | 3566 EXPECT_EQ("HTTP/1.1 204 No Content", status_line); |
3566 | 3567 |
3567 EXPECT_EQ(0, session->transport_socket_pool()->IdleSocketCount()); | 3568 EXPECT_EQ(0, session->GetTransportSocketPool()->IdleSocketCount()); |
3568 | 3569 |
3569 std::string response_data; | 3570 std::string response_data; |
3570 rv = ReadTransaction(trans.get(), &response_data); | 3571 rv = ReadTransaction(trans.get(), &response_data); |
3571 EXPECT_EQ(OK, rv); | 3572 EXPECT_EQ(OK, rv); |
3572 EXPECT_EQ("", response_data); | 3573 EXPECT_EQ("", response_data); |
3573 | 3574 |
3574 // Empty the current queue. This is necessary because idle sockets are | 3575 // Empty the current queue. This is necessary because idle sockets are |
3575 // added to the connection pool asynchronously with a PostTask. | 3576 // added to the connection pool asynchronously with a PostTask. |
3576 MessageLoop::current()->RunAllPending(); | 3577 MessageLoop::current()->RunAllPending(); |
3577 | 3578 |
3578 // We now check to make sure the socket was added back to the pool. | 3579 // We now check to make sure the socket was added back to the pool. |
3579 EXPECT_EQ(1, session->transport_socket_pool()->IdleSocketCount()); | 3580 EXPECT_EQ(1, session->GetTransportSocketPool()->IdleSocketCount()); |
3580 } | 3581 } |
3581 | 3582 |
3582 TEST_F(HttpNetworkTransactionTest, ResendRequestOnWriteBodyError) { | 3583 TEST_F(HttpNetworkTransactionTest, ResendRequestOnWriteBodyError) { |
3583 HttpRequestInfo request[2]; | 3584 HttpRequestInfo request[2]; |
3584 // Transaction 1: a GET request that succeeds. The socket is recycled | 3585 // Transaction 1: a GET request that succeeds. The socket is recycled |
3585 // after use. | 3586 // after use. |
3586 request[0].method = "GET"; | 3587 request[0].method = "GET"; |
3587 request[0].url = GURL("http://www.google.com/"); | 3588 request[0].url = GURL("http://www.google.com/"); |
3588 request[0].load_flags = 0; | 3589 request[0].load_flags = 0; |
3589 // Transaction 2: a POST request. Reuses the socket kept alive from | 3590 // Transaction 2: a POST request. Reuses the socket kept alive from |
(...skipping 2029 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5619 | 5620 |
5620 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 5621 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
5621 SessionDependencies session_deps( | 5622 SessionDependencies session_deps( |
5622 ProxyService::CreateFixed(tests[i].proxy_server)); | 5623 ProxyService::CreateFixed(tests[i].proxy_server)); |
5623 scoped_refptr<HttpNetworkSession> session( | 5624 scoped_refptr<HttpNetworkSession> session( |
5624 SetupSessionForGroupNameTests(&session_deps)); | 5625 SetupSessionForGroupNameTests(&session_deps)); |
5625 | 5626 |
5626 HttpNetworkSessionPeer peer(session); | 5627 HttpNetworkSessionPeer peer(session); |
5627 CaptureGroupNameTransportSocketPool* transport_conn_pool = | 5628 CaptureGroupNameTransportSocketPool* transport_conn_pool = |
5628 new CaptureGroupNameTransportSocketPool(NULL, NULL); | 5629 new CaptureGroupNameTransportSocketPool(NULL, NULL); |
5629 peer.SetTransportSocketPool(transport_conn_pool); | |
5630 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 5630 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
5631 new CaptureGroupNameSSLSocketPool(NULL, NULL); | 5631 new CaptureGroupNameSSLSocketPool(NULL, NULL); |
5632 peer.SetSSLSocketPool(ssl_conn_pool); | 5632 MockClientSocketPoolManager* mock_pool_manager = |
| 5633 new MockClientSocketPoolManager; |
| 5634 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
| 5635 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
| 5636 peer.SetClientSocketPoolManager(mock_pool_manager); |
5633 | 5637 |
5634 EXPECT_EQ(ERR_IO_PENDING, | 5638 EXPECT_EQ(ERR_IO_PENDING, |
5635 GroupNameTransactionHelper(tests[i].url, session)); | 5639 GroupNameTransactionHelper(tests[i].url, session)); |
5636 if (tests[i].ssl) | 5640 if (tests[i].ssl) |
5637 EXPECT_EQ(tests[i].expected_group_name, | 5641 EXPECT_EQ(tests[i].expected_group_name, |
5638 ssl_conn_pool->last_group_name_received()); | 5642 ssl_conn_pool->last_group_name_received()); |
5639 else | 5643 else |
5640 EXPECT_EQ(tests[i].expected_group_name, | 5644 EXPECT_EQ(tests[i].expected_group_name, |
5641 transport_conn_pool->last_group_name_received()); | 5645 transport_conn_pool->last_group_name_received()); |
5642 } | 5646 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5675 SessionDependencies session_deps( | 5679 SessionDependencies session_deps( |
5676 ProxyService::CreateFixed(tests[i].proxy_server)); | 5680 ProxyService::CreateFixed(tests[i].proxy_server)); |
5677 scoped_refptr<HttpNetworkSession> session( | 5681 scoped_refptr<HttpNetworkSession> session( |
5678 SetupSessionForGroupNameTests(&session_deps)); | 5682 SetupSessionForGroupNameTests(&session_deps)); |
5679 | 5683 |
5680 HttpNetworkSessionPeer peer(session); | 5684 HttpNetworkSessionPeer peer(session); |
5681 | 5685 |
5682 HostPortPair proxy_host("http_proxy", 80); | 5686 HostPortPair proxy_host("http_proxy", 80); |
5683 CaptureGroupNameHttpProxySocketPool* http_proxy_pool = | 5687 CaptureGroupNameHttpProxySocketPool* http_proxy_pool = |
5684 new CaptureGroupNameHttpProxySocketPool(NULL, NULL); | 5688 new CaptureGroupNameHttpProxySocketPool(NULL, NULL); |
5685 peer.SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); | |
5686 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 5689 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
5687 new CaptureGroupNameSSLSocketPool(NULL, NULL); | 5690 new CaptureGroupNameSSLSocketPool(NULL, NULL); |
5688 peer.SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 5691 |
| 5692 MockClientSocketPoolManager* mock_pool_manager = |
| 5693 new MockClientSocketPoolManager; |
| 5694 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); |
| 5695 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
| 5696 peer.SetClientSocketPoolManager(mock_pool_manager); |
5689 | 5697 |
5690 EXPECT_EQ(ERR_IO_PENDING, | 5698 EXPECT_EQ(ERR_IO_PENDING, |
5691 GroupNameTransactionHelper(tests[i].url, session)); | 5699 GroupNameTransactionHelper(tests[i].url, session)); |
5692 if (tests[i].ssl) | 5700 if (tests[i].ssl) |
5693 EXPECT_EQ(tests[i].expected_group_name, | 5701 EXPECT_EQ(tests[i].expected_group_name, |
5694 ssl_conn_pool->last_group_name_received()); | 5702 ssl_conn_pool->last_group_name_received()); |
5695 else | 5703 else |
5696 EXPECT_EQ(tests[i].expected_group_name, | 5704 EXPECT_EQ(tests[i].expected_group_name, |
5697 http_proxy_pool->last_group_name_received()); | 5705 http_proxy_pool->last_group_name_received()); |
5698 } | 5706 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5743 SessionDependencies session_deps( | 5751 SessionDependencies session_deps( |
5744 ProxyService::CreateFixed(tests[i].proxy_server)); | 5752 ProxyService::CreateFixed(tests[i].proxy_server)); |
5745 scoped_refptr<HttpNetworkSession> session( | 5753 scoped_refptr<HttpNetworkSession> session( |
5746 SetupSessionForGroupNameTests(&session_deps)); | 5754 SetupSessionForGroupNameTests(&session_deps)); |
5747 | 5755 |
5748 HttpNetworkSessionPeer peer(session); | 5756 HttpNetworkSessionPeer peer(session); |
5749 | 5757 |
5750 HostPortPair proxy_host("socks_proxy", 1080); | 5758 HostPortPair proxy_host("socks_proxy", 1080); |
5751 CaptureGroupNameSOCKSSocketPool* socks_conn_pool = | 5759 CaptureGroupNameSOCKSSocketPool* socks_conn_pool = |
5752 new CaptureGroupNameSOCKSSocketPool(NULL, NULL); | 5760 new CaptureGroupNameSOCKSSocketPool(NULL, NULL); |
5753 peer.SetSocketPoolForSOCKSProxy(proxy_host, socks_conn_pool); | |
5754 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 5761 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
5755 new CaptureGroupNameSSLSocketPool(NULL, NULL); | 5762 new CaptureGroupNameSSLSocketPool(NULL, NULL); |
5756 peer.SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 5763 |
| 5764 MockClientSocketPoolManager* mock_pool_manager = |
| 5765 new MockClientSocketPoolManager; |
| 5766 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_conn_pool); |
| 5767 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
| 5768 peer.SetClientSocketPoolManager(mock_pool_manager); |
5757 | 5769 |
5758 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 5770 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
5759 | 5771 |
5760 EXPECT_EQ(ERR_IO_PENDING, | 5772 EXPECT_EQ(ERR_IO_PENDING, |
5761 GroupNameTransactionHelper(tests[i].url, session)); | 5773 GroupNameTransactionHelper(tests[i].url, session)); |
5762 if (tests[i].ssl) | 5774 if (tests[i].ssl) |
5763 EXPECT_EQ(tests[i].expected_group_name, | 5775 EXPECT_EQ(tests[i].expected_group_name, |
5764 ssl_conn_pool->last_group_name_received()); | 5776 ssl_conn_pool->last_group_name_received()); |
5765 else | 5777 else |
5766 EXPECT_EQ(tests[i].expected_group_name, | 5778 EXPECT_EQ(tests[i].expected_group_name, |
(...skipping 1495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7262 session->spdy_session_pool()->Get(pair, BoundNetLog()); | 7274 session->spdy_session_pool()->Get(pair, BoundNetLog()); |
7263 scoped_refptr<TransportSocketParams> transport_params( | 7275 scoped_refptr<TransportSocketParams> transport_params( |
7264 new TransportSocketParams(host_port_pair, MEDIUM, false, false)); | 7276 new TransportSocketParams(host_port_pair, MEDIUM, false, false)); |
7265 | 7277 |
7266 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); | 7278 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); |
7267 EXPECT_EQ(ERR_IO_PENDING, | 7279 EXPECT_EQ(ERR_IO_PENDING, |
7268 connection->Init(host_port_pair.ToString(), | 7280 connection->Init(host_port_pair.ToString(), |
7269 transport_params, | 7281 transport_params, |
7270 LOWEST, | 7282 LOWEST, |
7271 &callback, | 7283 &callback, |
7272 session->transport_socket_pool(), | 7284 session->GetTransportSocketPool(), |
7273 BoundNetLog())); | 7285 BoundNetLog())); |
7274 EXPECT_EQ(OK, callback.WaitForResult()); | 7286 EXPECT_EQ(OK, callback.WaitForResult()); |
7275 | 7287 |
7276 SSLConfig ssl_config; | 7288 SSLConfig ssl_config; |
7277 session->ssl_config_service()->GetSSLConfig(&ssl_config); | 7289 session->ssl_config_service()->GetSSLConfig(&ssl_config); |
7278 scoped_ptr<ClientSocketHandle> ssl_connection(new ClientSocketHandle); | 7290 scoped_ptr<ClientSocketHandle> ssl_connection(new ClientSocketHandle); |
7279 SSLClientSocketContext context; | 7291 SSLClientSocketContext context; |
7280 context.cert_verifier = session_deps.cert_verifier.get(); | 7292 context.cert_verifier = session_deps.cert_verifier.get(); |
7281 ssl_connection->set_socket(session_deps.socket_factory.CreateSSLClientSocket( | 7293 ssl_connection->set_socket(session_deps.socket_factory.CreateSSLClientSocket( |
7282 connection.release(), HostPortPair("" , 443), ssl_config, | 7294 connection.release(), HostPortPair("" , 443), ssl_config, |
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7754 // each round of multi-round authentication. | 7766 // each round of multi-round authentication. |
7755 HttpNetworkSessionPeer session_peer(session); | 7767 HttpNetworkSessionPeer session_peer(session); |
7756 ClientSocketPoolHistograms transport_pool_histograms("SmallTCP"); | 7768 ClientSocketPoolHistograms transport_pool_histograms("SmallTCP"); |
7757 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( | 7769 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( |
7758 50, // Max sockets for pool | 7770 50, // Max sockets for pool |
7759 1, // Max sockets per group | 7771 1, // Max sockets per group |
7760 &transport_pool_histograms, | 7772 &transport_pool_histograms, |
7761 session_deps.host_resolver.get(), | 7773 session_deps.host_resolver.get(), |
7762 &session_deps.socket_factory, | 7774 &session_deps.socket_factory, |
7763 session_deps.net_log); | 7775 session_deps.net_log); |
7764 session_peer.SetTransportSocketPool(transport_pool); | 7776 MockClientSocketPoolManager* mock_pool_manager = |
| 7777 new MockClientSocketPoolManager; |
| 7778 mock_pool_manager->SetTransportSocketPool(transport_pool); |
| 7779 session_peer.SetClientSocketPoolManager(mock_pool_manager); |
7765 | 7780 |
7766 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 7781 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
7767 TestOldCompletionCallback callback; | 7782 TestOldCompletionCallback callback; |
7768 | 7783 |
7769 const MockWrite kGet( | 7784 const MockWrite kGet( |
7770 "GET / HTTP/1.1\r\n" | 7785 "GET / HTTP/1.1\r\n" |
7771 "Host: www.example.com\r\n" | 7786 "Host: www.example.com\r\n" |
7772 "Connection: keep-alive\r\n\r\n"); | 7787 "Connection: keep-alive\r\n\r\n"); |
7773 const MockWrite kGetAuth( | 7788 const MockWrite kGetAuth( |
7774 "GET / HTTP/1.1\r\n" | 7789 "GET / HTTP/1.1\r\n" |
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8517 scoped_refptr<SpdySession> spdy_session = | 8532 scoped_refptr<SpdySession> spdy_session = |
8518 session->spdy_session_pool()->Get(pair, BoundNetLog()); | 8533 session->spdy_session_pool()->Get(pair, BoundNetLog()); |
8519 scoped_refptr<TransportSocketParams> transport_params( | 8534 scoped_refptr<TransportSocketParams> transport_params( |
8520 new TransportSocketParams(host_port_pair, MEDIUM, false, false)); | 8535 new TransportSocketParams(host_port_pair, MEDIUM, false, false)); |
8521 TestOldCompletionCallback callback; | 8536 TestOldCompletionCallback callback; |
8522 | 8537 |
8523 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); | 8538 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); |
8524 EXPECT_EQ(ERR_IO_PENDING, | 8539 EXPECT_EQ(ERR_IO_PENDING, |
8525 connection->Init(host_port_pair.ToString(), transport_params, | 8540 connection->Init(host_port_pair.ToString(), transport_params, |
8526 LOWEST, &callback, | 8541 LOWEST, &callback, |
8527 session->transport_socket_pool(), BoundNetLog())); | 8542 session->GetTransportSocketPool(), BoundNetLog())); |
8528 EXPECT_EQ(OK, callback.WaitForResult()); | 8543 EXPECT_EQ(OK, callback.WaitForResult()); |
8529 spdy_session->InitializeWithSocket(connection.release(), false, OK); | 8544 spdy_session->InitializeWithSocket(connection.release(), false, OK); |
8530 | 8545 |
8531 HttpRequestInfo request; | 8546 HttpRequestInfo request; |
8532 request.method = "GET"; | 8547 request.method = "GET"; |
8533 request.url = GURL("https://www.google.com/"); | 8548 request.url = GURL("https://www.google.com/"); |
8534 request.load_flags = 0; | 8549 request.load_flags = 0; |
8535 | 8550 |
8536 // This is the important line that marks this as a preconnect. | 8551 // This is the important line that marks this as a preconnect. |
8537 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; | 8552 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; |
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9222 StaticSocketDataProvider* data[] = { &data1, &data2 }; | 9237 StaticSocketDataProvider* data[] = { &data1, &data2 }; |
9223 | 9238 |
9224 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); | 9239 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
9225 | 9240 |
9226 EXPECT_EQ(OK, out.rv); | 9241 EXPECT_EQ(OK, out.rv); |
9227 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 9242 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
9228 EXPECT_EQ("hello world", out.response_data); | 9243 EXPECT_EQ("hello world", out.response_data); |
9229 } | 9244 } |
9230 | 9245 |
9231 } // namespace net | 9246 } // namespace net |
OLD | NEW |