| 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, |
| 350 CompletionCallback(), &pool_, BoundNetLog()); | 348 false, CompletionCallback(), &pool_, BoundNetLog()); |
| 351 EXPECT_EQ(OK, rv); | 349 EXPECT_EQ(OK, rv); |
| 352 EXPECT_TRUE(handle_.is_initialized()); | 350 EXPECT_TRUE(handle_.is_initialized()); |
| 353 ASSERT_TRUE(handle_.socket()); | 351 ASSERT_TRUE(handle_.socket()); |
| 354 EXPECT_TRUE(handle_.socket()->IsConnected()); | 352 EXPECT_TRUE(handle_.socket()->IsConnected()); |
| 355 EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called()); | 353 EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called()); |
| 356 EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called()); | 354 EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called()); |
| 357 EXPECT_TRUE(proxy_delegate->on_tunnel_request_completed_called()); | 355 EXPECT_TRUE(proxy_delegate->on_tunnel_request_completed_called()); |
| 358 } | 356 } |
| 359 | 357 |
| 360 // Make sure that HttpProxyConnectJob passes on its priority to its | 358 // Make sure that HttpProxyConnectJob passes on its priority to its |
| 361 // (non-SSL) socket request on Init. | 359 // (non-SSL) socket request on Init. |
| 362 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { | 360 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { |
| 363 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); | 361 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
| 364 EXPECT_EQ(OK, | 362 EXPECT_EQ(OK, handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST, false, |
| 365 handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST, | 363 CompletionCallback(), &pool_, BoundNetLog())); |
| 366 CompletionCallback(), &pool_, BoundNetLog())); | |
| 367 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); | 364 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); |
| 368 } | 365 } |
| 369 | 366 |
| 370 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { | 367 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { |
| 371 MockWrite writes[] = { | 368 MockWrite writes[] = { |
| 372 MockWrite(ASYNC, 0, | 369 MockWrite(ASYNC, 0, |
| 373 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 370 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 374 "Host: www.google.com:443\r\n" | 371 "Host: www.google.com:443\r\n" |
| 375 "Proxy-Connection: keep-alive\r\n\r\n"), | 372 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 376 }; | 373 }; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 397 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyReply(1, resp_block)); | 394 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyReply(1, resp_block)); |
| 398 MockRead spdy_reads[] = { | 395 MockRead spdy_reads[] = { |
| 399 CreateMockRead(*resp, 1, ASYNC), | 396 CreateMockRead(*resp, 1, ASYNC), |
| 400 MockRead(ASYNC, 0, 3) | 397 MockRead(ASYNC, 0, 3) |
| 401 }; | 398 }; |
| 402 | 399 |
| 403 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 400 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 404 spdy_reads, arraysize(spdy_reads), spdy_writes, | 401 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 405 arraysize(spdy_writes)); | 402 arraysize(spdy_writes)); |
| 406 | 403 |
| 407 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 404 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, false, |
| 408 callback_.callback(), &pool_, BoundNetLog()); | 405 callback_.callback(), &pool_, BoundNetLog()); |
| 409 EXPECT_EQ(ERR_IO_PENDING, rv); | 406 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 410 EXPECT_FALSE(handle_.is_initialized()); | 407 EXPECT_FALSE(handle_.is_initialized()); |
| 411 EXPECT_FALSE(handle_.socket()); | 408 EXPECT_FALSE(handle_.socket()); |
| 412 | 409 |
| 413 rv = callback_.WaitForResult(); | 410 rv = callback_.WaitForResult(); |
| 414 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); | 411 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); |
| 415 EXPECT_TRUE(handle_.is_initialized()); | 412 EXPECT_TRUE(handle_.is_initialized()); |
| 416 ASSERT_TRUE(handle_.socket()); | 413 ASSERT_TRUE(handle_.socket()); |
| 417 ProxyClientSocket* tunnel_socket = | 414 ProxyClientSocket* tunnel_socket = |
| (...skipping 29 matching lines...) Expand all Loading... |
| 447 MockRead reads[] = { | 444 MockRead reads[] = { |
| 448 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 445 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 449 }; | 446 }; |
| 450 | 447 |
| 451 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0, | 448 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0, |
| 452 NULL, 0); | 449 NULL, 0); |
| 453 AddAuthToCache(); | 450 AddAuthToCache(); |
| 454 | 451 |
| 455 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 452 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| 456 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, | 453 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, |
| 457 callback_.callback(), &pool_, BoundNetLog()); | 454 false, callback_.callback(), &pool_, BoundNetLog()); |
| 458 EXPECT_EQ(OK, rv); | 455 EXPECT_EQ(OK, rv); |
| 459 EXPECT_TRUE(handle_.is_initialized()); | 456 EXPECT_TRUE(handle_.is_initialized()); |
| 460 ASSERT_TRUE(handle_.socket()); | 457 ASSERT_TRUE(handle_.socket()); |
| 461 EXPECT_TRUE(handle_.socket()->IsConnected()); | 458 EXPECT_TRUE(handle_.socket()->IsConnected()); |
| 462 proxy_delegate->VerifyOnTunnelHeadersReceived( | 459 proxy_delegate->VerifyOnTunnelHeadersReceived( |
| 463 "www.google.com:443", | 460 "www.google.com:443", |
| 464 proxy_host_port.c_str(), | 461 proxy_host_port.c_str(), |
| 465 "HTTP/1.1 200 Connection Established"); | 462 "HTTP/1.1 200 Connection Established"); |
| 466 proxy_delegate->VerifyOnTunnelRequestCompleted( | 463 proxy_delegate->VerifyOnTunnelRequestCompleted( |
| 467 "www.google.com:443", | 464 "www.google.com:443", |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), | 497 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), |
| 501 }; | 498 }; |
| 502 | 499 |
| 503 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 500 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 504 spdy_reads, arraysize(spdy_reads), spdy_writes, | 501 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 505 arraysize(spdy_writes)); | 502 arraysize(spdy_writes)); |
| 506 AddAuthToCache(); | 503 AddAuthToCache(); |
| 507 | 504 |
| 508 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 505 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| 509 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, | 506 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, |
| 510 callback_.callback(), &pool_, BoundNetLog()); | 507 false, callback_.callback(), &pool_, BoundNetLog()); |
| 511 EXPECT_EQ(ERR_IO_PENDING, rv); | 508 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 512 EXPECT_FALSE(handle_.is_initialized()); | 509 EXPECT_FALSE(handle_.is_initialized()); |
| 513 EXPECT_FALSE(handle_.socket()); | 510 EXPECT_FALSE(handle_.socket()); |
| 514 | 511 |
| 515 EXPECT_EQ(OK, callback_.WaitForResult()); | 512 EXPECT_EQ(OK, callback_.WaitForResult()); |
| 516 EXPECT_TRUE(handle_.is_initialized()); | 513 EXPECT_TRUE(handle_.is_initialized()); |
| 517 ASSERT_TRUE(handle_.socket()); | 514 ASSERT_TRUE(handle_.socket()); |
| 518 EXPECT_TRUE(handle_.socket()->IsConnected()); | 515 EXPECT_TRUE(handle_.socket()->IsConnected()); |
| 519 proxy_delegate->VerifyOnTunnelRequestCompleted( | 516 proxy_delegate->VerifyOnTunnelRequestCompleted( |
| 520 "www.google.com:443", | 517 "www.google.com:443", |
| (...skipping 18 matching lines...) Expand all Loading... |
| 539 CreateMockRead(*resp, 1, ASYNC), | 536 CreateMockRead(*resp, 1, ASYNC), |
| 540 MockRead(ASYNC, 0, 2) | 537 MockRead(ASYNC, 0, 2) |
| 541 }; | 538 }; |
| 542 | 539 |
| 543 Initialize(NULL, 0, NULL, 0, | 540 Initialize(NULL, 0, NULL, 0, |
| 544 spdy_reads, arraysize(spdy_reads), | 541 spdy_reads, arraysize(spdy_reads), |
| 545 spdy_writes, arraysize(spdy_writes)); | 542 spdy_writes, arraysize(spdy_writes)); |
| 546 AddAuthToCache(); | 543 AddAuthToCache(); |
| 547 | 544 |
| 548 EXPECT_EQ(ERR_IO_PENDING, | 545 EXPECT_EQ(ERR_IO_PENDING, |
| 549 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, | 546 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, false, |
| 550 callback_.callback(), &pool_, BoundNetLog())); | 547 callback_.callback(), &pool_, BoundNetLog())); |
| 551 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); | 548 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); |
| 552 | 549 |
| 553 EXPECT_EQ(OK, callback_.WaitForResult()); | 550 EXPECT_EQ(OK, callback_.WaitForResult()); |
| 554 } | 551 } |
| 555 | 552 |
| 556 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { | 553 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { |
| 557 if (GetParam().proxy_type == SPDY) return; | 554 if (GetParam().proxy_type == SPDY) return; |
| 558 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 555 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
| 559 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); | 556 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); |
| 560 | 557 |
| 561 socket_factory()->AddSocketDataProvider(data_.get()); | 558 socket_factory()->AddSocketDataProvider(data_.get()); |
| 562 | 559 |
| 563 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 560 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, false, |
| 564 callback_.callback(), &pool_, BoundNetLog()); | 561 callback_.callback(), &pool_, BoundNetLog()); |
| 565 EXPECT_EQ(ERR_IO_PENDING, rv); | 562 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 566 EXPECT_FALSE(handle_.is_initialized()); | 563 EXPECT_FALSE(handle_.is_initialized()); |
| 567 EXPECT_FALSE(handle_.socket()); | 564 EXPECT_FALSE(handle_.socket()); |
| 568 | 565 |
| 569 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); | 566 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); |
| 570 | 567 |
| 571 EXPECT_FALSE(handle_.is_initialized()); | 568 EXPECT_FALSE(handle_.is_initialized()); |
| 572 EXPECT_FALSE(handle_.socket()); | 569 EXPECT_FALSE(handle_.socket()); |
| 573 } | 570 } |
| 574 | 571 |
| 575 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { | 572 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { |
| 576 if (GetParam().proxy_type == HTTP) return; | 573 if (GetParam().proxy_type == HTTP) return; |
| 577 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 574 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
| 578 data_->set_connect_data(MockConnect(ASYNC, OK)); | 575 data_->set_connect_data(MockConnect(ASYNC, OK)); |
| 579 socket_factory()->AddSocketDataProvider(data_.get()); | 576 socket_factory()->AddSocketDataProvider(data_.get()); |
| 580 | 577 |
| 581 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, | 578 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, |
| 582 ERR_CERT_AUTHORITY_INVALID)); | 579 ERR_CERT_AUTHORITY_INVALID)); |
| 583 if (GetParam().proxy_type == SPDY) { | 580 if (GetParam().proxy_type == SPDY) { |
| 584 InitializeSpdySsl(); | 581 InitializeSpdySsl(); |
| 585 } | 582 } |
| 586 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); | 583 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); |
| 587 | 584 |
| 588 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 585 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, false, |
| 589 callback_.callback(), &pool_, BoundNetLog()); | 586 callback_.callback(), &pool_, BoundNetLog()); |
| 590 EXPECT_EQ(ERR_IO_PENDING, rv); | 587 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 591 EXPECT_FALSE(handle_.is_initialized()); | 588 EXPECT_FALSE(handle_.is_initialized()); |
| 592 EXPECT_FALSE(handle_.socket()); | 589 EXPECT_FALSE(handle_.socket()); |
| 593 | 590 |
| 594 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); | 591 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); |
| 595 | 592 |
| 596 EXPECT_FALSE(handle_.is_initialized()); | 593 EXPECT_FALSE(handle_.is_initialized()); |
| 597 EXPECT_FALSE(handle_.socket()); | 594 EXPECT_FALSE(handle_.socket()); |
| 598 } | 595 } |
| 599 | 596 |
| 600 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { | 597 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { |
| 601 if (GetParam().proxy_type == HTTP) return; | 598 if (GetParam().proxy_type == HTTP) return; |
| 602 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 599 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
| 603 data_->set_connect_data(MockConnect(ASYNC, OK)); | 600 data_->set_connect_data(MockConnect(ASYNC, OK)); |
| 604 socket_factory()->AddSocketDataProvider(data_.get()); | 601 socket_factory()->AddSocketDataProvider(data_.get()); |
| 605 | 602 |
| 606 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, | 603 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, |
| 607 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); | 604 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
| 608 if (GetParam().proxy_type == SPDY) { | 605 if (GetParam().proxy_type == SPDY) { |
| 609 InitializeSpdySsl(); | 606 InitializeSpdySsl(); |
| 610 } | 607 } |
| 611 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); | 608 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); |
| 612 | 609 |
| 613 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 610 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, false, |
| 614 callback_.callback(), &pool_, BoundNetLog()); | 611 callback_.callback(), &pool_, BoundNetLog()); |
| 615 EXPECT_EQ(ERR_IO_PENDING, rv); | 612 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 616 EXPECT_FALSE(handle_.is_initialized()); | 613 EXPECT_FALSE(handle_.is_initialized()); |
| 617 EXPECT_FALSE(handle_.socket()); | 614 EXPECT_FALSE(handle_.socket()); |
| 618 | 615 |
| 619 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); | 616 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); |
| 620 | 617 |
| 621 EXPECT_FALSE(handle_.is_initialized()); | 618 EXPECT_FALSE(handle_.is_initialized()); |
| 622 EXPECT_FALSE(handle_.socket()); | 619 EXPECT_FALSE(handle_.socket()); |
| 623 } | 620 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 642 }; | 639 }; |
| 643 MockRead spdy_reads[] = { | 640 MockRead spdy_reads[] = { |
| 644 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), | 641 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), |
| 645 }; | 642 }; |
| 646 | 643 |
| 647 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 644 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 648 spdy_reads, arraysize(spdy_reads), spdy_writes, | 645 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 649 arraysize(spdy_writes)); | 646 arraysize(spdy_writes)); |
| 650 AddAuthToCache(); | 647 AddAuthToCache(); |
| 651 | 648 |
| 652 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 649 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, false, |
| 653 callback_.callback(), &pool_, BoundNetLog()); | 650 callback_.callback(), &pool_, BoundNetLog()); |
| 654 EXPECT_EQ(ERR_IO_PENDING, rv); | 651 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 655 EXPECT_FALSE(handle_.is_initialized()); | 652 EXPECT_FALSE(handle_.is_initialized()); |
| 656 EXPECT_FALSE(handle_.socket()); | 653 EXPECT_FALSE(handle_.socket()); |
| 657 | 654 |
| 658 if (GetParam().proxy_type == SPDY) { | 655 if (GetParam().proxy_type == SPDY) { |
| 659 // SPDY cannot process a headers block unless it's complete and so it | 656 // SPDY cannot process a headers block unless it's complete and so it |
| 660 // returns ERR_CONNECTION_CLOSED in this case. | 657 // returns ERR_CONNECTION_CLOSED in this case. |
| 661 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); | 658 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); |
| 662 } else { | 659 } else { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 680 "Proxy-Connection: keep-alive\r\n\r\n"), | 677 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 681 }; | 678 }; |
| 682 MockRead reads[] = { | 679 MockRead reads[] = { |
| 683 MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"), | 680 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"), | 681 MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 685 }; | 682 }; |
| 686 | 683 |
| 687 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 684 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 688 NULL, 0, NULL, 0); | 685 NULL, 0, NULL, 0); |
| 689 | 686 |
| 690 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 687 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, false, |
| 691 callback_.callback(), &pool_, BoundNetLog()); | 688 callback_.callback(), &pool_, BoundNetLog()); |
| 692 EXPECT_EQ(ERR_IO_PENDING, rv); | 689 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 693 EXPECT_FALSE(handle_.is_initialized()); | 690 EXPECT_FALSE(handle_.is_initialized()); |
| 694 EXPECT_FALSE(handle_.socket()); | 691 EXPECT_FALSE(handle_.socket()); |
| 695 | 692 |
| 696 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback_.WaitForResult()); | 693 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback_.WaitForResult()); |
| 697 } | 694 } |
| 698 | 695 |
| 699 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { | 696 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { |
| 700 MockWrite writes[] = { | 697 MockWrite writes[] = { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 720 MockRead spdy_reads[] = { | 717 MockRead spdy_reads[] = { |
| 721 CreateMockRead(*resp, 1, ASYNC), | 718 CreateMockRead(*resp, 1, ASYNC), |
| 722 MockRead(ASYNC, 0, 3), | 719 MockRead(ASYNC, 0, 3), |
| 723 }; | 720 }; |
| 724 | 721 |
| 725 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 722 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 726 spdy_reads, arraysize(spdy_reads), spdy_writes, | 723 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 727 arraysize(spdy_writes)); | 724 arraysize(spdy_writes)); |
| 728 AddAuthToCache(); | 725 AddAuthToCache(); |
| 729 | 726 |
| 730 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 727 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, false, |
| 731 callback_.callback(), &pool_, BoundNetLog()); | 728 callback_.callback(), &pool_, BoundNetLog()); |
| 732 EXPECT_EQ(ERR_IO_PENDING, rv); | 729 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 733 EXPECT_FALSE(handle_.is_initialized()); | 730 EXPECT_FALSE(handle_.is_initialized()); |
| 734 EXPECT_FALSE(handle_.socket()); | 731 EXPECT_FALSE(handle_.socket()); |
| 735 | 732 |
| 736 rv = callback_.WaitForResult(); | 733 rv = callback_.WaitForResult(); |
| 737 // All Proxy CONNECT responses are not trustworthy | 734 // All Proxy CONNECT responses are not trustworthy |
| 738 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 735 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
| 739 EXPECT_FALSE(handle_.is_initialized()); | 736 EXPECT_FALSE(handle_.is_initialized()); |
| 740 EXPECT_FALSE(handle_.socket()); | 737 EXPECT_FALSE(handle_.socket()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 781 MockRead spdy_reads[] = { | 778 MockRead spdy_reads[] = { |
| 782 CreateMockRead(*resp, 1, ASYNC), | 779 CreateMockRead(*resp, 1, ASYNC), |
| 783 MockRead(ASYNC, 0, 2), | 780 MockRead(ASYNC, 0, 2), |
| 784 }; | 781 }; |
| 785 | 782 |
| 786 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 783 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 787 spdy_reads, arraysize(spdy_reads), spdy_writes, | 784 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 788 arraysize(spdy_writes)); | 785 arraysize(spdy_writes)); |
| 789 AddAuthToCache(); | 786 AddAuthToCache(); |
| 790 | 787 |
| 791 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 788 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, false, |
| 792 callback_.callback(), &pool_, BoundNetLog()); | 789 callback_.callback(), &pool_, BoundNetLog()); |
| 793 EXPECT_EQ(ERR_IO_PENDING, rv); | 790 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 794 EXPECT_FALSE(handle_.is_initialized()); | 791 EXPECT_FALSE(handle_.is_initialized()); |
| 795 EXPECT_FALSE(handle_.socket()); | 792 EXPECT_FALSE(handle_.socket()); |
| 796 | 793 |
| 797 rv = callback_.WaitForResult(); | 794 rv = callback_.WaitForResult(); |
| 798 | 795 |
| 799 if (GetParam().proxy_type == HTTP) { | 796 if (GetParam().proxy_type == HTTP) { |
| 800 // We don't trust 302 responses to CONNECT from HTTP proxies. | 797 // We don't trust 302 responses to CONNECT from HTTP proxies. |
| 801 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 798 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 821 // Make sure Location header was included and correct. | 818 // Make sure Location header was included and correct. |
| 822 std::string location; | 819 std::string location; |
| 823 EXPECT_TRUE(headers->IsRedirect(&location)); | 820 EXPECT_TRUE(headers->IsRedirect(&location)); |
| 824 EXPECT_EQ(location, redirectTarget); | 821 EXPECT_EQ(location, redirectTarget); |
| 825 } | 822 } |
| 826 } | 823 } |
| 827 | 824 |
| 828 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. | 825 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. |
| 829 | 826 |
| 830 } // namespace net | 827 } // namespace net |
| OLD | NEW |