| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/http/http_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/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 const scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_; | 209 const scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_; |
| 210 HttpServerPropertiesImpl http_server_properties_; | 210 HttpServerPropertiesImpl http_server_properties_; |
| 211 const scoped_refptr<HttpNetworkSession> session_; | 211 const scoped_refptr<HttpNetworkSession> session_; |
| 212 ClientSocketPoolHistograms http_proxy_histograms_; | 212 ClientSocketPoolHistograms http_proxy_histograms_; |
| 213 | 213 |
| 214 protected: | 214 protected: |
| 215 scoped_ptr<SSLSocketDataProvider> ssl_data_; | 215 scoped_ptr<SSLSocketDataProvider> ssl_data_; |
| 216 scoped_refptr<DeterministicSocketData> data_; | 216 scoped_refptr<DeterministicSocketData> data_; |
| 217 HttpProxyClientSocketPool pool_; | 217 HttpProxyClientSocketPool pool_; |
| 218 ClientSocketHandle handle_; | 218 ClientSocketHandle handle_; |
| 219 TestOldCompletionCallback callback_; | 219 TestCompletionCallback callback_; |
| 220 }; | 220 }; |
| 221 | 221 |
| 222 //----------------------------------------------------------------------------- | 222 //----------------------------------------------------------------------------- |
| 223 // All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY) | 223 // All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY) |
| 224 // and SPDY. | 224 // and SPDY. |
| 225 INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolTests, | 225 INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolTests, |
| 226 HttpProxyClientSocketPoolTest, | 226 HttpProxyClientSocketPoolTest, |
| 227 ::testing::Values(HTTP, HTTPS, SPDY)); | 227 ::testing::Values(HTTP, HTTPS, SPDY)); |
| 228 | 228 |
| 229 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { | 229 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { |
| 230 Initialize(false, NULL, 0, NULL, 0, NULL, 0, NULL, 0); | 230 Initialize(false, NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
| 231 | 231 |
| 232 int rv = handle_.Init("a", GetNoTunnelParams(), LOW, NULL, &pool_, | 232 int rv = handle_.Init("a", GetNoTunnelParams(), LOW, CompletionCallback(), |
| 233 BoundNetLog()); | 233 &pool_, BoundNetLog()); |
| 234 EXPECT_EQ(OK, rv); | 234 EXPECT_EQ(OK, rv); |
| 235 EXPECT_TRUE(handle_.is_initialized()); | 235 EXPECT_TRUE(handle_.is_initialized()); |
| 236 ASSERT_TRUE(handle_.socket()); | 236 ASSERT_TRUE(handle_.socket()); |
| 237 HttpProxyClientSocket* tunnel_socket = | 237 HttpProxyClientSocket* tunnel_socket = |
| 238 static_cast<HttpProxyClientSocket*>(handle_.socket()); | 238 static_cast<HttpProxyClientSocket*>(handle_.socket()); |
| 239 EXPECT_TRUE(tunnel_socket->IsConnected()); | 239 EXPECT_TRUE(tunnel_socket->IsConnected()); |
| 240 } | 240 } |
| 241 | 241 |
| 242 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { | 242 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { |
| 243 MockWrite writes[] = { | 243 MockWrite writes[] = { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 MockRead spdy_reads[] = { | 277 MockRead spdy_reads[] = { |
| 278 CreateMockWrite(*resp, 1, true), | 278 CreateMockWrite(*resp, 1, true), |
| 279 MockRead(true, 0, 3) | 279 MockRead(true, 0, 3) |
| 280 }; | 280 }; |
| 281 | 281 |
| 282 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), | 282 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), |
| 283 spdy_reads, arraysize(spdy_reads), spdy_writes, | 283 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 284 arraysize(spdy_writes)); | 284 arraysize(spdy_writes)); |
| 285 | 285 |
| 286 data_->StopAfter(4); | 286 data_->StopAfter(4); |
| 287 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 287 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
| 288 BoundNetLog()); | 288 &pool_, BoundNetLog()); |
| 289 EXPECT_EQ(ERR_IO_PENDING, rv); | 289 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 290 EXPECT_FALSE(handle_.is_initialized()); | 290 EXPECT_FALSE(handle_.is_initialized()); |
| 291 EXPECT_FALSE(handle_.socket()); | 291 EXPECT_FALSE(handle_.socket()); |
| 292 | 292 |
| 293 data_->RunFor(GetParam() == SPDY ? 2 : 4); | 293 data_->RunFor(GetParam() == SPDY ? 2 : 4); |
| 294 rv = callback_.WaitForResult(); | 294 rv = callback_.WaitForResult(); |
| 295 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); | 295 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); |
| 296 EXPECT_TRUE(handle_.is_initialized()); | 296 EXPECT_TRUE(handle_.is_initialized()); |
| 297 ASSERT_TRUE(handle_.socket()); | 297 ASSERT_TRUE(handle_.socket()); |
| 298 if (GetParam() != SPDY) { | 298 if (GetParam() != SPDY) { |
| 299 HttpProxyClientSocket* tunnel_socket = | 299 HttpProxyClientSocket* tunnel_socket = |
| 300 static_cast<HttpProxyClientSocket*>(handle_.socket()); | 300 static_cast<HttpProxyClientSocket*>(handle_.socket()); |
| 301 EXPECT_FALSE(tunnel_socket->IsConnected()); | 301 EXPECT_FALSE(tunnel_socket->IsConnected()); |
| 302 EXPECT_FALSE(tunnel_socket->using_spdy()); | 302 EXPECT_FALSE(tunnel_socket->using_spdy()); |
| 303 } | 303 } |
| 304 } | 304 } |
| 305 | 305 |
| 306 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) { | 306 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) { |
| 307 // It's pretty much impossible to make the SPDY case becave synchronously | 307 // It's pretty much impossible to make the SPDY case behave synchronously |
| 308 // so we skip this test for SPDY | 308 // so we skip this test for SPDY |
| 309 if (GetParam() == SPDY) | 309 if (GetParam() == SPDY) |
| 310 return; | 310 return; |
| 311 MockWrite writes[] = { | 311 MockWrite writes[] = { |
| 312 MockWrite(false, 0, | 312 MockWrite(false, 0, |
| 313 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 313 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 314 "Host: www.google.com\r\n" | 314 "Host: www.google.com\r\n" |
| 315 "Proxy-Connection: keep-alive\r\n" | 315 "Proxy-Connection: keep-alive\r\n" |
| 316 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 316 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 317 }; | 317 }; |
| 318 MockRead reads[] = { | 318 MockRead reads[] = { |
| 319 MockRead(false, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 319 MockRead(false, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 320 }; | 320 }; |
| 321 | 321 |
| 322 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), NULL, 0, | 322 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), NULL, 0, |
| 323 NULL, 0); | 323 NULL, 0); |
| 324 AddAuthToCache(); | 324 AddAuthToCache(); |
| 325 | 325 |
| 326 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 326 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
| 327 BoundNetLog()); | 327 &pool_, BoundNetLog()); |
| 328 EXPECT_EQ(OK, rv); | 328 EXPECT_EQ(OK, rv); |
| 329 EXPECT_TRUE(handle_.is_initialized()); | 329 EXPECT_TRUE(handle_.is_initialized()); |
| 330 ASSERT_TRUE(handle_.socket()); | 330 ASSERT_TRUE(handle_.socket()); |
| 331 HttpProxyClientSocket* tunnel_socket = | 331 HttpProxyClientSocket* tunnel_socket = |
| 332 static_cast<HttpProxyClientSocket*>(handle_.socket()); | 332 static_cast<HttpProxyClientSocket*>(handle_.socket()); |
| 333 EXPECT_TRUE(tunnel_socket->IsConnected()); | 333 EXPECT_TRUE(tunnel_socket->IsConnected()); |
| 334 } | 334 } |
| 335 | 335 |
| 336 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { | 336 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { |
| 337 MockWrite writes[] = { | 337 MockWrite writes[] = { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 353 MockRead spdy_reads[] = { | 353 MockRead spdy_reads[] = { |
| 354 CreateMockRead(*resp, 1, true), | 354 CreateMockRead(*resp, 1, true), |
| 355 MockRead(true, 0, 2) | 355 MockRead(true, 0, 2) |
| 356 }; | 356 }; |
| 357 | 357 |
| 358 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), | 358 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), |
| 359 spdy_reads, arraysize(spdy_reads), spdy_writes, | 359 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 360 arraysize(spdy_writes)); | 360 arraysize(spdy_writes)); |
| 361 AddAuthToCache(); | 361 AddAuthToCache(); |
| 362 | 362 |
| 363 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 363 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
| 364 BoundNetLog()); | 364 &pool_, BoundNetLog()); |
| 365 EXPECT_EQ(ERR_IO_PENDING, rv); | 365 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 366 EXPECT_FALSE(handle_.is_initialized()); | 366 EXPECT_FALSE(handle_.is_initialized()); |
| 367 EXPECT_FALSE(handle_.socket()); | 367 EXPECT_FALSE(handle_.socket()); |
| 368 | 368 |
| 369 data_->RunFor(2); | 369 data_->RunFor(2); |
| 370 EXPECT_EQ(OK, callback_.WaitForResult()); | 370 EXPECT_EQ(OK, callback_.WaitForResult()); |
| 371 EXPECT_TRUE(handle_.is_initialized()); | 371 EXPECT_TRUE(handle_.is_initialized()); |
| 372 ASSERT_TRUE(handle_.socket()); | 372 ASSERT_TRUE(handle_.socket()); |
| 373 HttpProxyClientSocket* tunnel_socket = | 373 HttpProxyClientSocket* tunnel_socket = |
| 374 static_cast<HttpProxyClientSocket*>(handle_.socket()); | 374 static_cast<HttpProxyClientSocket*>(handle_.socket()); |
| 375 EXPECT_TRUE(tunnel_socket->IsConnected()); | 375 EXPECT_TRUE(tunnel_socket->IsConnected()); |
| 376 } | 376 } |
| 377 | 377 |
| 378 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { | 378 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { |
| 379 if (GetParam() == SPDY) return; | 379 if (GetParam() == SPDY) return; |
| 380 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); | 380 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); |
| 381 data_->set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED)); | 381 data_->set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED)); |
| 382 | 382 |
| 383 socket_factory().AddSocketDataProvider(data_.get()); | 383 socket_factory().AddSocketDataProvider(data_.get()); |
| 384 | 384 |
| 385 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 385 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
| 386 BoundNetLog()); | 386 &pool_, BoundNetLog()); |
| 387 EXPECT_EQ(ERR_IO_PENDING, rv); | 387 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 388 EXPECT_FALSE(handle_.is_initialized()); | 388 EXPECT_FALSE(handle_.is_initialized()); |
| 389 EXPECT_FALSE(handle_.socket()); | 389 EXPECT_FALSE(handle_.socket()); |
| 390 | 390 |
| 391 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); | 391 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); |
| 392 | 392 |
| 393 EXPECT_FALSE(handle_.is_initialized()); | 393 EXPECT_FALSE(handle_.is_initialized()); |
| 394 EXPECT_FALSE(handle_.socket()); | 394 EXPECT_FALSE(handle_.socket()); |
| 395 } | 395 } |
| 396 | 396 |
| 397 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { | 397 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { |
| 398 if (GetParam() == HTTP) return; | 398 if (GetParam() == HTTP) return; |
| 399 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); | 399 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); |
| 400 data_->set_connect_data(MockConnect(true, OK)); | 400 data_->set_connect_data(MockConnect(true, OK)); |
| 401 socket_factory().AddSocketDataProvider(data_.get()); | 401 socket_factory().AddSocketDataProvider(data_.get()); |
| 402 | 402 |
| 403 ssl_data_.reset(new SSLSocketDataProvider(true, | 403 ssl_data_.reset(new SSLSocketDataProvider(true, |
| 404 ERR_CERT_AUTHORITY_INVALID)); | 404 ERR_CERT_AUTHORITY_INVALID)); |
| 405 if (GetParam() == SPDY) { | 405 if (GetParam() == SPDY) { |
| 406 InitializeSpdySsl(); | 406 InitializeSpdySsl(); |
| 407 } | 407 } |
| 408 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); | 408 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); |
| 409 | 409 |
| 410 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 410 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
| 411 BoundNetLog()); | 411 &pool_, BoundNetLog()); |
| 412 EXPECT_EQ(ERR_IO_PENDING, rv); | 412 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 413 EXPECT_FALSE(handle_.is_initialized()); | 413 EXPECT_FALSE(handle_.is_initialized()); |
| 414 EXPECT_FALSE(handle_.socket()); | 414 EXPECT_FALSE(handle_.socket()); |
| 415 | 415 |
| 416 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); | 416 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); |
| 417 | 417 |
| 418 EXPECT_FALSE(handle_.is_initialized()); | 418 EXPECT_FALSE(handle_.is_initialized()); |
| 419 EXPECT_FALSE(handle_.socket()); | 419 EXPECT_FALSE(handle_.socket()); |
| 420 } | 420 } |
| 421 | 421 |
| 422 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { | 422 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { |
| 423 if (GetParam() == HTTP) return; | 423 if (GetParam() == HTTP) return; |
| 424 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); | 424 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); |
| 425 data_->set_connect_data(MockConnect(true, OK)); | 425 data_->set_connect_data(MockConnect(true, OK)); |
| 426 socket_factory().AddSocketDataProvider(data_.get()); | 426 socket_factory().AddSocketDataProvider(data_.get()); |
| 427 | 427 |
| 428 ssl_data_.reset(new SSLSocketDataProvider(true, | 428 ssl_data_.reset(new SSLSocketDataProvider(true, |
| 429 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); | 429 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
| 430 if (GetParam() == SPDY) { | 430 if (GetParam() == SPDY) { |
| 431 InitializeSpdySsl(); | 431 InitializeSpdySsl(); |
| 432 } | 432 } |
| 433 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); | 433 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); |
| 434 | 434 |
| 435 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 435 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
| 436 BoundNetLog()); | 436 &pool_, BoundNetLog()); |
| 437 EXPECT_EQ(ERR_IO_PENDING, rv); | 437 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 438 EXPECT_FALSE(handle_.is_initialized()); | 438 EXPECT_FALSE(handle_.is_initialized()); |
| 439 EXPECT_FALSE(handle_.socket()); | 439 EXPECT_FALSE(handle_.socket()); |
| 440 | 440 |
| 441 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); | 441 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); |
| 442 | 442 |
| 443 EXPECT_FALSE(handle_.is_initialized()); | 443 EXPECT_FALSE(handle_.is_initialized()); |
| 444 EXPECT_FALSE(handle_.socket()); | 444 EXPECT_FALSE(handle_.socket()); |
| 445 } | 445 } |
| 446 | 446 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 463 }; | 463 }; |
| 464 MockRead spdy_reads[] = { | 464 MockRead spdy_reads[] = { |
| 465 MockRead(true, ERR_CONNECTION_CLOSED, 1), | 465 MockRead(true, ERR_CONNECTION_CLOSED, 1), |
| 466 }; | 466 }; |
| 467 | 467 |
| 468 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), | 468 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), |
| 469 spdy_reads, arraysize(spdy_reads), spdy_writes, | 469 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 470 arraysize(spdy_writes)); | 470 arraysize(spdy_writes)); |
| 471 AddAuthToCache(); | 471 AddAuthToCache(); |
| 472 | 472 |
| 473 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 473 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
| 474 BoundNetLog()); | 474 &pool_, BoundNetLog()); |
| 475 EXPECT_EQ(ERR_IO_PENDING, rv); | 475 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 476 EXPECT_FALSE(handle_.is_initialized()); | 476 EXPECT_FALSE(handle_.is_initialized()); |
| 477 EXPECT_FALSE(handle_.socket()); | 477 EXPECT_FALSE(handle_.socket()); |
| 478 | 478 |
| 479 data_->RunFor(3); | 479 data_->RunFor(3); |
| 480 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); | 480 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); |
| 481 EXPECT_FALSE(handle_.is_initialized()); | 481 EXPECT_FALSE(handle_.is_initialized()); |
| 482 EXPECT_FALSE(handle_.socket()); | 482 EXPECT_FALSE(handle_.socket()); |
| 483 } | 483 } |
| 484 | 484 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 504 MockRead spdy_reads[] = { | 504 MockRead spdy_reads[] = { |
| 505 CreateMockRead(*resp, 1, true), | 505 CreateMockRead(*resp, 1, true), |
| 506 MockRead(true, 0, 3), | 506 MockRead(true, 0, 3), |
| 507 }; | 507 }; |
| 508 | 508 |
| 509 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), | 509 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), |
| 510 spdy_reads, arraysize(spdy_reads), spdy_writes, | 510 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 511 arraysize(spdy_writes)); | 511 arraysize(spdy_writes)); |
| 512 AddAuthToCache(); | 512 AddAuthToCache(); |
| 513 | 513 |
| 514 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 514 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
| 515 BoundNetLog()); | 515 &pool_, BoundNetLog()); |
| 516 EXPECT_EQ(ERR_IO_PENDING, rv); | 516 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 517 EXPECT_FALSE(handle_.is_initialized()); | 517 EXPECT_FALSE(handle_.is_initialized()); |
| 518 EXPECT_FALSE(handle_.socket()); | 518 EXPECT_FALSE(handle_.socket()); |
| 519 | 519 |
| 520 data_->RunFor(2); | 520 data_->RunFor(2); |
| 521 | 521 |
| 522 rv = callback_.WaitForResult(); | 522 rv = callback_.WaitForResult(); |
| 523 if (GetParam() == HTTP) { | 523 if (GetParam() == HTTP) { |
| 524 // HTTP Proxy CONNECT responses are not trustworthy | 524 // HTTP Proxy CONNECT responses are not trustworthy |
| 525 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 525 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
| 526 EXPECT_FALSE(handle_.is_initialized()); | 526 EXPECT_FALSE(handle_.is_initialized()); |
| 527 EXPECT_FALSE(handle_.socket()); | 527 EXPECT_FALSE(handle_.socket()); |
| 528 } else { | 528 } else { |
| 529 // HTTPS or SPDY Proxy CONNECT responses are trustworthy | 529 // HTTPS or SPDY Proxy CONNECT responses are trustworthy |
| 530 EXPECT_EQ(ERR_HTTPS_PROXY_TUNNEL_RESPONSE, rv); | 530 EXPECT_EQ(ERR_HTTPS_PROXY_TUNNEL_RESPONSE, rv); |
| 531 EXPECT_TRUE(handle_.is_initialized()); | 531 EXPECT_TRUE(handle_.is_initialized()); |
| 532 EXPECT_TRUE(handle_.socket()); | 532 EXPECT_TRUE(handle_.socket()); |
| 533 } | 533 } |
| 534 } | 534 } |
| 535 | 535 |
| 536 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. | 536 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. |
| 537 | 537 |
| 538 } // namespace net | 538 } // namespace net |
| OLD | NEW |