| 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_proxy_client_socket_pool.h" | 5 #include "net/http/http_proxy_client_socket_pool.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 | 178 |
| 179 HttpNetworkSession* CreateNetworkSession() { | 179 HttpNetworkSession* CreateNetworkSession() { |
| 180 HttpNetworkSession::Params params; | 180 HttpNetworkSession::Params params; |
| 181 params.host_resolver = &host_resolver_; | 181 params.host_resolver = &host_resolver_; |
| 182 params.cert_verifier = cert_verifier_.get(); | 182 params.cert_verifier = cert_verifier_.get(); |
| 183 params.transport_security_state = transport_security_state_.get(); | 183 params.transport_security_state = transport_security_state_.get(); |
| 184 params.proxy_service = proxy_service_.get(); | 184 params.proxy_service = proxy_service_.get(); |
| 185 params.client_socket_factory = &socket_factory_; | 185 params.client_socket_factory = &socket_factory_; |
| 186 params.ssl_config_service = ssl_config_service_.get(); | 186 params.ssl_config_service = ssl_config_service_.get(); |
| 187 params.http_auth_handler_factory = http_auth_handler_factory_.get(); | 187 params.http_auth_handler_factory = http_auth_handler_factory_.get(); |
| 188 params.http_server_properties = | 188 params.http_server_properties = http_server_properties_.GetWeakPtr(); |
| 189 http_server_properties_.GetWeakPtr(); | |
| 190 params.enable_spdy_compression = false; | 189 params.enable_spdy_compression = false; |
| 191 params.spdy_default_protocol = GetParam(); | 190 params.spdy_default_protocol = GetParam(); |
| 192 return new HttpNetworkSession(params); | 191 return new HttpNetworkSession(params); |
| 193 } | 192 } |
| 194 | 193 |
| 195 void TestIPPoolingDisabled(SSLSocketDataProvider* ssl); | 194 void TestIPPoolingDisabled(SSLSocketDataProvider* ssl); |
| 196 | 195 |
| 197 MockClientSocketFactory socket_factory_; | 196 MockClientSocketFactory socket_factory_; |
| 198 MockCachingHostResolver host_resolver_; | 197 MockCachingHostResolver host_resolver_; |
| 199 scoped_ptr<CertVerifier> cert_verifier_; | 198 scoped_ptr<CertVerifier> cert_verifier_; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 216 | 215 |
| 217 scoped_refptr<HttpProxySocketParams> http_proxy_socket_params_; | 216 scoped_refptr<HttpProxySocketParams> http_proxy_socket_params_; |
| 218 ClientSocketPoolHistograms http_proxy_histograms_; | 217 ClientSocketPoolHistograms http_proxy_histograms_; |
| 219 HttpProxyClientSocketPool http_proxy_socket_pool_; | 218 HttpProxyClientSocketPool http_proxy_socket_pool_; |
| 220 | 219 |
| 221 SSLConfig ssl_config_; | 220 SSLConfig ssl_config_; |
| 222 scoped_ptr<ClientSocketPoolHistograms> ssl_histograms_; | 221 scoped_ptr<ClientSocketPoolHistograms> ssl_histograms_; |
| 223 scoped_ptr<SSLClientSocketPool> pool_; | 222 scoped_ptr<SSLClientSocketPool> pool_; |
| 224 }; | 223 }; |
| 225 | 224 |
| 226 INSTANTIATE_TEST_CASE_P( | 225 INSTANTIATE_TEST_CASE_P(NextProto, |
| 227 NextProto, | 226 SSLClientSocketPoolTest, |
| 228 SSLClientSocketPoolTest, | 227 testing::Values(kProtoDeprecatedSPDY2, |
| 229 testing::Values(kProtoDeprecatedSPDY2, | 228 kProtoSPDY3, |
| 230 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4)); | 229 kProtoSPDY31, |
| 230 kProtoSPDY4)); |
| 231 | 231 |
| 232 TEST_P(SSLClientSocketPoolTest, TCPFail) { | 232 TEST_P(SSLClientSocketPoolTest, TCPFail) { |
| 233 StaticSocketDataProvider data; | 233 StaticSocketDataProvider data; |
| 234 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); | 234 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); |
| 235 socket_factory_.AddSocketDataProvider(&data); | 235 socket_factory_.AddSocketDataProvider(&data); |
| 236 | 236 |
| 237 CreatePool(true /* tcp pool */, false, false); | 237 CreatePool(true /* tcp pool */, false, false); |
| 238 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 238 scoped_refptr<SSLSocketParams> params = |
| 239 false); | 239 SSLParams(ProxyServer::SCHEME_DIRECT, false); |
| 240 | 240 |
| 241 ClientSocketHandle handle; | 241 ClientSocketHandle handle; |
| 242 int rv = handle.Init("a", params, MEDIUM, CompletionCallback(), pool_.get(), | 242 int rv = handle.Init( |
| 243 BoundNetLog()); | 243 "a", params, MEDIUM, CompletionCallback(), pool_.get(), BoundNetLog()); |
| 244 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); | 244 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); |
| 245 EXPECT_FALSE(handle.is_initialized()); | 245 EXPECT_FALSE(handle.is_initialized()); |
| 246 EXPECT_FALSE(handle.socket()); | 246 EXPECT_FALSE(handle.socket()); |
| 247 EXPECT_FALSE(handle.is_ssl_error()); | 247 EXPECT_FALSE(handle.is_ssl_error()); |
| 248 } | 248 } |
| 249 | 249 |
| 250 TEST_P(SSLClientSocketPoolTest, TCPFailAsync) { | 250 TEST_P(SSLClientSocketPoolTest, TCPFailAsync) { |
| 251 StaticSocketDataProvider data; | 251 StaticSocketDataProvider data; |
| 252 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); | 252 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); |
| 253 socket_factory_.AddSocketDataProvider(&data); | 253 socket_factory_.AddSocketDataProvider(&data); |
| 254 | 254 |
| 255 CreatePool(true /* tcp pool */, false, false); | 255 CreatePool(true /* tcp pool */, false, false); |
| 256 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 256 scoped_refptr<SSLSocketParams> params = |
| 257 false); | 257 SSLParams(ProxyServer::SCHEME_DIRECT, false); |
| 258 | 258 |
| 259 ClientSocketHandle handle; | 259 ClientSocketHandle handle; |
| 260 TestCompletionCallback callback; | 260 TestCompletionCallback callback; |
| 261 int rv = handle.Init( | 261 int rv = handle.Init( |
| 262 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 262 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 263 EXPECT_EQ(ERR_IO_PENDING, rv); | 263 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 264 EXPECT_FALSE(handle.is_initialized()); | 264 EXPECT_FALSE(handle.is_initialized()); |
| 265 EXPECT_FALSE(handle.socket()); | 265 EXPECT_FALSE(handle.socket()); |
| 266 | 266 |
| 267 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); | 267 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); |
| 268 EXPECT_FALSE(handle.is_initialized()); | 268 EXPECT_FALSE(handle.is_initialized()); |
| 269 EXPECT_FALSE(handle.socket()); | 269 EXPECT_FALSE(handle.socket()); |
| 270 EXPECT_FALSE(handle.is_ssl_error()); | 270 EXPECT_FALSE(handle.is_ssl_error()); |
| 271 } | 271 } |
| 272 | 272 |
| 273 TEST_P(SSLClientSocketPoolTest, BasicDirect) { | 273 TEST_P(SSLClientSocketPoolTest, BasicDirect) { |
| 274 StaticSocketDataProvider data; | 274 StaticSocketDataProvider data; |
| 275 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 275 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 276 socket_factory_.AddSocketDataProvider(&data); | 276 socket_factory_.AddSocketDataProvider(&data); |
| 277 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 277 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 278 socket_factory_.AddSSLSocketDataProvider(&ssl); | 278 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 279 | 279 |
| 280 CreatePool(true /* tcp pool */, false, false); | 280 CreatePool(true /* tcp pool */, false, false); |
| 281 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 281 scoped_refptr<SSLSocketParams> params = |
| 282 false); | 282 SSLParams(ProxyServer::SCHEME_DIRECT, false); |
| 283 | 283 |
| 284 ClientSocketHandle handle; | 284 ClientSocketHandle handle; |
| 285 TestCompletionCallback callback; | 285 TestCompletionCallback callback; |
| 286 int rv = handle.Init( | 286 int rv = handle.Init( |
| 287 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 287 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 288 EXPECT_EQ(OK, rv); | 288 EXPECT_EQ(OK, rv); |
| 289 EXPECT_TRUE(handle.is_initialized()); | 289 EXPECT_TRUE(handle.is_initialized()); |
| 290 EXPECT_TRUE(handle.socket()); | 290 EXPECT_TRUE(handle.socket()); |
| 291 TestLoadTimingInfo(handle); | 291 TestLoadTimingInfo(handle); |
| 292 } | 292 } |
| 293 | 293 |
| 294 // Make sure that SSLConnectJob passes on its priority to its | 294 // Make sure that SSLConnectJob passes on its priority to its |
| 295 // socket request on Init (for the DIRECT case). | 295 // socket request on Init (for the DIRECT case). |
| 296 TEST_P(SSLClientSocketPoolTest, SetSocketRequestPriorityOnInitDirect) { | 296 TEST_P(SSLClientSocketPoolTest, SetSocketRequestPriorityOnInitDirect) { |
| 297 CreatePool(true /* tcp pool */, false, false); | 297 CreatePool(true /* tcp pool */, false, false); |
| 298 scoped_refptr<SSLSocketParams> params = | 298 scoped_refptr<SSLSocketParams> params = |
| 299 SSLParams(ProxyServer::SCHEME_DIRECT, false); | 299 SSLParams(ProxyServer::SCHEME_DIRECT, false); |
| 300 | 300 |
| 301 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { | 301 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
| 302 RequestPriority priority = static_cast<RequestPriority>(i); | 302 RequestPriority priority = static_cast<RequestPriority>(i); |
| 303 StaticSocketDataProvider data; | 303 StaticSocketDataProvider data; |
| 304 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 304 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 305 socket_factory_.AddSocketDataProvider(&data); | 305 socket_factory_.AddSocketDataProvider(&data); |
| 306 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 306 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 307 socket_factory_.AddSSLSocketDataProvider(&ssl); | 307 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 308 | 308 |
| 309 ClientSocketHandle handle; | 309 ClientSocketHandle handle; |
| 310 TestCompletionCallback callback; | 310 TestCompletionCallback callback; |
| 311 EXPECT_EQ(OK, handle.Init("a", params, priority, callback.callback(), | 311 EXPECT_EQ(OK, |
| 312 pool_.get(), BoundNetLog())); | 312 handle.Init("a", |
| 313 params, |
| 314 priority, |
| 315 callback.callback(), |
| 316 pool_.get(), |
| 317 BoundNetLog())); |
| 313 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); | 318 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); |
| 314 handle.socket()->Disconnect(); | 319 handle.socket()->Disconnect(); |
| 315 } | 320 } |
| 316 } | 321 } |
| 317 | 322 |
| 318 TEST_P(SSLClientSocketPoolTest, BasicDirectAsync) { | 323 TEST_P(SSLClientSocketPoolTest, BasicDirectAsync) { |
| 319 StaticSocketDataProvider data; | 324 StaticSocketDataProvider data; |
| 320 socket_factory_.AddSocketDataProvider(&data); | 325 socket_factory_.AddSocketDataProvider(&data); |
| 321 SSLSocketDataProvider ssl(ASYNC, OK); | 326 SSLSocketDataProvider ssl(ASYNC, OK); |
| 322 socket_factory_.AddSSLSocketDataProvider(&ssl); | 327 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 323 | 328 |
| 324 CreatePool(true /* tcp pool */, false, false); | 329 CreatePool(true /* tcp pool */, false, false); |
| 325 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 330 scoped_refptr<SSLSocketParams> params = |
| 326 false); | 331 SSLParams(ProxyServer::SCHEME_DIRECT, false); |
| 327 | 332 |
| 328 ClientSocketHandle handle; | 333 ClientSocketHandle handle; |
| 329 TestCompletionCallback callback; | 334 TestCompletionCallback callback; |
| 330 int rv = handle.Init( | 335 int rv = handle.Init( |
| 331 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 336 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 332 EXPECT_EQ(ERR_IO_PENDING, rv); | 337 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 333 EXPECT_FALSE(handle.is_initialized()); | 338 EXPECT_FALSE(handle.is_initialized()); |
| 334 EXPECT_FALSE(handle.socket()); | 339 EXPECT_FALSE(handle.socket()); |
| 335 | 340 |
| 336 EXPECT_EQ(OK, callback.WaitForResult()); | 341 EXPECT_EQ(OK, callback.WaitForResult()); |
| 337 EXPECT_TRUE(handle.is_initialized()); | 342 EXPECT_TRUE(handle.is_initialized()); |
| 338 EXPECT_TRUE(handle.socket()); | 343 EXPECT_TRUE(handle.socket()); |
| 339 TestLoadTimingInfo(handle); | 344 TestLoadTimingInfo(handle); |
| 340 } | 345 } |
| 341 | 346 |
| 342 TEST_P(SSLClientSocketPoolTest, DirectCertError) { | 347 TEST_P(SSLClientSocketPoolTest, DirectCertError) { |
| 343 StaticSocketDataProvider data; | 348 StaticSocketDataProvider data; |
| 344 socket_factory_.AddSocketDataProvider(&data); | 349 socket_factory_.AddSocketDataProvider(&data); |
| 345 SSLSocketDataProvider ssl(ASYNC, ERR_CERT_COMMON_NAME_INVALID); | 350 SSLSocketDataProvider ssl(ASYNC, ERR_CERT_COMMON_NAME_INVALID); |
| 346 socket_factory_.AddSSLSocketDataProvider(&ssl); | 351 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 347 | 352 |
| 348 CreatePool(true /* tcp pool */, false, false); | 353 CreatePool(true /* tcp pool */, false, false); |
| 349 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 354 scoped_refptr<SSLSocketParams> params = |
| 350 false); | 355 SSLParams(ProxyServer::SCHEME_DIRECT, false); |
| 351 | 356 |
| 352 ClientSocketHandle handle; | 357 ClientSocketHandle handle; |
| 353 TestCompletionCallback callback; | 358 TestCompletionCallback callback; |
| 354 int rv = handle.Init( | 359 int rv = handle.Init( |
| 355 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 360 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 356 EXPECT_EQ(ERR_IO_PENDING, rv); | 361 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 357 EXPECT_FALSE(handle.is_initialized()); | 362 EXPECT_FALSE(handle.is_initialized()); |
| 358 EXPECT_FALSE(handle.socket()); | 363 EXPECT_FALSE(handle.socket()); |
| 359 | 364 |
| 360 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); | 365 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); |
| 361 EXPECT_TRUE(handle.is_initialized()); | 366 EXPECT_TRUE(handle.is_initialized()); |
| 362 EXPECT_TRUE(handle.socket()); | 367 EXPECT_TRUE(handle.socket()); |
| 363 TestLoadTimingInfo(handle); | 368 TestLoadTimingInfo(handle); |
| 364 } | 369 } |
| 365 | 370 |
| 366 TEST_P(SSLClientSocketPoolTest, DirectSSLError) { | 371 TEST_P(SSLClientSocketPoolTest, DirectSSLError) { |
| 367 StaticSocketDataProvider data; | 372 StaticSocketDataProvider data; |
| 368 socket_factory_.AddSocketDataProvider(&data); | 373 socket_factory_.AddSocketDataProvider(&data); |
| 369 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); | 374 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); |
| 370 socket_factory_.AddSSLSocketDataProvider(&ssl); | 375 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 371 | 376 |
| 372 CreatePool(true /* tcp pool */, false, false); | 377 CreatePool(true /* tcp pool */, false, false); |
| 373 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 378 scoped_refptr<SSLSocketParams> params = |
| 374 false); | 379 SSLParams(ProxyServer::SCHEME_DIRECT, false); |
| 375 | 380 |
| 376 ClientSocketHandle handle; | 381 ClientSocketHandle handle; |
| 377 TestCompletionCallback callback; | 382 TestCompletionCallback callback; |
| 378 int rv = handle.Init( | 383 int rv = handle.Init( |
| 379 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 384 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 380 EXPECT_EQ(ERR_IO_PENDING, rv); | 385 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 381 EXPECT_FALSE(handle.is_initialized()); | 386 EXPECT_FALSE(handle.is_initialized()); |
| 382 EXPECT_FALSE(handle.socket()); | 387 EXPECT_FALSE(handle.socket()); |
| 383 | 388 |
| 384 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, callback.WaitForResult()); | 389 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, callback.WaitForResult()); |
| 385 EXPECT_FALSE(handle.is_initialized()); | 390 EXPECT_FALSE(handle.is_initialized()); |
| 386 EXPECT_FALSE(handle.socket()); | 391 EXPECT_FALSE(handle.socket()); |
| 387 EXPECT_TRUE(handle.is_ssl_error()); | 392 EXPECT_TRUE(handle.is_ssl_error()); |
| 388 } | 393 } |
| 389 | 394 |
| 390 TEST_P(SSLClientSocketPoolTest, DirectWithNPN) { | 395 TEST_P(SSLClientSocketPoolTest, DirectWithNPN) { |
| 391 StaticSocketDataProvider data; | 396 StaticSocketDataProvider data; |
| 392 socket_factory_.AddSocketDataProvider(&data); | 397 socket_factory_.AddSocketDataProvider(&data); |
| 393 SSLSocketDataProvider ssl(ASYNC, OK); | 398 SSLSocketDataProvider ssl(ASYNC, OK); |
| 394 ssl.SetNextProto(kProtoHTTP11); | 399 ssl.SetNextProto(kProtoHTTP11); |
| 395 socket_factory_.AddSSLSocketDataProvider(&ssl); | 400 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 396 | 401 |
| 397 CreatePool(true /* tcp pool */, false, false); | 402 CreatePool(true /* tcp pool */, false, false); |
| 398 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 403 scoped_refptr<SSLSocketParams> params = |
| 399 false); | 404 SSLParams(ProxyServer::SCHEME_DIRECT, false); |
| 400 | 405 |
| 401 ClientSocketHandle handle; | 406 ClientSocketHandle handle; |
| 402 TestCompletionCallback callback; | 407 TestCompletionCallback callback; |
| 403 int rv = handle.Init( | 408 int rv = handle.Init( |
| 404 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 409 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 405 EXPECT_EQ(ERR_IO_PENDING, rv); | 410 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 406 EXPECT_FALSE(handle.is_initialized()); | 411 EXPECT_FALSE(handle.is_initialized()); |
| 407 EXPECT_FALSE(handle.socket()); | 412 EXPECT_FALSE(handle.socket()); |
| 408 | 413 |
| 409 EXPECT_EQ(OK, callback.WaitForResult()); | 414 EXPECT_EQ(OK, callback.WaitForResult()); |
| 410 EXPECT_TRUE(handle.is_initialized()); | 415 EXPECT_TRUE(handle.is_initialized()); |
| 411 EXPECT_TRUE(handle.socket()); | 416 EXPECT_TRUE(handle.socket()); |
| 412 TestLoadTimingInfo(handle); | 417 TestLoadTimingInfo(handle); |
| 413 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 418 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
| 414 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); | 419 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
| 415 } | 420 } |
| 416 | 421 |
| 417 TEST_P(SSLClientSocketPoolTest, DirectNoSPDY) { | 422 TEST_P(SSLClientSocketPoolTest, DirectNoSPDY) { |
| 418 StaticSocketDataProvider data; | 423 StaticSocketDataProvider data; |
| 419 socket_factory_.AddSocketDataProvider(&data); | 424 socket_factory_.AddSocketDataProvider(&data); |
| 420 SSLSocketDataProvider ssl(ASYNC, OK); | 425 SSLSocketDataProvider ssl(ASYNC, OK); |
| 421 ssl.SetNextProto(kProtoHTTP11); | 426 ssl.SetNextProto(kProtoHTTP11); |
| 422 socket_factory_.AddSSLSocketDataProvider(&ssl); | 427 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 423 | 428 |
| 424 CreatePool(true /* tcp pool */, false, false); | 429 CreatePool(true /* tcp pool */, false, false); |
| 425 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 430 scoped_refptr<SSLSocketParams> params = |
| 426 true); | 431 SSLParams(ProxyServer::SCHEME_DIRECT, true); |
| 427 | 432 |
| 428 ClientSocketHandle handle; | 433 ClientSocketHandle handle; |
| 429 TestCompletionCallback callback; | 434 TestCompletionCallback callback; |
| 430 int rv = handle.Init( | 435 int rv = handle.Init( |
| 431 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 436 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 432 EXPECT_EQ(ERR_IO_PENDING, rv); | 437 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 433 EXPECT_FALSE(handle.is_initialized()); | 438 EXPECT_FALSE(handle.is_initialized()); |
| 434 EXPECT_FALSE(handle.socket()); | 439 EXPECT_FALSE(handle.socket()); |
| 435 | 440 |
| 436 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.WaitForResult()); | 441 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.WaitForResult()); |
| 437 EXPECT_FALSE(handle.is_initialized()); | 442 EXPECT_FALSE(handle.is_initialized()); |
| 438 EXPECT_FALSE(handle.socket()); | 443 EXPECT_FALSE(handle.socket()); |
| 439 EXPECT_TRUE(handle.is_ssl_error()); | 444 EXPECT_TRUE(handle.is_ssl_error()); |
| 440 } | 445 } |
| 441 | 446 |
| 442 TEST_P(SSLClientSocketPoolTest, DirectGotSPDY) { | 447 TEST_P(SSLClientSocketPoolTest, DirectGotSPDY) { |
| 443 StaticSocketDataProvider data; | 448 StaticSocketDataProvider data; |
| 444 socket_factory_.AddSocketDataProvider(&data); | 449 socket_factory_.AddSocketDataProvider(&data); |
| 445 SSLSocketDataProvider ssl(ASYNC, OK); | 450 SSLSocketDataProvider ssl(ASYNC, OK); |
| 446 ssl.SetNextProto(GetParam()); | 451 ssl.SetNextProto(GetParam()); |
| 447 socket_factory_.AddSSLSocketDataProvider(&ssl); | 452 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 448 | 453 |
| 449 CreatePool(true /* tcp pool */, false, false); | 454 CreatePool(true /* tcp pool */, false, false); |
| 450 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 455 scoped_refptr<SSLSocketParams> params = |
| 451 true); | 456 SSLParams(ProxyServer::SCHEME_DIRECT, true); |
| 452 | 457 |
| 453 ClientSocketHandle handle; | 458 ClientSocketHandle handle; |
| 454 TestCompletionCallback callback; | 459 TestCompletionCallback callback; |
| 455 int rv = handle.Init( | 460 int rv = handle.Init( |
| 456 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 461 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 457 EXPECT_EQ(ERR_IO_PENDING, rv); | 462 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 458 EXPECT_FALSE(handle.is_initialized()); | 463 EXPECT_FALSE(handle.is_initialized()); |
| 459 EXPECT_FALSE(handle.socket()); | 464 EXPECT_FALSE(handle.socket()); |
| 460 | 465 |
| 461 EXPECT_EQ(OK, callback.WaitForResult()); | 466 EXPECT_EQ(OK, callback.WaitForResult()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 472 } | 477 } |
| 473 | 478 |
| 474 TEST_P(SSLClientSocketPoolTest, DirectGotBonusSPDY) { | 479 TEST_P(SSLClientSocketPoolTest, DirectGotBonusSPDY) { |
| 475 StaticSocketDataProvider data; | 480 StaticSocketDataProvider data; |
| 476 socket_factory_.AddSocketDataProvider(&data); | 481 socket_factory_.AddSocketDataProvider(&data); |
| 477 SSLSocketDataProvider ssl(ASYNC, OK); | 482 SSLSocketDataProvider ssl(ASYNC, OK); |
| 478 ssl.SetNextProto(GetParam()); | 483 ssl.SetNextProto(GetParam()); |
| 479 socket_factory_.AddSSLSocketDataProvider(&ssl); | 484 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 480 | 485 |
| 481 CreatePool(true /* tcp pool */, false, false); | 486 CreatePool(true /* tcp pool */, false, false); |
| 482 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 487 scoped_refptr<SSLSocketParams> params = |
| 483 true); | 488 SSLParams(ProxyServer::SCHEME_DIRECT, true); |
| 484 | 489 |
| 485 ClientSocketHandle handle; | 490 ClientSocketHandle handle; |
| 486 TestCompletionCallback callback; | 491 TestCompletionCallback callback; |
| 487 int rv = handle.Init( | 492 int rv = handle.Init( |
| 488 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 493 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 489 EXPECT_EQ(ERR_IO_PENDING, rv); | 494 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 490 EXPECT_FALSE(handle.is_initialized()); | 495 EXPECT_FALSE(handle.is_initialized()); |
| 491 EXPECT_FALSE(handle.socket()); | 496 EXPECT_FALSE(handle.socket()); |
| 492 | 497 |
| 493 EXPECT_EQ(OK, callback.WaitForResult()); | 498 EXPECT_EQ(OK, callback.WaitForResult()); |
| 494 EXPECT_TRUE(handle.is_initialized()); | 499 EXPECT_TRUE(handle.is_initialized()); |
| 495 EXPECT_TRUE(handle.socket()); | 500 EXPECT_TRUE(handle.socket()); |
| 496 TestLoadTimingInfo(handle); | 501 TestLoadTimingInfo(handle); |
| 497 | 502 |
| 498 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 503 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
| 499 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); | 504 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
| 500 std::string proto; | 505 std::string proto; |
| 501 std::string server_protos; | 506 std::string server_protos; |
| 502 ssl_socket->GetNextProto(&proto, &server_protos); | 507 ssl_socket->GetNextProto(&proto, &server_protos); |
| 503 EXPECT_EQ(GetParam(), SSLClientSocket::NextProtoFromString(proto)); | 508 EXPECT_EQ(GetParam(), SSLClientSocket::NextProtoFromString(proto)); |
| 504 } | 509 } |
| 505 | 510 |
| 506 TEST_P(SSLClientSocketPoolTest, SOCKSFail) { | 511 TEST_P(SSLClientSocketPoolTest, SOCKSFail) { |
| 507 StaticSocketDataProvider data; | 512 StaticSocketDataProvider data; |
| 508 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); | 513 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); |
| 509 socket_factory_.AddSocketDataProvider(&data); | 514 socket_factory_.AddSocketDataProvider(&data); |
| 510 | 515 |
| 511 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 516 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 512 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 517 scoped_refptr<SSLSocketParams> params = |
| 513 false); | 518 SSLParams(ProxyServer::SCHEME_SOCKS5, false); |
| 514 | 519 |
| 515 ClientSocketHandle handle; | 520 ClientSocketHandle handle; |
| 516 TestCompletionCallback callback; | 521 TestCompletionCallback callback; |
| 517 int rv = handle.Init( | 522 int rv = handle.Init( |
| 518 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 523 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 519 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); | 524 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); |
| 520 EXPECT_FALSE(handle.is_initialized()); | 525 EXPECT_FALSE(handle.is_initialized()); |
| 521 EXPECT_FALSE(handle.socket()); | 526 EXPECT_FALSE(handle.socket()); |
| 522 EXPECT_FALSE(handle.is_ssl_error()); | 527 EXPECT_FALSE(handle.is_ssl_error()); |
| 523 } | 528 } |
| 524 | 529 |
| 525 TEST_P(SSLClientSocketPoolTest, SOCKSFailAsync) { | 530 TEST_P(SSLClientSocketPoolTest, SOCKSFailAsync) { |
| 526 StaticSocketDataProvider data; | 531 StaticSocketDataProvider data; |
| 527 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); | 532 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); |
| 528 socket_factory_.AddSocketDataProvider(&data); | 533 socket_factory_.AddSocketDataProvider(&data); |
| 529 | 534 |
| 530 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 535 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 531 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 536 scoped_refptr<SSLSocketParams> params = |
| 532 false); | 537 SSLParams(ProxyServer::SCHEME_SOCKS5, false); |
| 533 | 538 |
| 534 ClientSocketHandle handle; | 539 ClientSocketHandle handle; |
| 535 TestCompletionCallback callback; | 540 TestCompletionCallback callback; |
| 536 int rv = handle.Init( | 541 int rv = handle.Init( |
| 537 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 542 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 538 EXPECT_EQ(ERR_IO_PENDING, rv); | 543 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 539 EXPECT_FALSE(handle.is_initialized()); | 544 EXPECT_FALSE(handle.is_initialized()); |
| 540 EXPECT_FALSE(handle.socket()); | 545 EXPECT_FALSE(handle.socket()); |
| 541 | 546 |
| 542 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); | 547 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); |
| 543 EXPECT_FALSE(handle.is_initialized()); | 548 EXPECT_FALSE(handle.is_initialized()); |
| 544 EXPECT_FALSE(handle.socket()); | 549 EXPECT_FALSE(handle.socket()); |
| 545 EXPECT_FALSE(handle.is_ssl_error()); | 550 EXPECT_FALSE(handle.is_ssl_error()); |
| 546 } | 551 } |
| 547 | 552 |
| 548 TEST_P(SSLClientSocketPoolTest, SOCKSBasic) { | 553 TEST_P(SSLClientSocketPoolTest, SOCKSBasic) { |
| 549 StaticSocketDataProvider data; | 554 StaticSocketDataProvider data; |
| 550 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 555 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 551 socket_factory_.AddSocketDataProvider(&data); | 556 socket_factory_.AddSocketDataProvider(&data); |
| 552 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 557 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 553 socket_factory_.AddSSLSocketDataProvider(&ssl); | 558 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 554 | 559 |
| 555 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 560 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 556 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 561 scoped_refptr<SSLSocketParams> params = |
| 557 false); | 562 SSLParams(ProxyServer::SCHEME_SOCKS5, false); |
| 558 | 563 |
| 559 ClientSocketHandle handle; | 564 ClientSocketHandle handle; |
| 560 TestCompletionCallback callback; | 565 TestCompletionCallback callback; |
| 561 int rv = handle.Init( | 566 int rv = handle.Init( |
| 562 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 567 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 563 EXPECT_EQ(OK, rv); | 568 EXPECT_EQ(OK, rv); |
| 564 EXPECT_TRUE(handle.is_initialized()); | 569 EXPECT_TRUE(handle.is_initialized()); |
| 565 EXPECT_TRUE(handle.socket()); | 570 EXPECT_TRUE(handle.socket()); |
| 566 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here | 571 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here |
| 567 // don't go through the real logic, unlike in the HTTP proxy tests. | 572 // don't go through the real logic, unlike in the HTTP proxy tests. |
| 568 TestLoadTimingInfo(handle); | 573 TestLoadTimingInfo(handle); |
| 569 } | 574 } |
| 570 | 575 |
| 571 // Make sure that SSLConnectJob passes on its priority to its | 576 // Make sure that SSLConnectJob passes on its priority to its |
| 572 // transport socket on Init (for the SOCKS_PROXY case). | 577 // transport socket on Init (for the SOCKS_PROXY case). |
| 573 TEST_P(SSLClientSocketPoolTest, SetTransportPriorityOnInitSOCKS) { | 578 TEST_P(SSLClientSocketPoolTest, SetTransportPriorityOnInitSOCKS) { |
| 574 StaticSocketDataProvider data; | 579 StaticSocketDataProvider data; |
| 575 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 580 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 576 socket_factory_.AddSocketDataProvider(&data); | 581 socket_factory_.AddSocketDataProvider(&data); |
| 577 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 582 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 578 socket_factory_.AddSSLSocketDataProvider(&ssl); | 583 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 579 | 584 |
| 580 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 585 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 581 scoped_refptr<SSLSocketParams> params = | 586 scoped_refptr<SSLSocketParams> params = |
| 582 SSLParams(ProxyServer::SCHEME_SOCKS5, false); | 587 SSLParams(ProxyServer::SCHEME_SOCKS5, false); |
| 583 | 588 |
| 584 ClientSocketHandle handle; | 589 ClientSocketHandle handle; |
| 585 TestCompletionCallback callback; | 590 TestCompletionCallback callback; |
| 586 EXPECT_EQ(OK, handle.Init("a", params, HIGHEST, callback.callback(), | 591 EXPECT_EQ(OK, |
| 587 pool_.get(), BoundNetLog())); | 592 handle.Init("a", |
| 593 params, |
| 594 HIGHEST, |
| 595 callback.callback(), |
| 596 pool_.get(), |
| 597 BoundNetLog())); |
| 588 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority()); | 598 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority()); |
| 589 } | 599 } |
| 590 | 600 |
| 591 TEST_P(SSLClientSocketPoolTest, SOCKSBasicAsync) { | 601 TEST_P(SSLClientSocketPoolTest, SOCKSBasicAsync) { |
| 592 StaticSocketDataProvider data; | 602 StaticSocketDataProvider data; |
| 593 socket_factory_.AddSocketDataProvider(&data); | 603 socket_factory_.AddSocketDataProvider(&data); |
| 594 SSLSocketDataProvider ssl(ASYNC, OK); | 604 SSLSocketDataProvider ssl(ASYNC, OK); |
| 595 socket_factory_.AddSSLSocketDataProvider(&ssl); | 605 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 596 | 606 |
| 597 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 607 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 598 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 608 scoped_refptr<SSLSocketParams> params = |
| 599 false); | 609 SSLParams(ProxyServer::SCHEME_SOCKS5, false); |
| 600 | 610 |
| 601 ClientSocketHandle handle; | 611 ClientSocketHandle handle; |
| 602 TestCompletionCallback callback; | 612 TestCompletionCallback callback; |
| 603 int rv = handle.Init( | 613 int rv = handle.Init( |
| 604 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 614 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 605 EXPECT_EQ(ERR_IO_PENDING, rv); | 615 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 606 EXPECT_FALSE(handle.is_initialized()); | 616 EXPECT_FALSE(handle.is_initialized()); |
| 607 EXPECT_FALSE(handle.socket()); | 617 EXPECT_FALSE(handle.socket()); |
| 608 | 618 |
| 609 EXPECT_EQ(OK, callback.WaitForResult()); | 619 EXPECT_EQ(OK, callback.WaitForResult()); |
| 610 EXPECT_TRUE(handle.is_initialized()); | 620 EXPECT_TRUE(handle.is_initialized()); |
| 611 EXPECT_TRUE(handle.socket()); | 621 EXPECT_TRUE(handle.socket()); |
| 612 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here | 622 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here |
| 613 // don't go through the real logic, unlike in the HTTP proxy tests. | 623 // don't go through the real logic, unlike in the HTTP proxy tests. |
| 614 TestLoadTimingInfo(handle); | 624 TestLoadTimingInfo(handle); |
| 615 } | 625 } |
| 616 | 626 |
| 617 TEST_P(SSLClientSocketPoolTest, HttpProxyFail) { | 627 TEST_P(SSLClientSocketPoolTest, HttpProxyFail) { |
| 618 StaticSocketDataProvider data; | 628 StaticSocketDataProvider data; |
| 619 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); | 629 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); |
| 620 socket_factory_.AddSocketDataProvider(&data); | 630 socket_factory_.AddSocketDataProvider(&data); |
| 621 | 631 |
| 622 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 632 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 623 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 633 scoped_refptr<SSLSocketParams> params = |
| 624 false); | 634 SSLParams(ProxyServer::SCHEME_HTTP, false); |
| 625 | 635 |
| 626 ClientSocketHandle handle; | 636 ClientSocketHandle handle; |
| 627 TestCompletionCallback callback; | 637 TestCompletionCallback callback; |
| 628 int rv = handle.Init( | 638 int rv = handle.Init( |
| 629 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 639 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 630 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 640 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); |
| 631 EXPECT_FALSE(handle.is_initialized()); | 641 EXPECT_FALSE(handle.is_initialized()); |
| 632 EXPECT_FALSE(handle.socket()); | 642 EXPECT_FALSE(handle.socket()); |
| 633 EXPECT_FALSE(handle.is_ssl_error()); | 643 EXPECT_FALSE(handle.is_ssl_error()); |
| 634 } | 644 } |
| 635 | 645 |
| 636 TEST_P(SSLClientSocketPoolTest, HttpProxyFailAsync) { | 646 TEST_P(SSLClientSocketPoolTest, HttpProxyFailAsync) { |
| 637 StaticSocketDataProvider data; | 647 StaticSocketDataProvider data; |
| 638 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); | 648 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); |
| 639 socket_factory_.AddSocketDataProvider(&data); | 649 socket_factory_.AddSocketDataProvider(&data); |
| 640 | 650 |
| 641 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 651 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 642 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 652 scoped_refptr<SSLSocketParams> params = |
| 643 false); | 653 SSLParams(ProxyServer::SCHEME_HTTP, false); |
| 644 | 654 |
| 645 ClientSocketHandle handle; | 655 ClientSocketHandle handle; |
| 646 TestCompletionCallback callback; | 656 TestCompletionCallback callback; |
| 647 int rv = handle.Init( | 657 int rv = handle.Init( |
| 648 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 658 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 649 EXPECT_EQ(ERR_IO_PENDING, rv); | 659 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 650 EXPECT_FALSE(handle.is_initialized()); | 660 EXPECT_FALSE(handle.is_initialized()); |
| 651 EXPECT_FALSE(handle.socket()); | 661 EXPECT_FALSE(handle.socket()); |
| 652 | 662 |
| 653 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback.WaitForResult()); | 663 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback.WaitForResult()); |
| 654 EXPECT_FALSE(handle.is_initialized()); | 664 EXPECT_FALSE(handle.is_initialized()); |
| 655 EXPECT_FALSE(handle.socket()); | 665 EXPECT_FALSE(handle.socket()); |
| 656 EXPECT_FALSE(handle.is_ssl_error()); | 666 EXPECT_FALSE(handle.is_ssl_error()); |
| 657 } | 667 } |
| 658 | 668 |
| 659 TEST_P(SSLClientSocketPoolTest, HttpProxyBasic) { | 669 TEST_P(SSLClientSocketPoolTest, HttpProxyBasic) { |
| 660 MockWrite writes[] = { | 670 MockWrite writes[] = { |
| 661 MockWrite(SYNCHRONOUS, | 671 MockWrite(SYNCHRONOUS, |
| 662 "CONNECT host:80 HTTP/1.1\r\n" | 672 "CONNECT host:80 HTTP/1.1\r\n" |
| 663 "Host: host\r\n" | 673 "Host: host\r\n" |
| 664 "Proxy-Connection: keep-alive\r\n" | 674 "Proxy-Connection: keep-alive\r\n" |
| 665 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 675 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 666 }; | 676 }; |
| 667 MockRead reads[] = { | 677 MockRead reads[] = { |
| 668 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 678 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 669 }; | 679 }; |
| 670 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 680 StaticSocketDataProvider data( |
| 671 arraysize(writes)); | 681 reads, arraysize(reads), writes, arraysize(writes)); |
| 672 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 682 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 673 socket_factory_.AddSocketDataProvider(&data); | 683 socket_factory_.AddSocketDataProvider(&data); |
| 674 AddAuthToCache(); | 684 AddAuthToCache(); |
| 675 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 685 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 676 socket_factory_.AddSSLSocketDataProvider(&ssl); | 686 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 677 | 687 |
| 678 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 688 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 679 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 689 scoped_refptr<SSLSocketParams> params = |
| 680 false); | 690 SSLParams(ProxyServer::SCHEME_HTTP, false); |
| 681 | 691 |
| 682 ClientSocketHandle handle; | 692 ClientSocketHandle handle; |
| 683 TestCompletionCallback callback; | 693 TestCompletionCallback callback; |
| 684 int rv = handle.Init( | 694 int rv = handle.Init( |
| 685 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 695 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 686 EXPECT_EQ(OK, rv); | 696 EXPECT_EQ(OK, rv); |
| 687 EXPECT_TRUE(handle.is_initialized()); | 697 EXPECT_TRUE(handle.is_initialized()); |
| 688 EXPECT_TRUE(handle.socket()); | 698 EXPECT_TRUE(handle.socket()); |
| 689 TestLoadTimingInfoNoDns(handle); | 699 TestLoadTimingInfoNoDns(handle); |
| 690 } | 700 } |
| 691 | 701 |
| 692 // Make sure that SSLConnectJob passes on its priority to its | 702 // Make sure that SSLConnectJob passes on its priority to its |
| 693 // transport socket on Init (for the HTTP_PROXY case). | 703 // transport socket on Init (for the HTTP_PROXY case). |
| 694 TEST_P(SSLClientSocketPoolTest, SetTransportPriorityOnInitHTTP) { | 704 TEST_P(SSLClientSocketPoolTest, SetTransportPriorityOnInitHTTP) { |
| 695 MockWrite writes[] = { | 705 MockWrite writes[] = { |
| 696 MockWrite(SYNCHRONOUS, | 706 MockWrite(SYNCHRONOUS, |
| 697 "CONNECT host:80 HTTP/1.1\r\n" | 707 "CONNECT host:80 HTTP/1.1\r\n" |
| 698 "Host: host\r\n" | 708 "Host: host\r\n" |
| 699 "Proxy-Connection: keep-alive\r\n" | 709 "Proxy-Connection: keep-alive\r\n" |
| 700 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 710 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 701 }; | 711 }; |
| 702 MockRead reads[] = { | 712 MockRead reads[] = { |
| 703 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 713 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 704 }; | 714 }; |
| 705 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 715 StaticSocketDataProvider data( |
| 706 arraysize(writes)); | 716 reads, arraysize(reads), writes, arraysize(writes)); |
| 707 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 717 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 708 socket_factory_.AddSocketDataProvider(&data); | 718 socket_factory_.AddSocketDataProvider(&data); |
| 709 AddAuthToCache(); | 719 AddAuthToCache(); |
| 710 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 720 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 711 socket_factory_.AddSSLSocketDataProvider(&ssl); | 721 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 712 | 722 |
| 713 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 723 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 714 scoped_refptr<SSLSocketParams> params = | 724 scoped_refptr<SSLSocketParams> params = |
| 715 SSLParams(ProxyServer::SCHEME_HTTP, false); | 725 SSLParams(ProxyServer::SCHEME_HTTP, false); |
| 716 | 726 |
| 717 ClientSocketHandle handle; | 727 ClientSocketHandle handle; |
| 718 TestCompletionCallback callback; | 728 TestCompletionCallback callback; |
| 719 EXPECT_EQ(OK, handle.Init("a", params, HIGHEST, callback.callback(), | 729 EXPECT_EQ(OK, |
| 720 pool_.get(), BoundNetLog())); | 730 handle.Init("a", |
| 731 params, |
| 732 HIGHEST, |
| 733 callback.callback(), |
| 734 pool_.get(), |
| 735 BoundNetLog())); |
| 721 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority()); | 736 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority()); |
| 722 } | 737 } |
| 723 | 738 |
| 724 TEST_P(SSLClientSocketPoolTest, HttpProxyBasicAsync) { | 739 TEST_P(SSLClientSocketPoolTest, HttpProxyBasicAsync) { |
| 725 MockWrite writes[] = { | 740 MockWrite writes[] = { |
| 726 MockWrite("CONNECT host:80 HTTP/1.1\r\n" | 741 MockWrite( |
| 727 "Host: host\r\n" | 742 "CONNECT host:80 HTTP/1.1\r\n" |
| 728 "Proxy-Connection: keep-alive\r\n" | 743 "Host: host\r\n" |
| 729 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 744 "Proxy-Connection: keep-alive\r\n" |
| 745 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 730 }; | 746 }; |
| 731 MockRead reads[] = { | 747 MockRead reads[] = { |
| 732 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 748 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 733 }; | 749 }; |
| 734 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 750 StaticSocketDataProvider data( |
| 735 arraysize(writes)); | 751 reads, arraysize(reads), writes, arraysize(writes)); |
| 736 socket_factory_.AddSocketDataProvider(&data); | 752 socket_factory_.AddSocketDataProvider(&data); |
| 737 AddAuthToCache(); | 753 AddAuthToCache(); |
| 738 SSLSocketDataProvider ssl(ASYNC, OK); | 754 SSLSocketDataProvider ssl(ASYNC, OK); |
| 739 socket_factory_.AddSSLSocketDataProvider(&ssl); | 755 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 740 | 756 |
| 741 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 757 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 742 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 758 scoped_refptr<SSLSocketParams> params = |
| 743 false); | 759 SSLParams(ProxyServer::SCHEME_HTTP, false); |
| 744 | 760 |
| 745 ClientSocketHandle handle; | 761 ClientSocketHandle handle; |
| 746 TestCompletionCallback callback; | 762 TestCompletionCallback callback; |
| 747 int rv = handle.Init( | 763 int rv = handle.Init( |
| 748 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 764 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 749 EXPECT_EQ(ERR_IO_PENDING, rv); | 765 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 750 EXPECT_FALSE(handle.is_initialized()); | 766 EXPECT_FALSE(handle.is_initialized()); |
| 751 EXPECT_FALSE(handle.socket()); | 767 EXPECT_FALSE(handle.socket()); |
| 752 | 768 |
| 753 EXPECT_EQ(OK, callback.WaitForResult()); | 769 EXPECT_EQ(OK, callback.WaitForResult()); |
| 754 EXPECT_TRUE(handle.is_initialized()); | 770 EXPECT_TRUE(handle.is_initialized()); |
| 755 EXPECT_TRUE(handle.socket()); | 771 EXPECT_TRUE(handle.socket()); |
| 756 TestLoadTimingInfoNoDns(handle); | 772 TestLoadTimingInfoNoDns(handle); |
| 757 } | 773 } |
| 758 | 774 |
| 759 TEST_P(SSLClientSocketPoolTest, NeedProxyAuth) { | 775 TEST_P(SSLClientSocketPoolTest, NeedProxyAuth) { |
| 760 MockWrite writes[] = { | 776 MockWrite writes[] = { |
| 761 MockWrite("CONNECT host:80 HTTP/1.1\r\n" | 777 MockWrite( |
| 762 "Host: host\r\n" | 778 "CONNECT host:80 HTTP/1.1\r\n" |
| 763 "Proxy-Connection: keep-alive\r\n\r\n"), | 779 "Host: host\r\n" |
| 780 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 764 }; | 781 }; |
| 765 MockRead reads[] = { | 782 MockRead reads[] = { |
| 766 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 783 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
| 767 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 784 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 768 MockRead("Content-Length: 10\r\n\r\n"), | 785 MockRead("Content-Length: 10\r\n\r\n"), MockRead("0123456789"), |
| 769 MockRead("0123456789"), | |
| 770 }; | 786 }; |
| 771 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 787 StaticSocketDataProvider data( |
| 772 arraysize(writes)); | 788 reads, arraysize(reads), writes, arraysize(writes)); |
| 773 socket_factory_.AddSocketDataProvider(&data); | 789 socket_factory_.AddSocketDataProvider(&data); |
| 774 SSLSocketDataProvider ssl(ASYNC, OK); | 790 SSLSocketDataProvider ssl(ASYNC, OK); |
| 775 socket_factory_.AddSSLSocketDataProvider(&ssl); | 791 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 776 | 792 |
| 777 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 793 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 778 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 794 scoped_refptr<SSLSocketParams> params = |
| 779 false); | 795 SSLParams(ProxyServer::SCHEME_HTTP, false); |
| 780 | 796 |
| 781 ClientSocketHandle handle; | 797 ClientSocketHandle handle; |
| 782 TestCompletionCallback callback; | 798 TestCompletionCallback callback; |
| 783 int rv = handle.Init( | 799 int rv = handle.Init( |
| 784 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 800 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 785 EXPECT_EQ(ERR_IO_PENDING, rv); | 801 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 786 EXPECT_FALSE(handle.is_initialized()); | 802 EXPECT_FALSE(handle.is_initialized()); |
| 787 EXPECT_FALSE(handle.socket()); | 803 EXPECT_FALSE(handle.socket()); |
| 788 | 804 |
| 789 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult()); | 805 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult()); |
| 790 EXPECT_FALSE(handle.is_initialized()); | 806 EXPECT_FALSE(handle.is_initialized()); |
| 791 EXPECT_FALSE(handle.socket()); | 807 EXPECT_FALSE(handle.socket()); |
| 792 EXPECT_FALSE(handle.is_ssl_error()); | 808 EXPECT_FALSE(handle.is_ssl_error()); |
| 793 const HttpResponseInfo& tunnel_info = handle.ssl_error_response_info(); | 809 const HttpResponseInfo& tunnel_info = handle.ssl_error_response_info(); |
| 794 EXPECT_EQ(tunnel_info.headers->response_code(), 407); | 810 EXPECT_EQ(tunnel_info.headers->response_code(), 407); |
| 795 scoped_ptr<ClientSocketHandle> tunnel_handle( | 811 scoped_ptr<ClientSocketHandle> tunnel_handle( |
| 796 handle.release_pending_http_proxy_connection()); | 812 handle.release_pending_http_proxy_connection()); |
| 797 EXPECT_TRUE(tunnel_handle->socket()); | 813 EXPECT_TRUE(tunnel_handle->socket()); |
| 798 EXPECT_FALSE(tunnel_handle->socket()->IsConnected()); | 814 EXPECT_FALSE(tunnel_handle->socket()->IsConnected()); |
| 799 } | 815 } |
| 800 | 816 |
| 801 TEST_P(SSLClientSocketPoolTest, IPPooling) { | 817 TEST_P(SSLClientSocketPoolTest, IPPooling) { |
| 802 const int kTestPort = 80; | 818 const int kTestPort = 80; |
| 803 struct TestHosts { | 819 struct TestHosts { |
| 804 std::string name; | 820 std::string name; |
| 805 std::string iplist; | 821 std::string iplist; |
| 806 SpdySessionKey key; | 822 SpdySessionKey key; |
| 807 AddressList addresses; | 823 AddressList addresses; |
| 808 } test_hosts[] = { | 824 } test_hosts[] = { |
| 809 { "www.webkit.org", "192.0.2.33,192.168.0.1,192.168.0.5" }, | 825 {"www.webkit.org", "192.0.2.33,192.168.0.1,192.168.0.5"}, |
| 810 { "code.google.com", "192.168.0.2,192.168.0.3,192.168.0.5" }, | 826 {"code.google.com", "192.168.0.2,192.168.0.3,192.168.0.5"}, |
| 811 { "js.webkit.org", "192.168.0.4,192.168.0.1,192.0.2.33" }, | 827 {"js.webkit.org", "192.168.0.4,192.168.0.1,192.0.2.33"}, |
| 812 }; | 828 }; |
| 813 | 829 |
| 814 host_resolver_.set_synchronous_mode(true); | 830 host_resolver_.set_synchronous_mode(true); |
| 815 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_hosts); i++) { | 831 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_hosts); i++) { |
| 816 host_resolver_.rules()->AddIPLiteralRule( | 832 host_resolver_.rules()->AddIPLiteralRule( |
| 817 test_hosts[i].name, test_hosts[i].iplist, std::string()); | 833 test_hosts[i].name, test_hosts[i].iplist, std::string()); |
| 818 | 834 |
| 819 // This test requires that the HostResolver cache be populated. Normal | 835 // This test requires that the HostResolver cache be populated. Normal |
| 820 // code would have done this already, but we do it manually. | 836 // code would have done this already, but we do it manually. |
| 821 HostResolver::RequestInfo info(HostPortPair(test_hosts[i].name, kTestPort)); | 837 HostResolver::RequestInfo info(HostPortPair(test_hosts[i].name, kTestPort)); |
| 822 host_resolver_.Resolve(info, | 838 host_resolver_.Resolve(info, |
| 823 DEFAULT_PRIORITY, | 839 DEFAULT_PRIORITY, |
| 824 &test_hosts[i].addresses, | 840 &test_hosts[i].addresses, |
| 825 CompletionCallback(), | 841 CompletionCallback(), |
| 826 NULL, | 842 NULL, |
| 827 BoundNetLog()); | 843 BoundNetLog()); |
| 828 | 844 |
| 829 // Setup a SpdySessionKey | 845 // Setup a SpdySessionKey |
| 830 test_hosts[i].key = SpdySessionKey( | 846 test_hosts[i].key = |
| 831 HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct(), | 847 SpdySessionKey(HostPortPair(test_hosts[i].name, kTestPort), |
| 832 PRIVACY_MODE_DISABLED); | 848 ProxyServer::Direct(), |
| 849 PRIVACY_MODE_DISABLED); |
| 833 } | 850 } |
| 834 | 851 |
| 835 MockRead reads[] = { | 852 MockRead reads[] = { |
| 836 MockRead(ASYNC, ERR_IO_PENDING), | 853 MockRead(ASYNC, ERR_IO_PENDING), |
| 837 }; | 854 }; |
| 838 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 855 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
| 839 socket_factory_.AddSocketDataProvider(&data); | 856 socket_factory_.AddSocketDataProvider(&data); |
| 840 SSLSocketDataProvider ssl(ASYNC, OK); | 857 SSLSocketDataProvider ssl(ASYNC, OK); |
| 841 ssl.cert = X509Certificate::CreateFromBytes( | 858 ssl.cert = X509Certificate::CreateFromBytes( |
| 842 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)); | 859 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)); |
| 843 ssl.SetNextProto(GetParam()); | 860 ssl.SetNextProto(GetParam()); |
| 844 socket_factory_.AddSSLSocketDataProvider(&ssl); | 861 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 845 | 862 |
| 846 CreatePool(true /* tcp pool */, false, false); | 863 CreatePool(true /* tcp pool */, false, false); |
| 847 base::WeakPtr<SpdySession> spdy_session = | 864 base::WeakPtr<SpdySession> spdy_session = |
| 848 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog()); | 865 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog()); |
| 849 | 866 |
| 850 EXPECT_TRUE( | 867 EXPECT_TRUE(HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key)); |
| 851 HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key)); | |
| 852 EXPECT_FALSE( | 868 EXPECT_FALSE( |
| 853 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key)); | 869 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key)); |
| 854 EXPECT_TRUE( | 870 EXPECT_TRUE(HasSpdySession(session_->spdy_session_pool(), test_hosts[2].key)); |
| 855 HasSpdySession(session_->spdy_session_pool(), test_hosts[2].key)); | |
| 856 | 871 |
| 857 session_->spdy_session_pool()->CloseAllSessions(); | 872 session_->spdy_session_pool()->CloseAllSessions(); |
| 858 } | 873 } |
| 859 | 874 |
| 860 void SSLClientSocketPoolTest::TestIPPoolingDisabled( | 875 void SSLClientSocketPoolTest::TestIPPoolingDisabled( |
| 861 SSLSocketDataProvider* ssl) { | 876 SSLSocketDataProvider* ssl) { |
| 862 const int kTestPort = 80; | 877 const int kTestPort = 80; |
| 863 struct TestHosts { | 878 struct TestHosts { |
| 864 std::string name; | 879 std::string name; |
| 865 std::string iplist; | 880 std::string iplist; |
| 866 SpdySessionKey key; | 881 SpdySessionKey key; |
| 867 AddressList addresses; | 882 AddressList addresses; |
| 868 } test_hosts[] = { | 883 } test_hosts[] = { |
| 869 { "www.webkit.org", "192.0.2.33,192.168.0.1,192.168.0.5" }, | 884 {"www.webkit.org", "192.0.2.33,192.168.0.1,192.168.0.5"}, |
| 870 { "js.webkit.com", "192.168.0.4,192.168.0.1,192.0.2.33" }, | 885 {"js.webkit.com", "192.168.0.4,192.168.0.1,192.0.2.33"}, |
| 871 }; | 886 }; |
| 872 | 887 |
| 873 TestCompletionCallback callback; | 888 TestCompletionCallback callback; |
| 874 int rv; | 889 int rv; |
| 875 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_hosts); i++) { | 890 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_hosts); i++) { |
| 876 host_resolver_.rules()->AddIPLiteralRule( | 891 host_resolver_.rules()->AddIPLiteralRule( |
| 877 test_hosts[i].name, test_hosts[i].iplist, std::string()); | 892 test_hosts[i].name, test_hosts[i].iplist, std::string()); |
| 878 | 893 |
| 879 // This test requires that the HostResolver cache be populated. Normal | 894 // This test requires that the HostResolver cache be populated. Normal |
| 880 // code would have done this already, but we do it manually. | 895 // code would have done this already, but we do it manually. |
| 881 HostResolver::RequestInfo info(HostPortPair(test_hosts[i].name, kTestPort)); | 896 HostResolver::RequestInfo info(HostPortPair(test_hosts[i].name, kTestPort)); |
| 882 rv = host_resolver_.Resolve(info, | 897 rv = host_resolver_.Resolve(info, |
| 883 DEFAULT_PRIORITY, | 898 DEFAULT_PRIORITY, |
| 884 &test_hosts[i].addresses, | 899 &test_hosts[i].addresses, |
| 885 callback.callback(), | 900 callback.callback(), |
| 886 NULL, | 901 NULL, |
| 887 BoundNetLog()); | 902 BoundNetLog()); |
| 888 EXPECT_EQ(OK, callback.GetResult(rv)); | 903 EXPECT_EQ(OK, callback.GetResult(rv)); |
| 889 | 904 |
| 890 // Setup a SpdySessionKey | 905 // Setup a SpdySessionKey |
| 891 test_hosts[i].key = SpdySessionKey( | 906 test_hosts[i].key = |
| 892 HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct(), | 907 SpdySessionKey(HostPortPair(test_hosts[i].name, kTestPort), |
| 893 PRIVACY_MODE_DISABLED); | 908 ProxyServer::Direct(), |
| 909 PRIVACY_MODE_DISABLED); |
| 894 } | 910 } |
| 895 | 911 |
| 896 MockRead reads[] = { | 912 MockRead reads[] = { |
| 897 MockRead(ASYNC, ERR_IO_PENDING), | 913 MockRead(ASYNC, ERR_IO_PENDING), |
| 898 }; | 914 }; |
| 899 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 915 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
| 900 socket_factory_.AddSocketDataProvider(&data); | 916 socket_factory_.AddSocketDataProvider(&data); |
| 901 socket_factory_.AddSSLSocketDataProvider(ssl); | 917 socket_factory_.AddSSLSocketDataProvider(ssl); |
| 902 | 918 |
| 903 CreatePool(true /* tcp pool */, false, false); | 919 CreatePool(true /* tcp pool */, false, false); |
| 904 base::WeakPtr<SpdySession> spdy_session = | 920 base::WeakPtr<SpdySession> spdy_session = |
| 905 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog()); | 921 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog()); |
| 906 | 922 |
| 907 EXPECT_TRUE( | 923 EXPECT_TRUE(HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key)); |
| 908 HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key)); | |
| 909 EXPECT_FALSE( | 924 EXPECT_FALSE( |
| 910 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key)); | 925 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key)); |
| 911 | 926 |
| 912 session_->spdy_session_pool()->CloseAllSessions(); | 927 session_->spdy_session_pool()->CloseAllSessions(); |
| 913 } | 928 } |
| 914 | 929 |
| 915 // Verifies that an SSL connection with client authentication disables SPDY IP | 930 // Verifies that an SSL connection with client authentication disables SPDY IP |
| 916 // pooling. | 931 // pooling. |
| 917 TEST_P(SSLClientSocketPoolTest, IPPoolingClientCert) { | 932 TEST_P(SSLClientSocketPoolTest, IPPoolingClientCert) { |
| 918 SSLSocketDataProvider ssl(ASYNC, OK); | 933 SSLSocketDataProvider ssl(ASYNC, OK); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 929 ssl.channel_id_sent = true; | 944 ssl.channel_id_sent = true; |
| 930 ssl.SetNextProto(GetParam()); | 945 ssl.SetNextProto(GetParam()); |
| 931 TestIPPoolingDisabled(&ssl); | 946 TestIPPoolingDisabled(&ssl); |
| 932 } | 947 } |
| 933 | 948 |
| 934 // It would be nice to also test the timeouts in SSLClientSocketPool. | 949 // It would be nice to also test the timeouts in SSLClientSocketPool. |
| 935 | 950 |
| 936 } // namespace | 951 } // namespace |
| 937 | 952 |
| 938 } // namespace net | 953 } // namespace net |
| OLD | NEW |