| 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 <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 NULL /* channel_id_store */, | 64 NULL /* channel_id_store */, |
| 65 NULL /* transport_security_state */, | 65 NULL /* transport_security_state */, |
| 66 NULL /* cert_transparency_verifier */, | 66 NULL /* cert_transparency_verifier */, |
| 67 NULL /* ct_policy_enforcer */, | 67 NULL /* ct_policy_enforcer */, |
| 68 std::string() /* ssl_session_cache_shard */, | 68 std::string() /* ssl_session_cache_shard */, |
| 69 session_deps_.socket_factory.get(), | 69 session_deps_.socket_factory.get(), |
| 70 &transport_socket_pool_, | 70 &transport_socket_pool_, |
| 71 NULL, | 71 NULL, |
| 72 NULL, | 72 NULL, |
| 73 session_deps_.ssl_config_service.get(), | 73 session_deps_.ssl_config_service.get(), |
| 74 BoundNetLog().net_log()), | 74 NetLogWithSource().net_log()), |
| 75 pool_(kMaxSockets, | 75 pool_(kMaxSockets, |
| 76 kMaxSocketsPerGroup, | 76 kMaxSocketsPerGroup, |
| 77 &transport_socket_pool_, | 77 &transport_socket_pool_, |
| 78 &ssl_socket_pool_, | 78 &ssl_socket_pool_, |
| 79 NULL) { | 79 NULL) { |
| 80 session_ = CreateNetworkSession(); | 80 session_ = CreateNetworkSession(); |
| 81 } | 81 } |
| 82 | 82 |
| 83 virtual ~HttpProxyClientSocketPoolTest() {} | 83 virtual ~HttpProxyClientSocketPoolTest() {} |
| 84 | 84 |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 INSTANTIATE_TEST_CASE_P(HttpProxyType, | 214 INSTANTIATE_TEST_CASE_P(HttpProxyType, |
| 215 HttpProxyClientSocketPoolTest, | 215 HttpProxyClientSocketPoolTest, |
| 216 ::testing::Values(HTTP, HTTPS, SPDY)); | 216 ::testing::Values(HTTP, HTTPS, SPDY)); |
| 217 | 217 |
| 218 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { | 218 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { |
| 219 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); | 219 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
| 220 | 220 |
| 221 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 221 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| 222 int rv = handle_.Init("a", CreateNoTunnelParams(proxy_delegate.get()), LOW, | 222 int rv = handle_.Init("a", CreateNoTunnelParams(proxy_delegate.get()), LOW, |
| 223 ClientSocketPool::RespectLimits::ENABLED, | 223 ClientSocketPool::RespectLimits::ENABLED, |
| 224 CompletionCallback(), &pool_, BoundNetLog()); | 224 CompletionCallback(), &pool_, NetLogWithSource()); |
| 225 EXPECT_THAT(rv, IsOk()); | 225 EXPECT_THAT(rv, IsOk()); |
| 226 EXPECT_TRUE(handle_.is_initialized()); | 226 EXPECT_TRUE(handle_.is_initialized()); |
| 227 ASSERT_TRUE(handle_.socket()); | 227 ASSERT_TRUE(handle_.socket()); |
| 228 EXPECT_TRUE(handle_.socket()->IsConnected()); | 228 EXPECT_TRUE(handle_.socket()->IsConnected()); |
| 229 EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called()); | 229 EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called()); |
| 230 EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called()); | 230 EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called()); |
| 231 EXPECT_TRUE(proxy_delegate->on_tunnel_request_completed_called()); | 231 EXPECT_TRUE(proxy_delegate->on_tunnel_request_completed_called()); |
| 232 } | 232 } |
| 233 | 233 |
| 234 // Make sure that HttpProxyConnectJob passes on its priority to its | 234 // Make sure that HttpProxyConnectJob passes on its priority to its |
| 235 // (non-SSL) socket request on Init. | 235 // (non-SSL) socket request on Init. |
| 236 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { | 236 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { |
| 237 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); | 237 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
| 238 EXPECT_EQ(OK, handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST, | 238 EXPECT_EQ(OK, handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST, |
| 239 ClientSocketPool::RespectLimits::ENABLED, | 239 ClientSocketPool::RespectLimits::ENABLED, |
| 240 CompletionCallback(), &pool_, BoundNetLog())); | 240 CompletionCallback(), &pool_, NetLogWithSource())); |
| 241 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); | 241 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); |
| 242 } | 242 } |
| 243 | 243 |
| 244 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { | 244 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { |
| 245 MockWrite writes[] = { | 245 MockWrite writes[] = { |
| 246 MockWrite(ASYNC, 0, | 246 MockWrite(ASYNC, 0, |
| 247 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 247 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 248 "Host: www.google.com:443\r\n" | 248 "Host: www.google.com:443\r\n" |
| 249 "Proxy-Connection: keep-alive\r\n\r\n"), | 249 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 250 }; | 250 }; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 270 spdy_util_.ConstructSpdyReply(1, std::move(resp_block))); | 270 spdy_util_.ConstructSpdyReply(1, std::move(resp_block))); |
| 271 MockRead spdy_reads[] = {CreateMockRead(resp, 1, ASYNC), | 271 MockRead spdy_reads[] = {CreateMockRead(resp, 1, ASYNC), |
| 272 MockRead(ASYNC, 0, 3)}; | 272 MockRead(ASYNC, 0, 3)}; |
| 273 | 273 |
| 274 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 274 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 275 spdy_reads, arraysize(spdy_reads), spdy_writes, | 275 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 276 arraysize(spdy_writes)); | 276 arraysize(spdy_writes)); |
| 277 | 277 |
| 278 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 278 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 279 ClientSocketPool::RespectLimits::ENABLED, | 279 ClientSocketPool::RespectLimits::ENABLED, |
| 280 callback_.callback(), &pool_, BoundNetLog()); | 280 callback_.callback(), &pool_, NetLogWithSource()); |
| 281 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 281 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 282 EXPECT_FALSE(handle_.is_initialized()); | 282 EXPECT_FALSE(handle_.is_initialized()); |
| 283 EXPECT_FALSE(handle_.socket()); | 283 EXPECT_FALSE(handle_.socket()); |
| 284 | 284 |
| 285 rv = callback_.WaitForResult(); | 285 rv = callback_.WaitForResult(); |
| 286 EXPECT_THAT(rv, IsError(ERR_PROXY_AUTH_REQUESTED)); | 286 EXPECT_THAT(rv, IsError(ERR_PROXY_AUTH_REQUESTED)); |
| 287 EXPECT_TRUE(handle_.is_initialized()); | 287 EXPECT_TRUE(handle_.is_initialized()); |
| 288 ASSERT_TRUE(handle_.socket()); | 288 ASSERT_TRUE(handle_.socket()); |
| 289 ProxyClientSocket* tunnel_socket = | 289 ProxyClientSocket* tunnel_socket = |
| 290 static_cast<ProxyClientSocket*>(handle_.socket()); | 290 static_cast<ProxyClientSocket*>(handle_.socket()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 319 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 319 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 320 }; | 320 }; |
| 321 | 321 |
| 322 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0, | 322 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0, |
| 323 NULL, 0); | 323 NULL, 0); |
| 324 AddAuthToCache(); | 324 AddAuthToCache(); |
| 325 | 325 |
| 326 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 326 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| 327 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, | 327 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, |
| 328 ClientSocketPool::RespectLimits::ENABLED, | 328 ClientSocketPool::RespectLimits::ENABLED, |
| 329 callback_.callback(), &pool_, BoundNetLog()); | 329 callback_.callback(), &pool_, NetLogWithSource()); |
| 330 EXPECT_THAT(rv, IsOk()); | 330 EXPECT_THAT(rv, IsOk()); |
| 331 EXPECT_TRUE(handle_.is_initialized()); | 331 EXPECT_TRUE(handle_.is_initialized()); |
| 332 ASSERT_TRUE(handle_.socket()); | 332 ASSERT_TRUE(handle_.socket()); |
| 333 EXPECT_TRUE(handle_.socket()->IsConnected()); | 333 EXPECT_TRUE(handle_.socket()->IsConnected()); |
| 334 proxy_delegate->VerifyOnTunnelHeadersReceived( | 334 proxy_delegate->VerifyOnTunnelHeadersReceived( |
| 335 "www.google.com:443", | 335 "www.google.com:443", |
| 336 proxy_host_port.c_str(), | 336 proxy_host_port.c_str(), |
| 337 "HTTP/1.1 200 Connection Established"); | 337 "HTTP/1.1 200 Connection Established"); |
| 338 proxy_delegate->VerifyOnTunnelRequestCompleted( | 338 proxy_delegate->VerifyOnTunnelRequestCompleted( |
| 339 "www.google.com:443", | 339 "www.google.com:443", |
| (...skipping 30 matching lines...) Expand all Loading... |
| 370 }; | 370 }; |
| 371 | 371 |
| 372 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 372 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 373 spdy_reads, arraysize(spdy_reads), spdy_writes, | 373 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 374 arraysize(spdy_writes)); | 374 arraysize(spdy_writes)); |
| 375 AddAuthToCache(); | 375 AddAuthToCache(); |
| 376 | 376 |
| 377 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 377 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| 378 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, | 378 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, |
| 379 ClientSocketPool::RespectLimits::ENABLED, | 379 ClientSocketPool::RespectLimits::ENABLED, |
| 380 callback_.callback(), &pool_, BoundNetLog()); | 380 callback_.callback(), &pool_, NetLogWithSource()); |
| 381 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 381 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 382 EXPECT_FALSE(handle_.is_initialized()); | 382 EXPECT_FALSE(handle_.is_initialized()); |
| 383 EXPECT_FALSE(handle_.socket()); | 383 EXPECT_FALSE(handle_.socket()); |
| 384 | 384 |
| 385 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 385 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
| 386 EXPECT_TRUE(handle_.is_initialized()); | 386 EXPECT_TRUE(handle_.is_initialized()); |
| 387 ASSERT_TRUE(handle_.socket()); | 387 ASSERT_TRUE(handle_.socket()); |
| 388 EXPECT_TRUE(handle_.socket()->IsConnected()); | 388 EXPECT_TRUE(handle_.socket()->IsConnected()); |
| 389 proxy_delegate->VerifyOnTunnelRequestCompleted( | 389 proxy_delegate->VerifyOnTunnelRequestCompleted( |
| 390 "www.google.com:443", | 390 "www.google.com:443", |
| (...skipping 16 matching lines...) Expand all Loading... |
| 407 MockRead(ASYNC, 0, 2)}; | 407 MockRead(ASYNC, 0, 2)}; |
| 408 | 408 |
| 409 Initialize(NULL, 0, NULL, 0, | 409 Initialize(NULL, 0, NULL, 0, |
| 410 spdy_reads, arraysize(spdy_reads), | 410 spdy_reads, arraysize(spdy_reads), |
| 411 spdy_writes, arraysize(spdy_writes)); | 411 spdy_writes, arraysize(spdy_writes)); |
| 412 AddAuthToCache(); | 412 AddAuthToCache(); |
| 413 | 413 |
| 414 EXPECT_EQ(ERR_IO_PENDING, | 414 EXPECT_EQ(ERR_IO_PENDING, |
| 415 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, | 415 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, |
| 416 ClientSocketPool::RespectLimits::ENABLED, | 416 ClientSocketPool::RespectLimits::ENABLED, |
| 417 callback_.callback(), &pool_, BoundNetLog())); | 417 callback_.callback(), &pool_, NetLogWithSource())); |
| 418 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); | 418 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); |
| 419 | 419 |
| 420 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 420 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
| 421 } | 421 } |
| 422 | 422 |
| 423 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { | 423 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { |
| 424 if (GetParam() == SPDY) | 424 if (GetParam() == SPDY) |
| 425 return; | 425 return; |
| 426 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 426 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
| 427 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); | 427 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); |
| 428 | 428 |
| 429 socket_factory()->AddSocketDataProvider(data_.get()); | 429 socket_factory()->AddSocketDataProvider(data_.get()); |
| 430 | 430 |
| 431 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 431 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 432 ClientSocketPool::RespectLimits::ENABLED, | 432 ClientSocketPool::RespectLimits::ENABLED, |
| 433 callback_.callback(), &pool_, BoundNetLog()); | 433 callback_.callback(), &pool_, NetLogWithSource()); |
| 434 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 434 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 435 EXPECT_FALSE(handle_.is_initialized()); | 435 EXPECT_FALSE(handle_.is_initialized()); |
| 436 EXPECT_FALSE(handle_.socket()); | 436 EXPECT_FALSE(handle_.socket()); |
| 437 | 437 |
| 438 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_PROXY_CONNECTION_FAILED)); | 438 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_PROXY_CONNECTION_FAILED)); |
| 439 | 439 |
| 440 EXPECT_FALSE(handle_.is_initialized()); | 440 EXPECT_FALSE(handle_.is_initialized()); |
| 441 EXPECT_FALSE(handle_.socket()); | 441 EXPECT_FALSE(handle_.socket()); |
| 442 } | 442 } |
| 443 | 443 |
| 444 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { | 444 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { |
| 445 if (GetParam() == HTTP) | 445 if (GetParam() == HTTP) |
| 446 return; | 446 return; |
| 447 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 447 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
| 448 data_->set_connect_data(MockConnect(ASYNC, OK)); | 448 data_->set_connect_data(MockConnect(ASYNC, OK)); |
| 449 socket_factory()->AddSocketDataProvider(data_.get()); | 449 socket_factory()->AddSocketDataProvider(data_.get()); |
| 450 | 450 |
| 451 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, | 451 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, |
| 452 ERR_CERT_AUTHORITY_INVALID)); | 452 ERR_CERT_AUTHORITY_INVALID)); |
| 453 if (GetParam() == SPDY) { | 453 if (GetParam() == SPDY) { |
| 454 InitializeSpdySsl(); | 454 InitializeSpdySsl(); |
| 455 } | 455 } |
| 456 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); | 456 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); |
| 457 | 457 |
| 458 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 458 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 459 ClientSocketPool::RespectLimits::ENABLED, | 459 ClientSocketPool::RespectLimits::ENABLED, |
| 460 callback_.callback(), &pool_, BoundNetLog()); | 460 callback_.callback(), &pool_, NetLogWithSource()); |
| 461 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 461 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 462 EXPECT_FALSE(handle_.is_initialized()); | 462 EXPECT_FALSE(handle_.is_initialized()); |
| 463 EXPECT_FALSE(handle_.socket()); | 463 EXPECT_FALSE(handle_.socket()); |
| 464 | 464 |
| 465 EXPECT_THAT(callback_.WaitForResult(), | 465 EXPECT_THAT(callback_.WaitForResult(), |
| 466 IsError(ERR_PROXY_CERTIFICATE_INVALID)); | 466 IsError(ERR_PROXY_CERTIFICATE_INVALID)); |
| 467 | 467 |
| 468 EXPECT_FALSE(handle_.is_initialized()); | 468 EXPECT_FALSE(handle_.is_initialized()); |
| 469 EXPECT_FALSE(handle_.socket()); | 469 EXPECT_FALSE(handle_.socket()); |
| 470 } | 470 } |
| 471 | 471 |
| 472 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { | 472 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { |
| 473 if (GetParam() == HTTP) | 473 if (GetParam() == HTTP) |
| 474 return; | 474 return; |
| 475 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 475 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
| 476 data_->set_connect_data(MockConnect(ASYNC, OK)); | 476 data_->set_connect_data(MockConnect(ASYNC, OK)); |
| 477 socket_factory()->AddSocketDataProvider(data_.get()); | 477 socket_factory()->AddSocketDataProvider(data_.get()); |
| 478 | 478 |
| 479 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, | 479 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, |
| 480 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); | 480 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
| 481 if (GetParam() == SPDY) { | 481 if (GetParam() == SPDY) { |
| 482 InitializeSpdySsl(); | 482 InitializeSpdySsl(); |
| 483 } | 483 } |
| 484 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); | 484 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); |
| 485 | 485 |
| 486 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 486 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 487 ClientSocketPool::RespectLimits::ENABLED, | 487 ClientSocketPool::RespectLimits::ENABLED, |
| 488 callback_.callback(), &pool_, BoundNetLog()); | 488 callback_.callback(), &pool_, NetLogWithSource()); |
| 489 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 489 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 490 EXPECT_FALSE(handle_.is_initialized()); | 490 EXPECT_FALSE(handle_.is_initialized()); |
| 491 EXPECT_FALSE(handle_.socket()); | 491 EXPECT_FALSE(handle_.socket()); |
| 492 | 492 |
| 493 EXPECT_THAT(callback_.WaitForResult(), | 493 EXPECT_THAT(callback_.WaitForResult(), |
| 494 IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); | 494 IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
| 495 | 495 |
| 496 EXPECT_FALSE(handle_.is_initialized()); | 496 EXPECT_FALSE(handle_.is_initialized()); |
| 497 EXPECT_FALSE(handle_.socket()); | 497 EXPECT_FALSE(handle_.socket()); |
| 498 } | 498 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 517 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), | 517 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), |
| 518 }; | 518 }; |
| 519 | 519 |
| 520 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 520 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 521 spdy_reads, arraysize(spdy_reads), spdy_writes, | 521 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 522 arraysize(spdy_writes)); | 522 arraysize(spdy_writes)); |
| 523 AddAuthToCache(); | 523 AddAuthToCache(); |
| 524 | 524 |
| 525 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 525 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 526 ClientSocketPool::RespectLimits::ENABLED, | 526 ClientSocketPool::RespectLimits::ENABLED, |
| 527 callback_.callback(), &pool_, BoundNetLog()); | 527 callback_.callback(), &pool_, NetLogWithSource()); |
| 528 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 528 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 529 EXPECT_FALSE(handle_.is_initialized()); | 529 EXPECT_FALSE(handle_.is_initialized()); |
| 530 EXPECT_FALSE(handle_.socket()); | 530 EXPECT_FALSE(handle_.socket()); |
| 531 | 531 |
| 532 if (GetParam() == SPDY) { | 532 if (GetParam() == SPDY) { |
| 533 // SPDY cannot process a headers block unless it's complete and so it | 533 // SPDY cannot process a headers block unless it's complete and so it |
| 534 // returns ERR_CONNECTION_CLOSED in this case. | 534 // returns ERR_CONNECTION_CLOSED in this case. |
| 535 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); | 535 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); |
| 536 } else { | 536 } else { |
| 537 EXPECT_THAT(callback_.WaitForResult(), | 537 EXPECT_THAT(callback_.WaitForResult(), |
| (...skipping 19 matching lines...) Expand all Loading... |
| 557 MockRead reads[] = { | 557 MockRead reads[] = { |
| 558 MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"), | 558 MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"), |
| 559 MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 559 MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 560 }; | 560 }; |
| 561 | 561 |
| 562 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 562 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 563 NULL, 0, NULL, 0); | 563 NULL, 0, NULL, 0); |
| 564 | 564 |
| 565 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 565 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 566 ClientSocketPool::RespectLimits::ENABLED, | 566 ClientSocketPool::RespectLimits::ENABLED, |
| 567 callback_.callback(), &pool_, BoundNetLog()); | 567 callback_.callback(), &pool_, NetLogWithSource()); |
| 568 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 568 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 569 EXPECT_FALSE(handle_.is_initialized()); | 569 EXPECT_FALSE(handle_.is_initialized()); |
| 570 EXPECT_FALSE(handle_.socket()); | 570 EXPECT_FALSE(handle_.socket()); |
| 571 | 571 |
| 572 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_TUNNEL_CONNECTION_FAILED)); | 572 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
| 573 } | 573 } |
| 574 | 574 |
| 575 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { | 575 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { |
| 576 MockWrite writes[] = { | 576 MockWrite writes[] = { |
| 577 MockWrite(ASYNC, 0, | 577 MockWrite(ASYNC, 0, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 596 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 3), | 596 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 3), |
| 597 }; | 597 }; |
| 598 | 598 |
| 599 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 599 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 600 spdy_reads, arraysize(spdy_reads), spdy_writes, | 600 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 601 arraysize(spdy_writes)); | 601 arraysize(spdy_writes)); |
| 602 AddAuthToCache(); | 602 AddAuthToCache(); |
| 603 | 603 |
| 604 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 604 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 605 ClientSocketPool::RespectLimits::ENABLED, | 605 ClientSocketPool::RespectLimits::ENABLED, |
| 606 callback_.callback(), &pool_, BoundNetLog()); | 606 callback_.callback(), &pool_, NetLogWithSource()); |
| 607 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 607 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 608 EXPECT_FALSE(handle_.is_initialized()); | 608 EXPECT_FALSE(handle_.is_initialized()); |
| 609 EXPECT_FALSE(handle_.socket()); | 609 EXPECT_FALSE(handle_.socket()); |
| 610 | 610 |
| 611 rv = callback_.WaitForResult(); | 611 rv = callback_.WaitForResult(); |
| 612 // All Proxy CONNECT responses are not trustworthy | 612 // All Proxy CONNECT responses are not trustworthy |
| 613 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); | 613 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
| 614 EXPECT_FALSE(handle_.is_initialized()); | 614 EXPECT_FALSE(handle_.is_initialized()); |
| 615 EXPECT_FALSE(handle_.socket()); | 615 EXPECT_FALSE(handle_.socket()); |
| 616 } | 616 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 2), | 653 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 2), |
| 654 }; | 654 }; |
| 655 | 655 |
| 656 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 656 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 657 spdy_reads, arraysize(spdy_reads), spdy_writes, | 657 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 658 arraysize(spdy_writes)); | 658 arraysize(spdy_writes)); |
| 659 AddAuthToCache(); | 659 AddAuthToCache(); |
| 660 | 660 |
| 661 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 661 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 662 ClientSocketPool::RespectLimits::ENABLED, | 662 ClientSocketPool::RespectLimits::ENABLED, |
| 663 callback_.callback(), &pool_, BoundNetLog()); | 663 callback_.callback(), &pool_, NetLogWithSource()); |
| 664 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 664 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 665 EXPECT_FALSE(handle_.is_initialized()); | 665 EXPECT_FALSE(handle_.is_initialized()); |
| 666 EXPECT_FALSE(handle_.socket()); | 666 EXPECT_FALSE(handle_.socket()); |
| 667 | 667 |
| 668 rv = callback_.WaitForResult(); | 668 rv = callback_.WaitForResult(); |
| 669 | 669 |
| 670 if (GetParam() == HTTP) { | 670 if (GetParam() == HTTP) { |
| 671 // We don't trust 302 responses to CONNECT from HTTP proxies. | 671 // We don't trust 302 responses to CONNECT from HTTP proxies. |
| 672 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); | 672 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
| 673 EXPECT_FALSE(handle_.is_initialized()); | 673 EXPECT_FALSE(handle_.is_initialized()); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 692 // Make sure Location header was included and correct. | 692 // Make sure Location header was included and correct. |
| 693 std::string location; | 693 std::string location; |
| 694 EXPECT_TRUE(headers->IsRedirect(&location)); | 694 EXPECT_TRUE(headers->IsRedirect(&location)); |
| 695 EXPECT_EQ(location, redirectTarget); | 695 EXPECT_EQ(location, redirectTarget); |
| 696 } | 696 } |
| 697 } | 697 } |
| 698 | 698 |
| 699 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. | 699 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. |
| 700 | 700 |
| 701 } // namespace net | 701 } // namespace net |
| OLD | NEW |