| 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 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 "Host: www.google.com:443\r\n" | 273 "Host: www.google.com:443\r\n" |
| 274 "Proxy-Connection: keep-alive\r\n\r\n"), | 274 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 275 }; | 275 }; |
| 276 MockRead reads[] = { | 276 MockRead reads[] = { |
| 277 // No credentials. | 277 // No credentials. |
| 278 MockRead(ASYNC, 1, "HTTP/1.1 407 Proxy Authentication Required\r\n"), | 278 MockRead(ASYNC, 1, "HTTP/1.1 407 Proxy Authentication Required\r\n"), |
| 279 MockRead(ASYNC, 2, "Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 279 MockRead(ASYNC, 2, "Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 280 MockRead(ASYNC, 3, "Content-Length: 10\r\n\r\n"), | 280 MockRead(ASYNC, 3, "Content-Length: 10\r\n\r\n"), |
| 281 MockRead(ASYNC, 4, "0123456789"), | 281 MockRead(ASYNC, 4, "0123456789"), |
| 282 }; | 282 }; |
| 283 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyConnect( | 283 SpdySerializedFrame req(spdy_util_.ConstructSpdyConnect( |
| 284 NULL, 0, 1, LOW, HostPortPair("www.google.com", 443))); | 284 NULL, 0, 1, LOW, HostPortPair("www.google.com", 443))); |
| 285 std::unique_ptr<SpdySerializedFrame> rst( | 285 SpdySerializedFrame rst( |
| 286 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 286 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 287 MockWrite spdy_writes[] = { | 287 MockWrite spdy_writes[] = { |
| 288 CreateMockWrite(*req, 0, ASYNC), | 288 CreateMockWrite(req, 0, ASYNC), CreateMockWrite(rst, 2, ASYNC), |
| 289 CreateMockWrite(*rst, 2, ASYNC), | |
| 290 }; | 289 }; |
| 291 SpdyHeaderBlock resp_block; | 290 SpdyHeaderBlock resp_block; |
| 292 resp_block[spdy_util_.GetStatusKey()] = "407"; | 291 resp_block[spdy_util_.GetStatusKey()] = "407"; |
| 293 resp_block["proxy-authenticate"] = "Basic realm=\"MyRealm1\""; | 292 resp_block["proxy-authenticate"] = "Basic realm=\"MyRealm1\""; |
| 294 | 293 |
| 295 std::unique_ptr<SpdySerializedFrame> resp( | 294 SpdySerializedFrame resp( |
| 296 spdy_util_.ConstructSpdyReply(1, std::move(resp_block))); | 295 spdy_util_.ConstructSpdyReply(1, std::move(resp_block))); |
| 297 MockRead spdy_reads[] = { | 296 MockRead spdy_reads[] = {CreateMockRead(resp, 1, ASYNC), |
| 298 CreateMockRead(*resp, 1, ASYNC), | 297 MockRead(ASYNC, 0, 3)}; |
| 299 MockRead(ASYNC, 0, 3) | |
| 300 }; | |
| 301 | 298 |
| 302 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 299 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 303 spdy_reads, arraysize(spdy_reads), spdy_writes, | 300 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 304 arraysize(spdy_writes)); | 301 arraysize(spdy_writes)); |
| 305 | 302 |
| 306 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 303 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 307 ClientSocketPool::RespectLimits::ENABLED, | 304 ClientSocketPool::RespectLimits::ENABLED, |
| 308 callback_.callback(), &pool_, BoundNetLog()); | 305 callback_.callback(), &pool_, BoundNetLog()); |
| 309 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 306 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 310 EXPECT_FALSE(handle_.is_initialized()); | 307 EXPECT_FALSE(handle_.is_initialized()); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n" | 378 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n" |
| 382 "Foo: " + | 379 "Foo: " + |
| 383 proxy_host_port + "\r\n\r\n"; | 380 proxy_host_port + "\r\n\r\n"; |
| 384 MockWrite writes[] = { | 381 MockWrite writes[] = { |
| 385 MockWrite(ASYNC, 0, request.c_str()), | 382 MockWrite(ASYNC, 0, request.c_str()), |
| 386 }; | 383 }; |
| 387 MockRead reads[] = { | 384 MockRead reads[] = { |
| 388 MockRead(ASYNC, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 385 MockRead(ASYNC, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 389 }; | 386 }; |
| 390 | 387 |
| 391 std::unique_ptr<SpdySerializedFrame> req( | 388 SpdySerializedFrame req( |
| 392 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, | 389 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, |
| 393 HostPortPair("www.google.com", 443))); | 390 HostPortPair("www.google.com", 443))); |
| 394 MockWrite spdy_writes[] = { | 391 MockWrite spdy_writes[] = {CreateMockWrite(req, 0, ASYNC)}; |
| 395 CreateMockWrite(*req, 0, ASYNC) | 392 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 396 }; | |
| 397 std::unique_ptr<SpdySerializedFrame> resp( | |
| 398 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | |
| 399 MockRead spdy_reads[] = { | 393 MockRead spdy_reads[] = { |
| 400 CreateMockRead(*resp, 1, ASYNC), | 394 CreateMockRead(resp, 1, ASYNC), |
| 401 // Connection stays open. | 395 // Connection stays open. |
| 402 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), | 396 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), |
| 403 }; | 397 }; |
| 404 | 398 |
| 405 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 399 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 406 spdy_reads, arraysize(spdy_reads), spdy_writes, | 400 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 407 arraysize(spdy_writes)); | 401 arraysize(spdy_writes)); |
| 408 AddAuthToCache(); | 402 AddAuthToCache(); |
| 409 | 403 |
| 410 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 404 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 424 proxy_host_port.c_str()); | 418 proxy_host_port.c_str()); |
| 425 } | 419 } |
| 426 | 420 |
| 427 // Make sure that HttpProxyConnectJob passes on its priority to its | 421 // Make sure that HttpProxyConnectJob passes on its priority to its |
| 428 // SPDY session's socket request on Init (if applicable). | 422 // SPDY session's socket request on Init (if applicable). |
| 429 TEST_P(HttpProxyClientSocketPoolTest, | 423 TEST_P(HttpProxyClientSocketPoolTest, |
| 430 SetSpdySessionSocketRequestPriorityOnInit) { | 424 SetSpdySessionSocketRequestPriorityOnInit) { |
| 431 if (GetParam().proxy_type != SPDY) | 425 if (GetParam().proxy_type != SPDY) |
| 432 return; | 426 return; |
| 433 | 427 |
| 434 std::unique_ptr<SpdySerializedFrame> req( | 428 SpdySerializedFrame req( |
| 435 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, MEDIUM, | 429 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, MEDIUM, |
| 436 HostPortPair("www.google.com", 443))); | 430 HostPortPair("www.google.com", 443))); |
| 437 MockWrite spdy_writes[] = { | 431 MockWrite spdy_writes[] = {CreateMockWrite(req, 0, ASYNC)}; |
| 438 CreateMockWrite(*req, 0, ASYNC) | 432 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 439 }; | 433 MockRead spdy_reads[] = {CreateMockRead(resp, 1, ASYNC), |
| 440 std::unique_ptr<SpdySerializedFrame> resp( | 434 MockRead(ASYNC, 0, 2)}; |
| 441 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | |
| 442 MockRead spdy_reads[] = { | |
| 443 CreateMockRead(*resp, 1, ASYNC), | |
| 444 MockRead(ASYNC, 0, 2) | |
| 445 }; | |
| 446 | 435 |
| 447 Initialize(NULL, 0, NULL, 0, | 436 Initialize(NULL, 0, NULL, 0, |
| 448 spdy_reads, arraysize(spdy_reads), | 437 spdy_reads, arraysize(spdy_reads), |
| 449 spdy_writes, arraysize(spdy_writes)); | 438 spdy_writes, arraysize(spdy_writes)); |
| 450 AddAuthToCache(); | 439 AddAuthToCache(); |
| 451 | 440 |
| 452 EXPECT_EQ(ERR_IO_PENDING, | 441 EXPECT_EQ(ERR_IO_PENDING, |
| 453 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, | 442 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, |
| 454 ClientSocketPool::RespectLimits::ENABLED, | 443 ClientSocketPool::RespectLimits::ENABLED, |
| 455 callback_.callback(), &pool_, BoundNetLog())); | 444 callback_.callback(), &pool_, BoundNetLog())); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 MockWrite(ASYNC, 0, | 526 MockWrite(ASYNC, 0, |
| 538 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 527 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 539 "Host: www.google.com:443\r\n" | 528 "Host: www.google.com:443\r\n" |
| 540 "Proxy-Connection: keep-alive\r\n" | 529 "Proxy-Connection: keep-alive\r\n" |
| 541 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 530 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 542 }; | 531 }; |
| 543 MockRead reads[] = { | 532 MockRead reads[] = { |
| 544 MockRead(ASYNC, 1, "HTTP/1.1 200 Conn"), | 533 MockRead(ASYNC, 1, "HTTP/1.1 200 Conn"), |
| 545 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 2), | 534 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 2), |
| 546 }; | 535 }; |
| 547 std::unique_ptr<SpdySerializedFrame> req( | 536 SpdySerializedFrame req( |
| 548 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, | 537 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, |
| 549 HostPortPair("www.google.com", 443))); | 538 HostPortPair("www.google.com", 443))); |
| 550 MockWrite spdy_writes[] = { | 539 MockWrite spdy_writes[] = {CreateMockWrite(req, 0, ASYNC)}; |
| 551 CreateMockWrite(*req, 0, ASYNC) | |
| 552 }; | |
| 553 MockRead spdy_reads[] = { | 540 MockRead spdy_reads[] = { |
| 554 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), | 541 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), |
| 555 }; | 542 }; |
| 556 | 543 |
| 557 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 544 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 558 spdy_reads, arraysize(spdy_reads), spdy_writes, | 545 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 559 arraysize(spdy_writes)); | 546 arraysize(spdy_writes)); |
| 560 AddAuthToCache(); | 547 AddAuthToCache(); |
| 561 | 548 |
| 562 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 549 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 613 MockWrite writes[] = { | 600 MockWrite writes[] = { |
| 614 MockWrite(ASYNC, 0, | 601 MockWrite(ASYNC, 0, |
| 615 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 602 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 616 "Host: www.google.com:443\r\n" | 603 "Host: www.google.com:443\r\n" |
| 617 "Proxy-Connection: keep-alive\r\n" | 604 "Proxy-Connection: keep-alive\r\n" |
| 618 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 605 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 619 }; | 606 }; |
| 620 MockRead reads[] = { | 607 MockRead reads[] = { |
| 621 MockRead(ASYNC, 1, "HTTP/1.1 304 Not Modified\r\n\r\n"), | 608 MockRead(ASYNC, 1, "HTTP/1.1 304 Not Modified\r\n\r\n"), |
| 622 }; | 609 }; |
| 623 std::unique_ptr<SpdySerializedFrame> req( | 610 SpdySerializedFrame req( |
| 624 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, | 611 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, |
| 625 HostPortPair("www.google.com", 443))); | 612 HostPortPair("www.google.com", 443))); |
| 626 std::unique_ptr<SpdySerializedFrame> rst( | 613 SpdySerializedFrame rst( |
| 627 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 614 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 628 MockWrite spdy_writes[] = { | 615 MockWrite spdy_writes[] = { |
| 629 CreateMockWrite(*req, 0, ASYNC), | 616 CreateMockWrite(req, 0, ASYNC), CreateMockWrite(rst, 2, ASYNC), |
| 630 CreateMockWrite(*rst, 2, ASYNC), | |
| 631 }; | 617 }; |
| 632 std::unique_ptr<SpdySerializedFrame> resp( | 618 SpdySerializedFrame resp(spdy_util_.ConstructSpdySynReplyError(1)); |
| 633 spdy_util_.ConstructSpdySynReplyError(1)); | |
| 634 MockRead spdy_reads[] = { | 619 MockRead spdy_reads[] = { |
| 635 CreateMockRead(*resp, 1, ASYNC), | 620 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 3), |
| 636 MockRead(ASYNC, 0, 3), | |
| 637 }; | 621 }; |
| 638 | 622 |
| 639 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 623 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 640 spdy_reads, arraysize(spdy_reads), spdy_writes, | 624 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 641 arraysize(spdy_writes)); | 625 arraysize(spdy_writes)); |
| 642 AddAuthToCache(); | 626 AddAuthToCache(); |
| 643 | 627 |
| 644 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 628 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 645 ClientSocketPool::RespectLimits::ENABLED, | 629 ClientSocketPool::RespectLimits::ENABLED, |
| 646 callback_.callback(), &pool_, BoundNetLog()); | 630 callback_.callback(), &pool_, BoundNetLog()); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 665 MockWrite writes[] = { | 649 MockWrite writes[] = { |
| 666 MockWrite(ASYNC, 0, | 650 MockWrite(ASYNC, 0, |
| 667 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 651 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 668 "Host: www.google.com:443\r\n" | 652 "Host: www.google.com:443\r\n" |
| 669 "Proxy-Connection: keep-alive\r\n" | 653 "Proxy-Connection: keep-alive\r\n" |
| 670 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 654 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 671 }; | 655 }; |
| 672 MockRead reads[] = { | 656 MockRead reads[] = { |
| 673 MockRead(ASYNC, 1, responseText.c_str()), | 657 MockRead(ASYNC, 1, responseText.c_str()), |
| 674 }; | 658 }; |
| 675 std::unique_ptr<SpdySerializedFrame> req( | 659 SpdySerializedFrame req( |
| 676 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, | 660 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, |
| 677 HostPortPair("www.google.com", 443))); | 661 HostPortPair("www.google.com", 443))); |
| 678 std::unique_ptr<SpdySerializedFrame> rst( | 662 SpdySerializedFrame rst( |
| 679 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 663 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 680 | 664 |
| 681 MockWrite spdy_writes[] = { | 665 MockWrite spdy_writes[] = { |
| 682 CreateMockWrite(*req, 0, ASYNC), | 666 CreateMockWrite(req, 0, ASYNC), CreateMockWrite(rst, 3, ASYNC), |
| 683 CreateMockWrite(*rst, 3, ASYNC), | |
| 684 }; | 667 }; |
| 685 | 668 |
| 686 const char* const responseHeaders[] = { | 669 const char* const responseHeaders[] = { |
| 687 "location", redirectTarget.c_str(), | 670 "location", redirectTarget.c_str(), |
| 688 "set-cookie", "foo=bar", | 671 "set-cookie", "foo=bar", |
| 689 }; | 672 }; |
| 690 const int responseHeadersSize = arraysize(responseHeaders) / 2; | 673 const int responseHeadersSize = arraysize(responseHeaders) / 2; |
| 691 std::unique_ptr<SpdySerializedFrame> resp( | 674 SpdySerializedFrame resp(spdy_util_.ConstructSpdySynReplyError( |
| 692 spdy_util_.ConstructSpdySynReplyError("302 Found", responseHeaders, | 675 "302 Found", responseHeaders, responseHeadersSize, 1)); |
| 693 responseHeadersSize, 1)); | |
| 694 MockRead spdy_reads[] = { | 676 MockRead spdy_reads[] = { |
| 695 CreateMockRead(*resp, 1, ASYNC), | 677 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 2), |
| 696 MockRead(ASYNC, 0, 2), | |
| 697 }; | 678 }; |
| 698 | 679 |
| 699 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 680 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 700 spdy_reads, arraysize(spdy_reads), spdy_writes, | 681 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 701 arraysize(spdy_writes)); | 682 arraysize(spdy_writes)); |
| 702 AddAuthToCache(); | 683 AddAuthToCache(); |
| 703 | 684 |
| 704 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 685 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| 705 ClientSocketPool::RespectLimits::ENABLED, | 686 ClientSocketPool::RespectLimits::ENABLED, |
| 706 callback_.callback(), &pool_, BoundNetLog()); | 687 callback_.callback(), &pool_, BoundNetLog()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 735 // Make sure Location header was included and correct. | 716 // Make sure Location header was included and correct. |
| 736 std::string location; | 717 std::string location; |
| 737 EXPECT_TRUE(headers->IsRedirect(&location)); | 718 EXPECT_TRUE(headers->IsRedirect(&location)); |
| 738 EXPECT_EQ(location, redirectTarget); | 719 EXPECT_EQ(location, redirectTarget); |
| 739 } | 720 } |
| 740 } | 721 } |
| 741 | 722 |
| 742 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. | 723 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. |
| 743 | 724 |
| 744 } // namespace net | 725 } // namespace net |
| OLD | NEW |