| 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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 AuthCredentials(kFoo, kBar), | 204 AuthCredentials(kFoo, kBar), |
| 205 "/"); | 205 "/"); |
| 206 } | 206 } |
| 207 | 207 |
| 208 scoped_refptr<TransportSocketParams> CreateHttpProxyParams() const { | 208 scoped_refptr<TransportSocketParams> CreateHttpProxyParams() const { |
| 209 if (GetParam().proxy_type != HTTP) | 209 if (GetParam().proxy_type != HTTP) |
| 210 return NULL; | 210 return NULL; |
| 211 return new TransportSocketParams( | 211 return new TransportSocketParams( |
| 212 HostPortPair(kHttpProxyHost, 80), | 212 HostPortPair(kHttpProxyHost, 80), |
| 213 false, | 213 false, |
| 214 false, | |
| 215 OnHostResolutionCallback(), | 214 OnHostResolutionCallback(), |
| 216 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT); | 215 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT); |
| 217 } | 216 } |
| 218 | 217 |
| 219 scoped_refptr<SSLSocketParams> CreateHttpsProxyParams() const { | 218 scoped_refptr<SSLSocketParams> CreateHttpsProxyParams() const { |
| 220 if (GetParam().proxy_type == HTTP) | 219 if (GetParam().proxy_type == HTTP) |
| 221 return NULL; | 220 return NULL; |
| 222 return new SSLSocketParams( | 221 return new SSLSocketParams( |
| 223 new TransportSocketParams( | 222 new TransportSocketParams( |
| 224 HostPortPair(kHttpsProxyHost, 443), | 223 HostPortPair(kHttpsProxyHost, 443), |
| 225 false, | 224 false, |
| 226 false, | |
| 227 OnHostResolutionCallback(), | 225 OnHostResolutionCallback(), |
| 228 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT), | 226 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT), |
| 229 NULL, | 227 NULL, |
| 230 NULL, | 228 NULL, |
| 231 HostPortPair(kHttpsProxyHost, 443), | 229 HostPortPair(kHttpsProxyHost, 443), |
| 232 SSLConfig(), | 230 SSLConfig(), |
| 233 PRIVACY_MODE_DISABLED, | 231 PRIVACY_MODE_DISABLED, |
| 234 0, | 232 0, |
| 235 false); | 233 false); |
| 236 } | 234 } |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoHTTP2, false), | 338 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoHTTP2, false), |
| 341 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoHTTP2, true), | 339 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoHTTP2, true), |
| 342 HttpProxyClientSocketPoolTestParams(SPDY, kProtoHTTP2, false), | 340 HttpProxyClientSocketPoolTestParams(SPDY, kProtoHTTP2, false), |
| 343 HttpProxyClientSocketPoolTestParams(SPDY, kProtoHTTP2, true))); | 341 HttpProxyClientSocketPoolTestParams(SPDY, kProtoHTTP2, true))); |
| 344 | 342 |
| 345 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { | 343 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { |
| 346 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); | 344 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
| 347 | 345 |
| 348 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 346 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| 349 int rv = handle_.Init("a", CreateNoTunnelParams(proxy_delegate.get()), LOW, | 347 int rv = handle_.Init("a", CreateNoTunnelParams(proxy_delegate.get()), LOW, |
| 348 ClientSocketPool::IgnoreLimits::DISABLED, |
| 350 CompletionCallback(), &pool_, BoundNetLog()); | 349 CompletionCallback(), &pool_, BoundNetLog()); |
| 351 EXPECT_EQ(OK, rv); | 350 EXPECT_EQ(OK, rv); |
| 352 EXPECT_TRUE(handle_.is_initialized()); | 351 EXPECT_TRUE(handle_.is_initialized()); |
| 353 ASSERT_TRUE(handle_.socket()); | 352 ASSERT_TRUE(handle_.socket()); |
| 354 EXPECT_TRUE(handle_.socket()->IsConnected()); | 353 EXPECT_TRUE(handle_.socket()->IsConnected()); |
| 355 EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called()); | 354 EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called()); |
| 356 EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called()); | 355 EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called()); |
| 357 EXPECT_TRUE(proxy_delegate->on_tunnel_request_completed_called()); | 356 EXPECT_TRUE(proxy_delegate->on_tunnel_request_completed_called()); |
| 358 } | 357 } |
| 359 | 358 |
| 360 // Make sure that HttpProxyConnectJob passes on its priority to its | 359 // Make sure that HttpProxyConnectJob passes on its priority to its |
| 361 // (non-SSL) socket request on Init. | 360 // (non-SSL) socket request on Init. |
| 362 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { | 361 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { |
| 363 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); | 362 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
| 364 EXPECT_EQ(OK, | 363 EXPECT_EQ(OK, handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST, |
| 365 handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST, | 364 ClientSocketPool::IgnoreLimits::DISABLED, |
| 366 CompletionCallback(), &pool_, BoundNetLog())); | 365 CompletionCallback(), &pool_, BoundNetLog())); |
| 367 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); | 366 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); |
| 368 } | 367 } |
| 369 | 368 |
| 370 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { | 369 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { |
| 371 MockWrite writes[] = { | 370 MockWrite writes[] = { |
| 372 MockWrite(ASYNC, 0, | 371 MockWrite(ASYNC, 0, |
| 373 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 372 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 374 "Host: www.google.com:443\r\n" | 373 "Host: www.google.com:443\r\n" |
| 375 "Proxy-Connection: keep-alive\r\n\r\n"), | 374 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 376 }; | 375 }; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 398 MockRead spdy_reads[] = { | 397 MockRead spdy_reads[] = { |
| 399 CreateMockRead(*resp, 1, ASYNC), | 398 CreateMockRead(*resp, 1, ASYNC), |
| 400 MockRead(ASYNC, 0, 3) | 399 MockRead(ASYNC, 0, 3) |
| 401 }; | 400 }; |
| 402 | 401 |
| 403 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 402 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 404 spdy_reads, arraysize(spdy_reads), spdy_writes, | 403 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 405 arraysize(spdy_writes)); | 404 arraysize(spdy_writes)); |
| 406 | 405 |
| 407 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 406 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 407 ClientSocketPool::IgnoreLimits::DISABLED, |
| 408 callback_.callback(), &pool_, BoundNetLog()); | 408 callback_.callback(), &pool_, BoundNetLog()); |
| 409 EXPECT_EQ(ERR_IO_PENDING, rv); | 409 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 410 EXPECT_FALSE(handle_.is_initialized()); | 410 EXPECT_FALSE(handle_.is_initialized()); |
| 411 EXPECT_FALSE(handle_.socket()); | 411 EXPECT_FALSE(handle_.socket()); |
| 412 | 412 |
| 413 rv = callback_.WaitForResult(); | 413 rv = callback_.WaitForResult(); |
| 414 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); | 414 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); |
| 415 EXPECT_TRUE(handle_.is_initialized()); | 415 EXPECT_TRUE(handle_.is_initialized()); |
| 416 ASSERT_TRUE(handle_.socket()); | 416 ASSERT_TRUE(handle_.socket()); |
| 417 ProxyClientSocket* tunnel_socket = | 417 ProxyClientSocket* tunnel_socket = |
| (...skipping 29 matching lines...) Expand all Loading... |
| 447 MockRead reads[] = { | 447 MockRead reads[] = { |
| 448 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 448 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 449 }; | 449 }; |
| 450 | 450 |
| 451 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0, | 451 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0, |
| 452 NULL, 0); | 452 NULL, 0); |
| 453 AddAuthToCache(); | 453 AddAuthToCache(); |
| 454 | 454 |
| 455 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 455 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| 456 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, | 456 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, |
| 457 ClientSocketPool::IgnoreLimits::DISABLED, |
| 457 callback_.callback(), &pool_, BoundNetLog()); | 458 callback_.callback(), &pool_, BoundNetLog()); |
| 458 EXPECT_EQ(OK, rv); | 459 EXPECT_EQ(OK, rv); |
| 459 EXPECT_TRUE(handle_.is_initialized()); | 460 EXPECT_TRUE(handle_.is_initialized()); |
| 460 ASSERT_TRUE(handle_.socket()); | 461 ASSERT_TRUE(handle_.socket()); |
| 461 EXPECT_TRUE(handle_.socket()->IsConnected()); | 462 EXPECT_TRUE(handle_.socket()->IsConnected()); |
| 462 proxy_delegate->VerifyOnTunnelHeadersReceived( | 463 proxy_delegate->VerifyOnTunnelHeadersReceived( |
| 463 "www.google.com:443", | 464 "www.google.com:443", |
| 464 proxy_host_port.c_str(), | 465 proxy_host_port.c_str(), |
| 465 "HTTP/1.1 200 Connection Established"); | 466 "HTTP/1.1 200 Connection Established"); |
| 466 proxy_delegate->VerifyOnTunnelRequestCompleted( | 467 proxy_delegate->VerifyOnTunnelRequestCompleted( |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), | 501 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), |
| 501 }; | 502 }; |
| 502 | 503 |
| 503 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 504 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 504 spdy_reads, arraysize(spdy_reads), spdy_writes, | 505 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 505 arraysize(spdy_writes)); | 506 arraysize(spdy_writes)); |
| 506 AddAuthToCache(); | 507 AddAuthToCache(); |
| 507 | 508 |
| 508 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 509 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| 509 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, | 510 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, |
| 511 ClientSocketPool::IgnoreLimits::DISABLED, |
| 510 callback_.callback(), &pool_, BoundNetLog()); | 512 callback_.callback(), &pool_, BoundNetLog()); |
| 511 EXPECT_EQ(ERR_IO_PENDING, rv); | 513 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 512 EXPECT_FALSE(handle_.is_initialized()); | 514 EXPECT_FALSE(handle_.is_initialized()); |
| 513 EXPECT_FALSE(handle_.socket()); | 515 EXPECT_FALSE(handle_.socket()); |
| 514 | 516 |
| 515 EXPECT_EQ(OK, callback_.WaitForResult()); | 517 EXPECT_EQ(OK, callback_.WaitForResult()); |
| 516 EXPECT_TRUE(handle_.is_initialized()); | 518 EXPECT_TRUE(handle_.is_initialized()); |
| 517 ASSERT_TRUE(handle_.socket()); | 519 ASSERT_TRUE(handle_.socket()); |
| 518 EXPECT_TRUE(handle_.socket()->IsConnected()); | 520 EXPECT_TRUE(handle_.socket()->IsConnected()); |
| 519 proxy_delegate->VerifyOnTunnelRequestCompleted( | 521 proxy_delegate->VerifyOnTunnelRequestCompleted( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 540 MockRead(ASYNC, 0, 2) | 542 MockRead(ASYNC, 0, 2) |
| 541 }; | 543 }; |
| 542 | 544 |
| 543 Initialize(NULL, 0, NULL, 0, | 545 Initialize(NULL, 0, NULL, 0, |
| 544 spdy_reads, arraysize(spdy_reads), | 546 spdy_reads, arraysize(spdy_reads), |
| 545 spdy_writes, arraysize(spdy_writes)); | 547 spdy_writes, arraysize(spdy_writes)); |
| 546 AddAuthToCache(); | 548 AddAuthToCache(); |
| 547 | 549 |
| 548 EXPECT_EQ(ERR_IO_PENDING, | 550 EXPECT_EQ(ERR_IO_PENDING, |
| 549 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, | 551 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, |
| 552 ClientSocketPool::IgnoreLimits::DISABLED, |
| 550 callback_.callback(), &pool_, BoundNetLog())); | 553 callback_.callback(), &pool_, BoundNetLog())); |
| 551 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); | 554 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); |
| 552 | 555 |
| 553 EXPECT_EQ(OK, callback_.WaitForResult()); | 556 EXPECT_EQ(OK, callback_.WaitForResult()); |
| 554 } | 557 } |
| 555 | 558 |
| 556 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { | 559 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { |
| 557 if (GetParam().proxy_type == SPDY) return; | 560 if (GetParam().proxy_type == SPDY) return; |
| 558 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 561 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
| 559 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); | 562 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); |
| 560 | 563 |
| 561 socket_factory()->AddSocketDataProvider(data_.get()); | 564 socket_factory()->AddSocketDataProvider(data_.get()); |
| 562 | 565 |
| 563 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 566 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 567 ClientSocketPool::IgnoreLimits::DISABLED, |
| 564 callback_.callback(), &pool_, BoundNetLog()); | 568 callback_.callback(), &pool_, BoundNetLog()); |
| 565 EXPECT_EQ(ERR_IO_PENDING, rv); | 569 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 566 EXPECT_FALSE(handle_.is_initialized()); | 570 EXPECT_FALSE(handle_.is_initialized()); |
| 567 EXPECT_FALSE(handle_.socket()); | 571 EXPECT_FALSE(handle_.socket()); |
| 568 | 572 |
| 569 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); | 573 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); |
| 570 | 574 |
| 571 EXPECT_FALSE(handle_.is_initialized()); | 575 EXPECT_FALSE(handle_.is_initialized()); |
| 572 EXPECT_FALSE(handle_.socket()); | 576 EXPECT_FALSE(handle_.socket()); |
| 573 } | 577 } |
| 574 | 578 |
| 575 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { | 579 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { |
| 576 if (GetParam().proxy_type == HTTP) return; | 580 if (GetParam().proxy_type == HTTP) return; |
| 577 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 581 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
| 578 data_->set_connect_data(MockConnect(ASYNC, OK)); | 582 data_->set_connect_data(MockConnect(ASYNC, OK)); |
| 579 socket_factory()->AddSocketDataProvider(data_.get()); | 583 socket_factory()->AddSocketDataProvider(data_.get()); |
| 580 | 584 |
| 581 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, | 585 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, |
| 582 ERR_CERT_AUTHORITY_INVALID)); | 586 ERR_CERT_AUTHORITY_INVALID)); |
| 583 if (GetParam().proxy_type == SPDY) { | 587 if (GetParam().proxy_type == SPDY) { |
| 584 InitializeSpdySsl(); | 588 InitializeSpdySsl(); |
| 585 } | 589 } |
| 586 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); | 590 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); |
| 587 | 591 |
| 588 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 592 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 593 ClientSocketPool::IgnoreLimits::DISABLED, |
| 589 callback_.callback(), &pool_, BoundNetLog()); | 594 callback_.callback(), &pool_, BoundNetLog()); |
| 590 EXPECT_EQ(ERR_IO_PENDING, rv); | 595 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 591 EXPECT_FALSE(handle_.is_initialized()); | 596 EXPECT_FALSE(handle_.is_initialized()); |
| 592 EXPECT_FALSE(handle_.socket()); | 597 EXPECT_FALSE(handle_.socket()); |
| 593 | 598 |
| 594 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); | 599 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); |
| 595 | 600 |
| 596 EXPECT_FALSE(handle_.is_initialized()); | 601 EXPECT_FALSE(handle_.is_initialized()); |
| 597 EXPECT_FALSE(handle_.socket()); | 602 EXPECT_FALSE(handle_.socket()); |
| 598 } | 603 } |
| 599 | 604 |
| 600 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { | 605 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { |
| 601 if (GetParam().proxy_type == HTTP) return; | 606 if (GetParam().proxy_type == HTTP) return; |
| 602 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 607 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
| 603 data_->set_connect_data(MockConnect(ASYNC, OK)); | 608 data_->set_connect_data(MockConnect(ASYNC, OK)); |
| 604 socket_factory()->AddSocketDataProvider(data_.get()); | 609 socket_factory()->AddSocketDataProvider(data_.get()); |
| 605 | 610 |
| 606 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, | 611 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, |
| 607 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); | 612 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
| 608 if (GetParam().proxy_type == SPDY) { | 613 if (GetParam().proxy_type == SPDY) { |
| 609 InitializeSpdySsl(); | 614 InitializeSpdySsl(); |
| 610 } | 615 } |
| 611 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); | 616 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); |
| 612 | 617 |
| 613 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 618 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 619 ClientSocketPool::IgnoreLimits::DISABLED, |
| 614 callback_.callback(), &pool_, BoundNetLog()); | 620 callback_.callback(), &pool_, BoundNetLog()); |
| 615 EXPECT_EQ(ERR_IO_PENDING, rv); | 621 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 616 EXPECT_FALSE(handle_.is_initialized()); | 622 EXPECT_FALSE(handle_.is_initialized()); |
| 617 EXPECT_FALSE(handle_.socket()); | 623 EXPECT_FALSE(handle_.socket()); |
| 618 | 624 |
| 619 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); | 625 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); |
| 620 | 626 |
| 621 EXPECT_FALSE(handle_.is_initialized()); | 627 EXPECT_FALSE(handle_.is_initialized()); |
| 622 EXPECT_FALSE(handle_.socket()); | 628 EXPECT_FALSE(handle_.socket()); |
| 623 } | 629 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 643 MockRead spdy_reads[] = { | 649 MockRead spdy_reads[] = { |
| 644 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), | 650 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), |
| 645 }; | 651 }; |
| 646 | 652 |
| 647 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 653 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 648 spdy_reads, arraysize(spdy_reads), spdy_writes, | 654 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 649 arraysize(spdy_writes)); | 655 arraysize(spdy_writes)); |
| 650 AddAuthToCache(); | 656 AddAuthToCache(); |
| 651 | 657 |
| 652 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 658 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 659 ClientSocketPool::IgnoreLimits::DISABLED, |
| 653 callback_.callback(), &pool_, BoundNetLog()); | 660 callback_.callback(), &pool_, BoundNetLog()); |
| 654 EXPECT_EQ(ERR_IO_PENDING, rv); | 661 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 655 EXPECT_FALSE(handle_.is_initialized()); | 662 EXPECT_FALSE(handle_.is_initialized()); |
| 656 EXPECT_FALSE(handle_.socket()); | 663 EXPECT_FALSE(handle_.socket()); |
| 657 | 664 |
| 658 if (GetParam().proxy_type == SPDY) { | 665 if (GetParam().proxy_type == SPDY) { |
| 659 // SPDY cannot process a headers block unless it's complete and so it | 666 // SPDY cannot process a headers block unless it's complete and so it |
| 660 // returns ERR_CONNECTION_CLOSED in this case. | 667 // returns ERR_CONNECTION_CLOSED in this case. |
| 661 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); | 668 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); |
| 662 } else { | 669 } else { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 681 }; | 688 }; |
| 682 MockRead reads[] = { | 689 MockRead reads[] = { |
| 683 MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"), | 690 MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"), |
| 684 MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 691 MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 685 }; | 692 }; |
| 686 | 693 |
| 687 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 694 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 688 NULL, 0, NULL, 0); | 695 NULL, 0, NULL, 0); |
| 689 | 696 |
| 690 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 697 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 698 ClientSocketPool::IgnoreLimits::DISABLED, |
| 691 callback_.callback(), &pool_, BoundNetLog()); | 699 callback_.callback(), &pool_, BoundNetLog()); |
| 692 EXPECT_EQ(ERR_IO_PENDING, rv); | 700 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 693 EXPECT_FALSE(handle_.is_initialized()); | 701 EXPECT_FALSE(handle_.is_initialized()); |
| 694 EXPECT_FALSE(handle_.socket()); | 702 EXPECT_FALSE(handle_.socket()); |
| 695 | 703 |
| 696 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback_.WaitForResult()); | 704 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback_.WaitForResult()); |
| 697 } | 705 } |
| 698 | 706 |
| 699 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { | 707 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { |
| 700 MockWrite writes[] = { | 708 MockWrite writes[] = { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 721 CreateMockRead(*resp, 1, ASYNC), | 729 CreateMockRead(*resp, 1, ASYNC), |
| 722 MockRead(ASYNC, 0, 3), | 730 MockRead(ASYNC, 0, 3), |
| 723 }; | 731 }; |
| 724 | 732 |
| 725 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 733 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 726 spdy_reads, arraysize(spdy_reads), spdy_writes, | 734 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 727 arraysize(spdy_writes)); | 735 arraysize(spdy_writes)); |
| 728 AddAuthToCache(); | 736 AddAuthToCache(); |
| 729 | 737 |
| 730 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 738 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 739 ClientSocketPool::IgnoreLimits::DISABLED, |
| 731 callback_.callback(), &pool_, BoundNetLog()); | 740 callback_.callback(), &pool_, BoundNetLog()); |
| 732 EXPECT_EQ(ERR_IO_PENDING, rv); | 741 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 733 EXPECT_FALSE(handle_.is_initialized()); | 742 EXPECT_FALSE(handle_.is_initialized()); |
| 734 EXPECT_FALSE(handle_.socket()); | 743 EXPECT_FALSE(handle_.socket()); |
| 735 | 744 |
| 736 rv = callback_.WaitForResult(); | 745 rv = callback_.WaitForResult(); |
| 737 // All Proxy CONNECT responses are not trustworthy | 746 // All Proxy CONNECT responses are not trustworthy |
| 738 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 747 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
| 739 EXPECT_FALSE(handle_.is_initialized()); | 748 EXPECT_FALSE(handle_.is_initialized()); |
| 740 EXPECT_FALSE(handle_.socket()); | 749 EXPECT_FALSE(handle_.socket()); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 782 CreateMockRead(*resp, 1, ASYNC), | 791 CreateMockRead(*resp, 1, ASYNC), |
| 783 MockRead(ASYNC, 0, 2), | 792 MockRead(ASYNC, 0, 2), |
| 784 }; | 793 }; |
| 785 | 794 |
| 786 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 795 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 787 spdy_reads, arraysize(spdy_reads), spdy_writes, | 796 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 788 arraysize(spdy_writes)); | 797 arraysize(spdy_writes)); |
| 789 AddAuthToCache(); | 798 AddAuthToCache(); |
| 790 | 799 |
| 791 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 800 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 801 ClientSocketPool::IgnoreLimits::DISABLED, |
| 792 callback_.callback(), &pool_, BoundNetLog()); | 802 callback_.callback(), &pool_, BoundNetLog()); |
| 793 EXPECT_EQ(ERR_IO_PENDING, rv); | 803 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 794 EXPECT_FALSE(handle_.is_initialized()); | 804 EXPECT_FALSE(handle_.is_initialized()); |
| 795 EXPECT_FALSE(handle_.socket()); | 805 EXPECT_FALSE(handle_.socket()); |
| 796 | 806 |
| 797 rv = callback_.WaitForResult(); | 807 rv = callback_.WaitForResult(); |
| 798 | 808 |
| 799 if (GetParam().proxy_type == HTTP) { | 809 if (GetParam().proxy_type == HTTP) { |
| 800 // We don't trust 302 responses to CONNECT from HTTP proxies. | 810 // We don't trust 302 responses to CONNECT from HTTP proxies. |
| 801 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 811 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 821 // Make sure Location header was included and correct. | 831 // Make sure Location header was included and correct. |
| 822 std::string location; | 832 std::string location; |
| 823 EXPECT_TRUE(headers->IsRedirect(&location)); | 833 EXPECT_TRUE(headers->IsRedirect(&location)); |
| 824 EXPECT_EQ(location, redirectTarget); | 834 EXPECT_EQ(location, redirectTarget); |
| 825 } | 835 } |
| 826 } | 836 } |
| 827 | 837 |
| 828 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. | 838 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. |
| 829 | 839 |
| 830 } // namespace net | 840 } // namespace net |
| OLD | NEW |