| 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 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 "Host: www.google.com:443\r\n" | 281 "Host: www.google.com:443\r\n" |
| 282 "Proxy-Connection: keep-alive\r\n\r\n"), | 282 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 283 }; | 283 }; |
| 284 MockRead reads[] = { | 284 MockRead reads[] = { |
| 285 // No credentials. | 285 // No credentials. |
| 286 MockRead(ASYNC, 1, "HTTP/1.1 407 Proxy Authentication Required\r\n"), | 286 MockRead(ASYNC, 1, "HTTP/1.1 407 Proxy Authentication Required\r\n"), |
| 287 MockRead(ASYNC, 2, "Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 287 MockRead(ASYNC, 2, "Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 288 MockRead(ASYNC, 3, "Content-Length: 10\r\n\r\n"), | 288 MockRead(ASYNC, 3, "Content-Length: 10\r\n\r\n"), |
| 289 MockRead(ASYNC, 4, "0123456789"), | 289 MockRead(ASYNC, 4, "0123456789"), |
| 290 }; | 290 }; |
| 291 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyConnect( | 291 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyConnect( |
| 292 NULL, 0, 1, LOW, HostPortPair("www.google.com", 443))); | 292 NULL, 0, 1, LOW, HostPortPair("www.google.com", 443))); |
| 293 scoped_ptr<SpdyFrame> rst( | 293 scoped_ptr<SpdySerializedFrame> rst( |
| 294 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 294 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 295 MockWrite spdy_writes[] = { | 295 MockWrite spdy_writes[] = { |
| 296 CreateMockWrite(*req, 0, ASYNC), | 296 CreateMockWrite(*req, 0, ASYNC), |
| 297 CreateMockWrite(*rst, 2, ASYNC), | 297 CreateMockWrite(*rst, 2, ASYNC), |
| 298 }; | 298 }; |
| 299 SpdyHeaderBlock resp_block; | 299 SpdyHeaderBlock resp_block; |
| 300 resp_block[spdy_util_.GetStatusKey()] = "407"; | 300 resp_block[spdy_util_.GetStatusKey()] = "407"; |
| 301 resp_block["proxy-authenticate"] = "Basic realm=\"MyRealm1\""; | 301 resp_block["proxy-authenticate"] = "Basic realm=\"MyRealm1\""; |
| 302 spdy_util_.MaybeAddVersionHeader(&resp_block); | 302 spdy_util_.MaybeAddVersionHeader(&resp_block); |
| 303 | 303 |
| 304 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyReply(1, resp_block)); | 304 scoped_ptr<SpdySerializedFrame> resp( |
| 305 spdy_util_.ConstructSpdyReply(1, resp_block)); |
| 305 MockRead spdy_reads[] = { | 306 MockRead spdy_reads[] = { |
| 306 CreateMockRead(*resp, 1, ASYNC), | 307 CreateMockRead(*resp, 1, ASYNC), |
| 307 MockRead(ASYNC, 0, 3) | 308 MockRead(ASYNC, 0, 3) |
| 308 }; | 309 }; |
| 309 | 310 |
| 310 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 311 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 311 spdy_reads, arraysize(spdy_reads), spdy_writes, | 312 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 312 arraysize(spdy_writes)); | 313 arraysize(spdy_writes)); |
| 313 | 314 |
| 314 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 315 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n" | 390 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n" |
| 390 "Foo: " + | 391 "Foo: " + |
| 391 proxy_host_port + "\r\n\r\n"; | 392 proxy_host_port + "\r\n\r\n"; |
| 392 MockWrite writes[] = { | 393 MockWrite writes[] = { |
| 393 MockWrite(ASYNC, 0, request.c_str()), | 394 MockWrite(ASYNC, 0, request.c_str()), |
| 394 }; | 395 }; |
| 395 MockRead reads[] = { | 396 MockRead reads[] = { |
| 396 MockRead(ASYNC, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 397 MockRead(ASYNC, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 397 }; | 398 }; |
| 398 | 399 |
| 399 scoped_ptr<SpdyFrame> req( | 400 scoped_ptr<SpdySerializedFrame> req( |
| 400 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, | 401 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, |
| 401 HostPortPair("www.google.com", 443))); | 402 HostPortPair("www.google.com", 443))); |
| 402 MockWrite spdy_writes[] = { | 403 MockWrite spdy_writes[] = { |
| 403 CreateMockWrite(*req, 0, ASYNC) | 404 CreateMockWrite(*req, 0, ASYNC) |
| 404 }; | 405 }; |
| 405 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 406 scoped_ptr<SpdySerializedFrame> resp( |
| 407 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 406 MockRead spdy_reads[] = { | 408 MockRead spdy_reads[] = { |
| 407 CreateMockRead(*resp, 1, ASYNC), | 409 CreateMockRead(*resp, 1, ASYNC), |
| 408 // Connection stays open. | 410 // Connection stays open. |
| 409 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), | 411 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), |
| 410 }; | 412 }; |
| 411 | 413 |
| 412 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 414 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 413 spdy_reads, arraysize(spdy_reads), spdy_writes, | 415 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 414 arraysize(spdy_writes)); | 416 arraysize(spdy_writes)); |
| 415 AddAuthToCache(); | 417 AddAuthToCache(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 431 proxy_host_port.c_str()); | 433 proxy_host_port.c_str()); |
| 432 } | 434 } |
| 433 | 435 |
| 434 // Make sure that HttpProxyConnectJob passes on its priority to its | 436 // Make sure that HttpProxyConnectJob passes on its priority to its |
| 435 // SPDY session's socket request on Init (if applicable). | 437 // SPDY session's socket request on Init (if applicable). |
| 436 TEST_P(HttpProxyClientSocketPoolTest, | 438 TEST_P(HttpProxyClientSocketPoolTest, |
| 437 SetSpdySessionSocketRequestPriorityOnInit) { | 439 SetSpdySessionSocketRequestPriorityOnInit) { |
| 438 if (GetParam().proxy_type != SPDY) | 440 if (GetParam().proxy_type != SPDY) |
| 439 return; | 441 return; |
| 440 | 442 |
| 441 scoped_ptr<SpdyFrame> req( | 443 scoped_ptr<SpdySerializedFrame> req( |
| 442 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, MEDIUM, | 444 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, MEDIUM, |
| 443 HostPortPair("www.google.com", 443))); | 445 HostPortPair("www.google.com", 443))); |
| 444 MockWrite spdy_writes[] = { | 446 MockWrite spdy_writes[] = { |
| 445 CreateMockWrite(*req, 0, ASYNC) | 447 CreateMockWrite(*req, 0, ASYNC) |
| 446 }; | 448 }; |
| 447 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 449 scoped_ptr<SpdySerializedFrame> resp( |
| 450 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 448 MockRead spdy_reads[] = { | 451 MockRead spdy_reads[] = { |
| 449 CreateMockRead(*resp, 1, ASYNC), | 452 CreateMockRead(*resp, 1, ASYNC), |
| 450 MockRead(ASYNC, 0, 2) | 453 MockRead(ASYNC, 0, 2) |
| 451 }; | 454 }; |
| 452 | 455 |
| 453 Initialize(NULL, 0, NULL, 0, | 456 Initialize(NULL, 0, NULL, 0, |
| 454 spdy_reads, arraysize(spdy_reads), | 457 spdy_reads, arraysize(spdy_reads), |
| 455 spdy_writes, arraysize(spdy_writes)); | 458 spdy_writes, arraysize(spdy_writes)); |
| 456 AddAuthToCache(); | 459 AddAuthToCache(); |
| 457 | 460 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 MockWrite(ASYNC, 0, | 544 MockWrite(ASYNC, 0, |
| 542 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 545 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 543 "Host: www.google.com:443\r\n" | 546 "Host: www.google.com:443\r\n" |
| 544 "Proxy-Connection: keep-alive\r\n" | 547 "Proxy-Connection: keep-alive\r\n" |
| 545 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 548 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 546 }; | 549 }; |
| 547 MockRead reads[] = { | 550 MockRead reads[] = { |
| 548 MockRead(ASYNC, 1, "HTTP/1.1 200 Conn"), | 551 MockRead(ASYNC, 1, "HTTP/1.1 200 Conn"), |
| 549 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 2), | 552 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 2), |
| 550 }; | 553 }; |
| 551 scoped_ptr<SpdyFrame> req( | 554 scoped_ptr<SpdySerializedFrame> req( |
| 552 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, | 555 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, |
| 553 HostPortPair("www.google.com", 443))); | 556 HostPortPair("www.google.com", 443))); |
| 554 MockWrite spdy_writes[] = { | 557 MockWrite spdy_writes[] = { |
| 555 CreateMockWrite(*req, 0, ASYNC) | 558 CreateMockWrite(*req, 0, ASYNC) |
| 556 }; | 559 }; |
| 557 MockRead spdy_reads[] = { | 560 MockRead spdy_reads[] = { |
| 558 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), | 561 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), |
| 559 }; | 562 }; |
| 560 | 563 |
| 561 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 564 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 MockWrite writes[] = { | 619 MockWrite writes[] = { |
| 617 MockWrite(ASYNC, 0, | 620 MockWrite(ASYNC, 0, |
| 618 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 621 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 619 "Host: www.google.com:443\r\n" | 622 "Host: www.google.com:443\r\n" |
| 620 "Proxy-Connection: keep-alive\r\n" | 623 "Proxy-Connection: keep-alive\r\n" |
| 621 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 624 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 622 }; | 625 }; |
| 623 MockRead reads[] = { | 626 MockRead reads[] = { |
| 624 MockRead(ASYNC, 1, "HTTP/1.1 304 Not Modified\r\n\r\n"), | 627 MockRead(ASYNC, 1, "HTTP/1.1 304 Not Modified\r\n\r\n"), |
| 625 }; | 628 }; |
| 626 scoped_ptr<SpdyFrame> req( | 629 scoped_ptr<SpdySerializedFrame> req( |
| 627 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, | 630 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, |
| 628 HostPortPair("www.google.com", 443))); | 631 HostPortPair("www.google.com", 443))); |
| 629 scoped_ptr<SpdyFrame> rst( | 632 scoped_ptr<SpdySerializedFrame> rst( |
| 630 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 633 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 631 MockWrite spdy_writes[] = { | 634 MockWrite spdy_writes[] = { |
| 632 CreateMockWrite(*req, 0, ASYNC), | 635 CreateMockWrite(*req, 0, ASYNC), |
| 633 CreateMockWrite(*rst, 2, ASYNC), | 636 CreateMockWrite(*rst, 2, ASYNC), |
| 634 }; | 637 }; |
| 635 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdySynReplyError(1)); | 638 scoped_ptr<SpdySerializedFrame> resp( |
| 639 spdy_util_.ConstructSpdySynReplyError(1)); |
| 636 MockRead spdy_reads[] = { | 640 MockRead spdy_reads[] = { |
| 637 CreateMockRead(*resp, 1, ASYNC), | 641 CreateMockRead(*resp, 1, ASYNC), |
| 638 MockRead(ASYNC, 0, 3), | 642 MockRead(ASYNC, 0, 3), |
| 639 }; | 643 }; |
| 640 | 644 |
| 641 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 645 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 642 spdy_reads, arraysize(spdy_reads), spdy_writes, | 646 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 643 arraysize(spdy_writes)); | 647 arraysize(spdy_writes)); |
| 644 AddAuthToCache(); | 648 AddAuthToCache(); |
| 645 | 649 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 667 MockWrite writes[] = { | 671 MockWrite writes[] = { |
| 668 MockWrite(ASYNC, 0, | 672 MockWrite(ASYNC, 0, |
| 669 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 673 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 670 "Host: www.google.com:443\r\n" | 674 "Host: www.google.com:443\r\n" |
| 671 "Proxy-Connection: keep-alive\r\n" | 675 "Proxy-Connection: keep-alive\r\n" |
| 672 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 676 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 673 }; | 677 }; |
| 674 MockRead reads[] = { | 678 MockRead reads[] = { |
| 675 MockRead(ASYNC, 1, responseText.c_str()), | 679 MockRead(ASYNC, 1, responseText.c_str()), |
| 676 }; | 680 }; |
| 677 scoped_ptr<SpdyFrame> req( | 681 scoped_ptr<SpdySerializedFrame> req( |
| 678 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, | 682 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, |
| 679 HostPortPair("www.google.com", 443))); | 683 HostPortPair("www.google.com", 443))); |
| 680 scoped_ptr<SpdyFrame> rst( | 684 scoped_ptr<SpdySerializedFrame> rst( |
| 681 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 685 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 682 | 686 |
| 683 MockWrite spdy_writes[] = { | 687 MockWrite spdy_writes[] = { |
| 684 CreateMockWrite(*req, 0, ASYNC), | 688 CreateMockWrite(*req, 0, ASYNC), |
| 685 CreateMockWrite(*rst, 3, ASYNC), | 689 CreateMockWrite(*rst, 3, ASYNC), |
| 686 }; | 690 }; |
| 687 | 691 |
| 688 const char* const responseHeaders[] = { | 692 const char* const responseHeaders[] = { |
| 689 "location", redirectTarget.c_str(), | 693 "location", redirectTarget.c_str(), |
| 690 "set-cookie", "foo=bar", | 694 "set-cookie", "foo=bar", |
| 691 }; | 695 }; |
| 692 const int responseHeadersSize = arraysize(responseHeaders) / 2; | 696 const int responseHeadersSize = arraysize(responseHeaders) / 2; |
| 693 scoped_ptr<SpdyFrame> resp( | 697 scoped_ptr<SpdySerializedFrame> resp(spdy_util_.ConstructSpdySynReplyError( |
| 694 spdy_util_.ConstructSpdySynReplyError( | 698 "302 Found", responseHeaders, responseHeadersSize, 1)); |
| 695 "302 Found", | |
| 696 responseHeaders, responseHeadersSize, | |
| 697 1)); | |
| 698 MockRead spdy_reads[] = { | 699 MockRead spdy_reads[] = { |
| 699 CreateMockRead(*resp, 1, ASYNC), | 700 CreateMockRead(*resp, 1, ASYNC), |
| 700 MockRead(ASYNC, 0, 2), | 701 MockRead(ASYNC, 0, 2), |
| 701 }; | 702 }; |
| 702 | 703 |
| 703 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 704 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| 704 spdy_reads, arraysize(spdy_reads), spdy_writes, | 705 spdy_reads, arraysize(spdy_reads), spdy_writes, |
| 705 arraysize(spdy_writes)); | 706 arraysize(spdy_writes)); |
| 706 AddAuthToCache(); | 707 AddAuthToCache(); |
| 707 | 708 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 // Make sure Location header was included and correct. | 740 // Make sure Location header was included and correct. |
| 740 std::string location; | 741 std::string location; |
| 741 EXPECT_TRUE(headers->IsRedirect(&location)); | 742 EXPECT_TRUE(headers->IsRedirect(&location)); |
| 742 EXPECT_EQ(location, redirectTarget); | 743 EXPECT_EQ(location, redirectTarget); |
| 743 } | 744 } |
| 744 } | 745 } |
| 745 | 746 |
| 746 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. | 747 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. |
| 747 | 748 |
| 748 } // namespace net | 749 } // namespace net |
| OLD | NEW |