OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 #include "net/spdy/spdy_test_util_common.h" | 73 #include "net/spdy/spdy_test_util_common.h" |
74 #include "net/ssl/ssl_cert_request_info.h" | 74 #include "net/ssl/ssl_cert_request_info.h" |
75 #include "net/ssl/ssl_config_service.h" | 75 #include "net/ssl/ssl_config_service.h" |
76 #include "net/ssl/ssl_config_service_defaults.h" | 76 #include "net/ssl/ssl_config_service_defaults.h" |
77 #include "net/ssl/ssl_info.h" | 77 #include "net/ssl/ssl_info.h" |
78 #include "net/test/cert_test_util.h" | 78 #include "net/test/cert_test_util.h" |
79 #include "net/websockets/websocket_handshake_stream_base.h" | 79 #include "net/websockets/websocket_handshake_stream_base.h" |
80 #include "testing/gtest/include/gtest/gtest.h" | 80 #include "testing/gtest/include/gtest/gtest.h" |
81 #include "testing/platform_test.h" | 81 #include "testing/platform_test.h" |
82 #include "url/gurl.h" | 82 #include "url/gurl.h" |
| 83 #include "url/origin.h" |
83 | 84 |
84 using base::ASCIIToUTF16; | 85 using base::ASCIIToUTF16; |
85 | 86 |
86 //----------------------------------------------------------------------------- | 87 //----------------------------------------------------------------------------- |
87 | 88 |
88 namespace net { | 89 namespace net { |
89 | 90 |
90 namespace { | 91 namespace { |
91 | 92 |
92 const base::string16 kBar(ASCIIToUTF16("bar")); | 93 const base::string16 kBar(ASCIIToUTF16("bar")); |
(...skipping 9993 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10086 HttpAuthHandlerMock::Factory* auth_factory( | 10087 HttpAuthHandlerMock::Factory* auth_factory( |
10087 new HttpAuthHandlerMock::Factory()); | 10088 new HttpAuthHandlerMock::Factory()); |
10088 session_deps_.http_auth_handler_factory.reset(auth_factory); | 10089 session_deps_.http_auth_handler_factory.reset(auth_factory); |
10089 const TestConfig& test_config = test_configs[i]; | 10090 const TestConfig& test_config = test_configs[i]; |
10090 | 10091 |
10091 // Set up authentication handlers as necessary. | 10092 // Set up authentication handlers as necessary. |
10092 if (test_config.proxy_auth_timing != AUTH_NONE) { | 10093 if (test_config.proxy_auth_timing != AUTH_NONE) { |
10093 for (int n = 0; n < 2; n++) { | 10094 for (int n = 0; n < 2; n++) { |
10094 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); | 10095 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); |
10095 std::string auth_challenge = "Mock realm=proxy"; | 10096 std::string auth_challenge = "Mock realm=proxy"; |
10096 GURL origin(test_config.proxy_url); | 10097 url::Origin origin(test_config.proxy_url); |
10097 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), | 10098 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), |
10098 auth_challenge.end()); | 10099 auth_challenge.end()); |
10099 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_PROXY, | 10100 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_PROXY, |
10100 origin, BoundNetLog()); | 10101 origin, BoundNetLog()); |
10101 auth_handler->SetGenerateExpectation( | 10102 auth_handler->SetGenerateExpectation( |
10102 test_config.proxy_auth_timing == AUTH_ASYNC, | 10103 test_config.proxy_auth_timing == AUTH_ASYNC, |
10103 test_config.proxy_auth_rv); | 10104 test_config.proxy_auth_rv); |
10104 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY); | 10105 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY); |
10105 } | 10106 } |
10106 } | 10107 } |
10107 if (test_config.server_auth_timing != AUTH_NONE) { | 10108 if (test_config.server_auth_timing != AUTH_NONE) { |
10108 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); | 10109 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); |
10109 std::string auth_challenge = "Mock realm=server"; | 10110 std::string auth_challenge = "Mock realm=server"; |
10110 GURL origin(test_config.server_url); | 10111 url::Origin origin(test_config.server_url); |
10111 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), | 10112 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), |
10112 auth_challenge.end()); | 10113 auth_challenge.end()); |
10113 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, | 10114 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, |
10114 origin, BoundNetLog()); | 10115 origin, BoundNetLog()); |
10115 auth_handler->SetGenerateExpectation( | 10116 auth_handler->SetGenerateExpectation( |
10116 test_config.server_auth_timing == AUTH_ASYNC, | 10117 test_config.server_auth_timing == AUTH_ASYNC, |
10117 test_config.server_auth_rv); | 10118 test_config.server_auth_rv); |
10118 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); | 10119 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); |
10119 } | 10120 } |
10120 if (test_config.proxy_url) { | 10121 if (test_config.proxy_url) { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10194 HttpAuthHandlerMock::Factory* auth_factory( | 10195 HttpAuthHandlerMock::Factory* auth_factory( |
10195 new HttpAuthHandlerMock::Factory()); | 10196 new HttpAuthHandlerMock::Factory()); |
10196 session_deps_.http_auth_handler_factory.reset(auth_factory); | 10197 session_deps_.http_auth_handler_factory.reset(auth_factory); |
10197 session_deps_.proxy_service.reset(ProxyService::CreateDirect()); | 10198 session_deps_.proxy_service.reset(ProxyService::CreateDirect()); |
10198 session_deps_.host_resolver->rules()->AddRule("www.example.com", "10.0.0.1"); | 10199 session_deps_.host_resolver->rules()->AddRule("www.example.com", "10.0.0.1"); |
10199 session_deps_.host_resolver->set_synchronous_mode(true); | 10200 session_deps_.host_resolver->set_synchronous_mode(true); |
10200 | 10201 |
10201 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); | 10202 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); |
10202 auth_handler->set_connection_based(true); | 10203 auth_handler->set_connection_based(true); |
10203 std::string auth_challenge = "Mock realm=server"; | 10204 std::string auth_challenge = "Mock realm=server"; |
10204 GURL origin("http://www.example.com"); | 10205 url::Origin origin("http://www.example.com"); |
10205 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), | 10206 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), |
10206 auth_challenge.end()); | 10207 auth_challenge.end()); |
10207 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, | 10208 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, |
10208 origin, BoundNetLog()); | 10209 origin, BoundNetLog()); |
10209 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); | 10210 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); |
10210 | 10211 |
10211 int rv = OK; | 10212 int rv = OK; |
10212 const HttpResponseInfo* response = NULL; | 10213 const HttpResponseInfo* response = NULL; |
10213 HttpRequestInfo request; | 10214 HttpRequestInfo request; |
10214 request.method = "GET"; | 10215 request.method = "GET"; |
10215 request.url = origin; | 10216 request.url = GURL(origin.string()); |
10216 request.load_flags = 0; | 10217 request.load_flags = 0; |
10217 | 10218 |
10218 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10219 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10219 | 10220 |
10220 // Use a TCP Socket Pool with only one connection per group. This is used | 10221 // Use a TCP Socket Pool with only one connection per group. This is used |
10221 // to validate that the TCP socket is not released to the pool between | 10222 // to validate that the TCP socket is not released to the pool between |
10222 // each round of multi-round authentication. | 10223 // each round of multi-round authentication. |
10223 HttpNetworkSessionPeer session_peer(session); | 10224 HttpNetworkSessionPeer session_peer(session); |
10224 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( | 10225 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( |
10225 50, // Max sockets for pool | 10226 50, // Max sockets for pool |
(...skipping 3985 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14211 MockRead("Upgrade: websocket\r\n"), | 14212 MockRead("Upgrade: websocket\r\n"), |
14212 MockRead("Connection: Upgrade\r\n"), | 14213 MockRead("Connection: Upgrade\r\n"), |
14213 MockRead("Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n"), | 14214 MockRead("Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n"), |
14214 }; | 14215 }; |
14215 | 14216 |
14216 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 14217 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
14217 arraysize(data_writes)); | 14218 arraysize(data_writes)); |
14218 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14219 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14219 | 14220 |
14220 session->http_auth_cache()->Add( | 14221 session->http_auth_cache()->Add( |
14221 GURL("http://myproxy:70/"), "MyRealm1", HttpAuth::AUTH_SCHEME_BASIC, | 14222 url::Origin("http://myproxy:70"), "MyRealm1", HttpAuth::AUTH_SCHEME_BASIC, |
14222 "Basic realm=MyRealm1", AuthCredentials(kFoo, kBar), "/"); | 14223 "Basic realm=MyRealm1", AuthCredentials(kFoo, kBar), "/"); |
14223 | 14224 |
14224 scoped_ptr<HttpTransaction> trans( | 14225 scoped_ptr<HttpTransaction> trans( |
14225 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14226 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
14226 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; | 14227 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; |
14227 trans->SetWebSocketHandshakeStreamCreateHelper( | 14228 trans->SetWebSocketHandshakeStreamCreateHelper( |
14228 &websocket_stream_create_helper); | 14229 &websocket_stream_create_helper); |
14229 | 14230 |
14230 TestCompletionCallback callback; | 14231 TestCompletionCallback callback; |
14231 | 14232 |
14232 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14233 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14233 EXPECT_EQ(ERR_IO_PENDING, rv); | 14234 EXPECT_EQ(ERR_IO_PENDING, rv); |
14234 | 14235 |
14235 rv = callback.WaitForResult(); | 14236 rv = callback.WaitForResult(); |
14236 EXPECT_EQ(OK, rv); | 14237 EXPECT_EQ(OK, rv); |
14237 | 14238 |
14238 const HttpResponseInfo* response = trans->GetResponseInfo(); | 14239 const HttpResponseInfo* response = trans->GetResponseInfo(); |
14239 ASSERT_TRUE(response); | 14240 ASSERT_TRUE(response); |
14240 ASSERT_TRUE(response->headers.get()); | 14241 ASSERT_TRUE(response->headers.get()); |
14241 | 14242 |
14242 EXPECT_EQ(101, response->headers->response_code()); | 14243 EXPECT_EQ(101, response->headers->response_code()); |
14243 | 14244 |
14244 trans.reset(); | 14245 trans.reset(); |
14245 session->CloseAllConnections(); | 14246 session->CloseAllConnections(); |
14246 } | 14247 } |
14247 | 14248 |
14248 } // namespace net | 14249 } // namespace net |
OLD | NEW |