Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: net/http/http_network_transaction_unittest.cc

Issue 17028007: Merge the HttpNetworkTransaction tests and parametrize them on a NextProto (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/http/http_network_transaction_spdy3_unittest.cc ('k') | net/net.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/http/http_network_transaction_spdy3_unittest.cc ('k') | net/net.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698