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_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
6 | 6 |
7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
8 #include <stdarg.h> | 8 #include <stdarg.h> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 #include "net/proxy/proxy_service.h" | 49 #include "net/proxy/proxy_service.h" |
50 #include "net/socket/client_socket_factory.h" | 50 #include "net/socket/client_socket_factory.h" |
51 #include "net/socket/client_socket_pool_manager.h" | 51 #include "net/socket/client_socket_pool_manager.h" |
52 #include "net/socket/mock_client_socket_pool_manager.h" | 52 #include "net/socket/mock_client_socket_pool_manager.h" |
53 #include "net/socket/next_proto.h" | 53 #include "net/socket/next_proto.h" |
54 #include "net/socket/socket_test_util.h" | 54 #include "net/socket/socket_test_util.h" |
55 #include "net/socket/ssl_client_socket.h" | 55 #include "net/socket/ssl_client_socket.h" |
56 #include "net/spdy/spdy_framer.h" | 56 #include "net/spdy/spdy_framer.h" |
57 #include "net/spdy/spdy_session.h" | 57 #include "net/spdy/spdy_session.h" |
58 #include "net/spdy/spdy_session_pool.h" | 58 #include "net/spdy/spdy_session_pool.h" |
59 #include "net/spdy/spdy_test_util_spdy2.h" | 59 #include "net/spdy/spdy_test_util_common.h" |
60 #include "net/ssl/ssl_cert_request_info.h" | 60 #include "net/ssl/ssl_cert_request_info.h" |
61 #include "net/ssl/ssl_config_service_defaults.h" | 61 #include "net/ssl/ssl_config_service_defaults.h" |
62 #include "net/ssl/ssl_info.h" | 62 #include "net/ssl/ssl_info.h" |
63 #include "net/test/cert_test_util.h" | 63 #include "net/test/cert_test_util.h" |
64 #include "testing/gtest/include/gtest/gtest.h" | 64 #include "testing/gtest/include/gtest/gtest.h" |
65 #include "testing/platform_test.h" | 65 #include "testing/platform_test.h" |
66 | 66 |
67 using namespace net::test_spdy2; | |
68 | |
69 //----------------------------------------------------------------------------- | 67 //----------------------------------------------------------------------------- |
70 | 68 |
71 namespace { | 69 namespace { |
72 | 70 |
73 const base::string16 kBar(ASCIIToUTF16("bar")); | 71 const base::string16 kBar(ASCIIToUTF16("bar")); |
74 const base::string16 kBar2(ASCIIToUTF16("bar2")); | 72 const base::string16 kBar2(ASCIIToUTF16("bar2")); |
75 const base::string16 kBar3(ASCIIToUTF16("bar3")); | 73 const base::string16 kBar3(ASCIIToUTF16("bar3")); |
76 const base::string16 kBaz(ASCIIToUTF16("baz")); | 74 const base::string16 kBaz(ASCIIToUTF16("baz")); |
77 const base::string16 kFirst(ASCIIToUTF16("first")); | 75 const base::string16 kFirst(ASCIIToUTF16("first")); |
78 const base::string16 kFoo(ASCIIToUTF16("foo")); | 76 const base::string16 kFoo(ASCIIToUTF16("foo")); |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 namespace net { | 226 namespace net { |
229 | 227 |
230 namespace { | 228 namespace { |
231 | 229 |
232 HttpNetworkSession* CreateSession(SpdySessionDependencies* session_deps) { | 230 HttpNetworkSession* CreateSession(SpdySessionDependencies* session_deps) { |
233 return SpdySessionDependencies::SpdyCreateSession(session_deps); | 231 return SpdySessionDependencies::SpdyCreateSession(session_deps); |
234 } | 232 } |
235 | 233 |
236 } // namespace | 234 } // namespace |
237 | 235 |
238 class HttpNetworkTransactionSpdy2Test : public PlatformTest { | 236 class HttpNetworkTransactionTest |
| 237 : public PlatformTest, |
| 238 public ::testing::WithParamInterface<NextProto> { |
239 public: | 239 public: |
240 virtual ~HttpNetworkTransactionSpdy2Test() { | 240 virtual ~HttpNetworkTransactionTest() { |
241 // Important to restore the per-pool limit first, since the pool limit must | 241 // Important to restore the per-pool limit first, since the pool limit must |
242 // always be greater than group limit, and the tests reduce both limits. | 242 // always be greater than group limit, and the tests reduce both limits. |
243 ClientSocketPoolManager::set_max_sockets_per_pool( | 243 ClientSocketPoolManager::set_max_sockets_per_pool( |
244 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_); | 244 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_); |
245 ClientSocketPoolManager::set_max_sockets_per_group( | 245 ClientSocketPoolManager::set_max_sockets_per_group( |
246 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_); | 246 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_); |
247 } | 247 } |
248 | 248 |
249 protected: | 249 protected: |
250 HttpNetworkTransactionSpdy2Test() | 250 HttpNetworkTransactionTest() |
251 : spdy_util_(kProtoSPDY2), | 251 : spdy_util_(GetParam()), |
252 session_deps_(kProtoSPDY2), | 252 session_deps_(GetParam()), |
253 old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( | 253 old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( |
254 HttpNetworkSession::NORMAL_SOCKET_POOL)), | 254 HttpNetworkSession::NORMAL_SOCKET_POOL)), |
255 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( | 255 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( |
256 HttpNetworkSession::NORMAL_SOCKET_POOL)) { | 256 HttpNetworkSession::NORMAL_SOCKET_POOL)) { |
257 } | 257 } |
258 | 258 |
259 struct SimpleGetHelperResult { | 259 struct SimpleGetHelperResult { |
260 int rv; | 260 int rv; |
261 std::string status_line; | 261 std::string status_line; |
262 std::string response_data; | 262 std::string response_data; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 | 376 |
377 SpdyTestUtil spdy_util_; | 377 SpdyTestUtil spdy_util_; |
378 SpdySessionDependencies session_deps_; | 378 SpdySessionDependencies session_deps_; |
379 | 379 |
380 // Original socket limits. Some tests set these. Safest to always restore | 380 // Original socket limits. Some tests set these. Safest to always restore |
381 // them once each test has been run. | 381 // them once each test has been run. |
382 int old_max_group_sockets_; | 382 int old_max_group_sockets_; |
383 int old_max_pool_sockets_; | 383 int old_max_pool_sockets_; |
384 }; | 384 }; |
385 | 385 |
| 386 INSTANTIATE_TEST_CASE_P( |
| 387 NextProto, |
| 388 HttpNetworkTransactionTest, |
| 389 testing::Values(kProtoSPDY2, kProtoSPDY3, kProtoSPDY31, kProtoSPDY4a2)); |
| 390 |
386 namespace { | 391 namespace { |
387 | 392 |
388 // Fill |str| with a long header list that consumes >= |size| bytes. | 393 // Fill |str| with a long header list that consumes >= |size| bytes. |
389 void FillLargeHeadersString(std::string* str, int size) { | 394 void FillLargeHeadersString(std::string* str, int size) { |
390 const char* row = | 395 const char* row = |
391 "SomeHeaderName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"; | 396 "SomeHeaderName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"; |
392 const int sizeof_row = strlen(row); | 397 const int sizeof_row = strlen(row); |
393 const int num_rows = static_cast<int>( | 398 const int num_rows = static_cast<int>( |
394 ceil(static_cast<float>(size) / sizeof_row)); | 399 ceil(static_cast<float>(size) / sizeof_row)); |
395 const int sizeof_data = num_rows * sizeof_row; | 400 const int sizeof_data = num_rows * sizeof_row; |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 return false; | 560 return false; |
556 EXPECT_FALSE(auth_challenge->is_proxy); | 561 EXPECT_FALSE(auth_challenge->is_proxy); |
557 EXPECT_EQ("172.22.68.17:80", auth_challenge->challenger.ToString()); | 562 EXPECT_EQ("172.22.68.17:80", auth_challenge->challenger.ToString()); |
558 EXPECT_EQ(std::string(), auth_challenge->realm); | 563 EXPECT_EQ(std::string(), auth_challenge->realm); |
559 EXPECT_EQ("ntlm", auth_challenge->scheme); | 564 EXPECT_EQ("ntlm", auth_challenge->scheme); |
560 return true; | 565 return true; |
561 } | 566 } |
562 | 567 |
563 } // namespace | 568 } // namespace |
564 | 569 |
565 TEST_F(HttpNetworkTransactionSpdy2Test, Basic) { | 570 // TODO(akalin): Don't early-exit in the tests below for values > |
| 571 // kProtoSPDY3. |
| 572 |
| 573 TEST_P(HttpNetworkTransactionTest, Basic) { |
566 scoped_ptr<HttpTransaction> trans( | 574 scoped_ptr<HttpTransaction> trans( |
567 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 575 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
568 CreateSession(&session_deps_))); | 576 CreateSession(&session_deps_))); |
569 } | 577 } |
570 | 578 |
571 TEST_F(HttpNetworkTransactionSpdy2Test, SimpleGET) { | 579 TEST_P(HttpNetworkTransactionTest, SimpleGET) { |
572 MockRead data_reads[] = { | 580 MockRead data_reads[] = { |
573 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 581 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
574 MockRead("hello world"), | 582 MockRead("hello world"), |
575 MockRead(SYNCHRONOUS, OK), | 583 MockRead(SYNCHRONOUS, OK), |
576 }; | 584 }; |
577 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 585 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
578 arraysize(data_reads)); | 586 arraysize(data_reads)); |
579 EXPECT_EQ(OK, out.rv); | 587 EXPECT_EQ(OK, out.rv); |
580 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 588 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
581 EXPECT_EQ("hello world", out.response_data); | 589 EXPECT_EQ("hello world", out.response_data); |
582 } | 590 } |
583 | 591 |
584 // Response with no status line. | 592 // Response with no status line. |
585 TEST_F(HttpNetworkTransactionSpdy2Test, SimpleGETNoHeaders) { | 593 TEST_P(HttpNetworkTransactionTest, SimpleGETNoHeaders) { |
586 MockRead data_reads[] = { | 594 MockRead data_reads[] = { |
587 MockRead("hello world"), | 595 MockRead("hello world"), |
588 MockRead(SYNCHRONOUS, OK), | 596 MockRead(SYNCHRONOUS, OK), |
589 }; | 597 }; |
590 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 598 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
591 arraysize(data_reads)); | 599 arraysize(data_reads)); |
592 EXPECT_EQ(OK, out.rv); | 600 EXPECT_EQ(OK, out.rv); |
593 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 601 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
594 EXPECT_EQ("hello world", out.response_data); | 602 EXPECT_EQ("hello world", out.response_data); |
595 } | 603 } |
596 | 604 |
597 // Allow up to 4 bytes of junk to precede status line. | 605 // Allow up to 4 bytes of junk to precede status line. |
598 TEST_F(HttpNetworkTransactionSpdy2Test, StatusLineJunk3Bytes) { | 606 TEST_P(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { |
599 MockRead data_reads[] = { | 607 MockRead data_reads[] = { |
600 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 608 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
601 MockRead(SYNCHRONOUS, OK), | 609 MockRead(SYNCHRONOUS, OK), |
602 }; | 610 }; |
603 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 611 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
604 arraysize(data_reads)); | 612 arraysize(data_reads)); |
605 EXPECT_EQ(OK, out.rv); | 613 EXPECT_EQ(OK, out.rv); |
606 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 614 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
607 EXPECT_EQ("DATA", out.response_data); | 615 EXPECT_EQ("DATA", out.response_data); |
608 } | 616 } |
609 | 617 |
610 // Allow up to 4 bytes of junk to precede status line. | 618 // Allow up to 4 bytes of junk to precede status line. |
611 TEST_F(HttpNetworkTransactionSpdy2Test, StatusLineJunk4Bytes) { | 619 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes) { |
612 MockRead data_reads[] = { | 620 MockRead data_reads[] = { |
613 MockRead("\n\nQJHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 621 MockRead("\n\nQJHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
614 MockRead(SYNCHRONOUS, OK), | 622 MockRead(SYNCHRONOUS, OK), |
615 }; | 623 }; |
616 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 624 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
617 arraysize(data_reads)); | 625 arraysize(data_reads)); |
618 EXPECT_EQ(OK, out.rv); | 626 EXPECT_EQ(OK, out.rv); |
619 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 627 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
620 EXPECT_EQ("DATA", out.response_data); | 628 EXPECT_EQ("DATA", out.response_data); |
621 } | 629 } |
622 | 630 |
623 // Beyond 4 bytes of slop and it should fail to find a status line. | 631 // Beyond 4 bytes of slop and it should fail to find a status line. |
624 TEST_F(HttpNetworkTransactionSpdy2Test, StatusLineJunk5Bytes) { | 632 TEST_P(HttpNetworkTransactionTest, StatusLineJunk5Bytes) { |
625 MockRead data_reads[] = { | 633 MockRead data_reads[] = { |
626 MockRead("xxxxxHTTP/1.1 404 Not Found\nServer: blah"), | 634 MockRead("xxxxxHTTP/1.1 404 Not Found\nServer: blah"), |
627 MockRead(SYNCHRONOUS, OK), | 635 MockRead(SYNCHRONOUS, OK), |
628 }; | 636 }; |
629 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 637 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
630 arraysize(data_reads)); | 638 arraysize(data_reads)); |
631 EXPECT_EQ(OK, out.rv); | 639 EXPECT_EQ(OK, out.rv); |
632 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 640 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
633 EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); | 641 EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); |
634 } | 642 } |
635 | 643 |
636 // Same as StatusLineJunk4Bytes, except the read chunks are smaller. | 644 // Same as StatusLineJunk4Bytes, except the read chunks are smaller. |
637 TEST_F(HttpNetworkTransactionSpdy2Test, StatusLineJunk4Bytes_Slow) { | 645 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes_Slow) { |
638 MockRead data_reads[] = { | 646 MockRead data_reads[] = { |
639 MockRead("\n"), | 647 MockRead("\n"), |
640 MockRead("\n"), | 648 MockRead("\n"), |
641 MockRead("Q"), | 649 MockRead("Q"), |
642 MockRead("J"), | 650 MockRead("J"), |
643 MockRead("HTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 651 MockRead("HTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
644 MockRead(SYNCHRONOUS, OK), | 652 MockRead(SYNCHRONOUS, OK), |
645 }; | 653 }; |
646 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 654 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
647 arraysize(data_reads)); | 655 arraysize(data_reads)); |
648 EXPECT_EQ(OK, out.rv); | 656 EXPECT_EQ(OK, out.rv); |
649 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 657 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
650 EXPECT_EQ("DATA", out.response_data); | 658 EXPECT_EQ("DATA", out.response_data); |
651 } | 659 } |
652 | 660 |
653 // Close the connection before enough bytes to have a status line. | 661 // Close the connection before enough bytes to have a status line. |
654 TEST_F(HttpNetworkTransactionSpdy2Test, StatusLinePartial) { | 662 TEST_P(HttpNetworkTransactionTest, StatusLinePartial) { |
655 MockRead data_reads[] = { | 663 MockRead data_reads[] = { |
656 MockRead("HTT"), | 664 MockRead("HTT"), |
657 MockRead(SYNCHRONOUS, OK), | 665 MockRead(SYNCHRONOUS, OK), |
658 }; | 666 }; |
659 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 667 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
660 arraysize(data_reads)); | 668 arraysize(data_reads)); |
661 EXPECT_EQ(OK, out.rv); | 669 EXPECT_EQ(OK, out.rv); |
662 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 670 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
663 EXPECT_EQ("HTT", out.response_data); | 671 EXPECT_EQ("HTT", out.response_data); |
664 } | 672 } |
665 | 673 |
666 // Simulate a 204 response, lacking a Content-Length header, sent over a | 674 // Simulate a 204 response, lacking a Content-Length header, sent over a |
667 // persistent connection. The response should still terminate since a 204 | 675 // persistent connection. The response should still terminate since a 204 |
668 // cannot have a response body. | 676 // cannot have a response body. |
669 TEST_F(HttpNetworkTransactionSpdy2Test, StopsReading204) { | 677 TEST_P(HttpNetworkTransactionTest, StopsReading204) { |
670 MockRead data_reads[] = { | 678 MockRead data_reads[] = { |
671 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), | 679 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), |
672 MockRead("junk"), // Should not be read!! | 680 MockRead("junk"), // Should not be read!! |
673 MockRead(SYNCHRONOUS, OK), | 681 MockRead(SYNCHRONOUS, OK), |
674 }; | 682 }; |
675 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 683 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
676 arraysize(data_reads)); | 684 arraysize(data_reads)); |
677 EXPECT_EQ(OK, out.rv); | 685 EXPECT_EQ(OK, out.rv); |
678 EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); | 686 EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); |
679 EXPECT_EQ("", out.response_data); | 687 EXPECT_EQ("", out.response_data); |
680 } | 688 } |
681 | 689 |
682 // A simple request using chunked encoding with some extra data after. | 690 // A simple request using chunked encoding with some extra data after. |
683 // (Like might be seen in a pipelined response.) | 691 // (Like might be seen in a pipelined response.) |
684 TEST_F(HttpNetworkTransactionSpdy2Test, ChunkedEncoding) { | 692 TEST_P(HttpNetworkTransactionTest, ChunkedEncoding) { |
685 MockRead data_reads[] = { | 693 MockRead data_reads[] = { |
686 MockRead("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n"), | 694 MockRead("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n"), |
687 MockRead("5\r\nHello\r\n"), | 695 MockRead("5\r\nHello\r\n"), |
688 MockRead("1\r\n"), | 696 MockRead("1\r\n"), |
689 MockRead(" \r\n"), | 697 MockRead(" \r\n"), |
690 MockRead("5\r\nworld\r\n"), | 698 MockRead("5\r\nworld\r\n"), |
691 MockRead("0\r\n\r\nHTTP/1.1 200 OK\r\n"), | 699 MockRead("0\r\n\r\nHTTP/1.1 200 OK\r\n"), |
692 MockRead(SYNCHRONOUS, OK), | 700 MockRead(SYNCHRONOUS, OK), |
693 }; | 701 }; |
694 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 702 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
695 arraysize(data_reads)); | 703 arraysize(data_reads)); |
696 EXPECT_EQ(OK, out.rv); | 704 EXPECT_EQ(OK, out.rv); |
697 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 705 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
698 EXPECT_EQ("Hello world", out.response_data); | 706 EXPECT_EQ("Hello world", out.response_data); |
699 } | 707 } |
700 | 708 |
701 // Next tests deal with http://crbug.com/56344. | 709 // Next tests deal with http://crbug.com/56344. |
702 | 710 |
703 TEST_F(HttpNetworkTransactionSpdy2Test, | 711 TEST_P(HttpNetworkTransactionTest, |
704 MultipleContentLengthHeadersNoTransferEncoding) { | 712 MultipleContentLengthHeadersNoTransferEncoding) { |
705 MockRead data_reads[] = { | 713 MockRead data_reads[] = { |
706 MockRead("HTTP/1.1 200 OK\r\n"), | 714 MockRead("HTTP/1.1 200 OK\r\n"), |
707 MockRead("Content-Length: 10\r\n"), | 715 MockRead("Content-Length: 10\r\n"), |
708 MockRead("Content-Length: 5\r\n\r\n"), | 716 MockRead("Content-Length: 5\r\n\r\n"), |
709 }; | 717 }; |
710 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 718 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
711 arraysize(data_reads)); | 719 arraysize(data_reads)); |
712 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); | 720 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); |
713 } | 721 } |
714 | 722 |
715 TEST_F(HttpNetworkTransactionSpdy2Test, | 723 TEST_P(HttpNetworkTransactionTest, |
716 DuplicateContentLengthHeadersNoTransferEncoding) { | 724 DuplicateContentLengthHeadersNoTransferEncoding) { |
717 MockRead data_reads[] = { | 725 MockRead data_reads[] = { |
718 MockRead("HTTP/1.1 200 OK\r\n"), | 726 MockRead("HTTP/1.1 200 OK\r\n"), |
719 MockRead("Content-Length: 5\r\n"), | 727 MockRead("Content-Length: 5\r\n"), |
720 MockRead("Content-Length: 5\r\n\r\n"), | 728 MockRead("Content-Length: 5\r\n\r\n"), |
721 MockRead("Hello"), | 729 MockRead("Hello"), |
722 }; | 730 }; |
723 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 731 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
724 arraysize(data_reads)); | 732 arraysize(data_reads)); |
725 EXPECT_EQ(OK, out.rv); | 733 EXPECT_EQ(OK, out.rv); |
726 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 734 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
727 EXPECT_EQ("Hello", out.response_data); | 735 EXPECT_EQ("Hello", out.response_data); |
728 } | 736 } |
729 | 737 |
730 TEST_F(HttpNetworkTransactionSpdy2Test, | 738 TEST_P(HttpNetworkTransactionTest, |
731 ComplexContentLengthHeadersNoTransferEncoding) { | 739 ComplexContentLengthHeadersNoTransferEncoding) { |
732 // More than 2 dupes. | 740 // More than 2 dupes. |
733 { | 741 { |
734 MockRead data_reads[] = { | 742 MockRead data_reads[] = { |
735 MockRead("HTTP/1.1 200 OK\r\n"), | 743 MockRead("HTTP/1.1 200 OK\r\n"), |
736 MockRead("Content-Length: 5\r\n"), | 744 MockRead("Content-Length: 5\r\n"), |
737 MockRead("Content-Length: 5\r\n"), | 745 MockRead("Content-Length: 5\r\n"), |
738 MockRead("Content-Length: 5\r\n\r\n"), | 746 MockRead("Content-Length: 5\r\n\r\n"), |
739 MockRead("Hello"), | 747 MockRead("Hello"), |
740 }; | 748 }; |
(...skipping 25 matching lines...) Expand all Loading... |
766 MockRead("Content-Length: 10\r\n"), | 774 MockRead("Content-Length: 10\r\n"), |
767 MockRead("Content-Length: 10\r\n"), | 775 MockRead("Content-Length: 10\r\n"), |
768 MockRead("Content-Length: 5\r\n\r\n"), | 776 MockRead("Content-Length: 5\r\n\r\n"), |
769 }; | 777 }; |
770 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 778 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
771 arraysize(data_reads)); | 779 arraysize(data_reads)); |
772 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); | 780 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); |
773 } | 781 } |
774 } | 782 } |
775 | 783 |
776 TEST_F(HttpNetworkTransactionSpdy2Test, | 784 TEST_P(HttpNetworkTransactionTest, |
777 MultipleContentLengthHeadersTransferEncoding) { | 785 MultipleContentLengthHeadersTransferEncoding) { |
778 MockRead data_reads[] = { | 786 MockRead data_reads[] = { |
779 MockRead("HTTP/1.1 200 OK\r\n"), | 787 MockRead("HTTP/1.1 200 OK\r\n"), |
780 MockRead("Content-Length: 666\r\n"), | 788 MockRead("Content-Length: 666\r\n"), |
781 MockRead("Content-Length: 1337\r\n"), | 789 MockRead("Content-Length: 1337\r\n"), |
782 MockRead("Transfer-Encoding: chunked\r\n\r\n"), | 790 MockRead("Transfer-Encoding: chunked\r\n\r\n"), |
783 MockRead("5\r\nHello\r\n"), | 791 MockRead("5\r\nHello\r\n"), |
784 MockRead("1\r\n"), | 792 MockRead("1\r\n"), |
785 MockRead(" \r\n"), | 793 MockRead(" \r\n"), |
786 MockRead("5\r\nworld\r\n"), | 794 MockRead("5\r\nworld\r\n"), |
787 MockRead("0\r\n\r\nHTTP/1.1 200 OK\r\n"), | 795 MockRead("0\r\n\r\nHTTP/1.1 200 OK\r\n"), |
788 MockRead(SYNCHRONOUS, OK), | 796 MockRead(SYNCHRONOUS, OK), |
789 }; | 797 }; |
790 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 798 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
791 arraysize(data_reads)); | 799 arraysize(data_reads)); |
792 EXPECT_EQ(OK, out.rv); | 800 EXPECT_EQ(OK, out.rv); |
793 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 801 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
794 EXPECT_EQ("Hello world", out.response_data); | 802 EXPECT_EQ("Hello world", out.response_data); |
795 } | 803 } |
796 | 804 |
797 // Next tests deal with http://crbug.com/98895. | 805 // Next tests deal with http://crbug.com/98895. |
798 | 806 |
799 // Checks that a single Content-Disposition header results in no error. | 807 // Checks that a single Content-Disposition header results in no error. |
800 TEST_F(HttpNetworkTransactionSpdy2Test, SingleContentDispositionHeader) { | 808 TEST_P(HttpNetworkTransactionTest, SingleContentDispositionHeader) { |
801 MockRead data_reads[] = { | 809 MockRead data_reads[] = { |
802 MockRead("HTTP/1.1 200 OK\r\n"), | 810 MockRead("HTTP/1.1 200 OK\r\n"), |
803 MockRead("Content-Disposition: attachment;filename=\"salutations.txt\"r\n"), | 811 MockRead("Content-Disposition: attachment;filename=\"salutations.txt\"r\n"), |
804 MockRead("Content-Length: 5\r\n\r\n"), | 812 MockRead("Content-Length: 5\r\n\r\n"), |
805 MockRead("Hello"), | 813 MockRead("Hello"), |
806 }; | 814 }; |
807 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 815 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
808 arraysize(data_reads)); | 816 arraysize(data_reads)); |
809 EXPECT_EQ(OK, out.rv); | 817 EXPECT_EQ(OK, out.rv); |
810 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 818 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
811 EXPECT_EQ("Hello", out.response_data); | 819 EXPECT_EQ("Hello", out.response_data); |
812 } | 820 } |
813 | 821 |
814 // Checks that two identical Content-Disposition headers result in no error. | 822 // Checks that two identical Content-Disposition headers result in no error. |
815 TEST_F(HttpNetworkTransactionSpdy2Test, | 823 TEST_P(HttpNetworkTransactionTest, |
816 TwoIdenticalContentDispositionHeaders) { | 824 TwoIdenticalContentDispositionHeaders) { |
817 MockRead data_reads[] = { | 825 MockRead data_reads[] = { |
818 MockRead("HTTP/1.1 200 OK\r\n"), | 826 MockRead("HTTP/1.1 200 OK\r\n"), |
819 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 827 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
820 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 828 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
821 MockRead("Content-Length: 5\r\n\r\n"), | 829 MockRead("Content-Length: 5\r\n\r\n"), |
822 MockRead("Hello"), | 830 MockRead("Hello"), |
823 }; | 831 }; |
824 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 832 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
825 arraysize(data_reads)); | 833 arraysize(data_reads)); |
826 EXPECT_EQ(OK, out.rv); | 834 EXPECT_EQ(OK, out.rv); |
827 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 835 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
828 EXPECT_EQ("Hello", out.response_data); | 836 EXPECT_EQ("Hello", out.response_data); |
829 } | 837 } |
830 | 838 |
831 // Checks that two distinct Content-Disposition headers result in an error. | 839 // Checks that two distinct Content-Disposition headers result in an error. |
832 TEST_F(HttpNetworkTransactionSpdy2Test, TwoDistinctContentDispositionHeaders) { | 840 TEST_P(HttpNetworkTransactionTest, TwoDistinctContentDispositionHeaders) { |
833 MockRead data_reads[] = { | 841 MockRead data_reads[] = { |
834 MockRead("HTTP/1.1 200 OK\r\n"), | 842 MockRead("HTTP/1.1 200 OK\r\n"), |
835 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 843 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
836 MockRead("Content-Disposition: attachment;filename=\"hi.txt\"r\n"), | 844 MockRead("Content-Disposition: attachment;filename=\"hi.txt\"r\n"), |
837 MockRead("Content-Length: 5\r\n\r\n"), | 845 MockRead("Content-Length: 5\r\n\r\n"), |
838 MockRead("Hello"), | 846 MockRead("Hello"), |
839 }; | 847 }; |
840 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 848 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
841 arraysize(data_reads)); | 849 arraysize(data_reads)); |
842 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION, out.rv); | 850 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION, out.rv); |
843 } | 851 } |
844 | 852 |
845 // Checks that two identical Location headers result in no error. | 853 // Checks that two identical Location headers result in no error. |
846 // Also tests Location header behavior. | 854 // Also tests Location header behavior. |
847 TEST_F(HttpNetworkTransactionSpdy2Test, TwoIdenticalLocationHeaders) { | 855 TEST_P(HttpNetworkTransactionTest, TwoIdenticalLocationHeaders) { |
848 MockRead data_reads[] = { | 856 MockRead data_reads[] = { |
849 MockRead("HTTP/1.1 302 Redirect\r\n"), | 857 MockRead("HTTP/1.1 302 Redirect\r\n"), |
850 MockRead("Location: http://good.com/\r\n"), | 858 MockRead("Location: http://good.com/\r\n"), |
851 MockRead("Location: http://good.com/\r\n"), | 859 MockRead("Location: http://good.com/\r\n"), |
852 MockRead("Content-Length: 0\r\n\r\n"), | 860 MockRead("Content-Length: 0\r\n\r\n"), |
853 MockRead(SYNCHRONOUS, OK), | 861 MockRead(SYNCHRONOUS, OK), |
854 }; | 862 }; |
855 | 863 |
856 HttpRequestInfo request; | 864 HttpRequestInfo request; |
857 request.method = "GET"; | 865 request.method = "GET"; |
(...skipping 16 matching lines...) Expand all Loading... |
874 | 882 |
875 const HttpResponseInfo* response = trans->GetResponseInfo(); | 883 const HttpResponseInfo* response = trans->GetResponseInfo(); |
876 ASSERT_TRUE(response != NULL && response->headers.get() != NULL); | 884 ASSERT_TRUE(response != NULL && response->headers.get() != NULL); |
877 EXPECT_EQ("HTTP/1.1 302 Redirect", response->headers->GetStatusLine()); | 885 EXPECT_EQ("HTTP/1.1 302 Redirect", response->headers->GetStatusLine()); |
878 std::string url; | 886 std::string url; |
879 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 887 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
880 EXPECT_EQ("http://good.com/", url); | 888 EXPECT_EQ("http://good.com/", url); |
881 } | 889 } |
882 | 890 |
883 // Checks that two distinct Location headers result in an error. | 891 // Checks that two distinct Location headers result in an error. |
884 TEST_F(HttpNetworkTransactionSpdy2Test, TwoDistinctLocationHeaders) { | 892 TEST_P(HttpNetworkTransactionTest, TwoDistinctLocationHeaders) { |
885 MockRead data_reads[] = { | 893 MockRead data_reads[] = { |
886 MockRead("HTTP/1.1 302 Redirect\r\n"), | 894 MockRead("HTTP/1.1 302 Redirect\r\n"), |
887 MockRead("Location: http://good.com/\r\n"), | 895 MockRead("Location: http://good.com/\r\n"), |
888 MockRead("Location: http://evil.com/\r\n"), | 896 MockRead("Location: http://evil.com/\r\n"), |
889 MockRead("Content-Length: 0\r\n\r\n"), | 897 MockRead("Content-Length: 0\r\n\r\n"), |
890 MockRead(SYNCHRONOUS, OK), | 898 MockRead(SYNCHRONOUS, OK), |
891 }; | 899 }; |
892 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 900 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
893 arraysize(data_reads)); | 901 arraysize(data_reads)); |
894 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION, out.rv); | 902 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION, out.rv); |
895 } | 903 } |
896 | 904 |
897 // Do a request using the HEAD method. Verify that we don't try to read the | 905 // Do a request using the HEAD method. Verify that we don't try to read the |
898 // message body (since HEAD has none). | 906 // message body (since HEAD has none). |
899 TEST_F(HttpNetworkTransactionSpdy2Test, Head) { | 907 TEST_P(HttpNetworkTransactionTest, Head) { |
900 HttpRequestInfo request; | 908 HttpRequestInfo request; |
901 request.method = "HEAD"; | 909 request.method = "HEAD"; |
902 request.url = GURL("http://www.google.com/"); | 910 request.url = GURL("http://www.google.com/"); |
903 request.load_flags = 0; | 911 request.load_flags = 0; |
904 | 912 |
905 scoped_ptr<HttpTransaction> trans( | 913 scoped_ptr<HttpTransaction> trans( |
906 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 914 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
907 CreateSession(&session_deps_))); | 915 CreateSession(&session_deps_))); |
908 | 916 |
909 MockWrite data_writes1[] = { | 917 MockWrite data_writes1[] = { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
949 EXPECT_EQ("Blah", server_header); | 957 EXPECT_EQ("Blah", server_header); |
950 | 958 |
951 // Reading should give EOF right away, since there is no message body | 959 // Reading should give EOF right away, since there is no message body |
952 // (despite non-zero content-length). | 960 // (despite non-zero content-length). |
953 std::string response_data; | 961 std::string response_data; |
954 rv = ReadTransaction(trans.get(), &response_data); | 962 rv = ReadTransaction(trans.get(), &response_data); |
955 EXPECT_EQ(OK, rv); | 963 EXPECT_EQ(OK, rv); |
956 EXPECT_EQ("", response_data); | 964 EXPECT_EQ("", response_data); |
957 } | 965 } |
958 | 966 |
959 TEST_F(HttpNetworkTransactionSpdy2Test, ReuseConnection) { | 967 TEST_P(HttpNetworkTransactionTest, ReuseConnection) { |
960 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 968 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
961 | 969 |
962 MockRead data_reads[] = { | 970 MockRead data_reads[] = { |
963 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 971 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
964 MockRead("hello"), | 972 MockRead("hello"), |
965 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 973 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
966 MockRead("world"), | 974 MockRead("world"), |
967 MockRead(SYNCHRONOUS, OK), | 975 MockRead(SYNCHRONOUS, OK), |
968 }; | 976 }; |
969 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 977 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
(...skipping 26 matching lines...) Expand all Loading... |
996 EXPECT_TRUE(response->headers.get() != NULL); | 1004 EXPECT_TRUE(response->headers.get() != NULL); |
997 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1005 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
998 | 1006 |
999 std::string response_data; | 1007 std::string response_data; |
1000 rv = ReadTransaction(trans.get(), &response_data); | 1008 rv = ReadTransaction(trans.get(), &response_data); |
1001 EXPECT_EQ(OK, rv); | 1009 EXPECT_EQ(OK, rv); |
1002 EXPECT_EQ(kExpectedResponseData[i], response_data); | 1010 EXPECT_EQ(kExpectedResponseData[i], response_data); |
1003 } | 1011 } |
1004 } | 1012 } |
1005 | 1013 |
1006 TEST_F(HttpNetworkTransactionSpdy2Test, Ignores100) { | 1014 TEST_P(HttpNetworkTransactionTest, Ignores100) { |
1007 ScopedVector<UploadElementReader> element_readers; | 1015 ScopedVector<UploadElementReader> element_readers; |
1008 element_readers.push_back(new UploadBytesElementReader("foo", 3)); | 1016 element_readers.push_back(new UploadBytesElementReader("foo", 3)); |
1009 UploadDataStream upload_data_stream(&element_readers, 0); | 1017 UploadDataStream upload_data_stream(&element_readers, 0); |
1010 | 1018 |
1011 HttpRequestInfo request; | 1019 HttpRequestInfo request; |
1012 request.method = "POST"; | 1020 request.method = "POST"; |
1013 request.url = GURL("http://www.foo.com/"); | 1021 request.url = GURL("http://www.foo.com/"); |
1014 request.upload_data_stream = &upload_data_stream; | 1022 request.upload_data_stream = &upload_data_stream; |
1015 request.load_flags = 0; | 1023 request.load_flags = 0; |
1016 | 1024 |
(...skipping 26 matching lines...) Expand all Loading... |
1043 | 1051 |
1044 std::string response_data; | 1052 std::string response_data; |
1045 rv = ReadTransaction(trans.get(), &response_data); | 1053 rv = ReadTransaction(trans.get(), &response_data); |
1046 EXPECT_EQ(OK, rv); | 1054 EXPECT_EQ(OK, rv); |
1047 EXPECT_EQ("hello world", response_data); | 1055 EXPECT_EQ("hello world", response_data); |
1048 } | 1056 } |
1049 | 1057 |
1050 // This test is almost the same as Ignores100 above, but the response contains | 1058 // This test is almost the same as Ignores100 above, but the response contains |
1051 // a 102 instead of a 100. Also, instead of HTTP/1.0 the response is | 1059 // a 102 instead of a 100. Also, instead of HTTP/1.0 the response is |
1052 // HTTP/1.1 and the two status headers are read in one read. | 1060 // HTTP/1.1 and the two status headers are read in one read. |
1053 TEST_F(HttpNetworkTransactionSpdy2Test, Ignores1xx) { | 1061 TEST_P(HttpNetworkTransactionTest, Ignores1xx) { |
1054 HttpRequestInfo request; | 1062 HttpRequestInfo request; |
1055 request.method = "GET"; | 1063 request.method = "GET"; |
1056 request.url = GURL("http://www.foo.com/"); | 1064 request.url = GURL("http://www.foo.com/"); |
1057 request.load_flags = 0; | 1065 request.load_flags = 0; |
1058 | 1066 |
1059 scoped_ptr<HttpTransaction> trans( | 1067 scoped_ptr<HttpTransaction> trans( |
1060 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 1068 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
1061 CreateSession(&session_deps_))); | 1069 CreateSession(&session_deps_))); |
1062 | 1070 |
1063 MockRead data_reads[] = { | 1071 MockRead data_reads[] = { |
(...skipping 18 matching lines...) Expand all Loading... |
1082 | 1090 |
1083 EXPECT_TRUE(response->headers.get() != NULL); | 1091 EXPECT_TRUE(response->headers.get() != NULL); |
1084 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1092 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
1085 | 1093 |
1086 std::string response_data; | 1094 std::string response_data; |
1087 rv = ReadTransaction(trans.get(), &response_data); | 1095 rv = ReadTransaction(trans.get(), &response_data); |
1088 EXPECT_EQ(OK, rv); | 1096 EXPECT_EQ(OK, rv); |
1089 EXPECT_EQ("hello world", response_data); | 1097 EXPECT_EQ("hello world", response_data); |
1090 } | 1098 } |
1091 | 1099 |
1092 TEST_F(HttpNetworkTransactionSpdy2Test, Incomplete100ThenEOF) { | 1100 TEST_P(HttpNetworkTransactionTest, Incomplete100ThenEOF) { |
1093 HttpRequestInfo request; | 1101 HttpRequestInfo request; |
1094 request.method = "POST"; | 1102 request.method = "POST"; |
1095 request.url = GURL("http://www.foo.com/"); | 1103 request.url = GURL("http://www.foo.com/"); |
1096 request.load_flags = 0; | 1104 request.load_flags = 0; |
1097 | 1105 |
1098 scoped_ptr<HttpTransaction> trans( | 1106 scoped_ptr<HttpTransaction> trans( |
1099 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 1107 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
1100 CreateSession(&session_deps_))); | 1108 CreateSession(&session_deps_))); |
1101 | 1109 |
1102 MockRead data_reads[] = { | 1110 MockRead data_reads[] = { |
(...skipping 10 matching lines...) Expand all Loading... |
1113 | 1121 |
1114 rv = callback.WaitForResult(); | 1122 rv = callback.WaitForResult(); |
1115 EXPECT_EQ(OK, rv); | 1123 EXPECT_EQ(OK, rv); |
1116 | 1124 |
1117 std::string response_data; | 1125 std::string response_data; |
1118 rv = ReadTransaction(trans.get(), &response_data); | 1126 rv = ReadTransaction(trans.get(), &response_data); |
1119 EXPECT_EQ(OK, rv); | 1127 EXPECT_EQ(OK, rv); |
1120 EXPECT_EQ("", response_data); | 1128 EXPECT_EQ("", response_data); |
1121 } | 1129 } |
1122 | 1130 |
1123 TEST_F(HttpNetworkTransactionSpdy2Test, EmptyResponse) { | 1131 TEST_P(HttpNetworkTransactionTest, EmptyResponse) { |
1124 HttpRequestInfo request; | 1132 HttpRequestInfo request; |
1125 request.method = "POST"; | 1133 request.method = "POST"; |
1126 request.url = GURL("http://www.foo.com/"); | 1134 request.url = GURL("http://www.foo.com/"); |
1127 request.load_flags = 0; | 1135 request.load_flags = 0; |
1128 | 1136 |
1129 scoped_ptr<HttpTransaction> trans( | 1137 scoped_ptr<HttpTransaction> trans( |
1130 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 1138 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
1131 CreateSession(&session_deps_))); | 1139 CreateSession(&session_deps_))); |
1132 | 1140 |
1133 MockRead data_reads[] = { | 1141 MockRead data_reads[] = { |
1134 MockRead(ASYNC, 0), | 1142 MockRead(ASYNC, 0), |
1135 }; | 1143 }; |
1136 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1144 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1137 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1145 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1138 | 1146 |
1139 TestCompletionCallback callback; | 1147 TestCompletionCallback callback; |
1140 | 1148 |
1141 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1149 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1142 EXPECT_EQ(ERR_IO_PENDING, rv); | 1150 EXPECT_EQ(ERR_IO_PENDING, rv); |
1143 | 1151 |
1144 rv = callback.WaitForResult(); | 1152 rv = callback.WaitForResult(); |
1145 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); | 1153 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); |
1146 } | 1154 } |
1147 | 1155 |
1148 void HttpNetworkTransactionSpdy2Test::KeepAliveConnectionResendRequestTest( | 1156 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( |
1149 const MockWrite* write_failure, | 1157 const MockWrite* write_failure, |
1150 const MockRead* read_failure) { | 1158 const MockRead* read_failure) { |
1151 HttpRequestInfo request; | 1159 HttpRequestInfo request; |
1152 request.method = "GET"; | 1160 request.method = "GET"; |
1153 request.url = GURL("http://www.foo.com/"); | 1161 request.url = GURL("http://www.foo.com/"); |
1154 request.load_flags = 0; | 1162 request.load_flags = 0; |
1155 | 1163 |
1156 CapturingNetLog net_log; | 1164 CapturingNetLog net_log; |
1157 session_deps_.net_log = &net_log; | 1165 session_deps_.net_log = &net_log; |
1158 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1166 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1227 EXPECT_TRUE(response->headers.get() != NULL); | 1235 EXPECT_TRUE(response->headers.get() != NULL); |
1228 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1236 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
1229 | 1237 |
1230 std::string response_data; | 1238 std::string response_data; |
1231 rv = ReadTransaction(trans.get(), &response_data); | 1239 rv = ReadTransaction(trans.get(), &response_data); |
1232 EXPECT_EQ(OK, rv); | 1240 EXPECT_EQ(OK, rv); |
1233 EXPECT_EQ(kExpectedResponseData[i], response_data); | 1241 EXPECT_EQ(kExpectedResponseData[i], response_data); |
1234 } | 1242 } |
1235 } | 1243 } |
1236 | 1244 |
1237 TEST_F(HttpNetworkTransactionSpdy2Test, | 1245 TEST_P(HttpNetworkTransactionTest, |
1238 KeepAliveConnectionNotConnectedOnWrite) { | 1246 KeepAliveConnectionNotConnectedOnWrite) { |
1239 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 1247 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
1240 KeepAliveConnectionResendRequestTest(&write_failure, NULL); | 1248 KeepAliveConnectionResendRequestTest(&write_failure, NULL); |
1241 } | 1249 } |
1242 | 1250 |
1243 TEST_F(HttpNetworkTransactionSpdy2Test, KeepAliveConnectionReset) { | 1251 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionReset) { |
1244 MockRead read_failure(ASYNC, ERR_CONNECTION_RESET); | 1252 MockRead read_failure(ASYNC, ERR_CONNECTION_RESET); |
1245 KeepAliveConnectionResendRequestTest(NULL, &read_failure); | 1253 KeepAliveConnectionResendRequestTest(NULL, &read_failure); |
1246 } | 1254 } |
1247 | 1255 |
1248 TEST_F(HttpNetworkTransactionSpdy2Test, KeepAliveConnectionEOF) { | 1256 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionEOF) { |
1249 MockRead read_failure(SYNCHRONOUS, OK); // EOF | 1257 MockRead read_failure(SYNCHRONOUS, OK); // EOF |
1250 KeepAliveConnectionResendRequestTest(NULL, &read_failure); | 1258 KeepAliveConnectionResendRequestTest(NULL, &read_failure); |
1251 } | 1259 } |
1252 | 1260 |
1253 TEST_F(HttpNetworkTransactionSpdy2Test, NonKeepAliveConnectionReset) { | 1261 TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionReset) { |
1254 HttpRequestInfo request; | 1262 HttpRequestInfo request; |
1255 request.method = "GET"; | 1263 request.method = "GET"; |
1256 request.url = GURL("http://www.google.com/"); | 1264 request.url = GURL("http://www.google.com/"); |
1257 request.load_flags = 0; | 1265 request.load_flags = 0; |
1258 | 1266 |
1259 scoped_ptr<HttpTransaction> trans( | 1267 scoped_ptr<HttpTransaction> trans( |
1260 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 1268 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
1261 CreateSession(&session_deps_))); | 1269 CreateSession(&session_deps_))); |
1262 | 1270 |
1263 MockRead data_reads[] = { | 1271 MockRead data_reads[] = { |
(...skipping 19 matching lines...) Expand all Loading... |
1283 | 1291 |
1284 // What do various browsers do when the server closes a non-keepalive | 1292 // What do various browsers do when the server closes a non-keepalive |
1285 // connection without sending any response header or body? | 1293 // connection without sending any response header or body? |
1286 // | 1294 // |
1287 // IE7: error page | 1295 // IE7: error page |
1288 // Safari 3.1.2 (Windows): error page | 1296 // Safari 3.1.2 (Windows): error page |
1289 // Firefox 3.0.1: blank page | 1297 // Firefox 3.0.1: blank page |
1290 // Opera 9.52: after five attempts, blank page | 1298 // Opera 9.52: after five attempts, blank page |
1291 // Us with WinHTTP: error page (ERR_INVALID_RESPONSE) | 1299 // Us with WinHTTP: error page (ERR_INVALID_RESPONSE) |
1292 // Us: error page (EMPTY_RESPONSE) | 1300 // Us: error page (EMPTY_RESPONSE) |
1293 TEST_F(HttpNetworkTransactionSpdy2Test, NonKeepAliveConnectionEOF) { | 1301 TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionEOF) { |
1294 MockRead data_reads[] = { | 1302 MockRead data_reads[] = { |
1295 MockRead(SYNCHRONOUS, OK), // EOF | 1303 MockRead(SYNCHRONOUS, OK), // EOF |
1296 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used | 1304 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used |
1297 MockRead("hello world"), | 1305 MockRead("hello world"), |
1298 MockRead(SYNCHRONOUS, OK), | 1306 MockRead(SYNCHRONOUS, OK), |
1299 }; | 1307 }; |
1300 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1308 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
1301 arraysize(data_reads)); | 1309 arraysize(data_reads)); |
1302 EXPECT_EQ(ERR_EMPTY_RESPONSE, out.rv); | 1310 EXPECT_EQ(ERR_EMPTY_RESPONSE, out.rv); |
1303 } | 1311 } |
1304 | 1312 |
1305 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression | 1313 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression |
1306 // tests. There was a bug causing HttpNetworkTransaction to hang in the | 1314 // tests. There was a bug causing HttpNetworkTransaction to hang in the |
1307 // destructor in such situations. | 1315 // destructor in such situations. |
1308 // See http://crbug.com/154712 and http://crbug.com/156609. | 1316 // See http://crbug.com/154712 and http://crbug.com/156609. |
1309 TEST_F(HttpNetworkTransactionSpdy2Test, KeepAliveEarlyClose) { | 1317 TEST_P(HttpNetworkTransactionTest, KeepAliveEarlyClose) { |
1310 HttpRequestInfo request; | 1318 HttpRequestInfo request; |
1311 request.method = "GET"; | 1319 request.method = "GET"; |
1312 request.url = GURL("http://www.google.com/"); | 1320 request.url = GURL("http://www.google.com/"); |
1313 request.load_flags = 0; | 1321 request.load_flags = 0; |
1314 | 1322 |
1315 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1323 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1316 scoped_ptr<HttpTransaction> trans( | 1324 scoped_ptr<HttpTransaction> trans( |
1317 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1325 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1318 | 1326 |
1319 MockRead data_reads[] = { | 1327 MockRead data_reads[] = { |
(...skipping 20 matching lines...) Expand all Loading... |
1340 rv = callback.WaitForResult(); | 1348 rv = callback.WaitForResult(); |
1341 EXPECT_EQ(5, rv); | 1349 EXPECT_EQ(5, rv); |
1342 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 1350 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
1343 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 1351 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); |
1344 | 1352 |
1345 trans.reset(); | 1353 trans.reset(); |
1346 base::MessageLoop::current()->RunUntilIdle(); | 1354 base::MessageLoop::current()->RunUntilIdle(); |
1347 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1355 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
1348 } | 1356 } |
1349 | 1357 |
1350 TEST_F(HttpNetworkTransactionSpdy2Test, KeepAliveEarlyClose2) { | 1358 TEST_P(HttpNetworkTransactionTest, KeepAliveEarlyClose2) { |
1351 HttpRequestInfo request; | 1359 HttpRequestInfo request; |
1352 request.method = "GET"; | 1360 request.method = "GET"; |
1353 request.url = GURL("http://www.google.com/"); | 1361 request.url = GURL("http://www.google.com/"); |
1354 request.load_flags = 0; | 1362 request.load_flags = 0; |
1355 | 1363 |
1356 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1364 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1357 scoped_ptr<HttpTransaction> trans( | 1365 scoped_ptr<HttpTransaction> trans( |
1358 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1366 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1359 | 1367 |
1360 MockRead data_reads[] = { | 1368 MockRead data_reads[] = { |
(...skipping 19 matching lines...) Expand all Loading... |
1380 rv = callback.WaitForResult(); | 1388 rv = callback.WaitForResult(); |
1381 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 1389 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); |
1382 | 1390 |
1383 trans.reset(); | 1391 trans.reset(); |
1384 base::MessageLoop::current()->RunUntilIdle(); | 1392 base::MessageLoop::current()->RunUntilIdle(); |
1385 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1393 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
1386 } | 1394 } |
1387 | 1395 |
1388 // Test that we correctly reuse a keep-alive connection after not explicitly | 1396 // Test that we correctly reuse a keep-alive connection after not explicitly |
1389 // reading the body. | 1397 // reading the body. |
1390 TEST_F(HttpNetworkTransactionSpdy2Test, KeepAliveAfterUnreadBody) { | 1398 TEST_P(HttpNetworkTransactionTest, KeepAliveAfterUnreadBody) { |
1391 HttpRequestInfo request; | 1399 HttpRequestInfo request; |
1392 request.method = "GET"; | 1400 request.method = "GET"; |
1393 request.url = GURL("http://www.foo.com/"); | 1401 request.url = GURL("http://www.foo.com/"); |
1394 request.load_flags = 0; | 1402 request.load_flags = 0; |
1395 | 1403 |
1396 CapturingNetLog net_log; | 1404 CapturingNetLog net_log; |
1397 session_deps_.net_log = &net_log; | 1405 session_deps_.net_log = &net_log; |
1398 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1406 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1399 | 1407 |
1400 // Note that because all these reads happen in the same | 1408 // Note that because all these reads happen in the same |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1489 ASSERT_TRUE(response->headers.get() != NULL); | 1497 ASSERT_TRUE(response->headers.get() != NULL); |
1490 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1498 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
1491 std::string response_data; | 1499 std::string response_data; |
1492 rv = ReadTransaction(trans.get(), &response_data); | 1500 rv = ReadTransaction(trans.get(), &response_data); |
1493 EXPECT_EQ(OK, rv); | 1501 EXPECT_EQ(OK, rv); |
1494 EXPECT_EQ("hello", response_data); | 1502 EXPECT_EQ("hello", response_data); |
1495 } | 1503 } |
1496 | 1504 |
1497 // Test the request-challenge-retry sequence for basic auth. | 1505 // Test the request-challenge-retry sequence for basic auth. |
1498 // (basic auth is the easiest to mock, because it has no randomness). | 1506 // (basic auth is the easiest to mock, because it has no randomness). |
1499 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuth) { | 1507 TEST_P(HttpNetworkTransactionTest, BasicAuth) { |
1500 HttpRequestInfo request; | 1508 HttpRequestInfo request; |
1501 request.method = "GET"; | 1509 request.method = "GET"; |
1502 request.url = GURL("http://www.google.com/"); | 1510 request.url = GURL("http://www.google.com/"); |
1503 request.load_flags = 0; | 1511 request.load_flags = 0; |
1504 | 1512 |
1505 CapturingNetLog log; | 1513 CapturingNetLog log; |
1506 session_deps_.net_log = &log; | 1514 session_deps_.net_log = &log; |
1507 scoped_ptr<HttpTransaction> trans( | 1515 scoped_ptr<HttpTransaction> trans( |
1508 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 1516 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
1509 CreateSession(&session_deps_))); | 1517 CreateSession(&session_deps_))); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1584 EXPECT_LE(load_timing_info1.receive_headers_end, | 1592 EXPECT_LE(load_timing_info1.receive_headers_end, |
1585 load_timing_info2.connect_timing.connect_start); | 1593 load_timing_info2.connect_timing.connect_start); |
1586 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 1594 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
1587 | 1595 |
1588 response = trans->GetResponseInfo(); | 1596 response = trans->GetResponseInfo(); |
1589 ASSERT_TRUE(response != NULL); | 1597 ASSERT_TRUE(response != NULL); |
1590 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 1598 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
1591 EXPECT_EQ(100, response->headers->GetContentLength()); | 1599 EXPECT_EQ(100, response->headers->GetContentLength()); |
1592 } | 1600 } |
1593 | 1601 |
1594 TEST_F(HttpNetworkTransactionSpdy2Test, DoNotSendAuth) { | 1602 TEST_P(HttpNetworkTransactionTest, DoNotSendAuth) { |
1595 HttpRequestInfo request; | 1603 HttpRequestInfo request; |
1596 request.method = "GET"; | 1604 request.method = "GET"; |
1597 request.url = GURL("http://www.google.com/"); | 1605 request.url = GURL("http://www.google.com/"); |
1598 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 1606 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
1599 | 1607 |
1600 scoped_ptr<HttpTransaction> trans( | 1608 scoped_ptr<HttpTransaction> trans( |
1601 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 1609 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
1602 CreateSession(&session_deps_))); | 1610 CreateSession(&session_deps_))); |
1603 | 1611 |
1604 MockWrite data_writes[] = { | 1612 MockWrite data_writes[] = { |
(...skipping 22 matching lines...) Expand all Loading... |
1627 rv = callback.WaitForResult(); | 1635 rv = callback.WaitForResult(); |
1628 EXPECT_EQ(0, rv); | 1636 EXPECT_EQ(0, rv); |
1629 | 1637 |
1630 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1638 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1631 ASSERT_TRUE(response != NULL); | 1639 ASSERT_TRUE(response != NULL); |
1632 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 1640 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
1633 } | 1641 } |
1634 | 1642 |
1635 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 1643 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
1636 // connection. | 1644 // connection. |
1637 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuthKeepAlive) { | 1645 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAlive) { |
1638 HttpRequestInfo request; | 1646 HttpRequestInfo request; |
1639 request.method = "GET"; | 1647 request.method = "GET"; |
1640 request.url = GURL("http://www.google.com/"); | 1648 request.url = GURL("http://www.google.com/"); |
1641 request.load_flags = 0; | 1649 request.load_flags = 0; |
1642 | 1650 |
1643 CapturingNetLog log; | 1651 CapturingNetLog log; |
1644 session_deps_.net_log = &log; | 1652 session_deps_.net_log = &log; |
1645 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1653 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1646 | 1654 |
1647 MockWrite data_writes1[] = { | 1655 MockWrite data_writes1[] = { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1721 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 1729 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
1722 | 1730 |
1723 response = trans->GetResponseInfo(); | 1731 response = trans->GetResponseInfo(); |
1724 ASSERT_TRUE(response != NULL); | 1732 ASSERT_TRUE(response != NULL); |
1725 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 1733 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
1726 EXPECT_EQ(5, response->headers->GetContentLength()); | 1734 EXPECT_EQ(5, response->headers->GetContentLength()); |
1727 } | 1735 } |
1728 | 1736 |
1729 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 1737 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
1730 // connection and with no response body to drain. | 1738 // connection and with no response body to drain. |
1731 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuthKeepAliveNoBody) { | 1739 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveNoBody) { |
1732 HttpRequestInfo request; | 1740 HttpRequestInfo request; |
1733 request.method = "GET"; | 1741 request.method = "GET"; |
1734 request.url = GURL("http://www.google.com/"); | 1742 request.url = GURL("http://www.google.com/"); |
1735 request.load_flags = 0; | 1743 request.load_flags = 0; |
1736 | 1744 |
1737 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1745 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1738 | 1746 |
1739 MockWrite data_writes1[] = { | 1747 MockWrite data_writes1[] = { |
1740 MockWrite("GET / HTTP/1.1\r\n" | 1748 MockWrite("GET / HTTP/1.1\r\n" |
1741 "Host: www.google.com\r\n" | 1749 "Host: www.google.com\r\n" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1797 EXPECT_EQ(OK, rv); | 1805 EXPECT_EQ(OK, rv); |
1798 | 1806 |
1799 response = trans->GetResponseInfo(); | 1807 response = trans->GetResponseInfo(); |
1800 ASSERT_TRUE(response != NULL); | 1808 ASSERT_TRUE(response != NULL); |
1801 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 1809 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
1802 EXPECT_EQ(5, response->headers->GetContentLength()); | 1810 EXPECT_EQ(5, response->headers->GetContentLength()); |
1803 } | 1811 } |
1804 | 1812 |
1805 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 1813 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
1806 // connection and with a large response body to drain. | 1814 // connection and with a large response body to drain. |
1807 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuthKeepAliveLargeBody) { | 1815 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveLargeBody) { |
1808 HttpRequestInfo request; | 1816 HttpRequestInfo request; |
1809 request.method = "GET"; | 1817 request.method = "GET"; |
1810 request.url = GURL("http://www.google.com/"); | 1818 request.url = GURL("http://www.google.com/"); |
1811 request.load_flags = 0; | 1819 request.load_flags = 0; |
1812 | 1820 |
1813 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1821 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1814 | 1822 |
1815 MockWrite data_writes1[] = { | 1823 MockWrite data_writes1[] = { |
1816 MockWrite("GET / HTTP/1.1\r\n" | 1824 MockWrite("GET / HTTP/1.1\r\n" |
1817 "Host: www.google.com\r\n" | 1825 "Host: www.google.com\r\n" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1881 EXPECT_EQ(OK, rv); | 1889 EXPECT_EQ(OK, rv); |
1882 | 1890 |
1883 response = trans->GetResponseInfo(); | 1891 response = trans->GetResponseInfo(); |
1884 ASSERT_TRUE(response != NULL); | 1892 ASSERT_TRUE(response != NULL); |
1885 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 1893 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
1886 EXPECT_EQ(5, response->headers->GetContentLength()); | 1894 EXPECT_EQ(5, response->headers->GetContentLength()); |
1887 } | 1895 } |
1888 | 1896 |
1889 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 1897 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
1890 // connection, but the server gets impatient and closes the connection. | 1898 // connection, but the server gets impatient and closes the connection. |
1891 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuthKeepAliveImpatientServer) { | 1899 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveImpatientServer) { |
1892 HttpRequestInfo request; | 1900 HttpRequestInfo request; |
1893 request.method = "GET"; | 1901 request.method = "GET"; |
1894 request.url = GURL("http://www.google.com/"); | 1902 request.url = GURL("http://www.google.com/"); |
1895 request.load_flags = 0; | 1903 request.load_flags = 0; |
1896 | 1904 |
1897 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1905 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1898 | 1906 |
1899 MockWrite data_writes1[] = { | 1907 MockWrite data_writes1[] = { |
1900 MockWrite("GET / HTTP/1.1\r\n" | 1908 MockWrite("GET / HTTP/1.1\r\n" |
1901 "Host: www.google.com\r\n" | 1909 "Host: www.google.com\r\n" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1967 EXPECT_EQ(OK, rv); | 1975 EXPECT_EQ(OK, rv); |
1968 | 1976 |
1969 response = trans->GetResponseInfo(); | 1977 response = trans->GetResponseInfo(); |
1970 ASSERT_TRUE(response != NULL); | 1978 ASSERT_TRUE(response != NULL); |
1971 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 1979 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
1972 EXPECT_EQ(5, response->headers->GetContentLength()); | 1980 EXPECT_EQ(5, response->headers->GetContentLength()); |
1973 } | 1981 } |
1974 | 1982 |
1975 // Test the request-challenge-retry sequence for basic auth, over a connection | 1983 // Test the request-challenge-retry sequence for basic auth, over a connection |
1976 // that requires a restart when setting up an SSL tunnel. | 1984 // that requires a restart when setting up an SSL tunnel. |
1977 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuthProxyNoKeepAlive) { | 1985 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyNoKeepAlive) { |
1978 HttpRequestInfo request; | 1986 HttpRequestInfo request; |
1979 request.method = "GET"; | 1987 request.method = "GET"; |
1980 request.url = GURL("https://www.google.com/"); | 1988 request.url = GURL("https://www.google.com/"); |
1981 // when the no authentication data flag is set. | 1989 // when the no authentication data flag is set. |
1982 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 1990 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
1983 | 1991 |
1984 // Configure against proxy server "myproxy:70". | 1992 // Configure against proxy server "myproxy:70". |
1985 session_deps_.proxy_service.reset( | 1993 session_deps_.proxy_service.reset( |
1986 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); | 1994 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); |
1987 CapturingBoundNetLog log; | 1995 CapturingBoundNetLog log; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2083 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 2091 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
2084 TestLoadTimingNotReusedWithPac(load_timing_info, | 2092 TestLoadTimingNotReusedWithPac(load_timing_info, |
2085 CONNECT_TIMING_HAS_SSL_TIMES); | 2093 CONNECT_TIMING_HAS_SSL_TIMES); |
2086 | 2094 |
2087 trans.reset(); | 2095 trans.reset(); |
2088 session->CloseAllConnections(); | 2096 session->CloseAllConnections(); |
2089 } | 2097 } |
2090 | 2098 |
2091 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2099 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
2092 // proxy connection, when setting up an SSL tunnel. | 2100 // proxy connection, when setting up an SSL tunnel. |
2093 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuthProxyKeepAlive) { | 2101 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyKeepAlive) { |
2094 HttpRequestInfo request; | 2102 HttpRequestInfo request; |
2095 request.method = "GET"; | 2103 request.method = "GET"; |
2096 request.url = GURL("https://www.google.com/"); | 2104 request.url = GURL("https://www.google.com/"); |
2097 // Ensure that proxy authentication is attempted even | 2105 // Ensure that proxy authentication is attempted even |
2098 // when the no authentication data flag is set. | 2106 // when the no authentication data flag is set. |
2099 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 2107 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
2100 | 2108 |
2101 // Configure against proxy server "myproxy:70". | 2109 // Configure against proxy server "myproxy:70". |
2102 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 2110 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
2103 CapturingBoundNetLog log; | 2111 CapturingBoundNetLog log; |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2187 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 2195 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
2188 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 2196 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
2189 | 2197 |
2190 // Flush the idle socket before the NetLog and HttpNetworkTransaction go | 2198 // Flush the idle socket before the NetLog and HttpNetworkTransaction go |
2191 // out of scope. | 2199 // out of scope. |
2192 session->CloseAllConnections(); | 2200 session->CloseAllConnections(); |
2193 } | 2201 } |
2194 | 2202 |
2195 // Test that we don't read the response body when we fail to establish a tunnel, | 2203 // Test that we don't read the response body when we fail to establish a tunnel, |
2196 // even if the user cancels the proxy's auth attempt. | 2204 // even if the user cancels the proxy's auth attempt. |
2197 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuthProxyCancelTunnel) { | 2205 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyCancelTunnel) { |
2198 HttpRequestInfo request; | 2206 HttpRequestInfo request; |
2199 request.method = "GET"; | 2207 request.method = "GET"; |
2200 request.url = GURL("https://www.google.com/"); | 2208 request.url = GURL("https://www.google.com/"); |
2201 request.load_flags = 0; | 2209 request.load_flags = 0; |
2202 | 2210 |
2203 // Configure against proxy server "myproxy:70". | 2211 // Configure against proxy server "myproxy:70". |
2204 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 2212 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
2205 | 2213 |
2206 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2214 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2207 | 2215 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2246 std::string response_data; | 2254 std::string response_data; |
2247 rv = ReadTransaction(trans.get(), &response_data); | 2255 rv = ReadTransaction(trans.get(), &response_data); |
2248 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 2256 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
2249 | 2257 |
2250 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. | 2258 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. |
2251 session->CloseAllConnections(); | 2259 session->CloseAllConnections(); |
2252 } | 2260 } |
2253 | 2261 |
2254 // Test when a server (non-proxy) returns a 407 (proxy-authenticate). | 2262 // Test when a server (non-proxy) returns a 407 (proxy-authenticate). |
2255 // The request should fail with ERR_UNEXPECTED_PROXY_AUTH. | 2263 // The request should fail with ERR_UNEXPECTED_PROXY_AUTH. |
2256 TEST_F(HttpNetworkTransactionSpdy2Test, UnexpectedProxyAuth) { | 2264 TEST_P(HttpNetworkTransactionTest, UnexpectedProxyAuth) { |
2257 HttpRequestInfo request; | 2265 HttpRequestInfo request; |
2258 request.method = "GET"; | 2266 request.method = "GET"; |
2259 request.url = GURL("http://www.google.com/"); | 2267 request.url = GURL("http://www.google.com/"); |
2260 request.load_flags = 0; | 2268 request.load_flags = 0; |
2261 | 2269 |
2262 // We are using a DIRECT connection (i.e. no proxy) for this session. | 2270 // We are using a DIRECT connection (i.e. no proxy) for this session. |
2263 scoped_ptr<HttpTransaction> trans( | 2271 scoped_ptr<HttpTransaction> trans( |
2264 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 2272 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
2265 CreateSession(&session_deps_))); | 2273 CreateSession(&session_deps_))); |
2266 | 2274 |
(...skipping 24 matching lines...) Expand all Loading... |
2291 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); | 2299 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); |
2292 } | 2300 } |
2293 | 2301 |
2294 // Tests when an HTTPS server (non-proxy) returns a 407 (proxy-authentication) | 2302 // Tests when an HTTPS server (non-proxy) returns a 407 (proxy-authentication) |
2295 // through a non-authenticating proxy. The request should fail with | 2303 // through a non-authenticating proxy. The request should fail with |
2296 // ERR_UNEXPECTED_PROXY_AUTH. | 2304 // ERR_UNEXPECTED_PROXY_AUTH. |
2297 // Note that it is impossible to detect if an HTTP server returns a 407 through | 2305 // Note that it is impossible to detect if an HTTP server returns a 407 through |
2298 // a non-authenticating proxy - there is nothing to indicate whether the | 2306 // a non-authenticating proxy - there is nothing to indicate whether the |
2299 // response came from the proxy or the server, so it is treated as if the proxy | 2307 // response came from the proxy or the server, so it is treated as if the proxy |
2300 // issued the challenge. | 2308 // issued the challenge. |
2301 TEST_F(HttpNetworkTransactionSpdy2Test, | 2309 TEST_P(HttpNetworkTransactionTest, |
2302 HttpsServerRequestsProxyAuthThroughProxy) { | 2310 HttpsServerRequestsProxyAuthThroughProxy) { |
2303 HttpRequestInfo request; | 2311 HttpRequestInfo request; |
2304 request.method = "GET"; | 2312 request.method = "GET"; |
2305 request.url = GURL("https://www.google.com/"); | 2313 request.url = GURL("https://www.google.com/"); |
2306 | 2314 |
2307 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 2315 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
2308 CapturingBoundNetLog log; | 2316 CapturingBoundNetLog log; |
2309 session_deps_.net_log = log.bound().net_log(); | 2317 session_deps_.net_log = log.bound().net_log(); |
2310 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2318 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2311 | 2319 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2350 size_t pos = ExpectLogContainsSomewhere( | 2358 size_t pos = ExpectLogContainsSomewhere( |
2351 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 2359 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
2352 NetLog::PHASE_NONE); | 2360 NetLog::PHASE_NONE); |
2353 ExpectLogContainsSomewhere( | 2361 ExpectLogContainsSomewhere( |
2354 entries, pos, | 2362 entries, pos, |
2355 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 2363 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
2356 NetLog::PHASE_NONE); | 2364 NetLog::PHASE_NONE); |
2357 } | 2365 } |
2358 | 2366 |
2359 // Test the load timing for HTTPS requests with an HTTP proxy. | 2367 // Test the load timing for HTTPS requests with an HTTP proxy. |
2360 TEST_F(HttpNetworkTransactionSpdy2Test, HttpProxyLoadTimingNoPacTwoRequests) { | 2368 TEST_P(HttpNetworkTransactionTest, HttpProxyLoadTimingNoPacTwoRequests) { |
2361 HttpRequestInfo request1; | 2369 HttpRequestInfo request1; |
2362 request1.method = "GET"; | 2370 request1.method = "GET"; |
2363 request1.url = GURL("https://www.google.com/1"); | 2371 request1.url = GURL("https://www.google.com/1"); |
2364 | 2372 |
2365 HttpRequestInfo request2; | 2373 HttpRequestInfo request2; |
2366 request2.method = "GET"; | 2374 request2.method = "GET"; |
2367 request2.url = GURL("https://www.google.com/2"); | 2375 request2.url = GURL("https://www.google.com/2"); |
2368 | 2376 |
2369 // Configure against proxy server "myproxy:70". | 2377 // Configure against proxy server "myproxy:70". |
2370 session_deps_.proxy_service.reset( | 2378 session_deps_.proxy_service.reset( |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2448 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 2456 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
2449 TestLoadTimingReused(load_timing_info2); | 2457 TestLoadTimingReused(load_timing_info2); |
2450 | 2458 |
2451 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 2459 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
2452 | 2460 |
2453 trans2.reset(); | 2461 trans2.reset(); |
2454 session->CloseAllConnections(); | 2462 session->CloseAllConnections(); |
2455 } | 2463 } |
2456 | 2464 |
2457 // Test the load timing for HTTPS requests with an HTTP proxy and a PAC script. | 2465 // Test the load timing for HTTPS requests with an HTTP proxy and a PAC script. |
2458 TEST_F(HttpNetworkTransactionSpdy2Test, HttpProxyLoadTimingWithPacTwoRequests) { | 2466 TEST_P(HttpNetworkTransactionTest, HttpProxyLoadTimingWithPacTwoRequests) { |
2459 HttpRequestInfo request1; | 2467 HttpRequestInfo request1; |
2460 request1.method = "GET"; | 2468 request1.method = "GET"; |
2461 request1.url = GURL("https://www.google.com/1"); | 2469 request1.url = GURL("https://www.google.com/1"); |
2462 | 2470 |
2463 HttpRequestInfo request2; | 2471 HttpRequestInfo request2; |
2464 request2.method = "GET"; | 2472 request2.method = "GET"; |
2465 request2.url = GURL("https://www.google.com/2"); | 2473 request2.url = GURL("https://www.google.com/2"); |
2466 | 2474 |
2467 // Configure against proxy server "myproxy:70". | 2475 // Configure against proxy server "myproxy:70". |
2468 session_deps_.proxy_service.reset( | 2476 session_deps_.proxy_service.reset( |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2547 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 2555 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
2548 TestLoadTimingReusedWithPac(load_timing_info2); | 2556 TestLoadTimingReusedWithPac(load_timing_info2); |
2549 | 2557 |
2550 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 2558 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
2551 | 2559 |
2552 trans2.reset(); | 2560 trans2.reset(); |
2553 session->CloseAllConnections(); | 2561 session->CloseAllConnections(); |
2554 } | 2562 } |
2555 | 2563 |
2556 // Test a simple get through an HTTPS Proxy. | 2564 // Test a simple get through an HTTPS Proxy. |
2557 TEST_F(HttpNetworkTransactionSpdy2Test, HttpsProxyGet) { | 2565 TEST_P(HttpNetworkTransactionTest, HttpsProxyGet) { |
2558 HttpRequestInfo request; | 2566 HttpRequestInfo request; |
2559 request.method = "GET"; | 2567 request.method = "GET"; |
2560 request.url = GURL("http://www.google.com/"); | 2568 request.url = GURL("http://www.google.com/"); |
2561 | 2569 |
2562 // Configure against https proxy server "proxy:70". | 2570 // Configure against https proxy server "proxy:70". |
2563 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 2571 session_deps_.proxy_service.reset(ProxyService::CreateFixed( |
2564 "https://proxy:70")); | 2572 "https://proxy:70")); |
2565 CapturingBoundNetLog log; | 2573 CapturingBoundNetLog log; |
2566 session_deps_.net_log = log.bound().net_log(); | 2574 session_deps_.net_log = log.bound().net_log(); |
2567 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2575 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2608 EXPECT_TRUE(response->headers->IsKeepAlive()); | 2616 EXPECT_TRUE(response->headers->IsKeepAlive()); |
2609 EXPECT_EQ(200, response->headers->response_code()); | 2617 EXPECT_EQ(200, response->headers->response_code()); |
2610 EXPECT_EQ(100, response->headers->GetContentLength()); | 2618 EXPECT_EQ(100, response->headers->GetContentLength()); |
2611 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 2619 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
2612 | 2620 |
2613 // The password prompt info should not be set. | 2621 // The password prompt info should not be set. |
2614 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 2622 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
2615 } | 2623 } |
2616 | 2624 |
2617 // Test a SPDY get through an HTTPS Proxy. | 2625 // Test a SPDY get through an HTTPS Proxy. |
2618 TEST_F(HttpNetworkTransactionSpdy2Test, HttpsProxySpdyGet) { | 2626 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGet) { |
| 2627 if (GetParam() > kProtoSPDY3) |
| 2628 return; |
| 2629 |
2619 HttpRequestInfo request; | 2630 HttpRequestInfo request; |
2620 request.method = "GET"; | 2631 request.method = "GET"; |
2621 request.url = GURL("http://www.google.com/"); | 2632 request.url = GURL("http://www.google.com/"); |
2622 request.load_flags = 0; | 2633 request.load_flags = 0; |
2623 | 2634 |
2624 // Configure against https proxy server "proxy:70". | 2635 // Configure against https proxy server "proxy:70". |
2625 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 2636 session_deps_.proxy_service.reset(ProxyService::CreateFixed( |
2626 "https://proxy:70")); | 2637 "https://proxy:70")); |
2627 CapturingBoundNetLog log; | 2638 CapturingBoundNetLog log; |
2628 session_deps_.net_log = log.bound().net_log(); | 2639 session_deps_.net_log = log.bound().net_log(); |
2629 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2640 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2630 | 2641 |
2631 // fetch http://www.google.com/ via SPDY | 2642 // fetch http://www.google.com/ via SPDY |
2632 scoped_ptr<SpdyFrame> req( | 2643 scoped_ptr<SpdyFrame> req( |
2633 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); | 2644 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); |
2634 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 2645 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
2635 | 2646 |
2636 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 2647 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
2637 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 2648 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
2638 MockRead spdy_reads[] = { | 2649 MockRead spdy_reads[] = { |
2639 CreateMockRead(*resp), | 2650 CreateMockRead(*resp), |
2640 CreateMockRead(*data), | 2651 CreateMockRead(*data), |
2641 MockRead(ASYNC, 0, 0), | 2652 MockRead(ASYNC, 0, 0), |
2642 }; | 2653 }; |
2643 | 2654 |
2644 DelayedSocketData spdy_data( | 2655 DelayedSocketData spdy_data( |
2645 1, // wait for one write to finish before reading. | 2656 1, // wait for one write to finish before reading. |
2646 spdy_reads, arraysize(spdy_reads), | 2657 spdy_reads, arraysize(spdy_reads), |
2647 spdy_writes, arraysize(spdy_writes)); | 2658 spdy_writes, arraysize(spdy_writes)); |
2648 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 2659 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
2649 | 2660 |
2650 SSLSocketDataProvider ssl(ASYNC, OK); | 2661 SSLSocketDataProvider ssl(ASYNC, OK); |
2651 ssl.SetNextProto(kProtoSPDY2); | 2662 ssl.SetNextProto(GetParam()); |
2652 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2663 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
2653 | 2664 |
2654 TestCompletionCallback callback1; | 2665 TestCompletionCallback callback1; |
2655 | 2666 |
2656 scoped_ptr<HttpTransaction> trans( | 2667 scoped_ptr<HttpTransaction> trans( |
2657 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2668 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2658 | 2669 |
2659 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2670 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2660 EXPECT_EQ(ERR_IO_PENDING, rv); | 2671 EXPECT_EQ(ERR_IO_PENDING, rv); |
2661 | 2672 |
2662 rv = callback1.WaitForResult(); | 2673 rv = callback1.WaitForResult(); |
2663 EXPECT_EQ(OK, rv); | 2674 EXPECT_EQ(OK, rv); |
2664 | 2675 |
2665 LoadTimingInfo load_timing_info; | 2676 LoadTimingInfo load_timing_info; |
2666 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 2677 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
2667 TestLoadTimingNotReused(load_timing_info, | 2678 TestLoadTimingNotReused(load_timing_info, |
2668 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 2679 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
2669 | 2680 |
2670 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2681 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2671 ASSERT_TRUE(response != NULL); | 2682 ASSERT_TRUE(response != NULL); |
2672 ASSERT_TRUE(response->headers.get() != NULL); | 2683 ASSERT_TRUE(response->headers.get() != NULL); |
2673 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 2684 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
2674 | 2685 |
2675 std::string response_data; | 2686 std::string response_data; |
2676 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 2687 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
2677 EXPECT_EQ(kUploadData, response_data); | 2688 EXPECT_EQ(kUploadData, response_data); |
2678 } | 2689 } |
2679 | 2690 |
2680 // Test a SPDY get through an HTTPS Proxy. | 2691 // Test a SPDY get through an HTTPS Proxy. |
2681 TEST_F(HttpNetworkTransactionSpdy2Test, HttpsProxySpdyGetWithProxyAuth) { | 2692 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithProxyAuth) { |
| 2693 if (GetParam() > kProtoSPDY3) |
| 2694 return; |
| 2695 |
2682 HttpRequestInfo request; | 2696 HttpRequestInfo request; |
2683 request.method = "GET"; | 2697 request.method = "GET"; |
2684 request.url = GURL("http://www.google.com/"); | 2698 request.url = GURL("http://www.google.com/"); |
2685 request.load_flags = 0; | 2699 request.load_flags = 0; |
2686 | 2700 |
2687 // Configure against https proxy server "myproxy:70". | 2701 // Configure against https proxy server "myproxy:70". |
2688 session_deps_.proxy_service.reset( | 2702 session_deps_.proxy_service.reset( |
2689 ProxyService::CreateFixed("https://myproxy:70")); | 2703 ProxyService::CreateFixed("https://myproxy:70")); |
2690 CapturingBoundNetLog log; | 2704 CapturingBoundNetLog log; |
2691 session_deps_.net_log = log.bound().net_log(); | 2705 session_deps_.net_log = log.bound().net_log(); |
(...skipping 18 matching lines...) Expand all Loading... |
2710 CreateMockWrite(*req_get_authorization, 4), | 2724 CreateMockWrite(*req_get_authorization, 4), |
2711 }; | 2725 }; |
2712 | 2726 |
2713 // The first response is a 407 proxy authentication challenge, and the second | 2727 // The first response is a 407 proxy authentication challenge, and the second |
2714 // response will be a 200 response since the second request includes a valid | 2728 // response will be a 200 response since the second request includes a valid |
2715 // Authorization header. | 2729 // Authorization header. |
2716 const char* const kExtraAuthenticationHeaders[] = { | 2730 const char* const kExtraAuthenticationHeaders[] = { |
2717 "proxy-authenticate", "Basic realm=\"MyRealm1\"" | 2731 "proxy-authenticate", "Basic realm=\"MyRealm1\"" |
2718 }; | 2732 }; |
2719 scoped_ptr<SpdyFrame> resp_authentication( | 2733 scoped_ptr<SpdyFrame> resp_authentication( |
2720 ConstructSpdySynReplyError( | 2734 spdy_util_.ConstructSpdySynReplyError( |
2721 "407 Proxy Authentication Required", | 2735 "407 Proxy Authentication Required", |
2722 kExtraAuthenticationHeaders, arraysize(kExtraAuthenticationHeaders)/2, | 2736 kExtraAuthenticationHeaders, arraysize(kExtraAuthenticationHeaders)/2, |
2723 1)); | 2737 1)); |
2724 scoped_ptr<SpdyFrame> body_authentication( | 2738 scoped_ptr<SpdyFrame> body_authentication( |
2725 ConstructSpdyBodyFrame(1, true)); | 2739 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
2726 scoped_ptr<SpdyFrame> resp_data(ConstructSpdyGetSynReply(NULL, 0, 3)); | 2740 scoped_ptr<SpdyFrame> resp_data( |
2727 scoped_ptr<SpdyFrame> body_data(ConstructSpdyBodyFrame(3, true)); | 2741 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 2742 scoped_ptr<SpdyFrame> body_data(spdy_util_.ConstructSpdyBodyFrame(3, true)); |
2728 MockRead spdy_reads[] = { | 2743 MockRead spdy_reads[] = { |
2729 CreateMockRead(*resp_authentication, 2), | 2744 CreateMockRead(*resp_authentication, 2), |
2730 CreateMockRead(*body_authentication, 3), | 2745 CreateMockRead(*body_authentication, 3), |
2731 CreateMockRead(*resp_data, 5), | 2746 CreateMockRead(*resp_data, 5), |
2732 CreateMockRead(*body_data, 6), | 2747 CreateMockRead(*body_data, 6), |
2733 MockRead(ASYNC, 0, 7), | 2748 MockRead(ASYNC, 0, 7), |
2734 }; | 2749 }; |
2735 | 2750 |
2736 OrderedSocketData data( | 2751 OrderedSocketData data( |
2737 spdy_reads, arraysize(spdy_reads), | 2752 spdy_reads, arraysize(spdy_reads), |
2738 spdy_writes, arraysize(spdy_writes)); | 2753 spdy_writes, arraysize(spdy_writes)); |
2739 session_deps_.socket_factory->AddSocketDataProvider(&data); | 2754 session_deps_.socket_factory->AddSocketDataProvider(&data); |
2740 | 2755 |
2741 SSLSocketDataProvider ssl(ASYNC, OK); | 2756 SSLSocketDataProvider ssl(ASYNC, OK); |
2742 ssl.SetNextProto(kProtoSPDY2); | 2757 ssl.SetNextProto(GetParam()); |
2743 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2758 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
2744 | 2759 |
2745 TestCompletionCallback callback1; | 2760 TestCompletionCallback callback1; |
2746 | 2761 |
2747 scoped_ptr<HttpTransaction> trans( | 2762 scoped_ptr<HttpTransaction> trans( |
2748 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2763 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2749 | 2764 |
2750 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2765 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2751 EXPECT_EQ(ERR_IO_PENDING, rv); | 2766 EXPECT_EQ(ERR_IO_PENDING, rv); |
2752 | 2767 |
(...skipping 20 matching lines...) Expand all Loading... |
2773 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); | 2788 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); |
2774 | 2789 |
2775 ASSERT_TRUE(response_restart != NULL); | 2790 ASSERT_TRUE(response_restart != NULL); |
2776 ASSERT_TRUE(response_restart->headers.get() != NULL); | 2791 ASSERT_TRUE(response_restart->headers.get() != NULL); |
2777 EXPECT_EQ(200, response_restart->headers->response_code()); | 2792 EXPECT_EQ(200, response_restart->headers->response_code()); |
2778 // The password prompt info should not be set. | 2793 // The password prompt info should not be set. |
2779 EXPECT_TRUE(response_restart->auth_challenge.get() == NULL); | 2794 EXPECT_TRUE(response_restart->auth_challenge.get() == NULL); |
2780 } | 2795 } |
2781 | 2796 |
2782 // Test a SPDY CONNECT through an HTTPS Proxy to an HTTPS (non-SPDY) Server. | 2797 // Test a SPDY CONNECT through an HTTPS Proxy to an HTTPS (non-SPDY) Server. |
2783 TEST_F(HttpNetworkTransactionSpdy2Test, HttpsProxySpdyConnectHttps) { | 2798 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectHttps) { |
| 2799 if (GetParam() > kProtoSPDY3) |
| 2800 return; |
| 2801 |
2784 HttpRequestInfo request; | 2802 HttpRequestInfo request; |
2785 request.method = "GET"; | 2803 request.method = "GET"; |
2786 request.url = GURL("https://www.google.com/"); | 2804 request.url = GURL("https://www.google.com/"); |
2787 request.load_flags = 0; | 2805 request.load_flags = 0; |
2788 | 2806 |
2789 // Configure against https proxy server "proxy:70". | 2807 // Configure against https proxy server "proxy:70". |
2790 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 2808 session_deps_.proxy_service.reset(ProxyService::CreateFixed( |
2791 "https://proxy:70")); | 2809 "https://proxy:70")); |
2792 CapturingBoundNetLog log; | 2810 CapturingBoundNetLog log; |
2793 session_deps_.net_log = log.bound().net_log(); | 2811 session_deps_.net_log = log.bound().net_log(); |
2794 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2812 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2795 | 2813 |
2796 scoped_ptr<HttpTransaction> trans( | 2814 scoped_ptr<HttpTransaction> trans( |
2797 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2815 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2798 | 2816 |
2799 // CONNECT to www.google.com:443 via SPDY | 2817 // CONNECT to www.google.com:443 via SPDY |
2800 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); | 2818 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); |
2801 // fetch https://www.google.com/ via HTTP | 2819 // fetch https://www.google.com/ via HTTP |
2802 | 2820 |
2803 const char get[] = "GET / HTTP/1.1\r\n" | 2821 const char get[] = "GET / HTTP/1.1\r\n" |
2804 "Host: www.google.com\r\n" | 2822 "Host: www.google.com\r\n" |
2805 "Connection: keep-alive\r\n\r\n"; | 2823 "Connection: keep-alive\r\n\r\n"; |
2806 scoped_ptr<SpdyFrame> wrapped_get( | 2824 scoped_ptr<SpdyFrame> wrapped_get( |
2807 ConstructSpdyBodyFrame(1, get, strlen(get), false)); | 2825 spdy_util_.ConstructSpdyBodyFrame(1, get, strlen(get), false)); |
2808 scoped_ptr<SpdyFrame> conn_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 2826 scoped_ptr<SpdyFrame> conn_resp( |
| 2827 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
2809 const char resp[] = "HTTP/1.1 200 OK\r\n" | 2828 const char resp[] = "HTTP/1.1 200 OK\r\n" |
2810 "Content-Length: 10\r\n\r\n"; | 2829 "Content-Length: 10\r\n\r\n"; |
2811 scoped_ptr<SpdyFrame> wrapped_get_resp( | 2830 scoped_ptr<SpdyFrame> wrapped_get_resp( |
2812 ConstructSpdyBodyFrame(1, resp, strlen(resp), false)); | 2831 spdy_util_.ConstructSpdyBodyFrame(1, resp, strlen(resp), false)); |
2813 scoped_ptr<SpdyFrame> wrapped_body( | 2832 scoped_ptr<SpdyFrame> wrapped_body( |
2814 ConstructSpdyBodyFrame(1, "1234567890", 10, false)); | 2833 spdy_util_.ConstructSpdyBodyFrame(1, "1234567890", 10, false)); |
2815 scoped_ptr<SpdyFrame> window_update( | 2834 scoped_ptr<SpdyFrame> window_update( |
2816 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); | 2835 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); |
2817 | 2836 |
2818 MockWrite spdy_writes[] = { | 2837 MockWrite spdy_writes[] = { |
2819 CreateMockWrite(*connect, 1), | 2838 CreateMockWrite(*connect, 1), |
2820 CreateMockWrite(*wrapped_get, 3), | 2839 CreateMockWrite(*wrapped_get, 3), |
2821 CreateMockWrite(*window_update, 5), | 2840 CreateMockWrite(*window_update, 5), |
2822 }; | 2841 }; |
2823 | 2842 |
2824 MockRead spdy_reads[] = { | 2843 MockRead spdy_reads[] = { |
2825 CreateMockRead(*conn_resp, 2, ASYNC), | 2844 CreateMockRead(*conn_resp, 2, ASYNC), |
2826 CreateMockRead(*wrapped_get_resp, 4, ASYNC), | 2845 CreateMockRead(*wrapped_get_resp, 4, ASYNC), |
2827 CreateMockRead(*wrapped_body, 6, ASYNC), | 2846 CreateMockRead(*wrapped_body, 6, ASYNC), |
2828 CreateMockRead(*wrapped_body, 7, ASYNC), | 2847 CreateMockRead(*wrapped_body, 7, ASYNC), |
2829 MockRead(ASYNC, 0, 8), | 2848 MockRead(ASYNC, 0, 8), |
2830 }; | 2849 }; |
2831 | 2850 |
2832 OrderedSocketData spdy_data( | 2851 OrderedSocketData spdy_data( |
2833 spdy_reads, arraysize(spdy_reads), | 2852 spdy_reads, arraysize(spdy_reads), |
2834 spdy_writes, arraysize(spdy_writes)); | 2853 spdy_writes, arraysize(spdy_writes)); |
2835 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 2854 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
2836 | 2855 |
2837 SSLSocketDataProvider ssl(ASYNC, OK); | 2856 SSLSocketDataProvider ssl(ASYNC, OK); |
2838 ssl.SetNextProto(kProtoSPDY2); | 2857 ssl.SetNextProto(GetParam()); |
2839 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2858 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
2840 SSLSocketDataProvider ssl2(ASYNC, OK); | 2859 SSLSocketDataProvider ssl2(ASYNC, OK); |
2841 ssl2.was_npn_negotiated = false; | 2860 ssl2.was_npn_negotiated = false; |
2842 ssl2.protocol_negotiated = kProtoUnknown; | 2861 ssl2.protocol_negotiated = kProtoUnknown; |
2843 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 2862 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
2844 | 2863 |
2845 TestCompletionCallback callback1; | 2864 TestCompletionCallback callback1; |
2846 | 2865 |
2847 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2866 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2848 EXPECT_EQ(ERR_IO_PENDING, rv); | 2867 EXPECT_EQ(ERR_IO_PENDING, rv); |
2849 | 2868 |
2850 rv = callback1.WaitForResult(); | 2869 rv = callback1.WaitForResult(); |
2851 EXPECT_EQ(OK, rv); | 2870 EXPECT_EQ(OK, rv); |
2852 | 2871 |
2853 LoadTimingInfo load_timing_info; | 2872 LoadTimingInfo load_timing_info; |
2854 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 2873 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
2855 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 2874 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
2856 | 2875 |
2857 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2876 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2858 ASSERT_TRUE(response != NULL); | 2877 ASSERT_TRUE(response != NULL); |
2859 ASSERT_TRUE(response->headers.get() != NULL); | 2878 ASSERT_TRUE(response->headers.get() != NULL); |
2860 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 2879 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
2861 | 2880 |
2862 std::string response_data; | 2881 std::string response_data; |
2863 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 2882 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
2864 EXPECT_EQ("1234567890", response_data); | 2883 EXPECT_EQ("1234567890", response_data); |
2865 } | 2884 } |
2866 | 2885 |
2867 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. | 2886 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. |
2868 TEST_F(HttpNetworkTransactionSpdy2Test, HttpsProxySpdyConnectSpdy) { | 2887 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { |
| 2888 if (GetParam() > kProtoSPDY3) |
| 2889 return; |
| 2890 |
2869 HttpRequestInfo request; | 2891 HttpRequestInfo request; |
2870 request.method = "GET"; | 2892 request.method = "GET"; |
2871 request.url = GURL("https://www.google.com/"); | 2893 request.url = GURL("https://www.google.com/"); |
2872 request.load_flags = 0; | 2894 request.load_flags = 0; |
2873 | 2895 |
2874 // Configure against https proxy server "proxy:70". | 2896 // Configure against https proxy server "proxy:70". |
2875 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 2897 session_deps_.proxy_service.reset(ProxyService::CreateFixed( |
2876 "https://proxy:70")); | 2898 "https://proxy:70")); |
2877 CapturingBoundNetLog log; | 2899 CapturingBoundNetLog log; |
2878 session_deps_.net_log = log.bound().net_log(); | 2900 session_deps_.net_log = log.bound().net_log(); |
2879 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2901 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2880 | 2902 |
2881 scoped_ptr<HttpTransaction> trans( | 2903 scoped_ptr<HttpTransaction> trans( |
2882 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2904 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2883 | 2905 |
2884 // CONNECT to www.google.com:443 via SPDY | 2906 // CONNECT to www.google.com:443 via SPDY |
2885 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); | 2907 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); |
2886 // fetch https://www.google.com/ via SPDY | 2908 // fetch https://www.google.com/ via SPDY |
2887 const char* const kMyUrl = "https://www.google.com/"; | 2909 const char* const kMyUrl = "https://www.google.com/"; |
2888 scoped_ptr<SpdyFrame> get( | 2910 scoped_ptr<SpdyFrame> get( |
2889 spdy_util_.ConstructSpdyGet(kMyUrl, false, 1, LOWEST)); | 2911 spdy_util_.ConstructSpdyGet(kMyUrl, false, 1, LOWEST)); |
2890 scoped_ptr<SpdyFrame> wrapped_get(ConstructWrappedSpdyFrame(get, 1)); | 2912 scoped_ptr<SpdyFrame> wrapped_get( |
2891 scoped_ptr<SpdyFrame> conn_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 2913 spdy_util_.ConstructWrappedSpdyFrame(get, 1)); |
2892 scoped_ptr<SpdyFrame> get_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 2914 scoped_ptr<SpdyFrame> conn_resp( |
| 2915 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 2916 scoped_ptr<SpdyFrame> get_resp( |
| 2917 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
2893 scoped_ptr<SpdyFrame> wrapped_get_resp( | 2918 scoped_ptr<SpdyFrame> wrapped_get_resp( |
2894 ConstructWrappedSpdyFrame(get_resp, 1)); | 2919 spdy_util_.ConstructWrappedSpdyFrame(get_resp, 1)); |
2895 scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); | 2920 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
2896 scoped_ptr<SpdyFrame> wrapped_body(ConstructWrappedSpdyFrame(body, 1)); | 2921 scoped_ptr<SpdyFrame> wrapped_body( |
| 2922 spdy_util_.ConstructWrappedSpdyFrame(body, 1)); |
2897 scoped_ptr<SpdyFrame> window_update_get_resp( | 2923 scoped_ptr<SpdyFrame> window_update_get_resp( |
2898 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); | 2924 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); |
2899 scoped_ptr<SpdyFrame> window_update_body( | 2925 scoped_ptr<SpdyFrame> window_update_body( |
2900 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_body->size())); | 2926 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_body->size())); |
2901 | 2927 |
2902 MockWrite spdy_writes[] = { | 2928 MockWrite spdy_writes[] = { |
2903 CreateMockWrite(*connect, 1), | 2929 CreateMockWrite(*connect, 1), |
2904 CreateMockWrite(*wrapped_get, 3), | 2930 CreateMockWrite(*wrapped_get, 3), |
2905 CreateMockWrite(*window_update_get_resp, 5), | 2931 CreateMockWrite(*window_update_get_resp, 5), |
2906 CreateMockWrite(*window_update_body, 7), | 2932 CreateMockWrite(*window_update_body, 7), |
2907 }; | 2933 }; |
2908 | 2934 |
2909 MockRead spdy_reads[] = { | 2935 MockRead spdy_reads[] = { |
2910 CreateMockRead(*conn_resp, 2, ASYNC), | 2936 CreateMockRead(*conn_resp, 2, ASYNC), |
2911 CreateMockRead(*wrapped_get_resp, 4, ASYNC), | 2937 CreateMockRead(*wrapped_get_resp, 4, ASYNC), |
2912 CreateMockRead(*wrapped_body, 6, ASYNC), | 2938 CreateMockRead(*wrapped_body, 6, ASYNC), |
2913 MockRead(ASYNC, 0, 8), | 2939 MockRead(ASYNC, 0, 8), |
2914 }; | 2940 }; |
2915 | 2941 |
2916 OrderedSocketData spdy_data( | 2942 OrderedSocketData spdy_data( |
2917 spdy_reads, arraysize(spdy_reads), | 2943 spdy_reads, arraysize(spdy_reads), |
2918 spdy_writes, arraysize(spdy_writes)); | 2944 spdy_writes, arraysize(spdy_writes)); |
2919 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 2945 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
2920 | 2946 |
2921 SSLSocketDataProvider ssl(ASYNC, OK); | 2947 SSLSocketDataProvider ssl(ASYNC, OK); |
2922 ssl.SetNextProto(kProtoSPDY2); | 2948 ssl.SetNextProto(GetParam()); |
2923 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2949 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
2924 SSLSocketDataProvider ssl2(ASYNC, OK); | 2950 SSLSocketDataProvider ssl2(ASYNC, OK); |
2925 ssl2.SetNextProto(kProtoSPDY2); | 2951 ssl2.SetNextProto(GetParam()); |
2926 ssl2.protocol_negotiated = kProtoSPDY2; | 2952 ssl2.protocol_negotiated = GetParam(); |
2927 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 2953 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
2928 | 2954 |
2929 TestCompletionCallback callback1; | 2955 TestCompletionCallback callback1; |
2930 | 2956 |
2931 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2957 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2932 EXPECT_EQ(ERR_IO_PENDING, rv); | 2958 EXPECT_EQ(ERR_IO_PENDING, rv); |
2933 | 2959 |
2934 rv = callback1.WaitForResult(); | 2960 rv = callback1.WaitForResult(); |
2935 EXPECT_EQ(OK, rv); | 2961 EXPECT_EQ(OK, rv); |
2936 | 2962 |
2937 LoadTimingInfo load_timing_info; | 2963 LoadTimingInfo load_timing_info; |
2938 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 2964 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
2939 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 2965 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
2940 | 2966 |
2941 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2967 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2942 ASSERT_TRUE(response != NULL); | 2968 ASSERT_TRUE(response != NULL); |
2943 ASSERT_TRUE(response->headers.get() != NULL); | 2969 ASSERT_TRUE(response->headers.get() != NULL); |
2944 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 2970 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
2945 | 2971 |
2946 std::string response_data; | 2972 std::string response_data; |
2947 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 2973 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
2948 EXPECT_EQ(kUploadData, response_data); | 2974 EXPECT_EQ(kUploadData, response_data); |
2949 } | 2975 } |
2950 | 2976 |
2951 // Test a SPDY CONNECT failure through an HTTPS Proxy. | 2977 // Test a SPDY CONNECT failure through an HTTPS Proxy. |
2952 TEST_F(HttpNetworkTransactionSpdy2Test, HttpsProxySpdyConnectFailure) { | 2978 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) { |
| 2979 if (GetParam() > kProtoSPDY3) |
| 2980 return; |
| 2981 |
2953 HttpRequestInfo request; | 2982 HttpRequestInfo request; |
2954 request.method = "GET"; | 2983 request.method = "GET"; |
2955 request.url = GURL("https://www.google.com/"); | 2984 request.url = GURL("https://www.google.com/"); |
2956 request.load_flags = 0; | 2985 request.load_flags = 0; |
2957 | 2986 |
2958 // Configure against https proxy server "proxy:70". | 2987 // Configure against https proxy server "proxy:70". |
2959 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 2988 session_deps_.proxy_service.reset(ProxyService::CreateFixed( |
2960 "https://proxy:70")); | 2989 "https://proxy:70")); |
2961 CapturingBoundNetLog log; | 2990 CapturingBoundNetLog log; |
2962 session_deps_.net_log = log.bound().net_log(); | 2991 session_deps_.net_log = log.bound().net_log(); |
2963 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2992 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2964 | 2993 |
2965 scoped_ptr<HttpTransaction> trans( | 2994 scoped_ptr<HttpTransaction> trans( |
2966 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2995 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2967 | 2996 |
2968 // CONNECT to www.google.com:443 via SPDY | 2997 // CONNECT to www.google.com:443 via SPDY |
2969 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); | 2998 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); |
2970 scoped_ptr<SpdyFrame> get( | 2999 scoped_ptr<SpdyFrame> get( |
2971 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 3000 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
2972 | 3001 |
2973 MockWrite spdy_writes[] = { | 3002 MockWrite spdy_writes[] = { |
2974 CreateMockWrite(*connect, 1), | 3003 CreateMockWrite(*connect, 1), |
2975 CreateMockWrite(*get, 3), | 3004 CreateMockWrite(*get, 3), |
2976 }; | 3005 }; |
2977 | 3006 |
2978 scoped_ptr<SpdyFrame> resp(ConstructSpdySynReplyError(1)); | 3007 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdySynReplyError(1)); |
2979 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 3008 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
2980 MockRead spdy_reads[] = { | 3009 MockRead spdy_reads[] = { |
2981 CreateMockRead(*resp, 2, ASYNC), | 3010 CreateMockRead(*resp, 2, ASYNC), |
2982 MockRead(ASYNC, 0, 4), | 3011 MockRead(ASYNC, 0, 4), |
2983 }; | 3012 }; |
2984 | 3013 |
2985 OrderedSocketData spdy_data( | 3014 OrderedSocketData spdy_data( |
2986 spdy_reads, arraysize(spdy_reads), | 3015 spdy_reads, arraysize(spdy_reads), |
2987 spdy_writes, arraysize(spdy_writes)); | 3016 spdy_writes, arraysize(spdy_writes)); |
2988 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 3017 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
2989 | 3018 |
2990 SSLSocketDataProvider ssl(ASYNC, OK); | 3019 SSLSocketDataProvider ssl(ASYNC, OK); |
2991 ssl.SetNextProto(kProtoSPDY2); | 3020 ssl.SetNextProto(GetParam()); |
2992 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3021 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
2993 SSLSocketDataProvider ssl2(ASYNC, OK); | 3022 SSLSocketDataProvider ssl2(ASYNC, OK); |
2994 ssl2.SetNextProto(kProtoSPDY2); | 3023 ssl2.SetNextProto(GetParam()); |
2995 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 3024 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
2996 | 3025 |
2997 TestCompletionCallback callback1; | 3026 TestCompletionCallback callback1; |
2998 | 3027 |
2999 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3028 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
3000 EXPECT_EQ(ERR_IO_PENDING, rv); | 3029 EXPECT_EQ(ERR_IO_PENDING, rv); |
3001 | 3030 |
3002 rv = callback1.WaitForResult(); | 3031 rv = callback1.WaitForResult(); |
3003 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 3032 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
3004 | 3033 |
3005 // TODO(ttuttle): Anything else to check here? | 3034 // TODO(ttuttle): Anything else to check here? |
3006 } | 3035 } |
3007 | 3036 |
3008 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY | 3037 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY |
3009 // HTTPS Proxy to different servers. | 3038 // HTTPS Proxy to different servers. |
3010 TEST_F(HttpNetworkTransactionSpdy2Test, | 3039 TEST_P(HttpNetworkTransactionTest, |
3011 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsTwoServers) { | 3040 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsTwoServers) { |
| 3041 if (GetParam() > kProtoSPDY3) |
| 3042 return; |
| 3043 |
3012 // Configure against https proxy server "proxy:70". | 3044 // Configure against https proxy server "proxy:70". |
3013 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 3045 session_deps_.proxy_service.reset(ProxyService::CreateFixed( |
3014 "https://proxy:70")); | 3046 "https://proxy:70")); |
3015 CapturingBoundNetLog log; | 3047 CapturingBoundNetLog log; |
3016 session_deps_.net_log = log.bound().net_log(); | 3048 session_deps_.net_log = log.bound().net_log(); |
3017 scoped_refptr<HttpNetworkSession> session( | 3049 scoped_refptr<HttpNetworkSession> session( |
3018 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); | 3050 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); |
3019 | 3051 |
3020 HttpRequestInfo request1; | 3052 HttpRequestInfo request1; |
3021 request1.method = "GET"; | 3053 request1.method = "GET"; |
3022 request1.url = GURL("https://www.google.com/"); | 3054 request1.url = GURL("https://www.google.com/"); |
3023 request1.load_flags = 0; | 3055 request1.load_flags = 0; |
3024 | 3056 |
3025 HttpRequestInfo request2; | 3057 HttpRequestInfo request2; |
3026 request2.method = "GET"; | 3058 request2.method = "GET"; |
3027 request2.url = GURL("https://news.google.com/"); | 3059 request2.url = GURL("https://news.google.com/"); |
3028 request2.load_flags = 0; | 3060 request2.load_flags = 0; |
3029 | 3061 |
3030 // CONNECT to www.google.com:443 via SPDY. | 3062 // CONNECT to www.google.com:443 via SPDY. |
3031 scoped_ptr<SpdyFrame> connect1(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); | 3063 scoped_ptr<SpdyFrame> connect1(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); |
3032 scoped_ptr<SpdyFrame> conn_resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); | 3064 scoped_ptr<SpdyFrame> conn_resp1( |
| 3065 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
3033 | 3066 |
3034 // Fetch https://www.google.com/ via HTTP. | 3067 // Fetch https://www.google.com/ via HTTP. |
3035 const char get1[] = "GET / HTTP/1.1\r\n" | 3068 const char get1[] = "GET / HTTP/1.1\r\n" |
3036 "Host: www.google.com\r\n" | 3069 "Host: www.google.com\r\n" |
3037 "Connection: keep-alive\r\n\r\n"; | 3070 "Connection: keep-alive\r\n\r\n"; |
3038 scoped_ptr<SpdyFrame> wrapped_get1( | 3071 scoped_ptr<SpdyFrame> wrapped_get1( |
3039 ConstructSpdyBodyFrame(1, get1, strlen(get1), false)); | 3072 spdy_util_.ConstructSpdyBodyFrame(1, get1, strlen(get1), false)); |
3040 const char resp1[] = "HTTP/1.1 200 OK\r\n" | 3073 const char resp1[] = "HTTP/1.1 200 OK\r\n" |
3041 "Content-Length: 1\r\n\r\n"; | 3074 "Content-Length: 1\r\n\r\n"; |
3042 scoped_ptr<SpdyFrame> wrapped_get_resp1( | 3075 scoped_ptr<SpdyFrame> wrapped_get_resp1( |
3043 ConstructSpdyBodyFrame(1, resp1, strlen(resp1), false)); | 3076 spdy_util_.ConstructSpdyBodyFrame(1, resp1, strlen(resp1), false)); |
3044 scoped_ptr<SpdyFrame> wrapped_body1(ConstructSpdyBodyFrame(1, "1", 1, false)); | 3077 scoped_ptr<SpdyFrame> wrapped_body1( |
| 3078 spdy_util_.ConstructSpdyBodyFrame(1, "1", 1, false)); |
3045 scoped_ptr<SpdyFrame> window_update( | 3079 scoped_ptr<SpdyFrame> window_update( |
3046 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp1->size())); | 3080 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp1->size())); |
3047 | 3081 |
3048 // CONNECT to news.google.com:443 via SPDY. | 3082 // CONNECT to news.google.com:443 via SPDY. |
3049 const char* const kConnectHeaders2[] = { | 3083 const char* const kConnectHeaders2[] = { |
3050 "method", "CONNECT", | 3084 spdy_util_.GetMethodKey(), "CONNECT", |
3051 "url", "news.google.com:443", | 3085 spdy_util_.GetPathKey(), "news.google.com:443", |
3052 "host", "news.google.com", | 3086 spdy_util_.GetHostKey(), "news.google.com", |
3053 "version", "HTTP/1.1", | 3087 spdy_util_.GetVersionKey(), "HTTP/1.1", |
3054 }; | 3088 }; |
3055 scoped_ptr<SpdyFrame> connect2( | 3089 scoped_ptr<SpdyFrame> connect2( |
3056 spdy_util_.ConstructSpdyControlFrame(NULL, | 3090 spdy_util_.ConstructSpdyControlFrame(NULL, |
3057 0, | 3091 0, |
3058 /*compressed*/ false, | 3092 /*compressed*/ false, |
3059 3, | 3093 3, |
3060 LOWEST, | 3094 LOWEST, |
3061 SYN_STREAM, | 3095 SYN_STREAM, |
3062 CONTROL_FLAG_NONE, | 3096 CONTROL_FLAG_NONE, |
3063 kConnectHeaders2, | 3097 kConnectHeaders2, |
3064 arraysize(kConnectHeaders2), | 3098 arraysize(kConnectHeaders2), |
3065 0)); | 3099 0)); |
3066 scoped_ptr<SpdyFrame> conn_resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); | 3100 scoped_ptr<SpdyFrame> conn_resp2( |
| 3101 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
3067 | 3102 |
3068 // Fetch https://news.google.com/ via HTTP. | 3103 // Fetch https://news.google.com/ via HTTP. |
3069 const char get2[] = "GET / HTTP/1.1\r\n" | 3104 const char get2[] = "GET / HTTP/1.1\r\n" |
3070 "Host: news.google.com\r\n" | 3105 "Host: news.google.com\r\n" |
3071 "Connection: keep-alive\r\n\r\n"; | 3106 "Connection: keep-alive\r\n\r\n"; |
3072 scoped_ptr<SpdyFrame> wrapped_get2( | 3107 scoped_ptr<SpdyFrame> wrapped_get2( |
3073 ConstructSpdyBodyFrame(3, get2, strlen(get2), false)); | 3108 spdy_util_.ConstructSpdyBodyFrame(3, get2, strlen(get2), false)); |
3074 const char resp2[] = "HTTP/1.1 200 OK\r\n" | 3109 const char resp2[] = "HTTP/1.1 200 OK\r\n" |
3075 "Content-Length: 2\r\n\r\n"; | 3110 "Content-Length: 2\r\n\r\n"; |
3076 scoped_ptr<SpdyFrame> wrapped_get_resp2( | 3111 scoped_ptr<SpdyFrame> wrapped_get_resp2( |
3077 ConstructSpdyBodyFrame(3, resp2, strlen(resp2), false)); | 3112 spdy_util_.ConstructSpdyBodyFrame(3, resp2, strlen(resp2), false)); |
3078 scoped_ptr<SpdyFrame> wrapped_body2( | 3113 scoped_ptr<SpdyFrame> wrapped_body2( |
3079 ConstructSpdyBodyFrame(3, "22", 2, false)); | 3114 spdy_util_.ConstructSpdyBodyFrame(3, "22", 2, false)); |
3080 | 3115 |
3081 MockWrite spdy_writes[] = { | 3116 MockWrite spdy_writes[] = { |
3082 CreateMockWrite(*connect1, 0), | 3117 CreateMockWrite(*connect1, 0), |
3083 CreateMockWrite(*wrapped_get1, 2), | 3118 CreateMockWrite(*wrapped_get1, 2), |
3084 CreateMockWrite(*connect2, 5), | 3119 CreateMockWrite(*connect2, 5), |
3085 CreateMockWrite(*wrapped_get2, 7), | 3120 CreateMockWrite(*wrapped_get2, 7), |
3086 }; | 3121 }; |
3087 | 3122 |
3088 MockRead spdy_reads[] = { | 3123 MockRead spdy_reads[] = { |
3089 CreateMockRead(*conn_resp1, 1, ASYNC), | 3124 CreateMockRead(*conn_resp1, 1, ASYNC), |
3090 CreateMockRead(*wrapped_get_resp1, 3, ASYNC), | 3125 CreateMockRead(*wrapped_get_resp1, 3, ASYNC), |
3091 CreateMockRead(*wrapped_body1, 4, ASYNC), | 3126 CreateMockRead(*wrapped_body1, 4, ASYNC), |
3092 CreateMockRead(*conn_resp2, 6, ASYNC), | 3127 CreateMockRead(*conn_resp2, 6, ASYNC), |
3093 CreateMockRead(*wrapped_get_resp2, 8, ASYNC), | 3128 CreateMockRead(*wrapped_get_resp2, 8, ASYNC), |
3094 CreateMockRead(*wrapped_body2, 9, ASYNC), | 3129 CreateMockRead(*wrapped_body2, 9, ASYNC), |
3095 MockRead(ASYNC, 0, 10), | 3130 MockRead(ASYNC, 0, 10), |
3096 }; | 3131 }; |
3097 | 3132 |
3098 DeterministicSocketData spdy_data( | 3133 DeterministicSocketData spdy_data( |
3099 spdy_reads, arraysize(spdy_reads), | 3134 spdy_reads, arraysize(spdy_reads), |
3100 spdy_writes, arraysize(spdy_writes)); | 3135 spdy_writes, arraysize(spdy_writes)); |
3101 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); | 3136 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); |
3102 | 3137 |
3103 SSLSocketDataProvider ssl(ASYNC, OK); | 3138 SSLSocketDataProvider ssl(ASYNC, OK); |
3104 ssl.SetNextProto(kProtoSPDY2); | 3139 ssl.SetNextProto(GetParam()); |
3105 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); | 3140 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); |
3106 SSLSocketDataProvider ssl2(ASYNC, OK); | 3141 SSLSocketDataProvider ssl2(ASYNC, OK); |
3107 ssl2.was_npn_negotiated = false; | 3142 ssl2.was_npn_negotiated = false; |
3108 ssl2.protocol_negotiated = kProtoUnknown; | 3143 ssl2.protocol_negotiated = kProtoUnknown; |
3109 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); | 3144 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); |
3110 SSLSocketDataProvider ssl3(ASYNC, OK); | 3145 SSLSocketDataProvider ssl3(ASYNC, OK); |
3111 ssl3.was_npn_negotiated = false; | 3146 ssl3.was_npn_negotiated = false; |
3112 ssl3.protocol_negotiated = kProtoUnknown; | 3147 ssl3.protocol_negotiated = kProtoUnknown; |
3113 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl3); | 3148 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl3); |
3114 | 3149 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3155 | 3190 |
3156 // The requests should have different IDs, since they each are using their own | 3191 // The requests should have different IDs, since they each are using their own |
3157 // separate stream. | 3192 // separate stream. |
3158 EXPECT_NE(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 3193 EXPECT_NE(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
3159 | 3194 |
3160 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); | 3195 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); |
3161 } | 3196 } |
3162 | 3197 |
3163 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY | 3198 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY |
3164 // HTTPS Proxy to the same server. | 3199 // HTTPS Proxy to the same server. |
3165 TEST_F(HttpNetworkTransactionSpdy2Test, | 3200 TEST_P(HttpNetworkTransactionTest, |
3166 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsSameServer) { | 3201 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsSameServer) { |
| 3202 if (GetParam() > kProtoSPDY3) |
| 3203 return; |
| 3204 |
3167 // Configure against https proxy server "proxy:70". | 3205 // Configure against https proxy server "proxy:70". |
3168 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 3206 session_deps_.proxy_service.reset(ProxyService::CreateFixed( |
3169 "https://proxy:70")); | 3207 "https://proxy:70")); |
3170 CapturingBoundNetLog log; | 3208 CapturingBoundNetLog log; |
3171 session_deps_.net_log = log.bound().net_log(); | 3209 session_deps_.net_log = log.bound().net_log(); |
3172 scoped_refptr<HttpNetworkSession> session( | 3210 scoped_refptr<HttpNetworkSession> session( |
3173 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); | 3211 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); |
3174 | 3212 |
3175 HttpRequestInfo request1; | 3213 HttpRequestInfo request1; |
3176 request1.method = "GET"; | 3214 request1.method = "GET"; |
3177 request1.url = GURL("https://www.google.com/"); | 3215 request1.url = GURL("https://www.google.com/"); |
3178 request1.load_flags = 0; | 3216 request1.load_flags = 0; |
3179 | 3217 |
3180 HttpRequestInfo request2; | 3218 HttpRequestInfo request2; |
3181 request2.method = "GET"; | 3219 request2.method = "GET"; |
3182 request2.url = GURL("https://www.google.com/2"); | 3220 request2.url = GURL("https://www.google.com/2"); |
3183 request2.load_flags = 0; | 3221 request2.load_flags = 0; |
3184 | 3222 |
3185 // CONNECT to www.google.com:443 via SPDY. | 3223 // CONNECT to www.google.com:443 via SPDY. |
3186 scoped_ptr<SpdyFrame> connect1(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); | 3224 scoped_ptr<SpdyFrame> connect1(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); |
3187 scoped_ptr<SpdyFrame> conn_resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); | 3225 scoped_ptr<SpdyFrame> conn_resp1( |
| 3226 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
3188 | 3227 |
3189 // Fetch https://www.google.com/ via HTTP. | 3228 // Fetch https://www.google.com/ via HTTP. |
3190 const char get1[] = "GET / HTTP/1.1\r\n" | 3229 const char get1[] = "GET / HTTP/1.1\r\n" |
3191 "Host: www.google.com\r\n" | 3230 "Host: www.google.com\r\n" |
3192 "Connection: keep-alive\r\n\r\n"; | 3231 "Connection: keep-alive\r\n\r\n"; |
3193 scoped_ptr<SpdyFrame> wrapped_get1( | 3232 scoped_ptr<SpdyFrame> wrapped_get1( |
3194 ConstructSpdyBodyFrame(1, get1, strlen(get1), false)); | 3233 spdy_util_.ConstructSpdyBodyFrame(1, get1, strlen(get1), false)); |
3195 const char resp1[] = "HTTP/1.1 200 OK\r\n" | 3234 const char resp1[] = "HTTP/1.1 200 OK\r\n" |
3196 "Content-Length: 1\r\n\r\n"; | 3235 "Content-Length: 1\r\n\r\n"; |
3197 scoped_ptr<SpdyFrame> wrapped_get_resp1( | 3236 scoped_ptr<SpdyFrame> wrapped_get_resp1( |
3198 ConstructSpdyBodyFrame(1, resp1, strlen(resp1), false)); | 3237 spdy_util_.ConstructSpdyBodyFrame(1, resp1, strlen(resp1), false)); |
3199 scoped_ptr<SpdyFrame> wrapped_body1(ConstructSpdyBodyFrame(1, "1", 1, false)); | 3238 scoped_ptr<SpdyFrame> wrapped_body1( |
| 3239 spdy_util_.ConstructSpdyBodyFrame(1, "1", 1, false)); |
3200 scoped_ptr<SpdyFrame> window_update( | 3240 scoped_ptr<SpdyFrame> window_update( |
3201 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp1->size())); | 3241 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp1->size())); |
3202 | 3242 |
3203 // Fetch https://www.google.com/2 via HTTP. | 3243 // Fetch https://www.google.com/2 via HTTP. |
3204 const char get2[] = "GET /2 HTTP/1.1\r\n" | 3244 const char get2[] = "GET /2 HTTP/1.1\r\n" |
3205 "Host: www.google.com\r\n" | 3245 "Host: www.google.com\r\n" |
3206 "Connection: keep-alive\r\n\r\n"; | 3246 "Connection: keep-alive\r\n\r\n"; |
3207 scoped_ptr<SpdyFrame> wrapped_get2( | 3247 scoped_ptr<SpdyFrame> wrapped_get2( |
3208 ConstructSpdyBodyFrame(1, get2, strlen(get2), false)); | 3248 spdy_util_.ConstructSpdyBodyFrame(1, get2, strlen(get2), false)); |
3209 const char resp2[] = "HTTP/1.1 200 OK\r\n" | 3249 const char resp2[] = "HTTP/1.1 200 OK\r\n" |
3210 "Content-Length: 2\r\n\r\n"; | 3250 "Content-Length: 2\r\n\r\n"; |
3211 scoped_ptr<SpdyFrame> wrapped_get_resp2( | 3251 scoped_ptr<SpdyFrame> wrapped_get_resp2( |
3212 ConstructSpdyBodyFrame(1, resp2, strlen(resp2), false)); | 3252 spdy_util_.ConstructSpdyBodyFrame(1, resp2, strlen(resp2), false)); |
3213 scoped_ptr<SpdyFrame> wrapped_body2( | 3253 scoped_ptr<SpdyFrame> wrapped_body2( |
3214 ConstructSpdyBodyFrame(1, "22", 2, false)); | 3254 spdy_util_.ConstructSpdyBodyFrame(1, "22", 2, false)); |
3215 | 3255 |
3216 MockWrite spdy_writes[] = { | 3256 MockWrite spdy_writes[] = { |
3217 CreateMockWrite(*connect1, 0), | 3257 CreateMockWrite(*connect1, 0), |
3218 CreateMockWrite(*wrapped_get1, 2), | 3258 CreateMockWrite(*wrapped_get1, 2), |
3219 CreateMockWrite(*wrapped_get2, 5), | 3259 CreateMockWrite(*wrapped_get2, 5), |
3220 }; | 3260 }; |
3221 | 3261 |
3222 MockRead spdy_reads[] = { | 3262 MockRead spdy_reads[] = { |
3223 CreateMockRead(*conn_resp1, 1, ASYNC), | 3263 CreateMockRead(*conn_resp1, 1, ASYNC), |
3224 CreateMockRead(*wrapped_get_resp1, 3, ASYNC), | 3264 CreateMockRead(*wrapped_get_resp1, 3, ASYNC), |
3225 CreateMockRead(*wrapped_body1, 4, ASYNC), | 3265 CreateMockRead(*wrapped_body1, 4, ASYNC), |
3226 CreateMockRead(*wrapped_get_resp2, 6, ASYNC), | 3266 CreateMockRead(*wrapped_get_resp2, 6, ASYNC), |
3227 CreateMockRead(*wrapped_body2, 7, ASYNC), | 3267 CreateMockRead(*wrapped_body2, 7, ASYNC), |
3228 MockRead(ASYNC, 0, 8), | 3268 MockRead(ASYNC, 0, 8), |
3229 }; | 3269 }; |
3230 | 3270 |
3231 DeterministicSocketData spdy_data( | 3271 DeterministicSocketData spdy_data( |
3232 spdy_reads, arraysize(spdy_reads), | 3272 spdy_reads, arraysize(spdy_reads), |
3233 spdy_writes, arraysize(spdy_writes)); | 3273 spdy_writes, arraysize(spdy_writes)); |
3234 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); | 3274 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); |
3235 | 3275 |
3236 SSLSocketDataProvider ssl(ASYNC, OK); | 3276 SSLSocketDataProvider ssl(ASYNC, OK); |
3237 ssl.SetNextProto(kProtoSPDY2); | 3277 ssl.SetNextProto(GetParam()); |
3238 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); | 3278 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); |
3239 SSLSocketDataProvider ssl2(ASYNC, OK); | 3279 SSLSocketDataProvider ssl2(ASYNC, OK); |
3240 ssl2.was_npn_negotiated = false; | 3280 ssl2.was_npn_negotiated = false; |
3241 ssl2.protocol_negotiated = kProtoUnknown; | 3281 ssl2.protocol_negotiated = kProtoUnknown; |
3242 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); | 3282 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); |
3243 | 3283 |
3244 TestCompletionCallback callback; | 3284 TestCompletionCallback callback; |
3245 | 3285 |
3246 scoped_ptr<HttpTransaction> trans( | 3286 scoped_ptr<HttpTransaction> trans( |
3247 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3287 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3283 TestLoadTimingReused(load_timing_info2); | 3323 TestLoadTimingReused(load_timing_info2); |
3284 | 3324 |
3285 // The requests should have the same ID. | 3325 // The requests should have the same ID. |
3286 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 3326 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
3287 | 3327 |
3288 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); | 3328 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); |
3289 } | 3329 } |
3290 | 3330 |
3291 // Test load timing in the case of of two HTTP requests through a SPDY HTTPS | 3331 // Test load timing in the case of of two HTTP requests through a SPDY HTTPS |
3292 // Proxy to different servers. | 3332 // Proxy to different servers. |
3293 TEST_F(HttpNetworkTransactionSpdy2Test, | 3333 TEST_P(HttpNetworkTransactionTest, |
3294 HttpsProxySpdyLoadTimingTwoHttpRequests) { | 3334 HttpsProxySpdyLoadTimingTwoHttpRequests) { |
| 3335 if (GetParam() > kProtoSPDY3) |
| 3336 return; |
| 3337 |
3295 // Configure against https proxy server "proxy:70". | 3338 // Configure against https proxy server "proxy:70". |
3296 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 3339 session_deps_.proxy_service.reset(ProxyService::CreateFixed( |
3297 "https://proxy:70")); | 3340 "https://proxy:70")); |
3298 CapturingBoundNetLog log; | 3341 CapturingBoundNetLog log; |
3299 session_deps_.net_log = log.bound().net_log(); | 3342 session_deps_.net_log = log.bound().net_log(); |
3300 scoped_refptr<HttpNetworkSession> session( | 3343 scoped_refptr<HttpNetworkSession> session( |
3301 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); | 3344 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); |
3302 | 3345 |
3303 HttpRequestInfo request1; | 3346 HttpRequestInfo request1; |
3304 request1.method = "GET"; | 3347 request1.method = "GET"; |
3305 request1.url = GURL("http://www.google.com/"); | 3348 request1.url = GURL("http://www.google.com/"); |
3306 request1.load_flags = 0; | 3349 request1.load_flags = 0; |
3307 | 3350 |
3308 HttpRequestInfo request2; | 3351 HttpRequestInfo request2; |
3309 request2.method = "GET"; | 3352 request2.method = "GET"; |
3310 request2.url = GURL("http://news.google.com/"); | 3353 request2.url = GURL("http://news.google.com/"); |
3311 request2.load_flags = 0; | 3354 request2.load_flags = 0; |
3312 | 3355 |
3313 // http://www.google.com/ | 3356 // http://www.google.com/ |
3314 const char* const headers1[] = { | 3357 scoped_ptr<SpdyHeaderBlock> headers( |
3315 "method", "GET", | 3358 spdy_util_.ConstructGetHeaderBlockForProxy("http://www.google.com/")); |
3316 "url", "http://www.google.com/", | |
3317 "host", "www.google.com", | |
3318 "scheme", "http", | |
3319 "version", "HTTP/1.1" | |
3320 }; | |
3321 scoped_ptr<SpdyFrame> get1(spdy_util_.ConstructSpdyControlFrame( | 3359 scoped_ptr<SpdyFrame> get1(spdy_util_.ConstructSpdyControlFrame( |
3322 NULL, 0, false, 1, LOWEST, SYN_STREAM, CONTROL_FLAG_FIN, | 3360 headers.Pass(), false, 1, LOWEST, SYN_STREAM, CONTROL_FLAG_FIN, 0)); |
3323 headers1, arraysize(headers1), 0)); | 3361 scoped_ptr<SpdyFrame> get_resp1( |
3324 scoped_ptr<SpdyFrame> get_resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); | 3362 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
3325 scoped_ptr<SpdyFrame> body1(ConstructSpdyBodyFrame(1, "1", 1, true)); | 3363 scoped_ptr<SpdyFrame> body1( |
| 3364 spdy_util_.ConstructSpdyBodyFrame(1, "1", 1, true)); |
3326 | 3365 |
3327 // http://news.google.com/ | 3366 // http://news.google.com/ |
3328 const char* const headers2[] = { | 3367 scoped_ptr<SpdyHeaderBlock> headers2( |
3329 "method", "GET", | 3368 spdy_util_.ConstructGetHeaderBlockForProxy("http://news.google.com/")); |
3330 "url", "http://news.google.com/", | |
3331 "host", "news.google.com", | |
3332 "scheme", "http", | |
3333 "version", "HTTP/1.1" | |
3334 }; | |
3335 scoped_ptr<SpdyFrame> get2(spdy_util_.ConstructSpdyControlFrame( | 3369 scoped_ptr<SpdyFrame> get2(spdy_util_.ConstructSpdyControlFrame( |
3336 NULL, 0, false, 3, LOWEST, SYN_STREAM, CONTROL_FLAG_FIN, | 3370 headers2.Pass(), false, 3, LOWEST, SYN_STREAM, CONTROL_FLAG_FIN, 0)); |
3337 headers2, arraysize(headers2), 0)); | 3371 scoped_ptr<SpdyFrame> get_resp2( |
3338 scoped_ptr<SpdyFrame> get_resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); | 3372 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
3339 scoped_ptr<SpdyFrame> body2(ConstructSpdyBodyFrame(3, "22", 2, true)); | 3373 scoped_ptr<SpdyFrame> body2( |
| 3374 spdy_util_.ConstructSpdyBodyFrame(3, "22", 2, true)); |
3340 | 3375 |
3341 MockWrite spdy_writes[] = { | 3376 MockWrite spdy_writes[] = { |
3342 CreateMockWrite(*get1, 0), | 3377 CreateMockWrite(*get1, 0), |
3343 CreateMockWrite(*get2, 3), | 3378 CreateMockWrite(*get2, 3), |
3344 }; | 3379 }; |
3345 | 3380 |
3346 MockRead spdy_reads[] = { | 3381 MockRead spdy_reads[] = { |
3347 CreateMockRead(*get_resp1, 1, ASYNC), | 3382 CreateMockRead(*get_resp1, 1, ASYNC), |
3348 CreateMockRead(*body1, 2, ASYNC), | 3383 CreateMockRead(*body1, 2, ASYNC), |
3349 CreateMockRead(*get_resp2, 4, ASYNC), | 3384 CreateMockRead(*get_resp2, 4, ASYNC), |
3350 CreateMockRead(*body2, 5, ASYNC), | 3385 CreateMockRead(*body2, 5, ASYNC), |
3351 MockRead(ASYNC, 0, 6), | 3386 MockRead(ASYNC, 0, 6), |
3352 }; | 3387 }; |
3353 | 3388 |
3354 DeterministicSocketData spdy_data( | 3389 DeterministicSocketData spdy_data( |
3355 spdy_reads, arraysize(spdy_reads), | 3390 spdy_reads, arraysize(spdy_reads), |
3356 spdy_writes, arraysize(spdy_writes)); | 3391 spdy_writes, arraysize(spdy_writes)); |
3357 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); | 3392 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); |
3358 | 3393 |
3359 SSLSocketDataProvider ssl(ASYNC, OK); | 3394 SSLSocketDataProvider ssl(ASYNC, OK); |
3360 ssl.SetNextProto(kProtoSPDY2); | 3395 ssl.SetNextProto(GetParam()); |
3361 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); | 3396 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); |
3362 | 3397 |
3363 TestCompletionCallback callback; | 3398 TestCompletionCallback callback; |
3364 | 3399 |
3365 scoped_ptr<HttpTransaction> trans( | 3400 scoped_ptr<HttpTransaction> trans( |
3366 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3401 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
3367 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); | 3402 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); |
3368 EXPECT_EQ(ERR_IO_PENDING, rv); | 3403 EXPECT_EQ(ERR_IO_PENDING, rv); |
3369 spdy_data.RunFor(2); | 3404 spdy_data.RunFor(2); |
3370 | 3405 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3404 | 3439 |
3405 // The requests should have the same ID. | 3440 // The requests should have the same ID. |
3406 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 3441 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
3407 | 3442 |
3408 EXPECT_EQ(ERR_IO_PENDING, trans2->Read(buf.get(), 256, callback.callback())); | 3443 EXPECT_EQ(ERR_IO_PENDING, trans2->Read(buf.get(), 256, callback.callback())); |
3409 spdy_data.RunFor(1); | 3444 spdy_data.RunFor(1); |
3410 EXPECT_EQ(2, callback.WaitForResult()); | 3445 EXPECT_EQ(2, callback.WaitForResult()); |
3411 } | 3446 } |
3412 | 3447 |
3413 // Test the challenge-response-retry sequence through an HTTPS Proxy | 3448 // Test the challenge-response-retry sequence through an HTTPS Proxy |
3414 TEST_F(HttpNetworkTransactionSpdy2Test, HttpsProxyAuthRetry) { | 3449 TEST_P(HttpNetworkTransactionTest, HttpsProxyAuthRetry) { |
3415 HttpRequestInfo request; | 3450 HttpRequestInfo request; |
3416 request.method = "GET"; | 3451 request.method = "GET"; |
3417 request.url = GURL("http://www.google.com/"); | 3452 request.url = GURL("http://www.google.com/"); |
3418 // when the no authentication data flag is set. | 3453 // when the no authentication data flag is set. |
3419 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 3454 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
3420 | 3455 |
3421 // Configure against https proxy server "myproxy:70". | 3456 // Configure against https proxy server "myproxy:70". |
3422 session_deps_.proxy_service.reset( | 3457 session_deps_.proxy_service.reset( |
3423 ProxyService::CreateFixed("https://myproxy:70")); | 3458 ProxyService::CreateFixed("https://myproxy:70")); |
3424 CapturingBoundNetLog log; | 3459 CapturingBoundNetLog log; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3502 | 3537 |
3503 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3538 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3504 EXPECT_EQ(200, response->headers->response_code()); | 3539 EXPECT_EQ(200, response->headers->response_code()); |
3505 EXPECT_EQ(100, response->headers->GetContentLength()); | 3540 EXPECT_EQ(100, response->headers->GetContentLength()); |
3506 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3541 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3507 | 3542 |
3508 // The password prompt info should not be set. | 3543 // The password prompt info should not be set. |
3509 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 3544 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
3510 } | 3545 } |
3511 | 3546 |
3512 void HttpNetworkTransactionSpdy2Test::ConnectStatusHelperWithExpectedStatus( | 3547 void HttpNetworkTransactionTest::ConnectStatusHelperWithExpectedStatus( |
3513 const MockRead& status, int expected_status) { | 3548 const MockRead& status, int expected_status) { |
3514 HttpRequestInfo request; | 3549 HttpRequestInfo request; |
3515 request.method = "GET"; | 3550 request.method = "GET"; |
3516 request.url = GURL("https://www.google.com/"); | 3551 request.url = GURL("https://www.google.com/"); |
3517 request.load_flags = 0; | 3552 request.load_flags = 0; |
3518 | 3553 |
3519 // Configure against proxy server "myproxy:70". | 3554 // Configure against proxy server "myproxy:70". |
3520 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 3555 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
3521 | 3556 |
3522 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3557 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
(...skipping 21 matching lines...) Expand all Loading... |
3544 scoped_ptr<HttpTransaction> trans( | 3579 scoped_ptr<HttpTransaction> trans( |
3545 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3580 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
3546 | 3581 |
3547 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3582 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3548 EXPECT_EQ(ERR_IO_PENDING, rv); | 3583 EXPECT_EQ(ERR_IO_PENDING, rv); |
3549 | 3584 |
3550 rv = callback.WaitForResult(); | 3585 rv = callback.WaitForResult(); |
3551 EXPECT_EQ(expected_status, rv); | 3586 EXPECT_EQ(expected_status, rv); |
3552 } | 3587 } |
3553 | 3588 |
3554 void HttpNetworkTransactionSpdy2Test::ConnectStatusHelper( | 3589 void HttpNetworkTransactionTest::ConnectStatusHelper( |
3555 const MockRead& status) { | 3590 const MockRead& status) { |
3556 ConnectStatusHelperWithExpectedStatus( | 3591 ConnectStatusHelperWithExpectedStatus( |
3557 status, ERR_TUNNEL_CONNECTION_FAILED); | 3592 status, ERR_TUNNEL_CONNECTION_FAILED); |
3558 } | 3593 } |
3559 | 3594 |
3560 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus100) { | 3595 TEST_P(HttpNetworkTransactionTest, ConnectStatus100) { |
3561 ConnectStatusHelper(MockRead("HTTP/1.1 100 Continue\r\n")); | 3596 ConnectStatusHelper(MockRead("HTTP/1.1 100 Continue\r\n")); |
3562 } | 3597 } |
3563 | 3598 |
3564 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus101) { | 3599 TEST_P(HttpNetworkTransactionTest, ConnectStatus101) { |
3565 ConnectStatusHelper(MockRead("HTTP/1.1 101 Switching Protocols\r\n")); | 3600 ConnectStatusHelper(MockRead("HTTP/1.1 101 Switching Protocols\r\n")); |
3566 } | 3601 } |
3567 | 3602 |
3568 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus201) { | 3603 TEST_P(HttpNetworkTransactionTest, ConnectStatus201) { |
3569 ConnectStatusHelper(MockRead("HTTP/1.1 201 Created\r\n")); | 3604 ConnectStatusHelper(MockRead("HTTP/1.1 201 Created\r\n")); |
3570 } | 3605 } |
3571 | 3606 |
3572 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus202) { | 3607 TEST_P(HttpNetworkTransactionTest, ConnectStatus202) { |
3573 ConnectStatusHelper(MockRead("HTTP/1.1 202 Accepted\r\n")); | 3608 ConnectStatusHelper(MockRead("HTTP/1.1 202 Accepted\r\n")); |
3574 } | 3609 } |
3575 | 3610 |
3576 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus203) { | 3611 TEST_P(HttpNetworkTransactionTest, ConnectStatus203) { |
3577 ConnectStatusHelper( | 3612 ConnectStatusHelper( |
3578 MockRead("HTTP/1.1 203 Non-Authoritative Information\r\n")); | 3613 MockRead("HTTP/1.1 203 Non-Authoritative Information\r\n")); |
3579 } | 3614 } |
3580 | 3615 |
3581 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus204) { | 3616 TEST_P(HttpNetworkTransactionTest, ConnectStatus204) { |
3582 ConnectStatusHelper(MockRead("HTTP/1.1 204 No Content\r\n")); | 3617 ConnectStatusHelper(MockRead("HTTP/1.1 204 No Content\r\n")); |
3583 } | 3618 } |
3584 | 3619 |
3585 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus205) { | 3620 TEST_P(HttpNetworkTransactionTest, ConnectStatus205) { |
3586 ConnectStatusHelper(MockRead("HTTP/1.1 205 Reset Content\r\n")); | 3621 ConnectStatusHelper(MockRead("HTTP/1.1 205 Reset Content\r\n")); |
3587 } | 3622 } |
3588 | 3623 |
3589 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus206) { | 3624 TEST_P(HttpNetworkTransactionTest, ConnectStatus206) { |
3590 ConnectStatusHelper(MockRead("HTTP/1.1 206 Partial Content\r\n")); | 3625 ConnectStatusHelper(MockRead("HTTP/1.1 206 Partial Content\r\n")); |
3591 } | 3626 } |
3592 | 3627 |
3593 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus300) { | 3628 TEST_P(HttpNetworkTransactionTest, ConnectStatus300) { |
3594 ConnectStatusHelper(MockRead("HTTP/1.1 300 Multiple Choices\r\n")); | 3629 ConnectStatusHelper(MockRead("HTTP/1.1 300 Multiple Choices\r\n")); |
3595 } | 3630 } |
3596 | 3631 |
3597 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus301) { | 3632 TEST_P(HttpNetworkTransactionTest, ConnectStatus301) { |
3598 ConnectStatusHelper(MockRead("HTTP/1.1 301 Moved Permanently\r\n")); | 3633 ConnectStatusHelper(MockRead("HTTP/1.1 301 Moved Permanently\r\n")); |
3599 } | 3634 } |
3600 | 3635 |
3601 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus302) { | 3636 TEST_P(HttpNetworkTransactionTest, ConnectStatus302) { |
3602 ConnectStatusHelper(MockRead("HTTP/1.1 302 Found\r\n")); | 3637 ConnectStatusHelper(MockRead("HTTP/1.1 302 Found\r\n")); |
3603 } | 3638 } |
3604 | 3639 |
3605 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus303) { | 3640 TEST_P(HttpNetworkTransactionTest, ConnectStatus303) { |
3606 ConnectStatusHelper(MockRead("HTTP/1.1 303 See Other\r\n")); | 3641 ConnectStatusHelper(MockRead("HTTP/1.1 303 See Other\r\n")); |
3607 } | 3642 } |
3608 | 3643 |
3609 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus304) { | 3644 TEST_P(HttpNetworkTransactionTest, ConnectStatus304) { |
3610 ConnectStatusHelper(MockRead("HTTP/1.1 304 Not Modified\r\n")); | 3645 ConnectStatusHelper(MockRead("HTTP/1.1 304 Not Modified\r\n")); |
3611 } | 3646 } |
3612 | 3647 |
3613 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus305) { | 3648 TEST_P(HttpNetworkTransactionTest, ConnectStatus305) { |
3614 ConnectStatusHelper(MockRead("HTTP/1.1 305 Use Proxy\r\n")); | 3649 ConnectStatusHelper(MockRead("HTTP/1.1 305 Use Proxy\r\n")); |
3615 } | 3650 } |
3616 | 3651 |
3617 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus306) { | 3652 TEST_P(HttpNetworkTransactionTest, ConnectStatus306) { |
3618 ConnectStatusHelper(MockRead("HTTP/1.1 306\r\n")); | 3653 ConnectStatusHelper(MockRead("HTTP/1.1 306\r\n")); |
3619 } | 3654 } |
3620 | 3655 |
3621 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus307) { | 3656 TEST_P(HttpNetworkTransactionTest, ConnectStatus307) { |
3622 ConnectStatusHelper(MockRead("HTTP/1.1 307 Temporary Redirect\r\n")); | 3657 ConnectStatusHelper(MockRead("HTTP/1.1 307 Temporary Redirect\r\n")); |
3623 } | 3658 } |
3624 | 3659 |
3625 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus400) { | 3660 TEST_P(HttpNetworkTransactionTest, ConnectStatus400) { |
3626 ConnectStatusHelper(MockRead("HTTP/1.1 400 Bad Request\r\n")); | 3661 ConnectStatusHelper(MockRead("HTTP/1.1 400 Bad Request\r\n")); |
3627 } | 3662 } |
3628 | 3663 |
3629 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus401) { | 3664 TEST_P(HttpNetworkTransactionTest, ConnectStatus401) { |
3630 ConnectStatusHelper(MockRead("HTTP/1.1 401 Unauthorized\r\n")); | 3665 ConnectStatusHelper(MockRead("HTTP/1.1 401 Unauthorized\r\n")); |
3631 } | 3666 } |
3632 | 3667 |
3633 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus402) { | 3668 TEST_P(HttpNetworkTransactionTest, ConnectStatus402) { |
3634 ConnectStatusHelper(MockRead("HTTP/1.1 402 Payment Required\r\n")); | 3669 ConnectStatusHelper(MockRead("HTTP/1.1 402 Payment Required\r\n")); |
3635 } | 3670 } |
3636 | 3671 |
3637 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus403) { | 3672 TEST_P(HttpNetworkTransactionTest, ConnectStatus403) { |
3638 ConnectStatusHelper(MockRead("HTTP/1.1 403 Forbidden\r\n")); | 3673 ConnectStatusHelper(MockRead("HTTP/1.1 403 Forbidden\r\n")); |
3639 } | 3674 } |
3640 | 3675 |
3641 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus404) { | 3676 TEST_P(HttpNetworkTransactionTest, ConnectStatus404) { |
3642 ConnectStatusHelper(MockRead("HTTP/1.1 404 Not Found\r\n")); | 3677 ConnectStatusHelper(MockRead("HTTP/1.1 404 Not Found\r\n")); |
3643 } | 3678 } |
3644 | 3679 |
3645 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus405) { | 3680 TEST_P(HttpNetworkTransactionTest, ConnectStatus405) { |
3646 ConnectStatusHelper(MockRead("HTTP/1.1 405 Method Not Allowed\r\n")); | 3681 ConnectStatusHelper(MockRead("HTTP/1.1 405 Method Not Allowed\r\n")); |
3647 } | 3682 } |
3648 | 3683 |
3649 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus406) { | 3684 TEST_P(HttpNetworkTransactionTest, ConnectStatus406) { |
3650 ConnectStatusHelper(MockRead("HTTP/1.1 406 Not Acceptable\r\n")); | 3685 ConnectStatusHelper(MockRead("HTTP/1.1 406 Not Acceptable\r\n")); |
3651 } | 3686 } |
3652 | 3687 |
3653 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus407) { | 3688 TEST_P(HttpNetworkTransactionTest, ConnectStatus407) { |
3654 ConnectStatusHelperWithExpectedStatus( | 3689 ConnectStatusHelperWithExpectedStatus( |
3655 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 3690 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
3656 ERR_PROXY_AUTH_UNSUPPORTED); | 3691 ERR_PROXY_AUTH_UNSUPPORTED); |
3657 } | 3692 } |
3658 | 3693 |
3659 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus408) { | 3694 TEST_P(HttpNetworkTransactionTest, ConnectStatus408) { |
3660 ConnectStatusHelper(MockRead("HTTP/1.1 408 Request Timeout\r\n")); | 3695 ConnectStatusHelper(MockRead("HTTP/1.1 408 Request Timeout\r\n")); |
3661 } | 3696 } |
3662 | 3697 |
3663 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus409) { | 3698 TEST_P(HttpNetworkTransactionTest, ConnectStatus409) { |
3664 ConnectStatusHelper(MockRead("HTTP/1.1 409 Conflict\r\n")); | 3699 ConnectStatusHelper(MockRead("HTTP/1.1 409 Conflict\r\n")); |
3665 } | 3700 } |
3666 | 3701 |
3667 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus410) { | 3702 TEST_P(HttpNetworkTransactionTest, ConnectStatus410) { |
3668 ConnectStatusHelper(MockRead("HTTP/1.1 410 Gone\r\n")); | 3703 ConnectStatusHelper(MockRead("HTTP/1.1 410 Gone\r\n")); |
3669 } | 3704 } |
3670 | 3705 |
3671 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus411) { | 3706 TEST_P(HttpNetworkTransactionTest, ConnectStatus411) { |
3672 ConnectStatusHelper(MockRead("HTTP/1.1 411 Length Required\r\n")); | 3707 ConnectStatusHelper(MockRead("HTTP/1.1 411 Length Required\r\n")); |
3673 } | 3708 } |
3674 | 3709 |
3675 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus412) { | 3710 TEST_P(HttpNetworkTransactionTest, ConnectStatus412) { |
3676 ConnectStatusHelper(MockRead("HTTP/1.1 412 Precondition Failed\r\n")); | 3711 ConnectStatusHelper(MockRead("HTTP/1.1 412 Precondition Failed\r\n")); |
3677 } | 3712 } |
3678 | 3713 |
3679 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus413) { | 3714 TEST_P(HttpNetworkTransactionTest, ConnectStatus413) { |
3680 ConnectStatusHelper(MockRead("HTTP/1.1 413 Request Entity Too Large\r\n")); | 3715 ConnectStatusHelper(MockRead("HTTP/1.1 413 Request Entity Too Large\r\n")); |
3681 } | 3716 } |
3682 | 3717 |
3683 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus414) { | 3718 TEST_P(HttpNetworkTransactionTest, ConnectStatus414) { |
3684 ConnectStatusHelper(MockRead("HTTP/1.1 414 Request-URI Too Long\r\n")); | 3719 ConnectStatusHelper(MockRead("HTTP/1.1 414 Request-URI Too Long\r\n")); |
3685 } | 3720 } |
3686 | 3721 |
3687 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus415) { | 3722 TEST_P(HttpNetworkTransactionTest, ConnectStatus415) { |
3688 ConnectStatusHelper(MockRead("HTTP/1.1 415 Unsupported Media Type\r\n")); | 3723 ConnectStatusHelper(MockRead("HTTP/1.1 415 Unsupported Media Type\r\n")); |
3689 } | 3724 } |
3690 | 3725 |
3691 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus416) { | 3726 TEST_P(HttpNetworkTransactionTest, ConnectStatus416) { |
3692 ConnectStatusHelper( | 3727 ConnectStatusHelper( |
3693 MockRead("HTTP/1.1 416 Requested Range Not Satisfiable\r\n")); | 3728 MockRead("HTTP/1.1 416 Requested Range Not Satisfiable\r\n")); |
3694 } | 3729 } |
3695 | 3730 |
3696 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus417) { | 3731 TEST_P(HttpNetworkTransactionTest, ConnectStatus417) { |
3697 ConnectStatusHelper(MockRead("HTTP/1.1 417 Expectation Failed\r\n")); | 3732 ConnectStatusHelper(MockRead("HTTP/1.1 417 Expectation Failed\r\n")); |
3698 } | 3733 } |
3699 | 3734 |
3700 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus500) { | 3735 TEST_P(HttpNetworkTransactionTest, ConnectStatus500) { |
3701 ConnectStatusHelper(MockRead("HTTP/1.1 500 Internal Server Error\r\n")); | 3736 ConnectStatusHelper(MockRead("HTTP/1.1 500 Internal Server Error\r\n")); |
3702 } | 3737 } |
3703 | 3738 |
3704 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus501) { | 3739 TEST_P(HttpNetworkTransactionTest, ConnectStatus501) { |
3705 ConnectStatusHelper(MockRead("HTTP/1.1 501 Not Implemented\r\n")); | 3740 ConnectStatusHelper(MockRead("HTTP/1.1 501 Not Implemented\r\n")); |
3706 } | 3741 } |
3707 | 3742 |
3708 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus502) { | 3743 TEST_P(HttpNetworkTransactionTest, ConnectStatus502) { |
3709 ConnectStatusHelper(MockRead("HTTP/1.1 502 Bad Gateway\r\n")); | 3744 ConnectStatusHelper(MockRead("HTTP/1.1 502 Bad Gateway\r\n")); |
3710 } | 3745 } |
3711 | 3746 |
3712 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus503) { | 3747 TEST_P(HttpNetworkTransactionTest, ConnectStatus503) { |
3713 ConnectStatusHelper(MockRead("HTTP/1.1 503 Service Unavailable\r\n")); | 3748 ConnectStatusHelper(MockRead("HTTP/1.1 503 Service Unavailable\r\n")); |
3714 } | 3749 } |
3715 | 3750 |
3716 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus504) { | 3751 TEST_P(HttpNetworkTransactionTest, ConnectStatus504) { |
3717 ConnectStatusHelper(MockRead("HTTP/1.1 504 Gateway Timeout\r\n")); | 3752 ConnectStatusHelper(MockRead("HTTP/1.1 504 Gateway Timeout\r\n")); |
3718 } | 3753 } |
3719 | 3754 |
3720 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectStatus505) { | 3755 TEST_P(HttpNetworkTransactionTest, ConnectStatus505) { |
3721 ConnectStatusHelper(MockRead("HTTP/1.1 505 HTTP Version Not Supported\r\n")); | 3756 ConnectStatusHelper(MockRead("HTTP/1.1 505 HTTP Version Not Supported\r\n")); |
3722 } | 3757 } |
3723 | 3758 |
3724 // Test the flow when both the proxy server AND origin server require | 3759 // Test the flow when both the proxy server AND origin server require |
3725 // authentication. Again, this uses basic auth for both since that is | 3760 // authentication. Again, this uses basic auth for both since that is |
3726 // the simplest to mock. | 3761 // the simplest to mock. |
3727 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuthProxyThenServer) { | 3762 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyThenServer) { |
3728 HttpRequestInfo request; | 3763 HttpRequestInfo request; |
3729 request.method = "GET"; | 3764 request.method = "GET"; |
3730 request.url = GURL("http://www.google.com/"); | 3765 request.url = GURL("http://www.google.com/"); |
3731 request.load_flags = 0; | 3766 request.load_flags = 0; |
3732 | 3767 |
3733 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 3768 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
3734 | 3769 |
3735 // Configure against proxy server "myproxy:70". | 3770 // Configure against proxy server "myproxy:70". |
3736 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(DEFAULT_PRIORITY, | 3771 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(DEFAULT_PRIORITY, |
3737 CreateSession(&session_deps_))); | 3772 CreateSession(&session_deps_))); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3846 | 3881 |
3847 // For the NTLM implementation using SSPI, we skip the NTLM tests since we | 3882 // For the NTLM implementation using SSPI, we skip the NTLM tests since we |
3848 // can't hook into its internals to cause it to generate predictable NTLM | 3883 // can't hook into its internals to cause it to generate predictable NTLM |
3849 // authorization headers. | 3884 // authorization headers. |
3850 #if defined(NTLM_PORTABLE) | 3885 #if defined(NTLM_PORTABLE) |
3851 // The NTLM authentication unit tests were generated by capturing the HTTP | 3886 // The NTLM authentication unit tests were generated by capturing the HTTP |
3852 // requests and responses using Fiddler 2 and inspecting the generated random | 3887 // requests and responses using Fiddler 2 and inspecting the generated random |
3853 // bytes in the debugger. | 3888 // bytes in the debugger. |
3854 | 3889 |
3855 // Enter the correct password and authenticate successfully. | 3890 // Enter the correct password and authenticate successfully. |
3856 TEST_F(HttpNetworkTransactionSpdy2Test, NTLMAuth1) { | 3891 TEST_P(HttpNetworkTransactionTest, NTLMAuth1) { |
3857 HttpRequestInfo request; | 3892 HttpRequestInfo request; |
3858 request.method = "GET"; | 3893 request.method = "GET"; |
3859 request.url = GURL("http://172.22.68.17/kids/login.aspx"); | 3894 request.url = GURL("http://172.22.68.17/kids/login.aspx"); |
3860 request.load_flags = 0; | 3895 request.load_flags = 0; |
3861 | 3896 |
3862 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom1, | 3897 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom1, |
3863 MockGetHostName); | 3898 MockGetHostName); |
3864 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3899 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
3865 | 3900 |
3866 MockWrite data_writes1[] = { | 3901 MockWrite data_writes1[] = { |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3975 rv = callback3.WaitForResult(); | 4010 rv = callback3.WaitForResult(); |
3976 EXPECT_EQ(OK, rv); | 4011 EXPECT_EQ(OK, rv); |
3977 | 4012 |
3978 response = trans->GetResponseInfo(); | 4013 response = trans->GetResponseInfo(); |
3979 ASSERT_TRUE(response != NULL); | 4014 ASSERT_TRUE(response != NULL); |
3980 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 4015 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
3981 EXPECT_EQ(13, response->headers->GetContentLength()); | 4016 EXPECT_EQ(13, response->headers->GetContentLength()); |
3982 } | 4017 } |
3983 | 4018 |
3984 // Enter a wrong password, and then the correct one. | 4019 // Enter a wrong password, and then the correct one. |
3985 TEST_F(HttpNetworkTransactionSpdy2Test, NTLMAuth2) { | 4020 TEST_P(HttpNetworkTransactionTest, NTLMAuth2) { |
3986 HttpRequestInfo request; | 4021 HttpRequestInfo request; |
3987 request.method = "GET"; | 4022 request.method = "GET"; |
3988 request.url = GURL("http://172.22.68.17/kids/login.aspx"); | 4023 request.url = GURL("http://172.22.68.17/kids/login.aspx"); |
3989 request.load_flags = 0; | 4024 request.load_flags = 0; |
3990 | 4025 |
3991 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom2, | 4026 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom2, |
3992 MockGetHostName); | 4027 MockGetHostName); |
3993 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4028 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
3994 | 4029 |
3995 MockWrite data_writes1[] = { | 4030 MockWrite data_writes1[] = { |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4177 | 4212 |
4178 response = trans->GetResponseInfo(); | 4213 response = trans->GetResponseInfo(); |
4179 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 4214 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
4180 EXPECT_EQ(13, response->headers->GetContentLength()); | 4215 EXPECT_EQ(13, response->headers->GetContentLength()); |
4181 } | 4216 } |
4182 #endif // NTLM_PORTABLE | 4217 #endif // NTLM_PORTABLE |
4183 | 4218 |
4184 // Test reading a server response which has only headers, and no body. | 4219 // Test reading a server response which has only headers, and no body. |
4185 // After some maximum number of bytes is consumed, the transaction should | 4220 // After some maximum number of bytes is consumed, the transaction should |
4186 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. | 4221 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. |
4187 TEST_F(HttpNetworkTransactionSpdy2Test, LargeHeadersNoBody) { | 4222 TEST_P(HttpNetworkTransactionTest, LargeHeadersNoBody) { |
4188 HttpRequestInfo request; | 4223 HttpRequestInfo request; |
4189 request.method = "GET"; | 4224 request.method = "GET"; |
4190 request.url = GURL("http://www.google.com/"); | 4225 request.url = GURL("http://www.google.com/"); |
4191 request.load_flags = 0; | 4226 request.load_flags = 0; |
4192 | 4227 |
4193 scoped_ptr<HttpTransaction> trans( | 4228 scoped_ptr<HttpTransaction> trans( |
4194 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 4229 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
4195 CreateSession(&session_deps_))); | 4230 CreateSession(&session_deps_))); |
4196 | 4231 |
4197 // Respond with 300 kb of headers (we should fail after 256 kb). | 4232 // Respond with 300 kb of headers (we should fail after 256 kb). |
(...skipping 17 matching lines...) Expand all Loading... |
4215 rv = callback.WaitForResult(); | 4250 rv = callback.WaitForResult(); |
4216 EXPECT_EQ(ERR_RESPONSE_HEADERS_TOO_BIG, rv); | 4251 EXPECT_EQ(ERR_RESPONSE_HEADERS_TOO_BIG, rv); |
4217 | 4252 |
4218 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4253 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4219 EXPECT_TRUE(response == NULL); | 4254 EXPECT_TRUE(response == NULL); |
4220 } | 4255 } |
4221 | 4256 |
4222 // Make sure that we don't try to reuse a TCPClientSocket when failing to | 4257 // Make sure that we don't try to reuse a TCPClientSocket when failing to |
4223 // establish tunnel. | 4258 // establish tunnel. |
4224 // http://code.google.com/p/chromium/issues/detail?id=3772 | 4259 // http://code.google.com/p/chromium/issues/detail?id=3772 |
4225 TEST_F(HttpNetworkTransactionSpdy2Test, | 4260 TEST_P(HttpNetworkTransactionTest, |
4226 DontRecycleTransportSocketForSSLTunnel) { | 4261 DontRecycleTransportSocketForSSLTunnel) { |
4227 HttpRequestInfo request; | 4262 HttpRequestInfo request; |
4228 request.method = "GET"; | 4263 request.method = "GET"; |
4229 request.url = GURL("https://www.google.com/"); | 4264 request.url = GURL("https://www.google.com/"); |
4230 request.load_flags = 0; | 4265 request.load_flags = 0; |
4231 | 4266 |
4232 // Configure against proxy server "myproxy:70". | 4267 // Configure against proxy server "myproxy:70". |
4233 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 4268 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
4234 | 4269 |
4235 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4270 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4275 // We now check to make sure the TCPClientSocket was not added back to | 4310 // We now check to make sure the TCPClientSocket was not added back to |
4276 // the pool. | 4311 // the pool. |
4277 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 4312 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
4278 trans.reset(); | 4313 trans.reset(); |
4279 base::MessageLoop::current()->RunUntilIdle(); | 4314 base::MessageLoop::current()->RunUntilIdle(); |
4280 // Make sure that the socket didn't get recycled after calling the destructor. | 4315 // Make sure that the socket didn't get recycled after calling the destructor. |
4281 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 4316 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
4282 } | 4317 } |
4283 | 4318 |
4284 // Make sure that we recycle a socket after reading all of the response body. | 4319 // Make sure that we recycle a socket after reading all of the response body. |
4285 TEST_F(HttpNetworkTransactionSpdy2Test, RecycleSocket) { | 4320 TEST_P(HttpNetworkTransactionTest, RecycleSocket) { |
4286 HttpRequestInfo request; | 4321 HttpRequestInfo request; |
4287 request.method = "GET"; | 4322 request.method = "GET"; |
4288 request.url = GURL("http://www.google.com/"); | 4323 request.url = GURL("http://www.google.com/"); |
4289 request.load_flags = 0; | 4324 request.load_flags = 0; |
4290 | 4325 |
4291 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4326 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
4292 | 4327 |
4293 scoped_ptr<HttpTransaction> trans( | 4328 scoped_ptr<HttpTransaction> trans( |
4294 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4329 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4295 | 4330 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4331 // Empty the current queue. This is necessary because idle sockets are | 4366 // Empty the current queue. This is necessary because idle sockets are |
4332 // added to the connection pool asynchronously with a PostTask. | 4367 // added to the connection pool asynchronously with a PostTask. |
4333 base::MessageLoop::current()->RunUntilIdle(); | 4368 base::MessageLoop::current()->RunUntilIdle(); |
4334 | 4369 |
4335 // We now check to make sure the socket was added back to the pool. | 4370 // We now check to make sure the socket was added back to the pool. |
4336 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 4371 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
4337 } | 4372 } |
4338 | 4373 |
4339 // Make sure that we recycle a SSL socket after reading all of the response | 4374 // Make sure that we recycle a SSL socket after reading all of the response |
4340 // body. | 4375 // body. |
4341 TEST_F(HttpNetworkTransactionSpdy2Test, RecycleSSLSocket) { | 4376 TEST_P(HttpNetworkTransactionTest, RecycleSSLSocket) { |
4342 HttpRequestInfo request; | 4377 HttpRequestInfo request; |
4343 request.method = "GET"; | 4378 request.method = "GET"; |
4344 request.url = GURL("https://www.google.com/"); | 4379 request.url = GURL("https://www.google.com/"); |
4345 request.load_flags = 0; | 4380 request.load_flags = 0; |
4346 | 4381 |
4347 MockWrite data_writes[] = { | 4382 MockWrite data_writes[] = { |
4348 MockWrite("GET / HTTP/1.1\r\n" | 4383 MockWrite("GET / HTTP/1.1\r\n" |
4349 "Host: www.google.com\r\n" | 4384 "Host: www.google.com\r\n" |
4350 "Connection: keep-alive\r\n\r\n"), | 4385 "Connection: keep-alive\r\n\r\n"), |
4351 }; | 4386 }; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4390 // Empty the current queue. This is necessary because idle sockets are | 4425 // Empty the current queue. This is necessary because idle sockets are |
4391 // added to the connection pool asynchronously with a PostTask. | 4426 // added to the connection pool asynchronously with a PostTask. |
4392 base::MessageLoop::current()->RunUntilIdle(); | 4427 base::MessageLoop::current()->RunUntilIdle(); |
4393 | 4428 |
4394 // We now check to make sure the socket was added back to the pool. | 4429 // We now check to make sure the socket was added back to the pool. |
4395 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 4430 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
4396 } | 4431 } |
4397 | 4432 |
4398 // Grab a SSL socket, use it, and put it back into the pool. Then, reuse it | 4433 // Grab a SSL socket, use it, and put it back into the pool. Then, reuse it |
4399 // from the pool and make sure that we recover okay. | 4434 // from the pool and make sure that we recover okay. |
4400 TEST_F(HttpNetworkTransactionSpdy2Test, RecycleDeadSSLSocket) { | 4435 TEST_P(HttpNetworkTransactionTest, RecycleDeadSSLSocket) { |
4401 HttpRequestInfo request; | 4436 HttpRequestInfo request; |
4402 request.method = "GET"; | 4437 request.method = "GET"; |
4403 request.url = GURL("https://www.google.com/"); | 4438 request.url = GURL("https://www.google.com/"); |
4404 request.load_flags = 0; | 4439 request.load_flags = 0; |
4405 | 4440 |
4406 MockWrite data_writes[] = { | 4441 MockWrite data_writes[] = { |
4407 MockWrite("GET / HTTP/1.1\r\n" | 4442 MockWrite("GET / HTTP/1.1\r\n" |
4408 "Host: www.google.com\r\n" | 4443 "Host: www.google.com\r\n" |
4409 "Connection: keep-alive\r\n\r\n"), | 4444 "Connection: keep-alive\r\n\r\n"), |
4410 MockWrite("GET / HTTP/1.1\r\n" | 4445 MockWrite("GET / HTTP/1.1\r\n" |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4485 // Empty the current queue. This is necessary because idle sockets are | 4520 // Empty the current queue. This is necessary because idle sockets are |
4486 // added to the connection pool asynchronously with a PostTask. | 4521 // added to the connection pool asynchronously with a PostTask. |
4487 base::MessageLoop::current()->RunUntilIdle(); | 4522 base::MessageLoop::current()->RunUntilIdle(); |
4488 | 4523 |
4489 // We now check to make sure the socket was added back to the pool. | 4524 // We now check to make sure the socket was added back to the pool. |
4490 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 4525 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
4491 } | 4526 } |
4492 | 4527 |
4493 // Make sure that we recycle a socket after a zero-length response. | 4528 // Make sure that we recycle a socket after a zero-length response. |
4494 // http://crbug.com/9880 | 4529 // http://crbug.com/9880 |
4495 TEST_F(HttpNetworkTransactionSpdy2Test, RecycleSocketAfterZeroContentLength) { | 4530 TEST_P(HttpNetworkTransactionTest, RecycleSocketAfterZeroContentLength) { |
4496 HttpRequestInfo request; | 4531 HttpRequestInfo request; |
4497 request.method = "GET"; | 4532 request.method = "GET"; |
4498 request.url = GURL("http://www.google.com/csi?v=3&s=web&action=&" | 4533 request.url = GURL("http://www.google.com/csi?v=3&s=web&action=&" |
4499 "tran=undefined&ei=mAXcSeegAo-SMurloeUN&" | 4534 "tran=undefined&ei=mAXcSeegAo-SMurloeUN&" |
4500 "e=17259,18167,19592,19773,19981,20133,20173,20233&" | 4535 "e=17259,18167,19592,19773,19981,20133,20173,20233&" |
4501 "rt=prt.2642,ol.2649,xjs.2951"); | 4536 "rt=prt.2642,ol.2649,xjs.2951"); |
4502 request.load_flags = 0; | 4537 request.load_flags = 0; |
4503 | 4538 |
4504 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4539 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
4505 | 4540 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4540 EXPECT_EQ("", response_data); | 4575 EXPECT_EQ("", response_data); |
4541 | 4576 |
4542 // Empty the current queue. This is necessary because idle sockets are | 4577 // Empty the current queue. This is necessary because idle sockets are |
4543 // added to the connection pool asynchronously with a PostTask. | 4578 // added to the connection pool asynchronously with a PostTask. |
4544 base::MessageLoop::current()->RunUntilIdle(); | 4579 base::MessageLoop::current()->RunUntilIdle(); |
4545 | 4580 |
4546 // We now check to make sure the socket was added back to the pool. | 4581 // We now check to make sure the socket was added back to the pool. |
4547 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 4582 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
4548 } | 4583 } |
4549 | 4584 |
4550 TEST_F(HttpNetworkTransactionSpdy2Test, ResendRequestOnWriteBodyError) { | 4585 TEST_P(HttpNetworkTransactionTest, ResendRequestOnWriteBodyError) { |
4551 ScopedVector<UploadElementReader> element_readers; | 4586 ScopedVector<UploadElementReader> element_readers; |
4552 element_readers.push_back(new UploadBytesElementReader("foo", 3)); | 4587 element_readers.push_back(new UploadBytesElementReader("foo", 3)); |
4553 UploadDataStream upload_data_stream(&element_readers, 0); | 4588 UploadDataStream upload_data_stream(&element_readers, 0); |
4554 | 4589 |
4555 HttpRequestInfo request[2]; | 4590 HttpRequestInfo request[2]; |
4556 // Transaction 1: a GET request that succeeds. The socket is recycled | 4591 // Transaction 1: a GET request that succeeds. The socket is recycled |
4557 // after use. | 4592 // after use. |
4558 request[0].method = "GET"; | 4593 request[0].method = "GET"; |
4559 request[0].url = GURL("http://www.google.com/"); | 4594 request[0].url = GURL("http://www.google.com/"); |
4560 request[0].load_flags = 0; | 4595 request[0].load_flags = 0; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4632 std::string response_data; | 4667 std::string response_data; |
4633 rv = ReadTransaction(trans.get(), &response_data); | 4668 rv = ReadTransaction(trans.get(), &response_data); |
4634 EXPECT_EQ(OK, rv); | 4669 EXPECT_EQ(OK, rv); |
4635 EXPECT_EQ(kExpectedResponseData[i], response_data); | 4670 EXPECT_EQ(kExpectedResponseData[i], response_data); |
4636 } | 4671 } |
4637 } | 4672 } |
4638 | 4673 |
4639 // Test the request-challenge-retry sequence for basic auth when there is | 4674 // Test the request-challenge-retry sequence for basic auth when there is |
4640 // an identity in the URL. The request should be sent as normal, but when | 4675 // an identity in the URL. The request should be sent as normal, but when |
4641 // it fails the identity from the URL is used to answer the challenge. | 4676 // it fails the identity from the URL is used to answer the challenge. |
4642 TEST_F(HttpNetworkTransactionSpdy2Test, AuthIdentityInURL) { | 4677 TEST_P(HttpNetworkTransactionTest, AuthIdentityInURL) { |
4643 HttpRequestInfo request; | 4678 HttpRequestInfo request; |
4644 request.method = "GET"; | 4679 request.method = "GET"; |
4645 request.url = GURL("http://foo:b@r@www.google.com/"); | 4680 request.url = GURL("http://foo:b@r@www.google.com/"); |
4646 request.load_flags = LOAD_NORMAL; | 4681 request.load_flags = LOAD_NORMAL; |
4647 | 4682 |
4648 scoped_ptr<HttpTransaction> trans( | 4683 scoped_ptr<HttpTransaction> trans( |
4649 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 4684 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
4650 CreateSession(&session_deps_))); | 4685 CreateSession(&session_deps_))); |
4651 | 4686 |
4652 // The password contains an escaped character -- for this test to pass it | 4687 // The password contains an escaped character -- for this test to pass it |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4710 | 4745 |
4711 EXPECT_EQ(100, response->headers->GetContentLength()); | 4746 EXPECT_EQ(100, response->headers->GetContentLength()); |
4712 | 4747 |
4713 // Empty the current queue. | 4748 // Empty the current queue. |
4714 base::MessageLoop::current()->RunUntilIdle(); | 4749 base::MessageLoop::current()->RunUntilIdle(); |
4715 } | 4750 } |
4716 | 4751 |
4717 // Test the request-challenge-retry sequence for basic auth when there is an | 4752 // Test the request-challenge-retry sequence for basic auth when there is an |
4718 // incorrect identity in the URL. The identity from the URL should be used only | 4753 // incorrect identity in the URL. The identity from the URL should be used only |
4719 // once. | 4754 // once. |
4720 TEST_F(HttpNetworkTransactionSpdy2Test, WrongAuthIdentityInURL) { | 4755 TEST_P(HttpNetworkTransactionTest, WrongAuthIdentityInURL) { |
4721 HttpRequestInfo request; | 4756 HttpRequestInfo request; |
4722 request.method = "GET"; | 4757 request.method = "GET"; |
4723 // Note: the URL has a username:password in it. The password "baz" is | 4758 // Note: the URL has a username:password in it. The password "baz" is |
4724 // wrong (should be "bar"). | 4759 // wrong (should be "bar"). |
4725 request.url = GURL("http://foo:baz@www.google.com/"); | 4760 request.url = GURL("http://foo:baz@www.google.com/"); |
4726 | 4761 |
4727 request.load_flags = LOAD_NORMAL; | 4762 request.load_flags = LOAD_NORMAL; |
4728 | 4763 |
4729 scoped_ptr<HttpTransaction> trans( | 4764 scoped_ptr<HttpTransaction> trans( |
4730 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 4765 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4818 // There is no challenge info, since the identity worked. | 4853 // There is no challenge info, since the identity worked. |
4819 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 4854 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
4820 | 4855 |
4821 EXPECT_EQ(100, response->headers->GetContentLength()); | 4856 EXPECT_EQ(100, response->headers->GetContentLength()); |
4822 | 4857 |
4823 // Empty the current queue. | 4858 // Empty the current queue. |
4824 base::MessageLoop::current()->RunUntilIdle(); | 4859 base::MessageLoop::current()->RunUntilIdle(); |
4825 } | 4860 } |
4826 | 4861 |
4827 // Test that previously tried username/passwords for a realm get re-used. | 4862 // Test that previously tried username/passwords for a realm get re-used. |
4828 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuthCacheAndPreauth) { | 4863 TEST_P(HttpNetworkTransactionTest, BasicAuthCacheAndPreauth) { |
4829 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4864 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
4830 | 4865 |
4831 // Transaction 1: authenticate (foo, bar) on MyRealm1 | 4866 // Transaction 1: authenticate (foo, bar) on MyRealm1 |
4832 { | 4867 { |
4833 HttpRequestInfo request; | 4868 HttpRequestInfo request; |
4834 request.method = "GET"; | 4869 request.method = "GET"; |
4835 request.url = GURL("http://www.google.com/x/y/z"); | 4870 request.url = GURL("http://www.google.com/x/y/z"); |
4836 request.load_flags = 0; | 4871 request.load_flags = 0; |
4837 | 4872 |
4838 scoped_ptr<HttpTransaction> trans( | 4873 scoped_ptr<HttpTransaction> trans( |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5202 | 5237 |
5203 response = trans->GetResponseInfo(); | 5238 response = trans->GetResponseInfo(); |
5204 ASSERT_TRUE(response != NULL); | 5239 ASSERT_TRUE(response != NULL); |
5205 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 5240 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
5206 EXPECT_EQ(100, response->headers->GetContentLength()); | 5241 EXPECT_EQ(100, response->headers->GetContentLength()); |
5207 } | 5242 } |
5208 } | 5243 } |
5209 | 5244 |
5210 // Tests that nonce count increments when multiple auth attempts | 5245 // Tests that nonce count increments when multiple auth attempts |
5211 // are started with the same nonce. | 5246 // are started with the same nonce. |
5212 TEST_F(HttpNetworkTransactionSpdy2Test, DigestPreAuthNonceCount) { | 5247 TEST_P(HttpNetworkTransactionTest, DigestPreAuthNonceCount) { |
5213 HttpAuthHandlerDigest::Factory* digest_factory = | 5248 HttpAuthHandlerDigest::Factory* digest_factory = |
5214 new HttpAuthHandlerDigest::Factory(); | 5249 new HttpAuthHandlerDigest::Factory(); |
5215 HttpAuthHandlerDigest::FixedNonceGenerator* nonce_generator = | 5250 HttpAuthHandlerDigest::FixedNonceGenerator* nonce_generator = |
5216 new HttpAuthHandlerDigest::FixedNonceGenerator("0123456789abcdef"); | 5251 new HttpAuthHandlerDigest::FixedNonceGenerator("0123456789abcdef"); |
5217 digest_factory->set_nonce_generator(nonce_generator); | 5252 digest_factory->set_nonce_generator(nonce_generator); |
5218 session_deps_.http_auth_handler_factory.reset(digest_factory); | 5253 session_deps_.http_auth_handler_factory.reset(digest_factory); |
5219 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 5254 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
5220 | 5255 |
5221 // Transaction 1: authenticate (foo, bar) on MyRealm1 | 5256 // Transaction 1: authenticate (foo, bar) on MyRealm1 |
5222 { | 5257 { |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5336 rv = callback1.WaitForResult(); | 5371 rv = callback1.WaitForResult(); |
5337 EXPECT_EQ(OK, rv); | 5372 EXPECT_EQ(OK, rv); |
5338 | 5373 |
5339 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5374 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5340 ASSERT_TRUE(response != NULL); | 5375 ASSERT_TRUE(response != NULL); |
5341 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 5376 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
5342 } | 5377 } |
5343 } | 5378 } |
5344 | 5379 |
5345 // Test the ResetStateForRestart() private method. | 5380 // Test the ResetStateForRestart() private method. |
5346 TEST_F(HttpNetworkTransactionSpdy2Test, ResetStateForRestart) { | 5381 TEST_P(HttpNetworkTransactionTest, ResetStateForRestart) { |
5347 // Create a transaction (the dependencies aren't important). | 5382 // Create a transaction (the dependencies aren't important). |
5348 scoped_ptr<HttpNetworkTransaction> trans( | 5383 scoped_ptr<HttpNetworkTransaction> trans( |
5349 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 5384 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
5350 CreateSession(&session_deps_))); | 5385 CreateSession(&session_deps_))); |
5351 | 5386 |
5352 // Setup some state (which we expect ResetStateForRestart() will clear). | 5387 // Setup some state (which we expect ResetStateForRestart() will clear). |
5353 trans->read_buf_ = new IOBuffer(15); | 5388 trans->read_buf_ = new IOBuffer(15); |
5354 trans->read_buf_len_ = 15; | 5389 trans->read_buf_len_ = 15; |
5355 trans->request_headers_.SetHeader("Authorization", "NTLM"); | 5390 trans->request_headers_.SetHeader("Authorization", "NTLM"); |
5356 | 5391 |
(...skipping 22 matching lines...) Expand all Loading... |
5379 EXPECT_EQ(0, trans->read_buf_len_); | 5414 EXPECT_EQ(0, trans->read_buf_len_); |
5380 EXPECT_TRUE(trans->request_headers_.IsEmpty()); | 5415 EXPECT_TRUE(trans->request_headers_.IsEmpty()); |
5381 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 5416 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
5382 EXPECT_TRUE(response->headers.get() == NULL); | 5417 EXPECT_TRUE(response->headers.get() == NULL); |
5383 EXPECT_FALSE(response->was_cached); | 5418 EXPECT_FALSE(response->was_cached); |
5384 EXPECT_EQ(0U, response->ssl_info.cert_status); | 5419 EXPECT_EQ(0U, response->ssl_info.cert_status); |
5385 EXPECT_FALSE(response->vary_data.is_valid()); | 5420 EXPECT_FALSE(response->vary_data.is_valid()); |
5386 } | 5421 } |
5387 | 5422 |
5388 // Test HTTPS connections to a site with a bad certificate | 5423 // Test HTTPS connections to a site with a bad certificate |
5389 TEST_F(HttpNetworkTransactionSpdy2Test, HTTPSBadCertificate) { | 5424 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificate) { |
5390 HttpRequestInfo request; | 5425 HttpRequestInfo request; |
5391 request.method = "GET"; | 5426 request.method = "GET"; |
5392 request.url = GURL("https://www.google.com/"); | 5427 request.url = GURL("https://www.google.com/"); |
5393 request.load_flags = 0; | 5428 request.load_flags = 0; |
5394 | 5429 |
5395 scoped_ptr<HttpTransaction> trans( | 5430 scoped_ptr<HttpTransaction> trans( |
5396 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 5431 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
5397 CreateSession(&session_deps_))); | 5432 CreateSession(&session_deps_))); |
5398 | 5433 |
5399 MockWrite data_writes[] = { | 5434 MockWrite data_writes[] = { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5435 EXPECT_EQ(OK, rv); | 5470 EXPECT_EQ(OK, rv); |
5436 | 5471 |
5437 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5472 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5438 | 5473 |
5439 ASSERT_TRUE(response != NULL); | 5474 ASSERT_TRUE(response != NULL); |
5440 EXPECT_EQ(100, response->headers->GetContentLength()); | 5475 EXPECT_EQ(100, response->headers->GetContentLength()); |
5441 } | 5476 } |
5442 | 5477 |
5443 // Test HTTPS connections to a site with a bad certificate, going through a | 5478 // Test HTTPS connections to a site with a bad certificate, going through a |
5444 // proxy | 5479 // proxy |
5445 TEST_F(HttpNetworkTransactionSpdy2Test, HTTPSBadCertificateViaProxy) { | 5480 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaProxy) { |
5446 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 5481 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
5447 | 5482 |
5448 HttpRequestInfo request; | 5483 HttpRequestInfo request; |
5449 request.method = "GET"; | 5484 request.method = "GET"; |
5450 request.url = GURL("https://www.google.com/"); | 5485 request.url = GURL("https://www.google.com/"); |
5451 request.load_flags = 0; | 5486 request.load_flags = 0; |
5452 | 5487 |
5453 MockWrite proxy_writes[] = { | 5488 MockWrite proxy_writes[] = { |
5454 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 5489 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
5455 "Host: www.google.com\r\n" | 5490 "Host: www.google.com\r\n" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5514 | 5549 |
5515 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5550 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5516 | 5551 |
5517 ASSERT_TRUE(response != NULL); | 5552 ASSERT_TRUE(response != NULL); |
5518 EXPECT_EQ(100, response->headers->GetContentLength()); | 5553 EXPECT_EQ(100, response->headers->GetContentLength()); |
5519 } | 5554 } |
5520 } | 5555 } |
5521 | 5556 |
5522 | 5557 |
5523 // Test HTTPS connections to a site, going through an HTTPS proxy | 5558 // Test HTTPS connections to a site, going through an HTTPS proxy |
5524 TEST_F(HttpNetworkTransactionSpdy2Test, HTTPSViaHttpsProxy) { | 5559 TEST_P(HttpNetworkTransactionTest, HTTPSViaHttpsProxy) { |
5525 session_deps_.proxy_service.reset( | 5560 session_deps_.proxy_service.reset( |
5526 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); | 5561 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); |
5527 CapturingNetLog net_log; | 5562 CapturingNetLog net_log; |
5528 session_deps_.net_log = &net_log; | 5563 session_deps_.net_log = &net_log; |
5529 | 5564 |
5530 HttpRequestInfo request; | 5565 HttpRequestInfo request; |
5531 request.method = "GET"; | 5566 request.method = "GET"; |
5532 request.url = GURL("https://www.google.com/"); | 5567 request.url = GURL("https://www.google.com/"); |
5533 request.load_flags = 0; | 5568 request.load_flags = 0; |
5534 | 5569 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5578 EXPECT_EQ(100, response->headers->GetContentLength()); | 5613 EXPECT_EQ(100, response->headers->GetContentLength()); |
5579 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 5614 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
5580 | 5615 |
5581 LoadTimingInfo load_timing_info; | 5616 LoadTimingInfo load_timing_info; |
5582 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5617 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
5583 TestLoadTimingNotReusedWithPac(load_timing_info, | 5618 TestLoadTimingNotReusedWithPac(load_timing_info, |
5584 CONNECT_TIMING_HAS_SSL_TIMES); | 5619 CONNECT_TIMING_HAS_SSL_TIMES); |
5585 } | 5620 } |
5586 | 5621 |
5587 // Test an HTTPS Proxy's ability to redirect a CONNECT request | 5622 // Test an HTTPS Proxy's ability to redirect a CONNECT request |
5588 TEST_F(HttpNetworkTransactionSpdy2Test, RedirectOfHttpsConnectViaHttpsProxy) { | 5623 TEST_P(HttpNetworkTransactionTest, RedirectOfHttpsConnectViaHttpsProxy) { |
5589 session_deps_.proxy_service.reset( | 5624 session_deps_.proxy_service.reset( |
5590 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); | 5625 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); |
5591 CapturingNetLog net_log; | 5626 CapturingNetLog net_log; |
5592 session_deps_.net_log = &net_log; | 5627 session_deps_.net_log = &net_log; |
5593 | 5628 |
5594 HttpRequestInfo request; | 5629 HttpRequestInfo request; |
5595 request.method = "GET"; | 5630 request.method = "GET"; |
5596 request.url = GURL("https://www.google.com/"); | 5631 request.url = GURL("https://www.google.com/"); |
5597 request.load_flags = 0; | 5632 request.load_flags = 0; |
5598 | 5633 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5654 ExpectConnectTimingHasTimes( | 5689 ExpectConnectTimingHasTimes( |
5655 load_timing_info.connect_timing, | 5690 load_timing_info.connect_timing, |
5656 CONNECT_TIMING_HAS_DNS_TIMES | CONNECT_TIMING_HAS_SSL_TIMES); | 5691 CONNECT_TIMING_HAS_DNS_TIMES | CONNECT_TIMING_HAS_SSL_TIMES); |
5657 | 5692 |
5658 EXPECT_TRUE(load_timing_info.send_start.is_null()); | 5693 EXPECT_TRUE(load_timing_info.send_start.is_null()); |
5659 EXPECT_TRUE(load_timing_info.send_end.is_null()); | 5694 EXPECT_TRUE(load_timing_info.send_end.is_null()); |
5660 EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); | 5695 EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); |
5661 } | 5696 } |
5662 | 5697 |
5663 // Test an HTTPS (SPDY) Proxy's ability to redirect a CONNECT request | 5698 // Test an HTTPS (SPDY) Proxy's ability to redirect a CONNECT request |
5664 TEST_F(HttpNetworkTransactionSpdy2Test, RedirectOfHttpsConnectViaSpdyProxy) { | 5699 TEST_P(HttpNetworkTransactionTest, RedirectOfHttpsConnectViaSpdyProxy) { |
| 5700 if (GetParam() > kProtoSPDY3) |
| 5701 return; |
| 5702 |
5665 session_deps_.proxy_service.reset( | 5703 session_deps_.proxy_service.reset( |
5666 ProxyService::CreateFixed("https://proxy:70")); | 5704 ProxyService::CreateFixed("https://proxy:70")); |
5667 | 5705 |
5668 HttpRequestInfo request; | 5706 HttpRequestInfo request; |
5669 request.method = "GET"; | 5707 request.method = "GET"; |
5670 request.url = GURL("https://www.google.com/"); | 5708 request.url = GURL("https://www.google.com/"); |
5671 request.load_flags = 0; | 5709 request.load_flags = 0; |
5672 | 5710 |
5673 scoped_ptr<SpdyFrame> conn(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); | 5711 scoped_ptr<SpdyFrame> conn(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); |
5674 scoped_ptr<SpdyFrame> goaway( | 5712 scoped_ptr<SpdyFrame> goaway( |
5675 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 5713 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
5676 MockWrite data_writes[] = { | 5714 MockWrite data_writes[] = { |
5677 CreateMockWrite(*conn.get(), 0, SYNCHRONOUS), | 5715 CreateMockWrite(*conn.get(), 0, SYNCHRONOUS), |
5678 }; | 5716 }; |
5679 | 5717 |
5680 static const char* const kExtraHeaders[] = { | 5718 static const char* const kExtraHeaders[] = { |
5681 "location", | 5719 "location", |
5682 "http://login.example.com/", | 5720 "http://login.example.com/", |
5683 }; | 5721 }; |
5684 scoped_ptr<SpdyFrame> resp( | 5722 scoped_ptr<SpdyFrame> resp( |
5685 ConstructSpdySynReplyError("302 Redirect", kExtraHeaders, | 5723 spdy_util_.ConstructSpdySynReplyError("302 Redirect", kExtraHeaders, |
5686 arraysize(kExtraHeaders)/2, 1)); | 5724 arraysize(kExtraHeaders)/2, 1)); |
5687 MockRead data_reads[] = { | 5725 MockRead data_reads[] = { |
5688 CreateMockRead(*resp.get(), 1, SYNCHRONOUS), | 5726 CreateMockRead(*resp.get(), 1, SYNCHRONOUS), |
5689 MockRead(ASYNC, 0, 2), // EOF | 5727 MockRead(ASYNC, 0, 2), // EOF |
5690 }; | 5728 }; |
5691 | 5729 |
5692 DelayedSocketData data( | 5730 DelayedSocketData data( |
5693 1, // wait for one write to finish before reading. | 5731 1, // wait for one write to finish before reading. |
5694 data_reads, arraysize(data_reads), | 5732 data_reads, arraysize(data_reads), |
5695 data_writes, arraysize(data_writes)); | 5733 data_writes, arraysize(data_writes)); |
5696 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 5734 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
5697 proxy_ssl.SetNextProto(kProtoSPDY2); | 5735 proxy_ssl.SetNextProto(GetParam()); |
5698 | 5736 |
5699 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5737 session_deps_.socket_factory->AddSocketDataProvider(&data); |
5700 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 5738 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
5701 | 5739 |
5702 TestCompletionCallback callback; | 5740 TestCompletionCallback callback; |
5703 | 5741 |
5704 scoped_ptr<HttpTransaction> trans( | 5742 scoped_ptr<HttpTransaction> trans( |
5705 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 5743 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
5706 CreateSession(&session_deps_))); | 5744 CreateSession(&session_deps_))); |
5707 | 5745 |
5708 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5746 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5709 EXPECT_EQ(ERR_IO_PENDING, rv); | 5747 EXPECT_EQ(ERR_IO_PENDING, rv); |
5710 | 5748 |
5711 rv = callback.WaitForResult(); | 5749 rv = callback.WaitForResult(); |
5712 EXPECT_EQ(OK, rv); | 5750 EXPECT_EQ(OK, rv); |
5713 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5751 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5714 | 5752 |
5715 ASSERT_TRUE(response != NULL); | 5753 ASSERT_TRUE(response != NULL); |
5716 | 5754 |
5717 EXPECT_EQ(302, response->headers->response_code()); | 5755 EXPECT_EQ(302, response->headers->response_code()); |
5718 std::string url; | 5756 std::string url; |
5719 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 5757 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
5720 EXPECT_EQ("http://login.example.com/", url); | 5758 EXPECT_EQ("http://login.example.com/", url); |
5721 } | 5759 } |
5722 | 5760 |
5723 // Test that an HTTPS proxy's response to a CONNECT request is filtered. | 5761 // Test that an HTTPS proxy's response to a CONNECT request is filtered. |
5724 TEST_F(HttpNetworkTransactionSpdy2Test, | 5762 TEST_P(HttpNetworkTransactionTest, |
5725 ErrorResponseToHttpsConnectViaHttpsProxy) { | 5763 ErrorResponseToHttpsConnectViaHttpsProxy) { |
5726 session_deps_.proxy_service.reset( | 5764 session_deps_.proxy_service.reset( |
5727 ProxyService::CreateFixed("https://proxy:70")); | 5765 ProxyService::CreateFixed("https://proxy:70")); |
5728 | 5766 |
5729 HttpRequestInfo request; | 5767 HttpRequestInfo request; |
5730 request.method = "GET"; | 5768 request.method = "GET"; |
5731 request.url = GURL("https://www.google.com/"); | 5769 request.url = GURL("https://www.google.com/"); |
5732 request.load_flags = 0; | 5770 request.load_flags = 0; |
5733 | 5771 |
5734 MockWrite data_writes[] = { | 5772 MockWrite data_writes[] = { |
(...skipping 25 matching lines...) Expand all Loading... |
5760 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5798 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5761 EXPECT_EQ(ERR_IO_PENDING, rv); | 5799 EXPECT_EQ(ERR_IO_PENDING, rv); |
5762 | 5800 |
5763 rv = callback.WaitForResult(); | 5801 rv = callback.WaitForResult(); |
5764 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 5802 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
5765 | 5803 |
5766 // TODO(ttuttle): Anything else to check here? | 5804 // TODO(ttuttle): Anything else to check here? |
5767 } | 5805 } |
5768 | 5806 |
5769 // Test that a SPDY proxy's response to a CONNECT request is filtered. | 5807 // Test that a SPDY proxy's response to a CONNECT request is filtered. |
5770 TEST_F(HttpNetworkTransactionSpdy2Test, | 5808 TEST_P(HttpNetworkTransactionTest, |
5771 ErrorResponseToHttpsConnectViaSpdyProxy) { | 5809 ErrorResponseToHttpsConnectViaSpdyProxy) { |
| 5810 if (GetParam() > kProtoSPDY3) |
| 5811 return; |
| 5812 |
5772 session_deps_.proxy_service.reset( | 5813 session_deps_.proxy_service.reset( |
5773 ProxyService::CreateFixed("https://proxy:70")); | 5814 ProxyService::CreateFixed("https://proxy:70")); |
5774 | 5815 |
5775 HttpRequestInfo request; | 5816 HttpRequestInfo request; |
5776 request.method = "GET"; | 5817 request.method = "GET"; |
5777 request.url = GURL("https://www.google.com/"); | 5818 request.url = GURL("https://www.google.com/"); |
5778 request.load_flags = 0; | 5819 request.load_flags = 0; |
5779 | 5820 |
5780 scoped_ptr<SpdyFrame> conn(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); | 5821 scoped_ptr<SpdyFrame> conn(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); |
5781 scoped_ptr<SpdyFrame> rst( | 5822 scoped_ptr<SpdyFrame> rst( |
5782 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 5823 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
5783 MockWrite data_writes[] = { | 5824 MockWrite data_writes[] = { |
5784 CreateMockWrite(*conn.get(), 0, SYNCHRONOUS), | 5825 CreateMockWrite(*conn.get(), 0, SYNCHRONOUS), |
5785 CreateMockWrite(*rst.get(), 3, SYNCHRONOUS), | 5826 CreateMockWrite(*rst.get(), 3, SYNCHRONOUS), |
5786 }; | 5827 }; |
5787 | 5828 |
5788 static const char* const kExtraHeaders[] = { | 5829 static const char* const kExtraHeaders[] = { |
5789 "location", | 5830 "location", |
5790 "http://login.example.com/", | 5831 "http://login.example.com/", |
5791 }; | 5832 }; |
5792 scoped_ptr<SpdyFrame> resp( | 5833 scoped_ptr<SpdyFrame> resp( |
5793 ConstructSpdySynReplyError("404 Not Found", kExtraHeaders, | 5834 spdy_util_.ConstructSpdySynReplyError("404 Not Found", kExtraHeaders, |
5794 arraysize(kExtraHeaders)/2, 1)); | 5835 arraysize(kExtraHeaders)/2, 1)); |
5795 scoped_ptr<SpdyFrame> body( | 5836 scoped_ptr<SpdyFrame> body( |
5796 ConstructSpdyBodyFrame(1, "The host does not exist", 23, true)); | 5837 spdy_util_.ConstructSpdyBodyFrame( |
| 5838 1, "The host does not exist", 23, true)); |
5797 MockRead data_reads[] = { | 5839 MockRead data_reads[] = { |
5798 CreateMockRead(*resp.get(), 1, SYNCHRONOUS), | 5840 CreateMockRead(*resp.get(), 1, SYNCHRONOUS), |
5799 CreateMockRead(*body.get(), 2, SYNCHRONOUS), | 5841 CreateMockRead(*body.get(), 2, SYNCHRONOUS), |
5800 MockRead(ASYNC, 0, 4), // EOF | 5842 MockRead(ASYNC, 0, 4), // EOF |
5801 }; | 5843 }; |
5802 | 5844 |
5803 DelayedSocketData data( | 5845 DelayedSocketData data( |
5804 1, // wait for one write to finish before reading. | 5846 1, // wait for one write to finish before reading. |
5805 data_reads, arraysize(data_reads), | 5847 data_reads, arraysize(data_reads), |
5806 data_writes, arraysize(data_writes)); | 5848 data_writes, arraysize(data_writes)); |
5807 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 5849 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
5808 proxy_ssl.SetNextProto(kProtoSPDY2); | 5850 proxy_ssl.SetNextProto(GetParam()); |
5809 | 5851 |
5810 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5852 session_deps_.socket_factory->AddSocketDataProvider(&data); |
5811 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 5853 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
5812 | 5854 |
5813 TestCompletionCallback callback; | 5855 TestCompletionCallback callback; |
5814 | 5856 |
5815 scoped_ptr<HttpTransaction> trans( | 5857 scoped_ptr<HttpTransaction> trans( |
5816 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 5858 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
5817 CreateSession(&session_deps_))); | 5859 CreateSession(&session_deps_))); |
5818 | 5860 |
5819 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5861 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5820 EXPECT_EQ(ERR_IO_PENDING, rv); | 5862 EXPECT_EQ(ERR_IO_PENDING, rv); |
5821 | 5863 |
5822 rv = callback.WaitForResult(); | 5864 rv = callback.WaitForResult(); |
5823 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 5865 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
5824 | 5866 |
5825 // TODO(ttuttle): Anything else to check here? | 5867 // TODO(ttuttle): Anything else to check here? |
5826 } | 5868 } |
5827 | 5869 |
5828 // Test the request-challenge-retry sequence for basic auth, through | 5870 // Test the request-challenge-retry sequence for basic auth, through |
5829 // a SPDY proxy over a single SPDY session. | 5871 // a SPDY proxy over a single SPDY session. |
5830 TEST_F(HttpNetworkTransactionSpdy2Test, BasicAuthSpdyProxy) { | 5872 TEST_P(HttpNetworkTransactionTest, BasicAuthSpdyProxy) { |
| 5873 if (GetParam() > kProtoSPDY3) |
| 5874 return; |
| 5875 |
5831 HttpRequestInfo request; | 5876 HttpRequestInfo request; |
5832 request.method = "GET"; | 5877 request.method = "GET"; |
5833 request.url = GURL("https://www.google.com/"); | 5878 request.url = GURL("https://www.google.com/"); |
5834 // when the no authentication data flag is set. | 5879 // when the no authentication data flag is set. |
5835 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 5880 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
5836 | 5881 |
5837 // Configure against https proxy server "myproxy:70". | 5882 // Configure against https proxy server "myproxy:70". |
5838 session_deps_.proxy_service.reset( | 5883 session_deps_.proxy_service.reset( |
5839 ProxyService::CreateFixedFromPacResult("HTTPS myproxy:70")); | 5884 ProxyService::CreateFixedFromPacResult("HTTPS myproxy:70")); |
5840 CapturingBoundNetLog log; | 5885 CapturingBoundNetLog log; |
(...skipping 10 matching lines...) Expand all Loading... |
5851 const char* const kAuthCredentials[] = { | 5896 const char* const kAuthCredentials[] = { |
5852 "proxy-authorization", "Basic Zm9vOmJhcg==", | 5897 "proxy-authorization", "Basic Zm9vOmJhcg==", |
5853 }; | 5898 }; |
5854 scoped_ptr<SpdyFrame> connect2(spdy_util_.ConstructSpdyConnect( | 5899 scoped_ptr<SpdyFrame> connect2(spdy_util_.ConstructSpdyConnect( |
5855 kAuthCredentials, arraysize(kAuthCredentials) / 2, 3)); | 5900 kAuthCredentials, arraysize(kAuthCredentials) / 2, 3)); |
5856 // fetch https://www.google.com/ via HTTP | 5901 // fetch https://www.google.com/ via HTTP |
5857 const char get[] = "GET / HTTP/1.1\r\n" | 5902 const char get[] = "GET / HTTP/1.1\r\n" |
5858 "Host: www.google.com\r\n" | 5903 "Host: www.google.com\r\n" |
5859 "Connection: keep-alive\r\n\r\n"; | 5904 "Connection: keep-alive\r\n\r\n"; |
5860 scoped_ptr<SpdyFrame> wrapped_get( | 5905 scoped_ptr<SpdyFrame> wrapped_get( |
5861 ConstructSpdyBodyFrame(3, get, strlen(get), false)); | 5906 spdy_util_.ConstructSpdyBodyFrame(3, get, strlen(get), false)); |
5862 | 5907 |
5863 MockWrite spdy_writes[] = { | 5908 MockWrite spdy_writes[] = { |
5864 CreateMockWrite(*req, 1, ASYNC), | 5909 CreateMockWrite(*req, 1, ASYNC), |
5865 CreateMockWrite(*rst, 4, ASYNC), | 5910 CreateMockWrite(*rst, 4, ASYNC), |
5866 CreateMockWrite(*connect2, 5), | 5911 CreateMockWrite(*connect2, 5), |
5867 CreateMockWrite(*wrapped_get, 8), | 5912 CreateMockWrite(*wrapped_get, 8), |
5868 }; | 5913 }; |
5869 | 5914 |
5870 // The proxy responds to the connect with a 407, using a persistent | 5915 // The proxy responds to the connect with a 407, using a persistent |
5871 // connection. | 5916 // connection. |
5872 const char* const kAuthChallenge[] = { | 5917 const char* const kAuthChallenge[] = { |
5873 "status", "407 Proxy Authentication Required", | 5918 spdy_util_.GetStatusKey(), "407 Proxy Authentication Required", |
5874 "version", "HTTP/1.1", | 5919 spdy_util_.GetVersionKey(), "HTTP/1.1", |
5875 "proxy-authenticate", "Basic realm=\"MyRealm1\"", | 5920 "proxy-authenticate", "Basic realm=\"MyRealm1\"", |
5876 }; | 5921 }; |
5877 | 5922 |
5878 scoped_ptr<SpdyFrame> conn_auth_resp( | 5923 scoped_ptr<SpdyFrame> conn_auth_resp( |
5879 spdy_util_.ConstructSpdyControlFrame(NULL, | 5924 spdy_util_.ConstructSpdyControlFrame(NULL, |
5880 0, | 5925 0, |
5881 false, | 5926 false, |
5882 1, | 5927 1, |
5883 LOWEST, | 5928 LOWEST, |
5884 SYN_REPLY, | 5929 SYN_REPLY, |
5885 CONTROL_FLAG_NONE, | 5930 CONTROL_FLAG_NONE, |
5886 kAuthChallenge, | 5931 kAuthChallenge, |
5887 arraysize(kAuthChallenge), | 5932 arraysize(kAuthChallenge), |
5888 0)); | 5933 0)); |
5889 | 5934 |
5890 scoped_ptr<SpdyFrame> conn_resp(ConstructSpdyGetSynReply(NULL, 0, 3)); | 5935 scoped_ptr<SpdyFrame> conn_resp( |
| 5936 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
5891 const char resp[] = "HTTP/1.1 200 OK\r\n" | 5937 const char resp[] = "HTTP/1.1 200 OK\r\n" |
5892 "Content-Length: 5\r\n\r\n"; | 5938 "Content-Length: 5\r\n\r\n"; |
5893 | 5939 |
5894 scoped_ptr<SpdyFrame> wrapped_get_resp( | 5940 scoped_ptr<SpdyFrame> wrapped_get_resp( |
5895 ConstructSpdyBodyFrame(3, resp, strlen(resp), false)); | 5941 spdy_util_.ConstructSpdyBodyFrame(3, resp, strlen(resp), false)); |
5896 scoped_ptr<SpdyFrame> wrapped_body( | 5942 scoped_ptr<SpdyFrame> wrapped_body( |
5897 ConstructSpdyBodyFrame(3, "hello", 5, false)); | 5943 spdy_util_.ConstructSpdyBodyFrame(3, "hello", 5, false)); |
5898 MockRead spdy_reads[] = { | 5944 MockRead spdy_reads[] = { |
5899 CreateMockRead(*conn_auth_resp, 2, ASYNC), | 5945 CreateMockRead(*conn_auth_resp, 2, ASYNC), |
5900 CreateMockRead(*conn_resp, 6, ASYNC), | 5946 CreateMockRead(*conn_resp, 6, ASYNC), |
5901 CreateMockRead(*wrapped_get_resp, 9, ASYNC), | 5947 CreateMockRead(*wrapped_get_resp, 9, ASYNC), |
5902 CreateMockRead(*wrapped_body, 10, ASYNC), | 5948 CreateMockRead(*wrapped_body, 10, ASYNC), |
5903 MockRead(ASYNC, OK, 11), // EOF. May or may not be read. | 5949 MockRead(ASYNC, OK, 11), // EOF. May or may not be read. |
5904 }; | 5950 }; |
5905 | 5951 |
5906 OrderedSocketData spdy_data( | 5952 OrderedSocketData spdy_data( |
5907 spdy_reads, arraysize(spdy_reads), | 5953 spdy_reads, arraysize(spdy_reads), |
5908 spdy_writes, arraysize(spdy_writes)); | 5954 spdy_writes, arraysize(spdy_writes)); |
5909 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 5955 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
5910 // Negotiate SPDY to the proxy | 5956 // Negotiate SPDY to the proxy |
5911 SSLSocketDataProvider proxy(ASYNC, OK); | 5957 SSLSocketDataProvider proxy(ASYNC, OK); |
5912 proxy.SetNextProto(kProtoSPDY2); | 5958 proxy.SetNextProto(GetParam()); |
5913 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 5959 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
5914 // Vanilla SSL to the server | 5960 // Vanilla SSL to the server |
5915 SSLSocketDataProvider server(ASYNC, OK); | 5961 SSLSocketDataProvider server(ASYNC, OK); |
5916 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); | 5962 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); |
5917 | 5963 |
5918 TestCompletionCallback callback1; | 5964 TestCompletionCallback callback1; |
5919 | 5965 |
5920 scoped_ptr<HttpTransaction> trans( | 5966 scoped_ptr<HttpTransaction> trans( |
5921 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5967 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
5922 | 5968 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5967 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 6013 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
5968 TestLoadTimingNotReusedWithPac(load_timing_info, | 6014 TestLoadTimingNotReusedWithPac(load_timing_info, |
5969 CONNECT_TIMING_HAS_SSL_TIMES); | 6015 CONNECT_TIMING_HAS_SSL_TIMES); |
5970 | 6016 |
5971 trans.reset(); | 6017 trans.reset(); |
5972 session->CloseAllConnections(); | 6018 session->CloseAllConnections(); |
5973 } | 6019 } |
5974 | 6020 |
5975 // Test that an explicitly trusted SPDY proxy can push a resource from an | 6021 // Test that an explicitly trusted SPDY proxy can push a resource from an |
5976 // origin that is different from that of its associated resource. | 6022 // origin that is different from that of its associated resource. |
5977 TEST_F(HttpNetworkTransactionSpdy2Test, CrossOriginProxyPush) { | 6023 TEST_P(HttpNetworkTransactionTest, CrossOriginProxyPush) { |
| 6024 if (GetParam() > kProtoSPDY3) |
| 6025 return; |
| 6026 |
5978 HttpRequestInfo request; | 6027 HttpRequestInfo request; |
5979 HttpRequestInfo push_request; | 6028 HttpRequestInfo push_request; |
5980 | 6029 |
5981 static const unsigned char kPushBodyFrame[] = { | 6030 static const unsigned char kPushBodyFrame[] = { |
5982 0x00, 0x00, 0x00, 0x02, // header, ID | 6031 0x00, 0x00, 0x00, 0x02, // header, ID |
5983 0x01, 0x00, 0x00, 0x06, // FIN, length | 6032 0x01, 0x00, 0x00, 0x06, // FIN, length |
5984 'p', 'u', 's', 'h', 'e', 'd' // "pushed" | 6033 'p', 'u', 's', 'h', 'e', 'd' // "pushed" |
5985 }; | 6034 }; |
5986 | 6035 |
5987 request.method = "GET"; | 6036 request.method = "GET"; |
(...skipping 13 matching lines...) Expand all Loading... |
6001 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6050 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6002 | 6051 |
6003 scoped_ptr<SpdyFrame> stream1_syn( | 6052 scoped_ptr<SpdyFrame> stream1_syn( |
6004 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); | 6053 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); |
6005 | 6054 |
6006 MockWrite spdy_writes[] = { | 6055 MockWrite spdy_writes[] = { |
6007 CreateMockWrite(*stream1_syn, 1, ASYNC), | 6056 CreateMockWrite(*stream1_syn, 1, ASYNC), |
6008 }; | 6057 }; |
6009 | 6058 |
6010 scoped_ptr<SpdyFrame> | 6059 scoped_ptr<SpdyFrame> |
6011 stream1_reply(ConstructSpdyGetSynReply(NULL, 0, 1)); | 6060 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
6012 | 6061 |
6013 scoped_ptr<SpdyFrame> | 6062 scoped_ptr<SpdyFrame> |
6014 stream1_body(ConstructSpdyBodyFrame(1, true)); | 6063 stream1_body(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
6015 | 6064 |
6016 scoped_ptr<SpdyFrame> | 6065 scoped_ptr<SpdyFrame> |
6017 stream2_syn(ConstructSpdyPush(NULL, | 6066 stream2_syn(spdy_util_.ConstructSpdyPush(NULL, |
6018 0, | 6067 0, |
6019 2, | 6068 2, |
6020 1, | 6069 1, |
6021 "http://www.another-origin.com/foo.dat")); | 6070 "http://www.another-origin.com/foo.dat")); |
6022 | 6071 |
6023 MockRead spdy_reads[] = { | 6072 MockRead spdy_reads[] = { |
6024 CreateMockRead(*stream1_reply, 2, ASYNC), | 6073 CreateMockRead(*stream1_reply, 2, ASYNC), |
6025 CreateMockRead(*stream2_syn, 3, ASYNC), | 6074 CreateMockRead(*stream2_syn, 3, ASYNC), |
6026 CreateMockRead(*stream1_body, 4, ASYNC), | 6075 CreateMockRead(*stream1_body, 4, ASYNC), |
6027 MockRead(ASYNC, reinterpret_cast<const char*>(kPushBodyFrame), | 6076 MockRead(ASYNC, reinterpret_cast<const char*>(kPushBodyFrame), |
6028 arraysize(kPushBodyFrame), 5), | 6077 arraysize(kPushBodyFrame), 5), |
6029 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause | 6078 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause |
6030 }; | 6079 }; |
6031 | 6080 |
6032 OrderedSocketData spdy_data( | 6081 OrderedSocketData spdy_data( |
6033 spdy_reads, arraysize(spdy_reads), | 6082 spdy_reads, arraysize(spdy_reads), |
6034 spdy_writes, arraysize(spdy_writes)); | 6083 spdy_writes, arraysize(spdy_writes)); |
6035 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 6084 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
6036 // Negotiate SPDY to the proxy | 6085 // Negotiate SPDY to the proxy |
6037 SSLSocketDataProvider proxy(ASYNC, OK); | 6086 SSLSocketDataProvider proxy(ASYNC, OK); |
6038 proxy.SetNextProto(kProtoSPDY2); | 6087 proxy.SetNextProto(GetParam()); |
6039 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 6088 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
6040 | 6089 |
6041 scoped_ptr<HttpTransaction> trans( | 6090 scoped_ptr<HttpTransaction> trans( |
6042 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6091 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
6043 TestCompletionCallback callback; | 6092 TestCompletionCallback callback; |
6044 int rv = trans->Start(&request, callback.callback(), log.bound()); | 6093 int rv = trans->Start(&request, callback.callback(), log.bound()); |
6045 EXPECT_EQ(ERR_IO_PENDING, rv); | 6094 EXPECT_EQ(ERR_IO_PENDING, rv); |
6046 | 6095 |
6047 rv = callback.WaitForResult(); | 6096 rv = callback.WaitForResult(); |
6048 EXPECT_EQ(OK, rv); | 6097 EXPECT_EQ(OK, rv); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6088 // origins. | 6137 // origins. |
6089 EXPECT_EQ(load_timing_info.socket_log_id, | 6138 EXPECT_EQ(load_timing_info.socket_log_id, |
6090 push_load_timing_info.socket_log_id); | 6139 push_load_timing_info.socket_log_id); |
6091 | 6140 |
6092 trans.reset(); | 6141 trans.reset(); |
6093 push_trans.reset(); | 6142 push_trans.reset(); |
6094 session->CloseAllConnections(); | 6143 session->CloseAllConnections(); |
6095 } | 6144 } |
6096 | 6145 |
6097 // Test that an explicitly trusted SPDY proxy cannot push HTTPS content. | 6146 // Test that an explicitly trusted SPDY proxy cannot push HTTPS content. |
6098 TEST_F(HttpNetworkTransactionSpdy2Test, CrossOriginProxyPushCorrectness) { | 6147 TEST_P(HttpNetworkTransactionTest, CrossOriginProxyPushCorrectness) { |
| 6148 if (GetParam() > kProtoSPDY3) |
| 6149 return; |
| 6150 |
6099 HttpRequestInfo request; | 6151 HttpRequestInfo request; |
6100 | 6152 |
6101 request.method = "GET"; | 6153 request.method = "GET"; |
6102 request.url = GURL("http://www.google.com/"); | 6154 request.url = GURL("http://www.google.com/"); |
6103 | 6155 |
6104 // Configure against https proxy server "myproxy:70". | 6156 // Configure against https proxy server "myproxy:70". |
6105 session_deps_.proxy_service.reset( | 6157 session_deps_.proxy_service.reset( |
6106 ProxyService::CreateFixed("https://myproxy:70")); | 6158 ProxyService::CreateFixed("https://myproxy:70")); |
6107 CapturingBoundNetLog log; | 6159 CapturingBoundNetLog log; |
6108 session_deps_.net_log = log.bound().net_log(); | 6160 session_deps_.net_log = log.bound().net_log(); |
6109 | 6161 |
6110 // Enable cross-origin push. | 6162 // Enable cross-origin push. |
6111 session_deps_.trusted_spdy_proxy = "myproxy:70"; | 6163 session_deps_.trusted_spdy_proxy = "myproxy:70"; |
6112 | 6164 |
6113 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6165 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6114 | 6166 |
6115 scoped_ptr<SpdyFrame> stream1_syn( | 6167 scoped_ptr<SpdyFrame> stream1_syn( |
6116 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); | 6168 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); |
6117 | 6169 |
6118 scoped_ptr<SpdyFrame> push_rst( | 6170 scoped_ptr<SpdyFrame> push_rst( |
6119 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 6171 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
6120 | 6172 |
6121 MockWrite spdy_writes[] = { | 6173 MockWrite spdy_writes[] = { |
6122 CreateMockWrite(*stream1_syn, 1, ASYNC), | 6174 CreateMockWrite(*stream1_syn, 1, ASYNC), |
6123 CreateMockWrite(*push_rst, 4), | 6175 CreateMockWrite(*push_rst, 4), |
6124 }; | 6176 }; |
6125 | 6177 |
6126 scoped_ptr<SpdyFrame> | 6178 scoped_ptr<SpdyFrame> |
6127 stream1_reply(ConstructSpdyGetSynReply(NULL, 0, 1)); | 6179 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
6128 | 6180 |
6129 scoped_ptr<SpdyFrame> | 6181 scoped_ptr<SpdyFrame> |
6130 stream1_body(ConstructSpdyBodyFrame(1, true)); | 6182 stream1_body(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
6131 | 6183 |
6132 scoped_ptr<SpdyFrame> | 6184 scoped_ptr<SpdyFrame> |
6133 stream2_syn(ConstructSpdyPush(NULL, | 6185 stream2_syn(spdy_util_.ConstructSpdyPush(NULL, |
6134 0, | 6186 0, |
6135 2, | 6187 2, |
6136 1, | 6188 1, |
6137 "https://www.another-origin.com/foo.dat")); | 6189 "https://www.another-origin.com/foo.dat")); |
6138 | 6190 |
6139 MockRead spdy_reads[] = { | 6191 MockRead spdy_reads[] = { |
6140 CreateMockRead(*stream1_reply, 2, ASYNC), | 6192 CreateMockRead(*stream1_reply, 2, ASYNC), |
6141 CreateMockRead(*stream2_syn, 3, ASYNC), | 6193 CreateMockRead(*stream2_syn, 3, ASYNC), |
6142 CreateMockRead(*stream1_body, 5, ASYNC), | 6194 CreateMockRead(*stream1_body, 5, ASYNC), |
6143 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause | 6195 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause |
6144 }; | 6196 }; |
6145 | 6197 |
6146 OrderedSocketData spdy_data( | 6198 OrderedSocketData spdy_data( |
6147 spdy_reads, arraysize(spdy_reads), | 6199 spdy_reads, arraysize(spdy_reads), |
6148 spdy_writes, arraysize(spdy_writes)); | 6200 spdy_writes, arraysize(spdy_writes)); |
6149 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 6201 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
6150 // Negotiate SPDY to the proxy | 6202 // Negotiate SPDY to the proxy |
6151 SSLSocketDataProvider proxy(ASYNC, OK); | 6203 SSLSocketDataProvider proxy(ASYNC, OK); |
6152 proxy.SetNextProto(kProtoSPDY2); | 6204 proxy.SetNextProto(GetParam()); |
6153 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 6205 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
6154 | 6206 |
6155 scoped_ptr<HttpTransaction> trans( | 6207 scoped_ptr<HttpTransaction> trans( |
6156 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6208 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
6157 TestCompletionCallback callback; | 6209 TestCompletionCallback callback; |
6158 int rv = trans->Start(&request, callback.callback(), log.bound()); | 6210 int rv = trans->Start(&request, callback.callback(), log.bound()); |
6159 EXPECT_EQ(ERR_IO_PENDING, rv); | 6211 EXPECT_EQ(ERR_IO_PENDING, rv); |
6160 | 6212 |
6161 rv = callback.WaitForResult(); | 6213 rv = callback.WaitForResult(); |
6162 EXPECT_EQ(OK, rv); | 6214 EXPECT_EQ(OK, rv); |
6163 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6215 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6164 | 6216 |
6165 ASSERT_TRUE(response != NULL); | 6217 ASSERT_TRUE(response != NULL); |
6166 EXPECT_TRUE(response->headers->IsKeepAlive()); | 6218 EXPECT_TRUE(response->headers->IsKeepAlive()); |
6167 | 6219 |
6168 EXPECT_EQ(200, response->headers->response_code()); | 6220 EXPECT_EQ(200, response->headers->response_code()); |
6169 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 6221 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
6170 | 6222 |
6171 std::string response_data; | 6223 std::string response_data; |
6172 rv = ReadTransaction(trans.get(), &response_data); | 6224 rv = ReadTransaction(trans.get(), &response_data); |
6173 EXPECT_EQ(OK, rv); | 6225 EXPECT_EQ(OK, rv); |
6174 EXPECT_EQ("hello!", response_data); | 6226 EXPECT_EQ("hello!", response_data); |
6175 | 6227 |
6176 trans.reset(); | 6228 trans.reset(); |
6177 session->CloseAllConnections(); | 6229 session->CloseAllConnections(); |
6178 } | 6230 } |
6179 | 6231 |
6180 // Test HTTPS connections to a site with a bad certificate, going through an | 6232 // Test HTTPS connections to a site with a bad certificate, going through an |
6181 // HTTPS proxy | 6233 // HTTPS proxy |
6182 TEST_F(HttpNetworkTransactionSpdy2Test, HTTPSBadCertificateViaHttpsProxy) { | 6234 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaHttpsProxy) { |
6183 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 6235 session_deps_.proxy_service.reset(ProxyService::CreateFixed( |
6184 "https://proxy:70")); | 6236 "https://proxy:70")); |
6185 | 6237 |
6186 HttpRequestInfo request; | 6238 HttpRequestInfo request; |
6187 request.method = "GET"; | 6239 request.method = "GET"; |
6188 request.url = GURL("https://www.google.com/"); | 6240 request.url = GURL("https://www.google.com/"); |
6189 request.load_flags = 0; | 6241 request.load_flags = 0; |
6190 | 6242 |
6191 // Attempt to fetch the URL from a server with a bad cert | 6243 // Attempt to fetch the URL from a server with a bad cert |
6192 MockWrite bad_cert_writes[] = { | 6244 MockWrite bad_cert_writes[] = { |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6253 | 6305 |
6254 rv = callback.WaitForResult(); | 6306 rv = callback.WaitForResult(); |
6255 EXPECT_EQ(OK, rv); | 6307 EXPECT_EQ(OK, rv); |
6256 | 6308 |
6257 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6309 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6258 | 6310 |
6259 ASSERT_TRUE(response != NULL); | 6311 ASSERT_TRUE(response != NULL); |
6260 EXPECT_EQ(100, response->headers->GetContentLength()); | 6312 EXPECT_EQ(100, response->headers->GetContentLength()); |
6261 } | 6313 } |
6262 | 6314 |
6263 TEST_F(HttpNetworkTransactionSpdy2Test, BuildRequest_UserAgent) { | 6315 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgent) { |
6264 HttpRequestInfo request; | 6316 HttpRequestInfo request; |
6265 request.method = "GET"; | 6317 request.method = "GET"; |
6266 request.url = GURL("http://www.google.com/"); | 6318 request.url = GURL("http://www.google.com/"); |
6267 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, | 6319 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, |
6268 "Chromium Ultra Awesome X Edition"); | 6320 "Chromium Ultra Awesome X Edition"); |
6269 | 6321 |
6270 scoped_ptr<HttpTransaction> trans( | 6322 scoped_ptr<HttpTransaction> trans( |
6271 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 6323 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
6272 CreateSession(&session_deps_))); | 6324 CreateSession(&session_deps_))); |
6273 | 6325 |
(...skipping 18 matching lines...) Expand all Loading... |
6292 | 6344 |
6293 TestCompletionCallback callback; | 6345 TestCompletionCallback callback; |
6294 | 6346 |
6295 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6347 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6296 EXPECT_EQ(ERR_IO_PENDING, rv); | 6348 EXPECT_EQ(ERR_IO_PENDING, rv); |
6297 | 6349 |
6298 rv = callback.WaitForResult(); | 6350 rv = callback.WaitForResult(); |
6299 EXPECT_EQ(OK, rv); | 6351 EXPECT_EQ(OK, rv); |
6300 } | 6352 } |
6301 | 6353 |
6302 TEST_F(HttpNetworkTransactionSpdy2Test, BuildRequest_UserAgentOverTunnel) { | 6354 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgentOverTunnel) { |
6303 HttpRequestInfo request; | 6355 HttpRequestInfo request; |
6304 request.method = "GET"; | 6356 request.method = "GET"; |
6305 request.url = GURL("https://www.google.com/"); | 6357 request.url = GURL("https://www.google.com/"); |
6306 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, | 6358 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, |
6307 "Chromium Ultra Awesome X Edition"); | 6359 "Chromium Ultra Awesome X Edition"); |
6308 | 6360 |
6309 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 6361 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
6310 scoped_ptr<HttpTransaction> trans( | 6362 scoped_ptr<HttpTransaction> trans( |
6311 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 6363 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
6312 CreateSession(&session_deps_))); | 6364 CreateSession(&session_deps_))); |
(...skipping 18 matching lines...) Expand all Loading... |
6331 | 6383 |
6332 TestCompletionCallback callback; | 6384 TestCompletionCallback callback; |
6333 | 6385 |
6334 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6386 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6335 EXPECT_EQ(ERR_IO_PENDING, rv); | 6387 EXPECT_EQ(ERR_IO_PENDING, rv); |
6336 | 6388 |
6337 rv = callback.WaitForResult(); | 6389 rv = callback.WaitForResult(); |
6338 EXPECT_EQ(OK, rv); | 6390 EXPECT_EQ(OK, rv); |
6339 } | 6391 } |
6340 | 6392 |
6341 TEST_F(HttpNetworkTransactionSpdy2Test, BuildRequest_Referer) { | 6393 TEST_P(HttpNetworkTransactionTest, BuildRequest_Referer) { |
6342 HttpRequestInfo request; | 6394 HttpRequestInfo request; |
6343 request.method = "GET"; | 6395 request.method = "GET"; |
6344 request.url = GURL("http://www.google.com/"); | 6396 request.url = GURL("http://www.google.com/"); |
6345 request.load_flags = 0; | 6397 request.load_flags = 0; |
6346 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, | 6398 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, |
6347 "http://the.previous.site.com/"); | 6399 "http://the.previous.site.com/"); |
6348 | 6400 |
6349 scoped_ptr<HttpTransaction> trans( | 6401 scoped_ptr<HttpTransaction> trans( |
6350 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 6402 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
6351 CreateSession(&session_deps_))); | 6403 CreateSession(&session_deps_))); |
(...skipping 19 matching lines...) Expand all Loading... |
6371 | 6423 |
6372 TestCompletionCallback callback; | 6424 TestCompletionCallback callback; |
6373 | 6425 |
6374 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6426 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6375 EXPECT_EQ(ERR_IO_PENDING, rv); | 6427 EXPECT_EQ(ERR_IO_PENDING, rv); |
6376 | 6428 |
6377 rv = callback.WaitForResult(); | 6429 rv = callback.WaitForResult(); |
6378 EXPECT_EQ(OK, rv); | 6430 EXPECT_EQ(OK, rv); |
6379 } | 6431 } |
6380 | 6432 |
6381 TEST_F(HttpNetworkTransactionSpdy2Test, BuildRequest_PostContentLengthZero) { | 6433 TEST_P(HttpNetworkTransactionTest, BuildRequest_PostContentLengthZero) { |
6382 HttpRequestInfo request; | 6434 HttpRequestInfo request; |
6383 request.method = "POST"; | 6435 request.method = "POST"; |
6384 request.url = GURL("http://www.google.com/"); | 6436 request.url = GURL("http://www.google.com/"); |
6385 | 6437 |
6386 scoped_ptr<HttpTransaction> trans( | 6438 scoped_ptr<HttpTransaction> trans( |
6387 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 6439 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
6388 CreateSession(&session_deps_))); | 6440 CreateSession(&session_deps_))); |
6389 | 6441 |
6390 MockWrite data_writes[] = { | 6442 MockWrite data_writes[] = { |
6391 MockWrite("POST / HTTP/1.1\r\n" | 6443 MockWrite("POST / HTTP/1.1\r\n" |
(...skipping 16 matching lines...) Expand all Loading... |
6408 | 6460 |
6409 TestCompletionCallback callback; | 6461 TestCompletionCallback callback; |
6410 | 6462 |
6411 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6463 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6412 EXPECT_EQ(ERR_IO_PENDING, rv); | 6464 EXPECT_EQ(ERR_IO_PENDING, rv); |
6413 | 6465 |
6414 rv = callback.WaitForResult(); | 6466 rv = callback.WaitForResult(); |
6415 EXPECT_EQ(OK, rv); | 6467 EXPECT_EQ(OK, rv); |
6416 } | 6468 } |
6417 | 6469 |
6418 TEST_F(HttpNetworkTransactionSpdy2Test, BuildRequest_PutContentLengthZero) { | 6470 TEST_P(HttpNetworkTransactionTest, BuildRequest_PutContentLengthZero) { |
6419 HttpRequestInfo request; | 6471 HttpRequestInfo request; |
6420 request.method = "PUT"; | 6472 request.method = "PUT"; |
6421 request.url = GURL("http://www.google.com/"); | 6473 request.url = GURL("http://www.google.com/"); |
6422 | 6474 |
6423 scoped_ptr<HttpTransaction> trans( | 6475 scoped_ptr<HttpTransaction> trans( |
6424 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 6476 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
6425 CreateSession(&session_deps_))); | 6477 CreateSession(&session_deps_))); |
6426 | 6478 |
6427 MockWrite data_writes[] = { | 6479 MockWrite data_writes[] = { |
6428 MockWrite("PUT / HTTP/1.1\r\n" | 6480 MockWrite("PUT / HTTP/1.1\r\n" |
(...skipping 16 matching lines...) Expand all Loading... |
6445 | 6497 |
6446 TestCompletionCallback callback; | 6498 TestCompletionCallback callback; |
6447 | 6499 |
6448 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6500 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6449 EXPECT_EQ(ERR_IO_PENDING, rv); | 6501 EXPECT_EQ(ERR_IO_PENDING, rv); |
6450 | 6502 |
6451 rv = callback.WaitForResult(); | 6503 rv = callback.WaitForResult(); |
6452 EXPECT_EQ(OK, rv); | 6504 EXPECT_EQ(OK, rv); |
6453 } | 6505 } |
6454 | 6506 |
6455 TEST_F(HttpNetworkTransactionSpdy2Test, BuildRequest_HeadContentLengthZero) { | 6507 TEST_P(HttpNetworkTransactionTest, BuildRequest_HeadContentLengthZero) { |
6456 HttpRequestInfo request; | 6508 HttpRequestInfo request; |
6457 request.method = "HEAD"; | 6509 request.method = "HEAD"; |
6458 request.url = GURL("http://www.google.com/"); | 6510 request.url = GURL("http://www.google.com/"); |
6459 | 6511 |
6460 scoped_ptr<HttpTransaction> trans( | 6512 scoped_ptr<HttpTransaction> trans( |
6461 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 6513 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
6462 CreateSession(&session_deps_))); | 6514 CreateSession(&session_deps_))); |
6463 | 6515 |
6464 MockWrite data_writes[] = { | 6516 MockWrite data_writes[] = { |
6465 MockWrite("HEAD / HTTP/1.1\r\n" | 6517 MockWrite("HEAD / HTTP/1.1\r\n" |
(...skipping 16 matching lines...) Expand all Loading... |
6482 | 6534 |
6483 TestCompletionCallback callback; | 6535 TestCompletionCallback callback; |
6484 | 6536 |
6485 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6537 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6486 EXPECT_EQ(ERR_IO_PENDING, rv); | 6538 EXPECT_EQ(ERR_IO_PENDING, rv); |
6487 | 6539 |
6488 rv = callback.WaitForResult(); | 6540 rv = callback.WaitForResult(); |
6489 EXPECT_EQ(OK, rv); | 6541 EXPECT_EQ(OK, rv); |
6490 } | 6542 } |
6491 | 6543 |
6492 TEST_F(HttpNetworkTransactionSpdy2Test, BuildRequest_CacheControlNoCache) { | 6544 TEST_P(HttpNetworkTransactionTest, BuildRequest_CacheControlNoCache) { |
6493 HttpRequestInfo request; | 6545 HttpRequestInfo request; |
6494 request.method = "GET"; | 6546 request.method = "GET"; |
6495 request.url = GURL("http://www.google.com/"); | 6547 request.url = GURL("http://www.google.com/"); |
6496 request.load_flags = LOAD_BYPASS_CACHE; | 6548 request.load_flags = LOAD_BYPASS_CACHE; |
6497 | 6549 |
6498 scoped_ptr<HttpTransaction> trans( | 6550 scoped_ptr<HttpTransaction> trans( |
6499 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 6551 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
6500 CreateSession(&session_deps_))); | 6552 CreateSession(&session_deps_))); |
6501 | 6553 |
6502 MockWrite data_writes[] = { | 6554 MockWrite data_writes[] = { |
(...skipping 18 matching lines...) Expand all Loading... |
6521 | 6573 |
6522 TestCompletionCallback callback; | 6574 TestCompletionCallback callback; |
6523 | 6575 |
6524 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6576 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6525 EXPECT_EQ(ERR_IO_PENDING, rv); | 6577 EXPECT_EQ(ERR_IO_PENDING, rv); |
6526 | 6578 |
6527 rv = callback.WaitForResult(); | 6579 rv = callback.WaitForResult(); |
6528 EXPECT_EQ(OK, rv); | 6580 EXPECT_EQ(OK, rv); |
6529 } | 6581 } |
6530 | 6582 |
6531 TEST_F(HttpNetworkTransactionSpdy2Test, | 6583 TEST_P(HttpNetworkTransactionTest, |
6532 BuildRequest_CacheControlValidateCache) { | 6584 BuildRequest_CacheControlValidateCache) { |
6533 HttpRequestInfo request; | 6585 HttpRequestInfo request; |
6534 request.method = "GET"; | 6586 request.method = "GET"; |
6535 request.url = GURL("http://www.google.com/"); | 6587 request.url = GURL("http://www.google.com/"); |
6536 request.load_flags = LOAD_VALIDATE_CACHE; | 6588 request.load_flags = LOAD_VALIDATE_CACHE; |
6537 | 6589 |
6538 scoped_ptr<HttpTransaction> trans( | 6590 scoped_ptr<HttpTransaction> trans( |
6539 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 6591 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
6540 CreateSession(&session_deps_))); | 6592 CreateSession(&session_deps_))); |
6541 | 6593 |
(...skipping 18 matching lines...) Expand all Loading... |
6560 | 6612 |
6561 TestCompletionCallback callback; | 6613 TestCompletionCallback callback; |
6562 | 6614 |
6563 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6615 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6564 EXPECT_EQ(ERR_IO_PENDING, rv); | 6616 EXPECT_EQ(ERR_IO_PENDING, rv); |
6565 | 6617 |
6566 rv = callback.WaitForResult(); | 6618 rv = callback.WaitForResult(); |
6567 EXPECT_EQ(OK, rv); | 6619 EXPECT_EQ(OK, rv); |
6568 } | 6620 } |
6569 | 6621 |
6570 TEST_F(HttpNetworkTransactionSpdy2Test, BuildRequest_ExtraHeaders) { | 6622 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeaders) { |
6571 HttpRequestInfo request; | 6623 HttpRequestInfo request; |
6572 request.method = "GET"; | 6624 request.method = "GET"; |
6573 request.url = GURL("http://www.google.com/"); | 6625 request.url = GURL("http://www.google.com/"); |
6574 request.extra_headers.SetHeader("FooHeader", "Bar"); | 6626 request.extra_headers.SetHeader("FooHeader", "Bar"); |
6575 | 6627 |
6576 scoped_ptr<HttpTransaction> trans( | 6628 scoped_ptr<HttpTransaction> trans( |
6577 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 6629 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
6578 CreateSession(&session_deps_))); | 6630 CreateSession(&session_deps_))); |
6579 | 6631 |
6580 MockWrite data_writes[] = { | 6632 MockWrite data_writes[] = { |
(...skipping 17 matching lines...) Expand all Loading... |
6598 | 6650 |
6599 TestCompletionCallback callback; | 6651 TestCompletionCallback callback; |
6600 | 6652 |
6601 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6653 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6602 EXPECT_EQ(ERR_IO_PENDING, rv); | 6654 EXPECT_EQ(ERR_IO_PENDING, rv); |
6603 | 6655 |
6604 rv = callback.WaitForResult(); | 6656 rv = callback.WaitForResult(); |
6605 EXPECT_EQ(OK, rv); | 6657 EXPECT_EQ(OK, rv); |
6606 } | 6658 } |
6607 | 6659 |
6608 TEST_F(HttpNetworkTransactionSpdy2Test, BuildRequest_ExtraHeadersStripped) { | 6660 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeadersStripped) { |
6609 HttpRequestInfo request; | 6661 HttpRequestInfo request; |
6610 request.method = "GET"; | 6662 request.method = "GET"; |
6611 request.url = GURL("http://www.google.com/"); | 6663 request.url = GURL("http://www.google.com/"); |
6612 request.extra_headers.SetHeader("referer", "www.foo.com"); | 6664 request.extra_headers.SetHeader("referer", "www.foo.com"); |
6613 request.extra_headers.SetHeader("hEllo", "Kitty"); | 6665 request.extra_headers.SetHeader("hEllo", "Kitty"); |
6614 request.extra_headers.SetHeader("FoO", "bar"); | 6666 request.extra_headers.SetHeader("FoO", "bar"); |
6615 | 6667 |
6616 scoped_ptr<HttpTransaction> trans( | 6668 scoped_ptr<HttpTransaction> trans( |
6617 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 6669 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
6618 CreateSession(&session_deps_))); | 6670 CreateSession(&session_deps_))); |
(...skipping 21 matching lines...) Expand all Loading... |
6640 | 6692 |
6641 TestCompletionCallback callback; | 6693 TestCompletionCallback callback; |
6642 | 6694 |
6643 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6695 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6644 EXPECT_EQ(ERR_IO_PENDING, rv); | 6696 EXPECT_EQ(ERR_IO_PENDING, rv); |
6645 | 6697 |
6646 rv = callback.WaitForResult(); | 6698 rv = callback.WaitForResult(); |
6647 EXPECT_EQ(OK, rv); | 6699 EXPECT_EQ(OK, rv); |
6648 } | 6700 } |
6649 | 6701 |
6650 TEST_F(HttpNetworkTransactionSpdy2Test, SOCKS4_HTTP_GET) { | 6702 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { |
6651 HttpRequestInfo request; | 6703 HttpRequestInfo request; |
6652 request.method = "GET"; | 6704 request.method = "GET"; |
6653 request.url = GURL("http://www.google.com/"); | 6705 request.url = GURL("http://www.google.com/"); |
6654 request.load_flags = 0; | 6706 request.load_flags = 0; |
6655 | 6707 |
6656 session_deps_.proxy_service.reset( | 6708 session_deps_.proxy_service.reset( |
6657 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080")); | 6709 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080")); |
6658 CapturingNetLog net_log; | 6710 CapturingNetLog net_log; |
6659 session_deps_.net_log = &net_log; | 6711 session_deps_.net_log = &net_log; |
6660 | 6712 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6699 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 6751 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
6700 TestLoadTimingNotReusedWithPac(load_timing_info, | 6752 TestLoadTimingNotReusedWithPac(load_timing_info, |
6701 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 6753 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
6702 | 6754 |
6703 std::string response_text; | 6755 std::string response_text; |
6704 rv = ReadTransaction(trans.get(), &response_text); | 6756 rv = ReadTransaction(trans.get(), &response_text); |
6705 EXPECT_EQ(OK, rv); | 6757 EXPECT_EQ(OK, rv); |
6706 EXPECT_EQ("Payload", response_text); | 6758 EXPECT_EQ("Payload", response_text); |
6707 } | 6759 } |
6708 | 6760 |
6709 TEST_F(HttpNetworkTransactionSpdy2Test, SOCKS4_SSL_GET) { | 6761 TEST_P(HttpNetworkTransactionTest, SOCKS4_SSL_GET) { |
6710 HttpRequestInfo request; | 6762 HttpRequestInfo request; |
6711 request.method = "GET"; | 6763 request.method = "GET"; |
6712 request.url = GURL("https://www.google.com/"); | 6764 request.url = GURL("https://www.google.com/"); |
6713 request.load_flags = 0; | 6765 request.load_flags = 0; |
6714 | 6766 |
6715 session_deps_.proxy_service.reset( | 6767 session_deps_.proxy_service.reset( |
6716 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080")); | 6768 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080")); |
6717 CapturingNetLog net_log; | 6769 CapturingNetLog net_log; |
6718 session_deps_.net_log = &net_log; | 6770 session_deps_.net_log = &net_log; |
6719 | 6771 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6763 | 6815 |
6764 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6816 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6765 ASSERT_TRUE(response != NULL); | 6817 ASSERT_TRUE(response != NULL); |
6766 | 6818 |
6767 std::string response_text; | 6819 std::string response_text; |
6768 rv = ReadTransaction(trans.get(), &response_text); | 6820 rv = ReadTransaction(trans.get(), &response_text); |
6769 EXPECT_EQ(OK, rv); | 6821 EXPECT_EQ(OK, rv); |
6770 EXPECT_EQ("Payload", response_text); | 6822 EXPECT_EQ("Payload", response_text); |
6771 } | 6823 } |
6772 | 6824 |
6773 TEST_F(HttpNetworkTransactionSpdy2Test, SOCKS4_HTTP_GET_no_PAC) { | 6825 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET_no_PAC) { |
6774 HttpRequestInfo request; | 6826 HttpRequestInfo request; |
6775 request.method = "GET"; | 6827 request.method = "GET"; |
6776 request.url = GURL("http://www.google.com/"); | 6828 request.url = GURL("http://www.google.com/"); |
6777 request.load_flags = 0; | 6829 request.load_flags = 0; |
6778 | 6830 |
6779 session_deps_.proxy_service.reset( | 6831 session_deps_.proxy_service.reset( |
6780 ProxyService::CreateFixed("socks4://myproxy:1080")); | 6832 ProxyService::CreateFixed("socks4://myproxy:1080")); |
6781 CapturingNetLog net_log; | 6833 CapturingNetLog net_log; |
6782 session_deps_.net_log = &net_log; | 6834 session_deps_.net_log = &net_log; |
6783 | 6835 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6822 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 6874 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
6823 TestLoadTimingNotReused(load_timing_info, | 6875 TestLoadTimingNotReused(load_timing_info, |
6824 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 6876 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
6825 | 6877 |
6826 std::string response_text; | 6878 std::string response_text; |
6827 rv = ReadTransaction(trans.get(), &response_text); | 6879 rv = ReadTransaction(trans.get(), &response_text); |
6828 EXPECT_EQ(OK, rv); | 6880 EXPECT_EQ(OK, rv); |
6829 EXPECT_EQ("Payload", response_text); | 6881 EXPECT_EQ("Payload", response_text); |
6830 } | 6882 } |
6831 | 6883 |
6832 TEST_F(HttpNetworkTransactionSpdy2Test, SOCKS5_HTTP_GET) { | 6884 TEST_P(HttpNetworkTransactionTest, SOCKS5_HTTP_GET) { |
6833 HttpRequestInfo request; | 6885 HttpRequestInfo request; |
6834 request.method = "GET"; | 6886 request.method = "GET"; |
6835 request.url = GURL("http://www.google.com/"); | 6887 request.url = GURL("http://www.google.com/"); |
6836 request.load_flags = 0; | 6888 request.load_flags = 0; |
6837 | 6889 |
6838 session_deps_.proxy_service.reset( | 6890 session_deps_.proxy_service.reset( |
6839 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080")); | 6891 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080")); |
6840 CapturingNetLog net_log; | 6892 CapturingNetLog net_log; |
6841 session_deps_.net_log = &net_log; | 6893 session_deps_.net_log = &net_log; |
6842 | 6894 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6895 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 6947 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
6896 TestLoadTimingNotReusedWithPac(load_timing_info, | 6948 TestLoadTimingNotReusedWithPac(load_timing_info, |
6897 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 6949 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
6898 | 6950 |
6899 std::string response_text; | 6951 std::string response_text; |
6900 rv = ReadTransaction(trans.get(), &response_text); | 6952 rv = ReadTransaction(trans.get(), &response_text); |
6901 EXPECT_EQ(OK, rv); | 6953 EXPECT_EQ(OK, rv); |
6902 EXPECT_EQ("Payload", response_text); | 6954 EXPECT_EQ("Payload", response_text); |
6903 } | 6955 } |
6904 | 6956 |
6905 TEST_F(HttpNetworkTransactionSpdy2Test, SOCKS5_SSL_GET) { | 6957 TEST_P(HttpNetworkTransactionTest, SOCKS5_SSL_GET) { |
6906 HttpRequestInfo request; | 6958 HttpRequestInfo request; |
6907 request.method = "GET"; | 6959 request.method = "GET"; |
6908 request.url = GURL("https://www.google.com/"); | 6960 request.url = GURL("https://www.google.com/"); |
6909 request.load_flags = 0; | 6961 request.load_flags = 0; |
6910 | 6962 |
6911 session_deps_.proxy_service.reset( | 6963 session_deps_.proxy_service.reset( |
6912 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080")); | 6964 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080")); |
6913 CapturingNetLog net_log; | 6965 CapturingNetLog net_log; |
6914 session_deps_.net_log = &net_log; | 6966 session_deps_.net_log = &net_log; |
6915 | 6967 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7016 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7068 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
7017 | 7069 |
7018 TestCompletionCallback callback; | 7070 TestCompletionCallback callback; |
7019 | 7071 |
7020 // We do not complete this request, the dtor will clean the transaction up. | 7072 // We do not complete this request, the dtor will clean the transaction up. |
7021 return trans->Start(&request, callback.callback(), BoundNetLog()); | 7073 return trans->Start(&request, callback.callback(), BoundNetLog()); |
7022 } | 7074 } |
7023 | 7075 |
7024 } // namespace | 7076 } // namespace |
7025 | 7077 |
7026 TEST_F(HttpNetworkTransactionSpdy2Test, GroupNameForDirectConnections) { | 7078 TEST_P(HttpNetworkTransactionTest, GroupNameForDirectConnections) { |
7027 const GroupNameTest tests[] = { | 7079 const GroupNameTest tests[] = { |
7028 { | 7080 { |
7029 "", // unused | 7081 "", // unused |
7030 "http://www.google.com/direct", | 7082 "http://www.google.com/direct", |
7031 "www.google.com:80", | 7083 "www.google.com:80", |
7032 false, | 7084 false, |
7033 }, | 7085 }, |
7034 { | 7086 { |
7035 "", // unused | 7087 "", // unused |
7036 "http://[2001:1418:13:1::25]/direct", | 7088 "http://[2001:1418:13:1::25]/direct", |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7083 if (tests[i].ssl) | 7135 if (tests[i].ssl) |
7084 EXPECT_EQ(tests[i].expected_group_name, | 7136 EXPECT_EQ(tests[i].expected_group_name, |
7085 ssl_conn_pool->last_group_name_received()); | 7137 ssl_conn_pool->last_group_name_received()); |
7086 else | 7138 else |
7087 EXPECT_EQ(tests[i].expected_group_name, | 7139 EXPECT_EQ(tests[i].expected_group_name, |
7088 transport_conn_pool->last_group_name_received()); | 7140 transport_conn_pool->last_group_name_received()); |
7089 } | 7141 } |
7090 | 7142 |
7091 } | 7143 } |
7092 | 7144 |
7093 TEST_F(HttpNetworkTransactionSpdy2Test, GroupNameForHTTPProxyConnections) { | 7145 TEST_P(HttpNetworkTransactionTest, GroupNameForHTTPProxyConnections) { |
7094 const GroupNameTest tests[] = { | 7146 const GroupNameTest tests[] = { |
7095 { | 7147 { |
7096 "http_proxy", | 7148 "http_proxy", |
7097 "http://www.google.com/http_proxy_normal", | 7149 "http://www.google.com/http_proxy_normal", |
7098 "www.google.com:80", | 7150 "www.google.com:80", |
7099 false, | 7151 false, |
7100 }, | 7152 }, |
7101 | 7153 |
7102 // SSL Tests | 7154 // SSL Tests |
7103 { | 7155 { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7148 GroupNameTransactionHelper(tests[i].url, session)); | 7200 GroupNameTransactionHelper(tests[i].url, session)); |
7149 if (tests[i].ssl) | 7201 if (tests[i].ssl) |
7150 EXPECT_EQ(tests[i].expected_group_name, | 7202 EXPECT_EQ(tests[i].expected_group_name, |
7151 ssl_conn_pool->last_group_name_received()); | 7203 ssl_conn_pool->last_group_name_received()); |
7152 else | 7204 else |
7153 EXPECT_EQ(tests[i].expected_group_name, | 7205 EXPECT_EQ(tests[i].expected_group_name, |
7154 http_proxy_pool->last_group_name_received()); | 7206 http_proxy_pool->last_group_name_received()); |
7155 } | 7207 } |
7156 } | 7208 } |
7157 | 7209 |
7158 TEST_F(HttpNetworkTransactionSpdy2Test, GroupNameForSOCKSConnections) { | 7210 TEST_P(HttpNetworkTransactionTest, GroupNameForSOCKSConnections) { |
7159 const GroupNameTest tests[] = { | 7211 const GroupNameTest tests[] = { |
7160 { | 7212 { |
7161 "socks4://socks_proxy:1080", | 7213 "socks4://socks_proxy:1080", |
7162 "http://www.google.com/socks4_direct", | 7214 "http://www.google.com/socks4_direct", |
7163 "socks4/www.google.com:80", | 7215 "socks4/www.google.com:80", |
7164 false, | 7216 false, |
7165 }, | 7217 }, |
7166 { | 7218 { |
7167 "socks5://socks_proxy:1080", | 7219 "socks5://socks_proxy:1080", |
7168 "http://www.google.com/socks5_direct", | 7220 "http://www.google.com/socks5_direct", |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7221 GroupNameTransactionHelper(tests[i].url, session)); | 7273 GroupNameTransactionHelper(tests[i].url, session)); |
7222 if (tests[i].ssl) | 7274 if (tests[i].ssl) |
7223 EXPECT_EQ(tests[i].expected_group_name, | 7275 EXPECT_EQ(tests[i].expected_group_name, |
7224 ssl_conn_pool->last_group_name_received()); | 7276 ssl_conn_pool->last_group_name_received()); |
7225 else | 7277 else |
7226 EXPECT_EQ(tests[i].expected_group_name, | 7278 EXPECT_EQ(tests[i].expected_group_name, |
7227 socks_conn_pool->last_group_name_received()); | 7279 socks_conn_pool->last_group_name_received()); |
7228 } | 7280 } |
7229 } | 7281 } |
7230 | 7282 |
7231 TEST_F(HttpNetworkTransactionSpdy2Test, ReconsiderProxyAfterFailedConnection) { | 7283 TEST_P(HttpNetworkTransactionTest, ReconsiderProxyAfterFailedConnection) { |
7232 HttpRequestInfo request; | 7284 HttpRequestInfo request; |
7233 request.method = "GET"; | 7285 request.method = "GET"; |
7234 request.url = GURL("http://www.google.com/"); | 7286 request.url = GURL("http://www.google.com/"); |
7235 | 7287 |
7236 session_deps_.proxy_service.reset( | 7288 session_deps_.proxy_service.reset( |
7237 ProxyService::CreateFixed("myproxy:70;foobar:80")); | 7289 ProxyService::CreateFixed("myproxy:70;foobar:80")); |
7238 | 7290 |
7239 // This simulates failure resolving all hostnames; that means we will fail | 7291 // This simulates failure resolving all hostnames; that means we will fail |
7240 // connecting to both proxies (myproxy:70 and foobar:80). | 7292 // connecting to both proxies (myproxy:70 and foobar:80). |
7241 session_deps_.host_resolver->rules()->AddSimulatedFailure("*"); | 7293 session_deps_.host_resolver->rules()->AddSimulatedFailure("*"); |
7242 | 7294 |
7243 scoped_ptr<HttpTransaction> trans( | 7295 scoped_ptr<HttpTransaction> trans( |
7244 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 7296 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
7245 CreateSession(&session_deps_))); | 7297 CreateSession(&session_deps_))); |
7246 | 7298 |
7247 TestCompletionCallback callback; | 7299 TestCompletionCallback callback; |
7248 | 7300 |
7249 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7301 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7250 EXPECT_EQ(ERR_IO_PENDING, rv); | 7302 EXPECT_EQ(ERR_IO_PENDING, rv); |
7251 | 7303 |
7252 rv = callback.WaitForResult(); | 7304 rv = callback.WaitForResult(); |
7253 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 7305 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); |
7254 } | 7306 } |
7255 | 7307 |
7256 // Base test to make sure that when the load flags for a request specify to | 7308 // Base test to make sure that when the load flags for a request specify to |
7257 // bypass the cache, the DNS cache is not used. | 7309 // bypass the cache, the DNS cache is not used. |
7258 void HttpNetworkTransactionSpdy2Test::BypassHostCacheOnRefreshHelper( | 7310 void HttpNetworkTransactionTest::BypassHostCacheOnRefreshHelper( |
7259 int load_flags) { | 7311 int load_flags) { |
7260 // Issue a request, asking to bypass the cache(s). | 7312 // Issue a request, asking to bypass the cache(s). |
7261 HttpRequestInfo request; | 7313 HttpRequestInfo request; |
7262 request.method = "GET"; | 7314 request.method = "GET"; |
7263 request.load_flags = load_flags; | 7315 request.load_flags = load_flags; |
7264 request.url = GURL("http://www.google.com/"); | 7316 request.url = GURL("http://www.google.com/"); |
7265 | 7317 |
7266 // Select a host resolver that does caching. | 7318 // Select a host resolver that does caching. |
7267 session_deps_.host_resolver.reset(new MockCachingHostResolver); | 7319 session_deps_.host_resolver.reset(new MockCachingHostResolver); |
7268 | 7320 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7302 ASSERT_EQ(ERR_IO_PENDING, rv); | 7354 ASSERT_EQ(ERR_IO_PENDING, rv); |
7303 rv = callback.WaitForResult(); | 7355 rv = callback.WaitForResult(); |
7304 | 7356 |
7305 // If we bypassed the cache, we would have gotten a failure while resolving | 7357 // If we bypassed the cache, we would have gotten a failure while resolving |
7306 // "www.google.com". | 7358 // "www.google.com". |
7307 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); | 7359 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); |
7308 } | 7360 } |
7309 | 7361 |
7310 // There are multiple load flags that should trigger the host cache bypass. | 7362 // There are multiple load flags that should trigger the host cache bypass. |
7311 // Test each in isolation: | 7363 // Test each in isolation: |
7312 TEST_F(HttpNetworkTransactionSpdy2Test, BypassHostCacheOnRefresh1) { | 7364 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh1) { |
7313 BypassHostCacheOnRefreshHelper(LOAD_BYPASS_CACHE); | 7365 BypassHostCacheOnRefreshHelper(LOAD_BYPASS_CACHE); |
7314 } | 7366 } |
7315 | 7367 |
7316 TEST_F(HttpNetworkTransactionSpdy2Test, BypassHostCacheOnRefresh2) { | 7368 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh2) { |
7317 BypassHostCacheOnRefreshHelper(LOAD_VALIDATE_CACHE); | 7369 BypassHostCacheOnRefreshHelper(LOAD_VALIDATE_CACHE); |
7318 } | 7370 } |
7319 | 7371 |
7320 TEST_F(HttpNetworkTransactionSpdy2Test, BypassHostCacheOnRefresh3) { | 7372 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh3) { |
7321 BypassHostCacheOnRefreshHelper(LOAD_DISABLE_CACHE); | 7373 BypassHostCacheOnRefreshHelper(LOAD_DISABLE_CACHE); |
7322 } | 7374 } |
7323 | 7375 |
7324 // Make sure we can handle an error when writing the request. | 7376 // Make sure we can handle an error when writing the request. |
7325 TEST_F(HttpNetworkTransactionSpdy2Test, RequestWriteError) { | 7377 TEST_P(HttpNetworkTransactionTest, RequestWriteError) { |
7326 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7378 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7327 | 7379 |
7328 HttpRequestInfo request; | 7380 HttpRequestInfo request; |
7329 request.method = "GET"; | 7381 request.method = "GET"; |
7330 request.url = GURL("http://www.foo.com/"); | 7382 request.url = GURL("http://www.foo.com/"); |
7331 request.load_flags = 0; | 7383 request.load_flags = 0; |
7332 | 7384 |
7333 MockWrite write_failure[] = { | 7385 MockWrite write_failure[] = { |
7334 MockWrite(ASYNC, ERR_CONNECTION_RESET), | 7386 MockWrite(ASYNC, ERR_CONNECTION_RESET), |
7335 }; | 7387 }; |
7336 StaticSocketDataProvider data(NULL, 0, | 7388 StaticSocketDataProvider data(NULL, 0, |
7337 write_failure, arraysize(write_failure)); | 7389 write_failure, arraysize(write_failure)); |
7338 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7390 session_deps_.socket_factory->AddSocketDataProvider(&data); |
7339 | 7391 |
7340 TestCompletionCallback callback; | 7392 TestCompletionCallback callback; |
7341 | 7393 |
7342 scoped_ptr<HttpTransaction> trans( | 7394 scoped_ptr<HttpTransaction> trans( |
7343 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 7395 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
7344 CreateSession(&session_deps_))); | 7396 CreateSession(&session_deps_))); |
7345 | 7397 |
7346 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7398 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7347 EXPECT_EQ(ERR_IO_PENDING, rv); | 7399 EXPECT_EQ(ERR_IO_PENDING, rv); |
7348 | 7400 |
7349 rv = callback.WaitForResult(); | 7401 rv = callback.WaitForResult(); |
7350 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 7402 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
7351 } | 7403 } |
7352 | 7404 |
7353 // Check that a connection closed after the start of the headers finishes ok. | 7405 // Check that a connection closed after the start of the headers finishes ok. |
7354 TEST_F(HttpNetworkTransactionSpdy2Test, ConnectionClosedAfterStartOfHeaders) { | 7406 TEST_P(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { |
7355 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7407 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7356 | 7408 |
7357 HttpRequestInfo request; | 7409 HttpRequestInfo request; |
7358 request.method = "GET"; | 7410 request.method = "GET"; |
7359 request.url = GURL("http://www.foo.com/"); | 7411 request.url = GURL("http://www.foo.com/"); |
7360 request.load_flags = 0; | 7412 request.load_flags = 0; |
7361 | 7413 |
7362 MockRead data_reads[] = { | 7414 MockRead data_reads[] = { |
7363 MockRead("HTTP/1."), | 7415 MockRead("HTTP/1."), |
7364 MockRead(SYNCHRONOUS, OK), | 7416 MockRead(SYNCHRONOUS, OK), |
(...skipping 21 matching lines...) Expand all Loading... |
7386 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 7438 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
7387 | 7439 |
7388 std::string response_data; | 7440 std::string response_data; |
7389 rv = ReadTransaction(trans.get(), &response_data); | 7441 rv = ReadTransaction(trans.get(), &response_data); |
7390 EXPECT_EQ(OK, rv); | 7442 EXPECT_EQ(OK, rv); |
7391 EXPECT_EQ("", response_data); | 7443 EXPECT_EQ("", response_data); |
7392 } | 7444 } |
7393 | 7445 |
7394 // Make sure that a dropped connection while draining the body for auth | 7446 // Make sure that a dropped connection while draining the body for auth |
7395 // restart does the right thing. | 7447 // restart does the right thing. |
7396 TEST_F(HttpNetworkTransactionSpdy2Test, DrainResetOK) { | 7448 TEST_P(HttpNetworkTransactionTest, DrainResetOK) { |
7397 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7449 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7398 | 7450 |
7399 HttpRequestInfo request; | 7451 HttpRequestInfo request; |
7400 request.method = "GET"; | 7452 request.method = "GET"; |
7401 request.url = GURL("http://www.google.com/"); | 7453 request.url = GURL("http://www.google.com/"); |
7402 request.load_flags = 0; | 7454 request.load_flags = 0; |
7403 | 7455 |
7404 MockWrite data_writes1[] = { | 7456 MockWrite data_writes1[] = { |
7405 MockWrite("GET / HTTP/1.1\r\n" | 7457 MockWrite("GET / HTTP/1.1\r\n" |
7406 "Host: www.google.com\r\n" | 7458 "Host: www.google.com\r\n" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7465 rv = callback2.WaitForResult(); | 7517 rv = callback2.WaitForResult(); |
7466 EXPECT_EQ(OK, rv); | 7518 EXPECT_EQ(OK, rv); |
7467 | 7519 |
7468 response = trans->GetResponseInfo(); | 7520 response = trans->GetResponseInfo(); |
7469 ASSERT_TRUE(response != NULL); | 7521 ASSERT_TRUE(response != NULL); |
7470 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 7522 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
7471 EXPECT_EQ(100, response->headers->GetContentLength()); | 7523 EXPECT_EQ(100, response->headers->GetContentLength()); |
7472 } | 7524 } |
7473 | 7525 |
7474 // Test HTTPS connections going through a proxy that sends extra data. | 7526 // Test HTTPS connections going through a proxy that sends extra data. |
7475 TEST_F(HttpNetworkTransactionSpdy2Test, HTTPSViaProxyWithExtraData) { | 7527 TEST_P(HttpNetworkTransactionTest, HTTPSViaProxyWithExtraData) { |
7476 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 7528 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
7477 | 7529 |
7478 HttpRequestInfo request; | 7530 HttpRequestInfo request; |
7479 request.method = "GET"; | 7531 request.method = "GET"; |
7480 request.url = GURL("https://www.google.com/"); | 7532 request.url = GURL("https://www.google.com/"); |
7481 request.load_flags = 0; | 7533 request.load_flags = 0; |
7482 | 7534 |
7483 MockRead proxy_reads[] = { | 7535 MockRead proxy_reads[] = { |
7484 MockRead("HTTP/1.0 200 Connected\r\n\r\nExtra data"), | 7536 MockRead("HTTP/1.0 200 Connected\r\n\r\nExtra data"), |
7485 MockRead(SYNCHRONOUS, OK) | 7537 MockRead(SYNCHRONOUS, OK) |
(...skipping 13 matching lines...) Expand all Loading... |
7499 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 7551 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
7500 CreateSession(&session_deps_))); | 7552 CreateSession(&session_deps_))); |
7501 | 7553 |
7502 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7554 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7503 EXPECT_EQ(ERR_IO_PENDING, rv); | 7555 EXPECT_EQ(ERR_IO_PENDING, rv); |
7504 | 7556 |
7505 rv = callback.WaitForResult(); | 7557 rv = callback.WaitForResult(); |
7506 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 7558 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
7507 } | 7559 } |
7508 | 7560 |
7509 TEST_F(HttpNetworkTransactionSpdy2Test, LargeContentLengthThenClose) { | 7561 TEST_P(HttpNetworkTransactionTest, LargeContentLengthThenClose) { |
7510 HttpRequestInfo request; | 7562 HttpRequestInfo request; |
7511 request.method = "GET"; | 7563 request.method = "GET"; |
7512 request.url = GURL("http://www.google.com/"); | 7564 request.url = GURL("http://www.google.com/"); |
7513 request.load_flags = 0; | 7565 request.load_flags = 0; |
7514 | 7566 |
7515 scoped_ptr<HttpTransaction> trans( | 7567 scoped_ptr<HttpTransaction> trans( |
7516 new HttpNetworkTransaction(DEFAULT_PRIORITY, | 7568 new HttpNetworkTransaction(DEFAULT_PRIORITY, |
7517 CreateSession(&session_deps_))); | 7569 CreateSession(&session_deps_))); |
7518 | 7570 |
7519 MockRead data_reads[] = { | 7571 MockRead data_reads[] = { |
(...skipping 15 matching lines...) Expand all Loading... |
7535 ASSERT_TRUE(response != NULL); | 7587 ASSERT_TRUE(response != NULL); |
7536 | 7588 |
7537 EXPECT_TRUE(response->headers.get() != NULL); | 7589 EXPECT_TRUE(response->headers.get() != NULL); |
7538 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 7590 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
7539 | 7591 |
7540 std::string response_data; | 7592 std::string response_data; |
7541 rv = ReadTransaction(trans.get(), &response_data); | 7593 rv = ReadTransaction(trans.get(), &response_data); |
7542 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 7594 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); |
7543 } | 7595 } |
7544 | 7596 |
7545 TEST_F(HttpNetworkTransactionSpdy2Test, UploadFileSmallerThanLength) { | 7597 TEST_P(HttpNetworkTransactionTest, UploadFileSmallerThanLength) { |
7546 base::FilePath temp_file_path; | 7598 base::FilePath temp_file_path; |
7547 ASSERT_TRUE(file_util::CreateTemporaryFile(&temp_file_path)); | 7599 ASSERT_TRUE(file_util::CreateTemporaryFile(&temp_file_path)); |
7548 const uint64 kFakeSize = 100000; // file is actually blank | 7600 const uint64 kFakeSize = 100000; // file is actually blank |
7549 UploadFileElementReader::ScopedOverridingContentLengthForTests | 7601 UploadFileElementReader::ScopedOverridingContentLengthForTests |
7550 overriding_content_length(kFakeSize); | 7602 overriding_content_length(kFakeSize); |
7551 | 7603 |
7552 ScopedVector<UploadElementReader> element_readers; | 7604 ScopedVector<UploadElementReader> element_readers; |
7553 element_readers.push_back( | 7605 element_readers.push_back( |
7554 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 7606 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
7555 temp_file_path, | 7607 temp_file_path, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7591 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 7643 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
7592 | 7644 |
7593 std::string response_data; | 7645 std::string response_data; |
7594 rv = ReadTransaction(trans.get(), &response_data); | 7646 rv = ReadTransaction(trans.get(), &response_data); |
7595 EXPECT_EQ(OK, rv); | 7647 EXPECT_EQ(OK, rv); |
7596 EXPECT_EQ("hello world", response_data); | 7648 EXPECT_EQ("hello world", response_data); |
7597 | 7649 |
7598 file_util::Delete(temp_file_path, false); | 7650 file_util::Delete(temp_file_path, false); |
7599 } | 7651 } |
7600 | 7652 |
7601 TEST_F(HttpNetworkTransactionSpdy2Test, UploadUnreadableFile) { | 7653 TEST_P(HttpNetworkTransactionTest, UploadUnreadableFile) { |
7602 base::FilePath temp_file; | 7654 base::FilePath temp_file; |
7603 ASSERT_TRUE(file_util::CreateTemporaryFile(&temp_file)); | 7655 ASSERT_TRUE(file_util::CreateTemporaryFile(&temp_file)); |
7604 std::string temp_file_content("Unreadable file."); | 7656 std::string temp_file_content("Unreadable file."); |
7605 ASSERT_TRUE(file_util::WriteFile(temp_file, temp_file_content.c_str(), | 7657 ASSERT_TRUE(file_util::WriteFile(temp_file, temp_file_content.c_str(), |
7606 temp_file_content.length())); | 7658 temp_file_content.length())); |
7607 ASSERT_TRUE(file_util::MakeFileUnreadable(temp_file)); | 7659 ASSERT_TRUE(file_util::MakeFileUnreadable(temp_file)); |
7608 | 7660 |
7609 ScopedVector<UploadElementReader> element_readers; | 7661 ScopedVector<UploadElementReader> element_readers; |
7610 element_readers.push_back( | 7662 element_readers.push_back( |
7611 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 7663 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7651 EXPECT_EQ(OK, rv); | 7703 EXPECT_EQ(OK, rv); |
7652 | 7704 |
7653 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7705 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7654 ASSERT_TRUE(response != NULL); | 7706 ASSERT_TRUE(response != NULL); |
7655 EXPECT_TRUE(response->headers.get() != NULL); | 7707 EXPECT_TRUE(response->headers.get() != NULL); |
7656 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 7708 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
7657 | 7709 |
7658 file_util::Delete(temp_file, false); | 7710 file_util::Delete(temp_file, false); |
7659 } | 7711 } |
7660 | 7712 |
7661 TEST_F(HttpNetworkTransactionSpdy2Test, UnreadableUploadFileAfterAuthRestart) { | 7713 TEST_P(HttpNetworkTransactionTest, UnreadableUploadFileAfterAuthRestart) { |
7662 base::FilePath temp_file; | 7714 base::FilePath temp_file; |
7663 ASSERT_TRUE(file_util::CreateTemporaryFile(&temp_file)); | 7715 ASSERT_TRUE(file_util::CreateTemporaryFile(&temp_file)); |
7664 std::string temp_file_contents("Unreadable file."); | 7716 std::string temp_file_contents("Unreadable file."); |
7665 std::string unreadable_contents(temp_file_contents.length(), '\0'); | 7717 std::string unreadable_contents(temp_file_contents.length(), '\0'); |
7666 ASSERT_TRUE(file_util::WriteFile(temp_file, temp_file_contents.c_str(), | 7718 ASSERT_TRUE(file_util::WriteFile(temp_file, temp_file_contents.c_str(), |
7667 temp_file_contents.length())); | 7719 temp_file_contents.length())); |
7668 | 7720 |
7669 ScopedVector<UploadElementReader> element_readers; | 7721 ScopedVector<UploadElementReader> element_readers; |
7670 element_readers.push_back( | 7722 element_readers.push_back( |
7671 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 7723 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7743 response = trans->GetResponseInfo(); | 7795 response = trans->GetResponseInfo(); |
7744 ASSERT_TRUE(response != NULL); | 7796 ASSERT_TRUE(response != NULL); |
7745 EXPECT_TRUE(response->headers.get() != NULL); | 7797 EXPECT_TRUE(response->headers.get() != NULL); |
7746 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 7798 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
7747 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 7799 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
7748 | 7800 |
7749 file_util::Delete(temp_file, false); | 7801 file_util::Delete(temp_file, false); |
7750 } | 7802 } |
7751 | 7803 |
7752 // Tests that changes to Auth realms are treated like auth rejections. | 7804 // Tests that changes to Auth realms are treated like auth rejections. |
7753 TEST_F(HttpNetworkTransactionSpdy2Test, ChangeAuthRealms) { | 7805 TEST_P(HttpNetworkTransactionTest, ChangeAuthRealms) { |
7754 | 7806 |
7755 HttpRequestInfo request; | 7807 HttpRequestInfo request; |
7756 request.method = "GET"; | 7808 request.method = "GET"; |
7757 request.url = GURL("http://www.google.com/"); | 7809 request.url = GURL("http://www.google.com/"); |
7758 request.load_flags = 0; | 7810 request.load_flags = 0; |
7759 | 7811 |
7760 // First transaction will request a resource and receive a Basic challenge | 7812 // First transaction will request a resource and receive a Basic challenge |
7761 // with realm="first_realm". | 7813 // with realm="first_realm". |
7762 MockWrite data_writes1[] = { | 7814 MockWrite data_writes1[] = { |
7763 MockWrite("GET / HTTP/1.1\r\n" | 7815 MockWrite("GET / HTTP/1.1\r\n" |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7895 rv = trans->RestartWithAuth( | 7947 rv = trans->RestartWithAuth( |
7896 AuthCredentials(kFirst, kBar), callback4.callback()); | 7948 AuthCredentials(kFirst, kBar), callback4.callback()); |
7897 EXPECT_EQ(ERR_IO_PENDING, rv); | 7949 EXPECT_EQ(ERR_IO_PENDING, rv); |
7898 rv = callback4.WaitForResult(); | 7950 rv = callback4.WaitForResult(); |
7899 EXPECT_EQ(OK, rv); | 7951 EXPECT_EQ(OK, rv); |
7900 response = trans->GetResponseInfo(); | 7952 response = trans->GetResponseInfo(); |
7901 ASSERT_TRUE(response != NULL); | 7953 ASSERT_TRUE(response != NULL); |
7902 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 7954 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
7903 } | 7955 } |
7904 | 7956 |
7905 TEST_F(HttpNetworkTransactionSpdy2Test, HonorAlternateProtocolHeader) { | 7957 TEST_P(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { |
7906 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 7958 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
7907 HttpStreamFactory::set_use_alternate_protocols(true); | 7959 HttpStreamFactory::set_use_alternate_protocols(true); |
7908 | 7960 |
7909 MockRead data_reads[] = { | 7961 MockRead data_reads[] = { |
7910 MockRead("HTTP/1.1 200 OK\r\n"), | 7962 MockRead("HTTP/1.1 200 OK\r\n"), |
7911 MockRead(kAlternateProtocolHttpHeader), | 7963 MockRead(kAlternateProtocolHttpHeader), |
7912 MockRead("hello world"), | 7964 MockRead("hello world"), |
7913 MockRead(SYNCHRONOUS, OK), | 7965 MockRead(SYNCHRONOUS, OK), |
7914 }; | 7966 }; |
7915 | 7967 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7954 const PortAlternateProtocolPair alternate = | 8006 const PortAlternateProtocolPair alternate = |
7955 http_server_properties.GetAlternateProtocol(http_host_port_pair); | 8007 http_server_properties.GetAlternateProtocol(http_host_port_pair); |
7956 PortAlternateProtocolPair expected_alternate; | 8008 PortAlternateProtocolPair expected_alternate; |
7957 expected_alternate.port = 443; | 8009 expected_alternate.port = 443; |
7958 expected_alternate.protocol = NPN_SPDY_2; | 8010 expected_alternate.protocol = NPN_SPDY_2; |
7959 EXPECT_TRUE(expected_alternate.Equals(alternate)); | 8011 EXPECT_TRUE(expected_alternate.Equals(alternate)); |
7960 | 8012 |
7961 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); | 8013 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); |
7962 } | 8014 } |
7963 | 8015 |
7964 TEST_F(HttpNetworkTransactionSpdy2Test, | 8016 TEST_P(HttpNetworkTransactionTest, |
7965 MarkBrokenAlternateProtocolAndFallback) { | 8017 MarkBrokenAlternateProtocolAndFallback) { |
7966 HttpStreamFactory::set_use_alternate_protocols(true); | 8018 HttpStreamFactory::set_use_alternate_protocols(true); |
7967 | 8019 |
7968 HttpRequestInfo request; | 8020 HttpRequestInfo request; |
7969 request.method = "GET"; | 8021 request.method = "GET"; |
7970 request.url = GURL("http://www.google.com/"); | 8022 request.url = GURL("http://www.google.com/"); |
7971 request.load_flags = 0; | 8023 request.load_flags = 0; |
7972 | 8024 |
7973 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8025 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
7974 StaticSocketDataProvider first_data; | 8026 StaticSocketDataProvider first_data; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8013 EXPECT_EQ("hello world", response_data); | 8065 EXPECT_EQ("hello world", response_data); |
8014 | 8066 |
8015 ASSERT_TRUE(http_server_properties->HasAlternateProtocol( | 8067 ASSERT_TRUE(http_server_properties->HasAlternateProtocol( |
8016 HostPortPair::FromURL(request.url))); | 8068 HostPortPair::FromURL(request.url))); |
8017 const PortAlternateProtocolPair alternate = | 8069 const PortAlternateProtocolPair alternate = |
8018 http_server_properties->GetAlternateProtocol( | 8070 http_server_properties->GetAlternateProtocol( |
8019 HostPortPair::FromURL(request.url)); | 8071 HostPortPair::FromURL(request.url)); |
8020 EXPECT_EQ(ALTERNATE_PROTOCOL_BROKEN, alternate.protocol); | 8072 EXPECT_EQ(ALTERNATE_PROTOCOL_BROKEN, alternate.protocol); |
8021 } | 8073 } |
8022 | 8074 |
8023 TEST_F(HttpNetworkTransactionSpdy2Test, | 8075 TEST_P(HttpNetworkTransactionTest, |
8024 AlternateProtocolPortRestrictedBlocked) { | 8076 AlternateProtocolPortRestrictedBlocked) { |
8025 // Ensure that we're not allowed to redirect traffic via an alternate | 8077 // Ensure that we're not allowed to redirect traffic via an alternate |
8026 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8078 // protocol to an unrestricted (port >= 1024) when the original traffic was |
8027 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8079 // on a restricted port (port < 1024). Ensure that we can redirect in all |
8028 // other cases. | 8080 // other cases. |
8029 HttpStreamFactory::set_use_alternate_protocols(true); | 8081 HttpStreamFactory::set_use_alternate_protocols(true); |
8030 | 8082 |
8031 HttpRequestInfo restricted_port_request; | 8083 HttpRequestInfo restricted_port_request; |
8032 restricted_port_request.method = "GET"; | 8084 restricted_port_request.method = "GET"; |
8033 restricted_port_request.url = GURL("http://www.google.com:1023/"); | 8085 restricted_port_request.url = GURL("http://www.google.com:1023/"); |
(...skipping 28 matching lines...) Expand all Loading... |
8062 TestCompletionCallback callback; | 8114 TestCompletionCallback callback; |
8063 | 8115 |
8064 int rv = trans->Start( | 8116 int rv = trans->Start( |
8065 &restricted_port_request, | 8117 &restricted_port_request, |
8066 callback.callback(), BoundNetLog()); | 8118 callback.callback(), BoundNetLog()); |
8067 EXPECT_EQ(ERR_IO_PENDING, rv); | 8119 EXPECT_EQ(ERR_IO_PENDING, rv); |
8068 // Invalid change to unrestricted port should fail. | 8120 // Invalid change to unrestricted port should fail. |
8069 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); | 8121 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); |
8070 } | 8122 } |
8071 | 8123 |
8072 TEST_F(HttpNetworkTransactionSpdy2Test, | 8124 TEST_P(HttpNetworkTransactionTest, |
8073 AlternateProtocolPortRestrictedPermitted) { | 8125 AlternateProtocolPortRestrictedPermitted) { |
8074 // Ensure that we're allowed to redirect traffic via an alternate | 8126 // Ensure that we're allowed to redirect traffic via an alternate |
8075 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8127 // protocol to an unrestricted (port >= 1024) when the original traffic was |
8076 // on a restricted port (port < 1024) if we set | 8128 // on a restricted port (port < 1024) if we set |
8077 // enable_user_alternate_protocol_ports. | 8129 // enable_user_alternate_protocol_ports. |
8078 | 8130 |
8079 HttpStreamFactory::set_use_alternate_protocols(true); | 8131 HttpStreamFactory::set_use_alternate_protocols(true); |
8080 session_deps_.enable_user_alternate_protocol_ports = true; | 8132 session_deps_.enable_user_alternate_protocol_ports = true; |
8081 | 8133 |
8082 HttpRequestInfo restricted_port_request; | 8134 HttpRequestInfo restricted_port_request; |
(...skipping 29 matching lines...) Expand all Loading... |
8112 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8164 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8113 TestCompletionCallback callback; | 8165 TestCompletionCallback callback; |
8114 | 8166 |
8115 EXPECT_EQ(ERR_IO_PENDING, trans->Start( | 8167 EXPECT_EQ(ERR_IO_PENDING, trans->Start( |
8116 &restricted_port_request, | 8168 &restricted_port_request, |
8117 callback.callback(), BoundNetLog())); | 8169 callback.callback(), BoundNetLog())); |
8118 // Change to unrestricted port should succeed. | 8170 // Change to unrestricted port should succeed. |
8119 EXPECT_EQ(OK, callback.WaitForResult()); | 8171 EXPECT_EQ(OK, callback.WaitForResult()); |
8120 } | 8172 } |
8121 | 8173 |
8122 TEST_F(HttpNetworkTransactionSpdy2Test, | 8174 TEST_P(HttpNetworkTransactionTest, |
8123 AlternateProtocolPortRestrictedAllowed) { | 8175 AlternateProtocolPortRestrictedAllowed) { |
8124 // Ensure that we're not allowed to redirect traffic via an alternate | 8176 // Ensure that we're not allowed to redirect traffic via an alternate |
8125 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8177 // protocol to an unrestricted (port >= 1024) when the original traffic was |
8126 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8178 // on a restricted port (port < 1024). Ensure that we can redirect in all |
8127 // other cases. | 8179 // other cases. |
8128 HttpStreamFactory::set_use_alternate_protocols(true); | 8180 HttpStreamFactory::set_use_alternate_protocols(true); |
8129 | 8181 |
8130 HttpRequestInfo restricted_port_request; | 8182 HttpRequestInfo restricted_port_request; |
8131 restricted_port_request.method = "GET"; | 8183 restricted_port_request.method = "GET"; |
8132 restricted_port_request.url = GURL("http://www.google.com:1023/"); | 8184 restricted_port_request.url = GURL("http://www.google.com:1023/"); |
(...skipping 28 matching lines...) Expand all Loading... |
8161 TestCompletionCallback callback; | 8213 TestCompletionCallback callback; |
8162 | 8214 |
8163 int rv = trans->Start( | 8215 int rv = trans->Start( |
8164 &restricted_port_request, | 8216 &restricted_port_request, |
8165 callback.callback(), BoundNetLog()); | 8217 callback.callback(), BoundNetLog()); |
8166 EXPECT_EQ(ERR_IO_PENDING, rv); | 8218 EXPECT_EQ(ERR_IO_PENDING, rv); |
8167 // Valid change to restricted port should pass. | 8219 // Valid change to restricted port should pass. |
8168 EXPECT_EQ(OK, callback.WaitForResult()); | 8220 EXPECT_EQ(OK, callback.WaitForResult()); |
8169 } | 8221 } |
8170 | 8222 |
8171 TEST_F(HttpNetworkTransactionSpdy2Test, | 8223 TEST_P(HttpNetworkTransactionTest, |
8172 AlternateProtocolPortUnrestrictedAllowed1) { | 8224 AlternateProtocolPortUnrestrictedAllowed1) { |
8173 // Ensure that we're not allowed to redirect traffic via an alternate | 8225 // Ensure that we're not allowed to redirect traffic via an alternate |
8174 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8226 // protocol to an unrestricted (port >= 1024) when the original traffic was |
8175 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8227 // on a restricted port (port < 1024). Ensure that we can redirect in all |
8176 // other cases. | 8228 // other cases. |
8177 HttpStreamFactory::set_use_alternate_protocols(true); | 8229 HttpStreamFactory::set_use_alternate_protocols(true); |
8178 | 8230 |
8179 HttpRequestInfo unrestricted_port_request; | 8231 HttpRequestInfo unrestricted_port_request; |
8180 unrestricted_port_request.method = "GET"; | 8232 unrestricted_port_request.method = "GET"; |
8181 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); | 8233 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); |
(...skipping 27 matching lines...) Expand all Loading... |
8209 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8261 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8210 TestCompletionCallback callback; | 8262 TestCompletionCallback callback; |
8211 | 8263 |
8212 int rv = trans->Start( | 8264 int rv = trans->Start( |
8213 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 8265 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
8214 EXPECT_EQ(ERR_IO_PENDING, rv); | 8266 EXPECT_EQ(ERR_IO_PENDING, rv); |
8215 // Valid change to restricted port should pass. | 8267 // Valid change to restricted port should pass. |
8216 EXPECT_EQ(OK, callback.WaitForResult()); | 8268 EXPECT_EQ(OK, callback.WaitForResult()); |
8217 } | 8269 } |
8218 | 8270 |
8219 TEST_F(HttpNetworkTransactionSpdy2Test, | 8271 TEST_P(HttpNetworkTransactionTest, |
8220 AlternateProtocolPortUnrestrictedAllowed2) { | 8272 AlternateProtocolPortUnrestrictedAllowed2) { |
8221 // Ensure that we're not allowed to redirect traffic via an alternate | 8273 // Ensure that we're not allowed to redirect traffic via an alternate |
8222 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8274 // protocol to an unrestricted (port >= 1024) when the original traffic was |
8223 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8275 // on a restricted port (port < 1024). Ensure that we can redirect in all |
8224 // other cases. | 8276 // other cases. |
8225 HttpStreamFactory::set_use_alternate_protocols(true); | 8277 HttpStreamFactory::set_use_alternate_protocols(true); |
8226 | 8278 |
8227 HttpRequestInfo unrestricted_port_request; | 8279 HttpRequestInfo unrestricted_port_request; |
8228 unrestricted_port_request.method = "GET"; | 8280 unrestricted_port_request.method = "GET"; |
8229 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); | 8281 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); |
(...skipping 27 matching lines...) Expand all Loading... |
8257 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8309 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8258 TestCompletionCallback callback; | 8310 TestCompletionCallback callback; |
8259 | 8311 |
8260 int rv = trans->Start( | 8312 int rv = trans->Start( |
8261 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 8313 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
8262 EXPECT_EQ(ERR_IO_PENDING, rv); | 8314 EXPECT_EQ(ERR_IO_PENDING, rv); |
8263 // Valid change to an unrestricted port should pass. | 8315 // Valid change to an unrestricted port should pass. |
8264 EXPECT_EQ(OK, callback.WaitForResult()); | 8316 EXPECT_EQ(OK, callback.WaitForResult()); |
8265 } | 8317 } |
8266 | 8318 |
8267 TEST_F(HttpNetworkTransactionSpdy2Test, | 8319 TEST_P(HttpNetworkTransactionTest, |
8268 AlternateProtocolUnsafeBlocked) { | 8320 AlternateProtocolUnsafeBlocked) { |
8269 // Ensure that we're not allowed to redirect traffic via an alternate | 8321 // Ensure that we're not allowed to redirect traffic via an alternate |
8270 // protocol to an unsafe port, and that we resume the second | 8322 // protocol to an unsafe port, and that we resume the second |
8271 // HttpStreamFactoryImpl::Job once the alternate protocol request fails. | 8323 // HttpStreamFactoryImpl::Job once the alternate protocol request fails. |
8272 HttpStreamFactory::set_use_alternate_protocols(true); | 8324 HttpStreamFactory::set_use_alternate_protocols(true); |
8273 | 8325 |
8274 HttpRequestInfo request; | 8326 HttpRequestInfo request; |
8275 request.method = "GET"; | 8327 request.method = "GET"; |
8276 request.url = GURL("http://www.google.com/"); | 8328 request.url = GURL("http://www.google.com/"); |
8277 request.load_flags = 0; | 8329 request.load_flags = 0; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8312 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8364 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8313 ASSERT_TRUE(response != NULL); | 8365 ASSERT_TRUE(response != NULL); |
8314 ASSERT_TRUE(response->headers.get() != NULL); | 8366 ASSERT_TRUE(response->headers.get() != NULL); |
8315 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 8367 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
8316 | 8368 |
8317 std::string response_data; | 8369 std::string response_data; |
8318 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 8370 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
8319 EXPECT_EQ("hello world", response_data); | 8371 EXPECT_EQ("hello world", response_data); |
8320 } | 8372 } |
8321 | 8373 |
8322 TEST_F(HttpNetworkTransactionSpdy2Test, UseAlternateProtocolForNpnSpdy) { | 8374 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
| 8375 if (GetParam() > kProtoSPDY3) |
| 8376 return; |
| 8377 |
8323 HttpStreamFactory::set_use_alternate_protocols(true); | 8378 HttpStreamFactory::set_use_alternate_protocols(true); |
8324 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8379 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
8325 | 8380 |
8326 HttpRequestInfo request; | 8381 HttpRequestInfo request; |
8327 request.method = "GET"; | 8382 request.method = "GET"; |
8328 request.url = GURL("http://www.google.com/"); | 8383 request.url = GURL("http://www.google.com/"); |
8329 request.load_flags = 0; | 8384 request.load_flags = 0; |
8330 | 8385 |
8331 MockRead data_reads[] = { | 8386 MockRead data_reads[] = { |
8332 MockRead("HTTP/1.1 200 OK\r\n"), | 8387 MockRead("HTTP/1.1 200 OK\r\n"), |
8333 MockRead(kAlternateProtocolHttpHeader), | 8388 MockRead(kAlternateProtocolHttpHeader), |
8334 MockRead("hello world"), | 8389 MockRead("hello world"), |
8335 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 8390 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
8336 MockRead(ASYNC, OK) | 8391 MockRead(ASYNC, OK) |
8337 }; | 8392 }; |
8338 | 8393 |
8339 StaticSocketDataProvider first_transaction( | 8394 StaticSocketDataProvider first_transaction( |
8340 data_reads, arraysize(data_reads), NULL, 0); | 8395 data_reads, arraysize(data_reads), NULL, 0); |
8341 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); | 8396 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
8342 | 8397 |
8343 SSLSocketDataProvider ssl(ASYNC, OK); | 8398 SSLSocketDataProvider ssl(ASYNC, OK); |
8344 ssl.SetNextProto(kProtoSPDY2); | 8399 ssl.SetNextProto(GetParam()); |
8345 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8400 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
8346 | 8401 |
8347 scoped_ptr<SpdyFrame> req( | 8402 scoped_ptr<SpdyFrame> req( |
8348 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 8403 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
8349 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 8404 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
8350 | 8405 |
8351 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 8406 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
8352 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 8407 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
8353 MockRead spdy_reads[] = { | 8408 MockRead spdy_reads[] = { |
8354 CreateMockRead(*resp), | 8409 CreateMockRead(*resp), |
8355 CreateMockRead(*data), | 8410 CreateMockRead(*data), |
8356 MockRead(ASYNC, 0, 0), | 8411 MockRead(ASYNC, 0, 0), |
8357 }; | 8412 }; |
8358 | 8413 |
8359 DelayedSocketData spdy_data( | 8414 DelayedSocketData spdy_data( |
8360 1, // wait for one write to finish before reading. | 8415 1, // wait for one write to finish before reading. |
8361 spdy_reads, arraysize(spdy_reads), | 8416 spdy_reads, arraysize(spdy_reads), |
8362 spdy_writes, arraysize(spdy_writes)); | 8417 spdy_writes, arraysize(spdy_writes)); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8399 ASSERT_TRUE(response != NULL); | 8454 ASSERT_TRUE(response != NULL); |
8400 ASSERT_TRUE(response->headers.get() != NULL); | 8455 ASSERT_TRUE(response->headers.get() != NULL); |
8401 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 8456 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
8402 EXPECT_TRUE(response->was_fetched_via_spdy); | 8457 EXPECT_TRUE(response->was_fetched_via_spdy); |
8403 EXPECT_TRUE(response->was_npn_negotiated); | 8458 EXPECT_TRUE(response->was_npn_negotiated); |
8404 | 8459 |
8405 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 8460 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
8406 EXPECT_EQ("hello!", response_data); | 8461 EXPECT_EQ("hello!", response_data); |
8407 } | 8462 } |
8408 | 8463 |
8409 TEST_F(HttpNetworkTransactionSpdy2Test, AlternateProtocolWithSpdyLateBinding) { | 8464 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
| 8465 if (GetParam() > kProtoSPDY3) |
| 8466 return; |
| 8467 |
8410 HttpStreamFactory::set_use_alternate_protocols(true); | 8468 HttpStreamFactory::set_use_alternate_protocols(true); |
8411 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8469 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
8412 | 8470 |
8413 HttpRequestInfo request; | 8471 HttpRequestInfo request; |
8414 request.method = "GET"; | 8472 request.method = "GET"; |
8415 request.url = GURL("http://www.google.com/"); | 8473 request.url = GURL("http://www.google.com/"); |
8416 request.load_flags = 0; | 8474 request.load_flags = 0; |
8417 | 8475 |
8418 MockRead data_reads[] = { | 8476 MockRead data_reads[] = { |
8419 MockRead("HTTP/1.1 200 OK\r\n"), | 8477 MockRead("HTTP/1.1 200 OK\r\n"), |
(...skipping 11 matching lines...) Expand all Loading... |
8431 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 8489 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
8432 StaticSocketDataProvider hanging_socket( | 8490 StaticSocketDataProvider hanging_socket( |
8433 NULL, 0, NULL, 0); | 8491 NULL, 0, NULL, 0); |
8434 hanging_socket.set_connect_data(never_finishing_connect); | 8492 hanging_socket.set_connect_data(never_finishing_connect); |
8435 // Socket 2 and 3 are the hanging Alternate-Protocol and | 8493 // Socket 2 and 3 are the hanging Alternate-Protocol and |
8436 // non-Alternate-Protocol jobs from the 2nd transaction. | 8494 // non-Alternate-Protocol jobs from the 2nd transaction. |
8437 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); | 8495 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); |
8438 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); | 8496 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); |
8439 | 8497 |
8440 SSLSocketDataProvider ssl(ASYNC, OK); | 8498 SSLSocketDataProvider ssl(ASYNC, OK); |
8441 ssl.SetNextProto(kProtoSPDY2); | 8499 ssl.SetNextProto(GetParam()); |
8442 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8500 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
8443 | 8501 |
8444 scoped_ptr<SpdyFrame> req1( | 8502 scoped_ptr<SpdyFrame> req1( |
8445 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 8503 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
8446 scoped_ptr<SpdyFrame> req2( | 8504 scoped_ptr<SpdyFrame> req2( |
8447 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); | 8505 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); |
8448 MockWrite spdy_writes[] = { | 8506 MockWrite spdy_writes[] = { |
8449 CreateMockWrite(*req1), | 8507 CreateMockWrite(*req1), |
8450 CreateMockWrite(*req2), | 8508 CreateMockWrite(*req2), |
8451 }; | 8509 }; |
8452 scoped_ptr<SpdyFrame> resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); | 8510 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
8453 scoped_ptr<SpdyFrame> data1(ConstructSpdyBodyFrame(1, true)); | 8511 scoped_ptr<SpdyFrame> data1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
8454 scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); | 8512 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
8455 scoped_ptr<SpdyFrame> data2(ConstructSpdyBodyFrame(3, true)); | 8513 scoped_ptr<SpdyFrame> data2(spdy_util_.ConstructSpdyBodyFrame(3, true)); |
8456 MockRead spdy_reads[] = { | 8514 MockRead spdy_reads[] = { |
8457 CreateMockRead(*resp1), | 8515 CreateMockRead(*resp1), |
8458 CreateMockRead(*data1), | 8516 CreateMockRead(*data1), |
8459 CreateMockRead(*resp2), | 8517 CreateMockRead(*resp2), |
8460 CreateMockRead(*data2), | 8518 CreateMockRead(*data2), |
8461 MockRead(ASYNC, 0, 0), | 8519 MockRead(ASYNC, 0, 0), |
8462 }; | 8520 }; |
8463 | 8521 |
8464 DelayedSocketData spdy_data( | 8522 DelayedSocketData spdy_data( |
8465 2, // wait for writes to finish before reading. | 8523 2, // wait for writes to finish before reading. |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8513 response = trans3.GetResponseInfo(); | 8571 response = trans3.GetResponseInfo(); |
8514 ASSERT_TRUE(response != NULL); | 8572 ASSERT_TRUE(response != NULL); |
8515 ASSERT_TRUE(response->headers.get() != NULL); | 8573 ASSERT_TRUE(response->headers.get() != NULL); |
8516 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 8574 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
8517 EXPECT_TRUE(response->was_fetched_via_spdy); | 8575 EXPECT_TRUE(response->was_fetched_via_spdy); |
8518 EXPECT_TRUE(response->was_npn_negotiated); | 8576 EXPECT_TRUE(response->was_npn_negotiated); |
8519 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); | 8577 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); |
8520 EXPECT_EQ("hello!", response_data); | 8578 EXPECT_EQ("hello!", response_data); |
8521 } | 8579 } |
8522 | 8580 |
8523 TEST_F(HttpNetworkTransactionSpdy2Test, StallAlternateProtocolForNpnSpdy) { | 8581 TEST_P(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { |
8524 HttpStreamFactory::set_use_alternate_protocols(true); | 8582 HttpStreamFactory::set_use_alternate_protocols(true); |
8525 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8583 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
8526 | 8584 |
8527 HttpRequestInfo request; | 8585 HttpRequestInfo request; |
8528 request.method = "GET"; | 8586 request.method = "GET"; |
8529 request.url = GURL("http://www.google.com/"); | 8587 request.url = GURL("http://www.google.com/"); |
8530 request.load_flags = 0; | 8588 request.load_flags = 0; |
8531 | 8589 |
8532 MockRead data_reads[] = { | 8590 MockRead data_reads[] = { |
8533 MockRead("HTTP/1.1 200 OK\r\n"), | 8591 MockRead("HTTP/1.1 200 OK\r\n"), |
8534 MockRead(kAlternateProtocolHttpHeader), | 8592 MockRead(kAlternateProtocolHttpHeader), |
8535 MockRead("hello world"), | 8593 MockRead("hello world"), |
8536 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 8594 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
8537 MockRead(ASYNC, OK), | 8595 MockRead(ASYNC, OK), |
8538 }; | 8596 }; |
8539 | 8597 |
8540 StaticSocketDataProvider first_transaction( | 8598 StaticSocketDataProvider first_transaction( |
8541 data_reads, arraysize(data_reads), NULL, 0); | 8599 data_reads, arraysize(data_reads), NULL, 0); |
8542 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); | 8600 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
8543 | 8601 |
8544 SSLSocketDataProvider ssl(ASYNC, OK); | 8602 SSLSocketDataProvider ssl(ASYNC, OK); |
8545 ssl.SetNextProto(kProtoSPDY2); | 8603 ssl.SetNextProto(GetParam()); |
8546 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8604 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
8547 | 8605 |
8548 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 8606 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
8549 StaticSocketDataProvider hanging_alternate_protocol_socket( | 8607 StaticSocketDataProvider hanging_alternate_protocol_socket( |
8550 NULL, 0, NULL, 0); | 8608 NULL, 0, NULL, 0); |
8551 hanging_alternate_protocol_socket.set_connect_data( | 8609 hanging_alternate_protocol_socket.set_connect_data( |
8552 never_finishing_connect); | 8610 never_finishing_connect); |
8553 session_deps_.socket_factory->AddSocketDataProvider( | 8611 session_deps_.socket_factory->AddSocketDataProvider( |
8554 &hanging_alternate_protocol_socket); | 8612 &hanging_alternate_protocol_socket); |
8555 | 8613 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8628 } | 8686 } |
8629 | 8687 |
8630 const std::vector<GURL>& resolved() const { return resolved_; } | 8688 const std::vector<GURL>& resolved() const { return resolved_; } |
8631 | 8689 |
8632 private: | 8690 private: |
8633 std::vector<GURL> resolved_; | 8691 std::vector<GURL> resolved_; |
8634 | 8692 |
8635 DISALLOW_COPY_AND_ASSIGN(CapturingProxyResolver); | 8693 DISALLOW_COPY_AND_ASSIGN(CapturingProxyResolver); |
8636 }; | 8694 }; |
8637 | 8695 |
8638 TEST_F(HttpNetworkTransactionSpdy2Test, | 8696 TEST_P(HttpNetworkTransactionTest, |
8639 UseAlternateProtocolForTunneledNpnSpdy) { | 8697 UseAlternateProtocolForTunneledNpnSpdy) { |
| 8698 if (GetParam() > kProtoSPDY3) |
| 8699 return; |
| 8700 |
8640 HttpStreamFactory::set_use_alternate_protocols(true); | 8701 HttpStreamFactory::set_use_alternate_protocols(true); |
8641 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8702 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
8642 | 8703 |
8643 ProxyConfig proxy_config; | 8704 ProxyConfig proxy_config; |
8644 proxy_config.set_auto_detect(true); | 8705 proxy_config.set_auto_detect(true); |
8645 proxy_config.set_pac_url(GURL("http://fooproxyurl")); | 8706 proxy_config.set_pac_url(GURL("http://fooproxyurl")); |
8646 | 8707 |
8647 CapturingProxyResolver* capturing_proxy_resolver = | 8708 CapturingProxyResolver* capturing_proxy_resolver = |
8648 new CapturingProxyResolver(); | 8709 new CapturingProxyResolver(); |
8649 session_deps_.proxy_service.reset(new ProxyService( | 8710 session_deps_.proxy_service.reset(new ProxyService( |
(...skipping 13 matching lines...) Expand all Loading... |
8663 MockRead("hello world"), | 8724 MockRead("hello world"), |
8664 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 8725 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
8665 MockRead(ASYNC, OK), | 8726 MockRead(ASYNC, OK), |
8666 }; | 8727 }; |
8667 | 8728 |
8668 StaticSocketDataProvider first_transaction( | 8729 StaticSocketDataProvider first_transaction( |
8669 data_reads, arraysize(data_reads), NULL, 0); | 8730 data_reads, arraysize(data_reads), NULL, 0); |
8670 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); | 8731 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
8671 | 8732 |
8672 SSLSocketDataProvider ssl(ASYNC, OK); | 8733 SSLSocketDataProvider ssl(ASYNC, OK); |
8673 ssl.SetNextProto(kProtoSPDY2); | 8734 ssl.SetNextProto(GetParam()); |
8674 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8735 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
8675 | 8736 |
8676 scoped_ptr<SpdyFrame> req( | 8737 scoped_ptr<SpdyFrame> req( |
8677 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 8738 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
8678 MockWrite spdy_writes[] = { | 8739 MockWrite spdy_writes[] = { |
8679 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 8740 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
8680 "Host: www.google.com\r\n" | 8741 "Host: www.google.com\r\n" |
8681 "Proxy-Connection: keep-alive\r\n\r\n"), // 0 | 8742 "Proxy-Connection: keep-alive\r\n\r\n"), // 0 |
8682 CreateMockWrite(*req), // 3 | 8743 CreateMockWrite(*req), // 3 |
8683 }; | 8744 }; |
8684 | 8745 |
8685 const char kCONNECTResponse[] = "HTTP/1.1 200 Connected\r\n\r\n"; | 8746 const char kCONNECTResponse[] = "HTTP/1.1 200 Connected\r\n\r\n"; |
8686 | 8747 |
8687 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 8748 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
8688 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 8749 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
8689 MockRead spdy_reads[] = { | 8750 MockRead spdy_reads[] = { |
8690 MockRead(ASYNC, kCONNECTResponse, arraysize(kCONNECTResponse) - 1, 1), // 1 | 8751 MockRead(ASYNC, kCONNECTResponse, arraysize(kCONNECTResponse) - 1, 1), // 1 |
8691 CreateMockRead(*resp.get(), 4), // 2, 4 | 8752 CreateMockRead(*resp.get(), 4), // 2, 4 |
8692 CreateMockRead(*data.get(), 4), // 5 | 8753 CreateMockRead(*data.get(), 4), // 5 |
8693 MockRead(ASYNC, 0, 0, 4), // 6 | 8754 MockRead(ASYNC, 0, 0, 4), // 6 |
8694 }; | 8755 }; |
8695 | 8756 |
8696 OrderedSocketData spdy_data( | 8757 OrderedSocketData spdy_data( |
8697 spdy_reads, arraysize(spdy_reads), | 8758 spdy_reads, arraysize(spdy_reads), |
8698 spdy_writes, arraysize(spdy_writes)); | 8759 spdy_writes, arraysize(spdy_writes)); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8747 capturing_proxy_resolver->resolved()[0].spec()); | 8808 capturing_proxy_resolver->resolved()[0].spec()); |
8748 EXPECT_EQ("https://www.google.com/", | 8809 EXPECT_EQ("https://www.google.com/", |
8749 capturing_proxy_resolver->resolved()[1].spec()); | 8810 capturing_proxy_resolver->resolved()[1].spec()); |
8750 | 8811 |
8751 LoadTimingInfo load_timing_info; | 8812 LoadTimingInfo load_timing_info; |
8752 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 8813 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
8753 TestLoadTimingNotReusedWithPac(load_timing_info, | 8814 TestLoadTimingNotReusedWithPac(load_timing_info, |
8754 CONNECT_TIMING_HAS_SSL_TIMES); | 8815 CONNECT_TIMING_HAS_SSL_TIMES); |
8755 } | 8816 } |
8756 | 8817 |
8757 TEST_F(HttpNetworkTransactionSpdy2Test, | 8818 TEST_P(HttpNetworkTransactionTest, |
8758 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { | 8819 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { |
| 8820 if (GetParam() > kProtoSPDY3) |
| 8821 return; |
| 8822 |
8759 HttpStreamFactory::set_use_alternate_protocols(true); | 8823 HttpStreamFactory::set_use_alternate_protocols(true); |
8760 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8824 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
8761 | 8825 |
8762 HttpRequestInfo request; | 8826 HttpRequestInfo request; |
8763 request.method = "GET"; | 8827 request.method = "GET"; |
8764 request.url = GURL("http://www.google.com/"); | 8828 request.url = GURL("http://www.google.com/"); |
8765 request.load_flags = 0; | 8829 request.load_flags = 0; |
8766 | 8830 |
8767 MockRead data_reads[] = { | 8831 MockRead data_reads[] = { |
8768 MockRead("HTTP/1.1 200 OK\r\n"), | 8832 MockRead("HTTP/1.1 200 OK\r\n"), |
8769 MockRead(kAlternateProtocolHttpHeader), | 8833 MockRead(kAlternateProtocolHttpHeader), |
8770 MockRead("hello world"), | 8834 MockRead("hello world"), |
8771 MockRead(ASYNC, OK), | 8835 MockRead(ASYNC, OK), |
8772 }; | 8836 }; |
8773 | 8837 |
8774 StaticSocketDataProvider first_transaction( | 8838 StaticSocketDataProvider first_transaction( |
8775 data_reads, arraysize(data_reads), NULL, 0); | 8839 data_reads, arraysize(data_reads), NULL, 0); |
8776 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); | 8840 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
8777 | 8841 |
8778 SSLSocketDataProvider ssl(ASYNC, OK); | 8842 SSLSocketDataProvider ssl(ASYNC, OK); |
8779 ssl.SetNextProto(kProtoSPDY2); | 8843 ssl.SetNextProto(GetParam()); |
8780 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8844 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
8781 | 8845 |
8782 scoped_ptr<SpdyFrame> req( | 8846 scoped_ptr<SpdyFrame> req( |
8783 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 8847 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
8784 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 8848 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
8785 | 8849 |
8786 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 8850 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
8787 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 8851 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
8788 MockRead spdy_reads[] = { | 8852 MockRead spdy_reads[] = { |
8789 CreateMockRead(*resp), | 8853 CreateMockRead(*resp), |
8790 CreateMockRead(*data), | 8854 CreateMockRead(*data), |
8791 MockRead(ASYNC, 0, 0), | 8855 MockRead(ASYNC, 0, 0), |
8792 }; | 8856 }; |
8793 | 8857 |
8794 DelayedSocketData spdy_data( | 8858 DelayedSocketData spdy_data( |
8795 1, // wait for one write to finish before reading. | 8859 1, // wait for one write to finish before reading. |
8796 spdy_reads, arraysize(spdy_reads), | 8860 spdy_reads, arraysize(spdy_reads), |
8797 spdy_writes, arraysize(spdy_writes)); | 8861 spdy_writes, arraysize(spdy_writes)); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8884 // - Non-authenticating and authenticating backend. | 8948 // - Non-authenticating and authenticating backend. |
8885 // | 8949 // |
8886 // In all, there are 44 reasonable permuations (for example, if there are | 8950 // In all, there are 44 reasonable permuations (for example, if there are |
8887 // problems generating an auth token for an authenticating proxy, we don't | 8951 // problems generating an auth token for an authenticating proxy, we don't |
8888 // need to test all permutations of the backend server). | 8952 // need to test all permutations of the backend server). |
8889 // | 8953 // |
8890 // The test proceeds by going over each of the configuration cases, and | 8954 // The test proceeds by going over each of the configuration cases, and |
8891 // potentially running up to three rounds in each of the tests. The TestConfig | 8955 // potentially running up to three rounds in each of the tests. The TestConfig |
8892 // specifies both the configuration for the test as well as the expectations | 8956 // specifies both the configuration for the test as well as the expectations |
8893 // for the results. | 8957 // for the results. |
8894 TEST_F(HttpNetworkTransactionSpdy2Test, GenerateAuthToken) { | 8958 TEST_P(HttpNetworkTransactionTest, GenerateAuthToken) { |
8895 static const char kServer[] = "http://www.example.com"; | 8959 static const char kServer[] = "http://www.example.com"; |
8896 static const char kSecureServer[] = "https://www.example.com"; | 8960 static const char kSecureServer[] = "https://www.example.com"; |
8897 static const char kProxy[] = "myproxy:70"; | 8961 static const char kProxy[] = "myproxy:70"; |
8898 const int kAuthErr = ERR_INVALID_AUTH_CREDENTIALS; | 8962 const int kAuthErr = ERR_INVALID_AUTH_CREDENTIALS; |
8899 | 8963 |
8900 enum AuthTiming { | 8964 enum AuthTiming { |
8901 AUTH_NONE, | 8965 AUTH_NONE, |
8902 AUTH_SYNC, | 8966 AUTH_SYNC, |
8903 AUTH_ASYNC, | 8967 AUTH_ASYNC, |
8904 }; | 8968 }; |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9282 } | 9346 } |
9283 if (round + 1 < test_config.num_auth_rounds) { | 9347 if (round + 1 < test_config.num_auth_rounds) { |
9284 EXPECT_FALSE(response->auth_challenge.get() == NULL); | 9348 EXPECT_FALSE(response->auth_challenge.get() == NULL); |
9285 } else { | 9349 } else { |
9286 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 9350 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
9287 } | 9351 } |
9288 } | 9352 } |
9289 } | 9353 } |
9290 } | 9354 } |
9291 | 9355 |
9292 TEST_F(HttpNetworkTransactionSpdy2Test, MultiRoundAuth) { | 9356 TEST_P(HttpNetworkTransactionTest, MultiRoundAuth) { |
9293 // Do multi-round authentication and make sure it works correctly. | 9357 // Do multi-round authentication and make sure it works correctly. |
9294 HttpAuthHandlerMock::Factory* auth_factory( | 9358 HttpAuthHandlerMock::Factory* auth_factory( |
9295 new HttpAuthHandlerMock::Factory()); | 9359 new HttpAuthHandlerMock::Factory()); |
9296 session_deps_.http_auth_handler_factory.reset(auth_factory); | 9360 session_deps_.http_auth_handler_factory.reset(auth_factory); |
9297 session_deps_.proxy_service.reset(ProxyService::CreateDirect()); | 9361 session_deps_.proxy_service.reset(ProxyService::CreateDirect()); |
9298 session_deps_.host_resolver->rules()->AddRule("www.example.com", "10.0.0.1"); | 9362 session_deps_.host_resolver->rules()->AddRule("www.example.com", "10.0.0.1"); |
9299 session_deps_.host_resolver->set_synchronous_mode(true); | 9363 session_deps_.host_resolver->set_synchronous_mode(true); |
9300 | 9364 |
9301 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); | 9365 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); |
9302 auth_handler->set_connection_based(true); | 9366 auth_handler->set_connection_based(true); |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9470 EXPECT_EQ(3, rv); | 9534 EXPECT_EQ(3, rv); |
9471 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); | 9535 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); |
9472 EXPECT_EQ(0, rv); | 9536 EXPECT_EQ(0, rv); |
9473 | 9537 |
9474 // Finally, the socket is released to the group. | 9538 // Finally, the socket is released to the group. |
9475 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 9539 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
9476 } | 9540 } |
9477 | 9541 |
9478 // This tests the case that a request is issued via http instead of spdy after | 9542 // This tests the case that a request is issued via http instead of spdy after |
9479 // npn is negotiated. | 9543 // npn is negotiated. |
9480 TEST_F(HttpNetworkTransactionSpdy2Test, NpnWithHttpOverSSL) { | 9544 TEST_P(HttpNetworkTransactionTest, NpnWithHttpOverSSL) { |
9481 HttpStreamFactory::set_use_alternate_protocols(true); | 9545 HttpStreamFactory::set_use_alternate_protocols(true); |
9482 HttpStreamFactory::SetNextProtos( | 9546 HttpStreamFactory::SetNextProtos( |
9483 MakeNextProtos("http/1.1", "http1.1", NULL)); | 9547 MakeNextProtos("http/1.1", "http1.1", NULL)); |
9484 HttpRequestInfo request; | 9548 HttpRequestInfo request; |
9485 request.method = "GET"; | 9549 request.method = "GET"; |
9486 request.url = GURL("https://www.google.com/"); | 9550 request.url = GURL("https://www.google.com/"); |
9487 request.load_flags = 0; | 9551 request.load_flags = 0; |
9488 | 9552 |
9489 MockWrite data_writes[] = { | 9553 MockWrite data_writes[] = { |
9490 MockWrite("GET / HTTP/1.1\r\n" | 9554 MockWrite("GET / HTTP/1.1\r\n" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9527 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 9591 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
9528 | 9592 |
9529 std::string response_data; | 9593 std::string response_data; |
9530 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 9594 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
9531 EXPECT_EQ("hello world", response_data); | 9595 EXPECT_EQ("hello world", response_data); |
9532 | 9596 |
9533 EXPECT_FALSE(response->was_fetched_via_spdy); | 9597 EXPECT_FALSE(response->was_fetched_via_spdy); |
9534 EXPECT_TRUE(response->was_npn_negotiated); | 9598 EXPECT_TRUE(response->was_npn_negotiated); |
9535 } | 9599 } |
9536 | 9600 |
9537 TEST_F(HttpNetworkTransactionSpdy2Test, SpdyPostNPNServerHangup) { | 9601 TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { |
9538 // Simulate the SSL handshake completing with an NPN negotiation | 9602 // Simulate the SSL handshake completing with an NPN negotiation |
9539 // followed by an immediate server closing of the socket. | 9603 // followed by an immediate server closing of the socket. |
9540 // Fix crash: http://crbug.com/46369 | 9604 // Fix crash: http://crbug.com/46369 |
9541 HttpStreamFactory::set_use_alternate_protocols(true); | 9605 HttpStreamFactory::set_use_alternate_protocols(true); |
9542 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 9606 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
9543 | 9607 |
9544 HttpRequestInfo request; | 9608 HttpRequestInfo request; |
9545 request.method = "GET"; | 9609 request.method = "GET"; |
9546 request.url = GURL("https://www.google.com/"); | 9610 request.url = GURL("https://www.google.com/"); |
9547 request.load_flags = 0; | 9611 request.load_flags = 0; |
9548 | 9612 |
9549 SSLSocketDataProvider ssl(ASYNC, OK); | 9613 SSLSocketDataProvider ssl(ASYNC, OK); |
9550 ssl.SetNextProto(kProtoSPDY2); | 9614 ssl.SetNextProto(GetParam()); |
9551 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 9615 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
9552 | 9616 |
9553 scoped_ptr<SpdyFrame> req( | 9617 scoped_ptr<SpdyFrame> req( |
9554 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 9618 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
9555 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 9619 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
9556 | 9620 |
9557 MockRead spdy_reads[] = { | 9621 MockRead spdy_reads[] = { |
9558 MockRead(SYNCHRONOUS, 0, 0) // Not async - return 0 immediately. | 9622 MockRead(SYNCHRONOUS, 0, 0) // Not async - return 0 immediately. |
9559 }; | 9623 }; |
9560 | 9624 |
9561 DelayedSocketData spdy_data( | 9625 DelayedSocketData spdy_data( |
9562 0, // don't wait in this case, immediate hangup. | 9626 0, // don't wait in this case, immediate hangup. |
9563 spdy_reads, arraysize(spdy_reads), | 9627 spdy_reads, arraysize(spdy_reads), |
9564 spdy_writes, arraysize(spdy_writes)); | 9628 spdy_writes, arraysize(spdy_writes)); |
9565 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 9629 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
9566 | 9630 |
9567 TestCompletionCallback callback; | 9631 TestCompletionCallback callback; |
9568 | 9632 |
9569 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9633 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9570 scoped_ptr<HttpTransaction> trans( | 9634 scoped_ptr<HttpTransaction> trans( |
9571 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9635 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9572 | 9636 |
9573 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9637 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9574 EXPECT_EQ(ERR_IO_PENDING, rv); | 9638 EXPECT_EQ(ERR_IO_PENDING, rv); |
9575 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 9639 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); |
9576 } | 9640 } |
9577 | 9641 |
9578 TEST_F(HttpNetworkTransactionSpdy2Test, SpdyAlternateProtocolThroughProxy) { | 9642 TEST_P(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) { |
| 9643 if (GetParam() > kProtoSPDY3) |
| 9644 return; |
| 9645 |
9579 // This test ensures that the URL passed into the proxy is upgraded | 9646 // This test ensures that the URL passed into the proxy is upgraded |
9580 // to https when doing an Alternate Protocol upgrade. | 9647 // to https when doing an Alternate Protocol upgrade. |
9581 HttpStreamFactory::set_use_alternate_protocols(true); | 9648 HttpStreamFactory::set_use_alternate_protocols(true); |
9582 HttpStreamFactory::SetNextProtos( | 9649 HttpStreamFactory::SetNextProtos( |
9583 MakeNextProtos( | 9650 MakeNextProtos( |
9584 "http/1.1", "http1.1", "spdy/2", "spdy", NULL)); | 9651 "http/1.1", "http1.1", "spdy/2", "spdy", NULL)); |
9585 | 9652 |
9586 session_deps_.proxy_service.reset( | 9653 session_deps_.proxy_service.reset( |
9587 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); | 9654 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); |
9588 CapturingNetLog net_log; | 9655 CapturingNetLog net_log; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9628 // to obtain a new one. | 9695 // to obtain a new one. |
9629 // | 9696 // |
9630 // NOTE: Originally, the proxy response to the second CONNECT request | 9697 // NOTE: Originally, the proxy response to the second CONNECT request |
9631 // simply returned another 407 so the unit test could skip the SSL connection | 9698 // simply returned another 407 so the unit test could skip the SSL connection |
9632 // establishment and SPDY framing issues. Alas, the | 9699 // establishment and SPDY framing issues. Alas, the |
9633 // retry-http-when-alternate-protocol fails logic kicks in, which was more | 9700 // retry-http-when-alternate-protocol fails logic kicks in, which was more |
9634 // complicated to set up expectations for than the SPDY session. | 9701 // complicated to set up expectations for than the SPDY session. |
9635 | 9702 |
9636 scoped_ptr<SpdyFrame> req( | 9703 scoped_ptr<SpdyFrame> req( |
9637 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 9704 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
9638 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 9705 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
9639 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 9706 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
9640 | 9707 |
9641 MockWrite data_writes_2[] = { | 9708 MockWrite data_writes_2[] = { |
9642 // First connection attempt without Proxy-Authorization. | 9709 // First connection attempt without Proxy-Authorization. |
9643 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 9710 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
9644 "Host: www.google.com\r\n" | 9711 "Host: www.google.com\r\n" |
9645 "Proxy-Connection: keep-alive\r\n" | 9712 "Proxy-Connection: keep-alive\r\n" |
9646 "\r\n"), | 9713 "\r\n"), |
9647 | 9714 |
9648 // Second connection attempt with Proxy-Authorization. | 9715 // Second connection attempt with Proxy-Authorization. |
9649 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 9716 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
(...skipping 23 matching lines...) Expand all Loading... |
9673 // SPDY response | 9740 // SPDY response |
9674 CreateMockRead(*resp.get(), 6), | 9741 CreateMockRead(*resp.get(), 6), |
9675 CreateMockRead(*data.get(), 6), | 9742 CreateMockRead(*data.get(), 6), |
9676 MockRead(ASYNC, 0, 0, 6), | 9743 MockRead(ASYNC, 0, 0, 6), |
9677 }; | 9744 }; |
9678 OrderedSocketData data_2( | 9745 OrderedSocketData data_2( |
9679 data_reads_2, arraysize(data_reads_2), | 9746 data_reads_2, arraysize(data_reads_2), |
9680 data_writes_2, arraysize(data_writes_2)); | 9747 data_writes_2, arraysize(data_writes_2)); |
9681 | 9748 |
9682 SSLSocketDataProvider ssl(ASYNC, OK); | 9749 SSLSocketDataProvider ssl(ASYNC, OK); |
9683 ssl.SetNextProto(kProtoSPDY2); | 9750 ssl.SetNextProto(GetParam()); |
9684 | 9751 |
9685 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 9752 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
9686 StaticSocketDataProvider hanging_non_alternate_protocol_socket( | 9753 StaticSocketDataProvider hanging_non_alternate_protocol_socket( |
9687 NULL, 0, NULL, 0); | 9754 NULL, 0, NULL, 0); |
9688 hanging_non_alternate_protocol_socket.set_connect_data( | 9755 hanging_non_alternate_protocol_socket.set_connect_data( |
9689 never_finishing_connect); | 9756 never_finishing_connect); |
9690 | 9757 |
9691 session_deps_.socket_factory->AddSocketDataProvider(&data_1); | 9758 session_deps_.socket_factory->AddSocketDataProvider(&data_1); |
9692 session_deps_.socket_factory->AddSocketDataProvider(&data_2); | 9759 session_deps_.socket_factory->AddSocketDataProvider(&data_2); |
9693 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 9760 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9728 EXPECT_EQ("www.google.com", request_url.host()); | 9795 EXPECT_EQ("www.google.com", request_url.host()); |
9729 | 9796 |
9730 LoadTimingInfo load_timing_info; | 9797 LoadTimingInfo load_timing_info; |
9731 EXPECT_TRUE(trans_2->GetLoadTimingInfo(&load_timing_info)); | 9798 EXPECT_TRUE(trans_2->GetLoadTimingInfo(&load_timing_info)); |
9732 TestLoadTimingNotReusedWithPac(load_timing_info, | 9799 TestLoadTimingNotReusedWithPac(load_timing_info, |
9733 CONNECT_TIMING_HAS_SSL_TIMES); | 9800 CONNECT_TIMING_HAS_SSL_TIMES); |
9734 } | 9801 } |
9735 | 9802 |
9736 // Test that if we cancel the transaction as the connection is completing, that | 9803 // Test that if we cancel the transaction as the connection is completing, that |
9737 // everything tears down correctly. | 9804 // everything tears down correctly. |
9738 TEST_F(HttpNetworkTransactionSpdy2Test, SimpleCancel) { | 9805 TEST_P(HttpNetworkTransactionTest, SimpleCancel) { |
9739 // Setup everything about the connection to complete synchronously, so that | 9806 // Setup everything about the connection to complete synchronously, so that |
9740 // after calling HttpNetworkTransaction::Start, the only thing we're waiting | 9807 // after calling HttpNetworkTransaction::Start, the only thing we're waiting |
9741 // for is the callback from the HttpStreamRequest. | 9808 // for is the callback from the HttpStreamRequest. |
9742 // Then cancel the transaction. | 9809 // Then cancel the transaction. |
9743 // Verify that we don't crash. | 9810 // Verify that we don't crash. |
9744 MockConnect mock_connect(SYNCHRONOUS, OK); | 9811 MockConnect mock_connect(SYNCHRONOUS, OK); |
9745 MockRead data_reads[] = { | 9812 MockRead data_reads[] = { |
9746 MockRead(SYNCHRONOUS, "HTTP/1.0 200 OK\r\n\r\n"), | 9813 MockRead(SYNCHRONOUS, "HTTP/1.0 200 OK\r\n\r\n"), |
9747 MockRead(SYNCHRONOUS, "hello world"), | 9814 MockRead(SYNCHRONOUS, "hello world"), |
9748 MockRead(SYNCHRONOUS, OK), | 9815 MockRead(SYNCHRONOUS, OK), |
(...skipping 17 matching lines...) Expand all Loading... |
9766 | 9833 |
9767 CapturingBoundNetLog log; | 9834 CapturingBoundNetLog log; |
9768 int rv = trans->Start(&request, callback.callback(), log.bound()); | 9835 int rv = trans->Start(&request, callback.callback(), log.bound()); |
9769 EXPECT_EQ(ERR_IO_PENDING, rv); | 9836 EXPECT_EQ(ERR_IO_PENDING, rv); |
9770 trans.reset(); // Cancel the transaction here. | 9837 trans.reset(); // Cancel the transaction here. |
9771 | 9838 |
9772 base::MessageLoop::current()->RunUntilIdle(); | 9839 base::MessageLoop::current()->RunUntilIdle(); |
9773 } | 9840 } |
9774 | 9841 |
9775 // Test a basic GET request through a proxy. | 9842 // Test a basic GET request through a proxy. |
9776 TEST_F(HttpNetworkTransactionSpdy2Test, ProxyGet) { | 9843 TEST_P(HttpNetworkTransactionTest, ProxyGet) { |
9777 session_deps_.proxy_service.reset( | 9844 session_deps_.proxy_service.reset( |
9778 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); | 9845 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); |
9779 CapturingBoundNetLog log; | 9846 CapturingBoundNetLog log; |
9780 session_deps_.net_log = log.bound().net_log(); | 9847 session_deps_.net_log = log.bound().net_log(); |
9781 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9848 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9782 | 9849 |
9783 HttpRequestInfo request; | 9850 HttpRequestInfo request; |
9784 request.method = "GET"; | 9851 request.method = "GET"; |
9785 request.url = GURL("http://www.google.com/"); | 9852 request.url = GURL("http://www.google.com/"); |
9786 | 9853 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9821 EXPECT_TRUE(response->was_fetched_via_proxy); | 9888 EXPECT_TRUE(response->was_fetched_via_proxy); |
9822 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 9889 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
9823 | 9890 |
9824 LoadTimingInfo load_timing_info; | 9891 LoadTimingInfo load_timing_info; |
9825 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 9892 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
9826 TestLoadTimingNotReusedWithPac(load_timing_info, | 9893 TestLoadTimingNotReusedWithPac(load_timing_info, |
9827 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 9894 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
9828 } | 9895 } |
9829 | 9896 |
9830 // Test a basic HTTPS GET request through a proxy. | 9897 // Test a basic HTTPS GET request through a proxy. |
9831 TEST_F(HttpNetworkTransactionSpdy2Test, ProxyTunnelGet) { | 9898 TEST_P(HttpNetworkTransactionTest, ProxyTunnelGet) { |
9832 session_deps_.proxy_service.reset( | 9899 session_deps_.proxy_service.reset( |
9833 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); | 9900 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); |
9834 CapturingBoundNetLog log; | 9901 CapturingBoundNetLog log; |
9835 session_deps_.net_log = log.bound().net_log(); | 9902 session_deps_.net_log = log.bound().net_log(); |
9836 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9903 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9837 | 9904 |
9838 HttpRequestInfo request; | 9905 HttpRequestInfo request; |
9839 request.method = "GET"; | 9906 request.method = "GET"; |
9840 request.url = GURL("https://www.google.com/"); | 9907 request.url = GURL("https://www.google.com/"); |
9841 | 9908 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9895 EXPECT_TRUE(response->was_fetched_via_proxy); | 9962 EXPECT_TRUE(response->was_fetched_via_proxy); |
9896 | 9963 |
9897 LoadTimingInfo load_timing_info; | 9964 LoadTimingInfo load_timing_info; |
9898 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 9965 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
9899 TestLoadTimingNotReusedWithPac(load_timing_info, | 9966 TestLoadTimingNotReusedWithPac(load_timing_info, |
9900 CONNECT_TIMING_HAS_SSL_TIMES); | 9967 CONNECT_TIMING_HAS_SSL_TIMES); |
9901 } | 9968 } |
9902 | 9969 |
9903 // Test a basic HTTPS GET request through a proxy, but the server hangs up | 9970 // Test a basic HTTPS GET request through a proxy, but the server hangs up |
9904 // while establishing the tunnel. | 9971 // while establishing the tunnel. |
9905 TEST_F(HttpNetworkTransactionSpdy2Test, ProxyTunnelGetHangup) { | 9972 TEST_P(HttpNetworkTransactionTest, ProxyTunnelGetHangup) { |
9906 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 9973 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
9907 CapturingBoundNetLog log; | 9974 CapturingBoundNetLog log; |
9908 session_deps_.net_log = log.bound().net_log(); | 9975 session_deps_.net_log = log.bound().net_log(); |
9909 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9976 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9910 | 9977 |
9911 HttpRequestInfo request; | 9978 HttpRequestInfo request; |
9912 request.method = "GET"; | 9979 request.method = "GET"; |
9913 request.url = GURL("https://www.google.com/"); | 9980 request.url = GURL("https://www.google.com/"); |
9914 | 9981 |
9915 // Since we have proxy, should try to establish tunnel. | 9982 // Since we have proxy, should try to establish tunnel. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9950 size_t pos = ExpectLogContainsSomewhere( | 10017 size_t pos = ExpectLogContainsSomewhere( |
9951 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 10018 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
9952 NetLog::PHASE_NONE); | 10019 NetLog::PHASE_NONE); |
9953 ExpectLogContainsSomewhere( | 10020 ExpectLogContainsSomewhere( |
9954 entries, pos, | 10021 entries, pos, |
9955 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 10022 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
9956 NetLog::PHASE_NONE); | 10023 NetLog::PHASE_NONE); |
9957 } | 10024 } |
9958 | 10025 |
9959 // Test for crbug.com/55424. | 10026 // Test for crbug.com/55424. |
9960 TEST_F(HttpNetworkTransactionSpdy2Test, PreconnectWithExistingSpdySession) { | 10027 TEST_P(HttpNetworkTransactionTest, PreconnectWithExistingSpdySession) { |
| 10028 if (GetParam() > kProtoSPDY3) |
| 10029 return; |
9961 | 10030 |
9962 scoped_ptr<SpdyFrame> req( | 10031 scoped_ptr<SpdyFrame> req( |
9963 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); | 10032 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); |
9964 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 10033 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
9965 | 10034 |
9966 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 10035 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
9967 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 10036 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
9968 MockRead spdy_reads[] = { | 10037 MockRead spdy_reads[] = { |
9969 CreateMockRead(*resp), | 10038 CreateMockRead(*resp), |
9970 CreateMockRead(*data), | 10039 CreateMockRead(*data), |
9971 MockRead(ASYNC, 0, 0), | 10040 MockRead(ASYNC, 0, 0), |
9972 }; | 10041 }; |
9973 | 10042 |
9974 DelayedSocketData spdy_data( | 10043 DelayedSocketData spdy_data( |
9975 1, // wait for one write to finish before reading. | 10044 1, // wait for one write to finish before reading. |
9976 spdy_reads, arraysize(spdy_reads), | 10045 spdy_reads, arraysize(spdy_reads), |
9977 spdy_writes, arraysize(spdy_writes)); | 10046 spdy_writes, arraysize(spdy_writes)); |
9978 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 10047 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
9979 | 10048 |
9980 SSLSocketDataProvider ssl(ASYNC, OK); | 10049 SSLSocketDataProvider ssl(ASYNC, OK); |
9981 ssl.SetNextProto(kProtoSPDY2); | 10050 ssl.SetNextProto(GetParam()); |
9982 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10051 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
9983 | 10052 |
9984 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10053 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9985 | 10054 |
9986 // Set up an initial SpdySession in the pool to reuse. | 10055 // Set up an initial SpdySession in the pool to reuse. |
9987 HostPortPair host_port_pair("www.google.com", 443); | 10056 HostPortPair host_port_pair("www.google.com", 443); |
9988 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 10057 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
9989 kPrivacyModeDisabled); | 10058 kPrivacyModeDisabled); |
9990 scoped_refptr<SpdySession> spdy_session = | 10059 scoped_refptr<SpdySession> spdy_session = |
9991 session->spdy_session_pool()->Get(key, BoundNetLog()); | 10060 session->spdy_session_pool()->Get(key, BoundNetLog()); |
(...skipping 25 matching lines...) Expand all Loading... |
10017 scoped_ptr<HttpTransaction> trans( | 10086 scoped_ptr<HttpTransaction> trans( |
10018 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10087 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10019 | 10088 |
10020 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10089 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
10021 EXPECT_EQ(ERR_IO_PENDING, rv); | 10090 EXPECT_EQ(ERR_IO_PENDING, rv); |
10022 EXPECT_EQ(OK, callback.WaitForResult()); | 10091 EXPECT_EQ(OK, callback.WaitForResult()); |
10023 } | 10092 } |
10024 | 10093 |
10025 // Given a net error, cause that error to be returned from the first Write() | 10094 // Given a net error, cause that error to be returned from the first Write() |
10026 // call and verify that the HttpTransaction fails with that error. | 10095 // call and verify that the HttpTransaction fails with that error. |
10027 void HttpNetworkTransactionSpdy2Test::CheckErrorIsPassedBack( | 10096 void HttpNetworkTransactionTest::CheckErrorIsPassedBack( |
10028 int error, IoMode mode) { | 10097 int error, IoMode mode) { |
10029 net::HttpRequestInfo request_info; | 10098 net::HttpRequestInfo request_info; |
10030 request_info.url = GURL("https://www.example.com/"); | 10099 request_info.url = GURL("https://www.example.com/"); |
10031 request_info.method = "GET"; | 10100 request_info.method = "GET"; |
10032 request_info.load_flags = net::LOAD_NORMAL; | 10101 request_info.load_flags = net::LOAD_NORMAL; |
10033 | 10102 |
10034 SSLSocketDataProvider ssl_data(mode, OK); | 10103 SSLSocketDataProvider ssl_data(mode, OK); |
10035 net::MockWrite data_writes[] = { | 10104 net::MockWrite data_writes[] = { |
10036 net::MockWrite(mode, error), | 10105 net::MockWrite(mode, error), |
10037 }; | 10106 }; |
10038 net::StaticSocketDataProvider data(NULL, 0, | 10107 net::StaticSocketDataProvider data(NULL, 0, |
10039 data_writes, arraysize(data_writes)); | 10108 data_writes, arraysize(data_writes)); |
10040 session_deps_.socket_factory->AddSocketDataProvider(&data); | 10109 session_deps_.socket_factory->AddSocketDataProvider(&data); |
10041 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data); | 10110 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data); |
10042 | 10111 |
10043 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10112 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10044 scoped_ptr<HttpTransaction> trans( | 10113 scoped_ptr<HttpTransaction> trans( |
10045 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10114 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10046 | 10115 |
10047 TestCompletionCallback callback; | 10116 TestCompletionCallback callback; |
10048 int rv = trans->Start(&request_info, callback.callback(), net::BoundNetLog()); | 10117 int rv = trans->Start(&request_info, callback.callback(), net::BoundNetLog()); |
10049 if (rv == net::ERR_IO_PENDING) | 10118 if (rv == net::ERR_IO_PENDING) |
10050 rv = callback.WaitForResult(); | 10119 rv = callback.WaitForResult(); |
10051 ASSERT_EQ(error, rv); | 10120 ASSERT_EQ(error, rv); |
10052 } | 10121 } |
10053 | 10122 |
10054 TEST_F(HttpNetworkTransactionSpdy2Test, SSLWriteCertError) { | 10123 TEST_P(HttpNetworkTransactionTest, SSLWriteCertError) { |
10055 // Just check a grab bag of cert errors. | 10124 // Just check a grab bag of cert errors. |
10056 static const int kErrors[] = { | 10125 static const int kErrors[] = { |
10057 ERR_CERT_COMMON_NAME_INVALID, | 10126 ERR_CERT_COMMON_NAME_INVALID, |
10058 ERR_CERT_AUTHORITY_INVALID, | 10127 ERR_CERT_AUTHORITY_INVALID, |
10059 ERR_CERT_DATE_INVALID, | 10128 ERR_CERT_DATE_INVALID, |
10060 }; | 10129 }; |
10061 for (size_t i = 0; i < arraysize(kErrors); i++) { | 10130 for (size_t i = 0; i < arraysize(kErrors); i++) { |
10062 CheckErrorIsPassedBack(kErrors[i], ASYNC); | 10131 CheckErrorIsPassedBack(kErrors[i], ASYNC); |
10063 CheckErrorIsPassedBack(kErrors[i], SYNCHRONOUS); | 10132 CheckErrorIsPassedBack(kErrors[i], SYNCHRONOUS); |
10064 } | 10133 } |
10065 } | 10134 } |
10066 | 10135 |
10067 // Ensure that a client certificate is removed from the SSL client auth | 10136 // Ensure that a client certificate is removed from the SSL client auth |
10068 // cache when: | 10137 // cache when: |
10069 // 1) No proxy is involved. | 10138 // 1) No proxy is involved. |
10070 // 2) TLS False Start is disabled. | 10139 // 2) TLS False Start is disabled. |
10071 // 3) The initial TLS handshake requests a client certificate. | 10140 // 3) The initial TLS handshake requests a client certificate. |
10072 // 4) The client supplies an invalid/unacceptable certificate. | 10141 // 4) The client supplies an invalid/unacceptable certificate. |
10073 TEST_F(HttpNetworkTransactionSpdy2Test, | 10142 TEST_P(HttpNetworkTransactionTest, |
10074 ClientAuthCertCache_Direct_NoFalseStart) { | 10143 ClientAuthCertCache_Direct_NoFalseStart) { |
10075 net::HttpRequestInfo request_info; | 10144 net::HttpRequestInfo request_info; |
10076 request_info.url = GURL("https://www.example.com/"); | 10145 request_info.url = GURL("https://www.example.com/"); |
10077 request_info.method = "GET"; | 10146 request_info.method = "GET"; |
10078 request_info.load_flags = net::LOAD_NORMAL; | 10147 request_info.load_flags = net::LOAD_NORMAL; |
10079 | 10148 |
10080 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); | 10149 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); |
10081 cert_request->host_and_port = "www.example.com:443"; | 10150 cert_request->host_and_port = "www.example.com:443"; |
10082 | 10151 |
10083 // [ssl_]data1 contains the data for the first SSL handshake. When a | 10152 // [ssl_]data1 contains the data for the first SSL handshake. When a |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10173 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("www.example.com:443", | 10242 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("www.example.com:443", |
10174 &client_cert)); | 10243 &client_cert)); |
10175 } | 10244 } |
10176 | 10245 |
10177 // Ensure that a client certificate is removed from the SSL client auth | 10246 // Ensure that a client certificate is removed from the SSL client auth |
10178 // cache when: | 10247 // cache when: |
10179 // 1) No proxy is involved. | 10248 // 1) No proxy is involved. |
10180 // 2) TLS False Start is enabled. | 10249 // 2) TLS False Start is enabled. |
10181 // 3) The initial TLS handshake requests a client certificate. | 10250 // 3) The initial TLS handshake requests a client certificate. |
10182 // 4) The client supplies an invalid/unacceptable certificate. | 10251 // 4) The client supplies an invalid/unacceptable certificate. |
10183 TEST_F(HttpNetworkTransactionSpdy2Test, | 10252 TEST_P(HttpNetworkTransactionTest, |
10184 ClientAuthCertCache_Direct_FalseStart) { | 10253 ClientAuthCertCache_Direct_FalseStart) { |
10185 net::HttpRequestInfo request_info; | 10254 net::HttpRequestInfo request_info; |
10186 request_info.url = GURL("https://www.example.com/"); | 10255 request_info.url = GURL("https://www.example.com/"); |
10187 request_info.method = "GET"; | 10256 request_info.method = "GET"; |
10188 request_info.load_flags = net::LOAD_NORMAL; | 10257 request_info.load_flags = net::LOAD_NORMAL; |
10189 | 10258 |
10190 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); | 10259 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); |
10191 cert_request->host_and_port = "www.example.com:443"; | 10260 cert_request->host_and_port = "www.example.com:443"; |
10192 | 10261 |
10193 // When TLS False Start is used, SSLClientSocket::Connect() calls will | 10262 // When TLS False Start is used, SSLClientSocket::Connect() calls will |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10296 } | 10365 } |
10297 | 10366 |
10298 // Ensure that a client certificate is removed from the SSL client auth | 10367 // Ensure that a client certificate is removed from the SSL client auth |
10299 // cache when: | 10368 // cache when: |
10300 // 1) An HTTPS proxy is involved. | 10369 // 1) An HTTPS proxy is involved. |
10301 // 3) The HTTPS proxy requests a client certificate. | 10370 // 3) The HTTPS proxy requests a client certificate. |
10302 // 4) The client supplies an invalid/unacceptable certificate for the | 10371 // 4) The client supplies an invalid/unacceptable certificate for the |
10303 // proxy. | 10372 // proxy. |
10304 // The test is repeated twice, first for connecting to an HTTPS endpoint, | 10373 // The test is repeated twice, first for connecting to an HTTPS endpoint, |
10305 // then for connecting to an HTTP endpoint. | 10374 // then for connecting to an HTTP endpoint. |
10306 TEST_F(HttpNetworkTransactionSpdy2Test, ClientAuthCertCache_Proxy_Fail) { | 10375 TEST_P(HttpNetworkTransactionTest, ClientAuthCertCache_Proxy_Fail) { |
10307 session_deps_.proxy_service.reset( | 10376 session_deps_.proxy_service.reset( |
10308 ProxyService::CreateFixed("https://proxy:70")); | 10377 ProxyService::CreateFixed("https://proxy:70")); |
10309 CapturingBoundNetLog log; | 10378 CapturingBoundNetLog log; |
10310 session_deps_.net_log = log.bound().net_log(); | 10379 session_deps_.net_log = log.bound().net_log(); |
10311 | 10380 |
10312 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); | 10381 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); |
10313 cert_request->host_and_port = "proxy:70"; | 10382 cert_request->host_and_port = "proxy:70"; |
10314 | 10383 |
10315 // See ClientAuthCertCache_Direct_NoFalseStart for the explanation of | 10384 // See ClientAuthCertCache_Direct_NoFalseStart for the explanation of |
10316 // [ssl_]data[1-3]. Rather than represending the endpoint | 10385 // [ssl_]data[1-3]. Rather than represending the endpoint |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10389 | 10458 |
10390 // Now that the new handshake has failed, ensure that the client | 10459 // Now that the new handshake has failed, ensure that the client |
10391 // certificate was removed from the client auth cache. | 10460 // certificate was removed from the client auth cache. |
10392 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("proxy:70", | 10461 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("proxy:70", |
10393 &client_cert)); | 10462 &client_cert)); |
10394 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("www.example.com:443", | 10463 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("www.example.com:443", |
10395 &client_cert)); | 10464 &client_cert)); |
10396 } | 10465 } |
10397 } | 10466 } |
10398 | 10467 |
| 10468 // Unlike TEST/TEST_F, which are macros that expand to further macros, |
| 10469 // TEST_P is a macro that expands directly to code that stringizes the |
| 10470 // arguments. As a result, macros passed as parameters (such as prefix |
| 10471 // or test_case_name) will not be expanded by the preprocessor. To |
| 10472 // work around this, indirect the macro for TEST_P, so that the |
| 10473 // pre-processor will expand macros such as MAYBE_test_name before |
| 10474 // instantiating the test. |
| 10475 #define WRAPPED_TEST_P(test_case_name, test_name) \ |
| 10476 TEST_P(test_case_name, test_name) |
| 10477 |
10399 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 | 10478 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 |
10400 #if defined(OS_WIN) | 10479 #if defined(OS_WIN) |
10401 #define MAYBE_UseIPConnectionPooling DISABLED_UseIPConnectionPooling | 10480 #define MAYBE_UseIPConnectionPooling DISABLED_UseIPConnectionPooling |
10402 #else | 10481 #else |
10403 #define MAYBE_UseIPConnectionPooling UseIPConnectionPooling | 10482 #define MAYBE_UseIPConnectionPooling UseIPConnectionPooling |
10404 #endif | 10483 #endif |
10405 TEST_F(HttpNetworkTransactionSpdy2Test, MAYBE_UseIPConnectionPooling) { | 10484 WRAPPED_TEST_P(HttpNetworkTransactionTest, MAYBE_UseIPConnectionPooling) { |
| 10485 if (GetParam() > kProtoSPDY3) |
| 10486 return; |
| 10487 |
10406 HttpStreamFactory::set_use_alternate_protocols(true); | 10488 HttpStreamFactory::set_use_alternate_protocols(true); |
10407 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 10489 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
10408 | 10490 |
10409 // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 10491 // Set up a special HttpNetworkSession with a MockCachingHostResolver. |
10410 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 10492 session_deps_.host_resolver.reset(new MockCachingHostResolver()); |
10411 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10493 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10412 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 10494 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
10413 pool_peer.DisableDomainAuthenticationVerification(); | 10495 pool_peer.DisableDomainAuthenticationVerification(); |
10414 | 10496 |
10415 SSLSocketDataProvider ssl(ASYNC, OK); | 10497 SSLSocketDataProvider ssl(ASYNC, OK); |
10416 ssl.SetNextProto(kProtoSPDY2); | 10498 ssl.SetNextProto(GetParam()); |
10417 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10499 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
10418 | 10500 |
10419 scoped_ptr<SpdyFrame> host1_req( | 10501 scoped_ptr<SpdyFrame> host1_req( |
10420 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); | 10502 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); |
10421 scoped_ptr<SpdyFrame> host2_req( | 10503 scoped_ptr<SpdyFrame> host2_req( |
10422 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); | 10504 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); |
10423 MockWrite spdy_writes[] = { | 10505 MockWrite spdy_writes[] = { |
10424 CreateMockWrite(*host1_req, 1), | 10506 CreateMockWrite(*host1_req, 1), |
10425 CreateMockWrite(*host2_req, 4), | 10507 CreateMockWrite(*host2_req, 4), |
10426 }; | 10508 }; |
10427 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 10509 scoped_ptr<SpdyFrame> host1_resp( |
10428 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true)); | 10510 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
10429 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 3)); | 10511 scoped_ptr<SpdyFrame> host1_resp_body( |
10430 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(3, true)); | 10512 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 10513 scoped_ptr<SpdyFrame> host2_resp( |
| 10514 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 10515 scoped_ptr<SpdyFrame> host2_resp_body( |
| 10516 spdy_util_.ConstructSpdyBodyFrame(3, true)); |
10431 MockRead spdy_reads[] = { | 10517 MockRead spdy_reads[] = { |
10432 CreateMockRead(*host1_resp, 2), | 10518 CreateMockRead(*host1_resp, 2), |
10433 CreateMockRead(*host1_resp_body, 3), | 10519 CreateMockRead(*host1_resp_body, 3), |
10434 CreateMockRead(*host2_resp, 5), | 10520 CreateMockRead(*host2_resp, 5), |
10435 CreateMockRead(*host2_resp_body, 6), | 10521 CreateMockRead(*host2_resp_body, 6), |
10436 MockRead(ASYNC, 0, 7), | 10522 MockRead(ASYNC, 0, 7), |
10437 }; | 10523 }; |
10438 | 10524 |
10439 IPAddressNumber ip; | 10525 IPAddressNumber ip; |
10440 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); | 10526 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10491 ASSERT_TRUE(response != NULL); | 10577 ASSERT_TRUE(response != NULL); |
10492 ASSERT_TRUE(response->headers.get() != NULL); | 10578 ASSERT_TRUE(response->headers.get() != NULL); |
10493 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10579 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10494 EXPECT_TRUE(response->was_fetched_via_spdy); | 10580 EXPECT_TRUE(response->was_fetched_via_spdy); |
10495 EXPECT_TRUE(response->was_npn_negotiated); | 10581 EXPECT_TRUE(response->was_npn_negotiated); |
10496 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 10582 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); |
10497 EXPECT_EQ("hello!", response_data); | 10583 EXPECT_EQ("hello!", response_data); |
10498 } | 10584 } |
10499 #undef MAYBE_UseIPConnectionPooling | 10585 #undef MAYBE_UseIPConnectionPooling |
10500 | 10586 |
10501 TEST_F(HttpNetworkTransactionSpdy2Test, UseIPConnectionPoolingAfterResolution) { | 10587 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { |
| 10588 if (GetParam() > kProtoSPDY3) |
| 10589 return; |
| 10590 |
10502 HttpStreamFactory::set_use_alternate_protocols(true); | 10591 HttpStreamFactory::set_use_alternate_protocols(true); |
10503 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 10592 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
10504 | 10593 |
10505 // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 10594 // Set up a special HttpNetworkSession with a MockCachingHostResolver. |
10506 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 10595 session_deps_.host_resolver.reset(new MockCachingHostResolver()); |
10507 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10596 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10508 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 10597 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
10509 pool_peer.DisableDomainAuthenticationVerification(); | 10598 pool_peer.DisableDomainAuthenticationVerification(); |
10510 | 10599 |
10511 SSLSocketDataProvider ssl(ASYNC, OK); | 10600 SSLSocketDataProvider ssl(ASYNC, OK); |
10512 ssl.SetNextProto(kProtoSPDY2); | 10601 ssl.SetNextProto(GetParam()); |
10513 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10602 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
10514 | 10603 |
10515 scoped_ptr<SpdyFrame> host1_req( | 10604 scoped_ptr<SpdyFrame> host1_req( |
10516 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); | 10605 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); |
10517 scoped_ptr<SpdyFrame> host2_req( | 10606 scoped_ptr<SpdyFrame> host2_req( |
10518 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); | 10607 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); |
10519 MockWrite spdy_writes[] = { | 10608 MockWrite spdy_writes[] = { |
10520 CreateMockWrite(*host1_req, 1), | 10609 CreateMockWrite(*host1_req, 1), |
10521 CreateMockWrite(*host2_req, 4), | 10610 CreateMockWrite(*host2_req, 4), |
10522 }; | 10611 }; |
10523 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 10612 scoped_ptr<SpdyFrame> host1_resp( |
10524 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true)); | 10613 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
10525 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 3)); | 10614 scoped_ptr<SpdyFrame> host1_resp_body( |
10526 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(3, true)); | 10615 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 10616 scoped_ptr<SpdyFrame> host2_resp( |
| 10617 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 10618 scoped_ptr<SpdyFrame> host2_resp_body( |
| 10619 spdy_util_.ConstructSpdyBodyFrame(3, true)); |
10527 MockRead spdy_reads[] = { | 10620 MockRead spdy_reads[] = { |
10528 CreateMockRead(*host1_resp, 2), | 10621 CreateMockRead(*host1_resp, 2), |
10529 CreateMockRead(*host1_resp_body, 3), | 10622 CreateMockRead(*host1_resp_body, 3), |
10530 CreateMockRead(*host2_resp, 5), | 10623 CreateMockRead(*host2_resp, 5), |
10531 CreateMockRead(*host2_resp_body, 6), | 10624 CreateMockRead(*host2_resp_body, 6), |
10532 MockRead(ASYNC, 0, 7), | 10625 MockRead(ASYNC, 0, 7), |
10533 }; | 10626 }; |
10534 | 10627 |
10535 IPAddressNumber ip; | 10628 IPAddressNumber ip; |
10536 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); | 10629 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10623 }; | 10716 }; |
10624 | 10717 |
10625 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 | 10718 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 |
10626 #if defined(OS_WIN) | 10719 #if defined(OS_WIN) |
10627 #define MAYBE_UseIPConnectionPoolingWithHostCacheExpiration \ | 10720 #define MAYBE_UseIPConnectionPoolingWithHostCacheExpiration \ |
10628 DISABLED_UseIPConnectionPoolingWithHostCacheExpiration | 10721 DISABLED_UseIPConnectionPoolingWithHostCacheExpiration |
10629 #else | 10722 #else |
10630 #define MAYBE_UseIPConnectionPoolingWithHostCacheExpiration \ | 10723 #define MAYBE_UseIPConnectionPoolingWithHostCacheExpiration \ |
10631 UseIPConnectionPoolingWithHostCacheExpiration | 10724 UseIPConnectionPoolingWithHostCacheExpiration |
10632 #endif | 10725 #endif |
10633 TEST_F(HttpNetworkTransactionSpdy2Test, | 10726 WRAPPED_TEST_P(HttpNetworkTransactionTest, |
10634 MAYBE_UseIPConnectionPoolingWithHostCacheExpiration) { | 10727 MAYBE_UseIPConnectionPoolingWithHostCacheExpiration) { |
| 10728 if (GetParam() > kProtoSPDY3) |
| 10729 return; |
| 10730 |
| 10731 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 . (MAYBE_ |
| 10732 // prefix doesn't work with parametrized tests). |
| 10733 #if defined(OS_WIN) |
| 10734 return; |
| 10735 #endif |
| 10736 |
10635 HttpStreamFactory::set_use_alternate_protocols(true); | 10737 HttpStreamFactory::set_use_alternate_protocols(true); |
10636 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 10738 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
10637 | 10739 |
10638 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. | 10740 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. |
10639 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); | 10741 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); |
10640 HttpNetworkSession::Params params = | 10742 HttpNetworkSession::Params params = |
10641 SpdySessionDependencies::CreateSessionParams(&session_deps_); | 10743 SpdySessionDependencies::CreateSessionParams(&session_deps_); |
10642 params.host_resolver = &host_resolver; | 10744 params.host_resolver = &host_resolver; |
10643 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10745 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10644 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 10746 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
10645 pool_peer.DisableDomainAuthenticationVerification(); | 10747 pool_peer.DisableDomainAuthenticationVerification(); |
10646 | 10748 |
10647 SSLSocketDataProvider ssl(ASYNC, OK); | 10749 SSLSocketDataProvider ssl(ASYNC, OK); |
10648 ssl.SetNextProto(kProtoSPDY2); | 10750 ssl.SetNextProto(GetParam()); |
10649 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10751 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
10650 | 10752 |
10651 scoped_ptr<SpdyFrame> host1_req( | 10753 scoped_ptr<SpdyFrame> host1_req( |
10652 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); | 10754 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); |
10653 scoped_ptr<SpdyFrame> host2_req( | 10755 scoped_ptr<SpdyFrame> host2_req( |
10654 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); | 10756 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); |
10655 MockWrite spdy_writes[] = { | 10757 MockWrite spdy_writes[] = { |
10656 CreateMockWrite(*host1_req, 1), | 10758 CreateMockWrite(*host1_req, 1), |
10657 CreateMockWrite(*host2_req, 4), | 10759 CreateMockWrite(*host2_req, 4), |
10658 }; | 10760 }; |
10659 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 10761 scoped_ptr<SpdyFrame> host1_resp( |
10660 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true)); | 10762 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
10661 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 3)); | 10763 scoped_ptr<SpdyFrame> host1_resp_body( |
10662 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(3, true)); | 10764 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 10765 scoped_ptr<SpdyFrame> host2_resp( |
| 10766 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 10767 scoped_ptr<SpdyFrame> host2_resp_body( |
| 10768 spdy_util_.ConstructSpdyBodyFrame(3, true)); |
10663 MockRead spdy_reads[] = { | 10769 MockRead spdy_reads[] = { |
10664 CreateMockRead(*host1_resp, 2), | 10770 CreateMockRead(*host1_resp, 2), |
10665 CreateMockRead(*host1_resp_body, 3), | 10771 CreateMockRead(*host1_resp_body, 3), |
10666 CreateMockRead(*host2_resp, 5), | 10772 CreateMockRead(*host2_resp, 5), |
10667 CreateMockRead(*host2_resp_body, 6), | 10773 CreateMockRead(*host2_resp_body, 6), |
10668 MockRead(ASYNC, 0, 7), | 10774 MockRead(ASYNC, 0, 7), |
10669 }; | 10775 }; |
10670 | 10776 |
10671 IPAddressNumber ip; | 10777 IPAddressNumber ip; |
10672 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); | 10778 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10721 ASSERT_TRUE(response != NULL); | 10827 ASSERT_TRUE(response != NULL); |
10722 ASSERT_TRUE(response->headers.get() != NULL); | 10828 ASSERT_TRUE(response->headers.get() != NULL); |
10723 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10829 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10724 EXPECT_TRUE(response->was_fetched_via_spdy); | 10830 EXPECT_TRUE(response->was_fetched_via_spdy); |
10725 EXPECT_TRUE(response->was_npn_negotiated); | 10831 EXPECT_TRUE(response->was_npn_negotiated); |
10726 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 10832 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); |
10727 EXPECT_EQ("hello!", response_data); | 10833 EXPECT_EQ("hello!", response_data); |
10728 } | 10834 } |
10729 #undef MAYBE_UseIPConnectionPoolingWithHostCacheExpiration | 10835 #undef MAYBE_UseIPConnectionPoolingWithHostCacheExpiration |
10730 | 10836 |
10731 TEST_F(HttpNetworkTransactionSpdy2Test, ReadPipelineEvictionFallback) { | 10837 TEST_P(HttpNetworkTransactionTest, ReadPipelineEvictionFallback) { |
10732 MockRead data_reads1[] = { | 10838 MockRead data_reads1[] = { |
10733 MockRead(SYNCHRONOUS, ERR_PIPELINE_EVICTION), | 10839 MockRead(SYNCHRONOUS, ERR_PIPELINE_EVICTION), |
10734 }; | 10840 }; |
10735 MockRead data_reads2[] = { | 10841 MockRead data_reads2[] = { |
10736 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 10842 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
10737 MockRead("hello world"), | 10843 MockRead("hello world"), |
10738 MockRead(SYNCHRONOUS, OK), | 10844 MockRead(SYNCHRONOUS, OK), |
10739 }; | 10845 }; |
10740 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), NULL, 0); | 10846 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), NULL, 0); |
10741 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), NULL, 0); | 10847 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), NULL, 0); |
10742 StaticSocketDataProvider* data[] = { &data1, &data2 }; | 10848 StaticSocketDataProvider* data[] = { &data1, &data2 }; |
10743 | 10849 |
10744 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); | 10850 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
10745 | 10851 |
10746 EXPECT_EQ(OK, out.rv); | 10852 EXPECT_EQ(OK, out.rv); |
10747 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 10853 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
10748 EXPECT_EQ("hello world", out.response_data); | 10854 EXPECT_EQ("hello world", out.response_data); |
10749 } | 10855 } |
10750 | 10856 |
10751 TEST_F(HttpNetworkTransactionSpdy2Test, SendPipelineEvictionFallback) { | 10857 TEST_P(HttpNetworkTransactionTest, SendPipelineEvictionFallback) { |
10752 MockWrite data_writes1[] = { | 10858 MockWrite data_writes1[] = { |
10753 MockWrite(SYNCHRONOUS, ERR_PIPELINE_EVICTION), | 10859 MockWrite(SYNCHRONOUS, ERR_PIPELINE_EVICTION), |
10754 }; | 10860 }; |
10755 MockWrite data_writes2[] = { | 10861 MockWrite data_writes2[] = { |
10756 MockWrite("GET / HTTP/1.1\r\n" | 10862 MockWrite("GET / HTTP/1.1\r\n" |
10757 "Host: www.google.com\r\n" | 10863 "Host: www.google.com\r\n" |
10758 "Connection: keep-alive\r\n\r\n"), | 10864 "Connection: keep-alive\r\n\r\n"), |
10759 }; | 10865 }; |
10760 MockRead data_reads2[] = { | 10866 MockRead data_reads2[] = { |
10761 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 10867 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
10762 MockRead("hello world"), | 10868 MockRead("hello world"), |
10763 MockRead(SYNCHRONOUS, OK), | 10869 MockRead(SYNCHRONOUS, OK), |
10764 }; | 10870 }; |
10765 StaticSocketDataProvider data1(NULL, 0, | 10871 StaticSocketDataProvider data1(NULL, 0, |
10766 data_writes1, arraysize(data_writes1)); | 10872 data_writes1, arraysize(data_writes1)); |
10767 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 10873 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
10768 data_writes2, arraysize(data_writes2)); | 10874 data_writes2, arraysize(data_writes2)); |
10769 StaticSocketDataProvider* data[] = { &data1, &data2 }; | 10875 StaticSocketDataProvider* data[] = { &data1, &data2 }; |
10770 | 10876 |
10771 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); | 10877 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
10772 | 10878 |
10773 EXPECT_EQ(OK, out.rv); | 10879 EXPECT_EQ(OK, out.rv); |
10774 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 10880 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
10775 EXPECT_EQ("hello world", out.response_data); | 10881 EXPECT_EQ("hello world", out.response_data); |
10776 } | 10882 } |
10777 | 10883 |
10778 TEST_F(HttpNetworkTransactionSpdy2Test, DoNotUseSpdySessionForHttp) { | 10884 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttp) { |
| 10885 if (GetParam() > kProtoSPDY3) |
| 10886 return; |
| 10887 |
10779 const std::string https_url = "https://www.google.com/"; | 10888 const std::string https_url = "https://www.google.com/"; |
10780 const std::string http_url = "http://www.google.com:443/"; | 10889 const std::string http_url = "http://www.google.com:443/"; |
10781 | 10890 |
10782 // SPDY GET for HTTPS URL | 10891 // SPDY GET for HTTPS URL |
10783 scoped_ptr<SpdyFrame> req1( | 10892 scoped_ptr<SpdyFrame> req1( |
10784 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); | 10893 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); |
10785 | 10894 |
10786 MockWrite writes1[] = { | 10895 MockWrite writes1[] = { |
10787 CreateMockWrite(*req1, 0), | 10896 CreateMockWrite(*req1, 0), |
10788 }; | 10897 }; |
10789 | 10898 |
10790 scoped_ptr<SpdyFrame> resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); | 10899 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
10791 scoped_ptr<SpdyFrame> body1(ConstructSpdyBodyFrame(1, true)); | 10900 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
10792 MockRead reads1[] = { | 10901 MockRead reads1[] = { |
10793 CreateMockRead(*resp1, 1), | 10902 CreateMockRead(*resp1, 1), |
10794 CreateMockRead(*body1, 2), | 10903 CreateMockRead(*body1, 2), |
10795 MockRead(ASYNC, ERR_IO_PENDING, 3) | 10904 MockRead(ASYNC, ERR_IO_PENDING, 3) |
10796 }; | 10905 }; |
10797 | 10906 |
10798 DelayedSocketData data1( | 10907 DelayedSocketData data1( |
10799 1, reads1, arraysize(reads1), | 10908 1, reads1, arraysize(reads1), |
10800 writes1, arraysize(writes1)); | 10909 writes1, arraysize(writes1)); |
10801 MockConnect connect_data1(ASYNC, OK); | 10910 MockConnect connect_data1(ASYNC, OK); |
(...skipping 11 matching lines...) Expand all Loading... |
10813 MockRead(ASYNC, 5, "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 10922 MockRead(ASYNC, 5, "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
10814 MockRead(ASYNC, 6, "hello"), | 10923 MockRead(ASYNC, 6, "hello"), |
10815 MockRead(ASYNC, 7, OK), | 10924 MockRead(ASYNC, 7, OK), |
10816 }; | 10925 }; |
10817 | 10926 |
10818 DelayedSocketData data2( | 10927 DelayedSocketData data2( |
10819 1, reads2, arraysize(reads2), | 10928 1, reads2, arraysize(reads2), |
10820 writes2, arraysize(writes2)); | 10929 writes2, arraysize(writes2)); |
10821 | 10930 |
10822 SSLSocketDataProvider ssl(ASYNC, OK); | 10931 SSLSocketDataProvider ssl(ASYNC, OK); |
10823 ssl.SetNextProto(kProtoSPDY2); | 10932 ssl.SetNextProto(GetParam()); |
10824 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10933 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
10825 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 10934 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
10826 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 10935 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
10827 | 10936 |
10828 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10937 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10829 | 10938 |
10830 // Start the first transaction to set up the SpdySession | 10939 // Start the first transaction to set up the SpdySession |
10831 HttpRequestInfo request1; | 10940 HttpRequestInfo request1; |
10832 request1.method = "GET"; | 10941 request1.method = "GET"; |
10833 request1.url = GURL(https_url); | 10942 request1.url = GURL(https_url); |
(...skipping 15 matching lines...) Expand all Loading... |
10849 HttpNetworkTransaction trans2(MEDIUM, session.get()); | 10958 HttpNetworkTransaction trans2(MEDIUM, session.get()); |
10850 TestCompletionCallback callback2; | 10959 TestCompletionCallback callback2; |
10851 EXPECT_EQ(ERR_IO_PENDING, | 10960 EXPECT_EQ(ERR_IO_PENDING, |
10852 trans2.Start(&request2, callback2.callback(), BoundNetLog())); | 10961 trans2.Start(&request2, callback2.callback(), BoundNetLog())); |
10853 base::MessageLoop::current()->RunUntilIdle(); | 10962 base::MessageLoop::current()->RunUntilIdle(); |
10854 | 10963 |
10855 EXPECT_EQ(OK, callback2.WaitForResult()); | 10964 EXPECT_EQ(OK, callback2.WaitForResult()); |
10856 EXPECT_FALSE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 10965 EXPECT_FALSE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
10857 } | 10966 } |
10858 | 10967 |
10859 TEST_F(HttpNetworkTransactionSpdy2Test, DoNotUseSpdySessionForHttpOverTunnel) { | 10968 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { |
| 10969 if (GetParam() > kProtoSPDY3) |
| 10970 return; |
| 10971 |
10860 const std::string https_url = "https://www.google.com/"; | 10972 const std::string https_url = "https://www.google.com/"; |
10861 const std::string http_url = "http://www.google.com:443/"; | 10973 const std::string http_url = "http://www.google.com:443/"; |
10862 | 10974 |
10863 // SPDY GET for HTTPS URL (through CONNECT tunnel) | 10975 // SPDY GET for HTTPS URL (through CONNECT tunnel) |
10864 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); | 10976 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1)); |
10865 scoped_ptr<SpdyFrame> req1( | 10977 scoped_ptr<SpdyFrame> req1( |
10866 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); | 10978 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); |
10867 | 10979 |
10868 // SPDY GET for HTTP URL (through the proxy, but not the tunnel) | 10980 // SPDY GET for HTTP URL (through the proxy, but not the tunnel) |
10869 scoped_ptr<SpdyFrame> wrapped_req1(ConstructWrappedSpdyFrame(req1, 1)); | 10981 scoped_ptr<SpdyFrame> wrapped_req1( |
| 10982 spdy_util_.ConstructWrappedSpdyFrame(req1, 1)); |
10870 const char* const headers[] = { | 10983 const char* const headers[] = { |
10871 "method", "GET", | 10984 spdy_util_.GetMethodKey(), "GET", |
10872 "url", http_url.c_str(), | 10985 spdy_util_.GetPathKey(), spdy_util_.is_spdy2() ? http_url.c_str() : "/", |
10873 "host", "www.google.com:443", | 10986 spdy_util_.GetHostKey(), "www.google.com:443", |
10874 "scheme", "http", | 10987 spdy_util_.GetSchemeKey(), "http", |
10875 "version", "HTTP/1.1" | 10988 spdy_util_.GetVersionKey(), "HTTP/1.1" |
10876 }; | 10989 }; |
10877 scoped_ptr<SpdyFrame> req2(spdy_util_.ConstructSpdyControlFrame( | 10990 scoped_ptr<SpdyFrame> req2(spdy_util_.ConstructSpdyControlFrame( |
10878 NULL, 0, false, 3, MEDIUM, SYN_STREAM, CONTROL_FLAG_FIN, | 10991 NULL, 0, false, 3, MEDIUM, SYN_STREAM, CONTROL_FLAG_FIN, |
10879 headers, arraysize(headers), 0)); | 10992 headers, arraysize(headers), 0)); |
10880 | 10993 |
10881 MockWrite writes1[] = { | 10994 MockWrite writes1[] = { |
10882 CreateMockWrite(*connect, 0), | 10995 CreateMockWrite(*connect, 0), |
10883 CreateMockWrite(*wrapped_req1, 2), | 10996 CreateMockWrite(*wrapped_req1, 2), |
10884 CreateMockWrite(*req2, 5), | 10997 CreateMockWrite(*req2, 5), |
10885 }; | 10998 }; |
10886 | 10999 |
10887 scoped_ptr<SpdyFrame> conn_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 11000 scoped_ptr<SpdyFrame> conn_resp( |
10888 scoped_ptr<SpdyFrame> resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); | 11001 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
10889 scoped_ptr<SpdyFrame> body1(ConstructSpdyBodyFrame(1, true)); | 11002 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
10890 scoped_ptr<SpdyFrame> wrapped_resp1(ConstructWrappedSpdyFrame(resp1, 1)); | 11003 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
10891 scoped_ptr<SpdyFrame> wrapped_body1(ConstructWrappedSpdyFrame(body1, 1)); | 11004 scoped_ptr<SpdyFrame> wrapped_resp1( |
10892 scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); | 11005 spdy_util_.ConstructWrappedSpdyFrame(resp1, 1)); |
10893 scoped_ptr<SpdyFrame> body2(ConstructSpdyBodyFrame(3, true)); | 11006 scoped_ptr<SpdyFrame> wrapped_body1( |
| 11007 spdy_util_.ConstructWrappedSpdyFrame(body1, 1)); |
| 11008 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 11009 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, true)); |
10894 MockRead reads1[] = { | 11010 MockRead reads1[] = { |
10895 CreateMockRead(*conn_resp, 1), | 11011 CreateMockRead(*conn_resp, 1), |
10896 CreateMockRead(*wrapped_resp1, 3), | 11012 CreateMockRead(*wrapped_resp1, 3), |
10897 CreateMockRead(*wrapped_body1, 4), | 11013 CreateMockRead(*wrapped_body1, 4), |
10898 CreateMockRead(*resp2, 6), | 11014 CreateMockRead(*resp2, 6), |
10899 CreateMockRead(*body2, 7), | 11015 CreateMockRead(*body2, 7), |
10900 MockRead(ASYNC, ERR_IO_PENDING, 8) | 11016 MockRead(ASYNC, ERR_IO_PENDING, 8) |
10901 }; | 11017 }; |
10902 | 11018 |
10903 DeterministicSocketData data1(reads1, arraysize(reads1), | 11019 DeterministicSocketData data1(reads1, arraysize(reads1), |
10904 writes1, arraysize(writes1)); | 11020 writes1, arraysize(writes1)); |
10905 MockConnect connect_data1(ASYNC, OK); | 11021 MockConnect connect_data1(ASYNC, OK); |
10906 data1.set_connect_data(connect_data1); | 11022 data1.set_connect_data(connect_data1); |
10907 | 11023 |
10908 session_deps_.proxy_service.reset( | 11024 session_deps_.proxy_service.reset( |
10909 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); | 11025 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); |
10910 CapturingNetLog log; | 11026 CapturingNetLog log; |
10911 session_deps_.net_log = &log; | 11027 session_deps_.net_log = &log; |
10912 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy | 11028 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy |
10913 ssl1.SetNextProto(kProtoSPDY2); | 11029 ssl1.SetNextProto(GetParam()); |
10914 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); | 11030 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); |
10915 SSLSocketDataProvider ssl2(ASYNC, OK); // to the server | 11031 SSLSocketDataProvider ssl2(ASYNC, OK); // to the server |
10916 ssl2.SetNextProto(kProtoSPDY2); | 11032 ssl2.SetNextProto(GetParam()); |
10917 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); | 11033 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); |
10918 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data1); | 11034 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data1); |
10919 | 11035 |
10920 scoped_refptr<HttpNetworkSession> session( | 11036 scoped_refptr<HttpNetworkSession> session( |
10921 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); | 11037 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); |
10922 | 11038 |
10923 // Start the first transaction to set up the SpdySession | 11039 // Start the first transaction to set up the SpdySession |
10924 HttpRequestInfo request1; | 11040 HttpRequestInfo request1; |
10925 request1.method = "GET"; | 11041 request1.method = "GET"; |
10926 request1.url = GURL(https_url); | 11042 request1.url = GURL(https_url); |
(...skipping 30 matching lines...) Expand all Loading... |
10957 | 11073 |
10958 LoadTimingInfo load_timing_info2; | 11074 LoadTimingInfo load_timing_info2; |
10959 EXPECT_TRUE(trans2.GetLoadTimingInfo(&load_timing_info2)); | 11075 EXPECT_TRUE(trans2.GetLoadTimingInfo(&load_timing_info2)); |
10960 // The established SPDY sessions is considered reused by the HTTP request. | 11076 // The established SPDY sessions is considered reused by the HTTP request. |
10961 TestLoadTimingReusedWithPac(load_timing_info2); | 11077 TestLoadTimingReusedWithPac(load_timing_info2); |
10962 // HTTP requests over a SPDY session should have a different connection | 11078 // HTTP requests over a SPDY session should have a different connection |
10963 // socket_log_id than requests over a tunnel. | 11079 // socket_log_id than requests over a tunnel. |
10964 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 11080 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
10965 } | 11081 } |
10966 | 11082 |
10967 TEST_F(HttpNetworkTransactionSpdy2Test, UseSpdySessionForHttpWhenForced) { | 11083 TEST_P(HttpNetworkTransactionTest, UseSpdySessionForHttpWhenForced) { |
| 11084 if (GetParam() > kProtoSPDY3) |
| 11085 return; |
| 11086 |
10968 HttpStreamFactory::set_force_spdy_always(true); | 11087 HttpStreamFactory::set_force_spdy_always(true); |
10969 const std::string https_url = "https://www.google.com/"; | 11088 const std::string https_url = "https://www.google.com/"; |
10970 const std::string http_url = "http://www.google.com:443/"; | 11089 const std::string http_url = "http://www.google.com:443/"; |
10971 | 11090 |
10972 // SPDY GET for HTTPS URL | 11091 // SPDY GET for HTTPS URL |
10973 scoped_ptr<SpdyFrame> req1( | 11092 scoped_ptr<SpdyFrame> req1( |
10974 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); | 11093 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); |
10975 // SPDY GET for the HTTP URL | 11094 // SPDY GET for the HTTP URL |
10976 scoped_ptr<SpdyFrame> req2( | 11095 scoped_ptr<SpdyFrame> req2( |
10977 spdy_util_.ConstructSpdyGet(http_url.c_str(), false, 3, MEDIUM)); | 11096 spdy_util_.ConstructSpdyGet(http_url.c_str(), false, 3, MEDIUM)); |
10978 | 11097 |
10979 MockWrite writes[] = { | 11098 MockWrite writes[] = { |
10980 CreateMockWrite(*req1, 1), | 11099 CreateMockWrite(*req1, 1), |
10981 CreateMockWrite(*req2, 4), | 11100 CreateMockWrite(*req2, 4), |
10982 }; | 11101 }; |
10983 | 11102 |
10984 scoped_ptr<SpdyFrame> resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); | 11103 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
10985 scoped_ptr<SpdyFrame> body1(ConstructSpdyBodyFrame(1, true)); | 11104 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
10986 scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); | 11105 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
10987 scoped_ptr<SpdyFrame> body2(ConstructSpdyBodyFrame(3, true)); | 11106 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, true)); |
10988 MockRead reads[] = { | 11107 MockRead reads[] = { |
10989 CreateMockRead(*resp1, 2), | 11108 CreateMockRead(*resp1, 2), |
10990 CreateMockRead(*body1, 3), | 11109 CreateMockRead(*body1, 3), |
10991 CreateMockRead(*resp2, 5), | 11110 CreateMockRead(*resp2, 5), |
10992 CreateMockRead(*body2, 6), | 11111 CreateMockRead(*body2, 6), |
10993 MockRead(ASYNC, ERR_IO_PENDING, 7) | 11112 MockRead(ASYNC, ERR_IO_PENDING, 7) |
10994 }; | 11113 }; |
10995 | 11114 |
10996 OrderedSocketData data(reads, arraysize(reads), | 11115 OrderedSocketData data(reads, arraysize(reads), |
10997 writes, arraysize(writes)); | 11116 writes, arraysize(writes)); |
10998 | 11117 |
10999 SSLSocketDataProvider ssl(ASYNC, OK); | 11118 SSLSocketDataProvider ssl(ASYNC, OK); |
11000 ssl.SetNextProto(kProtoSPDY2); | 11119 ssl.SetNextProto(GetParam()); |
11001 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 11120 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
11002 session_deps_.socket_factory->AddSocketDataProvider(&data); | 11121 session_deps_.socket_factory->AddSocketDataProvider(&data); |
11003 | 11122 |
11004 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11123 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11005 | 11124 |
11006 // Start the first transaction to set up the SpdySession | 11125 // Start the first transaction to set up the SpdySession |
11007 HttpRequestInfo request1; | 11126 HttpRequestInfo request1; |
11008 request1.method = "GET"; | 11127 request1.method = "GET"; |
11009 request1.url = GURL(https_url); | 11128 request1.url = GURL(https_url); |
11010 request1.load_flags = 0; | 11129 request1.load_flags = 0; |
(...skipping 18 matching lines...) Expand all Loading... |
11029 base::MessageLoop::current()->RunUntilIdle(); | 11148 base::MessageLoop::current()->RunUntilIdle(); |
11030 | 11149 |
11031 EXPECT_EQ(OK, callback2.WaitForResult()); | 11150 EXPECT_EQ(OK, callback2.WaitForResult()); |
11032 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 11151 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
11033 } | 11152 } |
11034 | 11153 |
11035 // Test that in the case where we have a SPDY session to a SPDY proxy | 11154 // Test that in the case where we have a SPDY session to a SPDY proxy |
11036 // that we do not pool other origins that resolve to the same IP when | 11155 // that we do not pool other origins that resolve to the same IP when |
11037 // the certificate does not match the new origin. | 11156 // the certificate does not match the new origin. |
11038 // http://crbug.com/134690 | 11157 // http://crbug.com/134690 |
11039 TEST_F(HttpNetworkTransactionSpdy2Test, DoNotUseSpdySessionIfCertDoesNotMatch) { | 11158 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionIfCertDoesNotMatch) { |
| 11159 if (GetParam() > kProtoSPDY3) |
| 11160 return; |
| 11161 |
11040 const std::string url1 = "http://www.google.com/"; | 11162 const std::string url1 = "http://www.google.com/"; |
11041 const std::string url2 = "https://mail.google.com/"; | 11163 const std::string url2 = "https://mail.google.com/"; |
11042 const std::string ip_addr = "1.2.3.4"; | 11164 const std::string ip_addr = "1.2.3.4"; |
11043 | 11165 |
11044 // SPDY GET for HTTP URL (through SPDY proxy) | 11166 // SPDY GET for HTTP URL (through SPDY proxy) |
11045 const char* const headers[] = { | 11167 scoped_ptr<SpdyHeaderBlock> headers( |
11046 "method", "GET", | 11168 spdy_util_.ConstructGetHeaderBlockForProxy("http://www.google.com/")); |
11047 "url", url1.c_str(), | |
11048 "host", "www.google.com", | |
11049 "scheme", "http", | |
11050 "version", "HTTP/1.1" | |
11051 }; | |
11052 scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyControlFrame( | 11169 scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyControlFrame( |
11053 NULL, 0, false, 1, LOWEST, SYN_STREAM, CONTROL_FLAG_FIN, | 11170 headers.Pass(), false, 1, LOWEST, SYN_STREAM, CONTROL_FLAG_FIN, 0)); |
11054 headers, arraysize(headers), 0)); | |
11055 | 11171 |
11056 MockWrite writes1[] = { | 11172 MockWrite writes1[] = { |
11057 CreateMockWrite(*req1, 0), | 11173 CreateMockWrite(*req1, 0), |
11058 }; | 11174 }; |
11059 | 11175 |
11060 scoped_ptr<SpdyFrame> resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); | 11176 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
11061 scoped_ptr<SpdyFrame> body1(ConstructSpdyBodyFrame(1, true)); | 11177 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
11062 MockRead reads1[] = { | 11178 MockRead reads1[] = { |
11063 CreateMockRead(*resp1, 1), | 11179 CreateMockRead(*resp1, 1), |
11064 CreateMockRead(*body1, 2), | 11180 CreateMockRead(*body1, 2), |
11065 MockRead(ASYNC, OK, 3) // EOF | 11181 MockRead(ASYNC, OK, 3) // EOF |
11066 }; | 11182 }; |
11067 | 11183 |
11068 scoped_ptr<DeterministicSocketData> data1( | 11184 scoped_ptr<DeterministicSocketData> data1( |
11069 new DeterministicSocketData(reads1, arraysize(reads1), | 11185 new DeterministicSocketData(reads1, arraysize(reads1), |
11070 writes1, arraysize(writes1))); | 11186 writes1, arraysize(writes1))); |
11071 IPAddressNumber ip; | 11187 IPAddressNumber ip; |
11072 ASSERT_TRUE(ParseIPLiteralToNumber(ip_addr, &ip)); | 11188 ASSERT_TRUE(ParseIPLiteralToNumber(ip_addr, &ip)); |
11073 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 11189 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
11074 MockConnect connect_data1(ASYNC, OK, peer_addr); | 11190 MockConnect connect_data1(ASYNC, OK, peer_addr); |
11075 data1->set_connect_data(connect_data1); | 11191 data1->set_connect_data(connect_data1); |
11076 | 11192 |
11077 // SPDY GET for HTTPS URL (direct) | 11193 // SPDY GET for HTTPS URL (direct) |
11078 scoped_ptr<SpdyFrame> req2( | 11194 scoped_ptr<SpdyFrame> req2( |
11079 spdy_util_.ConstructSpdyGet(url2.c_str(), false, 1, MEDIUM)); | 11195 spdy_util_.ConstructSpdyGet(url2.c_str(), false, 1, MEDIUM)); |
11080 | 11196 |
11081 MockWrite writes2[] = { | 11197 MockWrite writes2[] = { |
11082 CreateMockWrite(*req2, 0), | 11198 CreateMockWrite(*req2, 0), |
11083 }; | 11199 }; |
11084 | 11200 |
11085 scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 1)); | 11201 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
11086 scoped_ptr<SpdyFrame> body2(ConstructSpdyBodyFrame(1, true)); | 11202 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
11087 MockRead reads2[] = { | 11203 MockRead reads2[] = { |
11088 CreateMockRead(*resp2, 1), | 11204 CreateMockRead(*resp2, 1), |
11089 CreateMockRead(*body2, 2), | 11205 CreateMockRead(*body2, 2), |
11090 MockRead(ASYNC, OK, 3) // EOF | 11206 MockRead(ASYNC, OK, 3) // EOF |
11091 }; | 11207 }; |
11092 | 11208 |
11093 scoped_ptr<DeterministicSocketData> data2( | 11209 scoped_ptr<DeterministicSocketData> data2( |
11094 new DeterministicSocketData(reads2, arraysize(reads2), | 11210 new DeterministicSocketData(reads2, arraysize(reads2), |
11095 writes2, arraysize(writes2))); | 11211 writes2, arraysize(writes2))); |
11096 MockConnect connect_data2(ASYNC, OK); | 11212 MockConnect connect_data2(ASYNC, OK); |
(...skipping 12 matching lines...) Expand all Loading... |
11109 // Load a valid cert. Note, that this does not need to | 11225 // Load a valid cert. Note, that this does not need to |
11110 // be valid for proxy because the MockSSLClientSocket does | 11226 // be valid for proxy because the MockSSLClientSocket does |
11111 // not actually verify it. But SpdySession will use this | 11227 // not actually verify it. But SpdySession will use this |
11112 // to see if it is valid for the new origin | 11228 // to see if it is valid for the new origin |
11113 base::FilePath certs_dir = GetTestCertsDirectory(); | 11229 base::FilePath certs_dir = GetTestCertsDirectory(); |
11114 scoped_refptr<X509Certificate> server_cert( | 11230 scoped_refptr<X509Certificate> server_cert( |
11115 ImportCertFromFile(certs_dir, "ok_cert.pem")); | 11231 ImportCertFromFile(certs_dir, "ok_cert.pem")); |
11116 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); | 11232 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); |
11117 | 11233 |
11118 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy | 11234 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy |
11119 ssl1.SetNextProto(kProtoSPDY2); | 11235 ssl1.SetNextProto(GetParam()); |
11120 ssl1.cert = server_cert; | 11236 ssl1.cert = server_cert; |
11121 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); | 11237 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); |
11122 session_deps_.deterministic_socket_factory->AddSocketDataProvider( | 11238 session_deps_.deterministic_socket_factory->AddSocketDataProvider( |
11123 data1.get()); | 11239 data1.get()); |
11124 | 11240 |
11125 SSLSocketDataProvider ssl2(ASYNC, OK); // to the server | 11241 SSLSocketDataProvider ssl2(ASYNC, OK); // to the server |
11126 ssl2.SetNextProto(kProtoSPDY2); | 11242 ssl2.SetNextProto(GetParam()); |
11127 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); | 11243 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); |
11128 session_deps_.deterministic_socket_factory->AddSocketDataProvider( | 11244 session_deps_.deterministic_socket_factory->AddSocketDataProvider( |
11129 data2.get()); | 11245 data2.get()); |
11130 | 11246 |
11131 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 11247 session_deps_.host_resolver.reset(new MockCachingHostResolver()); |
11132 session_deps_.host_resolver->rules()->AddRule("mail.google.com", ip_addr); | 11248 session_deps_.host_resolver->rules()->AddRule("mail.google.com", ip_addr); |
11133 session_deps_.host_resolver->rules()->AddRule("proxy", ip_addr); | 11249 session_deps_.host_resolver->rules()->AddRule("proxy", ip_addr); |
11134 | 11250 |
11135 scoped_refptr<HttpNetworkSession> session( | 11251 scoped_refptr<HttpNetworkSession> session( |
11136 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); | 11252 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); |
(...skipping 27 matching lines...) Expand all Loading... |
11164 | 11280 |
11165 ASSERT_TRUE(callback2.have_result()); | 11281 ASSERT_TRUE(callback2.have_result()); |
11166 EXPECT_EQ(OK, callback2.WaitForResult()); | 11282 EXPECT_EQ(OK, callback2.WaitForResult()); |
11167 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 11283 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
11168 } | 11284 } |
11169 | 11285 |
11170 // Test to verify that a failed socket read (due to an ERR_CONNECTION_CLOSED | 11286 // Test to verify that a failed socket read (due to an ERR_CONNECTION_CLOSED |
11171 // error) in SPDY session, removes the socket from pool and closes the SPDY | 11287 // error) in SPDY session, removes the socket from pool and closes the SPDY |
11172 // session. Verify that new url's from the same HttpNetworkSession (and a new | 11288 // session. Verify that new url's from the same HttpNetworkSession (and a new |
11173 // SpdySession) do work. http://crbug.com/224701 | 11289 // SpdySession) do work. http://crbug.com/224701 |
11174 TEST_F(HttpNetworkTransactionSpdy2Test, ErrorSocketNotConnected) { | 11290 TEST_P(HttpNetworkTransactionTest, ErrorSocketNotConnected) { |
| 11291 if (GetParam() > kProtoSPDY3) |
| 11292 return; |
| 11293 |
11175 const std::string https_url = "https://www.google.com/"; | 11294 const std::string https_url = "https://www.google.com/"; |
11176 | 11295 |
11177 MockRead reads1[] = { | 11296 MockRead reads1[] = { |
11178 MockRead(SYNCHRONOUS, ERR_CONNECTION_CLOSED, 0) | 11297 MockRead(SYNCHRONOUS, ERR_CONNECTION_CLOSED, 0) |
11179 }; | 11298 }; |
11180 | 11299 |
11181 scoped_ptr<DeterministicSocketData> data1( | 11300 scoped_ptr<DeterministicSocketData> data1( |
11182 new DeterministicSocketData(reads1, arraysize(reads1), NULL, 0)); | 11301 new DeterministicSocketData(reads1, arraysize(reads1), NULL, 0)); |
11183 data1->SetStop(1); | 11302 data1->SetStop(1); |
11184 | 11303 |
11185 scoped_ptr<SpdyFrame> req2( | 11304 scoped_ptr<SpdyFrame> req2( |
11186 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, MEDIUM)); | 11305 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, MEDIUM)); |
11187 MockWrite writes2[] = { | 11306 MockWrite writes2[] = { |
11188 CreateMockWrite(*req2, 0), | 11307 CreateMockWrite(*req2, 0), |
11189 }; | 11308 }; |
11190 | 11309 |
11191 scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 1)); | 11310 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
11192 scoped_ptr<SpdyFrame> body2(ConstructSpdyBodyFrame(1, true)); | 11311 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
11193 MockRead reads2[] = { | 11312 MockRead reads2[] = { |
11194 CreateMockRead(*resp2, 1), | 11313 CreateMockRead(*resp2, 1), |
11195 CreateMockRead(*body2, 2), | 11314 CreateMockRead(*body2, 2), |
11196 MockRead(ASYNC, OK, 3) // EOF | 11315 MockRead(ASYNC, OK, 3) // EOF |
11197 }; | 11316 }; |
11198 | 11317 |
11199 scoped_ptr<DeterministicSocketData> data2( | 11318 scoped_ptr<DeterministicSocketData> data2( |
11200 new DeterministicSocketData(reads2, arraysize(reads2), | 11319 new DeterministicSocketData(reads2, arraysize(reads2), |
11201 writes2, arraysize(writes2))); | 11320 writes2, arraysize(writes2))); |
11202 | 11321 |
11203 SSLSocketDataProvider ssl1(ASYNC, OK); | 11322 SSLSocketDataProvider ssl1(ASYNC, OK); |
11204 ssl1.SetNextProto(kProtoSPDY2); | 11323 ssl1.SetNextProto(GetParam()); |
11205 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); | 11324 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); |
11206 session_deps_.deterministic_socket_factory->AddSocketDataProvider( | 11325 session_deps_.deterministic_socket_factory->AddSocketDataProvider( |
11207 data1.get()); | 11326 data1.get()); |
11208 | 11327 |
11209 SSLSocketDataProvider ssl2(ASYNC, OK); | 11328 SSLSocketDataProvider ssl2(ASYNC, OK); |
11210 ssl2.SetNextProto(kProtoSPDY2); | 11329 ssl2.SetNextProto(GetParam()); |
11211 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); | 11330 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); |
11212 session_deps_.deterministic_socket_factory->AddSocketDataProvider( | 11331 session_deps_.deterministic_socket_factory->AddSocketDataProvider( |
11213 data2.get()); | 11332 data2.get()); |
11214 | 11333 |
11215 scoped_refptr<HttpNetworkSession> session( | 11334 scoped_refptr<HttpNetworkSession> session( |
11216 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); | 11335 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); |
11217 | 11336 |
11218 // Start the first transaction to set up the SpdySession and verify that | 11337 // Start the first transaction to set up the SpdySession and verify that |
11219 // connection was closed. | 11338 // connection was closed. |
11220 HttpRequestInfo request1; | 11339 HttpRequestInfo request1; |
(...skipping 17 matching lines...) Expand all Loading... |
11238 EXPECT_EQ(ERR_IO_PENDING, | 11357 EXPECT_EQ(ERR_IO_PENDING, |
11239 trans2.Start(&request2, callback2.callback(), BoundNetLog())); | 11358 trans2.Start(&request2, callback2.callback(), BoundNetLog())); |
11240 base::MessageLoop::current()->RunUntilIdle(); | 11359 base::MessageLoop::current()->RunUntilIdle(); |
11241 data2->RunFor(3); | 11360 data2->RunFor(3); |
11242 | 11361 |
11243 ASSERT_TRUE(callback2.have_result()); | 11362 ASSERT_TRUE(callback2.have_result()); |
11244 EXPECT_EQ(OK, callback2.WaitForResult()); | 11363 EXPECT_EQ(OK, callback2.WaitForResult()); |
11245 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 11364 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
11246 } | 11365 } |
11247 | 11366 |
11248 TEST_F(HttpNetworkTransactionSpdy2Test, CloseIdleSpdySessionToOpenNewOne) { | 11367 TEST_P(HttpNetworkTransactionTest, CloseIdleSpdySessionToOpenNewOne) { |
| 11368 if (GetParam() > kProtoSPDY3) |
| 11369 return; |
| 11370 |
11249 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 11371 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
11250 ClientSocketPoolManager::set_max_sockets_per_group( | 11372 ClientSocketPoolManager::set_max_sockets_per_group( |
11251 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 11373 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
11252 ClientSocketPoolManager::set_max_sockets_per_pool( | 11374 ClientSocketPoolManager::set_max_sockets_per_pool( |
11253 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 11375 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
11254 | 11376 |
11255 // Use two different hosts with different IPs so they don't get pooled. | 11377 // Use two different hosts with different IPs so they don't get pooled. |
11256 session_deps_.host_resolver->rules()->AddRule("www.a.com", "10.0.0.1"); | 11378 session_deps_.host_resolver->rules()->AddRule("www.a.com", "10.0.0.1"); |
11257 session_deps_.host_resolver->rules()->AddRule("www.b.com", "10.0.0.2"); | 11379 session_deps_.host_resolver->rules()->AddRule("www.b.com", "10.0.0.2"); |
11258 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11380 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11259 | 11381 |
11260 SSLSocketDataProvider ssl1(ASYNC, OK); | 11382 SSLSocketDataProvider ssl1(ASYNC, OK); |
11261 ssl1.SetNextProto(kProtoSPDY2); | 11383 ssl1.SetNextProto(GetParam()); |
11262 SSLSocketDataProvider ssl2(ASYNC, OK); | 11384 SSLSocketDataProvider ssl2(ASYNC, OK); |
11263 ssl2.SetNextProto(kProtoSPDY2); | 11385 ssl2.SetNextProto(GetParam()); |
11264 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); | 11386 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); |
11265 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 11387 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
11266 | 11388 |
11267 scoped_ptr<SpdyFrame> host1_req(spdy_util_.ConstructSpdyGet( | 11389 scoped_ptr<SpdyFrame> host1_req(spdy_util_.ConstructSpdyGet( |
11268 "https://www.a.com", false, 1, DEFAULT_PRIORITY)); | 11390 "https://www.a.com", false, 1, DEFAULT_PRIORITY)); |
11269 MockWrite spdy1_writes[] = { | 11391 MockWrite spdy1_writes[] = { |
11270 CreateMockWrite(*host1_req, 1), | 11392 CreateMockWrite(*host1_req, 1), |
11271 }; | 11393 }; |
11272 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 11394 scoped_ptr<SpdyFrame> host1_resp( |
11273 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true)); | 11395 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11396 scoped_ptr<SpdyFrame> host1_resp_body( |
| 11397 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
11274 MockRead spdy1_reads[] = { | 11398 MockRead spdy1_reads[] = { |
11275 CreateMockRead(*host1_resp, 2), | 11399 CreateMockRead(*host1_resp, 2), |
11276 CreateMockRead(*host1_resp_body, 3), | 11400 CreateMockRead(*host1_resp_body, 3), |
11277 MockRead(ASYNC, ERR_IO_PENDING, 4), | 11401 MockRead(ASYNC, ERR_IO_PENDING, 4), |
11278 }; | 11402 }; |
11279 | 11403 |
11280 scoped_ptr<OrderedSocketData> spdy1_data( | 11404 scoped_ptr<OrderedSocketData> spdy1_data( |
11281 new OrderedSocketData( | 11405 new OrderedSocketData( |
11282 spdy1_reads, arraysize(spdy1_reads), | 11406 spdy1_reads, arraysize(spdy1_reads), |
11283 spdy1_writes, arraysize(spdy1_writes))); | 11407 spdy1_writes, arraysize(spdy1_writes))); |
11284 session_deps_.socket_factory->AddSocketDataProvider(spdy1_data.get()); | 11408 session_deps_.socket_factory->AddSocketDataProvider(spdy1_data.get()); |
11285 | 11409 |
11286 scoped_ptr<SpdyFrame> host2_req(spdy_util_.ConstructSpdyGet( | 11410 scoped_ptr<SpdyFrame> host2_req(spdy_util_.ConstructSpdyGet( |
11287 "https://www.b.com", false, 1, DEFAULT_PRIORITY)); | 11411 "https://www.b.com", false, 1, DEFAULT_PRIORITY)); |
11288 MockWrite spdy2_writes[] = { | 11412 MockWrite spdy2_writes[] = { |
11289 CreateMockWrite(*host2_req, 1), | 11413 CreateMockWrite(*host2_req, 1), |
11290 }; | 11414 }; |
11291 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 11415 scoped_ptr<SpdyFrame> host2_resp( |
11292 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(1, true)); | 11416 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11417 scoped_ptr<SpdyFrame> host2_resp_body( |
| 11418 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
11293 MockRead spdy2_reads[] = { | 11419 MockRead spdy2_reads[] = { |
11294 CreateMockRead(*host2_resp, 2), | 11420 CreateMockRead(*host2_resp, 2), |
11295 CreateMockRead(*host2_resp_body, 3), | 11421 CreateMockRead(*host2_resp_body, 3), |
11296 MockRead(ASYNC, ERR_IO_PENDING, 4), | 11422 MockRead(ASYNC, ERR_IO_PENDING, 4), |
11297 }; | 11423 }; |
11298 | 11424 |
11299 scoped_ptr<OrderedSocketData> spdy2_data( | 11425 scoped_ptr<OrderedSocketData> spdy2_data( |
11300 new OrderedSocketData( | 11426 new OrderedSocketData( |
11301 spdy2_reads, arraysize(spdy2_reads), | 11427 spdy2_reads, arraysize(spdy2_reads), |
11302 spdy2_writes, arraysize(spdy2_writes))); | 11428 spdy2_writes, arraysize(spdy2_writes))); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11403 EXPECT_EQ("hello!", response_data); | 11529 EXPECT_EQ("hello!", response_data); |
11404 EXPECT_FALSE( | 11530 EXPECT_FALSE( |
11405 session->spdy_session_pool()->HasSession(spdy_session_key_a)); | 11531 session->spdy_session_pool()->HasSession(spdy_session_key_a)); |
11406 EXPECT_FALSE( | 11532 EXPECT_FALSE( |
11407 session->spdy_session_pool()->HasSession(spdy_session_key_b)); | 11533 session->spdy_session_pool()->HasSession(spdy_session_key_b)); |
11408 | 11534 |
11409 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); | 11535 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); |
11410 } | 11536 } |
11411 | 11537 |
11412 } // namespace net | 11538 } // namespace net |
OLD | NEW |