OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 // Reading should give EOF right away, since there is no message body | 598 // Reading should give EOF right away, since there is no message body |
599 // (despite non-zero content-length). | 599 // (despite non-zero content-length). |
600 std::string response_data; | 600 std::string response_data; |
601 rv = ReadTransaction(trans.get(), &response_data); | 601 rv = ReadTransaction(trans.get(), &response_data); |
602 EXPECT_EQ(OK, rv); | 602 EXPECT_EQ(OK, rv); |
603 EXPECT_EQ("", response_data); | 603 EXPECT_EQ("", response_data); |
604 } | 604 } |
605 | 605 |
606 TEST_F(HttpNetworkTransactionTest, ReuseConnection) { | 606 TEST_F(HttpNetworkTransactionTest, ReuseConnection) { |
607 SessionDependencies session_deps; | 607 SessionDependencies session_deps; |
608 scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 608 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
609 | 609 |
610 MockRead data_reads[] = { | 610 MockRead data_reads[] = { |
611 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 611 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
612 MockRead("hello"), | 612 MockRead("hello"), |
613 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 613 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
614 MockRead("world"), | 614 MockRead("world"), |
615 MockRead(false, OK), | 615 MockRead(false, OK), |
616 }; | 616 }; |
617 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 617 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
618 session_deps.socket_factory.AddSocketDataProvider(&data); | 618 session_deps.socket_factory.AddSocketDataProvider(&data); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 | 787 |
788 rv = callback.WaitForResult(); | 788 rv = callback.WaitForResult(); |
789 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); | 789 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); |
790 } | 790 } |
791 | 791 |
792 // read_failure specifies a read failure that should cause the network | 792 // read_failure specifies a read failure that should cause the network |
793 // transaction to resend the request. | 793 // transaction to resend the request. |
794 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( | 794 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( |
795 const MockRead& read_failure) { | 795 const MockRead& read_failure) { |
796 SessionDependencies session_deps; | 796 SessionDependencies session_deps; |
797 scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 797 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
798 | 798 |
799 HttpRequestInfo request; | 799 HttpRequestInfo request; |
800 request.method = "GET"; | 800 request.method = "GET"; |
801 request.url = GURL("http://www.foo.com/"); | 801 request.url = GURL("http://www.foo.com/"); |
802 request.load_flags = 0; | 802 request.load_flags = 0; |
803 | 803 |
804 MockRead data1_reads[] = { | 804 MockRead data1_reads[] = { |
805 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 805 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
806 MockRead("hello"), | 806 MockRead("hello"), |
807 read_failure, // Now, we reuse the connection and fail the first read. | 807 read_failure, // Now, we reuse the connection and fail the first read. |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
904 }; | 904 }; |
905 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 905 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
906 arraysize(data_reads)); | 906 arraysize(data_reads)); |
907 EXPECT_EQ(ERR_EMPTY_RESPONSE, out.rv); | 907 EXPECT_EQ(ERR_EMPTY_RESPONSE, out.rv); |
908 } | 908 } |
909 | 909 |
910 // Test that we correctly reuse a keep-alive connection after not explicitly | 910 // Test that we correctly reuse a keep-alive connection after not explicitly |
911 // reading the body. | 911 // reading the body. |
912 TEST_F(HttpNetworkTransactionTest, KeepAliveAfterUnreadBody) { | 912 TEST_F(HttpNetworkTransactionTest, KeepAliveAfterUnreadBody) { |
913 SessionDependencies session_deps; | 913 SessionDependencies session_deps; |
914 scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 914 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
915 | 915 |
916 HttpRequestInfo request; | 916 HttpRequestInfo request; |
917 request.method = "GET"; | 917 request.method = "GET"; |
918 request.url = GURL("http://www.foo.com/"); | 918 request.url = GURL("http://www.foo.com/"); |
919 request.load_flags = 0; | 919 request.load_flags = 0; |
920 | 920 |
921 // Note that because all these reads happen in the same | 921 // Note that because all these reads happen in the same |
922 // StaticSocketDataProvider, it shows that the same socket is being reused for | 922 // StaticSocketDataProvider, it shows that the same socket is being reused for |
923 // all transactions. | 923 // all transactions. |
924 MockRead data1_reads[] = { | 924 MockRead data1_reads[] = { |
(...skipping 2318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3243 // transaction 1. The first attempts fails when writing the POST data. | 3243 // transaction 1. The first attempts fails when writing the POST data. |
3244 // This causes the transaction to retry with a new socket. The second | 3244 // This causes the transaction to retry with a new socket. The second |
3245 // attempt succeeds. | 3245 // attempt succeeds. |
3246 request[1].method = "POST"; | 3246 request[1].method = "POST"; |
3247 request[1].url = GURL("http://www.google.com/login.cgi"); | 3247 request[1].url = GURL("http://www.google.com/login.cgi"); |
3248 request[1].upload_data = new UploadData; | 3248 request[1].upload_data = new UploadData; |
3249 request[1].upload_data->AppendBytes("foo", 3); | 3249 request[1].upload_data->AppendBytes("foo", 3); |
3250 request[1].load_flags = 0; | 3250 request[1].load_flags = 0; |
3251 | 3251 |
3252 SessionDependencies session_deps; | 3252 SessionDependencies session_deps; |
3253 scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 3253 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3254 | 3254 |
3255 // The first socket is used for transaction 1 and the first attempt of | 3255 // The first socket is used for transaction 1 and the first attempt of |
3256 // transaction 2. | 3256 // transaction 2. |
3257 | 3257 |
3258 // The response of transaction 1. | 3258 // The response of transaction 1. |
3259 MockRead data_reads1[] = { | 3259 MockRead data_reads1[] = { |
3260 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\n"), | 3260 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\n"), |
3261 MockRead("hello world"), | 3261 MockRead("hello world"), |
3262 MockRead(false, OK), | 3262 MockRead(false, OK), |
3263 }; | 3263 }; |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3511 | 3511 |
3512 EXPECT_EQ(100, response->headers->GetContentLength()); | 3512 EXPECT_EQ(100, response->headers->GetContentLength()); |
3513 | 3513 |
3514 // Empty the current queue. | 3514 // Empty the current queue. |
3515 MessageLoop::current()->RunAllPending(); | 3515 MessageLoop::current()->RunAllPending(); |
3516 } | 3516 } |
3517 | 3517 |
3518 // Test that previously tried username/passwords for a realm get re-used. | 3518 // Test that previously tried username/passwords for a realm get re-used. |
3519 TEST_F(HttpNetworkTransactionTest, BasicAuthCacheAndPreauth) { | 3519 TEST_F(HttpNetworkTransactionTest, BasicAuthCacheAndPreauth) { |
3520 SessionDependencies session_deps; | 3520 SessionDependencies session_deps; |
3521 scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 3521 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3522 | 3522 |
3523 // Transaction 1: authenticate (foo, bar) on MyRealm1 | 3523 // Transaction 1: authenticate (foo, bar) on MyRealm1 |
3524 { | 3524 { |
3525 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 3525 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
3526 | 3526 |
3527 HttpRequestInfo request; | 3527 HttpRequestInfo request; |
3528 request.method = "GET"; | 3528 request.method = "GET"; |
3529 request.url = GURL("http://www.google.com/x/y/z"); | 3529 request.url = GURL("http://www.google.com/x/y/z"); |
3530 request.load_flags = 0; | 3530 request.load_flags = 0; |
3531 | 3531 |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3904 EXPECT_FALSE(response == NULL); | 3904 EXPECT_FALSE(response == NULL); |
3905 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 3905 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
3906 EXPECT_EQ(100, response->headers->GetContentLength()); | 3906 EXPECT_EQ(100, response->headers->GetContentLength()); |
3907 } | 3907 } |
3908 } | 3908 } |
3909 | 3909 |
3910 // Tests that nonce count increments when multiple auth attempts | 3910 // Tests that nonce count increments when multiple auth attempts |
3911 // are started with the same nonce. | 3911 // are started with the same nonce. |
3912 TEST_F(HttpNetworkTransactionTest, DigestPreAuthNonceCount) { | 3912 TEST_F(HttpNetworkTransactionTest, DigestPreAuthNonceCount) { |
3913 SessionDependencies session_deps; | 3913 SessionDependencies session_deps; |
3914 scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 3914 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3915 HttpAuthHandlerDigest::SetFixedCnonce(true); | 3915 HttpAuthHandlerDigest::SetFixedCnonce(true); |
3916 | 3916 |
3917 // Transaction 1: authenticate (foo, bar) on MyRealm1 | 3917 // Transaction 1: authenticate (foo, bar) on MyRealm1 |
3918 { | 3918 { |
3919 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 3919 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
3920 | 3920 |
3921 HttpRequestInfo request; | 3921 HttpRequestInfo request; |
3922 request.method = "GET"; | 3922 request.method = "GET"; |
3923 request.url = GURL("http://www.google.com/x/y/z"); | 3923 request.url = GURL("http://www.google.com/x/y/z"); |
3924 request.load_flags = 0; | 3924 request.load_flags = 0; |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4058 HttpResponseInfo* response = &trans->response_; | 4058 HttpResponseInfo* response = &trans->response_; |
4059 response->auth_challenge = new AuthChallengeInfo(); | 4059 response->auth_challenge = new AuthChallengeInfo(); |
4060 response->ssl_info.cert_status = -15; | 4060 response->ssl_info.cert_status = -15; |
4061 response->response_time = base::Time::Now(); | 4061 response->response_time = base::Time::Now(); |
4062 response->was_cached = true; // (Wouldn't ever actually be true...) | 4062 response->was_cached = true; // (Wouldn't ever actually be true...) |
4063 | 4063 |
4064 { // Setup state for response_.vary_data | 4064 { // Setup state for response_.vary_data |
4065 HttpRequestInfo request; | 4065 HttpRequestInfo request; |
4066 std::string temp("HTTP/1.1 200 OK\nVary: foo, bar\n\n"); | 4066 std::string temp("HTTP/1.1 200 OK\nVary: foo, bar\n\n"); |
4067 std::replace(temp.begin(), temp.end(), '\n', '\0'); | 4067 std::replace(temp.begin(), temp.end(), '\n', '\0'); |
4068 scoped_refptr<HttpResponseHeaders> headers = new HttpResponseHeaders(temp); | 4068 scoped_refptr<HttpResponseHeaders> headers(new HttpResponseHeaders(temp)); |
4069 request.extra_headers.SetHeader("Foo", "1"); | 4069 request.extra_headers.SetHeader("Foo", "1"); |
4070 request.extra_headers.SetHeader("bar", "23"); | 4070 request.extra_headers.SetHeader("bar", "23"); |
4071 EXPECT_TRUE(response->vary_data.Init(request, *headers)); | 4071 EXPECT_TRUE(response->vary_data.Init(request, *headers)); |
4072 } | 4072 } |
4073 | 4073 |
4074 // Cause the above state to be reset. | 4074 // Cause the above state to be reset. |
4075 trans->ResetStateForRestart(); | 4075 trans->ResetStateForRestart(); |
4076 | 4076 |
4077 // Verify that the state that needed to be reset, has been reset. | 4077 // Verify that the state that needed to be reset, has been reset. |
4078 EXPECT_TRUE(trans->read_buf_.get() == NULL); | 4078 EXPECT_TRUE(trans->read_buf_.get() == NULL); |
(...skipping 1292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5371 BypassHostCacheOnRefreshHelper(LOAD_VALIDATE_CACHE); | 5371 BypassHostCacheOnRefreshHelper(LOAD_VALIDATE_CACHE); |
5372 } | 5372 } |
5373 | 5373 |
5374 TEST_F(HttpNetworkTransactionTest, BypassHostCacheOnRefresh3) { | 5374 TEST_F(HttpNetworkTransactionTest, BypassHostCacheOnRefresh3) { |
5375 BypassHostCacheOnRefreshHelper(LOAD_DISABLE_CACHE); | 5375 BypassHostCacheOnRefreshHelper(LOAD_DISABLE_CACHE); |
5376 } | 5376 } |
5377 | 5377 |
5378 // Make sure we can handle an error when writing the request. | 5378 // Make sure we can handle an error when writing the request. |
5379 TEST_F(HttpNetworkTransactionTest, RequestWriteError) { | 5379 TEST_F(HttpNetworkTransactionTest, RequestWriteError) { |
5380 SessionDependencies session_deps; | 5380 SessionDependencies session_deps; |
5381 scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 5381 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
5382 | 5382 |
5383 HttpRequestInfo request; | 5383 HttpRequestInfo request; |
5384 request.method = "GET"; | 5384 request.method = "GET"; |
5385 request.url = GURL("http://www.foo.com/"); | 5385 request.url = GURL("http://www.foo.com/"); |
5386 request.load_flags = 0; | 5386 request.load_flags = 0; |
5387 | 5387 |
5388 MockWrite write_failure[] = { | 5388 MockWrite write_failure[] = { |
5389 MockWrite(true, ERR_CONNECTION_RESET), | 5389 MockWrite(true, ERR_CONNECTION_RESET), |
5390 }; | 5390 }; |
5391 StaticSocketDataProvider data(NULL, 0, | 5391 StaticSocketDataProvider data(NULL, 0, |
5392 write_failure, arraysize(write_failure)); | 5392 write_failure, arraysize(write_failure)); |
5393 session_deps.socket_factory.AddSocketDataProvider(&data); | 5393 session_deps.socket_factory.AddSocketDataProvider(&data); |
5394 | 5394 |
5395 TestCompletionCallback callback; | 5395 TestCompletionCallback callback; |
5396 | 5396 |
5397 scoped_ptr<HttpTransaction> trans( | 5397 scoped_ptr<HttpTransaction> trans( |
5398 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5398 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5399 | 5399 |
5400 int rv = trans->Start(&request, &callback, BoundNetLog()); | 5400 int rv = trans->Start(&request, &callback, BoundNetLog()); |
5401 EXPECT_EQ(ERR_IO_PENDING, rv); | 5401 EXPECT_EQ(ERR_IO_PENDING, rv); |
5402 | 5402 |
5403 rv = callback.WaitForResult(); | 5403 rv = callback.WaitForResult(); |
5404 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 5404 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
5405 } | 5405 } |
5406 | 5406 |
5407 // Check that a connection closed after the start of the headers finishes ok. | 5407 // Check that a connection closed after the start of the headers finishes ok. |
5408 TEST_F(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { | 5408 TEST_F(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { |
5409 SessionDependencies session_deps; | 5409 SessionDependencies session_deps; |
5410 scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 5410 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
5411 | 5411 |
5412 HttpRequestInfo request; | 5412 HttpRequestInfo request; |
5413 request.method = "GET"; | 5413 request.method = "GET"; |
5414 request.url = GURL("http://www.foo.com/"); | 5414 request.url = GURL("http://www.foo.com/"); |
5415 request.load_flags = 0; | 5415 request.load_flags = 0; |
5416 | 5416 |
5417 MockRead data_reads[] = { | 5417 MockRead data_reads[] = { |
5418 MockRead("HTTP/1."), | 5418 MockRead("HTTP/1."), |
5419 MockRead(false, OK), | 5419 MockRead(false, OK), |
5420 }; | 5420 }; |
(...skipping 21 matching lines...) Expand all Loading... |
5442 std::string response_data; | 5442 std::string response_data; |
5443 rv = ReadTransaction(trans.get(), &response_data); | 5443 rv = ReadTransaction(trans.get(), &response_data); |
5444 EXPECT_EQ(OK, rv); | 5444 EXPECT_EQ(OK, rv); |
5445 EXPECT_EQ("", response_data); | 5445 EXPECT_EQ("", response_data); |
5446 } | 5446 } |
5447 | 5447 |
5448 // Make sure that a dropped connection while draining the body for auth | 5448 // Make sure that a dropped connection while draining the body for auth |
5449 // restart does the right thing. | 5449 // restart does the right thing. |
5450 TEST_F(HttpNetworkTransactionTest, DrainResetOK) { | 5450 TEST_F(HttpNetworkTransactionTest, DrainResetOK) { |
5451 SessionDependencies session_deps; | 5451 SessionDependencies session_deps; |
5452 scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 5452 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
5453 | 5453 |
5454 HttpRequestInfo request; | 5454 HttpRequestInfo request; |
5455 request.method = "GET"; | 5455 request.method = "GET"; |
5456 request.url = GURL("http://www.google.com/"); | 5456 request.url = GURL("http://www.google.com/"); |
5457 request.load_flags = 0; | 5457 request.load_flags = 0; |
5458 | 5458 |
5459 MockWrite data_writes1[] = { | 5459 MockWrite data_writes1[] = { |
5460 MockWrite("GET / HTTP/1.1\r\n" | 5460 MockWrite("GET / HTTP/1.1\r\n" |
5461 "Host: www.google.com\r\n" | 5461 "Host: www.google.com\r\n" |
5462 "Connection: keep-alive\r\n\r\n"), | 5462 "Connection: keep-alive\r\n\r\n"), |
(...skipping 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6466 std::string response_data; | 6466 std::string response_data; |
6467 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 6467 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
6468 EXPECT_EQ("hello world", response_data); | 6468 EXPECT_EQ("hello world", response_data); |
6469 | 6469 |
6470 // Set up an initial SpdySession in the pool to reuse. | 6470 // Set up an initial SpdySession in the pool to reuse. |
6471 HostPortPair host_port_pair("www.google.com", 443); | 6471 HostPortPair host_port_pair("www.google.com", 443); |
6472 HostPortProxyPair pair(host_port_pair, ProxyServer::Direct()); | 6472 HostPortProxyPair pair(host_port_pair, ProxyServer::Direct()); |
6473 scoped_refptr<SpdySession> spdy_session = | 6473 scoped_refptr<SpdySession> spdy_session = |
6474 session->spdy_session_pool()->Get(pair, session->mutable_spdy_settings(), | 6474 session->spdy_session_pool()->Get(pair, session->mutable_spdy_settings(), |
6475 BoundNetLog()); | 6475 BoundNetLog()); |
6476 scoped_refptr<TCPSocketParams> tcp_params = | 6476 scoped_refptr<TCPSocketParams> tcp_params( |
6477 new TCPSocketParams("www.google.com", 443, MEDIUM, GURL(), false); | 6477 new TCPSocketParams("www.google.com", 443, MEDIUM, GURL(), false)); |
6478 | 6478 |
6479 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); | 6479 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); |
6480 EXPECT_EQ(ERR_IO_PENDING, | 6480 EXPECT_EQ(ERR_IO_PENDING, |
6481 connection->Init(host_port_pair.ToString(),tcp_params, LOWEST, | 6481 connection->Init(host_port_pair.ToString(),tcp_params, LOWEST, |
6482 &callback, session->tcp_socket_pool(), | 6482 &callback, session->tcp_socket_pool(), |
6483 BoundNetLog())); | 6483 BoundNetLog())); |
6484 EXPECT_EQ(OK, callback.WaitForResult()); | 6484 EXPECT_EQ(OK, callback.WaitForResult()); |
6485 | 6485 |
6486 SSLConfig ssl_config; | 6486 SSLConfig ssl_config; |
6487 session->ssl_config_service()->GetSSLConfig(&ssl_config); | 6487 session->ssl_config_service()->GetSSLConfig(&ssl_config); |
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6941 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); | 6941 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); |
6942 auth_handler->set_connection_based(true); | 6942 auth_handler->set_connection_based(true); |
6943 std::string auth_challenge = "Mock realm=server"; | 6943 std::string auth_challenge = "Mock realm=server"; |
6944 GURL origin("http://www.example.com"); | 6944 GURL origin("http://www.example.com"); |
6945 HttpAuth::ChallengeTokenizer tokenizer(auth_challenge.begin(), | 6945 HttpAuth::ChallengeTokenizer tokenizer(auth_challenge.begin(), |
6946 auth_challenge.end()); | 6946 auth_challenge.end()); |
6947 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, | 6947 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, |
6948 origin, BoundNetLog()); | 6948 origin, BoundNetLog()); |
6949 auth_factory->set_mock_handler(auth_handler, HttpAuth::AUTH_SERVER); | 6949 auth_factory->set_mock_handler(auth_handler, HttpAuth::AUTH_SERVER); |
6950 | 6950 |
6951 scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 6951 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
6952 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 6952 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
6953 | 6953 |
6954 int rv = OK; | 6954 int rv = OK; |
6955 const HttpResponseInfo* response = NULL; | 6955 const HttpResponseInfo* response = NULL; |
6956 HttpRequestInfo request; | 6956 HttpRequestInfo request; |
6957 request.method = "GET"; | 6957 request.method = "GET"; |
6958 request.url = origin; | 6958 request.url = origin; |
6959 request.load_flags = 0; | 6959 request.load_flags = 0; |
6960 TestCompletionCallback callback; | 6960 TestCompletionCallback callback; |
6961 | 6961 |
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7642 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 7642 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); |
7643 | 7643 |
7644 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7644 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7645 | 7645 |
7646 // Set up an initial SpdySession in the pool to reuse. | 7646 // Set up an initial SpdySession in the pool to reuse. |
7647 HostPortPair host_port_pair("www.google.com", 443); | 7647 HostPortPair host_port_pair("www.google.com", 443); |
7648 HostPortProxyPair pair(host_port_pair, ProxyServer::Direct()); | 7648 HostPortProxyPair pair(host_port_pair, ProxyServer::Direct()); |
7649 scoped_refptr<SpdySession> spdy_session = | 7649 scoped_refptr<SpdySession> spdy_session = |
7650 session->spdy_session_pool()->Get(pair, session->mutable_spdy_settings(), | 7650 session->spdy_session_pool()->Get(pair, session->mutable_spdy_settings(), |
7651 BoundNetLog()); | 7651 BoundNetLog()); |
7652 scoped_refptr<TCPSocketParams> tcp_params = | 7652 scoped_refptr<TCPSocketParams> tcp_params( |
7653 new TCPSocketParams("www.google.com", 443, MEDIUM, GURL(), false); | 7653 new TCPSocketParams("www.google.com", 443, MEDIUM, GURL(), false)); |
7654 TestCompletionCallback callback; | 7654 TestCompletionCallback callback; |
7655 | 7655 |
7656 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); | 7656 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); |
7657 EXPECT_EQ(ERR_IO_PENDING, | 7657 EXPECT_EQ(ERR_IO_PENDING, |
7658 connection->Init(host_port_pair.ToString(), tcp_params, LOWEST, | 7658 connection->Init(host_port_pair.ToString(), tcp_params, LOWEST, |
7659 &callback, session->tcp_socket_pool(), | 7659 &callback, session->tcp_socket_pool(), |
7660 BoundNetLog())); | 7660 BoundNetLog())); |
7661 EXPECT_EQ(OK, callback.WaitForResult()); | 7661 EXPECT_EQ(OK, callback.WaitForResult()); |
7662 spdy_session->InitializeWithSocket(connection.release(), false, OK); | 7662 spdy_session->InitializeWithSocket(connection.release(), false, OK); |
7663 | 7663 |
7664 HttpRequestInfo request; | 7664 HttpRequestInfo request; |
7665 request.method = "GET"; | 7665 request.method = "GET"; |
7666 request.url = GURL("https://www.google.com/"); | 7666 request.url = GURL("https://www.google.com/"); |
7667 request.load_flags = 0; | 7667 request.load_flags = 0; |
7668 | 7668 |
7669 // This is the important line that marks this as a preconnect. | 7669 // This is the important line that marks this as a preconnect. |
7670 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; | 7670 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; |
7671 | 7671 |
7672 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); | 7672 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); |
7673 | 7673 |
7674 int rv = trans->Start(&request, &callback, BoundNetLog()); | 7674 int rv = trans->Start(&request, &callback, BoundNetLog()); |
7675 EXPECT_EQ(ERR_IO_PENDING, rv); | 7675 EXPECT_EQ(ERR_IO_PENDING, rv); |
7676 EXPECT_EQ(OK, callback.WaitForResult()); | 7676 EXPECT_EQ(OK, callback.WaitForResult()); |
7677 } | 7677 } |
7678 | 7678 |
7679 } // namespace net | 7679 } // namespace net |
OLD | NEW |