OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 #include "net/spdy/spdy_session.h" | 81 #include "net/spdy/spdy_session.h" |
82 #include "net/spdy/spdy_session_pool.h" | 82 #include "net/spdy/spdy_session_pool.h" |
83 #include "net/spdy/spdy_test_util_common.h" | 83 #include "net/spdy/spdy_test_util_common.h" |
84 #include "net/ssl/default_channel_id_store.h" | 84 #include "net/ssl/default_channel_id_store.h" |
85 #include "net/ssl/ssl_cert_request_info.h" | 85 #include "net/ssl/ssl_cert_request_info.h" |
86 #include "net/ssl/ssl_config_service.h" | 86 #include "net/ssl/ssl_config_service.h" |
87 #include "net/ssl/ssl_config_service_defaults.h" | 87 #include "net/ssl/ssl_config_service_defaults.h" |
88 #include "net/ssl/ssl_info.h" | 88 #include "net/ssl/ssl_info.h" |
89 #include "net/ssl/ssl_private_key.h" | 89 #include "net/ssl/ssl_private_key.h" |
90 #include "net/test/cert_test_util.h" | 90 #include "net/test/cert_test_util.h" |
| 91 #include "net/test/gtest_util.h" |
91 #include "net/test/test_data_directory.h" | 92 #include "net/test/test_data_directory.h" |
92 #include "net/websockets/websocket_handshake_stream_base.h" | 93 #include "net/websockets/websocket_handshake_stream_base.h" |
93 #include "testing/gmock/include/gmock/gmock.h" | 94 #include "testing/gmock/include/gmock/gmock.h" |
94 #include "testing/gtest/include/gtest/gtest.h" | 95 #include "testing/gtest/include/gtest/gtest.h" |
95 #include "testing/platform_test.h" | 96 #include "testing/platform_test.h" |
96 #include "url/gurl.h" | 97 #include "url/gurl.h" |
97 | 98 |
| 99 using net::test::IsError; |
| 100 using net::test::IsOk; |
| 101 |
98 using base::ASCIIToUTF16; | 102 using base::ASCIIToUTF16; |
99 | 103 |
100 //----------------------------------------------------------------------------- | 104 //----------------------------------------------------------------------------- |
101 | 105 |
102 namespace net { | 106 namespace net { |
103 | 107 |
104 namespace { | 108 namespace { |
105 | 109 |
106 enum TestCase { | 110 enum TestCase { |
107 // Test using the SPDY/3.1 protocol. | 111 // Test using the SPDY/3.1 protocol. |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 367 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
364 | 368 |
365 for (size_t i = 0; i < data_count; ++i) { | 369 for (size_t i = 0; i < data_count; ++i) { |
366 session_deps_.socket_factory->AddSocketDataProvider(data[i]); | 370 session_deps_.socket_factory->AddSocketDataProvider(data[i]); |
367 } | 371 } |
368 | 372 |
369 TestCompletionCallback callback; | 373 TestCompletionCallback callback; |
370 | 374 |
371 EXPECT_TRUE(log.bound().IsCapturing()); | 375 EXPECT_TRUE(log.bound().IsCapturing()); |
372 int rv = trans->Start(&request, callback.callback(), log.bound()); | 376 int rv = trans->Start(&request, callback.callback(), log.bound()); |
373 EXPECT_EQ(ERR_IO_PENDING, rv); | 377 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
374 | 378 |
375 out.rv = callback.WaitForResult(); | 379 out.rv = callback.WaitForResult(); |
376 out.total_received_bytes = trans->GetTotalReceivedBytes(); | 380 out.total_received_bytes = trans->GetTotalReceivedBytes(); |
377 out.total_sent_bytes = trans->GetTotalSentBytes(); | 381 out.total_sent_bytes = trans->GetTotalSentBytes(); |
378 | 382 |
379 // Even in the failure cases that use this function, connections are always | 383 // Even in the failure cases that use this function, connections are always |
380 // successfully established before the error. | 384 // successfully established before the error. |
381 EXPECT_TRUE(trans->GetLoadTimingInfo(&out.load_timing_info)); | 385 EXPECT_TRUE(trans->GetLoadTimingInfo(&out.load_timing_info)); |
382 TestLoadTimingNotReused(out.load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); | 386 TestLoadTimingNotReused(out.load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
383 | 387 |
(...skipping 11 matching lines...) Expand all Loading... |
395 | 399 |
396 EXPECT_EQ("127.0.0.1", response->socket_address.host()); | 400 EXPECT_EQ("127.0.0.1", response->socket_address.host()); |
397 EXPECT_EQ(80, response->socket_address.port()); | 401 EXPECT_EQ(80, response->socket_address.port()); |
398 | 402 |
399 bool got_endpoint = | 403 bool got_endpoint = |
400 trans->GetRemoteEndpoint(&out.remote_endpoint_after_start); | 404 trans->GetRemoteEndpoint(&out.remote_endpoint_after_start); |
401 EXPECT_EQ(got_endpoint, | 405 EXPECT_EQ(got_endpoint, |
402 out.remote_endpoint_after_start.address().size() > 0); | 406 out.remote_endpoint_after_start.address().size() > 0); |
403 | 407 |
404 rv = ReadTransaction(trans.get(), &out.response_data); | 408 rv = ReadTransaction(trans.get(), &out.response_data); |
405 EXPECT_EQ(OK, rv); | 409 EXPECT_THAT(rv, IsOk()); |
406 | 410 |
407 TestNetLogEntry::List entries; | 411 TestNetLogEntry::List entries; |
408 log.GetEntries(&entries); | 412 log.GetEntries(&entries); |
409 size_t pos = ExpectLogContainsSomewhere( | 413 size_t pos = ExpectLogContainsSomewhere( |
410 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST_HEADERS, | 414 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST_HEADERS, |
411 NetLog::PHASE_NONE); | 415 NetLog::PHASE_NONE); |
412 ExpectLogContainsSomewhere( | 416 ExpectLogContainsSomewhere( |
413 entries, pos, | 417 entries, pos, |
414 NetLog::TYPE_HTTP_TRANSACTION_READ_RESPONSE_HEADERS, | 418 NetLog::TYPE_HTTP_TRANSACTION_READ_RESPONSE_HEADERS, |
415 NetLog::PHASE_NONE); | 419 NetLog::PHASE_NONE); |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
735 } | 739 } |
736 | 740 |
737 TEST_P(HttpNetworkTransactionTest, SimpleGET) { | 741 TEST_P(HttpNetworkTransactionTest, SimpleGET) { |
738 MockRead data_reads[] = { | 742 MockRead data_reads[] = { |
739 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 743 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
740 MockRead("hello world"), | 744 MockRead("hello world"), |
741 MockRead(SYNCHRONOUS, OK), | 745 MockRead(SYNCHRONOUS, OK), |
742 }; | 746 }; |
743 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 747 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
744 arraysize(data_reads)); | 748 arraysize(data_reads)); |
745 EXPECT_EQ(OK, out.rv); | 749 EXPECT_THAT(out.rv, IsOk()); |
746 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 750 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
747 EXPECT_EQ("hello world", out.response_data); | 751 EXPECT_EQ("hello world", out.response_data); |
748 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 752 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
749 EXPECT_EQ(reads_size, out.total_received_bytes); | 753 EXPECT_EQ(reads_size, out.total_received_bytes); |
750 EXPECT_EQ(0u, out.connection_attempts.size()); | 754 EXPECT_EQ(0u, out.connection_attempts.size()); |
751 | 755 |
752 EXPECT_FALSE(out.remote_endpoint_after_start.address().empty()); | 756 EXPECT_FALSE(out.remote_endpoint_after_start.address().empty()); |
753 } | 757 } |
754 | 758 |
755 // Response with no status line. | 759 // Response with no status line. |
756 TEST_P(HttpNetworkTransactionTest, SimpleGETNoHeaders) { | 760 TEST_P(HttpNetworkTransactionTest, SimpleGETNoHeaders) { |
757 MockRead data_reads[] = { | 761 MockRead data_reads[] = { |
758 MockRead("hello world"), | 762 MockRead("hello world"), |
759 MockRead(SYNCHRONOUS, OK), | 763 MockRead(SYNCHRONOUS, OK), |
760 }; | 764 }; |
761 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 765 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
762 arraysize(data_reads)); | 766 arraysize(data_reads)); |
763 EXPECT_EQ(OK, out.rv); | 767 EXPECT_THAT(out.rv, IsOk()); |
764 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 768 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
765 EXPECT_EQ("hello world", out.response_data); | 769 EXPECT_EQ("hello world", out.response_data); |
766 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 770 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
767 EXPECT_EQ(reads_size, out.total_received_bytes); | 771 EXPECT_EQ(reads_size, out.total_received_bytes); |
768 } | 772 } |
769 | 773 |
770 // Allow up to 4 bytes of junk to precede status line. | 774 // Allow up to 4 bytes of junk to precede status line. |
771 TEST_P(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { | 775 TEST_P(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { |
772 MockRead data_reads[] = { | 776 MockRead data_reads[] = { |
773 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 777 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
774 MockRead(SYNCHRONOUS, OK), | 778 MockRead(SYNCHRONOUS, OK), |
775 }; | 779 }; |
776 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 780 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
777 arraysize(data_reads)); | 781 arraysize(data_reads)); |
778 EXPECT_EQ(OK, out.rv); | 782 EXPECT_THAT(out.rv, IsOk()); |
779 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 783 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
780 EXPECT_EQ("DATA", out.response_data); | 784 EXPECT_EQ("DATA", out.response_data); |
781 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 785 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
782 EXPECT_EQ(reads_size, out.total_received_bytes); | 786 EXPECT_EQ(reads_size, out.total_received_bytes); |
783 } | 787 } |
784 | 788 |
785 // Allow up to 4 bytes of junk to precede status line. | 789 // Allow up to 4 bytes of junk to precede status line. |
786 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes) { | 790 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes) { |
787 MockRead data_reads[] = { | 791 MockRead data_reads[] = { |
788 MockRead("\n\nQJHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 792 MockRead("\n\nQJHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
789 MockRead(SYNCHRONOUS, OK), | 793 MockRead(SYNCHRONOUS, OK), |
790 }; | 794 }; |
791 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 795 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
792 arraysize(data_reads)); | 796 arraysize(data_reads)); |
793 EXPECT_EQ(OK, out.rv); | 797 EXPECT_THAT(out.rv, IsOk()); |
794 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 798 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
795 EXPECT_EQ("DATA", out.response_data); | 799 EXPECT_EQ("DATA", out.response_data); |
796 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 800 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
797 EXPECT_EQ(reads_size, out.total_received_bytes); | 801 EXPECT_EQ(reads_size, out.total_received_bytes); |
798 } | 802 } |
799 | 803 |
800 // Beyond 4 bytes of slop and it should fail to find a status line. | 804 // Beyond 4 bytes of slop and it should fail to find a status line. |
801 TEST_P(HttpNetworkTransactionTest, StatusLineJunk5Bytes) { | 805 TEST_P(HttpNetworkTransactionTest, StatusLineJunk5Bytes) { |
802 MockRead data_reads[] = { | 806 MockRead data_reads[] = { |
803 MockRead("xxxxxHTTP/1.1 404 Not Found\nServer: blah"), | 807 MockRead("xxxxxHTTP/1.1 404 Not Found\nServer: blah"), |
804 MockRead(SYNCHRONOUS, OK), | 808 MockRead(SYNCHRONOUS, OK), |
805 }; | 809 }; |
806 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 810 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
807 arraysize(data_reads)); | 811 arraysize(data_reads)); |
808 EXPECT_EQ(OK, out.rv); | 812 EXPECT_THAT(out.rv, IsOk()); |
809 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 813 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
810 EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); | 814 EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); |
811 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 815 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
812 EXPECT_EQ(reads_size, out.total_received_bytes); | 816 EXPECT_EQ(reads_size, out.total_received_bytes); |
813 } | 817 } |
814 | 818 |
815 // Same as StatusLineJunk4Bytes, except the read chunks are smaller. | 819 // Same as StatusLineJunk4Bytes, except the read chunks are smaller. |
816 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes_Slow) { | 820 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes_Slow) { |
817 MockRead data_reads[] = { | 821 MockRead data_reads[] = { |
818 MockRead("\n"), | 822 MockRead("\n"), |
819 MockRead("\n"), | 823 MockRead("\n"), |
820 MockRead("Q"), | 824 MockRead("Q"), |
821 MockRead("J"), | 825 MockRead("J"), |
822 MockRead("HTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 826 MockRead("HTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
823 MockRead(SYNCHRONOUS, OK), | 827 MockRead(SYNCHRONOUS, OK), |
824 }; | 828 }; |
825 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 829 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
826 arraysize(data_reads)); | 830 arraysize(data_reads)); |
827 EXPECT_EQ(OK, out.rv); | 831 EXPECT_THAT(out.rv, IsOk()); |
828 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 832 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
829 EXPECT_EQ("DATA", out.response_data); | 833 EXPECT_EQ("DATA", out.response_data); |
830 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 834 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
831 EXPECT_EQ(reads_size, out.total_received_bytes); | 835 EXPECT_EQ(reads_size, out.total_received_bytes); |
832 } | 836 } |
833 | 837 |
834 // Close the connection before enough bytes to have a status line. | 838 // Close the connection before enough bytes to have a status line. |
835 TEST_P(HttpNetworkTransactionTest, StatusLinePartial) { | 839 TEST_P(HttpNetworkTransactionTest, StatusLinePartial) { |
836 MockRead data_reads[] = { | 840 MockRead data_reads[] = { |
837 MockRead("HTT"), | 841 MockRead("HTT"), |
838 MockRead(SYNCHRONOUS, OK), | 842 MockRead(SYNCHRONOUS, OK), |
839 }; | 843 }; |
840 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 844 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
841 arraysize(data_reads)); | 845 arraysize(data_reads)); |
842 EXPECT_EQ(OK, out.rv); | 846 EXPECT_THAT(out.rv, IsOk()); |
843 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 847 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
844 EXPECT_EQ("HTT", out.response_data); | 848 EXPECT_EQ("HTT", out.response_data); |
845 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 849 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
846 EXPECT_EQ(reads_size, out.total_received_bytes); | 850 EXPECT_EQ(reads_size, out.total_received_bytes); |
847 } | 851 } |
848 | 852 |
849 // Simulate a 204 response, lacking a Content-Length header, sent over a | 853 // Simulate a 204 response, lacking a Content-Length header, sent over a |
850 // persistent connection. The response should still terminate since a 204 | 854 // persistent connection. The response should still terminate since a 204 |
851 // cannot have a response body. | 855 // cannot have a response body. |
852 TEST_P(HttpNetworkTransactionTest, StopsReading204) { | 856 TEST_P(HttpNetworkTransactionTest, StopsReading204) { |
853 char junk[] = "junk"; | 857 char junk[] = "junk"; |
854 MockRead data_reads[] = { | 858 MockRead data_reads[] = { |
855 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), | 859 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), |
856 MockRead(junk), // Should not be read!! | 860 MockRead(junk), // Should not be read!! |
857 MockRead(SYNCHRONOUS, OK), | 861 MockRead(SYNCHRONOUS, OK), |
858 }; | 862 }; |
859 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 863 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
860 arraysize(data_reads)); | 864 arraysize(data_reads)); |
861 EXPECT_EQ(OK, out.rv); | 865 EXPECT_THAT(out.rv, IsOk()); |
862 EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); | 866 EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); |
863 EXPECT_EQ("", out.response_data); | 867 EXPECT_EQ("", out.response_data); |
864 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 868 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
865 int64_t response_size = reads_size - strlen(junk); | 869 int64_t response_size = reads_size - strlen(junk); |
866 EXPECT_EQ(response_size, out.total_received_bytes); | 870 EXPECT_EQ(response_size, out.total_received_bytes); |
867 } | 871 } |
868 | 872 |
869 // A simple request using chunked encoding with some extra data after. | 873 // A simple request using chunked encoding with some extra data after. |
870 TEST_P(HttpNetworkTransactionTest, ChunkedEncoding) { | 874 TEST_P(HttpNetworkTransactionTest, ChunkedEncoding) { |
871 std::string final_chunk = "0\r\n\r\n"; | 875 std::string final_chunk = "0\r\n\r\n"; |
872 std::string extra_data = "HTTP/1.1 200 OK\r\n"; | 876 std::string extra_data = "HTTP/1.1 200 OK\r\n"; |
873 std::string last_read = final_chunk + extra_data; | 877 std::string last_read = final_chunk + extra_data; |
874 MockRead data_reads[] = { | 878 MockRead data_reads[] = { |
875 MockRead("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n"), | 879 MockRead("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n"), |
876 MockRead("5\r\nHello\r\n"), | 880 MockRead("5\r\nHello\r\n"), |
877 MockRead("1\r\n"), | 881 MockRead("1\r\n"), |
878 MockRead(" \r\n"), | 882 MockRead(" \r\n"), |
879 MockRead("5\r\nworld\r\n"), | 883 MockRead("5\r\nworld\r\n"), |
880 MockRead(last_read.data()), | 884 MockRead(last_read.data()), |
881 MockRead(SYNCHRONOUS, OK), | 885 MockRead(SYNCHRONOUS, OK), |
882 }; | 886 }; |
883 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 887 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
884 arraysize(data_reads)); | 888 arraysize(data_reads)); |
885 EXPECT_EQ(OK, out.rv); | 889 EXPECT_THAT(out.rv, IsOk()); |
886 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 890 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
887 EXPECT_EQ("Hello world", out.response_data); | 891 EXPECT_EQ("Hello world", out.response_data); |
888 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 892 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
889 int64_t response_size = reads_size - extra_data.size(); | 893 int64_t response_size = reads_size - extra_data.size(); |
890 EXPECT_EQ(response_size, out.total_received_bytes); | 894 EXPECT_EQ(response_size, out.total_received_bytes); |
891 } | 895 } |
892 | 896 |
893 // Next tests deal with http://crbug.com/56344. | 897 // Next tests deal with http://crbug.com/56344. |
894 | 898 |
895 TEST_P(HttpNetworkTransactionTest, | 899 TEST_P(HttpNetworkTransactionTest, |
896 MultipleContentLengthHeadersNoTransferEncoding) { | 900 MultipleContentLengthHeadersNoTransferEncoding) { |
897 MockRead data_reads[] = { | 901 MockRead data_reads[] = { |
898 MockRead("HTTP/1.1 200 OK\r\n"), | 902 MockRead("HTTP/1.1 200 OK\r\n"), |
899 MockRead("Content-Length: 10\r\n"), | 903 MockRead("Content-Length: 10\r\n"), |
900 MockRead("Content-Length: 5\r\n\r\n"), | 904 MockRead("Content-Length: 5\r\n\r\n"), |
901 }; | 905 }; |
902 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 906 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
903 arraysize(data_reads)); | 907 arraysize(data_reads)); |
904 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); | 908 EXPECT_THAT(out.rv, IsError(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH)); |
905 } | 909 } |
906 | 910 |
907 TEST_P(HttpNetworkTransactionTest, | 911 TEST_P(HttpNetworkTransactionTest, |
908 DuplicateContentLengthHeadersNoTransferEncoding) { | 912 DuplicateContentLengthHeadersNoTransferEncoding) { |
909 MockRead data_reads[] = { | 913 MockRead data_reads[] = { |
910 MockRead("HTTP/1.1 200 OK\r\n"), | 914 MockRead("HTTP/1.1 200 OK\r\n"), |
911 MockRead("Content-Length: 5\r\n"), | 915 MockRead("Content-Length: 5\r\n"), |
912 MockRead("Content-Length: 5\r\n\r\n"), | 916 MockRead("Content-Length: 5\r\n\r\n"), |
913 MockRead("Hello"), | 917 MockRead("Hello"), |
914 }; | 918 }; |
915 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 919 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
916 arraysize(data_reads)); | 920 arraysize(data_reads)); |
917 EXPECT_EQ(OK, out.rv); | 921 EXPECT_THAT(out.rv, IsOk()); |
918 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 922 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
919 EXPECT_EQ("Hello", out.response_data); | 923 EXPECT_EQ("Hello", out.response_data); |
920 } | 924 } |
921 | 925 |
922 TEST_P(HttpNetworkTransactionTest, | 926 TEST_P(HttpNetworkTransactionTest, |
923 ComplexContentLengthHeadersNoTransferEncoding) { | 927 ComplexContentLengthHeadersNoTransferEncoding) { |
924 // More than 2 dupes. | 928 // More than 2 dupes. |
925 { | 929 { |
926 MockRead data_reads[] = { | 930 MockRead data_reads[] = { |
927 MockRead("HTTP/1.1 200 OK\r\n"), | 931 MockRead("HTTP/1.1 200 OK\r\n"), |
928 MockRead("Content-Length: 5\r\n"), | 932 MockRead("Content-Length: 5\r\n"), |
929 MockRead("Content-Length: 5\r\n"), | 933 MockRead("Content-Length: 5\r\n"), |
930 MockRead("Content-Length: 5\r\n\r\n"), | 934 MockRead("Content-Length: 5\r\n\r\n"), |
931 MockRead("Hello"), | 935 MockRead("Hello"), |
932 }; | 936 }; |
933 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 937 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
934 arraysize(data_reads)); | 938 arraysize(data_reads)); |
935 EXPECT_EQ(OK, out.rv); | 939 EXPECT_THAT(out.rv, IsOk()); |
936 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 940 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
937 EXPECT_EQ("Hello", out.response_data); | 941 EXPECT_EQ("Hello", out.response_data); |
938 } | 942 } |
939 // HTTP/1.0 | 943 // HTTP/1.0 |
940 { | 944 { |
941 MockRead data_reads[] = { | 945 MockRead data_reads[] = { |
942 MockRead("HTTP/1.0 200 OK\r\n"), | 946 MockRead("HTTP/1.0 200 OK\r\n"), |
943 MockRead("Content-Length: 5\r\n"), | 947 MockRead("Content-Length: 5\r\n"), |
944 MockRead("Content-Length: 5\r\n"), | 948 MockRead("Content-Length: 5\r\n"), |
945 MockRead("Content-Length: 5\r\n\r\n"), | 949 MockRead("Content-Length: 5\r\n\r\n"), |
946 MockRead("Hello"), | 950 MockRead("Hello"), |
947 }; | 951 }; |
948 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 952 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
949 arraysize(data_reads)); | 953 arraysize(data_reads)); |
950 EXPECT_EQ(OK, out.rv); | 954 EXPECT_THAT(out.rv, IsOk()); |
951 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 955 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
952 EXPECT_EQ("Hello", out.response_data); | 956 EXPECT_EQ("Hello", out.response_data); |
953 } | 957 } |
954 // 2 dupes and one mismatched. | 958 // 2 dupes and one mismatched. |
955 { | 959 { |
956 MockRead data_reads[] = { | 960 MockRead data_reads[] = { |
957 MockRead("HTTP/1.1 200 OK\r\n"), | 961 MockRead("HTTP/1.1 200 OK\r\n"), |
958 MockRead("Content-Length: 10\r\n"), | 962 MockRead("Content-Length: 10\r\n"), |
959 MockRead("Content-Length: 10\r\n"), | 963 MockRead("Content-Length: 10\r\n"), |
960 MockRead("Content-Length: 5\r\n\r\n"), | 964 MockRead("Content-Length: 5\r\n\r\n"), |
961 }; | 965 }; |
962 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 966 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
963 arraysize(data_reads)); | 967 arraysize(data_reads)); |
964 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); | 968 EXPECT_THAT(out.rv, IsError(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH)); |
965 } | 969 } |
966 } | 970 } |
967 | 971 |
968 TEST_P(HttpNetworkTransactionTest, | 972 TEST_P(HttpNetworkTransactionTest, |
969 MultipleContentLengthHeadersTransferEncoding) { | 973 MultipleContentLengthHeadersTransferEncoding) { |
970 MockRead data_reads[] = { | 974 MockRead data_reads[] = { |
971 MockRead("HTTP/1.1 200 OK\r\n"), | 975 MockRead("HTTP/1.1 200 OK\r\n"), |
972 MockRead("Content-Length: 666\r\n"), | 976 MockRead("Content-Length: 666\r\n"), |
973 MockRead("Content-Length: 1337\r\n"), | 977 MockRead("Content-Length: 1337\r\n"), |
974 MockRead("Transfer-Encoding: chunked\r\n\r\n"), | 978 MockRead("Transfer-Encoding: chunked\r\n\r\n"), |
975 MockRead("5\r\nHello\r\n"), | 979 MockRead("5\r\nHello\r\n"), |
976 MockRead("1\r\n"), | 980 MockRead("1\r\n"), |
977 MockRead(" \r\n"), | 981 MockRead(" \r\n"), |
978 MockRead("5\r\nworld\r\n"), | 982 MockRead("5\r\nworld\r\n"), |
979 MockRead("0\r\n\r\nHTTP/1.1 200 OK\r\n"), | 983 MockRead("0\r\n\r\nHTTP/1.1 200 OK\r\n"), |
980 MockRead(SYNCHRONOUS, OK), | 984 MockRead(SYNCHRONOUS, OK), |
981 }; | 985 }; |
982 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 986 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
983 arraysize(data_reads)); | 987 arraysize(data_reads)); |
984 EXPECT_EQ(OK, out.rv); | 988 EXPECT_THAT(out.rv, IsOk()); |
985 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 989 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
986 EXPECT_EQ("Hello world", out.response_data); | 990 EXPECT_EQ("Hello world", out.response_data); |
987 } | 991 } |
988 | 992 |
989 // Next tests deal with http://crbug.com/98895. | 993 // Next tests deal with http://crbug.com/98895. |
990 | 994 |
991 // Checks that a single Content-Disposition header results in no error. | 995 // Checks that a single Content-Disposition header results in no error. |
992 TEST_P(HttpNetworkTransactionTest, SingleContentDispositionHeader) { | 996 TEST_P(HttpNetworkTransactionTest, SingleContentDispositionHeader) { |
993 MockRead data_reads[] = { | 997 MockRead data_reads[] = { |
994 MockRead("HTTP/1.1 200 OK\r\n"), | 998 MockRead("HTTP/1.1 200 OK\r\n"), |
995 MockRead("Content-Disposition: attachment;filename=\"salutations.txt\"r\n"), | 999 MockRead("Content-Disposition: attachment;filename=\"salutations.txt\"r\n"), |
996 MockRead("Content-Length: 5\r\n\r\n"), | 1000 MockRead("Content-Length: 5\r\n\r\n"), |
997 MockRead("Hello"), | 1001 MockRead("Hello"), |
998 }; | 1002 }; |
999 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1003 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
1000 arraysize(data_reads)); | 1004 arraysize(data_reads)); |
1001 EXPECT_EQ(OK, out.rv); | 1005 EXPECT_THAT(out.rv, IsOk()); |
1002 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 1006 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
1003 EXPECT_EQ("Hello", out.response_data); | 1007 EXPECT_EQ("Hello", out.response_data); |
1004 } | 1008 } |
1005 | 1009 |
1006 // Checks that two identical Content-Disposition headers result in no error. | 1010 // Checks that two identical Content-Disposition headers result in no error. |
1007 TEST_P(HttpNetworkTransactionTest, | 1011 TEST_P(HttpNetworkTransactionTest, |
1008 TwoIdenticalContentDispositionHeaders) { | 1012 TwoIdenticalContentDispositionHeaders) { |
1009 MockRead data_reads[] = { | 1013 MockRead data_reads[] = { |
1010 MockRead("HTTP/1.1 200 OK\r\n"), | 1014 MockRead("HTTP/1.1 200 OK\r\n"), |
1011 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 1015 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
1012 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 1016 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
1013 MockRead("Content-Length: 5\r\n\r\n"), | 1017 MockRead("Content-Length: 5\r\n\r\n"), |
1014 MockRead("Hello"), | 1018 MockRead("Hello"), |
1015 }; | 1019 }; |
1016 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1020 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
1017 arraysize(data_reads)); | 1021 arraysize(data_reads)); |
1018 EXPECT_EQ(OK, out.rv); | 1022 EXPECT_THAT(out.rv, IsOk()); |
1019 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 1023 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
1020 EXPECT_EQ("Hello", out.response_data); | 1024 EXPECT_EQ("Hello", out.response_data); |
1021 } | 1025 } |
1022 | 1026 |
1023 // Checks that two distinct Content-Disposition headers result in an error. | 1027 // Checks that two distinct Content-Disposition headers result in an error. |
1024 TEST_P(HttpNetworkTransactionTest, TwoDistinctContentDispositionHeaders) { | 1028 TEST_P(HttpNetworkTransactionTest, TwoDistinctContentDispositionHeaders) { |
1025 MockRead data_reads[] = { | 1029 MockRead data_reads[] = { |
1026 MockRead("HTTP/1.1 200 OK\r\n"), | 1030 MockRead("HTTP/1.1 200 OK\r\n"), |
1027 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 1031 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
1028 MockRead("Content-Disposition: attachment;filename=\"hi.txt\"r\n"), | 1032 MockRead("Content-Disposition: attachment;filename=\"hi.txt\"r\n"), |
1029 MockRead("Content-Length: 5\r\n\r\n"), | 1033 MockRead("Content-Length: 5\r\n\r\n"), |
1030 MockRead("Hello"), | 1034 MockRead("Hello"), |
1031 }; | 1035 }; |
1032 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1036 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
1033 arraysize(data_reads)); | 1037 arraysize(data_reads)); |
1034 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION, out.rv); | 1038 EXPECT_THAT(out.rv, |
| 1039 IsError(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION)); |
1035 } | 1040 } |
1036 | 1041 |
1037 // Checks that two identical Location headers result in no error. | 1042 // Checks that two identical Location headers result in no error. |
1038 // Also tests Location header behavior. | 1043 // Also tests Location header behavior. |
1039 TEST_P(HttpNetworkTransactionTest, TwoIdenticalLocationHeaders) { | 1044 TEST_P(HttpNetworkTransactionTest, TwoIdenticalLocationHeaders) { |
1040 MockRead data_reads[] = { | 1045 MockRead data_reads[] = { |
1041 MockRead("HTTP/1.1 302 Redirect\r\n"), | 1046 MockRead("HTTP/1.1 302 Redirect\r\n"), |
1042 MockRead("Location: http://good.com/\r\n"), | 1047 MockRead("Location: http://good.com/\r\n"), |
1043 MockRead("Location: http://good.com/\r\n"), | 1048 MockRead("Location: http://good.com/\r\n"), |
1044 MockRead("Content-Length: 0\r\n\r\n"), | 1049 MockRead("Content-Length: 0\r\n\r\n"), |
1045 MockRead(SYNCHRONOUS, OK), | 1050 MockRead(SYNCHRONOUS, OK), |
1046 }; | 1051 }; |
1047 | 1052 |
1048 HttpRequestInfo request; | 1053 HttpRequestInfo request; |
1049 request.method = "GET"; | 1054 request.method = "GET"; |
1050 request.url = GURL("http://redirect.com/"); | 1055 request.url = GURL("http://redirect.com/"); |
1051 request.load_flags = 0; | 1056 request.load_flags = 0; |
1052 | 1057 |
1053 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1058 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1054 std::unique_ptr<HttpTransaction> trans( | 1059 std::unique_ptr<HttpTransaction> trans( |
1055 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1060 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1056 | 1061 |
1057 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1062 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1058 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1063 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1059 | 1064 |
1060 TestCompletionCallback callback; | 1065 TestCompletionCallback callback; |
1061 | 1066 |
1062 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1067 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1063 EXPECT_EQ(ERR_IO_PENDING, rv); | 1068 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1064 | 1069 |
1065 EXPECT_EQ(OK, callback.WaitForResult()); | 1070 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
1066 | 1071 |
1067 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1072 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1068 ASSERT_TRUE(response); | 1073 ASSERT_TRUE(response); |
1069 ASSERT_TRUE(response->headers); | 1074 ASSERT_TRUE(response->headers); |
1070 EXPECT_EQ("HTTP/1.1 302 Redirect", response->headers->GetStatusLine()); | 1075 EXPECT_EQ("HTTP/1.1 302 Redirect", response->headers->GetStatusLine()); |
1071 std::string url; | 1076 std::string url; |
1072 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 1077 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
1073 EXPECT_EQ("http://good.com/", url); | 1078 EXPECT_EQ("http://good.com/", url); |
1074 EXPECT_TRUE(response->proxy_server.IsEmpty()); | 1079 EXPECT_TRUE(response->proxy_server.IsEmpty()); |
1075 } | 1080 } |
1076 | 1081 |
1077 // Checks that two distinct Location headers result in an error. | 1082 // Checks that two distinct Location headers result in an error. |
1078 TEST_P(HttpNetworkTransactionTest, TwoDistinctLocationHeaders) { | 1083 TEST_P(HttpNetworkTransactionTest, TwoDistinctLocationHeaders) { |
1079 MockRead data_reads[] = { | 1084 MockRead data_reads[] = { |
1080 MockRead("HTTP/1.1 302 Redirect\r\n"), | 1085 MockRead("HTTP/1.1 302 Redirect\r\n"), |
1081 MockRead("Location: http://good.com/\r\n"), | 1086 MockRead("Location: http://good.com/\r\n"), |
1082 MockRead("Location: http://evil.com/\r\n"), | 1087 MockRead("Location: http://evil.com/\r\n"), |
1083 MockRead("Content-Length: 0\r\n\r\n"), | 1088 MockRead("Content-Length: 0\r\n\r\n"), |
1084 MockRead(SYNCHRONOUS, OK), | 1089 MockRead(SYNCHRONOUS, OK), |
1085 }; | 1090 }; |
1086 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1091 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
1087 arraysize(data_reads)); | 1092 arraysize(data_reads)); |
1088 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION, out.rv); | 1093 EXPECT_THAT(out.rv, IsError(ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION)); |
1089 } | 1094 } |
1090 | 1095 |
1091 // Do a request using the HEAD method. Verify that we don't try to read the | 1096 // Do a request using the HEAD method. Verify that we don't try to read the |
1092 // message body (since HEAD has none). | 1097 // message body (since HEAD has none). |
1093 TEST_P(HttpNetworkTransactionTest, Head) { | 1098 TEST_P(HttpNetworkTransactionTest, Head) { |
1094 HttpRequestInfo request; | 1099 HttpRequestInfo request; |
1095 request.method = "HEAD"; | 1100 request.method = "HEAD"; |
1096 request.url = GURL("http://www.example.org/"); | 1101 request.url = GURL("http://www.example.org/"); |
1097 request.load_flags = 0; | 1102 request.load_flags = 0; |
1098 | 1103 |
(...skipping 18 matching lines...) Expand all Loading... |
1117 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | 1122 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
1118 }; | 1123 }; |
1119 | 1124 |
1120 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1125 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
1121 data_writes1, arraysize(data_writes1)); | 1126 data_writes1, arraysize(data_writes1)); |
1122 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 1127 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
1123 | 1128 |
1124 TestCompletionCallback callback1; | 1129 TestCompletionCallback callback1; |
1125 | 1130 |
1126 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 1131 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
1127 EXPECT_EQ(ERR_IO_PENDING, rv); | 1132 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1128 | 1133 |
1129 rv = callback1.WaitForResult(); | 1134 rv = callback1.WaitForResult(); |
1130 EXPECT_EQ(OK, rv); | 1135 EXPECT_THAT(rv, IsOk()); |
1131 | 1136 |
1132 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1137 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1133 ASSERT_TRUE(response); | 1138 ASSERT_TRUE(response); |
1134 | 1139 |
1135 // Check that the headers got parsed. | 1140 // Check that the headers got parsed. |
1136 EXPECT_TRUE(response->headers); | 1141 EXPECT_TRUE(response->headers); |
1137 EXPECT_EQ(1234, response->headers->GetContentLength()); | 1142 EXPECT_EQ(1234, response->headers->GetContentLength()); |
1138 EXPECT_EQ("HTTP/1.1 404 Not Found", response->headers->GetStatusLine()); | 1143 EXPECT_EQ("HTTP/1.1 404 Not Found", response->headers->GetStatusLine()); |
1139 EXPECT_TRUE(response->proxy_server.IsEmpty()); | 1144 EXPECT_TRUE(response->proxy_server.IsEmpty()); |
1140 EXPECT_TRUE(headers_handler.observed_before_headers_sent()); | 1145 EXPECT_TRUE(headers_handler.observed_before_headers_sent()); |
1141 EXPECT_FALSE(headers_handler.observed_before_headers_sent_with_proxy()); | 1146 EXPECT_FALSE(headers_handler.observed_before_headers_sent_with_proxy()); |
1142 | 1147 |
1143 std::string server_header; | 1148 std::string server_header; |
1144 size_t iter = 0; | 1149 size_t iter = 0; |
1145 bool has_server_header = response->headers->EnumerateHeader( | 1150 bool has_server_header = response->headers->EnumerateHeader( |
1146 &iter, "Server", &server_header); | 1151 &iter, "Server", &server_header); |
1147 EXPECT_TRUE(has_server_header); | 1152 EXPECT_TRUE(has_server_header); |
1148 EXPECT_EQ("Blah", server_header); | 1153 EXPECT_EQ("Blah", server_header); |
1149 | 1154 |
1150 // Reading should give EOF right away, since there is no message body | 1155 // Reading should give EOF right away, since there is no message body |
1151 // (despite non-zero content-length). | 1156 // (despite non-zero content-length). |
1152 std::string response_data; | 1157 std::string response_data; |
1153 rv = ReadTransaction(trans.get(), &response_data); | 1158 rv = ReadTransaction(trans.get(), &response_data); |
1154 EXPECT_EQ(OK, rv); | 1159 EXPECT_THAT(rv, IsOk()); |
1155 EXPECT_EQ("", response_data); | 1160 EXPECT_EQ("", response_data); |
1156 } | 1161 } |
1157 | 1162 |
1158 TEST_P(HttpNetworkTransactionTest, ReuseConnection) { | 1163 TEST_P(HttpNetworkTransactionTest, ReuseConnection) { |
1159 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1164 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1160 | 1165 |
1161 MockRead data_reads[] = { | 1166 MockRead data_reads[] = { |
1162 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1167 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
1163 MockRead("hello"), | 1168 MockRead("hello"), |
1164 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1169 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
(...skipping 12 matching lines...) Expand all Loading... |
1177 request.method = "GET"; | 1182 request.method = "GET"; |
1178 request.url = GURL("http://www.example.org/"); | 1183 request.url = GURL("http://www.example.org/"); |
1179 request.load_flags = 0; | 1184 request.load_flags = 0; |
1180 | 1185 |
1181 std::unique_ptr<HttpTransaction> trans( | 1186 std::unique_ptr<HttpTransaction> trans( |
1182 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1187 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1183 | 1188 |
1184 TestCompletionCallback callback; | 1189 TestCompletionCallback callback; |
1185 | 1190 |
1186 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1191 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1187 EXPECT_EQ(ERR_IO_PENDING, rv); | 1192 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1188 | 1193 |
1189 rv = callback.WaitForResult(); | 1194 rv = callback.WaitForResult(); |
1190 EXPECT_EQ(OK, rv); | 1195 EXPECT_THAT(rv, IsOk()); |
1191 | 1196 |
1192 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1197 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1193 ASSERT_TRUE(response); | 1198 ASSERT_TRUE(response); |
1194 | 1199 |
1195 EXPECT_TRUE(response->headers); | 1200 EXPECT_TRUE(response->headers); |
1196 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1201 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
1197 EXPECT_TRUE(response->proxy_server.IsEmpty()); | 1202 EXPECT_TRUE(response->proxy_server.IsEmpty()); |
1198 | 1203 |
1199 std::string response_data; | 1204 std::string response_data; |
1200 rv = ReadTransaction(trans.get(), &response_data); | 1205 rv = ReadTransaction(trans.get(), &response_data); |
1201 EXPECT_EQ(OK, rv); | 1206 EXPECT_THAT(rv, IsOk()); |
1202 EXPECT_EQ(kExpectedResponseData[i], response_data); | 1207 EXPECT_EQ(kExpectedResponseData[i], response_data); |
1203 } | 1208 } |
1204 } | 1209 } |
1205 | 1210 |
1206 TEST_P(HttpNetworkTransactionTest, Ignores100) { | 1211 TEST_P(HttpNetworkTransactionTest, Ignores100) { |
1207 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 1212 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
1208 element_readers.push_back( | 1213 element_readers.push_back( |
1209 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 1214 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
1210 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 1215 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
1211 | 1216 |
(...skipping 12 matching lines...) Expand all Loading... |
1224 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 1229 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
1225 MockRead("hello world"), | 1230 MockRead("hello world"), |
1226 MockRead(SYNCHRONOUS, OK), | 1231 MockRead(SYNCHRONOUS, OK), |
1227 }; | 1232 }; |
1228 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1233 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1229 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1234 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1230 | 1235 |
1231 TestCompletionCallback callback; | 1236 TestCompletionCallback callback; |
1232 | 1237 |
1233 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1238 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1234 EXPECT_EQ(ERR_IO_PENDING, rv); | 1239 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1235 | 1240 |
1236 rv = callback.WaitForResult(); | 1241 rv = callback.WaitForResult(); |
1237 EXPECT_EQ(OK, rv); | 1242 EXPECT_THAT(rv, IsOk()); |
1238 | 1243 |
1239 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1244 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1240 ASSERT_TRUE(response); | 1245 ASSERT_TRUE(response); |
1241 | 1246 |
1242 EXPECT_TRUE(response->headers); | 1247 EXPECT_TRUE(response->headers); |
1243 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 1248 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
1244 | 1249 |
1245 std::string response_data; | 1250 std::string response_data; |
1246 rv = ReadTransaction(trans.get(), &response_data); | 1251 rv = ReadTransaction(trans.get(), &response_data); |
1247 EXPECT_EQ(OK, rv); | 1252 EXPECT_THAT(rv, IsOk()); |
1248 EXPECT_EQ("hello world", response_data); | 1253 EXPECT_EQ("hello world", response_data); |
1249 } | 1254 } |
1250 | 1255 |
1251 // This test is almost the same as Ignores100 above, but the response contains | 1256 // This test is almost the same as Ignores100 above, but the response contains |
1252 // a 102 instead of a 100. Also, instead of HTTP/1.0 the response is | 1257 // a 102 instead of a 100. Also, instead of HTTP/1.0 the response is |
1253 // HTTP/1.1 and the two status headers are read in one read. | 1258 // HTTP/1.1 and the two status headers are read in one read. |
1254 TEST_P(HttpNetworkTransactionTest, Ignores1xx) { | 1259 TEST_P(HttpNetworkTransactionTest, Ignores1xx) { |
1255 HttpRequestInfo request; | 1260 HttpRequestInfo request; |
1256 request.method = "GET"; | 1261 request.method = "GET"; |
1257 request.url = GURL("http://www.foo.com/"); | 1262 request.url = GURL("http://www.foo.com/"); |
1258 request.load_flags = 0; | 1263 request.load_flags = 0; |
1259 | 1264 |
1260 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1265 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1261 std::unique_ptr<HttpTransaction> trans( | 1266 std::unique_ptr<HttpTransaction> trans( |
1262 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1267 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1263 | 1268 |
1264 MockRead data_reads[] = { | 1269 MockRead data_reads[] = { |
1265 MockRead("HTTP/1.1 102 Unspecified status code\r\n\r\n" | 1270 MockRead("HTTP/1.1 102 Unspecified status code\r\n\r\n" |
1266 "HTTP/1.1 200 OK\r\n\r\n"), | 1271 "HTTP/1.1 200 OK\r\n\r\n"), |
1267 MockRead("hello world"), | 1272 MockRead("hello world"), |
1268 MockRead(SYNCHRONOUS, OK), | 1273 MockRead(SYNCHRONOUS, OK), |
1269 }; | 1274 }; |
1270 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1275 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1271 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1276 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1272 | 1277 |
1273 TestCompletionCallback callback; | 1278 TestCompletionCallback callback; |
1274 | 1279 |
1275 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1280 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1276 EXPECT_EQ(ERR_IO_PENDING, rv); | 1281 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1277 | 1282 |
1278 rv = callback.WaitForResult(); | 1283 rv = callback.WaitForResult(); |
1279 EXPECT_EQ(OK, rv); | 1284 EXPECT_THAT(rv, IsOk()); |
1280 | 1285 |
1281 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1286 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1282 ASSERT_TRUE(response); | 1287 ASSERT_TRUE(response); |
1283 | 1288 |
1284 EXPECT_TRUE(response->headers); | 1289 EXPECT_TRUE(response->headers); |
1285 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1290 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
1286 | 1291 |
1287 std::string response_data; | 1292 std::string response_data; |
1288 rv = ReadTransaction(trans.get(), &response_data); | 1293 rv = ReadTransaction(trans.get(), &response_data); |
1289 EXPECT_EQ(OK, rv); | 1294 EXPECT_THAT(rv, IsOk()); |
1290 EXPECT_EQ("hello world", response_data); | 1295 EXPECT_EQ("hello world", response_data); |
1291 } | 1296 } |
1292 | 1297 |
1293 TEST_P(HttpNetworkTransactionTest, Incomplete100ThenEOF) { | 1298 TEST_P(HttpNetworkTransactionTest, Incomplete100ThenEOF) { |
1294 HttpRequestInfo request; | 1299 HttpRequestInfo request; |
1295 request.method = "POST"; | 1300 request.method = "POST"; |
1296 request.url = GURL("http://www.foo.com/"); | 1301 request.url = GURL("http://www.foo.com/"); |
1297 request.load_flags = 0; | 1302 request.load_flags = 0; |
1298 | 1303 |
1299 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1304 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1300 std::unique_ptr<HttpTransaction> trans( | 1305 std::unique_ptr<HttpTransaction> trans( |
1301 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1306 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1302 | 1307 |
1303 MockRead data_reads[] = { | 1308 MockRead data_reads[] = { |
1304 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), | 1309 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), |
1305 MockRead(ASYNC, 0), | 1310 MockRead(ASYNC, 0), |
1306 }; | 1311 }; |
1307 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1312 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1308 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1313 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1309 | 1314 |
1310 TestCompletionCallback callback; | 1315 TestCompletionCallback callback; |
1311 | 1316 |
1312 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1317 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1313 EXPECT_EQ(ERR_IO_PENDING, rv); | 1318 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1314 | 1319 |
1315 rv = callback.WaitForResult(); | 1320 rv = callback.WaitForResult(); |
1316 EXPECT_EQ(OK, rv); | 1321 EXPECT_THAT(rv, IsOk()); |
1317 | 1322 |
1318 std::string response_data; | 1323 std::string response_data; |
1319 rv = ReadTransaction(trans.get(), &response_data); | 1324 rv = ReadTransaction(trans.get(), &response_data); |
1320 EXPECT_EQ(OK, rv); | 1325 EXPECT_THAT(rv, IsOk()); |
1321 EXPECT_EQ("", response_data); | 1326 EXPECT_EQ("", response_data); |
1322 } | 1327 } |
1323 | 1328 |
1324 TEST_P(HttpNetworkTransactionTest, EmptyResponse) { | 1329 TEST_P(HttpNetworkTransactionTest, EmptyResponse) { |
1325 HttpRequestInfo request; | 1330 HttpRequestInfo request; |
1326 request.method = "POST"; | 1331 request.method = "POST"; |
1327 request.url = GURL("http://www.foo.com/"); | 1332 request.url = GURL("http://www.foo.com/"); |
1328 request.load_flags = 0; | 1333 request.load_flags = 0; |
1329 | 1334 |
1330 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1335 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1331 std::unique_ptr<HttpTransaction> trans( | 1336 std::unique_ptr<HttpTransaction> trans( |
1332 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1337 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1333 | 1338 |
1334 MockRead data_reads[] = { | 1339 MockRead data_reads[] = { |
1335 MockRead(ASYNC, 0), | 1340 MockRead(ASYNC, 0), |
1336 }; | 1341 }; |
1337 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1342 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1338 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1343 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1339 | 1344 |
1340 TestCompletionCallback callback; | 1345 TestCompletionCallback callback; |
1341 | 1346 |
1342 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1347 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1343 EXPECT_EQ(ERR_IO_PENDING, rv); | 1348 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1344 | 1349 |
1345 rv = callback.WaitForResult(); | 1350 rv = callback.WaitForResult(); |
1346 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); | 1351 EXPECT_THAT(rv, IsError(ERR_EMPTY_RESPONSE)); |
1347 } | 1352 } |
1348 | 1353 |
1349 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( | 1354 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( |
1350 const MockWrite* write_failure, | 1355 const MockWrite* write_failure, |
1351 const MockRead* read_failure) { | 1356 const MockRead* read_failure) { |
1352 HttpRequestInfo request; | 1357 HttpRequestInfo request; |
1353 request.method = "GET"; | 1358 request.method = "GET"; |
1354 request.url = GURL("http://www.foo.com/"); | 1359 request.url = GURL("http://www.foo.com/"); |
1355 request.load_flags = 0; | 1360 request.load_flags = 0; |
1356 | 1361 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1400 }; | 1405 }; |
1401 | 1406 |
1402 uint32_t first_socket_log_id = NetLog::Source::kInvalidId; | 1407 uint32_t first_socket_log_id = NetLog::Source::kInvalidId; |
1403 for (int i = 0; i < 2; ++i) { | 1408 for (int i = 0; i < 2; ++i) { |
1404 TestCompletionCallback callback; | 1409 TestCompletionCallback callback; |
1405 | 1410 |
1406 std::unique_ptr<HttpTransaction> trans( | 1411 std::unique_ptr<HttpTransaction> trans( |
1407 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1412 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1408 | 1413 |
1409 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1414 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1410 EXPECT_EQ(ERR_IO_PENDING, rv); | 1415 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1411 | 1416 |
1412 rv = callback.WaitForResult(); | 1417 rv = callback.WaitForResult(); |
1413 EXPECT_EQ(OK, rv); | 1418 EXPECT_THAT(rv, IsOk()); |
1414 | 1419 |
1415 LoadTimingInfo load_timing_info; | 1420 LoadTimingInfo load_timing_info; |
1416 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 1421 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
1417 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); | 1422 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
1418 if (i == 0) { | 1423 if (i == 0) { |
1419 first_socket_log_id = load_timing_info.socket_log_id; | 1424 first_socket_log_id = load_timing_info.socket_log_id; |
1420 } else { | 1425 } else { |
1421 // The second request should be using a new socket. | 1426 // The second request should be using a new socket. |
1422 EXPECT_NE(first_socket_log_id, load_timing_info.socket_log_id); | 1427 EXPECT_NE(first_socket_log_id, load_timing_info.socket_log_id); |
1423 } | 1428 } |
1424 | 1429 |
1425 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1430 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1426 ASSERT_TRUE(response); | 1431 ASSERT_TRUE(response); |
1427 | 1432 |
1428 EXPECT_TRUE(response->headers); | 1433 EXPECT_TRUE(response->headers); |
1429 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1434 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
1430 | 1435 |
1431 std::string response_data; | 1436 std::string response_data; |
1432 rv = ReadTransaction(trans.get(), &response_data); | 1437 rv = ReadTransaction(trans.get(), &response_data); |
1433 EXPECT_EQ(OK, rv); | 1438 EXPECT_THAT(rv, IsOk()); |
1434 EXPECT_EQ(kExpectedResponseData[i], response_data); | 1439 EXPECT_EQ(kExpectedResponseData[i], response_data); |
1435 } | 1440 } |
1436 } | 1441 } |
1437 | 1442 |
1438 void HttpNetworkTransactionTest::PreconnectErrorResendRequestTest( | 1443 void HttpNetworkTransactionTest::PreconnectErrorResendRequestTest( |
1439 const MockWrite* write_failure, | 1444 const MockWrite* write_failure, |
1440 const MockRead* read_failure, | 1445 const MockRead* read_failure, |
1441 bool use_spdy) { | 1446 bool use_spdy) { |
1442 HttpRequestInfo request; | 1447 HttpRequestInfo request; |
1443 request.method = "GET"; | 1448 request.method = "GET"; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1521 base::RunLoop().RunUntilIdle(); | 1526 base::RunLoop().RunUntilIdle(); |
1522 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 1527 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
1523 | 1528 |
1524 // Make the request. | 1529 // Make the request. |
1525 TestCompletionCallback callback; | 1530 TestCompletionCallback callback; |
1526 | 1531 |
1527 std::unique_ptr<HttpTransaction> trans( | 1532 std::unique_ptr<HttpTransaction> trans( |
1528 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1533 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1529 | 1534 |
1530 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1535 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1531 EXPECT_EQ(ERR_IO_PENDING, rv); | 1536 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1532 | 1537 |
1533 rv = callback.WaitForResult(); | 1538 rv = callback.WaitForResult(); |
1534 EXPECT_EQ(OK, rv); | 1539 EXPECT_THAT(rv, IsOk()); |
1535 | 1540 |
1536 LoadTimingInfo load_timing_info; | 1541 LoadTimingInfo load_timing_info; |
1537 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 1542 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
1538 TestLoadTimingNotReused( | 1543 TestLoadTimingNotReused( |
1539 load_timing_info, | 1544 load_timing_info, |
1540 CONNECT_TIMING_HAS_DNS_TIMES|CONNECT_TIMING_HAS_SSL_TIMES); | 1545 CONNECT_TIMING_HAS_DNS_TIMES|CONNECT_TIMING_HAS_SSL_TIMES); |
1541 | 1546 |
1542 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1547 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1543 ASSERT_TRUE(response); | 1548 ASSERT_TRUE(response); |
1544 | 1549 |
1545 EXPECT_TRUE(response->headers); | 1550 EXPECT_TRUE(response->headers); |
1546 if (response->was_fetched_via_spdy) { | 1551 if (response->was_fetched_via_spdy) { |
1547 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 1552 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
1548 } else { | 1553 } else { |
1549 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1554 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
1550 } | 1555 } |
1551 | 1556 |
1552 std::string response_data; | 1557 std::string response_data; |
1553 rv = ReadTransaction(trans.get(), &response_data); | 1558 rv = ReadTransaction(trans.get(), &response_data); |
1554 EXPECT_EQ(OK, rv); | 1559 EXPECT_THAT(rv, IsOk()); |
1555 EXPECT_EQ(kHttpData, response_data); | 1560 EXPECT_EQ(kHttpData, response_data); |
1556 } | 1561 } |
1557 | 1562 |
1558 TEST_P(HttpNetworkTransactionTest, | 1563 TEST_P(HttpNetworkTransactionTest, |
1559 KeepAliveConnectionNotConnectedOnWrite) { | 1564 KeepAliveConnectionNotConnectedOnWrite) { |
1560 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 1565 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
1561 KeepAliveConnectionResendRequestTest(&write_failure, NULL); | 1566 KeepAliveConnectionResendRequestTest(&write_failure, NULL); |
1562 } | 1567 } |
1563 | 1568 |
1564 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionReset) { | 1569 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionReset) { |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1651 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used | 1656 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used |
1652 MockRead("hello world"), | 1657 MockRead("hello world"), |
1653 MockRead(SYNCHRONOUS, OK), | 1658 MockRead(SYNCHRONOUS, OK), |
1654 }; | 1659 }; |
1655 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1660 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1656 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1661 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1657 | 1662 |
1658 TestCompletionCallback callback; | 1663 TestCompletionCallback callback; |
1659 | 1664 |
1660 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1665 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1661 EXPECT_EQ(ERR_IO_PENDING, rv); | 1666 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1662 | 1667 |
1663 rv = callback.WaitForResult(); | 1668 rv = callback.WaitForResult(); |
1664 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 1669 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
1665 | 1670 |
1666 IPEndPoint endpoint; | 1671 IPEndPoint endpoint; |
1667 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); | 1672 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); |
1668 EXPECT_LT(0u, endpoint.address().size()); | 1673 EXPECT_LT(0u, endpoint.address().size()); |
1669 } | 1674 } |
1670 | 1675 |
1671 // What do various browsers do when the server closes a non-keepalive | 1676 // What do various browsers do when the server closes a non-keepalive |
1672 // connection without sending any response header or body? | 1677 // connection without sending any response header or body? |
1673 // | 1678 // |
1674 // IE7: error page | 1679 // IE7: error page |
1675 // Safari 3.1.2 (Windows): error page | 1680 // Safari 3.1.2 (Windows): error page |
1676 // Firefox 3.0.1: blank page | 1681 // Firefox 3.0.1: blank page |
1677 // Opera 9.52: after five attempts, blank page | 1682 // Opera 9.52: after five attempts, blank page |
1678 // Us with WinHTTP: error page (ERR_INVALID_RESPONSE) | 1683 // Us with WinHTTP: error page (ERR_INVALID_RESPONSE) |
1679 // Us: error page (EMPTY_RESPONSE) | 1684 // Us: error page (EMPTY_RESPONSE) |
1680 TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionEOF) { | 1685 TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionEOF) { |
1681 MockRead data_reads[] = { | 1686 MockRead data_reads[] = { |
1682 MockRead(SYNCHRONOUS, OK), // EOF | 1687 MockRead(SYNCHRONOUS, OK), // EOF |
1683 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used | 1688 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used |
1684 MockRead("hello world"), | 1689 MockRead("hello world"), |
1685 MockRead(SYNCHRONOUS, OK), | 1690 MockRead(SYNCHRONOUS, OK), |
1686 }; | 1691 }; |
1687 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1692 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
1688 arraysize(data_reads)); | 1693 arraysize(data_reads)); |
1689 EXPECT_EQ(ERR_EMPTY_RESPONSE, out.rv); | 1694 EXPECT_THAT(out.rv, IsError(ERR_EMPTY_RESPONSE)); |
1690 } | 1695 } |
1691 | 1696 |
1692 // Test that network access can be deferred and resumed. | 1697 // Test that network access can be deferred and resumed. |
1693 TEST_P(HttpNetworkTransactionTest, ThrottleBeforeNetworkStart) { | 1698 TEST_P(HttpNetworkTransactionTest, ThrottleBeforeNetworkStart) { |
1694 HttpRequestInfo request; | 1699 HttpRequestInfo request; |
1695 request.method = "GET"; | 1700 request.method = "GET"; |
1696 request.url = GURL("http://www.example.org/"); | 1701 request.url = GURL("http://www.example.org/"); |
1697 request.load_flags = 0; | 1702 request.load_flags = 0; |
1698 | 1703 |
1699 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1704 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
(...skipping 11 matching lines...) Expand all Loading... |
1711 MockRead("Content-Length: 5\r\n\r\n"), | 1716 MockRead("Content-Length: 5\r\n\r\n"), |
1712 MockRead("hello"), | 1717 MockRead("hello"), |
1713 MockRead(SYNCHRONOUS, 0), | 1718 MockRead(SYNCHRONOUS, 0), |
1714 }; | 1719 }; |
1715 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1720 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1716 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1721 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1717 | 1722 |
1718 TestCompletionCallback callback; | 1723 TestCompletionCallback callback; |
1719 | 1724 |
1720 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1725 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1721 EXPECT_EQ(ERR_IO_PENDING, rv); | 1726 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1722 base::RunLoop().RunUntilIdle(); | 1727 base::RunLoop().RunUntilIdle(); |
1723 | 1728 |
1724 // Should have deferred for network start. | 1729 // Should have deferred for network start. |
1725 EXPECT_TRUE(net_start_handler.observed_before_network_start()); | 1730 EXPECT_TRUE(net_start_handler.observed_before_network_start()); |
1726 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); | 1731 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); |
1727 | 1732 |
1728 trans->ResumeNetworkStart(); | 1733 trans->ResumeNetworkStart(); |
1729 rv = callback.WaitForResult(); | 1734 rv = callback.WaitForResult(); |
1730 EXPECT_EQ(OK, rv); | 1735 EXPECT_THAT(rv, IsOk()); |
1731 EXPECT_TRUE(trans->GetResponseInfo()); | 1736 EXPECT_TRUE(trans->GetResponseInfo()); |
1732 | 1737 |
1733 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); | 1738 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); |
1734 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 1739 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
1735 if (rv == ERR_IO_PENDING) | 1740 if (rv == ERR_IO_PENDING) |
1736 rv = callback.WaitForResult(); | 1741 rv = callback.WaitForResult(); |
1737 EXPECT_EQ(5, rv); | 1742 EXPECT_EQ(5, rv); |
1738 trans.reset(); | 1743 trans.reset(); |
1739 } | 1744 } |
1740 | 1745 |
(...skipping 10 matching lines...) Expand all Loading... |
1751 | 1756 |
1752 // Defer on OnBeforeNetworkStart. | 1757 // Defer on OnBeforeNetworkStart. |
1753 BeforeNetworkStartHandler net_start_handler(true); // defer | 1758 BeforeNetworkStartHandler net_start_handler(true); // defer |
1754 trans->SetBeforeNetworkStartCallback( | 1759 trans->SetBeforeNetworkStartCallback( |
1755 base::Bind(&BeforeNetworkStartHandler::OnBeforeNetworkStart, | 1760 base::Bind(&BeforeNetworkStartHandler::OnBeforeNetworkStart, |
1756 base::Unretained(&net_start_handler))); | 1761 base::Unretained(&net_start_handler))); |
1757 | 1762 |
1758 TestCompletionCallback callback; | 1763 TestCompletionCallback callback; |
1759 | 1764 |
1760 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1765 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1761 EXPECT_EQ(ERR_IO_PENDING, rv); | 1766 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1762 base::RunLoop().RunUntilIdle(); | 1767 base::RunLoop().RunUntilIdle(); |
1763 | 1768 |
1764 // Should have deferred for network start. | 1769 // Should have deferred for network start. |
1765 EXPECT_TRUE(net_start_handler.observed_before_network_start()); | 1770 EXPECT_TRUE(net_start_handler.observed_before_network_start()); |
1766 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); | 1771 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); |
1767 } | 1772 } |
1768 | 1773 |
1769 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression | 1774 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression |
1770 // tests. There was a bug causing HttpNetworkTransaction to hang in the | 1775 // tests. There was a bug causing HttpNetworkTransaction to hang in the |
1771 // destructor in such situations. | 1776 // destructor in such situations. |
(...skipping 14 matching lines...) Expand all Loading... |
1786 MockRead("Content-Length: 100\r\n\r\n"), | 1791 MockRead("Content-Length: 100\r\n\r\n"), |
1787 MockRead("hello"), | 1792 MockRead("hello"), |
1788 MockRead(SYNCHRONOUS, 0), | 1793 MockRead(SYNCHRONOUS, 0), |
1789 }; | 1794 }; |
1790 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1795 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1791 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1796 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1792 | 1797 |
1793 TestCompletionCallback callback; | 1798 TestCompletionCallback callback; |
1794 | 1799 |
1795 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1800 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1796 EXPECT_EQ(ERR_IO_PENDING, rv); | 1801 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1797 | 1802 |
1798 rv = callback.WaitForResult(); | 1803 rv = callback.WaitForResult(); |
1799 EXPECT_EQ(OK, rv); | 1804 EXPECT_THAT(rv, IsOk()); |
1800 | 1805 |
1801 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); | 1806 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); |
1802 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 1807 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
1803 if (rv == ERR_IO_PENDING) | 1808 if (rv == ERR_IO_PENDING) |
1804 rv = callback.WaitForResult(); | 1809 rv = callback.WaitForResult(); |
1805 EXPECT_EQ(5, rv); | 1810 EXPECT_EQ(5, rv); |
1806 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 1811 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
1807 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 1812 EXPECT_THAT(rv, IsError(ERR_CONTENT_LENGTH_MISMATCH)); |
1808 | 1813 |
1809 trans.reset(); | 1814 trans.reset(); |
1810 base::RunLoop().RunUntilIdle(); | 1815 base::RunLoop().RunUntilIdle(); |
1811 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1816 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
1812 } | 1817 } |
1813 | 1818 |
1814 TEST_P(HttpNetworkTransactionTest, KeepAliveEarlyClose2) { | 1819 TEST_P(HttpNetworkTransactionTest, KeepAliveEarlyClose2) { |
1815 HttpRequestInfo request; | 1820 HttpRequestInfo request; |
1816 request.method = "GET"; | 1821 request.method = "GET"; |
1817 request.url = GURL("http://www.example.org/"); | 1822 request.url = GURL("http://www.example.org/"); |
1818 request.load_flags = 0; | 1823 request.load_flags = 0; |
1819 | 1824 |
1820 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1825 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1821 std::unique_ptr<HttpTransaction> trans( | 1826 std::unique_ptr<HttpTransaction> trans( |
1822 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1827 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1823 | 1828 |
1824 MockRead data_reads[] = { | 1829 MockRead data_reads[] = { |
1825 MockRead("HTTP/1.0 200 OK\r\n"), | 1830 MockRead("HTTP/1.0 200 OK\r\n"), |
1826 MockRead("Connection: keep-alive\r\n"), | 1831 MockRead("Connection: keep-alive\r\n"), |
1827 MockRead("Content-Length: 100\r\n\r\n"), | 1832 MockRead("Content-Length: 100\r\n\r\n"), |
1828 MockRead(SYNCHRONOUS, 0), | 1833 MockRead(SYNCHRONOUS, 0), |
1829 }; | 1834 }; |
1830 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1835 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1831 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1836 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1832 | 1837 |
1833 TestCompletionCallback callback; | 1838 TestCompletionCallback callback; |
1834 | 1839 |
1835 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1840 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1836 EXPECT_EQ(ERR_IO_PENDING, rv); | 1841 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1837 | 1842 |
1838 rv = callback.WaitForResult(); | 1843 rv = callback.WaitForResult(); |
1839 EXPECT_EQ(OK, rv); | 1844 EXPECT_THAT(rv, IsOk()); |
1840 | 1845 |
1841 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); | 1846 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); |
1842 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 1847 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
1843 if (rv == ERR_IO_PENDING) | 1848 if (rv == ERR_IO_PENDING) |
1844 rv = callback.WaitForResult(); | 1849 rv = callback.WaitForResult(); |
1845 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 1850 EXPECT_THAT(rv, IsError(ERR_CONTENT_LENGTH_MISMATCH)); |
1846 | 1851 |
1847 trans.reset(); | 1852 trans.reset(); |
1848 base::RunLoop().RunUntilIdle(); | 1853 base::RunLoop().RunUntilIdle(); |
1849 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1854 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
1850 } | 1855 } |
1851 | 1856 |
1852 // Test that we correctly reuse a keep-alive connection after not explicitly | 1857 // Test that we correctly reuse a keep-alive connection after not explicitly |
1853 // reading the body. | 1858 // reading the body. |
1854 TEST_P(HttpNetworkTransactionTest, KeepAliveAfterUnreadBody) { | 1859 TEST_P(HttpNetworkTransactionTest, KeepAliveAfterUnreadBody) { |
1855 HttpRequestInfo request; | 1860 HttpRequestInfo request; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1923 std::string response_lines[kNumUnreadBodies]; | 1928 std::string response_lines[kNumUnreadBodies]; |
1924 | 1929 |
1925 uint32_t first_socket_log_id = NetLog::Source::kInvalidId; | 1930 uint32_t first_socket_log_id = NetLog::Source::kInvalidId; |
1926 for (size_t i = 0; i < kNumUnreadBodies; ++i) { | 1931 for (size_t i = 0; i < kNumUnreadBodies; ++i) { |
1927 TestCompletionCallback callback; | 1932 TestCompletionCallback callback; |
1928 | 1933 |
1929 std::unique_ptr<HttpTransaction> trans( | 1934 std::unique_ptr<HttpTransaction> trans( |
1930 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1935 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1931 | 1936 |
1932 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1937 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1933 EXPECT_EQ(OK, callback.GetResult(rv)); | 1938 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
1934 | 1939 |
1935 LoadTimingInfo load_timing_info; | 1940 LoadTimingInfo load_timing_info; |
1936 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 1941 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
1937 if (i == 0) { | 1942 if (i == 0) { |
1938 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); | 1943 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
1939 first_socket_log_id = load_timing_info.socket_log_id; | 1944 first_socket_log_id = load_timing_info.socket_log_id; |
1940 } else { | 1945 } else { |
1941 TestLoadTimingReused(load_timing_info); | 1946 TestLoadTimingReused(load_timing_info); |
1942 EXPECT_EQ(first_socket_log_id, load_timing_info.socket_log_id); | 1947 EXPECT_EQ(first_socket_log_id, load_timing_info.socket_log_id); |
1943 } | 1948 } |
(...skipping 25 matching lines...) Expand all Loading... |
1969 static_assert(kNumUnreadBodies == arraysize(kStatusLines), | 1974 static_assert(kNumUnreadBodies == arraysize(kStatusLines), |
1970 "forgot to update kStatusLines"); | 1975 "forgot to update kStatusLines"); |
1971 | 1976 |
1972 for (int i = 0; i < kNumUnreadBodies; ++i) | 1977 for (int i = 0; i < kNumUnreadBodies; ++i) |
1973 EXPECT_EQ(kStatusLines[i], response_lines[i]); | 1978 EXPECT_EQ(kStatusLines[i], response_lines[i]); |
1974 | 1979 |
1975 TestCompletionCallback callback; | 1980 TestCompletionCallback callback; |
1976 std::unique_ptr<HttpTransaction> trans( | 1981 std::unique_ptr<HttpTransaction> trans( |
1977 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1982 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1978 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1983 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1979 EXPECT_EQ(OK, callback.GetResult(rv)); | 1984 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
1980 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1985 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1981 ASSERT_TRUE(response); | 1986 ASSERT_TRUE(response); |
1982 ASSERT_TRUE(response->headers); | 1987 ASSERT_TRUE(response->headers); |
1983 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1988 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
1984 std::string response_data; | 1989 std::string response_data; |
1985 rv = ReadTransaction(trans.get(), &response_data); | 1990 rv = ReadTransaction(trans.get(), &response_data); |
1986 EXPECT_EQ(OK, rv); | 1991 EXPECT_THAT(rv, IsOk()); |
1987 EXPECT_EQ("hello", response_data); | 1992 EXPECT_EQ("hello", response_data); |
1988 } | 1993 } |
1989 | 1994 |
1990 // Sockets that receive extra data after a response is complete should not be | 1995 // Sockets that receive extra data after a response is complete should not be |
1991 // reused. | 1996 // reused. |
1992 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData1) { | 1997 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData1) { |
1993 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1998 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1994 MockWrite data_writes1[] = { | 1999 MockWrite data_writes1[] = { |
1995 MockWrite("HEAD / HTTP/1.1\r\n" | 2000 MockWrite("HEAD / HTTP/1.1\r\n" |
1996 "Host: www.borked.com\r\n" | 2001 "Host: www.borked.com\r\n" |
(...skipping 26 matching lines...) Expand all Loading... |
2023 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2028 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2024 | 2029 |
2025 TestCompletionCallback callback; | 2030 TestCompletionCallback callback; |
2026 HttpRequestInfo request1; | 2031 HttpRequestInfo request1; |
2027 request1.method = "HEAD"; | 2032 request1.method = "HEAD"; |
2028 request1.url = GURL("http://www.borked.com/"); | 2033 request1.url = GURL("http://www.borked.com/"); |
2029 | 2034 |
2030 std::unique_ptr<HttpTransaction> trans1( | 2035 std::unique_ptr<HttpTransaction> trans1( |
2031 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2036 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2032 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); | 2037 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); |
2033 EXPECT_EQ(OK, callback.GetResult(rv)); | 2038 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2034 | 2039 |
2035 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2040 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
2036 ASSERT_TRUE(response1); | 2041 ASSERT_TRUE(response1); |
2037 ASSERT_TRUE(response1->headers); | 2042 ASSERT_TRUE(response1->headers); |
2038 EXPECT_EQ(200, response1->headers->response_code()); | 2043 EXPECT_EQ(200, response1->headers->response_code()); |
2039 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2044 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
2040 | 2045 |
2041 std::string response_data1; | 2046 std::string response_data1; |
2042 EXPECT_EQ(OK, ReadTransaction(trans1.get(), &response_data1)); | 2047 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
2043 EXPECT_EQ("", response_data1); | 2048 EXPECT_EQ("", response_data1); |
2044 // Deleting the transaction attempts to release the socket back into the | 2049 // Deleting the transaction attempts to release the socket back into the |
2045 // socket pool. | 2050 // socket pool. |
2046 trans1.reset(); | 2051 trans1.reset(); |
2047 | 2052 |
2048 HttpRequestInfo request2; | 2053 HttpRequestInfo request2; |
2049 request2.method = "GET"; | 2054 request2.method = "GET"; |
2050 request2.url = GURL("http://www.borked.com/foo"); | 2055 request2.url = GURL("http://www.borked.com/foo"); |
2051 | 2056 |
2052 std::unique_ptr<HttpTransaction> trans2( | 2057 std::unique_ptr<HttpTransaction> trans2( |
2053 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2058 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2054 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 2059 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
2055 EXPECT_EQ(OK, callback.GetResult(rv)); | 2060 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2056 | 2061 |
2057 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 2062 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
2058 ASSERT_TRUE(response2); | 2063 ASSERT_TRUE(response2); |
2059 ASSERT_TRUE(response2->headers); | 2064 ASSERT_TRUE(response2->headers); |
2060 EXPECT_EQ(200, response2->headers->response_code()); | 2065 EXPECT_EQ(200, response2->headers->response_code()); |
2061 | 2066 |
2062 std::string response_data2; | 2067 std::string response_data2; |
2063 EXPECT_EQ(OK, ReadTransaction(trans2.get(), &response_data2)); | 2068 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); |
2064 EXPECT_EQ("foo", response_data2); | 2069 EXPECT_EQ("foo", response_data2); |
2065 } | 2070 } |
2066 | 2071 |
2067 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData2) { | 2072 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData2) { |
2068 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2073 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2069 MockWrite data_writes1[] = { | 2074 MockWrite data_writes1[] = { |
2070 MockWrite("GET / HTTP/1.1\r\n" | 2075 MockWrite("GET / HTTP/1.1\r\n" |
2071 "Host: www.borked.com\r\n" | 2076 "Host: www.borked.com\r\n" |
2072 "Connection: keep-alive\r\n\r\n"), | 2077 "Connection: keep-alive\r\n\r\n"), |
2073 }; | 2078 }; |
(...skipping 25 matching lines...) Expand all Loading... |
2099 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2104 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2100 | 2105 |
2101 TestCompletionCallback callback; | 2106 TestCompletionCallback callback; |
2102 HttpRequestInfo request1; | 2107 HttpRequestInfo request1; |
2103 request1.method = "GET"; | 2108 request1.method = "GET"; |
2104 request1.url = GURL("http://www.borked.com/"); | 2109 request1.url = GURL("http://www.borked.com/"); |
2105 | 2110 |
2106 std::unique_ptr<HttpTransaction> trans1( | 2111 std::unique_ptr<HttpTransaction> trans1( |
2107 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2112 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2108 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); | 2113 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); |
2109 EXPECT_EQ(OK, callback.GetResult(rv)); | 2114 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2110 | 2115 |
2111 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2116 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
2112 ASSERT_TRUE(response1); | 2117 ASSERT_TRUE(response1); |
2113 ASSERT_TRUE(response1->headers); | 2118 ASSERT_TRUE(response1->headers); |
2114 EXPECT_EQ(200, response1->headers->response_code()); | 2119 EXPECT_EQ(200, response1->headers->response_code()); |
2115 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2120 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
2116 | 2121 |
2117 std::string response_data1; | 2122 std::string response_data1; |
2118 EXPECT_EQ(OK, ReadTransaction(trans1.get(), &response_data1)); | 2123 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
2119 EXPECT_EQ("This server is borked.", response_data1); | 2124 EXPECT_EQ("This server is borked.", response_data1); |
2120 // Deleting the transaction attempts to release the socket back into the | 2125 // Deleting the transaction attempts to release the socket back into the |
2121 // socket pool. | 2126 // socket pool. |
2122 trans1.reset(); | 2127 trans1.reset(); |
2123 | 2128 |
2124 HttpRequestInfo request2; | 2129 HttpRequestInfo request2; |
2125 request2.method = "GET"; | 2130 request2.method = "GET"; |
2126 request2.url = GURL("http://www.borked.com/foo"); | 2131 request2.url = GURL("http://www.borked.com/foo"); |
2127 | 2132 |
2128 std::unique_ptr<HttpTransaction> trans2( | 2133 std::unique_ptr<HttpTransaction> trans2( |
2129 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2134 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2130 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 2135 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
2131 EXPECT_EQ(OK, callback.GetResult(rv)); | 2136 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2132 | 2137 |
2133 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 2138 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
2134 ASSERT_TRUE(response2); | 2139 ASSERT_TRUE(response2); |
2135 ASSERT_TRUE(response2->headers); | 2140 ASSERT_TRUE(response2->headers); |
2136 EXPECT_EQ(200, response2->headers->response_code()); | 2141 EXPECT_EQ(200, response2->headers->response_code()); |
2137 | 2142 |
2138 std::string response_data2; | 2143 std::string response_data2; |
2139 EXPECT_EQ(OK, ReadTransaction(trans2.get(), &response_data2)); | 2144 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); |
2140 EXPECT_EQ("foo", response_data2); | 2145 EXPECT_EQ("foo", response_data2); |
2141 } | 2146 } |
2142 | 2147 |
2143 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData3) { | 2148 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData3) { |
2144 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2149 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2145 MockWrite data_writes1[] = { | 2150 MockWrite data_writes1[] = { |
2146 MockWrite("GET / HTTP/1.1\r\n" | 2151 MockWrite("GET / HTTP/1.1\r\n" |
2147 "Host: www.borked.com\r\n" | 2152 "Host: www.borked.com\r\n" |
2148 "Connection: keep-alive\r\n\r\n"), | 2153 "Connection: keep-alive\r\n\r\n"), |
2149 }; | 2154 }; |
(...skipping 25 matching lines...) Expand all Loading... |
2175 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2180 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2176 | 2181 |
2177 TestCompletionCallback callback; | 2182 TestCompletionCallback callback; |
2178 HttpRequestInfo request1; | 2183 HttpRequestInfo request1; |
2179 request1.method = "GET"; | 2184 request1.method = "GET"; |
2180 request1.url = GURL("http://www.borked.com/"); | 2185 request1.url = GURL("http://www.borked.com/"); |
2181 | 2186 |
2182 std::unique_ptr<HttpTransaction> trans1( | 2187 std::unique_ptr<HttpTransaction> trans1( |
2183 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2188 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2184 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); | 2189 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); |
2185 EXPECT_EQ(OK, callback.GetResult(rv)); | 2190 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2186 | 2191 |
2187 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2192 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
2188 ASSERT_TRUE(response1); | 2193 ASSERT_TRUE(response1); |
2189 ASSERT_TRUE(response1->headers); | 2194 ASSERT_TRUE(response1->headers); |
2190 EXPECT_EQ(200, response1->headers->response_code()); | 2195 EXPECT_EQ(200, response1->headers->response_code()); |
2191 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2196 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
2192 | 2197 |
2193 std::string response_data1; | 2198 std::string response_data1; |
2194 EXPECT_EQ(OK, ReadTransaction(trans1.get(), &response_data1)); | 2199 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
2195 EXPECT_EQ("This server is borked.", response_data1); | 2200 EXPECT_EQ("This server is borked.", response_data1); |
2196 // Deleting the transaction attempts to release the socket back into the | 2201 // Deleting the transaction attempts to release the socket back into the |
2197 // socket pool. | 2202 // socket pool. |
2198 trans1.reset(); | 2203 trans1.reset(); |
2199 | 2204 |
2200 HttpRequestInfo request2; | 2205 HttpRequestInfo request2; |
2201 request2.method = "GET"; | 2206 request2.method = "GET"; |
2202 request2.url = GURL("http://www.borked.com/foo"); | 2207 request2.url = GURL("http://www.borked.com/foo"); |
2203 | 2208 |
2204 std::unique_ptr<HttpTransaction> trans2( | 2209 std::unique_ptr<HttpTransaction> trans2( |
2205 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2210 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2206 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 2211 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
2207 EXPECT_EQ(OK, callback.GetResult(rv)); | 2212 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2208 | 2213 |
2209 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 2214 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
2210 ASSERT_TRUE(response2); | 2215 ASSERT_TRUE(response2); |
2211 ASSERT_TRUE(response2->headers); | 2216 ASSERT_TRUE(response2->headers); |
2212 EXPECT_EQ(200, response2->headers->response_code()); | 2217 EXPECT_EQ(200, response2->headers->response_code()); |
2213 | 2218 |
2214 std::string response_data2; | 2219 std::string response_data2; |
2215 EXPECT_EQ(OK, ReadTransaction(trans2.get(), &response_data2)); | 2220 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); |
2216 EXPECT_EQ("foo", response_data2); | 2221 EXPECT_EQ("foo", response_data2); |
2217 } | 2222 } |
2218 | 2223 |
2219 // This is a little different from the others - it tests the case that the | 2224 // This is a little different from the others - it tests the case that the |
2220 // HttpStreamParser doesn't know if there's extra data on a socket or not when | 2225 // HttpStreamParser doesn't know if there's extra data on a socket or not when |
2221 // the HttpNetworkTransaction is torn down, because the response body hasn't | 2226 // the HttpNetworkTransaction is torn down, because the response body hasn't |
2222 // been read from yet, but the request goes through the HttpResponseBodyDrainer. | 2227 // been read from yet, but the request goes through the HttpResponseBodyDrainer. |
2223 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData4) { | 2228 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData4) { |
2224 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2229 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2225 MockWrite data_writes1[] = { | 2230 MockWrite data_writes1[] = { |
(...skipping 14 matching lines...) Expand all Loading... |
2240 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2245 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
2241 | 2246 |
2242 TestCompletionCallback callback; | 2247 TestCompletionCallback callback; |
2243 HttpRequestInfo request1; | 2248 HttpRequestInfo request1; |
2244 request1.method = "GET"; | 2249 request1.method = "GET"; |
2245 request1.url = GURL("http://www.borked.com/"); | 2250 request1.url = GURL("http://www.borked.com/"); |
2246 | 2251 |
2247 std::unique_ptr<HttpTransaction> trans1( | 2252 std::unique_ptr<HttpTransaction> trans1( |
2248 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2253 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2249 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); | 2254 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); |
2250 EXPECT_EQ(OK, callback.GetResult(rv)); | 2255 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2251 | 2256 |
2252 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2257 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
2253 ASSERT_TRUE(response1); | 2258 ASSERT_TRUE(response1); |
2254 ASSERT_TRUE(response1->headers); | 2259 ASSERT_TRUE(response1->headers); |
2255 EXPECT_EQ(200, response1->headers->response_code()); | 2260 EXPECT_EQ(200, response1->headers->response_code()); |
2256 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2261 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
2257 | 2262 |
2258 // Deleting the transaction creates an HttpResponseBodyDrainer to read the | 2263 // Deleting the transaction creates an HttpResponseBodyDrainer to read the |
2259 // response body. | 2264 // response body. |
2260 trans1.reset(); | 2265 trans1.reset(); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2322 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2327 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
2323 data_writes1, arraysize(data_writes1)); | 2328 data_writes1, arraysize(data_writes1)); |
2324 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2329 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
2325 data_writes2, arraysize(data_writes2)); | 2330 data_writes2, arraysize(data_writes2)); |
2326 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2331 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
2327 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2332 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2328 | 2333 |
2329 TestCompletionCallback callback1; | 2334 TestCompletionCallback callback1; |
2330 | 2335 |
2331 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2336 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
2332 EXPECT_EQ(ERR_IO_PENDING, rv); | 2337 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2333 | 2338 |
2334 rv = callback1.WaitForResult(); | 2339 rv = callback1.WaitForResult(); |
2335 EXPECT_EQ(OK, rv); | 2340 EXPECT_THAT(rv, IsOk()); |
2336 | 2341 |
2337 LoadTimingInfo load_timing_info1; | 2342 LoadTimingInfo load_timing_info1; |
2338 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); | 2343 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); |
2339 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); | 2344 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); |
2340 | 2345 |
2341 int64_t writes_size1 = CountWriteBytes(data_writes1, arraysize(data_writes1)); | 2346 int64_t writes_size1 = CountWriteBytes(data_writes1, arraysize(data_writes1)); |
2342 EXPECT_EQ(writes_size1, trans->GetTotalSentBytes()); | 2347 EXPECT_EQ(writes_size1, trans->GetTotalSentBytes()); |
2343 int64_t reads_size1 = CountReadBytes(data_reads1, arraysize(data_reads1)); | 2348 int64_t reads_size1 = CountReadBytes(data_reads1, arraysize(data_reads1)); |
2344 EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); | 2349 EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); |
2345 | 2350 |
2346 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2351 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2347 ASSERT_TRUE(response); | 2352 ASSERT_TRUE(response); |
2348 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2353 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
2349 | 2354 |
2350 TestCompletionCallback callback2; | 2355 TestCompletionCallback callback2; |
2351 | 2356 |
2352 rv = trans->RestartWithAuth( | 2357 rv = trans->RestartWithAuth( |
2353 AuthCredentials(kFoo, kBar), callback2.callback()); | 2358 AuthCredentials(kFoo, kBar), callback2.callback()); |
2354 EXPECT_EQ(ERR_IO_PENDING, rv); | 2359 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2355 | 2360 |
2356 rv = callback2.WaitForResult(); | 2361 rv = callback2.WaitForResult(); |
2357 EXPECT_EQ(OK, rv); | 2362 EXPECT_THAT(rv, IsOk()); |
2358 | 2363 |
2359 LoadTimingInfo load_timing_info2; | 2364 LoadTimingInfo load_timing_info2; |
2360 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); | 2365 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); |
2361 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_DNS_TIMES); | 2366 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_DNS_TIMES); |
2362 // The load timing after restart should have a new socket ID, and times after | 2367 // The load timing after restart should have a new socket ID, and times after |
2363 // those of the first load timing. | 2368 // those of the first load timing. |
2364 EXPECT_LE(load_timing_info1.receive_headers_end, | 2369 EXPECT_LE(load_timing_info1.receive_headers_end, |
2365 load_timing_info2.connect_timing.connect_start); | 2370 load_timing_info2.connect_timing.connect_start); |
2366 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 2371 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
2367 | 2372 |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2517 MockRead("Content-Length: 10000\r\n\r\n"), | 2522 MockRead("Content-Length: 10000\r\n\r\n"), |
2518 MockRead(SYNCHRONOUS, ERR_FAILED), | 2523 MockRead(SYNCHRONOUS, ERR_FAILED), |
2519 }; | 2524 }; |
2520 | 2525 |
2521 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 2526 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
2522 data_writes, arraysize(data_writes)); | 2527 data_writes, arraysize(data_writes)); |
2523 session_deps_.socket_factory->AddSocketDataProvider(&data); | 2528 session_deps_.socket_factory->AddSocketDataProvider(&data); |
2524 TestCompletionCallback callback; | 2529 TestCompletionCallback callback; |
2525 | 2530 |
2526 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 2531 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
2527 EXPECT_EQ(ERR_IO_PENDING, rv); | 2532 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2528 | 2533 |
2529 rv = callback.WaitForResult(); | 2534 rv = callback.WaitForResult(); |
2530 EXPECT_EQ(0, rv); | 2535 EXPECT_EQ(0, rv); |
2531 | 2536 |
2532 int64_t writes_size = CountWriteBytes(data_writes, arraysize(data_writes)); | 2537 int64_t writes_size = CountWriteBytes(data_writes, arraysize(data_writes)); |
2533 EXPECT_EQ(writes_size, trans->GetTotalSentBytes()); | 2538 EXPECT_EQ(writes_size, trans->GetTotalSentBytes()); |
2534 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 2539 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
2535 EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); | 2540 EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); |
2536 | 2541 |
2537 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2542 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2587 SequencedSocketData data(data_reads, arraysize(data_reads), data_writes, | 2592 SequencedSocketData data(data_reads, arraysize(data_reads), data_writes, |
2588 arraysize(data_writes)); | 2593 arraysize(data_writes)); |
2589 data.set_busy_before_sync_reads(true); | 2594 data.set_busy_before_sync_reads(true); |
2590 session_deps_.socket_factory->AddSocketDataProvider(&data); | 2595 session_deps_.socket_factory->AddSocketDataProvider(&data); |
2591 | 2596 |
2592 TestCompletionCallback callback1; | 2597 TestCompletionCallback callback1; |
2593 | 2598 |
2594 std::unique_ptr<HttpTransaction> trans( | 2599 std::unique_ptr<HttpTransaction> trans( |
2595 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2600 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2596 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2601 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
2597 ASSERT_EQ(OK, callback1.GetResult(rv)); | 2602 ASSERT_THAT(callback1.GetResult(rv), IsOk()); |
2598 | 2603 |
2599 LoadTimingInfo load_timing_info1; | 2604 LoadTimingInfo load_timing_info1; |
2600 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); | 2605 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); |
2601 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); | 2606 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); |
2602 | 2607 |
2603 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2608 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2604 ASSERT_TRUE(response); | 2609 ASSERT_TRUE(response); |
2605 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2610 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
2606 | 2611 |
2607 TestCompletionCallback callback2; | 2612 TestCompletionCallback callback2; |
2608 | 2613 |
2609 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), | 2614 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), |
2610 callback2.callback()); | 2615 callback2.callback()); |
2611 ASSERT_EQ(OK, callback2.GetResult(rv)); | 2616 ASSERT_THAT(callback2.GetResult(rv), IsOk()); |
2612 | 2617 |
2613 LoadTimingInfo load_timing_info2; | 2618 LoadTimingInfo load_timing_info2; |
2614 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); | 2619 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); |
2615 TestLoadTimingReused(load_timing_info2); | 2620 TestLoadTimingReused(load_timing_info2); |
2616 // The load timing after restart should have the same socket ID, and times | 2621 // The load timing after restart should have the same socket ID, and times |
2617 // those of the first load timing. | 2622 // those of the first load timing. |
2618 EXPECT_LE(load_timing_info1.receive_headers_end, | 2623 EXPECT_LE(load_timing_info1.receive_headers_end, |
2619 load_timing_info2.send_start); | 2624 load_timing_info2.send_start); |
2620 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 2625 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
2621 | 2626 |
2622 response = trans->GetResponseInfo(); | 2627 response = trans->GetResponseInfo(); |
2623 ASSERT_TRUE(response); | 2628 ASSERT_TRUE(response); |
2624 EXPECT_FALSE(response->auth_challenge); | 2629 EXPECT_FALSE(response->auth_challenge); |
2625 EXPECT_EQ(5, response->headers->GetContentLength()); | 2630 EXPECT_EQ(5, response->headers->GetContentLength()); |
2626 | 2631 |
2627 std::string response_data; | 2632 std::string response_data; |
2628 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 2633 EXPECT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
2629 | 2634 |
2630 int64_t writes_size = CountWriteBytes(data_writes, arraysize(data_writes)); | 2635 int64_t writes_size = CountWriteBytes(data_writes, arraysize(data_writes)); |
2631 EXPECT_EQ(writes_size, trans->GetTotalSentBytes()); | 2636 EXPECT_EQ(writes_size, trans->GetTotalSentBytes()); |
2632 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 2637 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
2633 EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); | 2638 EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); |
2634 } | 2639 } |
2635 } | 2640 } |
2636 | 2641 |
2637 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2642 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
2638 // connection and with no response body to drain. | 2643 // connection and with no response body to drain. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2681 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2686 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
2682 NULL, 0); | 2687 NULL, 0); |
2683 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2688 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
2684 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2689 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2685 | 2690 |
2686 TestCompletionCallback callback1; | 2691 TestCompletionCallback callback1; |
2687 | 2692 |
2688 std::unique_ptr<HttpTransaction> trans( | 2693 std::unique_ptr<HttpTransaction> trans( |
2689 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2694 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2690 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2695 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
2691 EXPECT_EQ(ERR_IO_PENDING, rv); | 2696 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2692 | 2697 |
2693 rv = callback1.WaitForResult(); | 2698 rv = callback1.WaitForResult(); |
2694 EXPECT_EQ(OK, rv); | 2699 EXPECT_THAT(rv, IsOk()); |
2695 | 2700 |
2696 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2701 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2697 ASSERT_TRUE(response); | 2702 ASSERT_TRUE(response); |
2698 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2703 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
2699 | 2704 |
2700 TestCompletionCallback callback2; | 2705 TestCompletionCallback callback2; |
2701 | 2706 |
2702 rv = trans->RestartWithAuth( | 2707 rv = trans->RestartWithAuth( |
2703 AuthCredentials(kFoo, kBar), callback2.callback()); | 2708 AuthCredentials(kFoo, kBar), callback2.callback()); |
2704 EXPECT_EQ(ERR_IO_PENDING, rv); | 2709 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2705 | 2710 |
2706 rv = callback2.WaitForResult(); | 2711 rv = callback2.WaitForResult(); |
2707 EXPECT_EQ(OK, rv); | 2712 EXPECT_THAT(rv, IsOk()); |
2708 | 2713 |
2709 response = trans->GetResponseInfo(); | 2714 response = trans->GetResponseInfo(); |
2710 ASSERT_TRUE(response); | 2715 ASSERT_TRUE(response); |
2711 EXPECT_FALSE(response->auth_challenge); | 2716 EXPECT_FALSE(response->auth_challenge); |
2712 EXPECT_EQ(5, response->headers->GetContentLength()); | 2717 EXPECT_EQ(5, response->headers->GetContentLength()); |
2713 } | 2718 } |
2714 | 2719 |
2715 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2720 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
2716 // connection and with a large response body to drain. | 2721 // connection and with a large response body to drain. |
2717 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveLargeBody) { | 2722 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveLargeBody) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2767 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2772 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
2768 NULL, 0); | 2773 NULL, 0); |
2769 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2774 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
2770 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2775 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2771 | 2776 |
2772 TestCompletionCallback callback1; | 2777 TestCompletionCallback callback1; |
2773 | 2778 |
2774 std::unique_ptr<HttpTransaction> trans( | 2779 std::unique_ptr<HttpTransaction> trans( |
2775 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2780 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2776 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2781 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
2777 EXPECT_EQ(ERR_IO_PENDING, rv); | 2782 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2778 | 2783 |
2779 rv = callback1.WaitForResult(); | 2784 rv = callback1.WaitForResult(); |
2780 EXPECT_EQ(OK, rv); | 2785 EXPECT_THAT(rv, IsOk()); |
2781 | 2786 |
2782 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2787 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2783 ASSERT_TRUE(response); | 2788 ASSERT_TRUE(response); |
2784 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2789 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
2785 | 2790 |
2786 TestCompletionCallback callback2; | 2791 TestCompletionCallback callback2; |
2787 | 2792 |
2788 rv = trans->RestartWithAuth( | 2793 rv = trans->RestartWithAuth( |
2789 AuthCredentials(kFoo, kBar), callback2.callback()); | 2794 AuthCredentials(kFoo, kBar), callback2.callback()); |
2790 EXPECT_EQ(ERR_IO_PENDING, rv); | 2795 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2791 | 2796 |
2792 rv = callback2.WaitForResult(); | 2797 rv = callback2.WaitForResult(); |
2793 EXPECT_EQ(OK, rv); | 2798 EXPECT_THAT(rv, IsOk()); |
2794 | 2799 |
2795 response = trans->GetResponseInfo(); | 2800 response = trans->GetResponseInfo(); |
2796 ASSERT_TRUE(response); | 2801 ASSERT_TRUE(response); |
2797 EXPECT_FALSE(response->auth_challenge); | 2802 EXPECT_FALSE(response->auth_challenge); |
2798 EXPECT_EQ(5, response->headers->GetContentLength()); | 2803 EXPECT_EQ(5, response->headers->GetContentLength()); |
2799 } | 2804 } |
2800 | 2805 |
2801 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2806 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
2802 // connection, but the server gets impatient and closes the connection. | 2807 // connection, but the server gets impatient and closes the connection. |
2803 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveImpatientServer) { | 2808 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveImpatientServer) { |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2856 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2861 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
2857 data_writes2, arraysize(data_writes2)); | 2862 data_writes2, arraysize(data_writes2)); |
2858 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2863 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
2859 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2864 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2860 | 2865 |
2861 TestCompletionCallback callback1; | 2866 TestCompletionCallback callback1; |
2862 | 2867 |
2863 std::unique_ptr<HttpTransaction> trans( | 2868 std::unique_ptr<HttpTransaction> trans( |
2864 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2869 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2865 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2870 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
2866 EXPECT_EQ(ERR_IO_PENDING, rv); | 2871 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2867 | 2872 |
2868 rv = callback1.WaitForResult(); | 2873 rv = callback1.WaitForResult(); |
2869 EXPECT_EQ(OK, rv); | 2874 EXPECT_THAT(rv, IsOk()); |
2870 | 2875 |
2871 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2876 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2872 ASSERT_TRUE(response); | 2877 ASSERT_TRUE(response); |
2873 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2878 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
2874 | 2879 |
2875 TestCompletionCallback callback2; | 2880 TestCompletionCallback callback2; |
2876 | 2881 |
2877 rv = trans->RestartWithAuth( | 2882 rv = trans->RestartWithAuth( |
2878 AuthCredentials(kFoo, kBar), callback2.callback()); | 2883 AuthCredentials(kFoo, kBar), callback2.callback()); |
2879 EXPECT_EQ(ERR_IO_PENDING, rv); | 2884 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2880 | 2885 |
2881 rv = callback2.WaitForResult(); | 2886 rv = callback2.WaitForResult(); |
2882 EXPECT_EQ(OK, rv); | 2887 EXPECT_THAT(rv, IsOk()); |
2883 | 2888 |
2884 response = trans->GetResponseInfo(); | 2889 response = trans->GetResponseInfo(); |
2885 ASSERT_TRUE(response); | 2890 ASSERT_TRUE(response); |
2886 EXPECT_FALSE(response->auth_challenge); | 2891 EXPECT_FALSE(response->auth_challenge); |
2887 EXPECT_EQ(5, response->headers->GetContentLength()); | 2892 EXPECT_EQ(5, response->headers->GetContentLength()); |
2888 } | 2893 } |
2889 | 2894 |
2890 // Test the request-challenge-retry sequence for basic auth, over a connection | 2895 // Test the request-challenge-retry sequence for basic auth, over a connection |
2891 // that requires a restart when setting up an SSL tunnel. | 2896 // that requires a restart when setting up an SSL tunnel. |
2892 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyNoKeepAliveHttp10) { | 2897 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyNoKeepAliveHttp10) { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2950 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2955 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2951 SSLSocketDataProvider ssl(ASYNC, OK); | 2956 SSLSocketDataProvider ssl(ASYNC, OK); |
2952 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2957 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
2953 | 2958 |
2954 TestCompletionCallback callback1; | 2959 TestCompletionCallback callback1; |
2955 | 2960 |
2956 std::unique_ptr<HttpTransaction> trans( | 2961 std::unique_ptr<HttpTransaction> trans( |
2957 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2962 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
2958 | 2963 |
2959 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2964 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2960 EXPECT_EQ(ERR_IO_PENDING, rv); | 2965 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2961 | 2966 |
2962 rv = callback1.WaitForResult(); | 2967 rv = callback1.WaitForResult(); |
2963 EXPECT_EQ(OK, rv); | 2968 EXPECT_THAT(rv, IsOk()); |
2964 TestNetLogEntry::List entries; | 2969 TestNetLogEntry::List entries; |
2965 log.GetEntries(&entries); | 2970 log.GetEntries(&entries); |
2966 size_t pos = ExpectLogContainsSomewhere( | 2971 size_t pos = ExpectLogContainsSomewhere( |
2967 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 2972 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
2968 NetLog::PHASE_NONE); | 2973 NetLog::PHASE_NONE); |
2969 ExpectLogContainsSomewhere( | 2974 ExpectLogContainsSomewhere( |
2970 entries, pos, NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 2975 entries, pos, NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
2971 NetLog::PHASE_NONE); | 2976 NetLog::PHASE_NONE); |
2972 | 2977 |
2973 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2978 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2974 ASSERT_TRUE(response); | 2979 ASSERT_TRUE(response); |
2975 EXPECT_FALSE(response->headers->IsKeepAlive()); | 2980 EXPECT_FALSE(response->headers->IsKeepAlive()); |
2976 ASSERT_TRUE(response->headers); | 2981 ASSERT_TRUE(response->headers); |
2977 EXPECT_EQ(407, response->headers->response_code()); | 2982 EXPECT_EQ(407, response->headers->response_code()); |
2978 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); | 2983 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); |
2979 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 2984 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
2980 | 2985 |
2981 LoadTimingInfo load_timing_info; | 2986 LoadTimingInfo load_timing_info; |
2982 // CONNECT requests and responses are handled at the connect job level, so | 2987 // CONNECT requests and responses are handled at the connect job level, so |
2983 // the transaction does not yet have a connection. | 2988 // the transaction does not yet have a connection. |
2984 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 2989 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
2985 | 2990 |
2986 TestCompletionCallback callback2; | 2991 TestCompletionCallback callback2; |
2987 | 2992 |
2988 rv = | 2993 rv = |
2989 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); | 2994 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
2990 EXPECT_EQ(ERR_IO_PENDING, rv); | 2995 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2991 | 2996 |
2992 rv = callback2.WaitForResult(); | 2997 rv = callback2.WaitForResult(); |
2993 EXPECT_EQ(OK, rv); | 2998 EXPECT_THAT(rv, IsOk()); |
2994 | 2999 |
2995 response = trans->GetResponseInfo(); | 3000 response = trans->GetResponseInfo(); |
2996 ASSERT_TRUE(response); | 3001 ASSERT_TRUE(response); |
2997 | 3002 |
2998 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3003 EXPECT_TRUE(response->headers->IsKeepAlive()); |
2999 EXPECT_EQ(200, response->headers->response_code()); | 3004 EXPECT_EQ(200, response->headers->response_code()); |
3000 EXPECT_EQ(5, response->headers->GetContentLength()); | 3005 EXPECT_EQ(5, response->headers->GetContentLength()); |
3001 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3006 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3002 | 3007 |
3003 // The password prompt info should not be set. | 3008 // The password prompt info should not be set. |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3073 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3078 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
3074 SSLSocketDataProvider ssl(ASYNC, OK); | 3079 SSLSocketDataProvider ssl(ASYNC, OK); |
3075 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3080 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3076 | 3081 |
3077 TestCompletionCallback callback1; | 3082 TestCompletionCallback callback1; |
3078 | 3083 |
3079 std::unique_ptr<HttpTransaction> trans( | 3084 std::unique_ptr<HttpTransaction> trans( |
3080 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3085 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
3081 | 3086 |
3082 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3087 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
3083 EXPECT_EQ(ERR_IO_PENDING, rv); | 3088 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
3084 | 3089 |
3085 rv = callback1.WaitForResult(); | 3090 rv = callback1.WaitForResult(); |
3086 EXPECT_EQ(OK, rv); | 3091 EXPECT_THAT(rv, IsOk()); |
3087 TestNetLogEntry::List entries; | 3092 TestNetLogEntry::List entries; |
3088 log.GetEntries(&entries); | 3093 log.GetEntries(&entries); |
3089 size_t pos = ExpectLogContainsSomewhere( | 3094 size_t pos = ExpectLogContainsSomewhere( |
3090 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3095 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
3091 NetLog::PHASE_NONE); | 3096 NetLog::PHASE_NONE); |
3092 ExpectLogContainsSomewhere( | 3097 ExpectLogContainsSomewhere( |
3093 entries, pos, | 3098 entries, pos, |
3094 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 3099 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
3095 NetLog::PHASE_NONE); | 3100 NetLog::PHASE_NONE); |
3096 | 3101 |
3097 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3102 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3098 ASSERT_TRUE(response); | 3103 ASSERT_TRUE(response); |
3099 EXPECT_FALSE(response->headers->IsKeepAlive()); | 3104 EXPECT_FALSE(response->headers->IsKeepAlive()); |
3100 ASSERT_TRUE(response->headers); | 3105 ASSERT_TRUE(response->headers); |
3101 EXPECT_EQ(407, response->headers->response_code()); | 3106 EXPECT_EQ(407, response->headers->response_code()); |
3102 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3107 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3103 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3108 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
3104 | 3109 |
3105 LoadTimingInfo load_timing_info; | 3110 LoadTimingInfo load_timing_info; |
3106 // CONNECT requests and responses are handled at the connect job level, so | 3111 // CONNECT requests and responses are handled at the connect job level, so |
3107 // the transaction does not yet have a connection. | 3112 // the transaction does not yet have a connection. |
3108 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 3113 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
3109 | 3114 |
3110 TestCompletionCallback callback2; | 3115 TestCompletionCallback callback2; |
3111 | 3116 |
3112 rv = trans->RestartWithAuth( | 3117 rv = trans->RestartWithAuth( |
3113 AuthCredentials(kFoo, kBar), callback2.callback()); | 3118 AuthCredentials(kFoo, kBar), callback2.callback()); |
3114 EXPECT_EQ(ERR_IO_PENDING, rv); | 3119 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
3115 | 3120 |
3116 rv = callback2.WaitForResult(); | 3121 rv = callback2.WaitForResult(); |
3117 EXPECT_EQ(OK, rv); | 3122 EXPECT_THAT(rv, IsOk()); |
3118 | 3123 |
3119 response = trans->GetResponseInfo(); | 3124 response = trans->GetResponseInfo(); |
3120 ASSERT_TRUE(response); | 3125 ASSERT_TRUE(response); |
3121 | 3126 |
3122 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3127 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3123 EXPECT_EQ(200, response->headers->response_code()); | 3128 EXPECT_EQ(200, response->headers->response_code()); |
3124 EXPECT_EQ(5, response->headers->GetContentLength()); | 3129 EXPECT_EQ(5, response->headers->GetContentLength()); |
3125 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3130 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3126 | 3131 |
3127 // The password prompt info should not be set. | 3132 // The password prompt info should not be set. |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3196 }; | 3201 }; |
3197 | 3202 |
3198 SequencedSocketData data1(data_reads1, arraysize(data_reads1), data_writes1, | 3203 SequencedSocketData data1(data_reads1, arraysize(data_reads1), data_writes1, |
3199 arraysize(data_writes1)); | 3204 arraysize(data_writes1)); |
3200 data1.set_busy_before_sync_reads(true); | 3205 data1.set_busy_before_sync_reads(true); |
3201 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3206 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
3202 | 3207 |
3203 TestCompletionCallback callback1; | 3208 TestCompletionCallback callback1; |
3204 | 3209 |
3205 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3210 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
3206 EXPECT_EQ(OK, callback1.GetResult(rv)); | 3211 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
3207 | 3212 |
3208 TestNetLogEntry::List entries; | 3213 TestNetLogEntry::List entries; |
3209 log.GetEntries(&entries); | 3214 log.GetEntries(&entries); |
3210 size_t pos = ExpectLogContainsSomewhere( | 3215 size_t pos = ExpectLogContainsSomewhere( |
3211 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3216 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
3212 NetLog::PHASE_NONE); | 3217 NetLog::PHASE_NONE); |
3213 ExpectLogContainsSomewhere( | 3218 ExpectLogContainsSomewhere( |
3214 entries, pos, | 3219 entries, pos, |
3215 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 3220 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
3216 NetLog::PHASE_NONE); | 3221 NetLog::PHASE_NONE); |
3217 | 3222 |
3218 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3223 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3219 ASSERT_TRUE(response); | 3224 ASSERT_TRUE(response); |
3220 ASSERT_TRUE(response->headers); | 3225 ASSERT_TRUE(response->headers); |
3221 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3226 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3222 EXPECT_EQ(407, response->headers->response_code()); | 3227 EXPECT_EQ(407, response->headers->response_code()); |
3223 EXPECT_EQ(10, response->headers->GetContentLength()); | 3228 EXPECT_EQ(10, response->headers->GetContentLength()); |
3224 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); | 3229 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); |
3225 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3230 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
3226 | 3231 |
3227 TestCompletionCallback callback2; | 3232 TestCompletionCallback callback2; |
3228 | 3233 |
3229 // Wrong password (should be "bar"). | 3234 // Wrong password (should be "bar"). |
3230 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBaz), | 3235 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBaz), |
3231 callback2.callback()); | 3236 callback2.callback()); |
3232 EXPECT_EQ(OK, callback2.GetResult(rv)); | 3237 EXPECT_THAT(callback2.GetResult(rv), IsOk()); |
3233 | 3238 |
3234 response = trans->GetResponseInfo(); | 3239 response = trans->GetResponseInfo(); |
3235 ASSERT_TRUE(response); | 3240 ASSERT_TRUE(response); |
3236 ASSERT_TRUE(response->headers); | 3241 ASSERT_TRUE(response->headers); |
3237 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3242 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3238 EXPECT_EQ(407, response->headers->response_code()); | 3243 EXPECT_EQ(407, response->headers->response_code()); |
3239 EXPECT_EQ(10, response->headers->GetContentLength()); | 3244 EXPECT_EQ(10, response->headers->GetContentLength()); |
3240 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); | 3245 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); |
3241 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3246 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
3242 | 3247 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3305 }; | 3310 }; |
3306 | 3311 |
3307 SequencedSocketData data1(data_reads1, arraysize(data_reads1), data_writes1, | 3312 SequencedSocketData data1(data_reads1, arraysize(data_reads1), data_writes1, |
3308 arraysize(data_writes1)); | 3313 arraysize(data_writes1)); |
3309 data1.set_busy_before_sync_reads(true); | 3314 data1.set_busy_before_sync_reads(true); |
3310 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3315 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
3311 | 3316 |
3312 TestCompletionCallback callback1; | 3317 TestCompletionCallback callback1; |
3313 | 3318 |
3314 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3319 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
3315 EXPECT_EQ(OK, callback1.GetResult(rv)); | 3320 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
3316 | 3321 |
3317 TestNetLogEntry::List entries; | 3322 TestNetLogEntry::List entries; |
3318 log.GetEntries(&entries); | 3323 log.GetEntries(&entries); |
3319 size_t pos = ExpectLogContainsSomewhere( | 3324 size_t pos = ExpectLogContainsSomewhere( |
3320 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3325 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
3321 NetLog::PHASE_NONE); | 3326 NetLog::PHASE_NONE); |
3322 ExpectLogContainsSomewhere( | 3327 ExpectLogContainsSomewhere( |
3323 entries, pos, | 3328 entries, pos, |
3324 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 3329 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
3325 NetLog::PHASE_NONE); | 3330 NetLog::PHASE_NONE); |
3326 | 3331 |
3327 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3332 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3328 ASSERT_TRUE(response); | 3333 ASSERT_TRUE(response); |
3329 ASSERT_TRUE(response->headers); | 3334 ASSERT_TRUE(response->headers); |
3330 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3335 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3331 EXPECT_EQ(407, response->headers->response_code()); | 3336 EXPECT_EQ(407, response->headers->response_code()); |
3332 EXPECT_EQ(10, response->headers->GetContentLength()); | 3337 EXPECT_EQ(10, response->headers->GetContentLength()); |
3333 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3338 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3334 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3339 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
3335 | 3340 |
3336 TestCompletionCallback callback2; | 3341 TestCompletionCallback callback2; |
3337 | 3342 |
3338 // Wrong password (should be "bar"). | 3343 // Wrong password (should be "bar"). |
3339 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBaz), | 3344 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBaz), |
3340 callback2.callback()); | 3345 callback2.callback()); |
3341 EXPECT_EQ(OK, callback2.GetResult(rv)); | 3346 EXPECT_THAT(callback2.GetResult(rv), IsOk()); |
3342 | 3347 |
3343 response = trans->GetResponseInfo(); | 3348 response = trans->GetResponseInfo(); |
3344 ASSERT_TRUE(response); | 3349 ASSERT_TRUE(response); |
3345 ASSERT_TRUE(response->headers); | 3350 ASSERT_TRUE(response->headers); |
3346 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3351 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3347 EXPECT_EQ(407, response->headers->response_code()); | 3352 EXPECT_EQ(407, response->headers->response_code()); |
3348 EXPECT_EQ(10, response->headers->GetContentLength()); | 3353 EXPECT_EQ(10, response->headers->GetContentLength()); |
3349 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3354 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3350 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3355 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
3351 | 3356 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3428 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3433 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
3429 SSLSocketDataProvider ssl(ASYNC, OK); | 3434 SSLSocketDataProvider ssl(ASYNC, OK); |
3430 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3435 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3431 | 3436 |
3432 TestCompletionCallback callback1; | 3437 TestCompletionCallback callback1; |
3433 | 3438 |
3434 std::unique_ptr<HttpTransaction> trans( | 3439 std::unique_ptr<HttpTransaction> trans( |
3435 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3440 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
3436 | 3441 |
3437 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3442 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
3438 EXPECT_EQ(OK, callback1.GetResult(rv)); | 3443 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
3439 | 3444 |
3440 TestNetLogEntry::List entries; | 3445 TestNetLogEntry::List entries; |
3441 log.GetEntries(&entries); | 3446 log.GetEntries(&entries); |
3442 size_t pos = ExpectLogContainsSomewhere( | 3447 size_t pos = ExpectLogContainsSomewhere( |
3443 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3448 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
3444 NetLog::PHASE_NONE); | 3449 NetLog::PHASE_NONE); |
3445 ExpectLogContainsSomewhere( | 3450 ExpectLogContainsSomewhere( |
3446 entries, pos, | 3451 entries, pos, |
3447 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 3452 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
3448 NetLog::PHASE_NONE); | 3453 NetLog::PHASE_NONE); |
3449 | 3454 |
3450 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3455 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3451 ASSERT_TRUE(response); | 3456 ASSERT_TRUE(response); |
3452 ASSERT_TRUE(response->headers); | 3457 ASSERT_TRUE(response->headers); |
3453 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3458 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3454 EXPECT_EQ(407, response->headers->response_code()); | 3459 EXPECT_EQ(407, response->headers->response_code()); |
3455 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3460 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3456 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3461 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
3457 | 3462 |
3458 LoadTimingInfo load_timing_info; | 3463 LoadTimingInfo load_timing_info; |
3459 // CONNECT requests and responses are handled at the connect job level, so | 3464 // CONNECT requests and responses are handled at the connect job level, so |
3460 // the transaction does not yet have a connection. | 3465 // the transaction does not yet have a connection. |
3461 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 3466 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
3462 | 3467 |
3463 TestCompletionCallback callback2; | 3468 TestCompletionCallback callback2; |
3464 | 3469 |
3465 rv = | 3470 rv = |
3466 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); | 3471 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
3467 EXPECT_EQ(OK, callback2.GetResult(rv)); | 3472 EXPECT_THAT(callback2.GetResult(rv), IsOk()); |
3468 | 3473 |
3469 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3474 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3470 EXPECT_EQ(200, response->headers->response_code()); | 3475 EXPECT_EQ(200, response->headers->response_code()); |
3471 EXPECT_EQ(5, response->headers->GetContentLength()); | 3476 EXPECT_EQ(5, response->headers->GetContentLength()); |
3472 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3477 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3473 | 3478 |
3474 // The password prompt info should not be set. | 3479 // The password prompt info should not be set. |
3475 EXPECT_FALSE(response->auth_challenge); | 3480 EXPECT_FALSE(response->auth_challenge); |
3476 | 3481 |
3477 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 3482 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3544 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3549 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
3545 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 3550 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
3546 data_writes2, arraysize(data_writes2)); | 3551 data_writes2, arraysize(data_writes2)); |
3547 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3552 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
3548 SSLSocketDataProvider ssl(ASYNC, OK); | 3553 SSLSocketDataProvider ssl(ASYNC, OK); |
3549 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3554 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3550 | 3555 |
3551 TestCompletionCallback callback; | 3556 TestCompletionCallback callback; |
3552 | 3557 |
3553 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3558 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3554 EXPECT_EQ(OK, callback.GetResult(rv)); | 3559 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
3555 | 3560 |
3556 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3561 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3557 ASSERT_TRUE(response); | 3562 ASSERT_TRUE(response); |
3558 ASSERT_TRUE(response->headers); | 3563 ASSERT_TRUE(response->headers); |
3559 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3564 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3560 EXPECT_EQ(407, response->headers->response_code()); | 3565 EXPECT_EQ(407, response->headers->response_code()); |
3561 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3566 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
3562 | 3567 |
3563 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback.callback()); | 3568 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback.callback()); |
3564 EXPECT_EQ(OK, callback.GetResult(rv)); | 3569 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
3565 | 3570 |
3566 response = trans->GetResponseInfo(); | 3571 response = trans->GetResponseInfo(); |
3567 ASSERT_TRUE(response); | 3572 ASSERT_TRUE(response); |
3568 ASSERT_TRUE(response->headers); | 3573 ASSERT_TRUE(response->headers); |
3569 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3574 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3570 EXPECT_EQ(200, response->headers->response_code()); | 3575 EXPECT_EQ(200, response->headers->response_code()); |
3571 std::string body; | 3576 std::string body; |
3572 EXPECT_EQ(OK, ReadTransaction(trans.get(), &body)); | 3577 EXPECT_THAT(ReadTransaction(trans.get(), &body), IsOk()); |
3573 EXPECT_EQ("hello", body); | 3578 EXPECT_EQ("hello", body); |
3574 } | 3579 } |
3575 | 3580 |
3576 // Test that we don't read the response body when we fail to establish a tunnel, | 3581 // Test that we don't read the response body when we fail to establish a tunnel, |
3577 // even if the user cancels the proxy's auth attempt. | 3582 // even if the user cancels the proxy's auth attempt. |
3578 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyCancelTunnel) { | 3583 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyCancelTunnel) { |
3579 HttpRequestInfo request; | 3584 HttpRequestInfo request; |
3580 request.method = "GET"; | 3585 request.method = "GET"; |
3581 request.url = GURL("https://www.example.org/"); | 3586 request.url = GURL("https://www.example.org/"); |
3582 request.load_flags = 0; | 3587 request.load_flags = 0; |
(...skipping 22 matching lines...) Expand all Loading... |
3605 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | 3610 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
3606 }; | 3611 }; |
3607 | 3612 |
3608 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 3613 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
3609 data_writes, arraysize(data_writes)); | 3614 data_writes, arraysize(data_writes)); |
3610 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3615 session_deps_.socket_factory->AddSocketDataProvider(&data); |
3611 | 3616 |
3612 TestCompletionCallback callback; | 3617 TestCompletionCallback callback; |
3613 | 3618 |
3614 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3619 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3615 EXPECT_EQ(ERR_IO_PENDING, rv); | 3620 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
3616 | 3621 |
3617 rv = callback.WaitForResult(); | 3622 rv = callback.WaitForResult(); |
3618 EXPECT_EQ(OK, rv); | 3623 EXPECT_THAT(rv, IsOk()); |
3619 | 3624 |
3620 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3625 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3621 ASSERT_TRUE(response); | 3626 ASSERT_TRUE(response); |
3622 ASSERT_TRUE(response->headers); | 3627 ASSERT_TRUE(response->headers); |
3623 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3628 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3624 EXPECT_EQ(407, response->headers->response_code()); | 3629 EXPECT_EQ(407, response->headers->response_code()); |
3625 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3630 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3626 | 3631 |
3627 std::string response_data; | 3632 std::string response_data; |
3628 rv = ReadTransaction(trans.get(), &response_data); | 3633 rv = ReadTransaction(trans.get(), &response_data); |
3629 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 3634 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
3630 | 3635 |
3631 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. | 3636 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. |
3632 session->CloseAllConnections(); | 3637 session->CloseAllConnections(); |
3633 } | 3638 } |
3634 | 3639 |
3635 // Test that we don't pass extraneous headers from the proxy's response to the | 3640 // Test that we don't pass extraneous headers from the proxy's response to the |
3636 // caller when the proxy responds to CONNECT with 407. | 3641 // caller when the proxy responds to CONNECT with 407. |
3637 TEST_P(HttpNetworkTransactionTest, SanitizeProxyAuthHeaders) { | 3642 TEST_P(HttpNetworkTransactionTest, SanitizeProxyAuthHeaders) { |
3638 HttpRequestInfo request; | 3643 HttpRequestInfo request; |
3639 request.method = "GET"; | 3644 request.method = "GET"; |
(...skipping 25 matching lines...) Expand all Loading... |
3665 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | 3670 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
3666 }; | 3671 }; |
3667 | 3672 |
3668 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 3673 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
3669 arraysize(data_writes)); | 3674 arraysize(data_writes)); |
3670 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3675 session_deps_.socket_factory->AddSocketDataProvider(&data); |
3671 | 3676 |
3672 TestCompletionCallback callback; | 3677 TestCompletionCallback callback; |
3673 | 3678 |
3674 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3679 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3675 EXPECT_EQ(ERR_IO_PENDING, rv); | 3680 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
3676 | 3681 |
3677 rv = callback.WaitForResult(); | 3682 rv = callback.WaitForResult(); |
3678 EXPECT_EQ(OK, rv); | 3683 EXPECT_THAT(rv, IsOk()); |
3679 | 3684 |
3680 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3685 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3681 ASSERT_TRUE(response); | 3686 ASSERT_TRUE(response); |
3682 ASSERT_TRUE(response->headers); | 3687 ASSERT_TRUE(response->headers); |
3683 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3688 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3684 EXPECT_EQ(407, response->headers->response_code()); | 3689 EXPECT_EQ(407, response->headers->response_code()); |
3685 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3690 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3686 EXPECT_FALSE(response->headers->HasHeader("X-Foo")); | 3691 EXPECT_FALSE(response->headers->HasHeader("X-Foo")); |
3687 EXPECT_FALSE(response->headers->HasHeader("Set-Cookie")); | 3692 EXPECT_FALSE(response->headers->HasHeader("Set-Cookie")); |
3688 | 3693 |
3689 std::string response_data; | 3694 std::string response_data; |
3690 rv = ReadTransaction(trans.get(), &response_data); | 3695 rv = ReadTransaction(trans.get(), &response_data); |
3691 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 3696 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
3692 | 3697 |
3693 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. | 3698 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. |
3694 session->CloseAllConnections(); | 3699 session->CloseAllConnections(); |
3695 } | 3700 } |
3696 | 3701 |
3697 // Test when a server (non-proxy) returns a 407 (proxy-authenticate). | 3702 // Test when a server (non-proxy) returns a 407 (proxy-authenticate). |
3698 // The request should fail with ERR_UNEXPECTED_PROXY_AUTH. | 3703 // The request should fail with ERR_UNEXPECTED_PROXY_AUTH. |
3699 TEST_P(HttpNetworkTransactionTest, UnexpectedProxyAuth) { | 3704 TEST_P(HttpNetworkTransactionTest, UnexpectedProxyAuth) { |
3700 HttpRequestInfo request; | 3705 HttpRequestInfo request; |
3701 request.method = "GET"; | 3706 request.method = "GET"; |
(...skipping 20 matching lines...) Expand all Loading... |
3722 MockRead(SYNCHRONOUS, ERR_FAILED), | 3727 MockRead(SYNCHRONOUS, ERR_FAILED), |
3723 }; | 3728 }; |
3724 | 3729 |
3725 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 3730 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
3726 data_writes1, arraysize(data_writes1)); | 3731 data_writes1, arraysize(data_writes1)); |
3727 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3732 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
3728 | 3733 |
3729 TestCompletionCallback callback; | 3734 TestCompletionCallback callback; |
3730 | 3735 |
3731 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3736 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3732 EXPECT_EQ(ERR_IO_PENDING, rv); | 3737 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
3733 | 3738 |
3734 rv = callback.WaitForResult(); | 3739 rv = callback.WaitForResult(); |
3735 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); | 3740 EXPECT_THAT(rv, IsError(ERR_UNEXPECTED_PROXY_AUTH)); |
3736 } | 3741 } |
3737 | 3742 |
3738 // Tests when an HTTPS server (non-proxy) returns a 407 (proxy-authentication) | 3743 // Tests when an HTTPS server (non-proxy) returns a 407 (proxy-authentication) |
3739 // through a non-authenticating proxy. The request should fail with | 3744 // through a non-authenticating proxy. The request should fail with |
3740 // ERR_UNEXPECTED_PROXY_AUTH. | 3745 // ERR_UNEXPECTED_PROXY_AUTH. |
3741 // Note that it is impossible to detect if an HTTP server returns a 407 through | 3746 // Note that it is impossible to detect if an HTTP server returns a 407 through |
3742 // a non-authenticating proxy - there is nothing to indicate whether the | 3747 // a non-authenticating proxy - there is nothing to indicate whether the |
3743 // response came from the proxy or the server, so it is treated as if the proxy | 3748 // response came from the proxy or the server, so it is treated as if the proxy |
3744 // issued the challenge. | 3749 // issued the challenge. |
3745 TEST_P(HttpNetworkTransactionTest, | 3750 TEST_P(HttpNetworkTransactionTest, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3778 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3783 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
3779 SSLSocketDataProvider ssl(ASYNC, OK); | 3784 SSLSocketDataProvider ssl(ASYNC, OK); |
3780 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3785 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3781 | 3786 |
3782 TestCompletionCallback callback1; | 3787 TestCompletionCallback callback1; |
3783 | 3788 |
3784 std::unique_ptr<HttpTransaction> trans( | 3789 std::unique_ptr<HttpTransaction> trans( |
3785 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3790 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
3786 | 3791 |
3787 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3792 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
3788 EXPECT_EQ(ERR_IO_PENDING, rv); | 3793 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
3789 | 3794 |
3790 rv = callback1.WaitForResult(); | 3795 rv = callback1.WaitForResult(); |
3791 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); | 3796 EXPECT_THAT(rv, IsError(ERR_UNEXPECTED_PROXY_AUTH)); |
3792 TestNetLogEntry::List entries; | 3797 TestNetLogEntry::List entries; |
3793 log.GetEntries(&entries); | 3798 log.GetEntries(&entries); |
3794 size_t pos = ExpectLogContainsSomewhere( | 3799 size_t pos = ExpectLogContainsSomewhere( |
3795 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3800 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
3796 NetLog::PHASE_NONE); | 3801 NetLog::PHASE_NONE); |
3797 ExpectLogContainsSomewhere( | 3802 ExpectLogContainsSomewhere( |
3798 entries, pos, | 3803 entries, pos, |
3799 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 3804 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
3800 NetLog::PHASE_NONE); | 3805 NetLog::PHASE_NONE); |
3801 } | 3806 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3873 data_writes2, arraysize(data_writes2)); | 3878 data_writes2, arraysize(data_writes2)); |
3874 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3879 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
3875 SSLSocketDataProvider ssl(ASYNC, OK); | 3880 SSLSocketDataProvider ssl(ASYNC, OK); |
3876 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3881 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3877 | 3882 |
3878 std::unique_ptr<HttpTransaction> trans( | 3883 std::unique_ptr<HttpTransaction> trans( |
3879 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3884 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
3880 | 3885 |
3881 TestCompletionCallback callback; | 3886 TestCompletionCallback callback; |
3882 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3887 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3883 EXPECT_EQ(OK, callback.GetResult(rv)); | 3888 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
3884 | 3889 |
3885 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3890 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3886 ASSERT_TRUE(response); | 3891 ASSERT_TRUE(response); |
3887 ASSERT_TRUE(response->headers); | 3892 ASSERT_TRUE(response->headers); |
3888 EXPECT_FALSE(response->headers->IsKeepAlive()); | 3893 EXPECT_FALSE(response->headers->IsKeepAlive()); |
3889 EXPECT_EQ(407, response->headers->response_code()); | 3894 EXPECT_EQ(407, response->headers->response_code()); |
3890 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3895 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3891 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 3896 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
3892 EXPECT_FALSE(response->auth_challenge); | 3897 EXPECT_FALSE(response->auth_challenge); |
3893 | 3898 |
3894 LoadTimingInfo load_timing_info; | 3899 LoadTimingInfo load_timing_info; |
3895 // CONNECT requests and responses are handled at the connect job level, so | 3900 // CONNECT requests and responses are handled at the connect job level, so |
3896 // the transaction does not yet have a connection. | 3901 // the transaction does not yet have a connection. |
3897 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 3902 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
3898 | 3903 |
3899 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 3904 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
3900 EXPECT_EQ(OK, callback.GetResult(rv)); | 3905 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
3901 response = trans->GetResponseInfo(); | 3906 response = trans->GetResponseInfo(); |
3902 ASSERT_TRUE(response); | 3907 ASSERT_TRUE(response); |
3903 ASSERT_TRUE(response->headers); | 3908 ASSERT_TRUE(response->headers); |
3904 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3909 EXPECT_TRUE(response->headers->IsKeepAlive()); |
3905 EXPECT_EQ(200, response->headers->response_code()); | 3910 EXPECT_EQ(200, response->headers->response_code()); |
3906 EXPECT_EQ(5, response->headers->GetContentLength()); | 3911 EXPECT_EQ(5, response->headers->GetContentLength()); |
3907 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3912 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
3908 | 3913 |
3909 // The password prompt info should not be set. | 3914 // The password prompt info should not be set. |
3910 EXPECT_FALSE(response->auth_challenge); | 3915 EXPECT_FALSE(response->auth_challenge); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3993 data_writes2, arraysize(data_writes2)); | 3998 data_writes2, arraysize(data_writes2)); |
3994 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3999 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
3995 SSLSocketDataProvider ssl(ASYNC, OK); | 4000 SSLSocketDataProvider ssl(ASYNC, OK); |
3996 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4001 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3997 | 4002 |
3998 std::unique_ptr<HttpTransaction> trans( | 4003 std::unique_ptr<HttpTransaction> trans( |
3999 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4004 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4000 | 4005 |
4001 TestCompletionCallback callback; | 4006 TestCompletionCallback callback; |
4002 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4007 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
4003 EXPECT_EQ(OK, callback.GetResult(rv)); | 4008 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
4004 | 4009 |
4005 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4010 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4006 ASSERT_TRUE(response); | 4011 ASSERT_TRUE(response); |
4007 ASSERT_TRUE(response->headers); | 4012 ASSERT_TRUE(response->headers); |
4008 EXPECT_TRUE(response->headers->IsKeepAlive()); | 4013 EXPECT_TRUE(response->headers->IsKeepAlive()); |
4009 EXPECT_EQ(407, response->headers->response_code()); | 4014 EXPECT_EQ(407, response->headers->response_code()); |
4010 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4015 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
4011 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 4016 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
4012 EXPECT_FALSE(response->auth_challenge); | 4017 EXPECT_FALSE(response->auth_challenge); |
4013 | 4018 |
4014 LoadTimingInfo load_timing_info; | 4019 LoadTimingInfo load_timing_info; |
4015 // CONNECT requests and responses are handled at the connect job level, so | 4020 // CONNECT requests and responses are handled at the connect job level, so |
4016 // the transaction does not yet have a connection. | 4021 // the transaction does not yet have a connection. |
4017 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 4022 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
4018 | 4023 |
4019 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 4024 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
4020 EXPECT_EQ(OK, callback.GetResult(rv)); | 4025 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
4021 | 4026 |
4022 response = trans->GetResponseInfo(); | 4027 response = trans->GetResponseInfo(); |
4023 ASSERT_TRUE(response); | 4028 ASSERT_TRUE(response); |
4024 ASSERT_TRUE(response->headers); | 4029 ASSERT_TRUE(response->headers); |
4025 EXPECT_TRUE(response->headers->IsKeepAlive()); | 4030 EXPECT_TRUE(response->headers->IsKeepAlive()); |
4026 EXPECT_EQ(200, response->headers->response_code()); | 4031 EXPECT_EQ(200, response->headers->response_code()); |
4027 EXPECT_EQ(5, response->headers->GetContentLength()); | 4032 EXPECT_EQ(5, response->headers->GetContentLength()); |
4028 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4033 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
4029 | 4034 |
4030 // The password prompt info should not be set. | 4035 // The password prompt info should not be set. |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4108 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4113 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
4109 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4114 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
4110 data_writes2, arraysize(data_writes2)); | 4115 data_writes2, arraysize(data_writes2)); |
4111 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4116 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
4112 | 4117 |
4113 std::unique_ptr<HttpTransaction> trans( | 4118 std::unique_ptr<HttpTransaction> trans( |
4114 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4119 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4115 | 4120 |
4116 TestCompletionCallback callback; | 4121 TestCompletionCallback callback; |
4117 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4122 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
4118 EXPECT_EQ(OK, callback.GetResult(rv)); | 4123 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
4119 | 4124 |
4120 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4125 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4121 ASSERT_TRUE(response); | 4126 ASSERT_TRUE(response); |
4122 ASSERT_TRUE(response->headers); | 4127 ASSERT_TRUE(response->headers); |
4123 EXPECT_TRUE(response->headers->IsKeepAlive()); | 4128 EXPECT_TRUE(response->headers->IsKeepAlive()); |
4124 EXPECT_EQ(407, response->headers->response_code()); | 4129 EXPECT_EQ(407, response->headers->response_code()); |
4125 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4130 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
4126 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 4131 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
4127 EXPECT_FALSE(response->auth_challenge); | 4132 EXPECT_FALSE(response->auth_challenge); |
4128 | 4133 |
4129 LoadTimingInfo load_timing_info; | 4134 LoadTimingInfo load_timing_info; |
4130 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 4135 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
4131 | 4136 |
4132 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 4137 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
4133 EXPECT_EQ(ERR_EMPTY_RESPONSE, callback.GetResult(rv)); | 4138 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_EMPTY_RESPONSE)); |
4134 | 4139 |
4135 trans.reset(); | 4140 trans.reset(); |
4136 session->CloseAllConnections(); | 4141 session->CloseAllConnections(); |
4137 } | 4142 } |
4138 | 4143 |
4139 // Test a proxy auth scheme that allows default credentials and a proxy server | 4144 // Test a proxy auth scheme that allows default credentials and a proxy server |
4140 // that hangs up when credentials are initially sent, and sends a challenge | 4145 // that hangs up when credentials are initially sent, and sends a challenge |
4141 // again they are retried. | 4146 // again they are retried. |
4142 TEST_P(HttpNetworkTransactionTest, | 4147 TEST_P(HttpNetworkTransactionTest, |
4143 AuthAllowsDefaultCredentialsTunnelServerChallengesTwice) { | 4148 AuthAllowsDefaultCredentialsTunnelServerChallengesTwice) { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4207 data_writes2, arraysize(data_writes2)); | 4212 data_writes2, arraysize(data_writes2)); |
4208 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4213 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
4209 SSLSocketDataProvider ssl(ASYNC, OK); | 4214 SSLSocketDataProvider ssl(ASYNC, OK); |
4210 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4215 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4211 | 4216 |
4212 std::unique_ptr<HttpTransaction> trans( | 4217 std::unique_ptr<HttpTransaction> trans( |
4213 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4218 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4214 | 4219 |
4215 TestCompletionCallback callback; | 4220 TestCompletionCallback callback; |
4216 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4221 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
4217 EXPECT_EQ(OK, callback.GetResult(rv)); | 4222 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
4218 | 4223 |
4219 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4224 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4220 ASSERT_TRUE(response); | 4225 ASSERT_TRUE(response); |
4221 ASSERT_TRUE(response->headers); | 4226 ASSERT_TRUE(response->headers); |
4222 EXPECT_EQ(407, response->headers->response_code()); | 4227 EXPECT_EQ(407, response->headers->response_code()); |
4223 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4228 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
4224 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 4229 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
4225 EXPECT_FALSE(response->auth_challenge); | 4230 EXPECT_FALSE(response->auth_challenge); |
4226 | 4231 |
4227 LoadTimingInfo load_timing_info; | 4232 LoadTimingInfo load_timing_info; |
4228 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 4233 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
4229 | 4234 |
4230 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 4235 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
4231 EXPECT_EQ(OK, callback.GetResult(rv)); | 4236 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
4232 response = trans->GetResponseInfo(); | 4237 response = trans->GetResponseInfo(); |
4233 ASSERT_TRUE(response); | 4238 ASSERT_TRUE(response); |
4234 ASSERT_TRUE(response->headers); | 4239 ASSERT_TRUE(response->headers); |
4235 EXPECT_EQ(407, response->headers->response_code()); | 4240 EXPECT_EQ(407, response->headers->response_code()); |
4236 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 4241 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
4237 EXPECT_TRUE(response->auth_challenge); | 4242 EXPECT_TRUE(response->auth_challenge); |
4238 | 4243 |
4239 trans.reset(); | 4244 trans.reset(); |
4240 session->CloseAllConnections(); | 4245 session->CloseAllConnections(); |
4241 } | 4246 } |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4289 data_writes1, arraysize(data_writes1)); | 4294 data_writes1, arraysize(data_writes1)); |
4290 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4295 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
4291 SSLSocketDataProvider ssl(ASYNC, OK); | 4296 SSLSocketDataProvider ssl(ASYNC, OK); |
4292 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4297 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4293 | 4298 |
4294 TestCompletionCallback callback1; | 4299 TestCompletionCallback callback1; |
4295 std::unique_ptr<HttpTransaction> trans1( | 4300 std::unique_ptr<HttpTransaction> trans1( |
4296 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4301 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4297 | 4302 |
4298 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); | 4303 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); |
4299 EXPECT_EQ(ERR_IO_PENDING, rv); | 4304 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4300 | 4305 |
4301 rv = callback1.WaitForResult(); | 4306 rv = callback1.WaitForResult(); |
4302 EXPECT_EQ(OK, rv); | 4307 EXPECT_THAT(rv, IsOk()); |
4303 | 4308 |
4304 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 4309 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
4305 ASSERT_TRUE(response1); | 4310 ASSERT_TRUE(response1); |
4306 ASSERT_TRUE(response1->headers); | 4311 ASSERT_TRUE(response1->headers); |
4307 EXPECT_EQ(1, response1->headers->GetContentLength()); | 4312 EXPECT_EQ(1, response1->headers->GetContentLength()); |
4308 | 4313 |
4309 LoadTimingInfo load_timing_info1; | 4314 LoadTimingInfo load_timing_info1; |
4310 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); | 4315 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); |
4311 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_SSL_TIMES); | 4316 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_SSL_TIMES); |
4312 | 4317 |
4313 trans1.reset(); | 4318 trans1.reset(); |
4314 | 4319 |
4315 TestCompletionCallback callback2; | 4320 TestCompletionCallback callback2; |
4316 std::unique_ptr<HttpTransaction> trans2( | 4321 std::unique_ptr<HttpTransaction> trans2( |
4317 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4322 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4318 | 4323 |
4319 rv = trans2->Start(&request2, callback2.callback(), log.bound()); | 4324 rv = trans2->Start(&request2, callback2.callback(), log.bound()); |
4320 EXPECT_EQ(ERR_IO_PENDING, rv); | 4325 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4321 | 4326 |
4322 rv = callback2.WaitForResult(); | 4327 rv = callback2.WaitForResult(); |
4323 EXPECT_EQ(OK, rv); | 4328 EXPECT_THAT(rv, IsOk()); |
4324 | 4329 |
4325 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 4330 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
4326 ASSERT_TRUE(response2); | 4331 ASSERT_TRUE(response2); |
4327 ASSERT_TRUE(response2->headers); | 4332 ASSERT_TRUE(response2->headers); |
4328 EXPECT_EQ(2, response2->headers->GetContentLength()); | 4333 EXPECT_EQ(2, response2->headers->GetContentLength()); |
4329 | 4334 |
4330 LoadTimingInfo load_timing_info2; | 4335 LoadTimingInfo load_timing_info2; |
4331 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 4336 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
4332 TestLoadTimingReused(load_timing_info2); | 4337 TestLoadTimingReused(load_timing_info2); |
4333 | 4338 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4387 data_writes1, arraysize(data_writes1)); | 4392 data_writes1, arraysize(data_writes1)); |
4388 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4393 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
4389 SSLSocketDataProvider ssl(ASYNC, OK); | 4394 SSLSocketDataProvider ssl(ASYNC, OK); |
4390 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4395 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4391 | 4396 |
4392 TestCompletionCallback callback1; | 4397 TestCompletionCallback callback1; |
4393 std::unique_ptr<HttpTransaction> trans1( | 4398 std::unique_ptr<HttpTransaction> trans1( |
4394 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4399 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4395 | 4400 |
4396 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); | 4401 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); |
4397 EXPECT_EQ(ERR_IO_PENDING, rv); | 4402 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4398 | 4403 |
4399 rv = callback1.WaitForResult(); | 4404 rv = callback1.WaitForResult(); |
4400 EXPECT_EQ(OK, rv); | 4405 EXPECT_THAT(rv, IsOk()); |
4401 | 4406 |
4402 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 4407 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
4403 ASSERT_TRUE(response1); | 4408 ASSERT_TRUE(response1); |
4404 ASSERT_TRUE(response1->headers); | 4409 ASSERT_TRUE(response1->headers); |
4405 EXPECT_EQ(1, response1->headers->GetContentLength()); | 4410 EXPECT_EQ(1, response1->headers->GetContentLength()); |
4406 | 4411 |
4407 LoadTimingInfo load_timing_info1; | 4412 LoadTimingInfo load_timing_info1; |
4408 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); | 4413 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); |
4409 TestLoadTimingNotReusedWithPac(load_timing_info1, | 4414 TestLoadTimingNotReusedWithPac(load_timing_info1, |
4410 CONNECT_TIMING_HAS_SSL_TIMES); | 4415 CONNECT_TIMING_HAS_SSL_TIMES); |
4411 | 4416 |
4412 trans1.reset(); | 4417 trans1.reset(); |
4413 | 4418 |
4414 TestCompletionCallback callback2; | 4419 TestCompletionCallback callback2; |
4415 std::unique_ptr<HttpTransaction> trans2( | 4420 std::unique_ptr<HttpTransaction> trans2( |
4416 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4421 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4417 | 4422 |
4418 rv = trans2->Start(&request2, callback2.callback(), log.bound()); | 4423 rv = trans2->Start(&request2, callback2.callback(), log.bound()); |
4419 EXPECT_EQ(ERR_IO_PENDING, rv); | 4424 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4420 | 4425 |
4421 rv = callback2.WaitForResult(); | 4426 rv = callback2.WaitForResult(); |
4422 EXPECT_EQ(OK, rv); | 4427 EXPECT_THAT(rv, IsOk()); |
4423 | 4428 |
4424 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 4429 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
4425 ASSERT_TRUE(response2); | 4430 ASSERT_TRUE(response2); |
4426 ASSERT_TRUE(response2->headers); | 4431 ASSERT_TRUE(response2->headers); |
4427 EXPECT_EQ(2, response2->headers->GetContentLength()); | 4432 EXPECT_EQ(2, response2->headers->GetContentLength()); |
4428 | 4433 |
4429 LoadTimingInfo load_timing_info2; | 4434 LoadTimingInfo load_timing_info2; |
4430 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 4435 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
4431 TestLoadTimingReusedWithPac(load_timing_info2); | 4436 TestLoadTimingReusedWithPac(load_timing_info2); |
4432 | 4437 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4468 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4473 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
4469 SSLSocketDataProvider ssl(ASYNC, OK); | 4474 SSLSocketDataProvider ssl(ASYNC, OK); |
4470 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4475 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4471 | 4476 |
4472 TestCompletionCallback callback1; | 4477 TestCompletionCallback callback1; |
4473 | 4478 |
4474 std::unique_ptr<HttpTransaction> trans( | 4479 std::unique_ptr<HttpTransaction> trans( |
4475 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4480 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4476 | 4481 |
4477 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4482 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
4478 EXPECT_EQ(ERR_IO_PENDING, rv); | 4483 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4479 | 4484 |
4480 rv = callback1.WaitForResult(); | 4485 rv = callback1.WaitForResult(); |
4481 EXPECT_EQ(OK, rv); | 4486 EXPECT_THAT(rv, IsOk()); |
4482 | 4487 |
4483 LoadTimingInfo load_timing_info; | 4488 LoadTimingInfo load_timing_info; |
4484 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 4489 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
4485 TestLoadTimingNotReused(load_timing_info, | 4490 TestLoadTimingNotReused(load_timing_info, |
4486 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 4491 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
4487 | 4492 |
4488 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4493 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4489 ASSERT_TRUE(response); | 4494 ASSERT_TRUE(response); |
4490 | 4495 |
4491 EXPECT_TRUE(response->headers->IsKeepAlive()); | 4496 EXPECT_TRUE(response->headers->IsKeepAlive()); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4530 SSLSocketDataProvider ssl(ASYNC, OK); | 4535 SSLSocketDataProvider ssl(ASYNC, OK); |
4531 ssl.SetNextProto(GetProtocol()); | 4536 ssl.SetNextProto(GetProtocol()); |
4532 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4537 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4533 | 4538 |
4534 TestCompletionCallback callback1; | 4539 TestCompletionCallback callback1; |
4535 | 4540 |
4536 std::unique_ptr<HttpTransaction> trans( | 4541 std::unique_ptr<HttpTransaction> trans( |
4537 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4542 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4538 | 4543 |
4539 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4544 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
4540 EXPECT_EQ(ERR_IO_PENDING, rv); | 4545 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4541 | 4546 |
4542 rv = callback1.WaitForResult(); | 4547 rv = callback1.WaitForResult(); |
4543 EXPECT_EQ(OK, rv); | 4548 EXPECT_THAT(rv, IsOk()); |
4544 | 4549 |
4545 LoadTimingInfo load_timing_info; | 4550 LoadTimingInfo load_timing_info; |
4546 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 4551 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
4547 TestLoadTimingNotReused(load_timing_info, | 4552 TestLoadTimingNotReused(load_timing_info, |
4548 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 4553 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
4549 | 4554 |
4550 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4555 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4551 ASSERT_TRUE(response); | 4556 ASSERT_TRUE(response); |
4552 ASSERT_TRUE(response->headers); | 4557 ASSERT_TRUE(response->headers); |
4553 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 4558 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
4554 | 4559 |
4555 std::string response_data; | 4560 std::string response_data; |
4556 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 4561 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
4557 EXPECT_EQ(kUploadData, response_data); | 4562 EXPECT_EQ(kUploadData, response_data); |
4558 } | 4563 } |
4559 | 4564 |
4560 // Verifies that a session which races and wins against the owning transaction | 4565 // Verifies that a session which races and wins against the owning transaction |
4561 // (completing prior to host resolution), doesn't fail the transaction. | 4566 // (completing prior to host resolution), doesn't fail the transaction. |
4562 // Regression test for crbug.com/334413. | 4567 // Regression test for crbug.com/334413. |
4563 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithSessionRace) { | 4568 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithSessionRace) { |
4564 HttpRequestInfo request; | 4569 HttpRequestInfo request; |
4565 request.method = "GET"; | 4570 request.method = "GET"; |
4566 request.url = GURL("http://www.example.org/"); | 4571 request.url = GURL("http://www.example.org/"); |
(...skipping 29 matching lines...) Expand all Loading... |
4596 TestCompletionCallback callback1; | 4601 TestCompletionCallback callback1; |
4597 | 4602 |
4598 std::unique_ptr<HttpTransaction> trans( | 4603 std::unique_ptr<HttpTransaction> trans( |
4599 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4604 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4600 | 4605 |
4601 // Stall the hostname resolution begun by the transaction. | 4606 // Stall the hostname resolution begun by the transaction. |
4602 session_deps_.host_resolver->set_synchronous_mode(false); | 4607 session_deps_.host_resolver->set_synchronous_mode(false); |
4603 session_deps_.host_resolver->set_ondemand_mode(true); | 4608 session_deps_.host_resolver->set_ondemand_mode(true); |
4604 | 4609 |
4605 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4610 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
4606 EXPECT_EQ(ERR_IO_PENDING, rv); | 4611 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4607 | 4612 |
4608 // Race a session to the proxy, which completes first. | 4613 // Race a session to the proxy, which completes first. |
4609 session_deps_.host_resolver->set_ondemand_mode(false); | 4614 session_deps_.host_resolver->set_ondemand_mode(false); |
4610 SpdySessionKey key( | 4615 SpdySessionKey key( |
4611 HostPortPair("proxy", 70), ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 4616 HostPortPair("proxy", 70), ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
4612 base::WeakPtr<SpdySession> spdy_session = | 4617 base::WeakPtr<SpdySession> spdy_session = |
4613 CreateSecureSpdySession(session.get(), key, log.bound()); | 4618 CreateSecureSpdySession(session.get(), key, log.bound()); |
4614 | 4619 |
4615 // Unstall the resolution begun by the transaction. | 4620 // Unstall the resolution begun by the transaction. |
4616 session_deps_.host_resolver->set_ondemand_mode(true); | 4621 session_deps_.host_resolver->set_ondemand_mode(true); |
4617 session_deps_.host_resolver->ResolveAllPending(); | 4622 session_deps_.host_resolver->ResolveAllPending(); |
4618 | 4623 |
4619 EXPECT_FALSE(callback1.have_result()); | 4624 EXPECT_FALSE(callback1.have_result()); |
4620 rv = callback1.WaitForResult(); | 4625 rv = callback1.WaitForResult(); |
4621 EXPECT_EQ(OK, rv); | 4626 EXPECT_THAT(rv, IsOk()); |
4622 | 4627 |
4623 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4628 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4624 ASSERT_TRUE(response); | 4629 ASSERT_TRUE(response); |
4625 ASSERT_TRUE(response->headers); | 4630 ASSERT_TRUE(response->headers); |
4626 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 4631 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
4627 | 4632 |
4628 std::string response_data; | 4633 std::string response_data; |
4629 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 4634 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
4630 EXPECT_EQ(kUploadData, response_data); | 4635 EXPECT_EQ(kUploadData, response_data); |
4631 } | 4636 } |
4632 | 4637 |
4633 // Test a SPDY get through an HTTPS Proxy. | 4638 // Test a SPDY get through an HTTPS Proxy. |
4634 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithProxyAuth) { | 4639 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithProxyAuth) { |
4635 HttpRequestInfo request; | 4640 HttpRequestInfo request; |
4636 request.method = "GET"; | 4641 request.method = "GET"; |
4637 request.url = GURL("http://www.example.org/"); | 4642 request.url = GURL("http://www.example.org/"); |
4638 request.load_flags = 0; | 4643 request.load_flags = 0; |
4639 | 4644 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4691 SSLSocketDataProvider ssl(ASYNC, OK); | 4696 SSLSocketDataProvider ssl(ASYNC, OK); |
4692 ssl.SetNextProto(GetProtocol()); | 4697 ssl.SetNextProto(GetProtocol()); |
4693 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4698 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4694 | 4699 |
4695 TestCompletionCallback callback1; | 4700 TestCompletionCallback callback1; |
4696 | 4701 |
4697 std::unique_ptr<HttpTransaction> trans( | 4702 std::unique_ptr<HttpTransaction> trans( |
4698 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4703 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
4699 | 4704 |
4700 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4705 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
4701 EXPECT_EQ(ERR_IO_PENDING, rv); | 4706 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4702 | 4707 |
4703 rv = callback1.WaitForResult(); | 4708 rv = callback1.WaitForResult(); |
4704 EXPECT_EQ(OK, rv); | 4709 EXPECT_THAT(rv, IsOk()); |
4705 | 4710 |
4706 const HttpResponseInfo* const response = trans->GetResponseInfo(); | 4711 const HttpResponseInfo* const response = trans->GetResponseInfo(); |
4707 | 4712 |
4708 ASSERT_TRUE(response); | 4713 ASSERT_TRUE(response); |
4709 ASSERT_TRUE(response->headers); | 4714 ASSERT_TRUE(response->headers); |
4710 EXPECT_EQ(407, response->headers->response_code()); | 4715 EXPECT_EQ(407, response->headers->response_code()); |
4711 EXPECT_TRUE(response->was_fetched_via_spdy); | 4716 EXPECT_TRUE(response->was_fetched_via_spdy); |
4712 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); | 4717 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); |
4713 | 4718 |
4714 TestCompletionCallback callback2; | 4719 TestCompletionCallback callback2; |
4715 | 4720 |
4716 rv = trans->RestartWithAuth( | 4721 rv = trans->RestartWithAuth( |
4717 AuthCredentials(kFoo, kBar), callback2.callback()); | 4722 AuthCredentials(kFoo, kBar), callback2.callback()); |
4718 EXPECT_EQ(ERR_IO_PENDING, rv); | 4723 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4719 | 4724 |
4720 rv = callback2.WaitForResult(); | 4725 rv = callback2.WaitForResult(); |
4721 EXPECT_EQ(OK, rv); | 4726 EXPECT_THAT(rv, IsOk()); |
4722 | 4727 |
4723 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); | 4728 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); |
4724 | 4729 |
4725 ASSERT_TRUE(response_restart); | 4730 ASSERT_TRUE(response_restart); |
4726 ASSERT_TRUE(response_restart->headers); | 4731 ASSERT_TRUE(response_restart->headers); |
4727 EXPECT_EQ(200, response_restart->headers->response_code()); | 4732 EXPECT_EQ(200, response_restart->headers->response_code()); |
4728 // The password prompt info should not be set. | 4733 // The password prompt info should not be set. |
4729 EXPECT_FALSE(response_restart->auth_challenge); | 4734 EXPECT_FALSE(response_restart->auth_challenge); |
4730 } | 4735 } |
4731 | 4736 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4787 | 4792 |
4788 SSLSocketDataProvider ssl(ASYNC, OK); | 4793 SSLSocketDataProvider ssl(ASYNC, OK); |
4789 ssl.SetNextProto(GetProtocol()); | 4794 ssl.SetNextProto(GetProtocol()); |
4790 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4795 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4791 SSLSocketDataProvider ssl2(ASYNC, OK); | 4796 SSLSocketDataProvider ssl2(ASYNC, OK); |
4792 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 4797 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
4793 | 4798 |
4794 TestCompletionCallback callback1; | 4799 TestCompletionCallback callback1; |
4795 | 4800 |
4796 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4801 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
4797 EXPECT_EQ(ERR_IO_PENDING, rv); | 4802 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4798 | 4803 |
4799 rv = callback1.WaitForResult(); | 4804 rv = callback1.WaitForResult(); |
4800 ASSERT_EQ(OK, rv); | 4805 ASSERT_THAT(rv, IsOk()); |
4801 | 4806 |
4802 LoadTimingInfo load_timing_info; | 4807 LoadTimingInfo load_timing_info; |
4803 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 4808 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
4804 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 4809 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
4805 | 4810 |
4806 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4811 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4807 ASSERT_TRUE(response); | 4812 ASSERT_TRUE(response); |
4808 ASSERT_TRUE(response->headers); | 4813 ASSERT_TRUE(response->headers); |
4809 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 4814 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
4810 | 4815 |
4811 std::string response_data; | 4816 std::string response_data; |
4812 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 4817 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
4813 EXPECT_EQ("1234567890", response_data); | 4818 EXPECT_EQ("1234567890", response_data); |
4814 } | 4819 } |
4815 | 4820 |
4816 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. | 4821 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. |
4817 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { | 4822 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { |
4818 SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); | 4823 SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); |
4819 | 4824 |
4820 HttpRequestInfo request; | 4825 HttpRequestInfo request; |
4821 request.method = "GET"; | 4826 request.method = "GET"; |
4822 request.url = GURL("https://www.example.org/"); | 4827 request.url = GURL("https://www.example.org/"); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4877 SSLSocketDataProvider ssl(ASYNC, OK); | 4882 SSLSocketDataProvider ssl(ASYNC, OK); |
4878 ssl.SetNextProto(GetProtocol()); | 4883 ssl.SetNextProto(GetProtocol()); |
4879 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4884 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4880 SSLSocketDataProvider ssl2(ASYNC, OK); | 4885 SSLSocketDataProvider ssl2(ASYNC, OK); |
4881 ssl2.SetNextProto(GetProtocol()); | 4886 ssl2.SetNextProto(GetProtocol()); |
4882 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 4887 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
4883 | 4888 |
4884 TestCompletionCallback callback1; | 4889 TestCompletionCallback callback1; |
4885 | 4890 |
4886 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4891 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
4887 EXPECT_EQ(ERR_IO_PENDING, rv); | 4892 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4888 | 4893 |
4889 // Allow the SpdyProxyClientSocket's write callback to complete. | 4894 // Allow the SpdyProxyClientSocket's write callback to complete. |
4890 base::RunLoop().RunUntilIdle(); | 4895 base::RunLoop().RunUntilIdle(); |
4891 // Now allow the read of the response to complete. | 4896 // Now allow the read of the response to complete. |
4892 spdy_data.Resume(); | 4897 spdy_data.Resume(); |
4893 rv = callback1.WaitForResult(); | 4898 rv = callback1.WaitForResult(); |
4894 EXPECT_EQ(OK, rv); | 4899 EXPECT_THAT(rv, IsOk()); |
4895 | 4900 |
4896 LoadTimingInfo load_timing_info; | 4901 LoadTimingInfo load_timing_info; |
4897 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 4902 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
4898 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 4903 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
4899 | 4904 |
4900 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4905 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4901 ASSERT_TRUE(response); | 4906 ASSERT_TRUE(response); |
4902 ASSERT_TRUE(response->headers); | 4907 ASSERT_TRUE(response->headers); |
4903 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 4908 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
4904 | 4909 |
4905 std::string response_data; | 4910 std::string response_data; |
4906 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 4911 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
4907 EXPECT_EQ(kUploadData, response_data); | 4912 EXPECT_EQ(kUploadData, response_data); |
4908 } | 4913 } |
4909 | 4914 |
4910 // Test a SPDY CONNECT failure through an HTTPS Proxy. | 4915 // Test a SPDY CONNECT failure through an HTTPS Proxy. |
4911 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) { | 4916 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) { |
4912 HttpRequestInfo request; | 4917 HttpRequestInfo request; |
4913 request.method = "GET"; | 4918 request.method = "GET"; |
4914 request.url = GURL("https://www.example.org/"); | 4919 request.url = GURL("https://www.example.org/"); |
4915 request.load_flags = 0; | 4920 request.load_flags = 0; |
4916 | 4921 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4948 SSLSocketDataProvider ssl(ASYNC, OK); | 4953 SSLSocketDataProvider ssl(ASYNC, OK); |
4949 ssl.SetNextProto(GetProtocol()); | 4954 ssl.SetNextProto(GetProtocol()); |
4950 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4955 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4951 SSLSocketDataProvider ssl2(ASYNC, OK); | 4956 SSLSocketDataProvider ssl2(ASYNC, OK); |
4952 ssl2.SetNextProto(GetProtocol()); | 4957 ssl2.SetNextProto(GetProtocol()); |
4953 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 4958 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
4954 | 4959 |
4955 TestCompletionCallback callback1; | 4960 TestCompletionCallback callback1; |
4956 | 4961 |
4957 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4962 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
4958 EXPECT_EQ(ERR_IO_PENDING, rv); | 4963 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4959 | 4964 |
4960 rv = callback1.WaitForResult(); | 4965 rv = callback1.WaitForResult(); |
4961 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 4966 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
4962 | 4967 |
4963 // TODO(juliatuttle): Anything else to check here? | 4968 // TODO(juliatuttle): Anything else to check here? |
4964 } | 4969 } |
4965 | 4970 |
4966 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY | 4971 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY |
4967 // HTTPS Proxy to different servers. | 4972 // HTTPS Proxy to different servers. |
4968 TEST_P(HttpNetworkTransactionTest, | 4973 TEST_P(HttpNetworkTransactionTest, |
4969 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsTwoServers) { | 4974 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsTwoServers) { |
4970 // Configure against https proxy server "proxy:70". | 4975 // Configure against https proxy server "proxy:70". |
4971 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 4976 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5063 SSLSocketDataProvider ssl2(ASYNC, OK); | 5068 SSLSocketDataProvider ssl2(ASYNC, OK); |
5064 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 5069 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
5065 SSLSocketDataProvider ssl3(ASYNC, OK); | 5070 SSLSocketDataProvider ssl3(ASYNC, OK); |
5066 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl3); | 5071 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl3); |
5067 | 5072 |
5068 TestCompletionCallback callback; | 5073 TestCompletionCallback callback; |
5069 | 5074 |
5070 std::unique_ptr<HttpTransaction> trans( | 5075 std::unique_ptr<HttpTransaction> trans( |
5071 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5076 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
5072 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); | 5077 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); |
5073 EXPECT_EQ(OK, callback.GetResult(rv)); | 5078 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
5074 | 5079 |
5075 LoadTimingInfo load_timing_info; | 5080 LoadTimingInfo load_timing_info; |
5076 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5081 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
5077 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 5082 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
5078 | 5083 |
5079 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5084 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5080 ASSERT_TRUE(response); | 5085 ASSERT_TRUE(response); |
5081 ASSERT_TRUE(response->headers); | 5086 ASSERT_TRUE(response->headers); |
5082 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 5087 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
5083 | 5088 |
5084 std::string response_data; | 5089 std::string response_data; |
5085 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); | 5090 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); |
5086 rv = trans->Read(buf.get(), 256, callback.callback()); | 5091 rv = trans->Read(buf.get(), 256, callback.callback()); |
5087 EXPECT_EQ(1, callback.GetResult(rv)); | 5092 EXPECT_EQ(1, callback.GetResult(rv)); |
5088 | 5093 |
5089 std::unique_ptr<HttpTransaction> trans2( | 5094 std::unique_ptr<HttpTransaction> trans2( |
5090 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5095 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
5091 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 5096 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
5092 EXPECT_EQ(OK, callback.GetResult(rv)); | 5097 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
5093 | 5098 |
5094 LoadTimingInfo load_timing_info2; | 5099 LoadTimingInfo load_timing_info2; |
5095 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 5100 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
5096 // Even though the SPDY connection is reused, a new tunnelled connection has | 5101 // Even though the SPDY connection is reused, a new tunnelled connection has |
5097 // to be created, so the socket's load timing looks like a fresh connection. | 5102 // to be created, so the socket's load timing looks like a fresh connection. |
5098 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_SSL_TIMES); | 5103 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_SSL_TIMES); |
5099 | 5104 |
5100 // The requests should have different IDs, since they each are using their own | 5105 // The requests should have different IDs, since they each are using their own |
5101 // separate stream. | 5106 // separate stream. |
5102 EXPECT_NE(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 5107 EXPECT_NE(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5185 ssl.SetNextProto(GetProtocol()); | 5190 ssl.SetNextProto(GetProtocol()); |
5186 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 5191 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
5187 SSLSocketDataProvider ssl2(ASYNC, OK); | 5192 SSLSocketDataProvider ssl2(ASYNC, OK); |
5188 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 5193 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
5189 | 5194 |
5190 TestCompletionCallback callback; | 5195 TestCompletionCallback callback; |
5191 | 5196 |
5192 std::unique_ptr<HttpTransaction> trans( | 5197 std::unique_ptr<HttpTransaction> trans( |
5193 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5198 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
5194 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); | 5199 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); |
5195 EXPECT_EQ(ERR_IO_PENDING, rv); | 5200 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5196 | 5201 |
5197 rv = callback.WaitForResult(); | 5202 rv = callback.WaitForResult(); |
5198 EXPECT_EQ(OK, rv); | 5203 EXPECT_THAT(rv, IsOk()); |
5199 | 5204 |
5200 LoadTimingInfo load_timing_info; | 5205 LoadTimingInfo load_timing_info; |
5201 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5206 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
5202 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 5207 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
5203 | 5208 |
5204 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5209 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5205 ASSERT_TRUE(response); | 5210 ASSERT_TRUE(response); |
5206 ASSERT_TRUE(response->headers); | 5211 ASSERT_TRUE(response->headers); |
5207 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 5212 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
5208 | 5213 |
5209 std::string response_data; | 5214 std::string response_data; |
5210 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); | 5215 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); |
5211 EXPECT_EQ(1, trans->Read(buf.get(), 256, callback.callback())); | 5216 EXPECT_EQ(1, trans->Read(buf.get(), 256, callback.callback())); |
5212 trans.reset(); | 5217 trans.reset(); |
5213 | 5218 |
5214 std::unique_ptr<HttpTransaction> trans2( | 5219 std::unique_ptr<HttpTransaction> trans2( |
5215 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5220 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
5216 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 5221 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
5217 EXPECT_EQ(ERR_IO_PENDING, rv); | 5222 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5218 | 5223 |
5219 rv = callback.WaitForResult(); | 5224 rv = callback.WaitForResult(); |
5220 EXPECT_EQ(OK, rv); | 5225 EXPECT_THAT(rv, IsOk()); |
5221 | 5226 |
5222 LoadTimingInfo load_timing_info2; | 5227 LoadTimingInfo load_timing_info2; |
5223 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 5228 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
5224 TestLoadTimingReused(load_timing_info2); | 5229 TestLoadTimingReused(load_timing_info2); |
5225 | 5230 |
5226 // The requests should have the same ID. | 5231 // The requests should have the same ID. |
5227 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 5232 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
5228 | 5233 |
5229 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); | 5234 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); |
5230 } | 5235 } |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5289 | 5294 |
5290 SSLSocketDataProvider ssl(ASYNC, OK); | 5295 SSLSocketDataProvider ssl(ASYNC, OK); |
5291 ssl.SetNextProto(GetProtocol()); | 5296 ssl.SetNextProto(GetProtocol()); |
5292 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 5297 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
5293 | 5298 |
5294 TestCompletionCallback callback; | 5299 TestCompletionCallback callback; |
5295 | 5300 |
5296 std::unique_ptr<HttpTransaction> trans( | 5301 std::unique_ptr<HttpTransaction> trans( |
5297 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5302 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
5298 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); | 5303 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); |
5299 EXPECT_EQ(OK, callback.GetResult(rv)); | 5304 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
5300 | 5305 |
5301 LoadTimingInfo load_timing_info; | 5306 LoadTimingInfo load_timing_info; |
5302 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5307 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
5303 TestLoadTimingNotReused(load_timing_info, | 5308 TestLoadTimingNotReused(load_timing_info, |
5304 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 5309 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
5305 | 5310 |
5306 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5311 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5307 ASSERT_TRUE(response); | 5312 ASSERT_TRUE(response); |
5308 ASSERT_TRUE(response->headers); | 5313 ASSERT_TRUE(response->headers); |
5309 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 5314 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
5310 | 5315 |
5311 std::string response_data; | 5316 std::string response_data; |
5312 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); | 5317 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); |
5313 rv = trans->Read(buf.get(), 256, callback.callback()); | 5318 rv = trans->Read(buf.get(), 256, callback.callback()); |
5314 EXPECT_EQ(1, callback.GetResult(rv)); | 5319 EXPECT_EQ(1, callback.GetResult(rv)); |
5315 // Delete the first request, so the second one can reuse the socket. | 5320 // Delete the first request, so the second one can reuse the socket. |
5316 trans.reset(); | 5321 trans.reset(); |
5317 | 5322 |
5318 std::unique_ptr<HttpTransaction> trans2( | 5323 std::unique_ptr<HttpTransaction> trans2( |
5319 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5324 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
5320 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 5325 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
5321 EXPECT_EQ(OK, callback.GetResult(rv)); | 5326 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
5322 | 5327 |
5323 LoadTimingInfo load_timing_info2; | 5328 LoadTimingInfo load_timing_info2; |
5324 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 5329 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
5325 TestLoadTimingReused(load_timing_info2); | 5330 TestLoadTimingReused(load_timing_info2); |
5326 | 5331 |
5327 // The requests should have the same ID. | 5332 // The requests should have the same ID. |
5328 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 5333 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
5329 | 5334 |
5330 rv = trans2->Read(buf.get(), 256, callback.callback()); | 5335 rv = trans2->Read(buf.get(), 256, callback.callback()); |
5331 EXPECT_EQ(2, callback.GetResult(rv)); | 5336 EXPECT_EQ(2, callback.GetResult(rv)); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5381 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5386 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
5382 SSLSocketDataProvider ssl(ASYNC, OK); | 5387 SSLSocketDataProvider ssl(ASYNC, OK); |
5383 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 5388 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
5384 | 5389 |
5385 TestCompletionCallback callback1; | 5390 TestCompletionCallback callback1; |
5386 | 5391 |
5387 std::unique_ptr<HttpTransaction> trans( | 5392 std::unique_ptr<HttpTransaction> trans( |
5388 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5393 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
5389 | 5394 |
5390 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 5395 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
5391 EXPECT_EQ(ERR_IO_PENDING, rv); | 5396 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5392 | 5397 |
5393 rv = callback1.WaitForResult(); | 5398 rv = callback1.WaitForResult(); |
5394 EXPECT_EQ(OK, rv); | 5399 EXPECT_THAT(rv, IsOk()); |
5395 | 5400 |
5396 LoadTimingInfo load_timing_info; | 5401 LoadTimingInfo load_timing_info; |
5397 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5402 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
5398 TestLoadTimingNotReused(load_timing_info, | 5403 TestLoadTimingNotReused(load_timing_info, |
5399 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 5404 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
5400 | 5405 |
5401 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5406 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5402 ASSERT_TRUE(response); | 5407 ASSERT_TRUE(response); |
5403 ASSERT_TRUE(response->headers); | 5408 ASSERT_TRUE(response->headers); |
5404 EXPECT_EQ(407, response->headers->response_code()); | 5409 EXPECT_EQ(407, response->headers->response_code()); |
5405 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 5410 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
5406 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); | 5411 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); |
5407 | 5412 |
5408 TestCompletionCallback callback2; | 5413 TestCompletionCallback callback2; |
5409 | 5414 |
5410 rv = trans->RestartWithAuth( | 5415 rv = trans->RestartWithAuth( |
5411 AuthCredentials(kFoo, kBar), callback2.callback()); | 5416 AuthCredentials(kFoo, kBar), callback2.callback()); |
5412 EXPECT_EQ(ERR_IO_PENDING, rv); | 5417 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5413 | 5418 |
5414 rv = callback2.WaitForResult(); | 5419 rv = callback2.WaitForResult(); |
5415 EXPECT_EQ(OK, rv); | 5420 EXPECT_THAT(rv, IsOk()); |
5416 | 5421 |
5417 load_timing_info = LoadTimingInfo(); | 5422 load_timing_info = LoadTimingInfo(); |
5418 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5423 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
5419 // Retrying with HTTP AUTH is considered to be reusing a socket. | 5424 // Retrying with HTTP AUTH is considered to be reusing a socket. |
5420 TestLoadTimingReused(load_timing_info); | 5425 TestLoadTimingReused(load_timing_info); |
5421 | 5426 |
5422 response = trans->GetResponseInfo(); | 5427 response = trans->GetResponseInfo(); |
5423 ASSERT_TRUE(response); | 5428 ASSERT_TRUE(response); |
5424 | 5429 |
5425 EXPECT_TRUE(response->headers->IsKeepAlive()); | 5430 EXPECT_TRUE(response->headers->IsKeepAlive()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5458 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5463 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5459 data_writes, arraysize(data_writes)); | 5464 data_writes, arraysize(data_writes)); |
5460 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5465 session_deps_.socket_factory->AddSocketDataProvider(&data); |
5461 | 5466 |
5462 TestCompletionCallback callback; | 5467 TestCompletionCallback callback; |
5463 | 5468 |
5464 std::unique_ptr<HttpTransaction> trans( | 5469 std::unique_ptr<HttpTransaction> trans( |
5465 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5470 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
5466 | 5471 |
5467 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5472 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5468 EXPECT_EQ(ERR_IO_PENDING, rv); | 5473 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5469 | 5474 |
5470 rv = callback.WaitForResult(); | 5475 rv = callback.WaitForResult(); |
5471 EXPECT_EQ(expected_status, rv); | 5476 EXPECT_EQ(expected_status, rv); |
5472 } | 5477 } |
5473 | 5478 |
5474 void HttpNetworkTransactionTest::ConnectStatusHelper( | 5479 void HttpNetworkTransactionTest::ConnectStatusHelper( |
5475 const MockRead& status) { | 5480 const MockRead& status) { |
5476 ConnectStatusHelperWithExpectedStatus( | 5481 ConnectStatusHelperWithExpectedStatus( |
5477 status, ERR_TUNNEL_CONNECTION_FAILED); | 5482 status, ERR_TUNNEL_CONNECTION_FAILED); |
5478 } | 5483 } |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5729 data_writes2, arraysize(data_writes2)); | 5734 data_writes2, arraysize(data_writes2)); |
5730 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 5735 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
5731 data_writes3, arraysize(data_writes3)); | 5736 data_writes3, arraysize(data_writes3)); |
5732 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5737 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
5733 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5738 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
5734 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 5739 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
5735 | 5740 |
5736 TestCompletionCallback callback1; | 5741 TestCompletionCallback callback1; |
5737 | 5742 |
5738 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5743 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
5739 EXPECT_EQ(ERR_IO_PENDING, rv); | 5744 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5740 | 5745 |
5741 rv = callback1.WaitForResult(); | 5746 rv = callback1.WaitForResult(); |
5742 EXPECT_EQ(OK, rv); | 5747 EXPECT_THAT(rv, IsOk()); |
5743 | 5748 |
5744 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5749 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5745 ASSERT_TRUE(response); | 5750 ASSERT_TRUE(response); |
5746 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 5751 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
5747 | 5752 |
5748 TestCompletionCallback callback2; | 5753 TestCompletionCallback callback2; |
5749 | 5754 |
5750 rv = trans->RestartWithAuth( | 5755 rv = trans->RestartWithAuth( |
5751 AuthCredentials(kFoo, kBar), callback2.callback()); | 5756 AuthCredentials(kFoo, kBar), callback2.callback()); |
5752 EXPECT_EQ(ERR_IO_PENDING, rv); | 5757 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5753 | 5758 |
5754 rv = callback2.WaitForResult(); | 5759 rv = callback2.WaitForResult(); |
5755 EXPECT_EQ(OK, rv); | 5760 EXPECT_THAT(rv, IsOk()); |
5756 | 5761 |
5757 response = trans->GetResponseInfo(); | 5762 response = trans->GetResponseInfo(); |
5758 ASSERT_TRUE(response); | 5763 ASSERT_TRUE(response); |
5759 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 5764 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
5760 | 5765 |
5761 TestCompletionCallback callback3; | 5766 TestCompletionCallback callback3; |
5762 | 5767 |
5763 rv = trans->RestartWithAuth( | 5768 rv = trans->RestartWithAuth( |
5764 AuthCredentials(kFoo2, kBar2), callback3.callback()); | 5769 AuthCredentials(kFoo2, kBar2), callback3.callback()); |
5765 EXPECT_EQ(ERR_IO_PENDING, rv); | 5770 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5766 | 5771 |
5767 rv = callback3.WaitForResult(); | 5772 rv = callback3.WaitForResult(); |
5768 EXPECT_EQ(OK, rv); | 5773 EXPECT_THAT(rv, IsOk()); |
5769 | 5774 |
5770 response = trans->GetResponseInfo(); | 5775 response = trans->GetResponseInfo(); |
5771 EXPECT_FALSE(response->auth_challenge); | 5776 EXPECT_FALSE(response->auth_challenge); |
5772 EXPECT_EQ(100, response->headers->GetContentLength()); | 5777 EXPECT_EQ(100, response->headers->GetContentLength()); |
5773 } | 5778 } |
5774 | 5779 |
5775 // For the NTLM implementation using SSPI, we skip the NTLM tests since we | 5780 // For the NTLM implementation using SSPI, we skip the NTLM tests since we |
5776 // can't hook into its internals to cause it to generate predictable NTLM | 5781 // can't hook into its internals to cause it to generate predictable NTLM |
5777 // authorization headers. | 5782 // authorization headers. |
5778 #if defined(NTLM_PORTABLE) | 5783 #if defined(NTLM_PORTABLE) |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5865 data_writes2, arraysize(data_writes2)); | 5870 data_writes2, arraysize(data_writes2)); |
5866 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5871 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
5867 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5872 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
5868 | 5873 |
5869 TestCompletionCallback callback1; | 5874 TestCompletionCallback callback1; |
5870 | 5875 |
5871 std::unique_ptr<HttpTransaction> trans( | 5876 std::unique_ptr<HttpTransaction> trans( |
5872 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5877 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
5873 | 5878 |
5874 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5879 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
5875 EXPECT_EQ(ERR_IO_PENDING, rv); | 5880 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5876 | 5881 |
5877 rv = callback1.WaitForResult(); | 5882 rv = callback1.WaitForResult(); |
5878 EXPECT_EQ(OK, rv); | 5883 EXPECT_THAT(rv, IsOk()); |
5879 | 5884 |
5880 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 5885 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
5881 | 5886 |
5882 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5887 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5883 ASSERT_TRUE(response); | 5888 ASSERT_TRUE(response); |
5884 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); | 5889 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); |
5885 | 5890 |
5886 TestCompletionCallback callback2; | 5891 TestCompletionCallback callback2; |
5887 | 5892 |
5888 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kTestingNTLM), | 5893 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kTestingNTLM), |
5889 callback2.callback()); | 5894 callback2.callback()); |
5890 EXPECT_EQ(ERR_IO_PENDING, rv); | 5895 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5891 | 5896 |
5892 rv = callback2.WaitForResult(); | 5897 rv = callback2.WaitForResult(); |
5893 EXPECT_EQ(OK, rv); | 5898 EXPECT_THAT(rv, IsOk()); |
5894 | 5899 |
5895 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 5900 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
5896 | 5901 |
5897 response = trans->GetResponseInfo(); | 5902 response = trans->GetResponseInfo(); |
5898 ASSERT_TRUE(response); | 5903 ASSERT_TRUE(response); |
5899 EXPECT_FALSE(response->auth_challenge); | 5904 EXPECT_FALSE(response->auth_challenge); |
5900 | 5905 |
5901 TestCompletionCallback callback3; | 5906 TestCompletionCallback callback3; |
5902 | 5907 |
5903 rv = trans->RestartWithAuth(AuthCredentials(), callback3.callback()); | 5908 rv = trans->RestartWithAuth(AuthCredentials(), callback3.callback()); |
5904 EXPECT_EQ(ERR_IO_PENDING, rv); | 5909 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5905 | 5910 |
5906 rv = callback3.WaitForResult(); | 5911 rv = callback3.WaitForResult(); |
5907 EXPECT_EQ(OK, rv); | 5912 EXPECT_THAT(rv, IsOk()); |
5908 | 5913 |
5909 response = trans->GetResponseInfo(); | 5914 response = trans->GetResponseInfo(); |
5910 ASSERT_TRUE(response); | 5915 ASSERT_TRUE(response); |
5911 EXPECT_FALSE(response->auth_challenge); | 5916 EXPECT_FALSE(response->auth_challenge); |
5912 EXPECT_EQ(13, response->headers->GetContentLength()); | 5917 EXPECT_EQ(13, response->headers->GetContentLength()); |
5913 } | 5918 } |
5914 | 5919 |
5915 // Enter a wrong password, and then the correct one. | 5920 // Enter a wrong password, and then the correct one. |
5916 TEST_P(HttpNetworkTransactionTest, NTLMAuth2) { | 5921 TEST_P(HttpNetworkTransactionTest, NTLMAuth2) { |
5917 HttpRequestInfo request; | 5922 HttpRequestInfo request; |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6045 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6050 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
6046 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6051 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
6047 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 6052 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
6048 | 6053 |
6049 TestCompletionCallback callback1; | 6054 TestCompletionCallback callback1; |
6050 | 6055 |
6051 std::unique_ptr<HttpTransaction> trans( | 6056 std::unique_ptr<HttpTransaction> trans( |
6052 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6057 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
6053 | 6058 |
6054 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6059 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
6055 EXPECT_EQ(ERR_IO_PENDING, rv); | 6060 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6056 | 6061 |
6057 rv = callback1.WaitForResult(); | 6062 rv = callback1.WaitForResult(); |
6058 EXPECT_EQ(OK, rv); | 6063 EXPECT_THAT(rv, IsOk()); |
6059 | 6064 |
6060 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6065 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
6061 | 6066 |
6062 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6067 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6063 ASSERT_TRUE(response); | 6068 ASSERT_TRUE(response); |
6064 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); | 6069 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); |
6065 | 6070 |
6066 TestCompletionCallback callback2; | 6071 TestCompletionCallback callback2; |
6067 | 6072 |
6068 // Enter the wrong password. | 6073 // Enter the wrong password. |
6069 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kWrongPassword), | 6074 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kWrongPassword), |
6070 callback2.callback()); | 6075 callback2.callback()); |
6071 EXPECT_EQ(ERR_IO_PENDING, rv); | 6076 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6072 | 6077 |
6073 rv = callback2.WaitForResult(); | 6078 rv = callback2.WaitForResult(); |
6074 EXPECT_EQ(OK, rv); | 6079 EXPECT_THAT(rv, IsOk()); |
6075 | 6080 |
6076 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 6081 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
6077 TestCompletionCallback callback3; | 6082 TestCompletionCallback callback3; |
6078 rv = trans->RestartWithAuth(AuthCredentials(), callback3.callback()); | 6083 rv = trans->RestartWithAuth(AuthCredentials(), callback3.callback()); |
6079 EXPECT_EQ(ERR_IO_PENDING, rv); | 6084 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6080 rv = callback3.WaitForResult(); | 6085 rv = callback3.WaitForResult(); |
6081 EXPECT_EQ(OK, rv); | 6086 EXPECT_THAT(rv, IsOk()); |
6082 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6087 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
6083 | 6088 |
6084 response = trans->GetResponseInfo(); | 6089 response = trans->GetResponseInfo(); |
6085 ASSERT_TRUE(response); | 6090 ASSERT_TRUE(response); |
6086 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); | 6091 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); |
6087 | 6092 |
6088 TestCompletionCallback callback4; | 6093 TestCompletionCallback callback4; |
6089 | 6094 |
6090 // Now enter the right password. | 6095 // Now enter the right password. |
6091 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kTestingNTLM), | 6096 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kTestingNTLM), |
6092 callback4.callback()); | 6097 callback4.callback()); |
6093 EXPECT_EQ(ERR_IO_PENDING, rv); | 6098 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6094 | 6099 |
6095 rv = callback4.WaitForResult(); | 6100 rv = callback4.WaitForResult(); |
6096 EXPECT_EQ(OK, rv); | 6101 EXPECT_THAT(rv, IsOk()); |
6097 | 6102 |
6098 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 6103 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
6099 | 6104 |
6100 TestCompletionCallback callback5; | 6105 TestCompletionCallback callback5; |
6101 | 6106 |
6102 // One more roundtrip | 6107 // One more roundtrip |
6103 rv = trans->RestartWithAuth(AuthCredentials(), callback5.callback()); | 6108 rv = trans->RestartWithAuth(AuthCredentials(), callback5.callback()); |
6104 EXPECT_EQ(ERR_IO_PENDING, rv); | 6109 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6105 | 6110 |
6106 rv = callback5.WaitForResult(); | 6111 rv = callback5.WaitForResult(); |
6107 EXPECT_EQ(OK, rv); | 6112 EXPECT_THAT(rv, IsOk()); |
6108 | 6113 |
6109 response = trans->GetResponseInfo(); | 6114 response = trans->GetResponseInfo(); |
6110 EXPECT_FALSE(response->auth_challenge); | 6115 EXPECT_FALSE(response->auth_challenge); |
6111 EXPECT_EQ(13, response->headers->GetContentLength()); | 6116 EXPECT_EQ(13, response->headers->GetContentLength()); |
6112 } | 6117 } |
6113 #endif // NTLM_PORTABLE | 6118 #endif // NTLM_PORTABLE |
6114 | 6119 |
6115 // Test reading a server response which has only headers, and no body. | 6120 // Test reading a server response which has only headers, and no body. |
6116 // After some maximum number of bytes is consumed, the transaction should | 6121 // After some maximum number of bytes is consumed, the transaction should |
6117 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. | 6122 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. |
(...skipping 16 matching lines...) Expand all Loading... |
6134 MockRead(ASYNC, large_headers_string.data(), large_headers_string.size()), | 6139 MockRead(ASYNC, large_headers_string.data(), large_headers_string.size()), |
6135 MockRead("\r\nBODY"), | 6140 MockRead("\r\nBODY"), |
6136 MockRead(SYNCHRONOUS, OK), | 6141 MockRead(SYNCHRONOUS, OK), |
6137 }; | 6142 }; |
6138 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 6143 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
6139 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6144 session_deps_.socket_factory->AddSocketDataProvider(&data); |
6140 | 6145 |
6141 TestCompletionCallback callback; | 6146 TestCompletionCallback callback; |
6142 | 6147 |
6143 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6148 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6144 EXPECT_EQ(ERR_IO_PENDING, rv); | 6149 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6145 | 6150 |
6146 rv = callback.WaitForResult(); | 6151 rv = callback.WaitForResult(); |
6147 EXPECT_EQ(ERR_RESPONSE_HEADERS_TOO_BIG, rv); | 6152 EXPECT_THAT(rv, IsError(ERR_RESPONSE_HEADERS_TOO_BIG)); |
6148 } | 6153 } |
6149 | 6154 |
6150 // Make sure that we don't try to reuse a TCPClientSocket when failing to | 6155 // Make sure that we don't try to reuse a TCPClientSocket when failing to |
6151 // establish tunnel. | 6156 // establish tunnel. |
6152 // http://code.google.com/p/chromium/issues/detail?id=3772 | 6157 // http://code.google.com/p/chromium/issues/detail?id=3772 |
6153 TEST_P(HttpNetworkTransactionTest, | 6158 TEST_P(HttpNetworkTransactionTest, |
6154 DontRecycleTransportSocketForSSLTunnel) { | 6159 DontRecycleTransportSocketForSSLTunnel) { |
6155 HttpRequestInfo request; | 6160 HttpRequestInfo request; |
6156 request.method = "GET"; | 6161 request.method = "GET"; |
6157 request.url = GURL("https://www.example.org/"); | 6162 request.url = GURL("https://www.example.org/"); |
(...skipping 23 matching lines...) Expand all Loading... |
6181 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | 6186 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
6182 }; | 6187 }; |
6183 | 6188 |
6184 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6189 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
6185 data_writes1, arraysize(data_writes1)); | 6190 data_writes1, arraysize(data_writes1)); |
6186 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6191 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
6187 | 6192 |
6188 TestCompletionCallback callback1; | 6193 TestCompletionCallback callback1; |
6189 | 6194 |
6190 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6195 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
6191 EXPECT_EQ(ERR_IO_PENDING, rv); | 6196 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6192 | 6197 |
6193 rv = callback1.WaitForResult(); | 6198 rv = callback1.WaitForResult(); |
6194 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 6199 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
6195 | 6200 |
6196 // Empty the current queue. This is necessary because idle sockets are | 6201 // Empty the current queue. This is necessary because idle sockets are |
6197 // added to the connection pool asynchronously with a PostTask. | 6202 // added to the connection pool asynchronously with a PostTask. |
6198 base::RunLoop().RunUntilIdle(); | 6203 base::RunLoop().RunUntilIdle(); |
6199 | 6204 |
6200 // We now check to make sure the TCPClientSocket was not added back to | 6205 // We now check to make sure the TCPClientSocket was not added back to |
6201 // the pool. | 6206 // the pool. |
6202 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6207 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
6203 trans.reset(); | 6208 trans.reset(); |
6204 base::RunLoop().RunUntilIdle(); | 6209 base::RunLoop().RunUntilIdle(); |
(...skipping 22 matching lines...) Expand all Loading... |
6227 MockRead("junk"), // Should not be read!! | 6232 MockRead("junk"), // Should not be read!! |
6228 MockRead(SYNCHRONOUS, OK), | 6233 MockRead(SYNCHRONOUS, OK), |
6229 }; | 6234 }; |
6230 | 6235 |
6231 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 6236 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
6232 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6237 session_deps_.socket_factory->AddSocketDataProvider(&data); |
6233 | 6238 |
6234 TestCompletionCallback callback; | 6239 TestCompletionCallback callback; |
6235 | 6240 |
6236 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6241 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6237 EXPECT_EQ(ERR_IO_PENDING, rv); | 6242 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6238 | 6243 |
6239 rv = callback.WaitForResult(); | 6244 rv = callback.WaitForResult(); |
6240 EXPECT_EQ(OK, rv); | 6245 EXPECT_THAT(rv, IsOk()); |
6241 | 6246 |
6242 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6247 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6243 ASSERT_TRUE(response); | 6248 ASSERT_TRUE(response); |
6244 | 6249 |
6245 EXPECT_TRUE(response->headers); | 6250 EXPECT_TRUE(response->headers); |
6246 std::string status_line = response->headers->GetStatusLine(); | 6251 std::string status_line = response->headers->GetStatusLine(); |
6247 EXPECT_EQ("HTTP/1.1 200 OK", status_line); | 6252 EXPECT_EQ("HTTP/1.1 200 OK", status_line); |
6248 | 6253 |
6249 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6254 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
6250 | 6255 |
6251 std::string response_data; | 6256 std::string response_data; |
6252 rv = ReadTransaction(trans.get(), &response_data); | 6257 rv = ReadTransaction(trans.get(), &response_data); |
6253 EXPECT_EQ(OK, rv); | 6258 EXPECT_THAT(rv, IsOk()); |
6254 EXPECT_EQ("hello world", response_data); | 6259 EXPECT_EQ("hello world", response_data); |
6255 | 6260 |
6256 // Empty the current queue. This is necessary because idle sockets are | 6261 // Empty the current queue. This is necessary because idle sockets are |
6257 // added to the connection pool asynchronously with a PostTask. | 6262 // added to the connection pool asynchronously with a PostTask. |
6258 base::RunLoop().RunUntilIdle(); | 6263 base::RunLoop().RunUntilIdle(); |
6259 | 6264 |
6260 // We now check to make sure the socket was added back to the pool. | 6265 // We now check to make sure the socket was added back to the pool. |
6261 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 6266 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
6262 } | 6267 } |
6263 | 6268 |
(...skipping 27 matching lines...) Expand all Loading... |
6291 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6296 session_deps_.socket_factory->AddSocketDataProvider(&data); |
6292 | 6297 |
6293 TestCompletionCallback callback; | 6298 TestCompletionCallback callback; |
6294 | 6299 |
6295 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6300 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6296 std::unique_ptr<HttpTransaction> trans( | 6301 std::unique_ptr<HttpTransaction> trans( |
6297 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6302 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
6298 | 6303 |
6299 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6304 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6300 | 6305 |
6301 EXPECT_EQ(ERR_IO_PENDING, rv); | 6306 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6302 EXPECT_EQ(OK, callback.WaitForResult()); | 6307 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
6303 | 6308 |
6304 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6309 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6305 ASSERT_TRUE(response); | 6310 ASSERT_TRUE(response); |
6306 ASSERT_TRUE(response->headers); | 6311 ASSERT_TRUE(response->headers); |
6307 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6312 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
6308 | 6313 |
6309 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6314 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
6310 | 6315 |
6311 std::string response_data; | 6316 std::string response_data; |
6312 rv = ReadTransaction(trans.get(), &response_data); | 6317 rv = ReadTransaction(trans.get(), &response_data); |
6313 EXPECT_EQ(OK, rv); | 6318 EXPECT_THAT(rv, IsOk()); |
6314 EXPECT_EQ("hello world", response_data); | 6319 EXPECT_EQ("hello world", response_data); |
6315 | 6320 |
6316 // Empty the current queue. This is necessary because idle sockets are | 6321 // Empty the current queue. This is necessary because idle sockets are |
6317 // added to the connection pool asynchronously with a PostTask. | 6322 // added to the connection pool asynchronously with a PostTask. |
6318 base::RunLoop().RunUntilIdle(); | 6323 base::RunLoop().RunUntilIdle(); |
6319 | 6324 |
6320 // We now check to make sure the socket was added back to the pool. | 6325 // We now check to make sure the socket was added back to the pool. |
6321 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 6326 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
6322 } | 6327 } |
6323 | 6328 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6357 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6362 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
6358 | 6363 |
6359 TestCompletionCallback callback; | 6364 TestCompletionCallback callback; |
6360 | 6365 |
6361 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6366 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6362 std::unique_ptr<HttpTransaction> trans( | 6367 std::unique_ptr<HttpTransaction> trans( |
6363 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6368 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
6364 | 6369 |
6365 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6370 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6366 | 6371 |
6367 EXPECT_EQ(ERR_IO_PENDING, rv); | 6372 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6368 EXPECT_EQ(OK, callback.WaitForResult()); | 6373 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
6369 | 6374 |
6370 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6375 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6371 ASSERT_TRUE(response); | 6376 ASSERT_TRUE(response); |
6372 ASSERT_TRUE(response->headers); | 6377 ASSERT_TRUE(response->headers); |
6373 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6378 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
6374 | 6379 |
6375 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6380 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
6376 | 6381 |
6377 std::string response_data; | 6382 std::string response_data; |
6378 rv = ReadTransaction(trans.get(), &response_data); | 6383 rv = ReadTransaction(trans.get(), &response_data); |
6379 EXPECT_EQ(OK, rv); | 6384 EXPECT_THAT(rv, IsOk()); |
6380 EXPECT_EQ("hello world", response_data); | 6385 EXPECT_EQ("hello world", response_data); |
6381 | 6386 |
6382 // Empty the current queue. This is necessary because idle sockets are | 6387 // Empty the current queue. This is necessary because idle sockets are |
6383 // added to the connection pool asynchronously with a PostTask. | 6388 // added to the connection pool asynchronously with a PostTask. |
6384 base::RunLoop().RunUntilIdle(); | 6389 base::RunLoop().RunUntilIdle(); |
6385 | 6390 |
6386 // We now check to make sure the socket was added back to the pool. | 6391 // We now check to make sure the socket was added back to the pool. |
6387 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 6392 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
6388 | 6393 |
6389 // Now start the second transaction, which should reuse the previous socket. | 6394 // Now start the second transaction, which should reuse the previous socket. |
6390 | 6395 |
6391 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6396 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
6392 | 6397 |
6393 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6398 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6394 | 6399 |
6395 EXPECT_EQ(ERR_IO_PENDING, rv); | 6400 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6396 EXPECT_EQ(OK, callback.WaitForResult()); | 6401 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
6397 | 6402 |
6398 response = trans->GetResponseInfo(); | 6403 response = trans->GetResponseInfo(); |
6399 ASSERT_TRUE(response); | 6404 ASSERT_TRUE(response); |
6400 ASSERT_TRUE(response->headers); | 6405 ASSERT_TRUE(response->headers); |
6401 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6406 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
6402 | 6407 |
6403 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6408 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
6404 | 6409 |
6405 rv = ReadTransaction(trans.get(), &response_data); | 6410 rv = ReadTransaction(trans.get(), &response_data); |
6406 EXPECT_EQ(OK, rv); | 6411 EXPECT_THAT(rv, IsOk()); |
6407 EXPECT_EQ("hello world", response_data); | 6412 EXPECT_EQ("hello world", response_data); |
6408 | 6413 |
6409 // Empty the current queue. This is necessary because idle sockets are | 6414 // Empty the current queue. This is necessary because idle sockets are |
6410 // added to the connection pool asynchronously with a PostTask. | 6415 // added to the connection pool asynchronously with a PostTask. |
6411 base::RunLoop().RunUntilIdle(); | 6416 base::RunLoop().RunUntilIdle(); |
6412 | 6417 |
6413 // We now check to make sure the socket was added back to the pool. | 6418 // We now check to make sure the socket was added back to the pool. |
6414 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 6419 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
6415 } | 6420 } |
6416 | 6421 |
(...skipping 23 matching lines...) Expand all Loading... |
6440 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6445 session_deps_.socket_factory->AddSocketDataProvider(&data); |
6441 | 6446 |
6442 // Transaction must be created after the MockReads, so it's destroyed before | 6447 // Transaction must be created after the MockReads, so it's destroyed before |
6443 // them. | 6448 // them. |
6444 std::unique_ptr<HttpTransaction> trans( | 6449 std::unique_ptr<HttpTransaction> trans( |
6445 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6450 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
6446 | 6451 |
6447 TestCompletionCallback callback; | 6452 TestCompletionCallback callback; |
6448 | 6453 |
6449 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6454 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6450 EXPECT_EQ(ERR_IO_PENDING, rv); | 6455 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6451 | 6456 |
6452 rv = callback.WaitForResult(); | 6457 rv = callback.WaitForResult(); |
6453 EXPECT_EQ(OK, rv); | 6458 EXPECT_THAT(rv, IsOk()); |
6454 | 6459 |
6455 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6460 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6456 ASSERT_TRUE(response); | 6461 ASSERT_TRUE(response); |
6457 | 6462 |
6458 EXPECT_TRUE(response->headers); | 6463 EXPECT_TRUE(response->headers); |
6459 std::string status_line = response->headers->GetStatusLine(); | 6464 std::string status_line = response->headers->GetStatusLine(); |
6460 EXPECT_EQ("HTTP/1.1 204 No Content", status_line); | 6465 EXPECT_EQ("HTTP/1.1 204 No Content", status_line); |
6461 | 6466 |
6462 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6467 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
6463 | 6468 |
6464 std::string response_data; | 6469 std::string response_data; |
6465 rv = ReadTransaction(trans.get(), &response_data); | 6470 rv = ReadTransaction(trans.get(), &response_data); |
6466 EXPECT_EQ(OK, rv); | 6471 EXPECT_THAT(rv, IsOk()); |
6467 EXPECT_EQ("", response_data); | 6472 EXPECT_EQ("", response_data); |
6468 | 6473 |
6469 // Empty the current queue. This is necessary because idle sockets are | 6474 // Empty the current queue. This is necessary because idle sockets are |
6470 // added to the connection pool asynchronously with a PostTask. | 6475 // added to the connection pool asynchronously with a PostTask. |
6471 base::RunLoop().RunUntilIdle(); | 6476 base::RunLoop().RunUntilIdle(); |
6472 | 6477 |
6473 // We now check to make sure the socket was added back to the pool. | 6478 // We now check to make sure the socket was added back to the pool. |
6474 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 6479 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
6475 } | 6480 } |
6476 | 6481 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6539 "hello world", "welcome" | 6544 "hello world", "welcome" |
6540 }; | 6545 }; |
6541 | 6546 |
6542 for (int i = 0; i < 2; ++i) { | 6547 for (int i = 0; i < 2; ++i) { |
6543 std::unique_ptr<HttpTransaction> trans( | 6548 std::unique_ptr<HttpTransaction> trans( |
6544 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6549 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
6545 | 6550 |
6546 TestCompletionCallback callback; | 6551 TestCompletionCallback callback; |
6547 | 6552 |
6548 int rv = trans->Start(&request[i], callback.callback(), BoundNetLog()); | 6553 int rv = trans->Start(&request[i], callback.callback(), BoundNetLog()); |
6549 EXPECT_EQ(ERR_IO_PENDING, rv); | 6554 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6550 | 6555 |
6551 rv = callback.WaitForResult(); | 6556 rv = callback.WaitForResult(); |
6552 EXPECT_EQ(OK, rv); | 6557 EXPECT_THAT(rv, IsOk()); |
6553 | 6558 |
6554 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6559 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6555 ASSERT_TRUE(response); | 6560 ASSERT_TRUE(response); |
6556 | 6561 |
6557 EXPECT_TRUE(response->headers); | 6562 EXPECT_TRUE(response->headers); |
6558 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6563 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
6559 | 6564 |
6560 std::string response_data; | 6565 std::string response_data; |
6561 rv = ReadTransaction(trans.get(), &response_data); | 6566 rv = ReadTransaction(trans.get(), &response_data); |
6562 EXPECT_EQ(OK, rv); | 6567 EXPECT_THAT(rv, IsOk()); |
6563 EXPECT_EQ(kExpectedResponseData[i], response_data); | 6568 EXPECT_EQ(kExpectedResponseData[i], response_data); |
6564 } | 6569 } |
6565 } | 6570 } |
6566 | 6571 |
6567 // Test the request-challenge-retry sequence for basic auth when there is | 6572 // Test the request-challenge-retry sequence for basic auth when there is |
6568 // an identity in the URL. The request should be sent as normal, but when | 6573 // an identity in the URL. The request should be sent as normal, but when |
6569 // it fails the identity from the URL is used to answer the challenge. | 6574 // it fails the identity from the URL is used to answer the challenge. |
6570 TEST_P(HttpNetworkTransactionTest, AuthIdentityInURL) { | 6575 TEST_P(HttpNetworkTransactionTest, AuthIdentityInURL) { |
6571 HttpRequestInfo request; | 6576 HttpRequestInfo request; |
6572 request.method = "GET"; | 6577 request.method = "GET"; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6613 | 6618 |
6614 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6619 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
6615 data_writes1, arraysize(data_writes1)); | 6620 data_writes1, arraysize(data_writes1)); |
6616 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 6621 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
6617 data_writes2, arraysize(data_writes2)); | 6622 data_writes2, arraysize(data_writes2)); |
6618 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6623 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
6619 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6624 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
6620 | 6625 |
6621 TestCompletionCallback callback1; | 6626 TestCompletionCallback callback1; |
6622 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6627 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
6623 EXPECT_EQ(ERR_IO_PENDING, rv); | 6628 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6624 rv = callback1.WaitForResult(); | 6629 rv = callback1.WaitForResult(); |
6625 EXPECT_EQ(OK, rv); | 6630 EXPECT_THAT(rv, IsOk()); |
6626 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 6631 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
6627 | 6632 |
6628 TestCompletionCallback callback2; | 6633 TestCompletionCallback callback2; |
6629 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 6634 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
6630 EXPECT_EQ(ERR_IO_PENDING, rv); | 6635 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6631 rv = callback2.WaitForResult(); | 6636 rv = callback2.WaitForResult(); |
6632 EXPECT_EQ(OK, rv); | 6637 EXPECT_THAT(rv, IsOk()); |
6633 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6638 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
6634 | 6639 |
6635 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6640 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6636 ASSERT_TRUE(response); | 6641 ASSERT_TRUE(response); |
6637 | 6642 |
6638 // There is no challenge info, since the identity in URL worked. | 6643 // There is no challenge info, since the identity in URL worked. |
6639 EXPECT_FALSE(response->auth_challenge); | 6644 EXPECT_FALSE(response->auth_challenge); |
6640 | 6645 |
6641 EXPECT_EQ(100, response->headers->GetContentLength()); | 6646 EXPECT_EQ(100, response->headers->GetContentLength()); |
6642 | 6647 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6713 data_writes2, arraysize(data_writes2)); | 6718 data_writes2, arraysize(data_writes2)); |
6714 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 6719 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
6715 data_writes3, arraysize(data_writes3)); | 6720 data_writes3, arraysize(data_writes3)); |
6716 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6721 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
6717 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6722 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
6718 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 6723 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
6719 | 6724 |
6720 TestCompletionCallback callback1; | 6725 TestCompletionCallback callback1; |
6721 | 6726 |
6722 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6727 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
6723 EXPECT_EQ(ERR_IO_PENDING, rv); | 6728 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6724 | 6729 |
6725 rv = callback1.WaitForResult(); | 6730 rv = callback1.WaitForResult(); |
6726 EXPECT_EQ(OK, rv); | 6731 EXPECT_THAT(rv, IsOk()); |
6727 | 6732 |
6728 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 6733 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
6729 TestCompletionCallback callback2; | 6734 TestCompletionCallback callback2; |
6730 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 6735 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
6731 EXPECT_EQ(ERR_IO_PENDING, rv); | 6736 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6732 rv = callback2.WaitForResult(); | 6737 rv = callback2.WaitForResult(); |
6733 EXPECT_EQ(OK, rv); | 6738 EXPECT_THAT(rv, IsOk()); |
6734 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6739 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
6735 | 6740 |
6736 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6741 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6737 ASSERT_TRUE(response); | 6742 ASSERT_TRUE(response); |
6738 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 6743 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
6739 | 6744 |
6740 TestCompletionCallback callback3; | 6745 TestCompletionCallback callback3; |
6741 rv = trans->RestartWithAuth( | 6746 rv = trans->RestartWithAuth( |
6742 AuthCredentials(kFoo, kBar), callback3.callback()); | 6747 AuthCredentials(kFoo, kBar), callback3.callback()); |
6743 EXPECT_EQ(ERR_IO_PENDING, rv); | 6748 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6744 rv = callback3.WaitForResult(); | 6749 rv = callback3.WaitForResult(); |
6745 EXPECT_EQ(OK, rv); | 6750 EXPECT_THAT(rv, IsOk()); |
6746 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6751 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
6747 | 6752 |
6748 response = trans->GetResponseInfo(); | 6753 response = trans->GetResponseInfo(); |
6749 ASSERT_TRUE(response); | 6754 ASSERT_TRUE(response); |
6750 | 6755 |
6751 // There is no challenge info, since the identity worked. | 6756 // There is no challenge info, since the identity worked. |
6752 EXPECT_FALSE(response->auth_challenge); | 6757 EXPECT_FALSE(response->auth_challenge); |
6753 | 6758 |
6754 EXPECT_EQ(100, response->headers->GetContentLength()); | 6759 EXPECT_EQ(100, response->headers->GetContentLength()); |
6755 | 6760 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6804 | 6809 |
6805 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6810 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
6806 data_writes1, arraysize(data_writes1)); | 6811 data_writes1, arraysize(data_writes1)); |
6807 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 6812 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
6808 data_writes3, arraysize(data_writes3)); | 6813 data_writes3, arraysize(data_writes3)); |
6809 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6814 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
6810 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 6815 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
6811 | 6816 |
6812 TestCompletionCallback callback1; | 6817 TestCompletionCallback callback1; |
6813 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6818 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
6814 EXPECT_EQ(ERR_IO_PENDING, rv); | 6819 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6815 rv = callback1.WaitForResult(); | 6820 rv = callback1.WaitForResult(); |
6816 EXPECT_EQ(OK, rv); | 6821 EXPECT_THAT(rv, IsOk()); |
6817 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6822 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
6818 | 6823 |
6819 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6824 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6820 ASSERT_TRUE(response); | 6825 ASSERT_TRUE(response); |
6821 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 6826 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
6822 | 6827 |
6823 TestCompletionCallback callback3; | 6828 TestCompletionCallback callback3; |
6824 rv = trans->RestartWithAuth( | 6829 rv = trans->RestartWithAuth( |
6825 AuthCredentials(kFoo, kBar), callback3.callback()); | 6830 AuthCredentials(kFoo, kBar), callback3.callback()); |
6826 EXPECT_EQ(ERR_IO_PENDING, rv); | 6831 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6827 rv = callback3.WaitForResult(); | 6832 rv = callback3.WaitForResult(); |
6828 EXPECT_EQ(OK, rv); | 6833 EXPECT_THAT(rv, IsOk()); |
6829 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6834 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
6830 | 6835 |
6831 response = trans->GetResponseInfo(); | 6836 response = trans->GetResponseInfo(); |
6832 ASSERT_TRUE(response); | 6837 ASSERT_TRUE(response); |
6833 | 6838 |
6834 // There is no challenge info, since the identity worked. | 6839 // There is no challenge info, since the identity worked. |
6835 EXPECT_FALSE(response->auth_challenge); | 6840 EXPECT_FALSE(response->auth_challenge); |
6836 EXPECT_EQ(100, response->headers->GetContentLength()); | 6841 EXPECT_EQ(100, response->headers->GetContentLength()); |
6837 | 6842 |
6838 // Empty the current queue. | 6843 // Empty the current queue. |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6886 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6891 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
6887 data_writes1, arraysize(data_writes1)); | 6892 data_writes1, arraysize(data_writes1)); |
6888 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 6893 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
6889 data_writes2, arraysize(data_writes2)); | 6894 data_writes2, arraysize(data_writes2)); |
6890 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6895 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
6891 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6896 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
6892 | 6897 |
6893 TestCompletionCallback callback1; | 6898 TestCompletionCallback callback1; |
6894 | 6899 |
6895 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6900 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
6896 EXPECT_EQ(ERR_IO_PENDING, rv); | 6901 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6897 | 6902 |
6898 rv = callback1.WaitForResult(); | 6903 rv = callback1.WaitForResult(); |
6899 EXPECT_EQ(OK, rv); | 6904 EXPECT_THAT(rv, IsOk()); |
6900 | 6905 |
6901 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6906 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6902 ASSERT_TRUE(response); | 6907 ASSERT_TRUE(response); |
6903 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 6908 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
6904 | 6909 |
6905 TestCompletionCallback callback2; | 6910 TestCompletionCallback callback2; |
6906 | 6911 |
6907 rv = trans->RestartWithAuth( | 6912 rv = trans->RestartWithAuth( |
6908 AuthCredentials(kFoo, kBar), callback2.callback()); | 6913 AuthCredentials(kFoo, kBar), callback2.callback()); |
6909 EXPECT_EQ(ERR_IO_PENDING, rv); | 6914 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6910 | 6915 |
6911 rv = callback2.WaitForResult(); | 6916 rv = callback2.WaitForResult(); |
6912 EXPECT_EQ(OK, rv); | 6917 EXPECT_THAT(rv, IsOk()); |
6913 | 6918 |
6914 response = trans->GetResponseInfo(); | 6919 response = trans->GetResponseInfo(); |
6915 ASSERT_TRUE(response); | 6920 ASSERT_TRUE(response); |
6916 EXPECT_FALSE(response->auth_challenge); | 6921 EXPECT_FALSE(response->auth_challenge); |
6917 EXPECT_EQ(100, response->headers->GetContentLength()); | 6922 EXPECT_EQ(100, response->headers->GetContentLength()); |
6918 } | 6923 } |
6919 | 6924 |
6920 // ------------------------------------------------------------------------ | 6925 // ------------------------------------------------------------------------ |
6921 | 6926 |
6922 // Transaction 2: authenticate (foo2, bar2) on MyRealm2 | 6927 // Transaction 2: authenticate (foo2, bar2) on MyRealm2 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6968 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6973 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
6969 data_writes1, arraysize(data_writes1)); | 6974 data_writes1, arraysize(data_writes1)); |
6970 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 6975 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
6971 data_writes2, arraysize(data_writes2)); | 6976 data_writes2, arraysize(data_writes2)); |
6972 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6977 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
6973 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6978 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
6974 | 6979 |
6975 TestCompletionCallback callback1; | 6980 TestCompletionCallback callback1; |
6976 | 6981 |
6977 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6982 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
6978 EXPECT_EQ(ERR_IO_PENDING, rv); | 6983 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6979 | 6984 |
6980 rv = callback1.WaitForResult(); | 6985 rv = callback1.WaitForResult(); |
6981 EXPECT_EQ(OK, rv); | 6986 EXPECT_THAT(rv, IsOk()); |
6982 | 6987 |
6983 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6988 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6984 ASSERT_TRUE(response); | 6989 ASSERT_TRUE(response); |
6985 ASSERT_TRUE(response->auth_challenge); | 6990 ASSERT_TRUE(response->auth_challenge); |
6986 EXPECT_FALSE(response->auth_challenge->is_proxy); | 6991 EXPECT_FALSE(response->auth_challenge->is_proxy); |
6987 EXPECT_EQ("http://www.example.org", | 6992 EXPECT_EQ("http://www.example.org", |
6988 response->auth_challenge->challenger.Serialize()); | 6993 response->auth_challenge->challenger.Serialize()); |
6989 EXPECT_EQ("MyRealm2", response->auth_challenge->realm); | 6994 EXPECT_EQ("MyRealm2", response->auth_challenge->realm); |
6990 EXPECT_EQ(kBasicAuthScheme, response->auth_challenge->scheme); | 6995 EXPECT_EQ(kBasicAuthScheme, response->auth_challenge->scheme); |
6991 | 6996 |
6992 TestCompletionCallback callback2; | 6997 TestCompletionCallback callback2; |
6993 | 6998 |
6994 rv = trans->RestartWithAuth( | 6999 rv = trans->RestartWithAuth( |
6995 AuthCredentials(kFoo2, kBar2), callback2.callback()); | 7000 AuthCredentials(kFoo2, kBar2), callback2.callback()); |
6996 EXPECT_EQ(ERR_IO_PENDING, rv); | 7001 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6997 | 7002 |
6998 rv = callback2.WaitForResult(); | 7003 rv = callback2.WaitForResult(); |
6999 EXPECT_EQ(OK, rv); | 7004 EXPECT_THAT(rv, IsOk()); |
7000 | 7005 |
7001 response = trans->GetResponseInfo(); | 7006 response = trans->GetResponseInfo(); |
7002 ASSERT_TRUE(response); | 7007 ASSERT_TRUE(response); |
7003 EXPECT_FALSE(response->auth_challenge); | 7008 EXPECT_FALSE(response->auth_challenge); |
7004 EXPECT_EQ(100, response->headers->GetContentLength()); | 7009 EXPECT_EQ(100, response->headers->GetContentLength()); |
7005 } | 7010 } |
7006 | 7011 |
7007 // ------------------------------------------------------------------------ | 7012 // ------------------------------------------------------------------------ |
7008 | 7013 |
7009 // Transaction 3: Resend a request in MyRealm's protection space -- | 7014 // Transaction 3: Resend a request in MyRealm's protection space -- |
(...skipping 24 matching lines...) Expand all Loading... |
7034 MockRead(SYNCHRONOUS, OK), | 7039 MockRead(SYNCHRONOUS, OK), |
7035 }; | 7040 }; |
7036 | 7041 |
7037 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 7042 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
7038 data_writes1, arraysize(data_writes1)); | 7043 data_writes1, arraysize(data_writes1)); |
7039 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7044 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
7040 | 7045 |
7041 TestCompletionCallback callback1; | 7046 TestCompletionCallback callback1; |
7042 | 7047 |
7043 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7048 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
7044 EXPECT_EQ(ERR_IO_PENDING, rv); | 7049 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7045 | 7050 |
7046 rv = callback1.WaitForResult(); | 7051 rv = callback1.WaitForResult(); |
7047 EXPECT_EQ(OK, rv); | 7052 EXPECT_THAT(rv, IsOk()); |
7048 | 7053 |
7049 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7054 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7050 ASSERT_TRUE(response); | 7055 ASSERT_TRUE(response); |
7051 | 7056 |
7052 EXPECT_FALSE(response->auth_challenge); | 7057 EXPECT_FALSE(response->auth_challenge); |
7053 EXPECT_EQ(100, response->headers->GetContentLength()); | 7058 EXPECT_EQ(100, response->headers->GetContentLength()); |
7054 } | 7059 } |
7055 | 7060 |
7056 // ------------------------------------------------------------------------ | 7061 // ------------------------------------------------------------------------ |
7057 | 7062 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7099 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 7104 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
7100 data_writes1, arraysize(data_writes1)); | 7105 data_writes1, arraysize(data_writes1)); |
7101 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 7106 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
7102 data_writes2, arraysize(data_writes2)); | 7107 data_writes2, arraysize(data_writes2)); |
7103 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7108 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
7104 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 7109 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
7105 | 7110 |
7106 TestCompletionCallback callback1; | 7111 TestCompletionCallback callback1; |
7107 | 7112 |
7108 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7113 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
7109 EXPECT_EQ(ERR_IO_PENDING, rv); | 7114 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7110 | 7115 |
7111 rv = callback1.WaitForResult(); | 7116 rv = callback1.WaitForResult(); |
7112 EXPECT_EQ(OK, rv); | 7117 EXPECT_THAT(rv, IsOk()); |
7113 | 7118 |
7114 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 7119 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
7115 TestCompletionCallback callback2; | 7120 TestCompletionCallback callback2; |
7116 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 7121 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
7117 EXPECT_EQ(ERR_IO_PENDING, rv); | 7122 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7118 rv = callback2.WaitForResult(); | 7123 rv = callback2.WaitForResult(); |
7119 EXPECT_EQ(OK, rv); | 7124 EXPECT_THAT(rv, IsOk()); |
7120 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 7125 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
7121 | 7126 |
7122 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7127 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7123 ASSERT_TRUE(response); | 7128 ASSERT_TRUE(response); |
7124 EXPECT_FALSE(response->auth_challenge); | 7129 EXPECT_FALSE(response->auth_challenge); |
7125 EXPECT_EQ(100, response->headers->GetContentLength()); | 7130 EXPECT_EQ(100, response->headers->GetContentLength()); |
7126 } | 7131 } |
7127 | 7132 |
7128 // ------------------------------------------------------------------------ | 7133 // ------------------------------------------------------------------------ |
7129 | 7134 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7192 data_writes2, arraysize(data_writes2)); | 7197 data_writes2, arraysize(data_writes2)); |
7193 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 7198 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
7194 data_writes3, arraysize(data_writes3)); | 7199 data_writes3, arraysize(data_writes3)); |
7195 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7200 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
7196 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 7201 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
7197 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 7202 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
7198 | 7203 |
7199 TestCompletionCallback callback1; | 7204 TestCompletionCallback callback1; |
7200 | 7205 |
7201 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7206 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
7202 EXPECT_EQ(ERR_IO_PENDING, rv); | 7207 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7203 | 7208 |
7204 rv = callback1.WaitForResult(); | 7209 rv = callback1.WaitForResult(); |
7205 EXPECT_EQ(OK, rv); | 7210 EXPECT_THAT(rv, IsOk()); |
7206 | 7211 |
7207 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 7212 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
7208 TestCompletionCallback callback2; | 7213 TestCompletionCallback callback2; |
7209 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 7214 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
7210 EXPECT_EQ(ERR_IO_PENDING, rv); | 7215 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7211 rv = callback2.WaitForResult(); | 7216 rv = callback2.WaitForResult(); |
7212 EXPECT_EQ(OK, rv); | 7217 EXPECT_THAT(rv, IsOk()); |
7213 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 7218 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
7214 | 7219 |
7215 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7220 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7216 ASSERT_TRUE(response); | 7221 ASSERT_TRUE(response); |
7217 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 7222 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
7218 | 7223 |
7219 TestCompletionCallback callback3; | 7224 TestCompletionCallback callback3; |
7220 | 7225 |
7221 rv = trans->RestartWithAuth( | 7226 rv = trans->RestartWithAuth( |
7222 AuthCredentials(kFoo3, kBar3), callback3.callback()); | 7227 AuthCredentials(kFoo3, kBar3), callback3.callback()); |
7223 EXPECT_EQ(ERR_IO_PENDING, rv); | 7228 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7224 | 7229 |
7225 rv = callback3.WaitForResult(); | 7230 rv = callback3.WaitForResult(); |
7226 EXPECT_EQ(OK, rv); | 7231 EXPECT_THAT(rv, IsOk()); |
7227 | 7232 |
7228 response = trans->GetResponseInfo(); | 7233 response = trans->GetResponseInfo(); |
7229 ASSERT_TRUE(response); | 7234 ASSERT_TRUE(response); |
7230 EXPECT_FALSE(response->auth_challenge); | 7235 EXPECT_FALSE(response->auth_challenge); |
7231 EXPECT_EQ(100, response->headers->GetContentLength()); | 7236 EXPECT_EQ(100, response->headers->GetContentLength()); |
7232 } | 7237 } |
7233 } | 7238 } |
7234 | 7239 |
7235 // Tests that nonce count increments when multiple auth attempts | 7240 // Tests that nonce count increments when multiple auth attempts |
7236 // are started with the same nonce. | 7241 // are started with the same nonce. |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7288 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 7293 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
7289 data_writes1, arraysize(data_writes1)); | 7294 data_writes1, arraysize(data_writes1)); |
7290 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 7295 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
7291 data_writes2, arraysize(data_writes2)); | 7296 data_writes2, arraysize(data_writes2)); |
7292 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7297 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
7293 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 7298 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
7294 | 7299 |
7295 TestCompletionCallback callback1; | 7300 TestCompletionCallback callback1; |
7296 | 7301 |
7297 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7302 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
7298 EXPECT_EQ(ERR_IO_PENDING, rv); | 7303 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7299 | 7304 |
7300 rv = callback1.WaitForResult(); | 7305 rv = callback1.WaitForResult(); |
7301 EXPECT_EQ(OK, rv); | 7306 EXPECT_THAT(rv, IsOk()); |
7302 | 7307 |
7303 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7308 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7304 ASSERT_TRUE(response); | 7309 ASSERT_TRUE(response); |
7305 EXPECT_TRUE(CheckDigestServerAuth(response->auth_challenge.get())); | 7310 EXPECT_TRUE(CheckDigestServerAuth(response->auth_challenge.get())); |
7306 | 7311 |
7307 TestCompletionCallback callback2; | 7312 TestCompletionCallback callback2; |
7308 | 7313 |
7309 rv = trans->RestartWithAuth( | 7314 rv = trans->RestartWithAuth( |
7310 AuthCredentials(kFoo, kBar), callback2.callback()); | 7315 AuthCredentials(kFoo, kBar), callback2.callback()); |
7311 EXPECT_EQ(ERR_IO_PENDING, rv); | 7316 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7312 | 7317 |
7313 rv = callback2.WaitForResult(); | 7318 rv = callback2.WaitForResult(); |
7314 EXPECT_EQ(OK, rv); | 7319 EXPECT_THAT(rv, IsOk()); |
7315 | 7320 |
7316 response = trans->GetResponseInfo(); | 7321 response = trans->GetResponseInfo(); |
7317 ASSERT_TRUE(response); | 7322 ASSERT_TRUE(response); |
7318 EXPECT_FALSE(response->auth_challenge); | 7323 EXPECT_FALSE(response->auth_challenge); |
7319 } | 7324 } |
7320 | 7325 |
7321 // ------------------------------------------------------------------------ | 7326 // ------------------------------------------------------------------------ |
7322 | 7327 |
7323 // Transaction 2: Request another resource in digestive's protection space. | 7328 // Transaction 2: Request another resource in digestive's protection space. |
7324 // This will preemptively add an Authorization header which should have an | 7329 // This will preemptively add an Authorization header which should have an |
(...skipping 27 matching lines...) Expand all Loading... |
7352 MockRead(SYNCHRONOUS, OK), | 7357 MockRead(SYNCHRONOUS, OK), |
7353 }; | 7358 }; |
7354 | 7359 |
7355 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 7360 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
7356 data_writes1, arraysize(data_writes1)); | 7361 data_writes1, arraysize(data_writes1)); |
7357 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7362 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
7358 | 7363 |
7359 TestCompletionCallback callback1; | 7364 TestCompletionCallback callback1; |
7360 | 7365 |
7361 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7366 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
7362 EXPECT_EQ(ERR_IO_PENDING, rv); | 7367 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7363 | 7368 |
7364 rv = callback1.WaitForResult(); | 7369 rv = callback1.WaitForResult(); |
7365 EXPECT_EQ(OK, rv); | 7370 EXPECT_THAT(rv, IsOk()); |
7366 | 7371 |
7367 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7372 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7368 ASSERT_TRUE(response); | 7373 ASSERT_TRUE(response); |
7369 EXPECT_FALSE(response->auth_challenge); | 7374 EXPECT_FALSE(response->auth_challenge); |
7370 } | 7375 } |
7371 } | 7376 } |
7372 | 7377 |
7373 // Test the ResetStateForRestart() private method. | 7378 // Test the ResetStateForRestart() private method. |
7374 TEST_P(HttpNetworkTransactionTest, ResetStateForRestart) { | 7379 TEST_P(HttpNetworkTransactionTest, ResetStateForRestart) { |
7375 // Create a transaction (the dependencies aren't important). | 7380 // Create a transaction (the dependencies aren't important). |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7445 SSLSocketDataProvider ssl(ASYNC, OK); | 7450 SSLSocketDataProvider ssl(ASYNC, OK); |
7446 | 7451 |
7447 session_deps_.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); | 7452 session_deps_.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); |
7448 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7453 session_deps_.socket_factory->AddSocketDataProvider(&data); |
7449 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bad); | 7454 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bad); |
7450 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 7455 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
7451 | 7456 |
7452 TestCompletionCallback callback; | 7457 TestCompletionCallback callback; |
7453 | 7458 |
7454 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7459 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7455 EXPECT_EQ(ERR_IO_PENDING, rv); | 7460 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7456 | 7461 |
7457 rv = callback.WaitForResult(); | 7462 rv = callback.WaitForResult(); |
7458 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, rv); | 7463 EXPECT_THAT(rv, IsError(ERR_CERT_AUTHORITY_INVALID)); |
7459 | 7464 |
7460 rv = trans->RestartIgnoringLastError(callback.callback()); | 7465 rv = trans->RestartIgnoringLastError(callback.callback()); |
7461 EXPECT_EQ(ERR_IO_PENDING, rv); | 7466 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7462 | 7467 |
7463 rv = callback.WaitForResult(); | 7468 rv = callback.WaitForResult(); |
7464 EXPECT_EQ(OK, rv); | 7469 EXPECT_THAT(rv, IsOk()); |
7465 | 7470 |
7466 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7471 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7467 | 7472 |
7468 ASSERT_TRUE(response); | 7473 ASSERT_TRUE(response); |
7469 EXPECT_EQ(100, response->headers->GetContentLength()); | 7474 EXPECT_EQ(100, response->headers->GetContentLength()); |
7470 } | 7475 } |
7471 | 7476 |
7472 // Test HTTPS connections to a site with a bad certificate, going through a | 7477 // Test HTTPS connections to a site with a bad certificate, going through a |
7473 // proxy | 7478 // proxy |
7474 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaProxy) { | 7479 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaProxy) { |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7523 TestCompletionCallback callback; | 7528 TestCompletionCallback callback; |
7524 | 7529 |
7525 for (int i = 0; i < 2; i++) { | 7530 for (int i = 0; i < 2; i++) { |
7526 session_deps_.socket_factory->ResetNextMockIndexes(); | 7531 session_deps_.socket_factory->ResetNextMockIndexes(); |
7527 | 7532 |
7528 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7533 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7529 std::unique_ptr<HttpTransaction> trans( | 7534 std::unique_ptr<HttpTransaction> trans( |
7530 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7535 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
7531 | 7536 |
7532 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7537 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7533 EXPECT_EQ(ERR_IO_PENDING, rv); | 7538 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7534 | 7539 |
7535 rv = callback.WaitForResult(); | 7540 rv = callback.WaitForResult(); |
7536 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, rv); | 7541 EXPECT_THAT(rv, IsError(ERR_CERT_AUTHORITY_INVALID)); |
7537 | 7542 |
7538 rv = trans->RestartIgnoringLastError(callback.callback()); | 7543 rv = trans->RestartIgnoringLastError(callback.callback()); |
7539 EXPECT_EQ(ERR_IO_PENDING, rv); | 7544 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7540 | 7545 |
7541 rv = callback.WaitForResult(); | 7546 rv = callback.WaitForResult(); |
7542 EXPECT_EQ(OK, rv); | 7547 EXPECT_THAT(rv, IsOk()); |
7543 | 7548 |
7544 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7549 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7545 | 7550 |
7546 ASSERT_TRUE(response); | 7551 ASSERT_TRUE(response); |
7547 EXPECT_EQ(100, response->headers->GetContentLength()); | 7552 EXPECT_EQ(100, response->headers->GetContentLength()); |
7548 } | 7553 } |
7549 } | 7554 } |
7550 | 7555 |
7551 | 7556 |
7552 // Test HTTPS connections to a site, going through an HTTPS proxy | 7557 // Test HTTPS connections to a site, going through an HTTPS proxy |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7587 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 7592 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
7588 session_deps_.socket_factory->AddSSLSocketDataProvider(&tunnel_ssl); | 7593 session_deps_.socket_factory->AddSSLSocketDataProvider(&tunnel_ssl); |
7589 | 7594 |
7590 TestCompletionCallback callback; | 7595 TestCompletionCallback callback; |
7591 | 7596 |
7592 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7597 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7593 std::unique_ptr<HttpTransaction> trans( | 7598 std::unique_ptr<HttpTransaction> trans( |
7594 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7599 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
7595 | 7600 |
7596 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7601 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7597 EXPECT_EQ(ERR_IO_PENDING, rv); | 7602 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7598 | 7603 |
7599 rv = callback.WaitForResult(); | 7604 rv = callback.WaitForResult(); |
7600 EXPECT_EQ(OK, rv); | 7605 EXPECT_THAT(rv, IsOk()); |
7601 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7606 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7602 | 7607 |
7603 ASSERT_TRUE(response); | 7608 ASSERT_TRUE(response); |
7604 | 7609 |
7605 EXPECT_TRUE(response->headers->IsKeepAlive()); | 7610 EXPECT_TRUE(response->headers->IsKeepAlive()); |
7606 EXPECT_EQ(200, response->headers->response_code()); | 7611 EXPECT_EQ(200, response->headers->response_code()); |
7607 EXPECT_EQ(100, response->headers->GetContentLength()); | 7612 EXPECT_EQ(100, response->headers->GetContentLength()); |
7608 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 7613 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
7609 | 7614 |
7610 LoadTimingInfo load_timing_info; | 7615 LoadTimingInfo load_timing_info; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7645 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7650 session_deps_.socket_factory->AddSocketDataProvider(&data); |
7646 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 7651 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
7647 | 7652 |
7648 TestCompletionCallback callback; | 7653 TestCompletionCallback callback; |
7649 | 7654 |
7650 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7655 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7651 std::unique_ptr<HttpTransaction> trans( | 7656 std::unique_ptr<HttpTransaction> trans( |
7652 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7657 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
7653 | 7658 |
7654 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7659 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7655 EXPECT_EQ(ERR_IO_PENDING, rv); | 7660 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7656 | 7661 |
7657 rv = callback.WaitForResult(); | 7662 rv = callback.WaitForResult(); |
7658 EXPECT_EQ(OK, rv); | 7663 EXPECT_THAT(rv, IsOk()); |
7659 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7664 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7660 | 7665 |
7661 ASSERT_TRUE(response); | 7666 ASSERT_TRUE(response); |
7662 | 7667 |
7663 EXPECT_EQ(302, response->headers->response_code()); | 7668 EXPECT_EQ(302, response->headers->response_code()); |
7664 std::string url; | 7669 std::string url; |
7665 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 7670 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
7666 EXPECT_EQ("http://login.example.com/", url); | 7671 EXPECT_EQ("http://login.example.com/", url); |
7667 | 7672 |
7668 // In the case of redirects from proxies, HttpNetworkTransaction returns | 7673 // In the case of redirects from proxies, HttpNetworkTransaction returns |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7726 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7731 session_deps_.socket_factory->AddSocketDataProvider(&data); |
7727 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 7732 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
7728 | 7733 |
7729 TestCompletionCallback callback; | 7734 TestCompletionCallback callback; |
7730 | 7735 |
7731 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7736 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7732 std::unique_ptr<HttpTransaction> trans( | 7737 std::unique_ptr<HttpTransaction> trans( |
7733 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7738 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
7734 | 7739 |
7735 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7740 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7736 EXPECT_EQ(ERR_IO_PENDING, rv); | 7741 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7737 | 7742 |
7738 rv = callback.WaitForResult(); | 7743 rv = callback.WaitForResult(); |
7739 EXPECT_EQ(OK, rv); | 7744 EXPECT_THAT(rv, IsOk()); |
7740 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7745 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7741 | 7746 |
7742 ASSERT_TRUE(response); | 7747 ASSERT_TRUE(response); |
7743 | 7748 |
7744 EXPECT_EQ(302, response->headers->response_code()); | 7749 EXPECT_EQ(302, response->headers->response_code()); |
7745 std::string url; | 7750 std::string url; |
7746 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 7751 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
7747 EXPECT_EQ("http://login.example.com/", url); | 7752 EXPECT_EQ("http://login.example.com/", url); |
7748 } | 7753 } |
7749 | 7754 |
(...skipping 27 matching lines...) Expand all Loading... |
7777 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7782 session_deps_.socket_factory->AddSocketDataProvider(&data); |
7778 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 7783 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
7779 | 7784 |
7780 TestCompletionCallback callback; | 7785 TestCompletionCallback callback; |
7781 | 7786 |
7782 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7787 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7783 std::unique_ptr<HttpTransaction> trans( | 7788 std::unique_ptr<HttpTransaction> trans( |
7784 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7789 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
7785 | 7790 |
7786 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7791 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7787 EXPECT_EQ(ERR_IO_PENDING, rv); | 7792 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7788 | 7793 |
7789 rv = callback.WaitForResult(); | 7794 rv = callback.WaitForResult(); |
7790 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 7795 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
7791 | 7796 |
7792 // TODO(juliatuttle): Anything else to check here? | 7797 // TODO(juliatuttle): Anything else to check here? |
7793 } | 7798 } |
7794 | 7799 |
7795 // Test that a SPDY proxy's response to a CONNECT request is filtered. | 7800 // Test that a SPDY proxy's response to a CONNECT request is filtered. |
7796 TEST_P(HttpNetworkTransactionTest, | 7801 TEST_P(HttpNetworkTransactionTest, |
7797 ErrorResponseToHttpsConnectViaSpdyProxy) { | 7802 ErrorResponseToHttpsConnectViaSpdyProxy) { |
7798 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 7803 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
7799 | 7804 |
7800 HttpRequestInfo request; | 7805 HttpRequestInfo request; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7833 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7838 session_deps_.socket_factory->AddSocketDataProvider(&data); |
7834 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 7839 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
7835 | 7840 |
7836 TestCompletionCallback callback; | 7841 TestCompletionCallback callback; |
7837 | 7842 |
7838 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7843 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7839 std::unique_ptr<HttpTransaction> trans( | 7844 std::unique_ptr<HttpTransaction> trans( |
7840 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7845 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
7841 | 7846 |
7842 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7847 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7843 EXPECT_EQ(ERR_IO_PENDING, rv); | 7848 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7844 | 7849 |
7845 rv = callback.WaitForResult(); | 7850 rv = callback.WaitForResult(); |
7846 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 7851 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
7847 | 7852 |
7848 // TODO(juliatuttle): Anything else to check here? | 7853 // TODO(juliatuttle): Anything else to check here? |
7849 } | 7854 } |
7850 | 7855 |
7851 // Test the request-challenge-retry sequence for basic auth, through | 7856 // Test the request-challenge-retry sequence for basic auth, through |
7852 // a SPDY proxy over a single SPDY session. | 7857 // a SPDY proxy over a single SPDY session. |
7853 TEST_P(HttpNetworkTransactionTest, BasicAuthSpdyProxy) { | 7858 TEST_P(HttpNetworkTransactionTest, BasicAuthSpdyProxy) { |
7854 HttpRequestInfo request; | 7859 HttpRequestInfo request; |
7855 request.method = "GET"; | 7860 request.method = "GET"; |
7856 request.url = GURL("https://www.example.org/"); | 7861 request.url = GURL("https://www.example.org/"); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7931 // Vanilla SSL to the server | 7936 // Vanilla SSL to the server |
7932 SSLSocketDataProvider server(ASYNC, OK); | 7937 SSLSocketDataProvider server(ASYNC, OK); |
7933 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); | 7938 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); |
7934 | 7939 |
7935 TestCompletionCallback callback1; | 7940 TestCompletionCallback callback1; |
7936 | 7941 |
7937 std::unique_ptr<HttpTransaction> trans( | 7942 std::unique_ptr<HttpTransaction> trans( |
7938 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7943 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
7939 | 7944 |
7940 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 7945 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
7941 EXPECT_EQ(ERR_IO_PENDING, rv); | 7946 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7942 | 7947 |
7943 rv = callback1.WaitForResult(); | 7948 rv = callback1.WaitForResult(); |
7944 EXPECT_EQ(OK, rv); | 7949 EXPECT_THAT(rv, IsOk()); |
7945 TestNetLogEntry::List entries; | 7950 TestNetLogEntry::List entries; |
7946 log.GetEntries(&entries); | 7951 log.GetEntries(&entries); |
7947 size_t pos = ExpectLogContainsSomewhere( | 7952 size_t pos = ExpectLogContainsSomewhere( |
7948 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 7953 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
7949 NetLog::PHASE_NONE); | 7954 NetLog::PHASE_NONE); |
7950 ExpectLogContainsSomewhere( | 7955 ExpectLogContainsSomewhere( |
7951 entries, pos, | 7956 entries, pos, |
7952 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 7957 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
7953 NetLog::PHASE_NONE); | 7958 NetLog::PHASE_NONE); |
7954 | 7959 |
7955 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7960 const HttpResponseInfo* response = trans->GetResponseInfo(); |
7956 ASSERT_TRUE(response); | 7961 ASSERT_TRUE(response); |
7957 ASSERT_TRUE(response->headers); | 7962 ASSERT_TRUE(response->headers); |
7958 EXPECT_EQ(407, response->headers->response_code()); | 7963 EXPECT_EQ(407, response->headers->response_code()); |
7959 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 7964 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
7960 EXPECT_TRUE(response->auth_challenge); | 7965 EXPECT_TRUE(response->auth_challenge); |
7961 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); | 7966 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); |
7962 | 7967 |
7963 TestCompletionCallback callback2; | 7968 TestCompletionCallback callback2; |
7964 | 7969 |
7965 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), | 7970 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), |
7966 callback2.callback()); | 7971 callback2.callback()); |
7967 EXPECT_EQ(ERR_IO_PENDING, rv); | 7972 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
7968 | 7973 |
7969 rv = callback2.WaitForResult(); | 7974 rv = callback2.WaitForResult(); |
7970 EXPECT_EQ(OK, rv); | 7975 EXPECT_THAT(rv, IsOk()); |
7971 | 7976 |
7972 response = trans->GetResponseInfo(); | 7977 response = trans->GetResponseInfo(); |
7973 ASSERT_TRUE(response); | 7978 ASSERT_TRUE(response); |
7974 | 7979 |
7975 EXPECT_TRUE(response->headers->IsKeepAlive()); | 7980 EXPECT_TRUE(response->headers->IsKeepAlive()); |
7976 EXPECT_EQ(200, response->headers->response_code()); | 7981 EXPECT_EQ(200, response->headers->response_code()); |
7977 EXPECT_EQ(5, response->headers->GetContentLength()); | 7982 EXPECT_EQ(5, response->headers->GetContentLength()); |
7978 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 7983 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
7979 | 7984 |
7980 // The password prompt info should not be set. | 7985 // The password prompt info should not be set. |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8047 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8052 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
8048 // Negotiate SPDY to the proxy | 8053 // Negotiate SPDY to the proxy |
8049 SSLSocketDataProvider proxy(ASYNC, OK); | 8054 SSLSocketDataProvider proxy(ASYNC, OK); |
8050 proxy.SetNextProto(GetProtocol()); | 8055 proxy.SetNextProto(GetProtocol()); |
8051 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 8056 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
8052 | 8057 |
8053 std::unique_ptr<HttpTransaction> trans( | 8058 std::unique_ptr<HttpTransaction> trans( |
8054 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8059 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8055 TestCompletionCallback callback; | 8060 TestCompletionCallback callback; |
8056 int rv = trans->Start(&request, callback.callback(), log.bound()); | 8061 int rv = trans->Start(&request, callback.callback(), log.bound()); |
8057 EXPECT_EQ(ERR_IO_PENDING, rv); | 8062 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8058 | 8063 |
8059 rv = callback.WaitForResult(); | 8064 rv = callback.WaitForResult(); |
8060 EXPECT_EQ(OK, rv); | 8065 EXPECT_THAT(rv, IsOk()); |
8061 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8066 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8062 | 8067 |
8063 std::unique_ptr<HttpTransaction> push_trans( | 8068 std::unique_ptr<HttpTransaction> push_trans( |
8064 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8069 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8065 rv = push_trans->Start(&push_request, callback.callback(), log.bound()); | 8070 rv = push_trans->Start(&push_request, callback.callback(), log.bound()); |
8066 EXPECT_EQ(ERR_IO_PENDING, rv); | 8071 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8067 | 8072 |
8068 rv = callback.WaitForResult(); | 8073 rv = callback.WaitForResult(); |
8069 EXPECT_EQ(OK, rv); | 8074 EXPECT_THAT(rv, IsOk()); |
8070 const HttpResponseInfo* push_response = push_trans->GetResponseInfo(); | 8075 const HttpResponseInfo* push_response = push_trans->GetResponseInfo(); |
8071 | 8076 |
8072 ASSERT_TRUE(response); | 8077 ASSERT_TRUE(response); |
8073 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8078 EXPECT_TRUE(response->headers->IsKeepAlive()); |
8074 | 8079 |
8075 EXPECT_EQ(200, response->headers->response_code()); | 8080 EXPECT_EQ(200, response->headers->response_code()); |
8076 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 8081 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
8077 | 8082 |
8078 std::string response_data; | 8083 std::string response_data; |
8079 rv = ReadTransaction(trans.get(), &response_data); | 8084 rv = ReadTransaction(trans.get(), &response_data); |
8080 EXPECT_EQ(OK, rv); | 8085 EXPECT_THAT(rv, IsOk()); |
8081 EXPECT_EQ("hello!", response_data); | 8086 EXPECT_EQ("hello!", response_data); |
8082 | 8087 |
8083 LoadTimingInfo load_timing_info; | 8088 LoadTimingInfo load_timing_info; |
8084 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 8089 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
8085 TestLoadTimingNotReusedWithPac(load_timing_info, | 8090 TestLoadTimingNotReusedWithPac(load_timing_info, |
8086 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 8091 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
8087 | 8092 |
8088 // Verify the pushed stream. | 8093 // Verify the pushed stream. |
8089 EXPECT_TRUE(push_response->headers); | 8094 EXPECT_TRUE(push_response->headers); |
8090 EXPECT_EQ(200, push_response->headers->response_code()); | 8095 EXPECT_EQ(200, push_response->headers->response_code()); |
8091 | 8096 |
8092 rv = ReadTransaction(push_trans.get(), &response_data); | 8097 rv = ReadTransaction(push_trans.get(), &response_data); |
8093 EXPECT_EQ(OK, rv); | 8098 EXPECT_THAT(rv, IsOk()); |
8094 EXPECT_EQ("pushed", response_data); | 8099 EXPECT_EQ("pushed", response_data); |
8095 | 8100 |
8096 LoadTimingInfo push_load_timing_info; | 8101 LoadTimingInfo push_load_timing_info; |
8097 EXPECT_TRUE(push_trans->GetLoadTimingInfo(&push_load_timing_info)); | 8102 EXPECT_TRUE(push_trans->GetLoadTimingInfo(&push_load_timing_info)); |
8098 TestLoadTimingReusedWithPac(push_load_timing_info); | 8103 TestLoadTimingReusedWithPac(push_load_timing_info); |
8099 // The transactions should share a socket ID, despite being for different | 8104 // The transactions should share a socket ID, despite being for different |
8100 // origins. | 8105 // origins. |
8101 EXPECT_EQ(load_timing_info.socket_log_id, | 8106 EXPECT_EQ(load_timing_info.socket_log_id, |
8102 push_load_timing_info.socket_log_id); | 8107 push_load_timing_info.socket_log_id); |
8103 | 8108 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8158 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8163 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
8159 // Negotiate SPDY to the proxy | 8164 // Negotiate SPDY to the proxy |
8160 SSLSocketDataProvider proxy(ASYNC, OK); | 8165 SSLSocketDataProvider proxy(ASYNC, OK); |
8161 proxy.SetNextProto(GetProtocol()); | 8166 proxy.SetNextProto(GetProtocol()); |
8162 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 8167 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
8163 | 8168 |
8164 std::unique_ptr<HttpTransaction> trans( | 8169 std::unique_ptr<HttpTransaction> trans( |
8165 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8170 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8166 TestCompletionCallback callback; | 8171 TestCompletionCallback callback; |
8167 int rv = trans->Start(&request, callback.callback(), log.bound()); | 8172 int rv = trans->Start(&request, callback.callback(), log.bound()); |
8168 EXPECT_EQ(ERR_IO_PENDING, rv); | 8173 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8169 | 8174 |
8170 rv = callback.WaitForResult(); | 8175 rv = callback.WaitForResult(); |
8171 EXPECT_EQ(OK, rv); | 8176 EXPECT_THAT(rv, IsOk()); |
8172 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8177 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8173 | 8178 |
8174 ASSERT_TRUE(response); | 8179 ASSERT_TRUE(response); |
8175 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8180 EXPECT_TRUE(response->headers->IsKeepAlive()); |
8176 | 8181 |
8177 EXPECT_EQ(200, response->headers->response_code()); | 8182 EXPECT_EQ(200, response->headers->response_code()); |
8178 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 8183 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
8179 | 8184 |
8180 std::string response_data; | 8185 std::string response_data; |
8181 rv = ReadTransaction(trans.get(), &response_data); | 8186 rv = ReadTransaction(trans.get(), &response_data); |
8182 EXPECT_EQ(OK, rv); | 8187 EXPECT_THAT(rv, IsOk()); |
8183 EXPECT_EQ("hello!", response_data); | 8188 EXPECT_EQ("hello!", response_data); |
8184 | 8189 |
8185 trans.reset(); | 8190 trans.reset(); |
8186 session->CloseAllConnections(); | 8191 session->CloseAllConnections(); |
8187 } | 8192 } |
8188 | 8193 |
8189 // Test that an explicitly trusted SPDY proxy can push same-origin HTTPS | 8194 // Test that an explicitly trusted SPDY proxy can push same-origin HTTPS |
8190 // resources. | 8195 // resources. |
8191 TEST_P(HttpNetworkTransactionTest, SameOriginProxyPushCorrectness) { | 8196 TEST_P(HttpNetworkTransactionTest, SameOriginProxyPushCorrectness) { |
8192 // Configure the proxy delegate to allow cross-origin SPDY pushes. | 8197 // Configure the proxy delegate to allow cross-origin SPDY pushes. |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8244 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8249 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
8245 // Negotiate SPDY to the proxy | 8250 // Negotiate SPDY to the proxy |
8246 SSLSocketDataProvider proxy(ASYNC, OK); | 8251 SSLSocketDataProvider proxy(ASYNC, OK); |
8247 proxy.SetNextProto(GetProtocol()); | 8252 proxy.SetNextProto(GetProtocol()); |
8248 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 8253 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
8249 | 8254 |
8250 std::unique_ptr<HttpTransaction> trans( | 8255 std::unique_ptr<HttpTransaction> trans( |
8251 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8256 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8252 TestCompletionCallback callback; | 8257 TestCompletionCallback callback; |
8253 int rv = trans->Start(&request, callback.callback(), log.bound()); | 8258 int rv = trans->Start(&request, callback.callback(), log.bound()); |
8254 EXPECT_EQ(ERR_IO_PENDING, rv); | 8259 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8255 | 8260 |
8256 rv = callback.WaitForResult(); | 8261 rv = callback.WaitForResult(); |
8257 EXPECT_EQ(OK, rv); | 8262 EXPECT_THAT(rv, IsOk()); |
8258 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8263 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8259 | 8264 |
8260 ASSERT_TRUE(response); | 8265 ASSERT_TRUE(response); |
8261 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8266 EXPECT_TRUE(response->headers->IsKeepAlive()); |
8262 | 8267 |
8263 EXPECT_EQ(200, response->headers->response_code()); | 8268 EXPECT_EQ(200, response->headers->response_code()); |
8264 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 8269 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
8265 | 8270 |
8266 std::string response_data; | 8271 std::string response_data; |
8267 rv = ReadTransaction(trans.get(), &response_data); | 8272 rv = ReadTransaction(trans.get(), &response_data); |
8268 EXPECT_EQ(OK, rv); | 8273 EXPECT_THAT(rv, IsOk()); |
8269 EXPECT_EQ("hello!", response_data); | 8274 EXPECT_EQ("hello!", response_data); |
8270 | 8275 |
8271 trans.reset(); | 8276 trans.reset(); |
8272 session->CloseAllConnections(); | 8277 session->CloseAllConnections(); |
8273 } | 8278 } |
8274 | 8279 |
8275 // Test HTTPS connections to a site with a bad certificate, going through an | 8280 // Test HTTPS connections to a site with a bad certificate, going through an |
8276 // HTTPS proxy | 8281 // HTTPS proxy |
8277 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaHttpsProxy) { | 8282 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaHttpsProxy) { |
8278 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 8283 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8330 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8335 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8331 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8336 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
8332 | 8337 |
8333 TestCompletionCallback callback; | 8338 TestCompletionCallback callback; |
8334 | 8339 |
8335 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8340 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8336 std::unique_ptr<HttpTransaction> trans( | 8341 std::unique_ptr<HttpTransaction> trans( |
8337 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8342 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8338 | 8343 |
8339 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8344 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8340 EXPECT_EQ(ERR_IO_PENDING, rv); | 8345 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8341 | 8346 |
8342 rv = callback.WaitForResult(); | 8347 rv = callback.WaitForResult(); |
8343 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, rv); | 8348 EXPECT_THAT(rv, IsError(ERR_CERT_AUTHORITY_INVALID)); |
8344 | 8349 |
8345 rv = trans->RestartIgnoringLastError(callback.callback()); | 8350 rv = trans->RestartIgnoringLastError(callback.callback()); |
8346 EXPECT_EQ(ERR_IO_PENDING, rv); | 8351 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8347 | 8352 |
8348 rv = callback.WaitForResult(); | 8353 rv = callback.WaitForResult(); |
8349 EXPECT_EQ(OK, rv); | 8354 EXPECT_THAT(rv, IsOk()); |
8350 | 8355 |
8351 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8356 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8352 | 8357 |
8353 ASSERT_TRUE(response); | 8358 ASSERT_TRUE(response); |
8354 EXPECT_EQ(100, response->headers->GetContentLength()); | 8359 EXPECT_EQ(100, response->headers->GetContentLength()); |
8355 } | 8360 } |
8356 | 8361 |
8357 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgent) { | 8362 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgent) { |
8358 HttpRequestInfo request; | 8363 HttpRequestInfo request; |
8359 request.method = "GET"; | 8364 request.method = "GET"; |
(...skipping 21 matching lines...) Expand all Loading... |
8381 MockRead(SYNCHRONOUS, OK), | 8386 MockRead(SYNCHRONOUS, OK), |
8382 }; | 8387 }; |
8383 | 8388 |
8384 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8389 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8385 data_writes, arraysize(data_writes)); | 8390 data_writes, arraysize(data_writes)); |
8386 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8391 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8387 | 8392 |
8388 TestCompletionCallback callback; | 8393 TestCompletionCallback callback; |
8389 | 8394 |
8390 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8395 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8391 EXPECT_EQ(ERR_IO_PENDING, rv); | 8396 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8392 | 8397 |
8393 rv = callback.WaitForResult(); | 8398 rv = callback.WaitForResult(); |
8394 EXPECT_EQ(OK, rv); | 8399 EXPECT_THAT(rv, IsOk()); |
8395 } | 8400 } |
8396 | 8401 |
8397 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgentOverTunnel) { | 8402 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgentOverTunnel) { |
8398 HttpRequestInfo request; | 8403 HttpRequestInfo request; |
8399 request.method = "GET"; | 8404 request.method = "GET"; |
8400 request.url = GURL("https://www.example.org/"); | 8405 request.url = GURL("https://www.example.org/"); |
8401 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, | 8406 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, |
8402 "Chromium Ultra Awesome X Edition"); | 8407 "Chromium Ultra Awesome X Edition"); |
8403 | 8408 |
8404 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 8409 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
(...skipping 15 matching lines...) Expand all Loading... |
8420 MockRead("Proxy-Connection: close\r\n\r\n"), | 8425 MockRead("Proxy-Connection: close\r\n\r\n"), |
8421 }; | 8426 }; |
8422 | 8427 |
8423 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8428 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8424 data_writes, arraysize(data_writes)); | 8429 data_writes, arraysize(data_writes)); |
8425 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8430 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8426 | 8431 |
8427 TestCompletionCallback callback; | 8432 TestCompletionCallback callback; |
8428 | 8433 |
8429 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8434 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8430 EXPECT_EQ(ERR_IO_PENDING, rv); | 8435 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8431 | 8436 |
8432 rv = callback.WaitForResult(); | 8437 rv = callback.WaitForResult(); |
8433 EXPECT_EQ(OK, rv); | 8438 EXPECT_THAT(rv, IsOk()); |
8434 } | 8439 } |
8435 | 8440 |
8436 TEST_P(HttpNetworkTransactionTest, BuildRequest_Referer) { | 8441 TEST_P(HttpNetworkTransactionTest, BuildRequest_Referer) { |
8437 HttpRequestInfo request; | 8442 HttpRequestInfo request; |
8438 request.method = "GET"; | 8443 request.method = "GET"; |
8439 request.url = GURL("http://www.example.org/"); | 8444 request.url = GURL("http://www.example.org/"); |
8440 request.load_flags = 0; | 8445 request.load_flags = 0; |
8441 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, | 8446 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, |
8442 "http://the.previous.site.com/"); | 8447 "http://the.previous.site.com/"); |
8443 | 8448 |
(...skipping 17 matching lines...) Expand all Loading... |
8461 MockRead(SYNCHRONOUS, OK), | 8466 MockRead(SYNCHRONOUS, OK), |
8462 }; | 8467 }; |
8463 | 8468 |
8464 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8469 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8465 data_writes, arraysize(data_writes)); | 8470 data_writes, arraysize(data_writes)); |
8466 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8471 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8467 | 8472 |
8468 TestCompletionCallback callback; | 8473 TestCompletionCallback callback; |
8469 | 8474 |
8470 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8475 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8471 EXPECT_EQ(ERR_IO_PENDING, rv); | 8476 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8472 | 8477 |
8473 rv = callback.WaitForResult(); | 8478 rv = callback.WaitForResult(); |
8474 EXPECT_EQ(OK, rv); | 8479 EXPECT_THAT(rv, IsOk()); |
8475 } | 8480 } |
8476 | 8481 |
8477 TEST_P(HttpNetworkTransactionTest, BuildRequest_PostContentLengthZero) { | 8482 TEST_P(HttpNetworkTransactionTest, BuildRequest_PostContentLengthZero) { |
8478 HttpRequestInfo request; | 8483 HttpRequestInfo request; |
8479 request.method = "POST"; | 8484 request.method = "POST"; |
8480 request.url = GURL("http://www.example.org/"); | 8485 request.url = GURL("http://www.example.org/"); |
8481 | 8486 |
8482 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8487 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8483 std::unique_ptr<HttpTransaction> trans( | 8488 std::unique_ptr<HttpTransaction> trans( |
8484 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8489 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
(...skipping 14 matching lines...) Expand all Loading... |
8499 MockRead(SYNCHRONOUS, OK), | 8504 MockRead(SYNCHRONOUS, OK), |
8500 }; | 8505 }; |
8501 | 8506 |
8502 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8507 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8503 data_writes, arraysize(data_writes)); | 8508 data_writes, arraysize(data_writes)); |
8504 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8509 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8505 | 8510 |
8506 TestCompletionCallback callback; | 8511 TestCompletionCallback callback; |
8507 | 8512 |
8508 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8513 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8509 EXPECT_EQ(ERR_IO_PENDING, rv); | 8514 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8510 | 8515 |
8511 rv = callback.WaitForResult(); | 8516 rv = callback.WaitForResult(); |
8512 EXPECT_EQ(OK, rv); | 8517 EXPECT_THAT(rv, IsOk()); |
8513 } | 8518 } |
8514 | 8519 |
8515 TEST_P(HttpNetworkTransactionTest, BuildRequest_PutContentLengthZero) { | 8520 TEST_P(HttpNetworkTransactionTest, BuildRequest_PutContentLengthZero) { |
8516 HttpRequestInfo request; | 8521 HttpRequestInfo request; |
8517 request.method = "PUT"; | 8522 request.method = "PUT"; |
8518 request.url = GURL("http://www.example.org/"); | 8523 request.url = GURL("http://www.example.org/"); |
8519 | 8524 |
8520 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8525 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8521 std::unique_ptr<HttpTransaction> trans( | 8526 std::unique_ptr<HttpTransaction> trans( |
8522 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8527 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
(...skipping 14 matching lines...) Expand all Loading... |
8537 MockRead(SYNCHRONOUS, OK), | 8542 MockRead(SYNCHRONOUS, OK), |
8538 }; | 8543 }; |
8539 | 8544 |
8540 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8545 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8541 data_writes, arraysize(data_writes)); | 8546 data_writes, arraysize(data_writes)); |
8542 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8547 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8543 | 8548 |
8544 TestCompletionCallback callback; | 8549 TestCompletionCallback callback; |
8545 | 8550 |
8546 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8551 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8547 EXPECT_EQ(ERR_IO_PENDING, rv); | 8552 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8548 | 8553 |
8549 rv = callback.WaitForResult(); | 8554 rv = callback.WaitForResult(); |
8550 EXPECT_EQ(OK, rv); | 8555 EXPECT_THAT(rv, IsOk()); |
8551 } | 8556 } |
8552 | 8557 |
8553 TEST_P(HttpNetworkTransactionTest, BuildRequest_HeadContentLengthZero) { | 8558 TEST_P(HttpNetworkTransactionTest, BuildRequest_HeadContentLengthZero) { |
8554 HttpRequestInfo request; | 8559 HttpRequestInfo request; |
8555 request.method = "HEAD"; | 8560 request.method = "HEAD"; |
8556 request.url = GURL("http://www.example.org/"); | 8561 request.url = GURL("http://www.example.org/"); |
8557 | 8562 |
8558 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8563 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8559 std::unique_ptr<HttpTransaction> trans( | 8564 std::unique_ptr<HttpTransaction> trans( |
8560 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8565 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
(...skipping 12 matching lines...) Expand all Loading... |
8573 MockRead(SYNCHRONOUS, OK), | 8578 MockRead(SYNCHRONOUS, OK), |
8574 }; | 8579 }; |
8575 | 8580 |
8576 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8581 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8577 data_writes, arraysize(data_writes)); | 8582 data_writes, arraysize(data_writes)); |
8578 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8583 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8579 | 8584 |
8580 TestCompletionCallback callback; | 8585 TestCompletionCallback callback; |
8581 | 8586 |
8582 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8587 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8583 EXPECT_EQ(ERR_IO_PENDING, rv); | 8588 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8584 | 8589 |
8585 rv = callback.WaitForResult(); | 8590 rv = callback.WaitForResult(); |
8586 EXPECT_EQ(OK, rv); | 8591 EXPECT_THAT(rv, IsOk()); |
8587 } | 8592 } |
8588 | 8593 |
8589 TEST_P(HttpNetworkTransactionTest, BuildRequest_CacheControlNoCache) { | 8594 TEST_P(HttpNetworkTransactionTest, BuildRequest_CacheControlNoCache) { |
8590 HttpRequestInfo request; | 8595 HttpRequestInfo request; |
8591 request.method = "GET"; | 8596 request.method = "GET"; |
8592 request.url = GURL("http://www.example.org/"); | 8597 request.url = GURL("http://www.example.org/"); |
8593 request.load_flags = LOAD_BYPASS_CACHE; | 8598 request.load_flags = LOAD_BYPASS_CACHE; |
8594 | 8599 |
8595 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8600 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8596 std::unique_ptr<HttpTransaction> trans( | 8601 std::unique_ptr<HttpTransaction> trans( |
(...skipping 16 matching lines...) Expand all Loading... |
8613 MockRead(SYNCHRONOUS, OK), | 8618 MockRead(SYNCHRONOUS, OK), |
8614 }; | 8619 }; |
8615 | 8620 |
8616 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8621 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8617 data_writes, arraysize(data_writes)); | 8622 data_writes, arraysize(data_writes)); |
8618 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8623 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8619 | 8624 |
8620 TestCompletionCallback callback; | 8625 TestCompletionCallback callback; |
8621 | 8626 |
8622 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8627 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8623 EXPECT_EQ(ERR_IO_PENDING, rv); | 8628 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8624 | 8629 |
8625 rv = callback.WaitForResult(); | 8630 rv = callback.WaitForResult(); |
8626 EXPECT_EQ(OK, rv); | 8631 EXPECT_THAT(rv, IsOk()); |
8627 } | 8632 } |
8628 | 8633 |
8629 TEST_P(HttpNetworkTransactionTest, | 8634 TEST_P(HttpNetworkTransactionTest, |
8630 BuildRequest_CacheControlValidateCache) { | 8635 BuildRequest_CacheControlValidateCache) { |
8631 HttpRequestInfo request; | 8636 HttpRequestInfo request; |
8632 request.method = "GET"; | 8637 request.method = "GET"; |
8633 request.url = GURL("http://www.example.org/"); | 8638 request.url = GURL("http://www.example.org/"); |
8634 request.load_flags = LOAD_VALIDATE_CACHE; | 8639 request.load_flags = LOAD_VALIDATE_CACHE; |
8635 | 8640 |
8636 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8641 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
(...skipping 16 matching lines...) Expand all Loading... |
8653 MockRead(SYNCHRONOUS, OK), | 8658 MockRead(SYNCHRONOUS, OK), |
8654 }; | 8659 }; |
8655 | 8660 |
8656 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8661 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8657 data_writes, arraysize(data_writes)); | 8662 data_writes, arraysize(data_writes)); |
8658 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8663 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8659 | 8664 |
8660 TestCompletionCallback callback; | 8665 TestCompletionCallback callback; |
8661 | 8666 |
8662 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8667 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8663 EXPECT_EQ(ERR_IO_PENDING, rv); | 8668 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8664 | 8669 |
8665 rv = callback.WaitForResult(); | 8670 rv = callback.WaitForResult(); |
8666 EXPECT_EQ(OK, rv); | 8671 EXPECT_THAT(rv, IsOk()); |
8667 } | 8672 } |
8668 | 8673 |
8669 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeaders) { | 8674 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeaders) { |
8670 HttpRequestInfo request; | 8675 HttpRequestInfo request; |
8671 request.method = "GET"; | 8676 request.method = "GET"; |
8672 request.url = GURL("http://www.example.org/"); | 8677 request.url = GURL("http://www.example.org/"); |
8673 request.extra_headers.SetHeader("FooHeader", "Bar"); | 8678 request.extra_headers.SetHeader("FooHeader", "Bar"); |
8674 | 8679 |
8675 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8680 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8676 std::unique_ptr<HttpTransaction> trans( | 8681 std::unique_ptr<HttpTransaction> trans( |
(...skipping 15 matching lines...) Expand all Loading... |
8692 MockRead(SYNCHRONOUS, OK), | 8697 MockRead(SYNCHRONOUS, OK), |
8693 }; | 8698 }; |
8694 | 8699 |
8695 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8700 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8696 data_writes, arraysize(data_writes)); | 8701 data_writes, arraysize(data_writes)); |
8697 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8702 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8698 | 8703 |
8699 TestCompletionCallback callback; | 8704 TestCompletionCallback callback; |
8700 | 8705 |
8701 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8706 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8702 EXPECT_EQ(ERR_IO_PENDING, rv); | 8707 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8703 | 8708 |
8704 rv = callback.WaitForResult(); | 8709 rv = callback.WaitForResult(); |
8705 EXPECT_EQ(OK, rv); | 8710 EXPECT_THAT(rv, IsOk()); |
8706 } | 8711 } |
8707 | 8712 |
8708 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeadersStripped) { | 8713 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeadersStripped) { |
8709 HttpRequestInfo request; | 8714 HttpRequestInfo request; |
8710 request.method = "GET"; | 8715 request.method = "GET"; |
8711 request.url = GURL("http://www.example.org/"); | 8716 request.url = GURL("http://www.example.org/"); |
8712 request.extra_headers.SetHeader("referer", "www.foo.com"); | 8717 request.extra_headers.SetHeader("referer", "www.foo.com"); |
8713 request.extra_headers.SetHeader("hEllo", "Kitty"); | 8718 request.extra_headers.SetHeader("hEllo", "Kitty"); |
8714 request.extra_headers.SetHeader("FoO", "bar"); | 8719 request.extra_headers.SetHeader("FoO", "bar"); |
8715 | 8720 |
(...skipping 19 matching lines...) Expand all Loading... |
8735 MockRead(SYNCHRONOUS, OK), | 8740 MockRead(SYNCHRONOUS, OK), |
8736 }; | 8741 }; |
8737 | 8742 |
8738 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8743 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8739 data_writes, arraysize(data_writes)); | 8744 data_writes, arraysize(data_writes)); |
8740 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8745 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8741 | 8746 |
8742 TestCompletionCallback callback; | 8747 TestCompletionCallback callback; |
8743 | 8748 |
8744 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8749 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8745 EXPECT_EQ(ERR_IO_PENDING, rv); | 8750 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8746 | 8751 |
8747 rv = callback.WaitForResult(); | 8752 rv = callback.WaitForResult(); |
8748 EXPECT_EQ(OK, rv); | 8753 EXPECT_THAT(rv, IsOk()); |
8749 } | 8754 } |
8750 | 8755 |
8751 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { | 8756 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { |
8752 HttpRequestInfo request; | 8757 HttpRequestInfo request; |
8753 request.method = "GET"; | 8758 request.method = "GET"; |
8754 request.url = GURL("http://www.example.org/"); | 8759 request.url = GURL("http://www.example.org/"); |
8755 request.load_flags = 0; | 8760 request.load_flags = 0; |
8756 | 8761 |
8757 session_deps_.proxy_service = | 8762 session_deps_.proxy_service = |
8758 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080"); | 8763 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080"); |
(...skipping 22 matching lines...) Expand all Loading... |
8781 MockRead(SYNCHRONOUS, OK) | 8786 MockRead(SYNCHRONOUS, OK) |
8782 }; | 8787 }; |
8783 | 8788 |
8784 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8789 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8785 data_writes, arraysize(data_writes)); | 8790 data_writes, arraysize(data_writes)); |
8786 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8791 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8787 | 8792 |
8788 TestCompletionCallback callback; | 8793 TestCompletionCallback callback; |
8789 | 8794 |
8790 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8795 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8791 EXPECT_EQ(ERR_IO_PENDING, rv); | 8796 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8792 | 8797 |
8793 rv = callback.WaitForResult(); | 8798 rv = callback.WaitForResult(); |
8794 EXPECT_EQ(OK, rv); | 8799 EXPECT_THAT(rv, IsOk()); |
8795 | 8800 |
8796 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8801 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8797 ASSERT_TRUE(response); | 8802 ASSERT_TRUE(response); |
8798 | 8803 |
8799 LoadTimingInfo load_timing_info; | 8804 LoadTimingInfo load_timing_info; |
8800 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 8805 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
8801 TestLoadTimingNotReusedWithPac(load_timing_info, | 8806 TestLoadTimingNotReusedWithPac(load_timing_info, |
8802 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 8807 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
8803 | 8808 |
8804 std::string response_text; | 8809 std::string response_text; |
8805 rv = ReadTransaction(trans.get(), &response_text); | 8810 rv = ReadTransaction(trans.get(), &response_text); |
8806 EXPECT_EQ(OK, rv); | 8811 EXPECT_THAT(rv, IsOk()); |
8807 EXPECT_EQ("Payload", response_text); | 8812 EXPECT_EQ("Payload", response_text); |
8808 } | 8813 } |
8809 | 8814 |
8810 TEST_P(HttpNetworkTransactionTest, SOCKS4_SSL_GET) { | 8815 TEST_P(HttpNetworkTransactionTest, SOCKS4_SSL_GET) { |
8811 HttpRequestInfo request; | 8816 HttpRequestInfo request; |
8812 request.method = "GET"; | 8817 request.method = "GET"; |
8813 request.url = GURL("https://www.example.org/"); | 8818 request.url = GURL("https://www.example.org/"); |
8814 request.load_flags = 0; | 8819 request.load_flags = 0; |
8815 | 8820 |
8816 session_deps_.proxy_service = | 8821 session_deps_.proxy_service = |
(...skipping 28 matching lines...) Expand all Loading... |
8845 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8850 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8846 data_writes, arraysize(data_writes)); | 8851 data_writes, arraysize(data_writes)); |
8847 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8852 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8848 | 8853 |
8849 SSLSocketDataProvider ssl(ASYNC, OK); | 8854 SSLSocketDataProvider ssl(ASYNC, OK); |
8850 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8855 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
8851 | 8856 |
8852 TestCompletionCallback callback; | 8857 TestCompletionCallback callback; |
8853 | 8858 |
8854 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8859 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8855 EXPECT_EQ(ERR_IO_PENDING, rv); | 8860 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8856 | 8861 |
8857 rv = callback.WaitForResult(); | 8862 rv = callback.WaitForResult(); |
8858 EXPECT_EQ(OK, rv); | 8863 EXPECT_THAT(rv, IsOk()); |
8859 | 8864 |
8860 LoadTimingInfo load_timing_info; | 8865 LoadTimingInfo load_timing_info; |
8861 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 8866 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
8862 TestLoadTimingNotReusedWithPac(load_timing_info, | 8867 TestLoadTimingNotReusedWithPac(load_timing_info, |
8863 CONNECT_TIMING_HAS_SSL_TIMES); | 8868 CONNECT_TIMING_HAS_SSL_TIMES); |
8864 | 8869 |
8865 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8870 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8866 ASSERT_TRUE(response); | 8871 ASSERT_TRUE(response); |
8867 | 8872 |
8868 std::string response_text; | 8873 std::string response_text; |
8869 rv = ReadTransaction(trans.get(), &response_text); | 8874 rv = ReadTransaction(trans.get(), &response_text); |
8870 EXPECT_EQ(OK, rv); | 8875 EXPECT_THAT(rv, IsOk()); |
8871 EXPECT_EQ("Payload", response_text); | 8876 EXPECT_EQ("Payload", response_text); |
8872 } | 8877 } |
8873 | 8878 |
8874 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET_no_PAC) { | 8879 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET_no_PAC) { |
8875 HttpRequestInfo request; | 8880 HttpRequestInfo request; |
8876 request.method = "GET"; | 8881 request.method = "GET"; |
8877 request.url = GURL("http://www.example.org/"); | 8882 request.url = GURL("http://www.example.org/"); |
8878 request.load_flags = 0; | 8883 request.load_flags = 0; |
8879 | 8884 |
8880 session_deps_.proxy_service = | 8885 session_deps_.proxy_service = |
(...skipping 23 matching lines...) Expand all Loading... |
8904 MockRead(SYNCHRONOUS, OK) | 8909 MockRead(SYNCHRONOUS, OK) |
8905 }; | 8910 }; |
8906 | 8911 |
8907 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8912 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8908 data_writes, arraysize(data_writes)); | 8913 data_writes, arraysize(data_writes)); |
8909 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8914 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8910 | 8915 |
8911 TestCompletionCallback callback; | 8916 TestCompletionCallback callback; |
8912 | 8917 |
8913 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8918 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8914 EXPECT_EQ(ERR_IO_PENDING, rv); | 8919 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8915 | 8920 |
8916 rv = callback.WaitForResult(); | 8921 rv = callback.WaitForResult(); |
8917 EXPECT_EQ(OK, rv); | 8922 EXPECT_THAT(rv, IsOk()); |
8918 | 8923 |
8919 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8924 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8920 ASSERT_TRUE(response); | 8925 ASSERT_TRUE(response); |
8921 | 8926 |
8922 LoadTimingInfo load_timing_info; | 8927 LoadTimingInfo load_timing_info; |
8923 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 8928 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
8924 TestLoadTimingNotReused(load_timing_info, | 8929 TestLoadTimingNotReused(load_timing_info, |
8925 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 8930 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
8926 | 8931 |
8927 std::string response_text; | 8932 std::string response_text; |
8928 rv = ReadTransaction(trans.get(), &response_text); | 8933 rv = ReadTransaction(trans.get(), &response_text); |
8929 EXPECT_EQ(OK, rv); | 8934 EXPECT_THAT(rv, IsOk()); |
8930 EXPECT_EQ("Payload", response_text); | 8935 EXPECT_EQ("Payload", response_text); |
8931 } | 8936 } |
8932 | 8937 |
8933 TEST_P(HttpNetworkTransactionTest, SOCKS5_HTTP_GET) { | 8938 TEST_P(HttpNetworkTransactionTest, SOCKS5_HTTP_GET) { |
8934 HttpRequestInfo request; | 8939 HttpRequestInfo request; |
8935 request.method = "GET"; | 8940 request.method = "GET"; |
8936 request.url = GURL("http://www.example.org/"); | 8941 request.url = GURL("http://www.example.org/"); |
8937 request.load_flags = 0; | 8942 request.load_flags = 0; |
8938 | 8943 |
8939 session_deps_.proxy_service = | 8944 session_deps_.proxy_service = |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8976 MockRead(SYNCHRONOUS, OK) | 8981 MockRead(SYNCHRONOUS, OK) |
8977 }; | 8982 }; |
8978 | 8983 |
8979 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8984 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8980 data_writes, arraysize(data_writes)); | 8985 data_writes, arraysize(data_writes)); |
8981 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8986 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8982 | 8987 |
8983 TestCompletionCallback callback; | 8988 TestCompletionCallback callback; |
8984 | 8989 |
8985 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8990 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8986 EXPECT_EQ(ERR_IO_PENDING, rv); | 8991 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8987 | 8992 |
8988 rv = callback.WaitForResult(); | 8993 rv = callback.WaitForResult(); |
8989 EXPECT_EQ(OK, rv); | 8994 EXPECT_THAT(rv, IsOk()); |
8990 | 8995 |
8991 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8996 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8992 ASSERT_TRUE(response); | 8997 ASSERT_TRUE(response); |
8993 | 8998 |
8994 LoadTimingInfo load_timing_info; | 8999 LoadTimingInfo load_timing_info; |
8995 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 9000 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
8996 TestLoadTimingNotReusedWithPac(load_timing_info, | 9001 TestLoadTimingNotReusedWithPac(load_timing_info, |
8997 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 9002 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
8998 | 9003 |
8999 std::string response_text; | 9004 std::string response_text; |
9000 rv = ReadTransaction(trans.get(), &response_text); | 9005 rv = ReadTransaction(trans.get(), &response_text); |
9001 EXPECT_EQ(OK, rv); | 9006 EXPECT_THAT(rv, IsOk()); |
9002 EXPECT_EQ("Payload", response_text); | 9007 EXPECT_EQ("Payload", response_text); |
9003 } | 9008 } |
9004 | 9009 |
9005 TEST_P(HttpNetworkTransactionTest, SOCKS5_SSL_GET) { | 9010 TEST_P(HttpNetworkTransactionTest, SOCKS5_SSL_GET) { |
9006 HttpRequestInfo request; | 9011 HttpRequestInfo request; |
9007 request.method = "GET"; | 9012 request.method = "GET"; |
9008 request.url = GURL("https://www.example.org/"); | 9013 request.url = GURL("https://www.example.org/"); |
9009 request.load_flags = 0; | 9014 request.load_flags = 0; |
9010 | 9015 |
9011 session_deps_.proxy_service = | 9016 session_deps_.proxy_service = |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9053 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 9058 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
9054 data_writes, arraysize(data_writes)); | 9059 data_writes, arraysize(data_writes)); |
9055 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9060 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9056 | 9061 |
9057 SSLSocketDataProvider ssl(ASYNC, OK); | 9062 SSLSocketDataProvider ssl(ASYNC, OK); |
9058 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 9063 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
9059 | 9064 |
9060 TestCompletionCallback callback; | 9065 TestCompletionCallback callback; |
9061 | 9066 |
9062 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9067 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9063 EXPECT_EQ(ERR_IO_PENDING, rv); | 9068 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9064 | 9069 |
9065 rv = callback.WaitForResult(); | 9070 rv = callback.WaitForResult(); |
9066 EXPECT_EQ(OK, rv); | 9071 EXPECT_THAT(rv, IsOk()); |
9067 | 9072 |
9068 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9073 const HttpResponseInfo* response = trans->GetResponseInfo(); |
9069 ASSERT_TRUE(response); | 9074 ASSERT_TRUE(response); |
9070 | 9075 |
9071 LoadTimingInfo load_timing_info; | 9076 LoadTimingInfo load_timing_info; |
9072 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 9077 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
9073 TestLoadTimingNotReusedWithPac(load_timing_info, | 9078 TestLoadTimingNotReusedWithPac(load_timing_info, |
9074 CONNECT_TIMING_HAS_SSL_TIMES); | 9079 CONNECT_TIMING_HAS_SSL_TIMES); |
9075 | 9080 |
9076 std::string response_text; | 9081 std::string response_text; |
9077 rv = ReadTransaction(trans.get(), &response_text); | 9082 rv = ReadTransaction(trans.get(), &response_text); |
9078 EXPECT_EQ(OK, rv); | 9083 EXPECT_THAT(rv, IsOk()); |
9079 EXPECT_EQ("Payload", response_text); | 9084 EXPECT_EQ("Payload", response_text); |
9080 } | 9085 } |
9081 | 9086 |
9082 namespace { | 9087 namespace { |
9083 | 9088 |
9084 // Tests that for connection endpoints the group names are correctly set. | 9089 // Tests that for connection endpoints the group names are correctly set. |
9085 | 9090 |
9086 struct GroupNameTest { | 9091 struct GroupNameTest { |
9087 std::string proxy_server; | 9092 std::string proxy_server; |
9088 std::string url; | 9093 std::string url; |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9335 // connecting to both proxies (myproxy:70 and foobar:80). | 9340 // connecting to both proxies (myproxy:70 and foobar:80). |
9336 session_deps_.host_resolver->rules()->AddSimulatedFailure("*"); | 9341 session_deps_.host_resolver->rules()->AddSimulatedFailure("*"); |
9337 | 9342 |
9338 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9343 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9339 std::unique_ptr<HttpTransaction> trans( | 9344 std::unique_ptr<HttpTransaction> trans( |
9340 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9345 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9341 | 9346 |
9342 TestCompletionCallback callback; | 9347 TestCompletionCallback callback; |
9343 | 9348 |
9344 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9349 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9345 EXPECT_EQ(ERR_IO_PENDING, rv); | 9350 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9346 | 9351 |
9347 rv = callback.WaitForResult(); | 9352 rv = callback.WaitForResult(); |
9348 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 9353 EXPECT_THAT(rv, IsError(ERR_PROXY_CONNECTION_FAILED)); |
9349 } | 9354 } |
9350 | 9355 |
9351 // Base test to make sure that when the load flags for a request specify to | 9356 // Base test to make sure that when the load flags for a request specify to |
9352 // bypass the cache, the DNS cache is not used. | 9357 // bypass the cache, the DNS cache is not used. |
9353 void HttpNetworkTransactionTest::BypassHostCacheOnRefreshHelper( | 9358 void HttpNetworkTransactionTest::BypassHostCacheOnRefreshHelper( |
9354 int load_flags) { | 9359 int load_flags) { |
9355 // Issue a request, asking to bypass the cache(s). | 9360 // Issue a request, asking to bypass the cache(s). |
9356 HttpRequestInfo request; | 9361 HttpRequestInfo request; |
9357 request.method = "GET"; | 9362 request.method = "GET"; |
9358 request.load_flags = load_flags; | 9363 request.load_flags = load_flags; |
9359 request.url = GURL("http://www.example.org/"); | 9364 request.url = GURL("http://www.example.org/"); |
9360 | 9365 |
9361 // Select a host resolver that does caching. | 9366 // Select a host resolver that does caching. |
9362 session_deps_.host_resolver.reset(new MockCachingHostResolver); | 9367 session_deps_.host_resolver.reset(new MockCachingHostResolver); |
9363 | 9368 |
9364 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9369 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9365 std::unique_ptr<HttpTransaction> trans( | 9370 std::unique_ptr<HttpTransaction> trans( |
9366 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9371 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9367 | 9372 |
9368 // Warm up the host cache so it has an entry for "www.example.org". | 9373 // Warm up the host cache so it has an entry for "www.example.org". |
9369 AddressList addrlist; | 9374 AddressList addrlist; |
9370 TestCompletionCallback callback; | 9375 TestCompletionCallback callback; |
9371 int rv = session_deps_.host_resolver->Resolve( | 9376 int rv = session_deps_.host_resolver->Resolve( |
9372 HostResolver::RequestInfo(HostPortPair("www.example.org", 80)), | 9377 HostResolver::RequestInfo(HostPortPair("www.example.org", 80)), |
9373 DEFAULT_PRIORITY, &addrlist, callback.callback(), NULL, BoundNetLog()); | 9378 DEFAULT_PRIORITY, &addrlist, callback.callback(), NULL, BoundNetLog()); |
9374 EXPECT_EQ(ERR_IO_PENDING, rv); | 9379 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9375 rv = callback.WaitForResult(); | 9380 rv = callback.WaitForResult(); |
9376 EXPECT_EQ(OK, rv); | 9381 EXPECT_THAT(rv, IsOk()); |
9377 | 9382 |
9378 // Verify that it was added to host cache, by doing a subsequent async lookup | 9383 // Verify that it was added to host cache, by doing a subsequent async lookup |
9379 // and confirming it completes synchronously. | 9384 // and confirming it completes synchronously. |
9380 rv = session_deps_.host_resolver->Resolve( | 9385 rv = session_deps_.host_resolver->Resolve( |
9381 HostResolver::RequestInfo(HostPortPair("www.example.org", 80)), | 9386 HostResolver::RequestInfo(HostPortPair("www.example.org", 80)), |
9382 DEFAULT_PRIORITY, &addrlist, callback.callback(), NULL, BoundNetLog()); | 9387 DEFAULT_PRIORITY, &addrlist, callback.callback(), NULL, BoundNetLog()); |
9383 ASSERT_EQ(OK, rv); | 9388 ASSERT_THAT(rv, IsOk()); |
9384 | 9389 |
9385 // Inject a failure the next time that "www.example.org" is resolved. This way | 9390 // Inject a failure the next time that "www.example.org" is resolved. This way |
9386 // we can tell if the next lookup hit the cache, or the "network". | 9391 // we can tell if the next lookup hit the cache, or the "network". |
9387 // (cache --> success, "network" --> failure). | 9392 // (cache --> success, "network" --> failure). |
9388 session_deps_.host_resolver->rules()->AddSimulatedFailure("www.example.org"); | 9393 session_deps_.host_resolver->rules()->AddSimulatedFailure("www.example.org"); |
9389 | 9394 |
9390 // Connect up a mock socket which will fail with ERR_UNEXPECTED during the | 9395 // Connect up a mock socket which will fail with ERR_UNEXPECTED during the |
9391 // first read -- this won't be reached as the host resolution will fail first. | 9396 // first read -- this won't be reached as the host resolution will fail first. |
9392 MockRead data_reads[] = { MockRead(SYNCHRONOUS, ERR_UNEXPECTED) }; | 9397 MockRead data_reads[] = { MockRead(SYNCHRONOUS, ERR_UNEXPECTED) }; |
9393 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9398 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
9394 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9399 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9395 | 9400 |
9396 // Run the request. | 9401 // Run the request. |
9397 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9402 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9398 ASSERT_EQ(ERR_IO_PENDING, rv); | 9403 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
9399 rv = callback.WaitForResult(); | 9404 rv = callback.WaitForResult(); |
9400 | 9405 |
9401 // If we bypassed the cache, we would have gotten a failure while resolving | 9406 // If we bypassed the cache, we would have gotten a failure while resolving |
9402 // "www.example.org". | 9407 // "www.example.org". |
9403 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); | 9408 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); |
9404 } | 9409 } |
9405 | 9410 |
9406 // There are multiple load flags that should trigger the host cache bypass. | 9411 // There are multiple load flags that should trigger the host cache bypass. |
9407 // Test each in isolation: | 9412 // Test each in isolation: |
9408 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh1) { | 9413 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh1) { |
9409 BypassHostCacheOnRefreshHelper(LOAD_BYPASS_CACHE); | 9414 BypassHostCacheOnRefreshHelper(LOAD_BYPASS_CACHE); |
9410 } | 9415 } |
9411 | 9416 |
9412 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh2) { | 9417 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh2) { |
9413 BypassHostCacheOnRefreshHelper(LOAD_VALIDATE_CACHE); | 9418 BypassHostCacheOnRefreshHelper(LOAD_VALIDATE_CACHE); |
(...skipping 17 matching lines...) Expand all Loading... |
9431 write_failure, arraysize(write_failure)); | 9436 write_failure, arraysize(write_failure)); |
9432 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9437 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9433 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9438 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9434 | 9439 |
9435 TestCompletionCallback callback; | 9440 TestCompletionCallback callback; |
9436 | 9441 |
9437 std::unique_ptr<HttpTransaction> trans( | 9442 std::unique_ptr<HttpTransaction> trans( |
9438 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9443 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9439 | 9444 |
9440 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9445 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9441 EXPECT_EQ(ERR_IO_PENDING, rv); | 9446 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9442 | 9447 |
9443 rv = callback.WaitForResult(); | 9448 rv = callback.WaitForResult(); |
9444 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 9449 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
9445 | 9450 |
9446 IPEndPoint endpoint; | 9451 IPEndPoint endpoint; |
9447 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); | 9452 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); |
9448 EXPECT_LT(0u, endpoint.address().size()); | 9453 EXPECT_LT(0u, endpoint.address().size()); |
9449 } | 9454 } |
9450 | 9455 |
9451 // Check that a connection closed after the start of the headers finishes ok. | 9456 // Check that a connection closed after the start of the headers finishes ok. |
9452 TEST_P(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { | 9457 TEST_P(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { |
9453 HttpRequestInfo request; | 9458 HttpRequestInfo request; |
9454 request.method = "GET"; | 9459 request.method = "GET"; |
9455 request.url = GURL("http://www.foo.com/"); | 9460 request.url = GURL("http://www.foo.com/"); |
9456 request.load_flags = 0; | 9461 request.load_flags = 0; |
9457 | 9462 |
9458 MockRead data_reads[] = { | 9463 MockRead data_reads[] = { |
9459 MockRead("HTTP/1."), | 9464 MockRead("HTTP/1."), |
9460 MockRead(SYNCHRONOUS, OK), | 9465 MockRead(SYNCHRONOUS, OK), |
9461 }; | 9466 }; |
9462 | 9467 |
9463 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9468 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
9464 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9469 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9465 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9470 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9466 | 9471 |
9467 TestCompletionCallback callback; | 9472 TestCompletionCallback callback; |
9468 | 9473 |
9469 std::unique_ptr<HttpTransaction> trans( | 9474 std::unique_ptr<HttpTransaction> trans( |
9470 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9475 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9471 | 9476 |
9472 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9477 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9473 EXPECT_EQ(ERR_IO_PENDING, rv); | 9478 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9474 | 9479 |
9475 rv = callback.WaitForResult(); | 9480 rv = callback.WaitForResult(); |
9476 EXPECT_EQ(OK, rv); | 9481 EXPECT_THAT(rv, IsOk()); |
9477 | 9482 |
9478 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9483 const HttpResponseInfo* response = trans->GetResponseInfo(); |
9479 ASSERT_TRUE(response); | 9484 ASSERT_TRUE(response); |
9480 | 9485 |
9481 EXPECT_TRUE(response->headers); | 9486 EXPECT_TRUE(response->headers); |
9482 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 9487 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
9483 | 9488 |
9484 std::string response_data; | 9489 std::string response_data; |
9485 rv = ReadTransaction(trans.get(), &response_data); | 9490 rv = ReadTransaction(trans.get(), &response_data); |
9486 EXPECT_EQ(OK, rv); | 9491 EXPECT_THAT(rv, IsOk()); |
9487 EXPECT_EQ("", response_data); | 9492 EXPECT_EQ("", response_data); |
9488 | 9493 |
9489 IPEndPoint endpoint; | 9494 IPEndPoint endpoint; |
9490 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); | 9495 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); |
9491 EXPECT_LT(0u, endpoint.address().size()); | 9496 EXPECT_LT(0u, endpoint.address().size()); |
9492 } | 9497 } |
9493 | 9498 |
9494 // Make sure that a dropped connection while draining the body for auth | 9499 // Make sure that a dropped connection while draining the body for auth |
9495 // restart does the right thing. | 9500 // restart does the right thing. |
9496 TEST_P(HttpNetworkTransactionTest, DrainResetOK) { | 9501 TEST_P(HttpNetworkTransactionTest, DrainResetOK) { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9541 data_writes2, arraysize(data_writes2)); | 9546 data_writes2, arraysize(data_writes2)); |
9542 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 9547 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
9543 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9548 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9544 | 9549 |
9545 TestCompletionCallback callback1; | 9550 TestCompletionCallback callback1; |
9546 | 9551 |
9547 std::unique_ptr<HttpTransaction> trans( | 9552 std::unique_ptr<HttpTransaction> trans( |
9548 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9553 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9549 | 9554 |
9550 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 9555 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
9551 EXPECT_EQ(ERR_IO_PENDING, rv); | 9556 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9552 | 9557 |
9553 rv = callback1.WaitForResult(); | 9558 rv = callback1.WaitForResult(); |
9554 EXPECT_EQ(OK, rv); | 9559 EXPECT_THAT(rv, IsOk()); |
9555 | 9560 |
9556 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9561 const HttpResponseInfo* response = trans->GetResponseInfo(); |
9557 ASSERT_TRUE(response); | 9562 ASSERT_TRUE(response); |
9558 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 9563 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
9559 | 9564 |
9560 TestCompletionCallback callback2; | 9565 TestCompletionCallback callback2; |
9561 | 9566 |
9562 rv = trans->RestartWithAuth( | 9567 rv = trans->RestartWithAuth( |
9563 AuthCredentials(kFoo, kBar), callback2.callback()); | 9568 AuthCredentials(kFoo, kBar), callback2.callback()); |
9564 EXPECT_EQ(ERR_IO_PENDING, rv); | 9569 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9565 | 9570 |
9566 rv = callback2.WaitForResult(); | 9571 rv = callback2.WaitForResult(); |
9567 EXPECT_EQ(OK, rv); | 9572 EXPECT_THAT(rv, IsOk()); |
9568 | 9573 |
9569 response = trans->GetResponseInfo(); | 9574 response = trans->GetResponseInfo(); |
9570 ASSERT_TRUE(response); | 9575 ASSERT_TRUE(response); |
9571 EXPECT_FALSE(response->auth_challenge); | 9576 EXPECT_FALSE(response->auth_challenge); |
9572 EXPECT_EQ(100, response->headers->GetContentLength()); | 9577 EXPECT_EQ(100, response->headers->GetContentLength()); |
9573 } | 9578 } |
9574 | 9579 |
9575 // Test HTTPS connections going through a proxy that sends extra data. | 9580 // Test HTTPS connections going through a proxy that sends extra data. |
9576 TEST_P(HttpNetworkTransactionTest, HTTPSViaProxyWithExtraData) { | 9581 TEST_P(HttpNetworkTransactionTest, HTTPSViaProxyWithExtraData) { |
9577 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 9582 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
(...skipping 16 matching lines...) Expand all Loading... |
9594 | 9599 |
9595 TestCompletionCallback callback; | 9600 TestCompletionCallback callback; |
9596 | 9601 |
9597 session_deps_.socket_factory->ResetNextMockIndexes(); | 9602 session_deps_.socket_factory->ResetNextMockIndexes(); |
9598 | 9603 |
9599 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9604 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9600 std::unique_ptr<HttpTransaction> trans( | 9605 std::unique_ptr<HttpTransaction> trans( |
9601 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9606 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9602 | 9607 |
9603 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9608 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9604 EXPECT_EQ(ERR_IO_PENDING, rv); | 9609 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9605 | 9610 |
9606 rv = callback.WaitForResult(); | 9611 rv = callback.WaitForResult(); |
9607 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 9612 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
9608 } | 9613 } |
9609 | 9614 |
9610 TEST_P(HttpNetworkTransactionTest, LargeContentLengthThenClose) { | 9615 TEST_P(HttpNetworkTransactionTest, LargeContentLengthThenClose) { |
9611 HttpRequestInfo request; | 9616 HttpRequestInfo request; |
9612 request.method = "GET"; | 9617 request.method = "GET"; |
9613 request.url = GURL("http://www.example.org/"); | 9618 request.url = GURL("http://www.example.org/"); |
9614 request.load_flags = 0; | 9619 request.load_flags = 0; |
9615 | 9620 |
9616 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9621 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9617 std::unique_ptr<HttpTransaction> trans( | 9622 std::unique_ptr<HttpTransaction> trans( |
9618 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9623 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9619 | 9624 |
9620 MockRead data_reads[] = { | 9625 MockRead data_reads[] = { |
9621 MockRead("HTTP/1.0 200 OK\r\nContent-Length:6719476739\r\n\r\n"), | 9626 MockRead("HTTP/1.0 200 OK\r\nContent-Length:6719476739\r\n\r\n"), |
9622 MockRead(SYNCHRONOUS, OK), | 9627 MockRead(SYNCHRONOUS, OK), |
9623 }; | 9628 }; |
9624 | 9629 |
9625 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9630 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
9626 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9631 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9627 | 9632 |
9628 TestCompletionCallback callback; | 9633 TestCompletionCallback callback; |
9629 | 9634 |
9630 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9635 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9631 EXPECT_EQ(ERR_IO_PENDING, rv); | 9636 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9632 | 9637 |
9633 EXPECT_EQ(OK, callback.WaitForResult()); | 9638 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
9634 | 9639 |
9635 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9640 const HttpResponseInfo* response = trans->GetResponseInfo(); |
9636 ASSERT_TRUE(response); | 9641 ASSERT_TRUE(response); |
9637 | 9642 |
9638 EXPECT_TRUE(response->headers); | 9643 EXPECT_TRUE(response->headers); |
9639 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 9644 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
9640 | 9645 |
9641 std::string response_data; | 9646 std::string response_data; |
9642 rv = ReadTransaction(trans.get(), &response_data); | 9647 rv = ReadTransaction(trans.get(), &response_data); |
9643 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 9648 EXPECT_THAT(rv, IsError(ERR_CONTENT_LENGTH_MISMATCH)); |
9644 } | 9649 } |
9645 | 9650 |
9646 TEST_P(HttpNetworkTransactionTest, UploadFileSmallerThanLength) { | 9651 TEST_P(HttpNetworkTransactionTest, UploadFileSmallerThanLength) { |
9647 base::FilePath temp_file_path; | 9652 base::FilePath temp_file_path; |
9648 ASSERT_TRUE(base::CreateTemporaryFile(&temp_file_path)); | 9653 ASSERT_TRUE(base::CreateTemporaryFile(&temp_file_path)); |
9649 const uint64_t kFakeSize = 100000; // file is actually blank | 9654 const uint64_t kFakeSize = 100000; // file is actually blank |
9650 UploadFileElementReader::ScopedOverridingContentLengthForTests | 9655 UploadFileElementReader::ScopedOverridingContentLengthForTests |
9651 overriding_content_length(kFakeSize); | 9656 overriding_content_length(kFakeSize); |
9652 | 9657 |
9653 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 9658 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
(...skipping 16 matching lines...) Expand all Loading... |
9670 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 9675 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
9671 MockRead("hello world"), | 9676 MockRead("hello world"), |
9672 MockRead(SYNCHRONOUS, OK), | 9677 MockRead(SYNCHRONOUS, OK), |
9673 }; | 9678 }; |
9674 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9679 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
9675 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9680 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9676 | 9681 |
9677 TestCompletionCallback callback; | 9682 TestCompletionCallback callback; |
9678 | 9683 |
9679 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9684 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9680 EXPECT_EQ(ERR_IO_PENDING, rv); | 9685 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9681 | 9686 |
9682 rv = callback.WaitForResult(); | 9687 rv = callback.WaitForResult(); |
9683 EXPECT_EQ(ERR_UPLOAD_FILE_CHANGED, rv); | 9688 EXPECT_THAT(rv, IsError(ERR_UPLOAD_FILE_CHANGED)); |
9684 | 9689 |
9685 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9690 const HttpResponseInfo* response = trans->GetResponseInfo(); |
9686 ASSERT_TRUE(response); | 9691 ASSERT_TRUE(response); |
9687 | 9692 |
9688 EXPECT_FALSE(response->headers); | 9693 EXPECT_FALSE(response->headers); |
9689 | 9694 |
9690 base::DeleteFile(temp_file_path, false); | 9695 base::DeleteFile(temp_file_path, false); |
9691 } | 9696 } |
9692 | 9697 |
9693 TEST_P(HttpNetworkTransactionTest, UploadUnreadableFile) { | 9698 TEST_P(HttpNetworkTransactionTest, UploadUnreadableFile) { |
(...skipping 20 matching lines...) Expand all Loading... |
9714 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9719 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9715 std::unique_ptr<HttpTransaction> trans( | 9720 std::unique_ptr<HttpTransaction> trans( |
9716 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9721 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9717 | 9722 |
9718 StaticSocketDataProvider data(NULL, 0, NULL, 0); | 9723 StaticSocketDataProvider data(NULL, 0, NULL, 0); |
9719 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9724 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9720 | 9725 |
9721 TestCompletionCallback callback; | 9726 TestCompletionCallback callback; |
9722 | 9727 |
9723 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9728 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9724 EXPECT_EQ(ERR_IO_PENDING, rv); | 9729 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9725 | 9730 |
9726 rv = callback.WaitForResult(); | 9731 rv = callback.WaitForResult(); |
9727 EXPECT_EQ(ERR_ACCESS_DENIED, rv); | 9732 EXPECT_THAT(rv, IsError(ERR_ACCESS_DENIED)); |
9728 | 9733 |
9729 base::DeleteFile(temp_file, false); | 9734 base::DeleteFile(temp_file, false); |
9730 } | 9735 } |
9731 | 9736 |
9732 TEST_P(HttpNetworkTransactionTest, CancelDuringInitRequestBody) { | 9737 TEST_P(HttpNetworkTransactionTest, CancelDuringInitRequestBody) { |
9733 class FakeUploadElementReader : public UploadElementReader { | 9738 class FakeUploadElementReader : public UploadElementReader { |
9734 public: | 9739 public: |
9735 FakeUploadElementReader() {} | 9740 FakeUploadElementReader() {} |
9736 ~FakeUploadElementReader() override {} | 9741 ~FakeUploadElementReader() override {} |
9737 | 9742 |
(...skipping 29 matching lines...) Expand all Loading... |
9767 | 9772 |
9768 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9773 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9769 std::unique_ptr<HttpTransaction> trans( | 9774 std::unique_ptr<HttpTransaction> trans( |
9770 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9775 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9771 | 9776 |
9772 StaticSocketDataProvider data; | 9777 StaticSocketDataProvider data; |
9773 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9778 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9774 | 9779 |
9775 TestCompletionCallback callback; | 9780 TestCompletionCallback callback; |
9776 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9781 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9777 EXPECT_EQ(ERR_IO_PENDING, rv); | 9782 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9778 base::RunLoop().RunUntilIdle(); | 9783 base::RunLoop().RunUntilIdle(); |
9779 | 9784 |
9780 // Transaction is pending on request body initialization. | 9785 // Transaction is pending on request body initialization. |
9781 ASSERT_FALSE(fake_reader->callback().is_null()); | 9786 ASSERT_FALSE(fake_reader->callback().is_null()); |
9782 | 9787 |
9783 // Return Init()'s result after the transaction gets destroyed. | 9788 // Return Init()'s result after the transaction gets destroyed. |
9784 trans.reset(); | 9789 trans.reset(); |
9785 fake_reader->callback().Run(OK); // Should not crash. | 9790 fake_reader->callback().Run(OK); // Should not crash. |
9786 } | 9791 } |
9787 | 9792 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9873 TestCompletionCallback callback1; | 9878 TestCompletionCallback callback1; |
9874 | 9879 |
9875 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9880 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9876 std::unique_ptr<HttpTransaction> trans( | 9881 std::unique_ptr<HttpTransaction> trans( |
9877 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9882 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9878 | 9883 |
9879 // Issue the first request with Authorize headers. There should be a | 9884 // Issue the first request with Authorize headers. There should be a |
9880 // password prompt for first_realm waiting to be filled in after the | 9885 // password prompt for first_realm waiting to be filled in after the |
9881 // transaction completes. | 9886 // transaction completes. |
9882 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 9887 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
9883 EXPECT_EQ(ERR_IO_PENDING, rv); | 9888 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9884 rv = callback1.WaitForResult(); | 9889 rv = callback1.WaitForResult(); |
9885 EXPECT_EQ(OK, rv); | 9890 EXPECT_THAT(rv, IsOk()); |
9886 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9891 const HttpResponseInfo* response = trans->GetResponseInfo(); |
9887 ASSERT_TRUE(response); | 9892 ASSERT_TRUE(response); |
9888 const AuthChallengeInfo* challenge = response->auth_challenge.get(); | 9893 const AuthChallengeInfo* challenge = response->auth_challenge.get(); |
9889 ASSERT_TRUE(challenge); | 9894 ASSERT_TRUE(challenge); |
9890 EXPECT_FALSE(challenge->is_proxy); | 9895 EXPECT_FALSE(challenge->is_proxy); |
9891 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); | 9896 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); |
9892 EXPECT_EQ("first_realm", challenge->realm); | 9897 EXPECT_EQ("first_realm", challenge->realm); |
9893 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); | 9898 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); |
9894 | 9899 |
9895 // Issue the second request with an incorrect password. There should be a | 9900 // Issue the second request with an incorrect password. There should be a |
9896 // password prompt for second_realm waiting to be filled in after the | 9901 // password prompt for second_realm waiting to be filled in after the |
9897 // transaction completes. | 9902 // transaction completes. |
9898 TestCompletionCallback callback2; | 9903 TestCompletionCallback callback2; |
9899 rv = trans->RestartWithAuth( | 9904 rv = trans->RestartWithAuth( |
9900 AuthCredentials(kFirst, kBaz), callback2.callback()); | 9905 AuthCredentials(kFirst, kBaz), callback2.callback()); |
9901 EXPECT_EQ(ERR_IO_PENDING, rv); | 9906 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9902 rv = callback2.WaitForResult(); | 9907 rv = callback2.WaitForResult(); |
9903 EXPECT_EQ(OK, rv); | 9908 EXPECT_THAT(rv, IsOk()); |
9904 response = trans->GetResponseInfo(); | 9909 response = trans->GetResponseInfo(); |
9905 ASSERT_TRUE(response); | 9910 ASSERT_TRUE(response); |
9906 challenge = response->auth_challenge.get(); | 9911 challenge = response->auth_challenge.get(); |
9907 ASSERT_TRUE(challenge); | 9912 ASSERT_TRUE(challenge); |
9908 EXPECT_FALSE(challenge->is_proxy); | 9913 EXPECT_FALSE(challenge->is_proxy); |
9909 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); | 9914 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); |
9910 EXPECT_EQ("second_realm", challenge->realm); | 9915 EXPECT_EQ("second_realm", challenge->realm); |
9911 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); | 9916 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); |
9912 | 9917 |
9913 // Issue the third request with another incorrect password. There should be | 9918 // Issue the third request with another incorrect password. There should be |
9914 // a password prompt for first_realm waiting to be filled in. If the password | 9919 // a password prompt for first_realm waiting to be filled in. If the password |
9915 // prompt is not present, it indicates that the HttpAuthCacheEntry for | 9920 // prompt is not present, it indicates that the HttpAuthCacheEntry for |
9916 // first_realm was not correctly removed. | 9921 // first_realm was not correctly removed. |
9917 TestCompletionCallback callback3; | 9922 TestCompletionCallback callback3; |
9918 rv = trans->RestartWithAuth( | 9923 rv = trans->RestartWithAuth( |
9919 AuthCredentials(kSecond, kFou), callback3.callback()); | 9924 AuthCredentials(kSecond, kFou), callback3.callback()); |
9920 EXPECT_EQ(ERR_IO_PENDING, rv); | 9925 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9921 rv = callback3.WaitForResult(); | 9926 rv = callback3.WaitForResult(); |
9922 EXPECT_EQ(OK, rv); | 9927 EXPECT_THAT(rv, IsOk()); |
9923 response = trans->GetResponseInfo(); | 9928 response = trans->GetResponseInfo(); |
9924 ASSERT_TRUE(response); | 9929 ASSERT_TRUE(response); |
9925 challenge = response->auth_challenge.get(); | 9930 challenge = response->auth_challenge.get(); |
9926 ASSERT_TRUE(challenge); | 9931 ASSERT_TRUE(challenge); |
9927 EXPECT_FALSE(challenge->is_proxy); | 9932 EXPECT_FALSE(challenge->is_proxy); |
9928 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); | 9933 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); |
9929 EXPECT_EQ("first_realm", challenge->realm); | 9934 EXPECT_EQ("first_realm", challenge->realm); |
9930 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); | 9935 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); |
9931 | 9936 |
9932 // Issue the fourth request with the correct password and username. | 9937 // Issue the fourth request with the correct password and username. |
9933 TestCompletionCallback callback4; | 9938 TestCompletionCallback callback4; |
9934 rv = trans->RestartWithAuth( | 9939 rv = trans->RestartWithAuth( |
9935 AuthCredentials(kFirst, kBar), callback4.callback()); | 9940 AuthCredentials(kFirst, kBar), callback4.callback()); |
9936 EXPECT_EQ(ERR_IO_PENDING, rv); | 9941 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9937 rv = callback4.WaitForResult(); | 9942 rv = callback4.WaitForResult(); |
9938 EXPECT_EQ(OK, rv); | 9943 EXPECT_THAT(rv, IsOk()); |
9939 response = trans->GetResponseInfo(); | 9944 response = trans->GetResponseInfo(); |
9940 ASSERT_TRUE(response); | 9945 ASSERT_TRUE(response); |
9941 EXPECT_FALSE(response->auth_challenge); | 9946 EXPECT_FALSE(response->auth_challenge); |
9942 } | 9947 } |
9943 | 9948 |
9944 TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { | 9949 TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { |
9945 std::string alternative_service_http_header = | 9950 std::string alternative_service_http_header = |
9946 GetAlternativeServiceHttpHeader(); | 9951 GetAlternativeServiceHttpHeader(); |
9947 | 9952 |
9948 MockRead data_reads[] = { | 9953 MockRead data_reads[] = { |
(...skipping 15 matching lines...) Expand all Loading... |
9964 SSLSocketDataProvider ssl(ASYNC, OK); | 9969 SSLSocketDataProvider ssl(ASYNC, OK); |
9965 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 9970 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
9966 | 9971 |
9967 TestCompletionCallback callback; | 9972 TestCompletionCallback callback; |
9968 | 9973 |
9969 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9974 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9970 std::unique_ptr<HttpTransaction> trans( | 9975 std::unique_ptr<HttpTransaction> trans( |
9971 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9976 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9972 | 9977 |
9973 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9978 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
9974 EXPECT_EQ(ERR_IO_PENDING, rv); | 9979 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9975 | 9980 |
9976 url::SchemeHostPort test_server(request.url); | 9981 url::SchemeHostPort test_server(request.url); |
9977 HttpServerProperties* http_server_properties = | 9982 HttpServerProperties* http_server_properties = |
9978 session->http_server_properties(); | 9983 session->http_server_properties(); |
9979 AlternativeServiceVector alternative_service_vector = | 9984 AlternativeServiceVector alternative_service_vector = |
9980 http_server_properties->GetAlternativeServices(test_server); | 9985 http_server_properties->GetAlternativeServices(test_server); |
9981 EXPECT_TRUE(alternative_service_vector.empty()); | 9986 EXPECT_TRUE(alternative_service_vector.empty()); |
9982 | 9987 |
9983 EXPECT_EQ(OK, callback.WaitForResult()); | 9988 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
9984 | 9989 |
9985 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9990 const HttpResponseInfo* response = trans->GetResponseInfo(); |
9986 ASSERT_TRUE(response); | 9991 ASSERT_TRUE(response); |
9987 ASSERT_TRUE(response->headers); | 9992 ASSERT_TRUE(response->headers); |
9988 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 9993 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
9989 EXPECT_FALSE(response->was_fetched_via_spdy); | 9994 EXPECT_FALSE(response->was_fetched_via_spdy); |
9990 EXPECT_FALSE(response->was_npn_negotiated); | 9995 EXPECT_FALSE(response->was_npn_negotiated); |
9991 | 9996 |
9992 std::string response_data; | 9997 std::string response_data; |
9993 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 9998 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
9994 EXPECT_EQ("hello world", response_data); | 9999 EXPECT_EQ("hello world", response_data); |
9995 | 10000 |
9996 alternative_service_vector = | 10001 alternative_service_vector = |
9997 http_server_properties->GetAlternativeServices(test_server); | 10002 http_server_properties->GetAlternativeServices(test_server); |
9998 ASSERT_EQ(1u, alternative_service_vector.size()); | 10003 ASSERT_EQ(1u, alternative_service_vector.size()); |
9999 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), | 10004 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
10000 alternative_service_vector[0].protocol); | 10005 alternative_service_vector[0].protocol); |
10001 EXPECT_EQ("mail.example.org", alternative_service_vector[0].host); | 10006 EXPECT_EQ("mail.example.org", alternative_service_vector[0].host); |
10002 EXPECT_EQ(443, alternative_service_vector[0].port); | 10007 EXPECT_EQ(443, alternative_service_vector[0].port); |
10003 } | 10008 } |
(...skipping 27 matching lines...) Expand all Loading... |
10031 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10036 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10032 | 10037 |
10033 url::SchemeHostPort test_server(request.url); | 10038 url::SchemeHostPort test_server(request.url); |
10034 HttpServerProperties* http_server_properties = | 10039 HttpServerProperties* http_server_properties = |
10035 session->http_server_properties(); | 10040 session->http_server_properties(); |
10036 AlternativeServiceVector alternative_service_vector = | 10041 AlternativeServiceVector alternative_service_vector = |
10037 http_server_properties->GetAlternativeServices(test_server); | 10042 http_server_properties->GetAlternativeServices(test_server); |
10038 EXPECT_TRUE(alternative_service_vector.empty()); | 10043 EXPECT_TRUE(alternative_service_vector.empty()); |
10039 | 10044 |
10040 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10045 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
10041 EXPECT_EQ(ERR_IO_PENDING, rv); | 10046 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10042 EXPECT_EQ(OK, callback.WaitForResult()); | 10047 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10043 | 10048 |
10044 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10049 const HttpResponseInfo* response = trans->GetResponseInfo(); |
10045 ASSERT_TRUE(response); | 10050 ASSERT_TRUE(response); |
10046 ASSERT_TRUE(response->headers); | 10051 ASSERT_TRUE(response->headers); |
10047 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10052 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10048 EXPECT_FALSE(response->was_fetched_via_spdy); | 10053 EXPECT_FALSE(response->was_fetched_via_spdy); |
10049 EXPECT_FALSE(response->was_npn_negotiated); | 10054 EXPECT_FALSE(response->was_npn_negotiated); |
10050 | 10055 |
10051 std::string response_data; | 10056 std::string response_data; |
10052 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10057 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
10053 EXPECT_EQ("hello world", response_data); | 10058 EXPECT_EQ("hello world", response_data); |
10054 | 10059 |
10055 alternative_service_vector = | 10060 alternative_service_vector = |
10056 http_server_properties->GetAlternativeServices(test_server); | 10061 http_server_properties->GetAlternativeServices(test_server); |
10057 EXPECT_TRUE(alternative_service_vector.empty()); | 10062 EXPECT_TRUE(alternative_service_vector.empty()); |
10058 } | 10063 } |
10059 | 10064 |
10060 // HTTP/2 Alternative Services should be disabled if alternative service | 10065 // HTTP/2 Alternative Services should be disabled if alternative service |
10061 // hostname is different from that of origin. | 10066 // hostname is different from that of origin. |
10062 // TODO(bnc): Remove when https://crbug.com/615413 is fixed. | 10067 // TODO(bnc): Remove when https://crbug.com/615413 is fixed. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10095 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10100 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10096 http_server_properties->SetAlternativeService( | 10101 http_server_properties->SetAlternativeService( |
10097 url::SchemeHostPort(request.url), alternative_service, expiration); | 10102 url::SchemeHostPort(request.url), alternative_service, expiration); |
10098 | 10103 |
10099 std::unique_ptr<HttpTransaction> trans( | 10104 std::unique_ptr<HttpTransaction> trans( |
10100 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10105 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10101 TestCompletionCallback callback; | 10106 TestCompletionCallback callback; |
10102 | 10107 |
10103 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10108 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
10104 // Alternative service is not used, request fails. | 10109 // Alternative service is not used, request fails. |
10105 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv)); | 10110 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); |
10106 } | 10111 } |
10107 | 10112 |
10108 // Regression test for https://crbug.com/615497: | 10113 // Regression test for https://crbug.com/615497: |
10109 // Alternative Services should be disabled for http origin. | 10114 // Alternative Services should be disabled for http origin. |
10110 TEST_P(HttpNetworkTransactionTest, | 10115 TEST_P(HttpNetworkTransactionTest, |
10111 DisableAlternativeServicesForInsecureOrigin) { | 10116 DisableAlternativeServicesForInsecureOrigin) { |
10112 HttpRequestInfo request; | 10117 HttpRequestInfo request; |
10113 request.method = "GET"; | 10118 request.method = "GET"; |
10114 request.url = GURL("http://www.example.org/"); | 10119 request.url = GURL("http://www.example.org/"); |
10115 request.load_flags = 0; | 10120 request.load_flags = 0; |
(...skipping 20 matching lines...) Expand all Loading... |
10136 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10141 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10137 http_server_properties->SetAlternativeService( | 10142 http_server_properties->SetAlternativeService( |
10138 url::SchemeHostPort(request.url), alternative_service, expiration); | 10143 url::SchemeHostPort(request.url), alternative_service, expiration); |
10139 | 10144 |
10140 std::unique_ptr<HttpTransaction> trans( | 10145 std::unique_ptr<HttpTransaction> trans( |
10141 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10146 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10142 TestCompletionCallback callback; | 10147 TestCompletionCallback callback; |
10143 | 10148 |
10144 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10149 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
10145 // Alternative service is not used, request fails. | 10150 // Alternative service is not used, request fails. |
10146 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv)); | 10151 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); |
10147 } | 10152 } |
10148 | 10153 |
10149 TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { | 10154 TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { |
10150 // Set an alternative service for origin. | 10155 // Set an alternative service for origin. |
10151 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10156 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10152 HttpServerProperties* http_server_properties = | 10157 HttpServerProperties* http_server_properties = |
10153 session->http_server_properties(); | 10158 session->http_server_properties(); |
10154 url::SchemeHostPort test_server("https", "www.example.org", 443); | 10159 url::SchemeHostPort test_server("https", "www.example.org", 443); |
10155 AlternativeService alternative_service(QUIC, "", 80); | 10160 AlternativeService alternative_service(QUIC, "", 80); |
10156 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10161 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
(...skipping 21 matching lines...) Expand all Loading... |
10178 request.method = "GET"; | 10183 request.method = "GET"; |
10179 request.url = GURL("https://www.example.org/"); | 10184 request.url = GURL("https://www.example.org/"); |
10180 request.load_flags = 0; | 10185 request.load_flags = 0; |
10181 | 10186 |
10182 TestCompletionCallback callback; | 10187 TestCompletionCallback callback; |
10183 | 10188 |
10184 std::unique_ptr<HttpTransaction> trans( | 10189 std::unique_ptr<HttpTransaction> trans( |
10185 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10190 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10186 | 10191 |
10187 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10192 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
10188 EXPECT_EQ(OK, callback.GetResult(rv)); | 10193 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
10189 | 10194 |
10190 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10195 const HttpResponseInfo* response = trans->GetResponseInfo(); |
10191 ASSERT_TRUE(response); | 10196 ASSERT_TRUE(response); |
10192 ASSERT_TRUE(response->headers); | 10197 ASSERT_TRUE(response->headers); |
10193 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10198 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10194 EXPECT_FALSE(response->was_fetched_via_spdy); | 10199 EXPECT_FALSE(response->was_fetched_via_spdy); |
10195 EXPECT_FALSE(response->was_npn_negotiated); | 10200 EXPECT_FALSE(response->was_npn_negotiated); |
10196 | 10201 |
10197 std::string response_data; | 10202 std::string response_data; |
10198 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10203 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
10199 EXPECT_EQ("hello world", response_data); | 10204 EXPECT_EQ("hello world", response_data); |
10200 | 10205 |
10201 alternative_service_vector = | 10206 alternative_service_vector = |
10202 http_server_properties->GetAlternativeServices(test_server); | 10207 http_server_properties->GetAlternativeServices(test_server); |
10203 EXPECT_TRUE(alternative_service_vector.empty()); | 10208 EXPECT_TRUE(alternative_service_vector.empty()); |
10204 } | 10209 } |
10205 | 10210 |
10206 TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) { | 10211 TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) { |
10207 MockRead data_reads[] = { | 10212 MockRead data_reads[] = { |
10208 MockRead("HTTP/1.1 200 OK\r\n"), | 10213 MockRead("HTTP/1.1 200 OK\r\n"), |
(...skipping 17 matching lines...) Expand all Loading... |
10226 SSLSocketDataProvider ssl(ASYNC, OK); | 10231 SSLSocketDataProvider ssl(ASYNC, OK); |
10227 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10232 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
10228 | 10233 |
10229 TestCompletionCallback callback; | 10234 TestCompletionCallback callback; |
10230 | 10235 |
10231 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10236 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10232 std::unique_ptr<HttpTransaction> trans( | 10237 std::unique_ptr<HttpTransaction> trans( |
10233 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10238 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10234 | 10239 |
10235 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10240 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
10236 EXPECT_EQ(ERR_IO_PENDING, rv); | 10241 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10237 | 10242 |
10238 url::SchemeHostPort test_server("https", "www.example.org", 443); | 10243 url::SchemeHostPort test_server("https", "www.example.org", 443); |
10239 HttpServerProperties* http_server_properties = | 10244 HttpServerProperties* http_server_properties = |
10240 session->http_server_properties(); | 10245 session->http_server_properties(); |
10241 AlternativeServiceVector alternative_service_vector = | 10246 AlternativeServiceVector alternative_service_vector = |
10242 http_server_properties->GetAlternativeServices(test_server); | 10247 http_server_properties->GetAlternativeServices(test_server); |
10243 EXPECT_TRUE(alternative_service_vector.empty()); | 10248 EXPECT_TRUE(alternative_service_vector.empty()); |
10244 | 10249 |
10245 EXPECT_EQ(OK, callback.WaitForResult()); | 10250 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10246 | 10251 |
10247 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10252 const HttpResponseInfo* response = trans->GetResponseInfo(); |
10248 ASSERT_TRUE(response); | 10253 ASSERT_TRUE(response); |
10249 ASSERT_TRUE(response->headers); | 10254 ASSERT_TRUE(response->headers); |
10250 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10255 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10251 EXPECT_FALSE(response->was_fetched_via_spdy); | 10256 EXPECT_FALSE(response->was_fetched_via_spdy); |
10252 EXPECT_FALSE(response->was_npn_negotiated); | 10257 EXPECT_FALSE(response->was_npn_negotiated); |
10253 | 10258 |
10254 std::string response_data; | 10259 std::string response_data; |
10255 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10260 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
10256 EXPECT_EQ("hello world", response_data); | 10261 EXPECT_EQ("hello world", response_data); |
10257 | 10262 |
10258 alternative_service_vector = | 10263 alternative_service_vector = |
10259 http_server_properties->GetAlternativeServices(test_server); | 10264 http_server_properties->GetAlternativeServices(test_server); |
10260 ASSERT_EQ(2u, alternative_service_vector.size()); | 10265 ASSERT_EQ(2u, alternative_service_vector.size()); |
10261 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), | 10266 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
10262 alternative_service_vector[0].protocol); | 10267 alternative_service_vector[0].protocol); |
10263 EXPECT_EQ("www.example.com", alternative_service_vector[0].host); | 10268 EXPECT_EQ("www.example.com", alternative_service_vector[0].host); |
10264 EXPECT_EQ(443, alternative_service_vector[0].port); | 10269 EXPECT_EQ(443, alternative_service_vector[0].port); |
10265 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), | 10270 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10437 666); // Port is ignored by MockConnect anyway. | 10442 666); // Port is ignored by MockConnect anyway. |
10438 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10443 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10439 http_server_properties->SetAlternativeService(server, alternative_service, | 10444 http_server_properties->SetAlternativeService(server, alternative_service, |
10440 expiration); | 10445 expiration); |
10441 | 10446 |
10442 std::unique_ptr<HttpTransaction> trans( | 10447 std::unique_ptr<HttpTransaction> trans( |
10443 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10448 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10444 TestCompletionCallback callback; | 10449 TestCompletionCallback callback; |
10445 | 10450 |
10446 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10451 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
10447 EXPECT_EQ(ERR_IO_PENDING, rv); | 10452 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10448 EXPECT_EQ(OK, callback.WaitForResult()); | 10453 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10449 | 10454 |
10450 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10455 const HttpResponseInfo* response = trans->GetResponseInfo(); |
10451 ASSERT_TRUE(response); | 10456 ASSERT_TRUE(response); |
10452 ASSERT_TRUE(response->headers); | 10457 ASSERT_TRUE(response->headers); |
10453 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10458 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10454 | 10459 |
10455 std::string response_data; | 10460 std::string response_data; |
10456 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10461 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
10457 EXPECT_EQ("hello world", response_data); | 10462 EXPECT_EQ("hello world", response_data); |
10458 | 10463 |
10459 const AlternativeServiceVector alternative_service_vector = | 10464 const AlternativeServiceVector alternative_service_vector = |
10460 http_server_properties->GetAlternativeServices(server); | 10465 http_server_properties->GetAlternativeServices(server); |
10461 ASSERT_EQ(1u, alternative_service_vector.size()); | 10466 ASSERT_EQ(1u, alternative_service_vector.size()); |
10462 EXPECT_EQ(alternative_service, alternative_service_vector[0]); | 10467 EXPECT_EQ(alternative_service, alternative_service_vector[0]); |
10463 EXPECT_TRUE(http_server_properties->IsAlternativeServiceBroken( | 10468 EXPECT_TRUE(http_server_properties->IsAlternativeServiceBroken( |
10464 alternative_service_vector[0])); | 10469 alternative_service_vector[0])); |
10465 } | 10470 } |
10466 | 10471 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10505 url::SchemeHostPort(restricted_port_request.url), alternative_service, | 10510 url::SchemeHostPort(restricted_port_request.url), alternative_service, |
10506 expiration); | 10511 expiration); |
10507 | 10512 |
10508 std::unique_ptr<HttpTransaction> trans( | 10513 std::unique_ptr<HttpTransaction> trans( |
10509 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10514 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10510 TestCompletionCallback callback; | 10515 TestCompletionCallback callback; |
10511 | 10516 |
10512 int rv = trans->Start( | 10517 int rv = trans->Start( |
10513 &restricted_port_request, | 10518 &restricted_port_request, |
10514 callback.callback(), BoundNetLog()); | 10519 callback.callback(), BoundNetLog()); |
10515 EXPECT_EQ(ERR_IO_PENDING, rv); | 10520 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10516 // Invalid change to unrestricted port should fail. | 10521 // Invalid change to unrestricted port should fail. |
10517 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); | 10522 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_REFUSED)); |
10518 } | 10523 } |
10519 | 10524 |
10520 // Ensure that we are allowed to redirect traffic via an alternate protocol to | 10525 // Ensure that we are allowed to redirect traffic via an alternate protocol to |
10521 // an unrestricted (port >= 1024) when the original traffic was on a restricted | 10526 // an unrestricted (port >= 1024) when the original traffic was on a restricted |
10522 // port (port < 1024) if we set |enable_user_alternate_protocol_ports|. | 10527 // port (port < 1024) if we set |enable_user_alternate_protocol_ports|. |
10523 TEST_P(HttpNetworkTransactionTest, | 10528 TEST_P(HttpNetworkTransactionTest, |
10524 AlternateProtocolPortRestrictedPermitted) { | 10529 AlternateProtocolPortRestrictedPermitted) { |
10525 session_deps_.enable_user_alternate_protocol_ports = true; | 10530 session_deps_.enable_user_alternate_protocol_ports = true; |
10526 | 10531 |
10527 HttpRequestInfo restricted_port_request; | 10532 HttpRequestInfo restricted_port_request; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10560 expiration); | 10565 expiration); |
10561 | 10566 |
10562 std::unique_ptr<HttpTransaction> trans( | 10567 std::unique_ptr<HttpTransaction> trans( |
10563 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10568 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10564 TestCompletionCallback callback; | 10569 TestCompletionCallback callback; |
10565 | 10570 |
10566 EXPECT_EQ(ERR_IO_PENDING, trans->Start( | 10571 EXPECT_EQ(ERR_IO_PENDING, trans->Start( |
10567 &restricted_port_request, | 10572 &restricted_port_request, |
10568 callback.callback(), BoundNetLog())); | 10573 callback.callback(), BoundNetLog())); |
10569 // Change to unrestricted port should succeed. | 10574 // Change to unrestricted port should succeed. |
10570 EXPECT_EQ(OK, callback.WaitForResult()); | 10575 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10571 } | 10576 } |
10572 | 10577 |
10573 // Ensure that we are not allowed to redirect traffic via an alternate protocol | 10578 // Ensure that we are not allowed to redirect traffic via an alternate protocol |
10574 // to an unrestricted (port >= 1024) when the original traffic was on a | 10579 // to an unrestricted (port >= 1024) when the original traffic was on a |
10575 // restricted port (port < 1024). Ensure that we can redirect in all other | 10580 // restricted port (port < 1024). Ensure that we can redirect in all other |
10576 // cases. | 10581 // cases. |
10577 TEST_P(HttpNetworkTransactionTest, | 10582 TEST_P(HttpNetworkTransactionTest, |
10578 AlternateProtocolPortRestrictedAllowed) { | 10583 AlternateProtocolPortRestrictedAllowed) { |
10579 HttpRequestInfo restricted_port_request; | 10584 HttpRequestInfo restricted_port_request; |
10580 restricted_port_request.method = "GET"; | 10585 restricted_port_request.method = "GET"; |
(...skipping 30 matching lines...) Expand all Loading... |
10611 url::SchemeHostPort(restricted_port_request.url), alternative_service, | 10616 url::SchemeHostPort(restricted_port_request.url), alternative_service, |
10612 expiration); | 10617 expiration); |
10613 | 10618 |
10614 std::unique_ptr<HttpTransaction> trans( | 10619 std::unique_ptr<HttpTransaction> trans( |
10615 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10620 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10616 TestCompletionCallback callback; | 10621 TestCompletionCallback callback; |
10617 | 10622 |
10618 int rv = trans->Start( | 10623 int rv = trans->Start( |
10619 &restricted_port_request, | 10624 &restricted_port_request, |
10620 callback.callback(), BoundNetLog()); | 10625 callback.callback(), BoundNetLog()); |
10621 EXPECT_EQ(ERR_IO_PENDING, rv); | 10626 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10622 // Valid change to restricted port should pass. | 10627 // Valid change to restricted port should pass. |
10623 EXPECT_EQ(OK, callback.WaitForResult()); | 10628 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10624 } | 10629 } |
10625 | 10630 |
10626 // Ensure that we are not allowed to redirect traffic via an alternate protocol | 10631 // Ensure that we are not allowed to redirect traffic via an alternate protocol |
10627 // to an unrestricted (port >= 1024) when the original traffic was on a | 10632 // to an unrestricted (port >= 1024) when the original traffic was on a |
10628 // restricted port (port < 1024). Ensure that we can redirect in all other | 10633 // restricted port (port < 1024). Ensure that we can redirect in all other |
10629 // cases. | 10634 // cases. |
10630 TEST_P(HttpNetworkTransactionTest, | 10635 TEST_P(HttpNetworkTransactionTest, |
10631 AlternateProtocolPortUnrestrictedAllowed1) { | 10636 AlternateProtocolPortUnrestrictedAllowed1) { |
10632 HttpRequestInfo unrestricted_port_request; | 10637 HttpRequestInfo unrestricted_port_request; |
10633 unrestricted_port_request.method = "GET"; | 10638 unrestricted_port_request.method = "GET"; |
(...skipping 29 matching lines...) Expand all Loading... |
10663 http_server_properties->SetAlternativeService( | 10668 http_server_properties->SetAlternativeService( |
10664 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, | 10669 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, |
10665 expiration); | 10670 expiration); |
10666 | 10671 |
10667 std::unique_ptr<HttpTransaction> trans( | 10672 std::unique_ptr<HttpTransaction> trans( |
10668 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10673 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10669 TestCompletionCallback callback; | 10674 TestCompletionCallback callback; |
10670 | 10675 |
10671 int rv = trans->Start( | 10676 int rv = trans->Start( |
10672 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 10677 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
10673 EXPECT_EQ(ERR_IO_PENDING, rv); | 10678 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10674 // Valid change to restricted port should pass. | 10679 // Valid change to restricted port should pass. |
10675 EXPECT_EQ(OK, callback.WaitForResult()); | 10680 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10676 } | 10681 } |
10677 | 10682 |
10678 // Ensure that we are not allowed to redirect traffic via an alternate protocol | 10683 // Ensure that we are not allowed to redirect traffic via an alternate protocol |
10679 // to an unrestricted (port >= 1024) when the original traffic was on a | 10684 // to an unrestricted (port >= 1024) when the original traffic was on a |
10680 // restricted port (port < 1024). Ensure that we can redirect in all other | 10685 // restricted port (port < 1024). Ensure that we can redirect in all other |
10681 // cases. | 10686 // cases. |
10682 TEST_P(HttpNetworkTransactionTest, | 10687 TEST_P(HttpNetworkTransactionTest, |
10683 AlternateProtocolPortUnrestrictedAllowed2) { | 10688 AlternateProtocolPortUnrestrictedAllowed2) { |
10684 HttpRequestInfo unrestricted_port_request; | 10689 HttpRequestInfo unrestricted_port_request; |
10685 unrestricted_port_request.method = "GET"; | 10690 unrestricted_port_request.method = "GET"; |
(...skipping 29 matching lines...) Expand all Loading... |
10715 http_server_properties->SetAlternativeService( | 10720 http_server_properties->SetAlternativeService( |
10716 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, | 10721 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, |
10717 expiration); | 10722 expiration); |
10718 | 10723 |
10719 std::unique_ptr<HttpTransaction> trans( | 10724 std::unique_ptr<HttpTransaction> trans( |
10720 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10725 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10721 TestCompletionCallback callback; | 10726 TestCompletionCallback callback; |
10722 | 10727 |
10723 int rv = trans->Start( | 10728 int rv = trans->Start( |
10724 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 10729 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
10725 EXPECT_EQ(ERR_IO_PENDING, rv); | 10730 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10726 // Valid change to an unrestricted port should pass. | 10731 // Valid change to an unrestricted port should pass. |
10727 EXPECT_EQ(OK, callback.WaitForResult()); | 10732 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10728 } | 10733 } |
10729 | 10734 |
10730 // Ensure that we are not allowed to redirect traffic via an alternate protocol | 10735 // Ensure that we are not allowed to redirect traffic via an alternate protocol |
10731 // to an unsafe port, and that we resume the second HttpStreamFactoryImpl::Job | 10736 // to an unsafe port, and that we resume the second HttpStreamFactoryImpl::Job |
10732 // once the alternate protocol request fails. | 10737 // once the alternate protocol request fails. |
10733 TEST_P(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { | 10738 TEST_P(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { |
10734 HttpRequestInfo request; | 10739 HttpRequestInfo request; |
10735 request.method = "GET"; | 10740 request.method = "GET"; |
10736 request.url = GURL("http://www.example.org/"); | 10741 request.url = GURL("http://www.example.org/"); |
10737 request.load_flags = 0; | 10742 request.load_flags = 0; |
(...skipping 19 matching lines...) Expand all Loading... |
10757 kUnsafePort); | 10762 kUnsafePort); |
10758 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10763 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10759 http_server_properties->SetAlternativeService( | 10764 http_server_properties->SetAlternativeService( |
10760 url::SchemeHostPort(request.url), alternative_service, expiration); | 10765 url::SchemeHostPort(request.url), alternative_service, expiration); |
10761 | 10766 |
10762 std::unique_ptr<HttpTransaction> trans( | 10767 std::unique_ptr<HttpTransaction> trans( |
10763 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10768 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10764 TestCompletionCallback callback; | 10769 TestCompletionCallback callback; |
10765 | 10770 |
10766 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10771 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
10767 EXPECT_EQ(ERR_IO_PENDING, rv); | 10772 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10768 // The HTTP request should succeed. | 10773 // The HTTP request should succeed. |
10769 EXPECT_EQ(OK, callback.WaitForResult()); | 10774 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10770 | 10775 |
10771 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10776 const HttpResponseInfo* response = trans->GetResponseInfo(); |
10772 ASSERT_TRUE(response); | 10777 ASSERT_TRUE(response); |
10773 ASSERT_TRUE(response->headers); | 10778 ASSERT_TRUE(response->headers); |
10774 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10779 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10775 | 10780 |
10776 std::string response_data; | 10781 std::string response_data; |
10777 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10782 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
10778 EXPECT_EQ("hello world", response_data); | 10783 EXPECT_EQ("hello world", response_data); |
10779 } | 10784 } |
10780 | 10785 |
10781 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { | 10786 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
10782 HttpRequestInfo request; | 10787 HttpRequestInfo request; |
10783 request.method = "GET"; | 10788 request.method = "GET"; |
10784 request.url = GURL("https://www.example.org/"); | 10789 request.url = GURL("https://www.example.org/"); |
10785 request.load_flags = 0; | 10790 request.load_flags = 0; |
10786 | 10791 |
10787 std::string alternative_service_http_header = | 10792 std::string alternative_service_http_header = |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10833 session_deps_.socket_factory->AddSocketDataProvider( | 10838 session_deps_.socket_factory->AddSocketDataProvider( |
10834 &hanging_non_alternate_protocol_socket); | 10839 &hanging_non_alternate_protocol_socket); |
10835 | 10840 |
10836 TestCompletionCallback callback; | 10841 TestCompletionCallback callback; |
10837 | 10842 |
10838 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10843 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10839 std::unique_ptr<HttpTransaction> trans( | 10844 std::unique_ptr<HttpTransaction> trans( |
10840 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10845 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10841 | 10846 |
10842 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10847 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
10843 EXPECT_EQ(ERR_IO_PENDING, rv); | 10848 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10844 EXPECT_EQ(OK, callback.WaitForResult()); | 10849 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10845 | 10850 |
10846 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10851 const HttpResponseInfo* response = trans->GetResponseInfo(); |
10847 ASSERT_TRUE(response); | 10852 ASSERT_TRUE(response); |
10848 ASSERT_TRUE(response->headers); | 10853 ASSERT_TRUE(response->headers); |
10849 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10854 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10850 | 10855 |
10851 std::string response_data; | 10856 std::string response_data; |
10852 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10857 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
10853 EXPECT_EQ("hello world", response_data); | 10858 EXPECT_EQ("hello world", response_data); |
10854 | 10859 |
10855 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10860 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
10856 | 10861 |
10857 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10862 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
10858 EXPECT_EQ(ERR_IO_PENDING, rv); | 10863 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10859 EXPECT_EQ(OK, callback.WaitForResult()); | 10864 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10860 | 10865 |
10861 response = trans->GetResponseInfo(); | 10866 response = trans->GetResponseInfo(); |
10862 ASSERT_TRUE(response); | 10867 ASSERT_TRUE(response); |
10863 ASSERT_TRUE(response->headers); | 10868 ASSERT_TRUE(response->headers); |
10864 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 10869 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
10865 EXPECT_TRUE(response->was_fetched_via_spdy); | 10870 EXPECT_TRUE(response->was_fetched_via_spdy); |
10866 EXPECT_TRUE(response->was_npn_negotiated); | 10871 EXPECT_TRUE(response->was_npn_negotiated); |
10867 | 10872 |
10868 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10873 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
10869 EXPECT_EQ("hello!", response_data); | 10874 EXPECT_EQ("hello!", response_data); |
10870 } | 10875 } |
10871 | 10876 |
10872 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { | 10877 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
10873 HttpRequestInfo request; | 10878 HttpRequestInfo request; |
10874 request.method = "GET"; | 10879 request.method = "GET"; |
10875 request.url = GURL("https://www.example.org/"); | 10880 request.url = GURL("https://www.example.org/"); |
10876 request.load_flags = 0; | 10881 request.load_flags = 0; |
10877 | 10882 |
10878 // First transaction receives Alt-Svc header over HTTP/1.1. | 10883 // First transaction receives Alt-Svc header over HTTP/1.1. |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10945 | 10950 |
10946 StaticSocketDataProvider hanging_socket3(NULL, 0, NULL, 0); | 10951 StaticSocketDataProvider hanging_socket3(NULL, 0, NULL, 0); |
10947 hanging_socket3.set_connect_data(never_finishing_connect); | 10952 hanging_socket3.set_connect_data(never_finishing_connect); |
10948 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket3); | 10953 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket3); |
10949 | 10954 |
10950 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10955 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10951 TestCompletionCallback callback1; | 10956 TestCompletionCallback callback1; |
10952 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 10957 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
10953 | 10958 |
10954 int rv = trans1.Start(&request, callback1.callback(), BoundNetLog()); | 10959 int rv = trans1.Start(&request, callback1.callback(), BoundNetLog()); |
10955 EXPECT_EQ(ERR_IO_PENDING, rv); | 10960 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10956 EXPECT_EQ(OK, callback1.WaitForResult()); | 10961 EXPECT_THAT(callback1.WaitForResult(), IsOk()); |
10957 | 10962 |
10958 const HttpResponseInfo* response = trans1.GetResponseInfo(); | 10963 const HttpResponseInfo* response = trans1.GetResponseInfo(); |
10959 ASSERT_TRUE(response); | 10964 ASSERT_TRUE(response); |
10960 ASSERT_TRUE(response->headers); | 10965 ASSERT_TRUE(response->headers); |
10961 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10966 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10962 | 10967 |
10963 std::string response_data; | 10968 std::string response_data; |
10964 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); | 10969 ASSERT_THAT(ReadTransaction(&trans1, &response_data), IsOk()); |
10965 EXPECT_EQ("hello world", response_data); | 10970 EXPECT_EQ("hello world", response_data); |
10966 | 10971 |
10967 TestCompletionCallback callback2; | 10972 TestCompletionCallback callback2; |
10968 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 10973 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
10969 rv = trans2.Start(&request, callback2.callback(), BoundNetLog()); | 10974 rv = trans2.Start(&request, callback2.callback(), BoundNetLog()); |
10970 EXPECT_EQ(ERR_IO_PENDING, rv); | 10975 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10971 | 10976 |
10972 TestCompletionCallback callback3; | 10977 TestCompletionCallback callback3; |
10973 HttpNetworkTransaction trans3(DEFAULT_PRIORITY, session.get()); | 10978 HttpNetworkTransaction trans3(DEFAULT_PRIORITY, session.get()); |
10974 rv = trans3.Start(&request, callback3.callback(), BoundNetLog()); | 10979 rv = trans3.Start(&request, callback3.callback(), BoundNetLog()); |
10975 EXPECT_EQ(ERR_IO_PENDING, rv); | 10980 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10976 | 10981 |
10977 EXPECT_EQ(OK, callback2.WaitForResult()); | 10982 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
10978 EXPECT_EQ(OK, callback3.WaitForResult()); | 10983 EXPECT_THAT(callback3.WaitForResult(), IsOk()); |
10979 | 10984 |
10980 response = trans2.GetResponseInfo(); | 10985 response = trans2.GetResponseInfo(); |
10981 ASSERT_TRUE(response); | 10986 ASSERT_TRUE(response); |
10982 ASSERT_TRUE(response->headers); | 10987 ASSERT_TRUE(response->headers); |
10983 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 10988 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
10984 EXPECT_TRUE(response->was_fetched_via_spdy); | 10989 EXPECT_TRUE(response->was_fetched_via_spdy); |
10985 EXPECT_TRUE(response->was_npn_negotiated); | 10990 EXPECT_TRUE(response->was_npn_negotiated); |
10986 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 10991 ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk()); |
10987 EXPECT_EQ("hello!", response_data); | 10992 EXPECT_EQ("hello!", response_data); |
10988 | 10993 |
10989 response = trans3.GetResponseInfo(); | 10994 response = trans3.GetResponseInfo(); |
10990 ASSERT_TRUE(response); | 10995 ASSERT_TRUE(response); |
10991 ASSERT_TRUE(response->headers); | 10996 ASSERT_TRUE(response->headers); |
10992 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 10997 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
10993 EXPECT_TRUE(response->was_fetched_via_spdy); | 10998 EXPECT_TRUE(response->was_fetched_via_spdy); |
10994 EXPECT_TRUE(response->was_npn_negotiated); | 10999 EXPECT_TRUE(response->was_npn_negotiated); |
10995 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); | 11000 ASSERT_THAT(ReadTransaction(&trans3, &response_data), IsOk()); |
10996 EXPECT_EQ("hello!", response_data); | 11001 EXPECT_EQ("hello!", response_data); |
10997 } | 11002 } |
10998 | 11003 |
10999 TEST_P(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) { | 11004 TEST_P(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) { |
11000 HttpRequestInfo request; | 11005 HttpRequestInfo request; |
11001 request.method = "GET"; | 11006 request.method = "GET"; |
11002 request.url = GURL("https://www.example.org/"); | 11007 request.url = GURL("https://www.example.org/"); |
11003 request.load_flags = 0; | 11008 request.load_flags = 0; |
11004 | 11009 |
11005 std::string alternative_service_http_header = | 11010 std::string alternative_service_http_header = |
(...skipping 29 matching lines...) Expand all Loading... |
11035 session_deps_.socket_factory->AddSocketDataProvider(&second_transaction); | 11040 session_deps_.socket_factory->AddSocketDataProvider(&second_transaction); |
11036 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 11041 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
11037 | 11042 |
11038 TestCompletionCallback callback; | 11043 TestCompletionCallback callback; |
11039 | 11044 |
11040 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11045 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11041 std::unique_ptr<HttpTransaction> trans( | 11046 std::unique_ptr<HttpTransaction> trans( |
11042 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11047 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
11043 | 11048 |
11044 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11049 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
11045 EXPECT_EQ(ERR_IO_PENDING, rv); | 11050 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11046 EXPECT_EQ(OK, callback.WaitForResult()); | 11051 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11047 | 11052 |
11048 const HttpResponseInfo* response = trans->GetResponseInfo(); | 11053 const HttpResponseInfo* response = trans->GetResponseInfo(); |
11049 ASSERT_TRUE(response); | 11054 ASSERT_TRUE(response); |
11050 ASSERT_TRUE(response->headers); | 11055 ASSERT_TRUE(response->headers); |
11051 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 11056 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
11052 | 11057 |
11053 std::string response_data; | 11058 std::string response_data; |
11054 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11059 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
11055 EXPECT_EQ("hello world", response_data); | 11060 EXPECT_EQ("hello world", response_data); |
11056 | 11061 |
11057 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11062 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
11058 | 11063 |
11059 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11064 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
11060 EXPECT_EQ(ERR_IO_PENDING, rv); | 11065 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11061 EXPECT_EQ(OK, callback.WaitForResult()); | 11066 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11062 | 11067 |
11063 response = trans->GetResponseInfo(); | 11068 response = trans->GetResponseInfo(); |
11064 ASSERT_TRUE(response); | 11069 ASSERT_TRUE(response); |
11065 ASSERT_TRUE(response->headers); | 11070 ASSERT_TRUE(response->headers); |
11066 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 11071 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
11067 EXPECT_FALSE(response->was_fetched_via_spdy); | 11072 EXPECT_FALSE(response->was_fetched_via_spdy); |
11068 EXPECT_FALSE(response->was_npn_negotiated); | 11073 EXPECT_FALSE(response->was_npn_negotiated); |
11069 | 11074 |
11070 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11075 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
11071 EXPECT_EQ("hello world", response_data); | 11076 EXPECT_EQ("hello world", response_data); |
11072 } | 11077 } |
11073 | 11078 |
11074 class CapturingProxyResolver : public ProxyResolver { | 11079 class CapturingProxyResolver : public ProxyResolver { |
11075 public: | 11080 public: |
11076 CapturingProxyResolver() {} | 11081 CapturingProxyResolver() {} |
11077 ~CapturingProxyResolver() override {} | 11082 ~CapturingProxyResolver() override {} |
11078 | 11083 |
11079 int GetProxyForURL(const GURL& url, | 11084 int GetProxyForURL(const GURL& url, |
11080 ProxyInfo* results, | 11085 ProxyInfo* results, |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11199 session_deps_.socket_factory->AddSocketDataProvider( | 11204 session_deps_.socket_factory->AddSocketDataProvider( |
11200 &hanging_non_alternate_protocol_socket); | 11205 &hanging_non_alternate_protocol_socket); |
11201 | 11206 |
11202 TestCompletionCallback callback; | 11207 TestCompletionCallback callback; |
11203 | 11208 |
11204 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11209 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11205 std::unique_ptr<HttpTransaction> trans( | 11210 std::unique_ptr<HttpTransaction> trans( |
11206 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11211 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
11207 | 11212 |
11208 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11213 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
11209 EXPECT_EQ(ERR_IO_PENDING, rv); | 11214 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11210 EXPECT_EQ(OK, callback.WaitForResult()); | 11215 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11211 | 11216 |
11212 const HttpResponseInfo* response = trans->GetResponseInfo(); | 11217 const HttpResponseInfo* response = trans->GetResponseInfo(); |
11213 ASSERT_TRUE(response); | 11218 ASSERT_TRUE(response); |
11214 ASSERT_TRUE(response->headers); | 11219 ASSERT_TRUE(response->headers); |
11215 EXPECT_EQ("HTTP/0.9 200 OK", response->headers->GetStatusLine()); | 11220 EXPECT_EQ("HTTP/0.9 200 OK", response->headers->GetStatusLine()); |
11216 EXPECT_FALSE(response->was_fetched_via_spdy); | 11221 EXPECT_FALSE(response->was_fetched_via_spdy); |
11217 EXPECT_TRUE(response->was_npn_negotiated); | 11222 EXPECT_TRUE(response->was_npn_negotiated); |
11218 | 11223 |
11219 std::string response_data; | 11224 std::string response_data; |
11220 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11225 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
11221 EXPECT_EQ("hello world", response_data); | 11226 EXPECT_EQ("hello world", response_data); |
11222 | 11227 |
11223 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11228 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
11224 | 11229 |
11225 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11230 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
11226 EXPECT_EQ(ERR_IO_PENDING, rv); | 11231 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11227 EXPECT_EQ(OK, callback.WaitForResult()); | 11232 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11228 | 11233 |
11229 response = trans->GetResponseInfo(); | 11234 response = trans->GetResponseInfo(); |
11230 ASSERT_TRUE(response); | 11235 ASSERT_TRUE(response); |
11231 ASSERT_TRUE(response->headers); | 11236 ASSERT_TRUE(response->headers); |
11232 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 11237 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
11233 EXPECT_TRUE(response->was_fetched_via_spdy); | 11238 EXPECT_TRUE(response->was_fetched_via_spdy); |
11234 EXPECT_TRUE(response->was_npn_negotiated); | 11239 EXPECT_TRUE(response->was_npn_negotiated); |
11235 | 11240 |
11236 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11241 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
11237 EXPECT_EQ("hello!", response_data); | 11242 EXPECT_EQ("hello!", response_data); |
11238 ASSERT_EQ(2u, capturing_proxy_resolver.resolved().size()); | 11243 ASSERT_EQ(2u, capturing_proxy_resolver.resolved().size()); |
11239 EXPECT_EQ("https://www.example.org/", | 11244 EXPECT_EQ("https://www.example.org/", |
11240 capturing_proxy_resolver.resolved()[0].spec()); | 11245 capturing_proxy_resolver.resolved()[0].spec()); |
11241 EXPECT_EQ("https://www.example.org/", | 11246 EXPECT_EQ("https://www.example.org/", |
11242 capturing_proxy_resolver.resolved()[1].spec()); | 11247 capturing_proxy_resolver.resolved()[1].spec()); |
11243 | 11248 |
11244 LoadTimingInfo load_timing_info; | 11249 LoadTimingInfo load_timing_info; |
11245 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 11250 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
11246 TestLoadTimingNotReusedWithPac(load_timing_info, | 11251 TestLoadTimingNotReusedWithPac(load_timing_info, |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11296 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 11301 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
11297 | 11302 |
11298 TestCompletionCallback callback; | 11303 TestCompletionCallback callback; |
11299 | 11304 |
11300 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11305 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11301 | 11306 |
11302 std::unique_ptr<HttpTransaction> trans( | 11307 std::unique_ptr<HttpTransaction> trans( |
11303 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11308 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
11304 | 11309 |
11305 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11310 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
11306 EXPECT_EQ(ERR_IO_PENDING, rv); | 11311 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11307 EXPECT_EQ(OK, callback.WaitForResult()); | 11312 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11308 | 11313 |
11309 const HttpResponseInfo* response = trans->GetResponseInfo(); | 11314 const HttpResponseInfo* response = trans->GetResponseInfo(); |
11310 ASSERT_TRUE(response); | 11315 ASSERT_TRUE(response); |
11311 ASSERT_TRUE(response->headers); | 11316 ASSERT_TRUE(response->headers); |
11312 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 11317 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
11313 | 11318 |
11314 std::string response_data; | 11319 std::string response_data; |
11315 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11320 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
11316 EXPECT_EQ("hello world", response_data); | 11321 EXPECT_EQ("hello world", response_data); |
11317 | 11322 |
11318 // Set up an initial SpdySession in the pool to reuse. | 11323 // Set up an initial SpdySession in the pool to reuse. |
11319 HostPortPair host_port_pair("www.example.org", 443); | 11324 HostPortPair host_port_pair("www.example.org", 443); |
11320 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 11325 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
11321 PRIVACY_MODE_DISABLED); | 11326 PRIVACY_MODE_DISABLED); |
11322 base::WeakPtr<SpdySession> spdy_session = | 11327 base::WeakPtr<SpdySession> spdy_session = |
11323 CreateSecureSpdySession(session.get(), key, BoundNetLog()); | 11328 CreateSecureSpdySession(session.get(), key, BoundNetLog()); |
11324 | 11329 |
11325 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11330 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
11326 | 11331 |
11327 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11332 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
11328 EXPECT_EQ(ERR_IO_PENDING, rv); | 11333 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11329 EXPECT_EQ(OK, callback.WaitForResult()); | 11334 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11330 | 11335 |
11331 response = trans->GetResponseInfo(); | 11336 response = trans->GetResponseInfo(); |
11332 ASSERT_TRUE(response); | 11337 ASSERT_TRUE(response); |
11333 ASSERT_TRUE(response->headers); | 11338 ASSERT_TRUE(response->headers); |
11334 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 11339 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
11335 EXPECT_TRUE(response->was_fetched_via_spdy); | 11340 EXPECT_TRUE(response->was_fetched_via_spdy); |
11336 EXPECT_TRUE(response->was_npn_negotiated); | 11341 EXPECT_TRUE(response->was_npn_negotiated); |
11337 | 11342 |
11338 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11343 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
11339 EXPECT_EQ("hello!", response_data); | 11344 EXPECT_EQ("hello!", response_data); |
11340 } | 11345 } |
11341 | 11346 |
11342 // GenerateAuthToken is a mighty big test. | 11347 // GenerateAuthToken is a mighty big test. |
11343 // It tests all permutation of GenerateAuthToken behavior: | 11348 // It tests all permutation of GenerateAuthToken behavior: |
11344 // - Synchronous and Asynchronous completion. | 11349 // - Synchronous and Asynchronous completion. |
11345 // - OK or error on completion. | 11350 // - OK or error on completion. |
11346 // - Direct connection, non-authenticating proxy, and authenticating proxy. | 11351 // - Direct connection, non-authenticating proxy, and authenticating proxy. |
11347 // - HTTP or HTTPS backend (to include proxy tunneling). | 11352 // - HTTP or HTTPS backend (to include proxy tunneling). |
11348 // - Non-authenticating and authenticating backend. | 11353 // - Non-authenticating and authenticating backend. |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11863 writes, arraysize(writes)); | 11868 writes, arraysize(writes)); |
11864 session_deps_.socket_factory->AddSocketDataProvider(&data_provider); | 11869 session_deps_.socket_factory->AddSocketDataProvider(&data_provider); |
11865 | 11870 |
11866 const char kSocketGroup[] = "www.example.com:80"; | 11871 const char kSocketGroup[] = "www.example.com:80"; |
11867 | 11872 |
11868 // First round of authentication. | 11873 // First round of authentication. |
11869 auth_handler->SetGenerateExpectation(false, OK); | 11874 auth_handler->SetGenerateExpectation(false, OK); |
11870 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11875 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
11871 if (rv == ERR_IO_PENDING) | 11876 if (rv == ERR_IO_PENDING) |
11872 rv = callback.WaitForResult(); | 11877 rv = callback.WaitForResult(); |
11873 EXPECT_EQ(OK, rv); | 11878 EXPECT_THAT(rv, IsOk()); |
11874 response = trans->GetResponseInfo(); | 11879 response = trans->GetResponseInfo(); |
11875 ASSERT_TRUE(response); | 11880 ASSERT_TRUE(response); |
11876 EXPECT_TRUE(response->auth_challenge); | 11881 EXPECT_TRUE(response->auth_challenge); |
11877 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11882 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
11878 | 11883 |
11879 // In between rounds, another request comes in for the same domain. | 11884 // In between rounds, another request comes in for the same domain. |
11880 // It should not be able to grab the TCP socket that trans has already | 11885 // It should not be able to grab the TCP socket that trans has already |
11881 // claimed. | 11886 // claimed. |
11882 std::unique_ptr<HttpTransaction> trans_compete( | 11887 std::unique_ptr<HttpTransaction> trans_compete( |
11883 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11888 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
11884 TestCompletionCallback callback_compete; | 11889 TestCompletionCallback callback_compete; |
11885 rv = trans_compete->Start( | 11890 rv = trans_compete->Start( |
11886 &request, callback_compete.callback(), BoundNetLog()); | 11891 &request, callback_compete.callback(), BoundNetLog()); |
11887 EXPECT_EQ(ERR_IO_PENDING, rv); | 11892 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11888 // callback_compete.WaitForResult at this point would stall forever, | 11893 // callback_compete.WaitForResult at this point would stall forever, |
11889 // since the HttpNetworkTransaction does not release the request back to | 11894 // since the HttpNetworkTransaction does not release the request back to |
11890 // the pool until after authentication completes. | 11895 // the pool until after authentication completes. |
11891 | 11896 |
11892 // Second round of authentication. | 11897 // Second round of authentication. |
11893 auth_handler->SetGenerateExpectation(false, OK); | 11898 auth_handler->SetGenerateExpectation(false, OK); |
11894 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback.callback()); | 11899 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback.callback()); |
11895 if (rv == ERR_IO_PENDING) | 11900 if (rv == ERR_IO_PENDING) |
11896 rv = callback.WaitForResult(); | 11901 rv = callback.WaitForResult(); |
11897 EXPECT_EQ(OK, rv); | 11902 EXPECT_THAT(rv, IsOk()); |
11898 response = trans->GetResponseInfo(); | 11903 response = trans->GetResponseInfo(); |
11899 ASSERT_TRUE(response); | 11904 ASSERT_TRUE(response); |
11900 EXPECT_FALSE(response->auth_challenge); | 11905 EXPECT_FALSE(response->auth_challenge); |
11901 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11906 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
11902 | 11907 |
11903 // Third round of authentication. | 11908 // Third round of authentication. |
11904 auth_handler->SetGenerateExpectation(false, OK); | 11909 auth_handler->SetGenerateExpectation(false, OK); |
11905 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 11910 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
11906 if (rv == ERR_IO_PENDING) | 11911 if (rv == ERR_IO_PENDING) |
11907 rv = callback.WaitForResult(); | 11912 rv = callback.WaitForResult(); |
11908 EXPECT_EQ(OK, rv); | 11913 EXPECT_THAT(rv, IsOk()); |
11909 response = trans->GetResponseInfo(); | 11914 response = trans->GetResponseInfo(); |
11910 ASSERT_TRUE(response); | 11915 ASSERT_TRUE(response); |
11911 EXPECT_FALSE(response->auth_challenge); | 11916 EXPECT_FALSE(response->auth_challenge); |
11912 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11917 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
11913 | 11918 |
11914 // Fourth round of authentication, which completes successfully. | 11919 // Fourth round of authentication, which completes successfully. |
11915 auth_handler->SetGenerateExpectation(false, OK); | 11920 auth_handler->SetGenerateExpectation(false, OK); |
11916 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 11921 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
11917 if (rv == ERR_IO_PENDING) | 11922 if (rv == ERR_IO_PENDING) |
11918 rv = callback.WaitForResult(); | 11923 rv = callback.WaitForResult(); |
11919 EXPECT_EQ(OK, rv); | 11924 EXPECT_THAT(rv, IsOk()); |
11920 response = trans->GetResponseInfo(); | 11925 response = trans->GetResponseInfo(); |
11921 ASSERT_TRUE(response); | 11926 ASSERT_TRUE(response); |
11922 EXPECT_FALSE(response->auth_challenge); | 11927 EXPECT_FALSE(response->auth_challenge); |
11923 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11928 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
11924 | 11929 |
11925 // Read the body since the fourth round was successful. This will also | 11930 // Read the body since the fourth round was successful. This will also |
11926 // release the socket back to the pool. | 11931 // release the socket back to the pool. |
11927 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(50)); | 11932 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(50)); |
11928 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 11933 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
11929 if (rv == ERR_IO_PENDING) | 11934 if (rv == ERR_IO_PENDING) |
11930 rv = callback.WaitForResult(); | 11935 rv = callback.WaitForResult(); |
11931 EXPECT_EQ(3, rv); | 11936 EXPECT_EQ(3, rv); |
11932 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 11937 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
11933 EXPECT_EQ(0, rv); | 11938 EXPECT_EQ(0, rv); |
11934 // There are still 0 idle sockets, since the trans_compete transaction | 11939 // There are still 0 idle sockets, since the trans_compete transaction |
11935 // will be handed it immediately after trans releases it to the group. | 11940 // will be handed it immediately after trans releases it to the group. |
11936 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11941 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
11937 | 11942 |
11938 // The competing request can now finish. Wait for the headers and then | 11943 // The competing request can now finish. Wait for the headers and then |
11939 // read the body. | 11944 // read the body. |
11940 rv = callback_compete.WaitForResult(); | 11945 rv = callback_compete.WaitForResult(); |
11941 EXPECT_EQ(OK, rv); | 11946 EXPECT_THAT(rv, IsOk()); |
11942 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); | 11947 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); |
11943 if (rv == ERR_IO_PENDING) | 11948 if (rv == ERR_IO_PENDING) |
11944 rv = callback.WaitForResult(); | 11949 rv = callback.WaitForResult(); |
11945 EXPECT_EQ(3, rv); | 11950 EXPECT_EQ(3, rv); |
11946 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); | 11951 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); |
11947 EXPECT_EQ(0, rv); | 11952 EXPECT_EQ(0, rv); |
11948 | 11953 |
11949 // Finally, the socket is released to the group. | 11954 // Finally, the socket is released to the group. |
11950 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11955 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
11951 } | 11956 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11986 session_deps_.socket_factory->AddSocketDataProvider(&data); | 11991 session_deps_.socket_factory->AddSocketDataProvider(&data); |
11987 | 11992 |
11988 TestCompletionCallback callback; | 11993 TestCompletionCallback callback; |
11989 | 11994 |
11990 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11995 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11991 std::unique_ptr<HttpTransaction> trans( | 11996 std::unique_ptr<HttpTransaction> trans( |
11992 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11997 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
11993 | 11998 |
11994 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11999 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
11995 | 12000 |
11996 EXPECT_EQ(ERR_IO_PENDING, rv); | 12001 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11997 EXPECT_EQ(OK, callback.WaitForResult()); | 12002 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11998 | 12003 |
11999 const HttpResponseInfo* response = trans->GetResponseInfo(); | 12004 const HttpResponseInfo* response = trans->GetResponseInfo(); |
12000 ASSERT_TRUE(response); | 12005 ASSERT_TRUE(response); |
12001 ASSERT_TRUE(response->headers); | 12006 ASSERT_TRUE(response->headers); |
12002 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 12007 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
12003 | 12008 |
12004 std::string response_data; | 12009 std::string response_data; |
12005 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 12010 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
12006 EXPECT_EQ("hello world", response_data); | 12011 EXPECT_EQ("hello world", response_data); |
12007 | 12012 |
12008 EXPECT_FALSE(response->was_fetched_via_spdy); | 12013 EXPECT_FALSE(response->was_fetched_via_spdy); |
12009 EXPECT_TRUE(response->was_npn_negotiated); | 12014 EXPECT_TRUE(response->was_npn_negotiated); |
12010 } | 12015 } |
12011 | 12016 |
12012 // Simulate the SSL handshake completing with an NPN negotiation followed by an | 12017 // Simulate the SSL handshake completing with an NPN negotiation followed by an |
12013 // immediate server closing of the socket. | 12018 // immediate server closing of the socket. |
12014 // Regression test for https://crbug.com/46369. | 12019 // Regression test for https://crbug.com/46369. |
12015 TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { | 12020 TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { |
(...skipping 18 matching lines...) Expand all Loading... |
12034 arraysize(spdy_writes)); | 12039 arraysize(spdy_writes)); |
12035 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 12040 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
12036 | 12041 |
12037 TestCompletionCallback callback; | 12042 TestCompletionCallback callback; |
12038 | 12043 |
12039 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12044 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12040 std::unique_ptr<HttpTransaction> trans( | 12045 std::unique_ptr<HttpTransaction> trans( |
12041 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12046 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12042 | 12047 |
12043 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12048 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
12044 EXPECT_EQ(ERR_IO_PENDING, rv); | 12049 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12045 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 12050 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); |
12046 } | 12051 } |
12047 | 12052 |
12048 // A subclass of HttpAuthHandlerMock that records the request URL when | 12053 // A subclass of HttpAuthHandlerMock that records the request URL when |
12049 // it gets it. This is needed since the auth handler may get destroyed | 12054 // it gets it. This is needed since the auth handler may get destroyed |
12050 // before we get a chance to query it. | 12055 // before we get a chance to query it. |
12051 class UrlRecordingHttpAuthHandlerMock : public HttpAuthHandlerMock { | 12056 class UrlRecordingHttpAuthHandlerMock : public HttpAuthHandlerMock { |
12052 public: | 12057 public: |
12053 explicit UrlRecordingHttpAuthHandlerMock(GURL* url) : url_(url) {} | 12058 explicit UrlRecordingHttpAuthHandlerMock(GURL* url) : url_(url) {} |
12054 | 12059 |
12055 ~UrlRecordingHttpAuthHandlerMock() override {} | 12060 ~UrlRecordingHttpAuthHandlerMock() override {} |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12094 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12099 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12095 | 12100 |
12096 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 12101 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
12097 data.set_connect_data(mock_connect); | 12102 data.set_connect_data(mock_connect); |
12098 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12103 session_deps_.socket_factory->AddSocketDataProvider(&data); |
12099 | 12104 |
12100 TestCompletionCallback callback; | 12105 TestCompletionCallback callback; |
12101 | 12106 |
12102 BoundTestNetLog log; | 12107 BoundTestNetLog log; |
12103 int rv = trans->Start(&request, callback.callback(), log.bound()); | 12108 int rv = trans->Start(&request, callback.callback(), log.bound()); |
12104 EXPECT_EQ(ERR_IO_PENDING, rv); | 12109 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12105 trans.reset(); // Cancel the transaction here. | 12110 trans.reset(); // Cancel the transaction here. |
12106 | 12111 |
12107 base::RunLoop().RunUntilIdle(); | 12112 base::RunLoop().RunUntilIdle(); |
12108 } | 12113 } |
12109 | 12114 |
12110 // Test that if a transaction is cancelled after receiving the headers, the | 12115 // Test that if a transaction is cancelled after receiving the headers, the |
12111 // stream is drained properly and added back to the socket pool. The main | 12116 // stream is drained properly and added back to the socket pool. The main |
12112 // purpose of this test is to make sure that an HttpStreamParser can be read | 12117 // purpose of this test is to make sure that an HttpStreamParser can be read |
12113 // from after the HttpNetworkTransaction and the objects it owns have been | 12118 // from after the HttpNetworkTransaction and the objects it owns have been |
12114 // deleted. | 12119 // deleted. |
(...skipping 17 matching lines...) Expand all Loading... |
12132 { | 12137 { |
12133 HttpRequestInfo request; | 12138 HttpRequestInfo request; |
12134 request.method = "GET"; | 12139 request.method = "GET"; |
12135 request.url = GURL("http://www.example.org/"); | 12140 request.url = GURL("http://www.example.org/"); |
12136 request.load_flags = 0; | 12141 request.load_flags = 0; |
12137 | 12142 |
12138 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 12143 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
12139 TestCompletionCallback callback; | 12144 TestCompletionCallback callback; |
12140 | 12145 |
12141 int rv = trans.Start(&request, callback.callback(), BoundNetLog()); | 12146 int rv = trans.Start(&request, callback.callback(), BoundNetLog()); |
12142 EXPECT_EQ(ERR_IO_PENDING, rv); | 12147 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12143 callback.WaitForResult(); | 12148 callback.WaitForResult(); |
12144 | 12149 |
12145 const HttpResponseInfo* response = trans.GetResponseInfo(); | 12150 const HttpResponseInfo* response = trans.GetResponseInfo(); |
12146 ASSERT_TRUE(response); | 12151 ASSERT_TRUE(response); |
12147 EXPECT_TRUE(response->headers); | 12152 EXPECT_TRUE(response->headers); |
12148 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 12153 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
12149 | 12154 |
12150 // The transaction and HttpRequestInfo are deleted. | 12155 // The transaction and HttpRequestInfo are deleted. |
12151 } | 12156 } |
12152 | 12157 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12190 TestCompletionCallback callback1; | 12195 TestCompletionCallback callback1; |
12191 | 12196 |
12192 std::unique_ptr<HttpTransaction> trans( | 12197 std::unique_ptr<HttpTransaction> trans( |
12193 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12198 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12194 BeforeHeadersSentHandler headers_handler; | 12199 BeforeHeadersSentHandler headers_handler; |
12195 trans->SetBeforeHeadersSentCallback( | 12200 trans->SetBeforeHeadersSentCallback( |
12196 base::Bind(&BeforeHeadersSentHandler::OnBeforeHeadersSent, | 12201 base::Bind(&BeforeHeadersSentHandler::OnBeforeHeadersSent, |
12197 base::Unretained(&headers_handler))); | 12202 base::Unretained(&headers_handler))); |
12198 | 12203 |
12199 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 12204 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
12200 EXPECT_EQ(ERR_IO_PENDING, rv); | 12205 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12201 | 12206 |
12202 rv = callback1.WaitForResult(); | 12207 rv = callback1.WaitForResult(); |
12203 EXPECT_EQ(OK, rv); | 12208 EXPECT_THAT(rv, IsOk()); |
12204 | 12209 |
12205 const HttpResponseInfo* response = trans->GetResponseInfo(); | 12210 const HttpResponseInfo* response = trans->GetResponseInfo(); |
12206 ASSERT_TRUE(response); | 12211 ASSERT_TRUE(response); |
12207 | 12212 |
12208 EXPECT_TRUE(response->headers->IsKeepAlive()); | 12213 EXPECT_TRUE(response->headers->IsKeepAlive()); |
12209 EXPECT_EQ(200, response->headers->response_code()); | 12214 EXPECT_EQ(200, response->headers->response_code()); |
12210 EXPECT_EQ(100, response->headers->GetContentLength()); | 12215 EXPECT_EQ(100, response->headers->GetContentLength()); |
12211 EXPECT_TRUE(response->was_fetched_via_proxy); | 12216 EXPECT_TRUE(response->was_fetched_via_proxy); |
12212 EXPECT_TRUE( | 12217 EXPECT_TRUE( |
12213 response->proxy_server.Equals(HostPortPair::FromString("myproxy:70"))); | 12218 response->proxy_server.Equals(HostPortPair::FromString("myproxy:70"))); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12263 TestCompletionCallback callback1; | 12268 TestCompletionCallback callback1; |
12264 | 12269 |
12265 std::unique_ptr<HttpTransaction> trans( | 12270 std::unique_ptr<HttpTransaction> trans( |
12266 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12271 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12267 BeforeHeadersSentHandler headers_handler; | 12272 BeforeHeadersSentHandler headers_handler; |
12268 trans->SetBeforeHeadersSentCallback( | 12273 trans->SetBeforeHeadersSentCallback( |
12269 base::Bind(&BeforeHeadersSentHandler::OnBeforeHeadersSent, | 12274 base::Bind(&BeforeHeadersSentHandler::OnBeforeHeadersSent, |
12270 base::Unretained(&headers_handler))); | 12275 base::Unretained(&headers_handler))); |
12271 | 12276 |
12272 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 12277 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
12273 EXPECT_EQ(ERR_IO_PENDING, rv); | 12278 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12274 | 12279 |
12275 rv = callback1.WaitForResult(); | 12280 rv = callback1.WaitForResult(); |
12276 EXPECT_EQ(OK, rv); | 12281 EXPECT_THAT(rv, IsOk()); |
12277 TestNetLogEntry::List entries; | 12282 TestNetLogEntry::List entries; |
12278 log.GetEntries(&entries); | 12283 log.GetEntries(&entries); |
12279 size_t pos = ExpectLogContainsSomewhere( | 12284 size_t pos = ExpectLogContainsSomewhere( |
12280 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 12285 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
12281 NetLog::PHASE_NONE); | 12286 NetLog::PHASE_NONE); |
12282 ExpectLogContainsSomewhere( | 12287 ExpectLogContainsSomewhere( |
12283 entries, pos, | 12288 entries, pos, |
12284 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 12289 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
12285 NetLog::PHASE_NONE); | 12290 NetLog::PHASE_NONE); |
12286 | 12291 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12342 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 12347 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
12343 SSLSocketDataProvider ssl(ASYNC, OK); | 12348 SSLSocketDataProvider ssl(ASYNC, OK); |
12344 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 12349 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
12345 | 12350 |
12346 TestCompletionCallback callback1; | 12351 TestCompletionCallback callback1; |
12347 | 12352 |
12348 std::unique_ptr<HttpTransaction> trans( | 12353 std::unique_ptr<HttpTransaction> trans( |
12349 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12354 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12350 | 12355 |
12351 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 12356 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
12352 EXPECT_EQ(ERR_IO_PENDING, rv); | 12357 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12353 | 12358 |
12354 rv = callback1.WaitForResult(); | 12359 rv = callback1.WaitForResult(); |
12355 EXPECT_EQ(OK, rv); | 12360 EXPECT_THAT(rv, IsOk()); |
12356 TestNetLogEntry::List entries; | 12361 TestNetLogEntry::List entries; |
12357 log.GetEntries(&entries); | 12362 log.GetEntries(&entries); |
12358 size_t pos = ExpectLogContainsSomewhere( | 12363 size_t pos = ExpectLogContainsSomewhere( |
12359 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 12364 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
12360 NetLog::PHASE_NONE); | 12365 NetLog::PHASE_NONE); |
12361 ExpectLogContainsSomewhere( | 12366 ExpectLogContainsSomewhere( |
12362 entries, pos, NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 12367 entries, pos, NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
12363 NetLog::PHASE_NONE); | 12368 NetLog::PHASE_NONE); |
12364 | 12369 |
12365 const HttpResponseInfo* response = trans->GetResponseInfo(); | 12370 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12413 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 12418 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
12414 SSLSocketDataProvider ssl(ASYNC, OK); | 12419 SSLSocketDataProvider ssl(ASYNC, OK); |
12415 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 12420 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
12416 | 12421 |
12417 TestCompletionCallback callback1; | 12422 TestCompletionCallback callback1; |
12418 | 12423 |
12419 std::unique_ptr<HttpTransaction> trans( | 12424 std::unique_ptr<HttpTransaction> trans( |
12420 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12425 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12421 | 12426 |
12422 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 12427 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
12423 EXPECT_EQ(ERR_IO_PENDING, rv); | 12428 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12424 | 12429 |
12425 rv = callback1.WaitForResult(); | 12430 rv = callback1.WaitForResult(); |
12426 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); | 12431 EXPECT_THAT(rv, IsError(ERR_EMPTY_RESPONSE)); |
12427 TestNetLogEntry::List entries; | 12432 TestNetLogEntry::List entries; |
12428 log.GetEntries(&entries); | 12433 log.GetEntries(&entries); |
12429 size_t pos = ExpectLogContainsSomewhere( | 12434 size_t pos = ExpectLogContainsSomewhere( |
12430 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 12435 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
12431 NetLog::PHASE_NONE); | 12436 NetLog::PHASE_NONE); |
12432 ExpectLogContainsSomewhere( | 12437 ExpectLogContainsSomewhere( |
12433 entries, pos, | 12438 entries, pos, |
12434 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 12439 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
12435 NetLog::PHASE_NONE); | 12440 NetLog::PHASE_NONE); |
12436 } | 12441 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12472 request.load_flags = 0; | 12477 request.load_flags = 0; |
12473 | 12478 |
12474 // This is the important line that marks this as a preconnect. | 12479 // This is the important line that marks this as a preconnect. |
12475 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; | 12480 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; |
12476 | 12481 |
12477 std::unique_ptr<HttpTransaction> trans( | 12482 std::unique_ptr<HttpTransaction> trans( |
12478 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12483 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12479 | 12484 |
12480 TestCompletionCallback callback; | 12485 TestCompletionCallback callback; |
12481 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12486 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
12482 EXPECT_EQ(ERR_IO_PENDING, rv); | 12487 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12483 EXPECT_EQ(OK, callback.WaitForResult()); | 12488 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
12484 } | 12489 } |
12485 | 12490 |
12486 // Given a net error, cause that error to be returned from the first Write() | 12491 // Given a net error, cause that error to be returned from the first Write() |
12487 // call and verify that the HttpTransaction fails with that error. | 12492 // call and verify that the HttpTransaction fails with that error. |
12488 void HttpNetworkTransactionTest::CheckErrorIsPassedBack( | 12493 void HttpNetworkTransactionTest::CheckErrorIsPassedBack( |
12489 int error, IoMode mode) { | 12494 int error, IoMode mode) { |
12490 HttpRequestInfo request_info; | 12495 HttpRequestInfo request_info; |
12491 request_info.url = GURL("https://www.example.com/"); | 12496 request_info.url = GURL("https://www.example.com/"); |
12492 request_info.method = "GET"; | 12497 request_info.method = "GET"; |
12493 request_info.load_flags = LOAD_NORMAL; | 12498 request_info.load_flags = LOAD_NORMAL; |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12587 StaticSocketDataProvider data4(NULL, 0, NULL, 0); | 12592 StaticSocketDataProvider data4(NULL, 0, NULL, 0); |
12588 session_deps_.socket_factory->AddSocketDataProvider(&data4); | 12593 session_deps_.socket_factory->AddSocketDataProvider(&data4); |
12589 | 12594 |
12590 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12595 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12591 std::unique_ptr<HttpTransaction> trans( | 12596 std::unique_ptr<HttpTransaction> trans( |
12592 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12597 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12593 | 12598 |
12594 // Begin the SSL handshake with the peer. This consumes ssl_data1. | 12599 // Begin the SSL handshake with the peer. This consumes ssl_data1. |
12595 TestCompletionCallback callback; | 12600 TestCompletionCallback callback; |
12596 int rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); | 12601 int rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); |
12597 ASSERT_EQ(ERR_IO_PENDING, rv); | 12602 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
12598 | 12603 |
12599 // Complete the SSL handshake, which should abort due to requiring a | 12604 // Complete the SSL handshake, which should abort due to requiring a |
12600 // client certificate. | 12605 // client certificate. |
12601 rv = callback.WaitForResult(); | 12606 rv = callback.WaitForResult(); |
12602 ASSERT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); | 12607 ASSERT_THAT(rv, IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
12603 | 12608 |
12604 // Indicate that no certificate should be supplied. From the perspective | 12609 // Indicate that no certificate should be supplied. From the perspective |
12605 // of SSLClientCertCache, NULL is just as meaningful as a real | 12610 // of SSLClientCertCache, NULL is just as meaningful as a real |
12606 // certificate, so this is the same as supply a | 12611 // certificate, so this is the same as supply a |
12607 // legitimate-but-unacceptable certificate. | 12612 // legitimate-but-unacceptable certificate. |
12608 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); | 12613 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); |
12609 ASSERT_EQ(ERR_IO_PENDING, rv); | 12614 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
12610 | 12615 |
12611 // Ensure the certificate was added to the client auth cache before | 12616 // Ensure the certificate was added to the client auth cache before |
12612 // allowing the connection to continue restarting. | 12617 // allowing the connection to continue restarting. |
12613 scoped_refptr<X509Certificate> client_cert; | 12618 scoped_refptr<X509Certificate> client_cert; |
12614 scoped_refptr<SSLPrivateKey> client_private_key; | 12619 scoped_refptr<SSLPrivateKey> client_private_key; |
12615 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( | 12620 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( |
12616 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); | 12621 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); |
12617 ASSERT_FALSE(client_cert); | 12622 ASSERT_FALSE(client_cert); |
12618 | 12623 |
12619 // Restart the handshake. This will consume ssl_data2, which fails, and | 12624 // Restart the handshake. This will consume ssl_data2, which fails, and |
12620 // then consume ssl_data3 and ssl_data4, both of which should also fail. | 12625 // then consume ssl_data3 and ssl_data4, both of which should also fail. |
12621 // The result code is checked against what ssl_data4 should return. | 12626 // The result code is checked against what ssl_data4 should return. |
12622 rv = callback.WaitForResult(); | 12627 rv = callback.WaitForResult(); |
12623 ASSERT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); | 12628 ASSERT_THAT(rv, IsError(ERR_SSL_PROTOCOL_ERROR)); |
12624 | 12629 |
12625 // Ensure that the client certificate is removed from the cache on a | 12630 // Ensure that the client certificate is removed from the cache on a |
12626 // handshake failure. | 12631 // handshake failure. |
12627 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 12632 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
12628 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); | 12633 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); |
12629 } | 12634 } |
12630 | 12635 |
12631 // Ensure that a client certificate is removed from the SSL client auth | 12636 // Ensure that a client certificate is removed from the SSL client auth |
12632 // cache when: | 12637 // cache when: |
12633 // 1) No proxy is involved. | 12638 // 1) No proxy is involved. |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12705 StaticSocketDataProvider data5(data2_reads, arraysize(data2_reads), NULL, 0); | 12710 StaticSocketDataProvider data5(data2_reads, arraysize(data2_reads), NULL, 0); |
12706 session_deps_.socket_factory->AddSocketDataProvider(&data5); | 12711 session_deps_.socket_factory->AddSocketDataProvider(&data5); |
12707 | 12712 |
12708 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12713 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12709 std::unique_ptr<HttpTransaction> trans( | 12714 std::unique_ptr<HttpTransaction> trans( |
12710 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12715 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12711 | 12716 |
12712 // Begin the initial SSL handshake. | 12717 // Begin the initial SSL handshake. |
12713 TestCompletionCallback callback; | 12718 TestCompletionCallback callback; |
12714 int rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); | 12719 int rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); |
12715 ASSERT_EQ(ERR_IO_PENDING, rv); | 12720 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
12716 | 12721 |
12717 // Complete the SSL handshake, which should abort due to requiring a | 12722 // Complete the SSL handshake, which should abort due to requiring a |
12718 // client certificate. | 12723 // client certificate. |
12719 rv = callback.WaitForResult(); | 12724 rv = callback.WaitForResult(); |
12720 ASSERT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); | 12725 ASSERT_THAT(rv, IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
12721 | 12726 |
12722 // Indicate that no certificate should be supplied. From the perspective | 12727 // Indicate that no certificate should be supplied. From the perspective |
12723 // of SSLClientCertCache, NULL is just as meaningful as a real | 12728 // of SSLClientCertCache, NULL is just as meaningful as a real |
12724 // certificate, so this is the same as supply a | 12729 // certificate, so this is the same as supply a |
12725 // legitimate-but-unacceptable certificate. | 12730 // legitimate-but-unacceptable certificate. |
12726 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); | 12731 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); |
12727 ASSERT_EQ(ERR_IO_PENDING, rv); | 12732 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
12728 | 12733 |
12729 // Ensure the certificate was added to the client auth cache before | 12734 // Ensure the certificate was added to the client auth cache before |
12730 // allowing the connection to continue restarting. | 12735 // allowing the connection to continue restarting. |
12731 scoped_refptr<X509Certificate> client_cert; | 12736 scoped_refptr<X509Certificate> client_cert; |
12732 scoped_refptr<SSLPrivateKey> client_private_key; | 12737 scoped_refptr<SSLPrivateKey> client_private_key; |
12733 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( | 12738 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( |
12734 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); | 12739 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); |
12735 ASSERT_FALSE(client_cert); | 12740 ASSERT_FALSE(client_cert); |
12736 | 12741 |
12737 // Restart the handshake. This will consume ssl_data2, which fails, and | 12742 // Restart the handshake. This will consume ssl_data2, which fails, and |
12738 // then consume ssl_data3 and ssl_data4, both of which should also fail. | 12743 // then consume ssl_data3 and ssl_data4, both of which should also fail. |
12739 // The result code is checked against what ssl_data4 should return. | 12744 // The result code is checked against what ssl_data4 should return. |
12740 rv = callback.WaitForResult(); | 12745 rv = callback.WaitForResult(); |
12741 ASSERT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); | 12746 ASSERT_THAT(rv, IsError(ERR_SSL_PROTOCOL_ERROR)); |
12742 | 12747 |
12743 // Ensure that the client certificate is removed from the cache on a | 12748 // Ensure that the client certificate is removed from the cache on a |
12744 // handshake failure. | 12749 // handshake failure. |
12745 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 12750 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
12746 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); | 12751 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); |
12747 } | 12752 } |
12748 | 12753 |
12749 // Ensure that a client certificate is removed from the SSL client auth | 12754 // Ensure that a client certificate is removed from the SSL client auth |
12750 // cache when: | 12755 // cache when: |
12751 // 1) An HTTPS proxy is involved. | 12756 // 1) An HTTPS proxy is involved. |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12798 | 12803 |
12799 for (size_t i = 0; i < arraysize(requests); ++i) { | 12804 for (size_t i = 0; i < arraysize(requests); ++i) { |
12800 session_deps_.socket_factory->ResetNextMockIndexes(); | 12805 session_deps_.socket_factory->ResetNextMockIndexes(); |
12801 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12806 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12802 std::unique_ptr<HttpNetworkTransaction> trans( | 12807 std::unique_ptr<HttpNetworkTransaction> trans( |
12803 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12808 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12804 | 12809 |
12805 // Begin the SSL handshake with the proxy. | 12810 // Begin the SSL handshake with the proxy. |
12806 TestCompletionCallback callback; | 12811 TestCompletionCallback callback; |
12807 int rv = trans->Start(&requests[i], callback.callback(), BoundNetLog()); | 12812 int rv = trans->Start(&requests[i], callback.callback(), BoundNetLog()); |
12808 ASSERT_EQ(ERR_IO_PENDING, rv); | 12813 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
12809 | 12814 |
12810 // Complete the SSL handshake, which should abort due to requiring a | 12815 // Complete the SSL handshake, which should abort due to requiring a |
12811 // client certificate. | 12816 // client certificate. |
12812 rv = callback.WaitForResult(); | 12817 rv = callback.WaitForResult(); |
12813 ASSERT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); | 12818 ASSERT_THAT(rv, IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
12814 | 12819 |
12815 // Indicate that no certificate should be supplied. From the perspective | 12820 // Indicate that no certificate should be supplied. From the perspective |
12816 // of SSLClientCertCache, NULL is just as meaningful as a real | 12821 // of SSLClientCertCache, NULL is just as meaningful as a real |
12817 // certificate, so this is the same as supply a | 12822 // certificate, so this is the same as supply a |
12818 // legitimate-but-unacceptable certificate. | 12823 // legitimate-but-unacceptable certificate. |
12819 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); | 12824 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); |
12820 ASSERT_EQ(ERR_IO_PENDING, rv); | 12825 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
12821 | 12826 |
12822 // Ensure the certificate was added to the client auth cache before | 12827 // Ensure the certificate was added to the client auth cache before |
12823 // allowing the connection to continue restarting. | 12828 // allowing the connection to continue restarting. |
12824 scoped_refptr<X509Certificate> client_cert; | 12829 scoped_refptr<X509Certificate> client_cert; |
12825 scoped_refptr<SSLPrivateKey> client_private_key; | 12830 scoped_refptr<SSLPrivateKey> client_private_key; |
12826 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( | 12831 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( |
12827 HostPortPair("proxy", 70), &client_cert, &client_private_key)); | 12832 HostPortPair("proxy", 70), &client_cert, &client_private_key)); |
12828 ASSERT_FALSE(client_cert); | 12833 ASSERT_FALSE(client_cert); |
12829 // Ensure the certificate was NOT cached for the endpoint. This only | 12834 // Ensure the certificate was NOT cached for the endpoint. This only |
12830 // applies to HTTPS requests, but is fine to check for HTTP requests. | 12835 // applies to HTTPS requests, but is fine to check for HTTP requests. |
12831 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 12836 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
12832 HostPortPair("www.example.com", 443), &client_cert, | 12837 HostPortPair("www.example.com", 443), &client_cert, |
12833 &client_private_key)); | 12838 &client_private_key)); |
12834 | 12839 |
12835 // Restart the handshake. This will consume ssl_data2, which fails, and | 12840 // Restart the handshake. This will consume ssl_data2, which fails, and |
12836 // then consume ssl_data3, which should also fail. The result code is | 12841 // then consume ssl_data3, which should also fail. The result code is |
12837 // checked against what ssl_data3 should return. | 12842 // checked against what ssl_data3 should return. |
12838 rv = callback.WaitForResult(); | 12843 rv = callback.WaitForResult(); |
12839 ASSERT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 12844 ASSERT_THAT(rv, IsError(ERR_PROXY_CONNECTION_FAILED)); |
12840 | 12845 |
12841 // Now that the new handshake has failed, ensure that the client | 12846 // Now that the new handshake has failed, ensure that the client |
12842 // certificate was removed from the client auth cache. | 12847 // certificate was removed from the client auth cache. |
12843 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 12848 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
12844 HostPortPair("proxy", 70), &client_cert, &client_private_key)); | 12849 HostPortPair("proxy", 70), &client_cert, &client_private_key)); |
12845 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 12850 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
12846 HostPortPair("www.example.com", 443), &client_cert, | 12851 HostPortPair("www.example.com", 443), &client_cert, |
12847 &client_private_key)); | 12852 &client_private_key)); |
12848 } | 12853 } |
12849 } | 12854 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12890 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 12895 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
12891 | 12896 |
12892 TestCompletionCallback callback; | 12897 TestCompletionCallback callback; |
12893 HttpRequestInfo request1; | 12898 HttpRequestInfo request1; |
12894 request1.method = "GET"; | 12899 request1.method = "GET"; |
12895 request1.url = GURL("https://www.example.org/"); | 12900 request1.url = GURL("https://www.example.org/"); |
12896 request1.load_flags = 0; | 12901 request1.load_flags = 0; |
12897 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 12902 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
12898 | 12903 |
12899 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 12904 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
12900 EXPECT_EQ(ERR_IO_PENDING, rv); | 12905 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12901 EXPECT_EQ(OK, callback.WaitForResult()); | 12906 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
12902 | 12907 |
12903 const HttpResponseInfo* response = trans1.GetResponseInfo(); | 12908 const HttpResponseInfo* response = trans1.GetResponseInfo(); |
12904 ASSERT_TRUE(response); | 12909 ASSERT_TRUE(response); |
12905 ASSERT_TRUE(response->headers); | 12910 ASSERT_TRUE(response->headers); |
12906 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 12911 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
12907 | 12912 |
12908 std::string response_data; | 12913 std::string response_data; |
12909 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); | 12914 ASSERT_THAT(ReadTransaction(&trans1, &response_data), IsOk()); |
12910 EXPECT_EQ("hello!", response_data); | 12915 EXPECT_EQ("hello!", response_data); |
12911 | 12916 |
12912 // Preload www.gmail.com into HostCache. | 12917 // Preload www.gmail.com into HostCache. |
12913 HostPortPair host_port("www.gmail.com", 443); | 12918 HostPortPair host_port("www.gmail.com", 443); |
12914 HostResolver::RequestInfo resolve_info(host_port); | 12919 HostResolver::RequestInfo resolve_info(host_port); |
12915 AddressList ignored; | 12920 AddressList ignored; |
12916 rv = session_deps_.host_resolver->Resolve(resolve_info, | 12921 rv = session_deps_.host_resolver->Resolve(resolve_info, |
12917 DEFAULT_PRIORITY, | 12922 DEFAULT_PRIORITY, |
12918 &ignored, | 12923 &ignored, |
12919 callback.callback(), | 12924 callback.callback(), |
12920 NULL, | 12925 NULL, |
12921 BoundNetLog()); | 12926 BoundNetLog()); |
12922 EXPECT_EQ(ERR_IO_PENDING, rv); | 12927 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12923 rv = callback.WaitForResult(); | 12928 rv = callback.WaitForResult(); |
12924 EXPECT_EQ(OK, rv); | 12929 EXPECT_THAT(rv, IsOk()); |
12925 | 12930 |
12926 HttpRequestInfo request2; | 12931 HttpRequestInfo request2; |
12927 request2.method = "GET"; | 12932 request2.method = "GET"; |
12928 request2.url = GURL("https://www.gmail.com/"); | 12933 request2.url = GURL("https://www.gmail.com/"); |
12929 request2.load_flags = 0; | 12934 request2.load_flags = 0; |
12930 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 12935 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
12931 | 12936 |
12932 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); | 12937 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); |
12933 EXPECT_EQ(ERR_IO_PENDING, rv); | 12938 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12934 EXPECT_EQ(OK, callback.WaitForResult()); | 12939 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
12935 | 12940 |
12936 response = trans2.GetResponseInfo(); | 12941 response = trans2.GetResponseInfo(); |
12937 ASSERT_TRUE(response); | 12942 ASSERT_TRUE(response); |
12938 ASSERT_TRUE(response->headers); | 12943 ASSERT_TRUE(response->headers); |
12939 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 12944 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
12940 EXPECT_TRUE(response->was_fetched_via_spdy); | 12945 EXPECT_TRUE(response->was_fetched_via_spdy); |
12941 EXPECT_TRUE(response->was_npn_negotiated); | 12946 EXPECT_TRUE(response->was_npn_negotiated); |
12942 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 12947 ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk()); |
12943 EXPECT_EQ("hello!", response_data); | 12948 EXPECT_EQ("hello!", response_data); |
12944 } | 12949 } |
12945 | 12950 |
12946 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { | 12951 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { |
12947 // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 12952 // Set up a special HttpNetworkSession with a MockCachingHostResolver. |
12948 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 12953 session_deps_.host_resolver.reset(new MockCachingHostResolver()); |
12949 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12954 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12950 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 12955 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
12951 pool_peer.DisableDomainAuthenticationVerification(); | 12956 pool_peer.DisableDomainAuthenticationVerification(); |
12952 | 12957 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12985 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 12990 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
12986 | 12991 |
12987 TestCompletionCallback callback; | 12992 TestCompletionCallback callback; |
12988 HttpRequestInfo request1; | 12993 HttpRequestInfo request1; |
12989 request1.method = "GET"; | 12994 request1.method = "GET"; |
12990 request1.url = GURL("https://www.example.org/"); | 12995 request1.url = GURL("https://www.example.org/"); |
12991 request1.load_flags = 0; | 12996 request1.load_flags = 0; |
12992 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 12997 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
12993 | 12998 |
12994 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 12999 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
12995 EXPECT_EQ(ERR_IO_PENDING, rv); | 13000 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12996 EXPECT_EQ(OK, callback.WaitForResult()); | 13001 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
12997 | 13002 |
12998 const HttpResponseInfo* response = trans1.GetResponseInfo(); | 13003 const HttpResponseInfo* response = trans1.GetResponseInfo(); |
12999 ASSERT_TRUE(response); | 13004 ASSERT_TRUE(response); |
13000 ASSERT_TRUE(response->headers); | 13005 ASSERT_TRUE(response->headers); |
13001 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 13006 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
13002 | 13007 |
13003 std::string response_data; | 13008 std::string response_data; |
13004 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); | 13009 ASSERT_THAT(ReadTransaction(&trans1, &response_data), IsOk()); |
13005 EXPECT_EQ("hello!", response_data); | 13010 EXPECT_EQ("hello!", response_data); |
13006 | 13011 |
13007 HttpRequestInfo request2; | 13012 HttpRequestInfo request2; |
13008 request2.method = "GET"; | 13013 request2.method = "GET"; |
13009 request2.url = GURL("https://www.gmail.com/"); | 13014 request2.url = GURL("https://www.gmail.com/"); |
13010 request2.load_flags = 0; | 13015 request2.load_flags = 0; |
13011 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 13016 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
13012 | 13017 |
13013 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); | 13018 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); |
13014 EXPECT_EQ(ERR_IO_PENDING, rv); | 13019 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
13015 EXPECT_EQ(OK, callback.WaitForResult()); | 13020 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
13016 | 13021 |
13017 response = trans2.GetResponseInfo(); | 13022 response = trans2.GetResponseInfo(); |
13018 ASSERT_TRUE(response); | 13023 ASSERT_TRUE(response); |
13019 ASSERT_TRUE(response->headers); | 13024 ASSERT_TRUE(response->headers); |
13020 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 13025 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
13021 EXPECT_TRUE(response->was_fetched_via_spdy); | 13026 EXPECT_TRUE(response->was_fetched_via_spdy); |
13022 EXPECT_TRUE(response->was_npn_negotiated); | 13027 EXPECT_TRUE(response->was_npn_negotiated); |
13023 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 13028 ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk()); |
13024 EXPECT_EQ("hello!", response_data); | 13029 EXPECT_EQ("hello!", response_data); |
13025 } | 13030 } |
13026 | 13031 |
13027 class OneTimeCachingHostResolver : public HostResolver { | 13032 class OneTimeCachingHostResolver : public HostResolver { |
13028 public: | 13033 public: |
13029 explicit OneTimeCachingHostResolver(const HostPortPair& host_port) | 13034 explicit OneTimeCachingHostResolver(const HostPortPair& host_port) |
13030 : host_port_(host_port) {} | 13035 : host_port_(host_port) {} |
13031 ~OneTimeCachingHostResolver() override {} | 13036 ~OneTimeCachingHostResolver() override {} |
13032 | 13037 |
13033 RuleBasedHostResolverProc* rules() { return host_resolver_.rules(); } | 13038 RuleBasedHostResolverProc* rules() { return host_resolver_.rules(); } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13111 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 13116 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
13112 | 13117 |
13113 TestCompletionCallback callback; | 13118 TestCompletionCallback callback; |
13114 HttpRequestInfo request1; | 13119 HttpRequestInfo request1; |
13115 request1.method = "GET"; | 13120 request1.method = "GET"; |
13116 request1.url = GURL("https://www.example.org/"); | 13121 request1.url = GURL("https://www.example.org/"); |
13117 request1.load_flags = 0; | 13122 request1.load_flags = 0; |
13118 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 13123 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
13119 | 13124 |
13120 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 13125 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
13121 EXPECT_EQ(ERR_IO_PENDING, rv); | 13126 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
13122 EXPECT_EQ(OK, callback.WaitForResult()); | 13127 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
13123 | 13128 |
13124 const HttpResponseInfo* response = trans1.GetResponseInfo(); | 13129 const HttpResponseInfo* response = trans1.GetResponseInfo(); |
13125 ASSERT_TRUE(response); | 13130 ASSERT_TRUE(response); |
13126 ASSERT_TRUE(response->headers); | 13131 ASSERT_TRUE(response->headers); |
13127 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 13132 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
13128 | 13133 |
13129 std::string response_data; | 13134 std::string response_data; |
13130 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); | 13135 ASSERT_THAT(ReadTransaction(&trans1, &response_data), IsOk()); |
13131 EXPECT_EQ("hello!", response_data); | 13136 EXPECT_EQ("hello!", response_data); |
13132 | 13137 |
13133 // Preload cache entries into HostCache. | 13138 // Preload cache entries into HostCache. |
13134 HostResolver::RequestInfo resolve_info(HostPortPair("www.gmail.com", 443)); | 13139 HostResolver::RequestInfo resolve_info(HostPortPair("www.gmail.com", 443)); |
13135 AddressList ignored; | 13140 AddressList ignored; |
13136 rv = host_resolver.Resolve(resolve_info, | 13141 rv = host_resolver.Resolve(resolve_info, |
13137 DEFAULT_PRIORITY, | 13142 DEFAULT_PRIORITY, |
13138 &ignored, | 13143 &ignored, |
13139 callback.callback(), | 13144 callback.callback(), |
13140 NULL, | 13145 NULL, |
13141 BoundNetLog()); | 13146 BoundNetLog()); |
13142 EXPECT_EQ(ERR_IO_PENDING, rv); | 13147 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
13143 rv = callback.WaitForResult(); | 13148 rv = callback.WaitForResult(); |
13144 EXPECT_EQ(OK, rv); | 13149 EXPECT_THAT(rv, IsOk()); |
13145 | 13150 |
13146 HttpRequestInfo request2; | 13151 HttpRequestInfo request2; |
13147 request2.method = "GET"; | 13152 request2.method = "GET"; |
13148 request2.url = GURL("https://www.gmail.com/"); | 13153 request2.url = GURL("https://www.gmail.com/"); |
13149 request2.load_flags = 0; | 13154 request2.load_flags = 0; |
13150 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 13155 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
13151 | 13156 |
13152 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); | 13157 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); |
13153 EXPECT_EQ(ERR_IO_PENDING, rv); | 13158 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
13154 EXPECT_EQ(OK, callback.WaitForResult()); | 13159 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
13155 | 13160 |
13156 response = trans2.GetResponseInfo(); | 13161 response = trans2.GetResponseInfo(); |
13157 ASSERT_TRUE(response); | 13162 ASSERT_TRUE(response); |
13158 ASSERT_TRUE(response->headers); | 13163 ASSERT_TRUE(response->headers); |
13159 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 13164 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
13160 EXPECT_TRUE(response->was_fetched_via_spdy); | 13165 EXPECT_TRUE(response->was_fetched_via_spdy); |
13161 EXPECT_TRUE(response->was_npn_negotiated); | 13166 EXPECT_TRUE(response->was_npn_negotiated); |
13162 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 13167 ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk()); |
13163 EXPECT_EQ("hello!", response_data); | 13168 EXPECT_EQ("hello!", response_data); |
13164 } | 13169 } |
13165 | 13170 |
13166 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttp) { | 13171 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttp) { |
13167 const std::string https_url = "https://www.example.org:8080/"; | 13172 const std::string https_url = "https://www.example.org:8080/"; |
13168 const std::string http_url = "http://www.example.org:8080/"; | 13173 const std::string http_url = "http://www.example.org:8080/"; |
13169 | 13174 |
13170 // SPDY GET for HTTPS URL | 13175 // SPDY GET for HTTPS URL |
13171 std::unique_ptr<SpdySerializedFrame> req1( | 13176 std::unique_ptr<SpdySerializedFrame> req1( |
13172 spdy_util_.ConstructSpdyGet(https_url.c_str(), 1, LOWEST)); | 13177 spdy_util_.ConstructSpdyGet(https_url.c_str(), 1, LOWEST)); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13216 HttpRequestInfo request1; | 13221 HttpRequestInfo request1; |
13217 request1.method = "GET"; | 13222 request1.method = "GET"; |
13218 request1.url = GURL(https_url); | 13223 request1.url = GURL(https_url); |
13219 request1.load_flags = 0; | 13224 request1.load_flags = 0; |
13220 HttpNetworkTransaction trans1(LOWEST, session.get()); | 13225 HttpNetworkTransaction trans1(LOWEST, session.get()); |
13221 TestCompletionCallback callback1; | 13226 TestCompletionCallback callback1; |
13222 EXPECT_EQ(ERR_IO_PENDING, | 13227 EXPECT_EQ(ERR_IO_PENDING, |
13223 trans1.Start(&request1, callback1.callback(), BoundNetLog())); | 13228 trans1.Start(&request1, callback1.callback(), BoundNetLog())); |
13224 base::RunLoop().RunUntilIdle(); | 13229 base::RunLoop().RunUntilIdle(); |
13225 | 13230 |
13226 EXPECT_EQ(OK, callback1.WaitForResult()); | 13231 EXPECT_THAT(callback1.WaitForResult(), IsOk()); |
13227 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); | 13232 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); |
13228 | 13233 |
13229 // Now, start the HTTP request | 13234 // Now, start the HTTP request |
13230 HttpRequestInfo request2; | 13235 HttpRequestInfo request2; |
13231 request2.method = "GET"; | 13236 request2.method = "GET"; |
13232 request2.url = GURL(http_url); | 13237 request2.url = GURL(http_url); |
13233 request2.load_flags = 0; | 13238 request2.load_flags = 0; |
13234 HttpNetworkTransaction trans2(MEDIUM, session.get()); | 13239 HttpNetworkTransaction trans2(MEDIUM, session.get()); |
13235 TestCompletionCallback callback2; | 13240 TestCompletionCallback callback2; |
13236 EXPECT_EQ(ERR_IO_PENDING, | 13241 EXPECT_EQ(ERR_IO_PENDING, |
13237 trans2.Start(&request2, callback2.callback(), BoundNetLog())); | 13242 trans2.Start(&request2, callback2.callback(), BoundNetLog())); |
13238 base::RunLoop().RunUntilIdle(); | 13243 base::RunLoop().RunUntilIdle(); |
13239 | 13244 |
13240 EXPECT_EQ(OK, callback2.WaitForResult()); | 13245 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
13241 EXPECT_FALSE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 13246 EXPECT_FALSE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
13242 } | 13247 } |
13243 | 13248 |
13244 class AltSvcCertificateVerificationTest : public HttpNetworkTransactionTest { | 13249 class AltSvcCertificateVerificationTest : public HttpNetworkTransactionTest { |
13245 public: | 13250 public: |
13246 void Run(bool pooling, bool valid) { | 13251 void Run(bool pooling, bool valid) { |
13247 url::SchemeHostPort server(GURL(valid ? "https://mail.example.org:443" | 13252 url::SchemeHostPort server(GURL(valid ? "https://mail.example.org:443" |
13248 : "https://invalid.example.org:443")); | 13253 : "https://invalid.example.org:443")); |
13249 HostPortPair alternative("www.example.org", 443); | 13254 HostPortPair alternative("www.example.org", 443); |
13250 | 13255 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13335 if (pooling) { | 13340 if (pooling) { |
13336 std::unique_ptr<HttpTransaction> trans0( | 13341 std::unique_ptr<HttpTransaction> trans0( |
13337 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13342 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
13338 HttpRequestInfo request0; | 13343 HttpRequestInfo request0; |
13339 request0.method = "GET"; | 13344 request0.method = "GET"; |
13340 request0.url = GURL(url0); | 13345 request0.url = GURL(url0); |
13341 request0.load_flags = 0; | 13346 request0.load_flags = 0; |
13342 TestCompletionCallback callback0; | 13347 TestCompletionCallback callback0; |
13343 | 13348 |
13344 int rv = trans0->Start(&request0, callback0.callback(), BoundNetLog()); | 13349 int rv = trans0->Start(&request0, callback0.callback(), BoundNetLog()); |
13345 EXPECT_EQ(ERR_IO_PENDING, rv); | 13350 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
13346 rv = callback0.WaitForResult(); | 13351 rv = callback0.WaitForResult(); |
13347 EXPECT_EQ(OK, rv); | 13352 EXPECT_THAT(rv, IsOk()); |
13348 } | 13353 } |
13349 | 13354 |
13350 // Second request to origin. | 13355 // Second request to origin. |
13351 std::unique_ptr<HttpTransaction> trans1( | 13356 std::unique_ptr<HttpTransaction> trans1( |
13352 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13357 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
13353 HttpRequestInfo request1; | 13358 HttpRequestInfo request1; |
13354 request1.method = "GET"; | 13359 request1.method = "GET"; |
13355 request1.url = GURL(url1); | 13360 request1.url = GURL(url1); |
13356 request1.load_flags = 0; | 13361 request1.load_flags = 0; |
13357 TestCompletionCallback callback1; | 13362 TestCompletionCallback callback1; |
13358 | 13363 |
13359 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); | 13364 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); |
13360 EXPECT_EQ(ERR_IO_PENDING, rv); | 13365 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
13361 base::RunLoop().RunUntilIdle(); | 13366 base::RunLoop().RunUntilIdle(); |
13362 if (data.IsPaused()) | 13367 if (data.IsPaused()) |
13363 data.Resume(); | 13368 data.Resume(); |
13364 rv = callback1.WaitForResult(); | 13369 rv = callback1.WaitForResult(); |
13365 if (valid) { | 13370 if (valid) { |
13366 EXPECT_EQ(OK, rv); | 13371 EXPECT_THAT(rv, IsOk()); |
13367 } else { | 13372 } else { |
13368 if (pooling) { | 13373 if (pooling) { |
13369 EXPECT_EQ(ERR_CONNECTION_REFUSED, rv); | 13374 EXPECT_THAT(rv, IsError(ERR_CONNECTION_REFUSED)); |
13370 } else { | 13375 } else { |
13371 EXPECT_EQ(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN, rv); | 13376 EXPECT_THAT(rv, IsError(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN)); |
13372 } | 13377 } |
13373 } | 13378 } |
13374 } | 13379 } |
13375 }; | 13380 }; |
13376 | 13381 |
13377 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, | 13382 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, |
13378 AltSvcCertificateVerificationTest, | 13383 AltSvcCertificateVerificationTest, |
13379 testing::Values(kTestCaseSPDY31, | 13384 testing::Values(kTestCaseSPDY31, |
13380 kTestCaseHTTP2NoPriorityDependencies, | 13385 kTestCaseHTTP2NoPriorityDependencies, |
13381 kTestCaseHTTP2PriorityDependencies)); | 13386 kTestCaseHTTP2PriorityDependencies)); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13439 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13444 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
13440 HttpRequestInfo request; | 13445 HttpRequestInfo request; |
13441 request.method = "GET"; | 13446 request.method = "GET"; |
13442 request.url = GURL("https://www.example.org:443"); | 13447 request.url = GURL("https://www.example.org:443"); |
13443 request.load_flags = 0; | 13448 request.load_flags = 0; |
13444 TestCompletionCallback callback; | 13449 TestCompletionCallback callback; |
13445 | 13450 |
13446 // HTTP/2 (or SPDY) is required for alternative service, if HTTP/1.1 is | 13451 // HTTP/2 (or SPDY) is required for alternative service, if HTTP/1.1 is |
13447 // negotiated, the alternate Job should fail with ERR_NPN_NEGOTIATION_FAILED. | 13452 // negotiated, the alternate Job should fail with ERR_NPN_NEGOTIATION_FAILED. |
13448 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13453 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
13449 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.GetResult(rv)); | 13454 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_NPN_NEGOTIATION_FAILED)); |
13450 } | 13455 } |
13451 | 13456 |
13452 // A request to a server with an alternative service fires two Jobs: one to the | 13457 // A request to a server with an alternative service fires two Jobs: one to the |
13453 // server, and an alternate one to the alternative server. If the former | 13458 // server, and an alternate one to the alternative server. If the former |
13454 // succeeds, the request should succeed, even if the latter fails because | 13459 // succeeds, the request should succeed, even if the latter fails because |
13455 // HTTP/1.1 is negotiated which is insufficient for alternative service. | 13460 // HTTP/1.1 is negotiated which is insufficient for alternative service. |
13456 TEST_P(HttpNetworkTransactionTest, FailedAlternativeServiceIsNotUserVisible) { | 13461 TEST_P(HttpNetworkTransactionTest, FailedAlternativeServiceIsNotUserVisible) { |
13457 url::SchemeHostPort server("https", "www.example.org", 443); | 13462 url::SchemeHostPort server("https", "www.example.org", 443); |
13458 HostPortPair alternative("www.example.org", 444); | 13463 HostPortPair alternative("www.example.org", 444); |
13459 | 13464 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13507 | 13512 |
13508 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 13513 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
13509 HttpRequestInfo request1; | 13514 HttpRequestInfo request1; |
13510 request1.method = "GET"; | 13515 request1.method = "GET"; |
13511 request1.url = GURL("https://www.example.org:443"); | 13516 request1.url = GURL("https://www.example.org:443"); |
13512 request1.load_flags = 0; | 13517 request1.load_flags = 0; |
13513 TestCompletionCallback callback1; | 13518 TestCompletionCallback callback1; |
13514 | 13519 |
13515 int rv = trans1.Start(&request1, callback1.callback(), BoundNetLog()); | 13520 int rv = trans1.Start(&request1, callback1.callback(), BoundNetLog()); |
13516 rv = callback1.GetResult(rv); | 13521 rv = callback1.GetResult(rv); |
13517 EXPECT_EQ(OK, rv); | 13522 EXPECT_THAT(rv, IsOk()); |
13518 | 13523 |
13519 const HttpResponseInfo* response1 = trans1.GetResponseInfo(); | 13524 const HttpResponseInfo* response1 = trans1.GetResponseInfo(); |
13520 ASSERT_TRUE(response1); | 13525 ASSERT_TRUE(response1); |
13521 ASSERT_TRUE(response1->headers); | 13526 ASSERT_TRUE(response1->headers); |
13522 EXPECT_EQ("HTTP/1.1 200 OK", response1->headers->GetStatusLine()); | 13527 EXPECT_EQ("HTTP/1.1 200 OK", response1->headers->GetStatusLine()); |
13523 | 13528 |
13524 std::string response_data1; | 13529 std::string response_data1; |
13525 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data1)); | 13530 ASSERT_THAT(ReadTransaction(&trans1, &response_data1), IsOk()); |
13526 EXPECT_EQ("foobar", response_data1); | 13531 EXPECT_EQ("foobar", response_data1); |
13527 | 13532 |
13528 // Alternative should be marked as broken, because HTTP/1.1 is not sufficient | 13533 // Alternative should be marked as broken, because HTTP/1.1 is not sufficient |
13529 // for alternative service. | 13534 // for alternative service. |
13530 EXPECT_TRUE( | 13535 EXPECT_TRUE( |
13531 http_server_properties->IsAlternativeServiceBroken(alternative_service)); | 13536 http_server_properties->IsAlternativeServiceBroken(alternative_service)); |
13532 | 13537 |
13533 // Since |alternative_service| is broken, a second transaction to server | 13538 // Since |alternative_service| is broken, a second transaction to server |
13534 // should not start an alternate Job. It should pool to existing connection | 13539 // should not start an alternate Job. It should pool to existing connection |
13535 // to server. | 13540 // to server. |
13536 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 13541 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
13537 HttpRequestInfo request2; | 13542 HttpRequestInfo request2; |
13538 request2.method = "GET"; | 13543 request2.method = "GET"; |
13539 request2.url = GURL("https://www.example.org:443/second"); | 13544 request2.url = GURL("https://www.example.org:443/second"); |
13540 request2.load_flags = 0; | 13545 request2.load_flags = 0; |
13541 TestCompletionCallback callback2; | 13546 TestCompletionCallback callback2; |
13542 | 13547 |
13543 rv = trans2.Start(&request2, callback2.callback(), BoundNetLog()); | 13548 rv = trans2.Start(&request2, callback2.callback(), BoundNetLog()); |
13544 rv = callback2.GetResult(rv); | 13549 rv = callback2.GetResult(rv); |
13545 EXPECT_EQ(OK, rv); | 13550 EXPECT_THAT(rv, IsOk()); |
13546 | 13551 |
13547 const HttpResponseInfo* response2 = trans2.GetResponseInfo(); | 13552 const HttpResponseInfo* response2 = trans2.GetResponseInfo(); |
13548 ASSERT_TRUE(response2); | 13553 ASSERT_TRUE(response2); |
13549 ASSERT_TRUE(response2->headers); | 13554 ASSERT_TRUE(response2->headers); |
13550 EXPECT_EQ("HTTP/1.1 200 OK", response2->headers->GetStatusLine()); | 13555 EXPECT_EQ("HTTP/1.1 200 OK", response2->headers->GetStatusLine()); |
13551 | 13556 |
13552 std::string response_data2; | 13557 std::string response_data2; |
13553 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data2)); | 13558 ASSERT_THAT(ReadTransaction(&trans2, &response_data2), IsOk()); |
13554 EXPECT_EQ("another", response_data2); | 13559 EXPECT_EQ("another", response_data2); |
13555 } | 13560 } |
13556 | 13561 |
13557 // Alternative service requires HTTP/2 (or SPDY), but there is already a | 13562 // Alternative service requires HTTP/2 (or SPDY), but there is already a |
13558 // HTTP/1.1 socket open to the alternative server. That socket should not be | 13563 // HTTP/1.1 socket open to the alternative server. That socket should not be |
13559 // used. | 13564 // used. |
13560 TEST_P(HttpNetworkTransactionTest, AlternativeServiceShouldNotPoolToHttp11) { | 13565 TEST_P(HttpNetworkTransactionTest, AlternativeServiceShouldNotPoolToHttp11) { |
13561 url::SchemeHostPort server("https", "origin.example.org", 443); | 13566 url::SchemeHostPort server("https", "origin.example.org", 443); |
13562 HostPortPair alternative("alternative.example.org", 443); | 13567 HostPortPair alternative("alternative.example.org", 443); |
13563 std::string origin_url = "https://origin.example.org:443"; | 13568 std::string origin_url = "https://origin.example.org:443"; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13616 // First transaction to alternative to open an HTTP/1.1 socket. | 13621 // First transaction to alternative to open an HTTP/1.1 socket. |
13617 std::unique_ptr<HttpTransaction> trans1( | 13622 std::unique_ptr<HttpTransaction> trans1( |
13618 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13623 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
13619 HttpRequestInfo request1; | 13624 HttpRequestInfo request1; |
13620 request1.method = "GET"; | 13625 request1.method = "GET"; |
13621 request1.url = GURL(alternative_url); | 13626 request1.url = GURL(alternative_url); |
13622 request1.load_flags = 0; | 13627 request1.load_flags = 0; |
13623 TestCompletionCallback callback1; | 13628 TestCompletionCallback callback1; |
13624 | 13629 |
13625 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); | 13630 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); |
13626 EXPECT_EQ(OK, callback1.GetResult(rv)); | 13631 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
13627 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 13632 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
13628 ASSERT_TRUE(response1); | 13633 ASSERT_TRUE(response1); |
13629 ASSERT_TRUE(response1->headers); | 13634 ASSERT_TRUE(response1->headers); |
13630 EXPECT_EQ("HTTP/1.1 200 OK", response1->headers->GetStatusLine()); | 13635 EXPECT_EQ("HTTP/1.1 200 OK", response1->headers->GetStatusLine()); |
13631 EXPECT_TRUE(response1->was_npn_negotiated); | 13636 EXPECT_TRUE(response1->was_npn_negotiated); |
13632 EXPECT_FALSE(response1->was_fetched_via_spdy); | 13637 EXPECT_FALSE(response1->was_fetched_via_spdy); |
13633 std::string response_data1; | 13638 std::string response_data1; |
13634 ASSERT_EQ(OK, ReadTransaction(trans1.get(), &response_data1)); | 13639 ASSERT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
13635 EXPECT_EQ("first HTTP/1.1 response from alternative", response_data1); | 13640 EXPECT_EQ("first HTTP/1.1 response from alternative", response_data1); |
13636 | 13641 |
13637 // Request for origin.example.org, which has an alternative service. This | 13642 // Request for origin.example.org, which has an alternative service. This |
13638 // will start two Jobs: the alternative looks for connections to pool to, | 13643 // will start two Jobs: the alternative looks for connections to pool to, |
13639 // finds one which is HTTP/1.1, and should ignore it, and should not try to | 13644 // finds one which is HTTP/1.1, and should ignore it, and should not try to |
13640 // open other connections to alternative server. The Job to server fails, so | 13645 // open other connections to alternative server. The Job to server fails, so |
13641 // this request fails. | 13646 // this request fails. |
13642 std::unique_ptr<HttpTransaction> trans2( | 13647 std::unique_ptr<HttpTransaction> trans2( |
13643 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13648 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
13644 HttpRequestInfo request2; | 13649 HttpRequestInfo request2; |
13645 request2.method = "GET"; | 13650 request2.method = "GET"; |
13646 request2.url = GURL(origin_url); | 13651 request2.url = GURL(origin_url); |
13647 request2.load_flags = 0; | 13652 request2.load_flags = 0; |
13648 TestCompletionCallback callback2; | 13653 TestCompletionCallback callback2; |
13649 | 13654 |
13650 rv = trans2->Start(&request2, callback2.callback(), BoundNetLog()); | 13655 rv = trans2->Start(&request2, callback2.callback(), BoundNetLog()); |
13651 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback2.GetResult(rv)); | 13656 EXPECT_THAT(callback2.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); |
13652 | 13657 |
13653 // Another transaction to alternative. This is to test that the HTTP/1.1 | 13658 // Another transaction to alternative. This is to test that the HTTP/1.1 |
13654 // socket is still open and in the pool. | 13659 // socket is still open and in the pool. |
13655 std::unique_ptr<HttpTransaction> trans3( | 13660 std::unique_ptr<HttpTransaction> trans3( |
13656 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13661 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
13657 HttpRequestInfo request3; | 13662 HttpRequestInfo request3; |
13658 request3.method = "GET"; | 13663 request3.method = "GET"; |
13659 request3.url = GURL(alternative_url); | 13664 request3.url = GURL(alternative_url); |
13660 request3.load_flags = 0; | 13665 request3.load_flags = 0; |
13661 TestCompletionCallback callback3; | 13666 TestCompletionCallback callback3; |
13662 | 13667 |
13663 rv = trans3->Start(&request3, callback3.callback(), BoundNetLog()); | 13668 rv = trans3->Start(&request3, callback3.callback(), BoundNetLog()); |
13664 EXPECT_EQ(OK, callback3.GetResult(rv)); | 13669 EXPECT_THAT(callback3.GetResult(rv), IsOk()); |
13665 const HttpResponseInfo* response3 = trans3->GetResponseInfo(); | 13670 const HttpResponseInfo* response3 = trans3->GetResponseInfo(); |
13666 ASSERT_TRUE(response3); | 13671 ASSERT_TRUE(response3); |
13667 ASSERT_TRUE(response3->headers); | 13672 ASSERT_TRUE(response3->headers); |
13668 EXPECT_EQ("HTTP/1.1 200 OK", response3->headers->GetStatusLine()); | 13673 EXPECT_EQ("HTTP/1.1 200 OK", response3->headers->GetStatusLine()); |
13669 EXPECT_TRUE(response3->was_npn_negotiated); | 13674 EXPECT_TRUE(response3->was_npn_negotiated); |
13670 EXPECT_FALSE(response3->was_fetched_via_spdy); | 13675 EXPECT_FALSE(response3->was_fetched_via_spdy); |
13671 std::string response_data3; | 13676 std::string response_data3; |
13672 ASSERT_EQ(OK, ReadTransaction(trans3.get(), &response_data3)); | 13677 ASSERT_THAT(ReadTransaction(trans3.get(), &response_data3), IsOk()); |
13673 EXPECT_EQ("second HTTP/1.1 response from alternative", response_data3); | 13678 EXPECT_EQ("second HTTP/1.1 response from alternative", response_data3); |
13674 } | 13679 } |
13675 | 13680 |
13676 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { | 13681 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { |
13677 const std::string https_url = "https://www.example.org:8080/"; | 13682 const std::string https_url = "https://www.example.org:8080/"; |
13678 const std::string http_url = "http://www.example.org:8080/"; | 13683 const std::string http_url = "http://www.example.org:8080/"; |
13679 | 13684 |
13680 // Separate SPDY util instance for naked and wrapped requests. | 13685 // Separate SPDY util instance for naked and wrapped requests. |
13681 SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); | 13686 SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); |
13682 | 13687 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13754 request1.url = GURL(https_url); | 13759 request1.url = GURL(https_url); |
13755 request1.load_flags = 0; | 13760 request1.load_flags = 0; |
13756 HttpNetworkTransaction trans1(LOWEST, session.get()); | 13761 HttpNetworkTransaction trans1(LOWEST, session.get()); |
13757 TestCompletionCallback callback1; | 13762 TestCompletionCallback callback1; |
13758 int rv = trans1.Start(&request1, callback1.callback(), BoundNetLog()); | 13763 int rv = trans1.Start(&request1, callback1.callback(), BoundNetLog()); |
13759 | 13764 |
13760 // This pause is a hack to avoid running into https://crbug.com/497228. | 13765 // This pause is a hack to avoid running into https://crbug.com/497228. |
13761 data1.RunUntilPaused(); | 13766 data1.RunUntilPaused(); |
13762 base::RunLoop().RunUntilIdle(); | 13767 base::RunLoop().RunUntilIdle(); |
13763 data1.Resume(); | 13768 data1.Resume(); |
13764 EXPECT_EQ(OK, callback1.GetResult(rv)); | 13769 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
13765 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); | 13770 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); |
13766 | 13771 |
13767 LoadTimingInfo load_timing_info1; | 13772 LoadTimingInfo load_timing_info1; |
13768 EXPECT_TRUE(trans1.GetLoadTimingInfo(&load_timing_info1)); | 13773 EXPECT_TRUE(trans1.GetLoadTimingInfo(&load_timing_info1)); |
13769 TestLoadTimingNotReusedWithPac(load_timing_info1, | 13774 TestLoadTimingNotReusedWithPac(load_timing_info1, |
13770 CONNECT_TIMING_HAS_SSL_TIMES); | 13775 CONNECT_TIMING_HAS_SSL_TIMES); |
13771 | 13776 |
13772 // Now, start the HTTP request. | 13777 // Now, start the HTTP request. |
13773 HttpRequestInfo request2; | 13778 HttpRequestInfo request2; |
13774 request2.method = "GET"; | 13779 request2.method = "GET"; |
13775 request2.url = GURL(http_url); | 13780 request2.url = GURL(http_url); |
13776 request2.load_flags = 0; | 13781 request2.load_flags = 0; |
13777 HttpNetworkTransaction trans2(MEDIUM, session.get()); | 13782 HttpNetworkTransaction trans2(MEDIUM, session.get()); |
13778 TestCompletionCallback callback2; | 13783 TestCompletionCallback callback2; |
13779 rv = trans2.Start(&request2, callback2.callback(), BoundNetLog()); | 13784 rv = trans2.Start(&request2, callback2.callback(), BoundNetLog()); |
13780 | 13785 |
13781 // This pause is a hack to avoid running into https://crbug.com/497228. | 13786 // This pause is a hack to avoid running into https://crbug.com/497228. |
13782 data1.RunUntilPaused(); | 13787 data1.RunUntilPaused(); |
13783 base::RunLoop().RunUntilIdle(); | 13788 base::RunLoop().RunUntilIdle(); |
13784 data1.Resume(); | 13789 data1.Resume(); |
13785 EXPECT_EQ(OK, callback2.GetResult(rv)); | 13790 EXPECT_THAT(callback2.GetResult(rv), IsOk()); |
13786 | 13791 |
13787 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 13792 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
13788 | 13793 |
13789 LoadTimingInfo load_timing_info2; | 13794 LoadTimingInfo load_timing_info2; |
13790 EXPECT_TRUE(trans2.GetLoadTimingInfo(&load_timing_info2)); | 13795 EXPECT_TRUE(trans2.GetLoadTimingInfo(&load_timing_info2)); |
13791 // The established SPDY sessions is considered reused by the HTTP request. | 13796 // The established SPDY sessions is considered reused by the HTTP request. |
13792 TestLoadTimingReusedWithPac(load_timing_info2); | 13797 TestLoadTimingReusedWithPac(load_timing_info2); |
13793 // HTTP requests over a SPDY session should have a different connection | 13798 // HTTP requests over a SPDY session should have a different connection |
13794 // socket_log_id than requests over a tunnel. | 13799 // socket_log_id than requests over a tunnel. |
13795 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 13800 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13891 request1.load_flags = 0; | 13896 request1.load_flags = 0; |
13892 HttpNetworkTransaction trans1(LOWEST, session.get()); | 13897 HttpNetworkTransaction trans1(LOWEST, session.get()); |
13893 TestCompletionCallback callback1; | 13898 TestCompletionCallback callback1; |
13894 ASSERT_EQ(ERR_IO_PENDING, | 13899 ASSERT_EQ(ERR_IO_PENDING, |
13895 trans1.Start(&request1, callback1.callback(), BoundNetLog())); | 13900 trans1.Start(&request1, callback1.callback(), BoundNetLog())); |
13896 // This pause is a hack to avoid running into https://crbug.com/497228. | 13901 // This pause is a hack to avoid running into https://crbug.com/497228. |
13897 data1.RunUntilPaused(); | 13902 data1.RunUntilPaused(); |
13898 base::RunLoop().RunUntilIdle(); | 13903 base::RunLoop().RunUntilIdle(); |
13899 data1.Resume(); | 13904 data1.Resume(); |
13900 | 13905 |
13901 EXPECT_EQ(OK, callback1.WaitForResult()); | 13906 EXPECT_THAT(callback1.WaitForResult(), IsOk()); |
13902 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); | 13907 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); |
13903 | 13908 |
13904 // Now, start the HTTP request | 13909 // Now, start the HTTP request |
13905 HttpRequestInfo request2; | 13910 HttpRequestInfo request2; |
13906 request2.method = "GET"; | 13911 request2.method = "GET"; |
13907 request2.url = GURL(url2); | 13912 request2.url = GURL(url2); |
13908 request2.load_flags = 0; | 13913 request2.load_flags = 0; |
13909 HttpNetworkTransaction trans2(MEDIUM, session.get()); | 13914 HttpNetworkTransaction trans2(MEDIUM, session.get()); |
13910 TestCompletionCallback callback2; | 13915 TestCompletionCallback callback2; |
13911 EXPECT_EQ(ERR_IO_PENDING, | 13916 EXPECT_EQ(ERR_IO_PENDING, |
13912 trans2.Start(&request2, callback2.callback(), BoundNetLog())); | 13917 trans2.Start(&request2, callback2.callback(), BoundNetLog())); |
13913 base::RunLoop().RunUntilIdle(); | 13918 base::RunLoop().RunUntilIdle(); |
13914 | 13919 |
13915 ASSERT_TRUE(callback2.have_result()); | 13920 ASSERT_TRUE(callback2.have_result()); |
13916 EXPECT_EQ(OK, callback2.WaitForResult()); | 13921 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
13917 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 13922 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
13918 } | 13923 } |
13919 | 13924 |
13920 // Test to verify that a failed socket read (due to an ERR_CONNECTION_CLOSED | 13925 // Test to verify that a failed socket read (due to an ERR_CONNECTION_CLOSED |
13921 // error) in SPDY session, removes the socket from pool and closes the SPDY | 13926 // error) in SPDY session, removes the socket from pool and closes the SPDY |
13922 // session. Verify that new url's from the same HttpNetworkSession (and a new | 13927 // session. Verify that new url's from the same HttpNetworkSession (and a new |
13923 // SpdySession) do work. http://crbug.com/224701 | 13928 // SpdySession) do work. http://crbug.com/224701 |
13924 TEST_P(HttpNetworkTransactionTest, ErrorSocketNotConnected) { | 13929 TEST_P(HttpNetworkTransactionTest, ErrorSocketNotConnected) { |
13925 const std::string https_url = "https://www.example.org/"; | 13930 const std::string https_url = "https://www.example.org/"; |
13926 | 13931 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13965 // Start the first transaction to set up the SpdySession and verify that | 13970 // Start the first transaction to set up the SpdySession and verify that |
13966 // connection was closed. | 13971 // connection was closed. |
13967 HttpRequestInfo request1; | 13972 HttpRequestInfo request1; |
13968 request1.method = "GET"; | 13973 request1.method = "GET"; |
13969 request1.url = GURL(https_url); | 13974 request1.url = GURL(https_url); |
13970 request1.load_flags = 0; | 13975 request1.load_flags = 0; |
13971 HttpNetworkTransaction trans1(MEDIUM, session.get()); | 13976 HttpNetworkTransaction trans1(MEDIUM, session.get()); |
13972 TestCompletionCallback callback1; | 13977 TestCompletionCallback callback1; |
13973 EXPECT_EQ(ERR_IO_PENDING, | 13978 EXPECT_EQ(ERR_IO_PENDING, |
13974 trans1.Start(&request1, callback1.callback(), BoundNetLog())); | 13979 trans1.Start(&request1, callback1.callback(), BoundNetLog())); |
13975 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback1.WaitForResult()); | 13980 EXPECT_THAT(callback1.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); |
13976 | 13981 |
13977 // Now, start the second request and make sure it succeeds. | 13982 // Now, start the second request and make sure it succeeds. |
13978 HttpRequestInfo request2; | 13983 HttpRequestInfo request2; |
13979 request2.method = "GET"; | 13984 request2.method = "GET"; |
13980 request2.url = GURL(https_url); | 13985 request2.url = GURL(https_url); |
13981 request2.load_flags = 0; | 13986 request2.load_flags = 0; |
13982 HttpNetworkTransaction trans2(MEDIUM, session.get()); | 13987 HttpNetworkTransaction trans2(MEDIUM, session.get()); |
13983 TestCompletionCallback callback2; | 13988 TestCompletionCallback callback2; |
13984 EXPECT_EQ(ERR_IO_PENDING, | 13989 EXPECT_EQ(ERR_IO_PENDING, |
13985 trans2.Start(&request2, callback2.callback(), BoundNetLog())); | 13990 trans2.Start(&request2, callback2.callback(), BoundNetLog())); |
13986 | 13991 |
13987 ASSERT_EQ(OK, callback2.WaitForResult()); | 13992 ASSERT_THAT(callback2.WaitForResult(), IsOk()); |
13988 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 13993 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
13989 } | 13994 } |
13990 | 13995 |
13991 TEST_P(HttpNetworkTransactionTest, CloseIdleSpdySessionToOpenNewOne) { | 13996 TEST_P(HttpNetworkTransactionTest, CloseIdleSpdySessionToOpenNewOne) { |
13992 ClientSocketPoolManager::set_max_sockets_per_group( | 13997 ClientSocketPoolManager::set_max_sockets_per_group( |
13993 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 13998 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
13994 ClientSocketPoolManager::set_max_sockets_per_pool( | 13999 ClientSocketPoolManager::set_max_sockets_per_pool( |
13995 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 14000 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
13996 | 14001 |
13997 // Use two different hosts with different IPs so they don't get pooled. | 14002 // Use two different hosts with different IPs so they don't get pooled. |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14071 | 14076 |
14072 TestCompletionCallback callback; | 14077 TestCompletionCallback callback; |
14073 HttpRequestInfo request1; | 14078 HttpRequestInfo request1; |
14074 request1.method = "GET"; | 14079 request1.method = "GET"; |
14075 request1.url = GURL("https://www.a.com/"); | 14080 request1.url = GURL("https://www.a.com/"); |
14076 request1.load_flags = 0; | 14081 request1.load_flags = 0; |
14077 std::unique_ptr<HttpNetworkTransaction> trans( | 14082 std::unique_ptr<HttpNetworkTransaction> trans( |
14078 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14083 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
14079 | 14084 |
14080 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); | 14085 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); |
14081 EXPECT_EQ(ERR_IO_PENDING, rv); | 14086 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14082 EXPECT_EQ(OK, callback.WaitForResult()); | 14087 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
14083 | 14088 |
14084 const HttpResponseInfo* response = trans->GetResponseInfo(); | 14089 const HttpResponseInfo* response = trans->GetResponseInfo(); |
14085 ASSERT_TRUE(response); | 14090 ASSERT_TRUE(response); |
14086 ASSERT_TRUE(response->headers); | 14091 ASSERT_TRUE(response->headers); |
14087 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 14092 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
14088 EXPECT_TRUE(response->was_fetched_via_spdy); | 14093 EXPECT_TRUE(response->was_fetched_via_spdy); |
14089 EXPECT_TRUE(response->was_npn_negotiated); | 14094 EXPECT_TRUE(response->was_npn_negotiated); |
14090 | 14095 |
14091 std::string response_data; | 14096 std::string response_data; |
14092 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 14097 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
14093 EXPECT_EQ("hello!", response_data); | 14098 EXPECT_EQ("hello!", response_data); |
14094 trans.reset(); | 14099 trans.reset(); |
14095 EXPECT_TRUE( | 14100 EXPECT_TRUE( |
14096 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 14101 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
14097 | 14102 |
14098 HostPortPair host_port_pair_b("www.b.com", 443); | 14103 HostPortPair host_port_pair_b("www.b.com", 443); |
14099 SpdySessionKey spdy_session_key_b( | 14104 SpdySessionKey spdy_session_key_b( |
14100 host_port_pair_b, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 14105 host_port_pair_b, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
14101 EXPECT_FALSE( | 14106 EXPECT_FALSE( |
14102 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | 14107 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
14103 HttpRequestInfo request2; | 14108 HttpRequestInfo request2; |
14104 request2.method = "GET"; | 14109 request2.method = "GET"; |
14105 request2.url = GURL("https://www.b.com/"); | 14110 request2.url = GURL("https://www.b.com/"); |
14106 request2.load_flags = 0; | 14111 request2.load_flags = 0; |
14107 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14112 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
14108 | 14113 |
14109 rv = trans->Start(&request2, callback.callback(), BoundNetLog()); | 14114 rv = trans->Start(&request2, callback.callback(), BoundNetLog()); |
14110 EXPECT_EQ(ERR_IO_PENDING, rv); | 14115 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14111 EXPECT_EQ(OK, callback.WaitForResult()); | 14116 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
14112 | 14117 |
14113 response = trans->GetResponseInfo(); | 14118 response = trans->GetResponseInfo(); |
14114 ASSERT_TRUE(response); | 14119 ASSERT_TRUE(response); |
14115 ASSERT_TRUE(response->headers); | 14120 ASSERT_TRUE(response->headers); |
14116 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 14121 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
14117 EXPECT_TRUE(response->was_fetched_via_spdy); | 14122 EXPECT_TRUE(response->was_fetched_via_spdy); |
14118 EXPECT_TRUE(response->was_npn_negotiated); | 14123 EXPECT_TRUE(response->was_npn_negotiated); |
14119 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 14124 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
14120 EXPECT_EQ("hello!", response_data); | 14125 EXPECT_EQ("hello!", response_data); |
14121 EXPECT_FALSE( | 14126 EXPECT_FALSE( |
14122 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 14127 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
14123 EXPECT_TRUE( | 14128 EXPECT_TRUE( |
14124 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | 14129 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
14125 | 14130 |
14126 HostPortPair host_port_pair_a1("www.a.com", 80); | 14131 HostPortPair host_port_pair_a1("www.a.com", 80); |
14127 SpdySessionKey spdy_session_key_a1( | 14132 SpdySessionKey spdy_session_key_a1( |
14128 host_port_pair_a1, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 14133 host_port_pair_a1, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
14129 EXPECT_FALSE( | 14134 EXPECT_FALSE( |
14130 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a1)); | 14135 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a1)); |
14131 HttpRequestInfo request3; | 14136 HttpRequestInfo request3; |
14132 request3.method = "GET"; | 14137 request3.method = "GET"; |
14133 request3.url = GURL("http://www.a.com/"); | 14138 request3.url = GURL("http://www.a.com/"); |
14134 request3.load_flags = 0; | 14139 request3.load_flags = 0; |
14135 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14140 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
14136 | 14141 |
14137 rv = trans->Start(&request3, callback.callback(), BoundNetLog()); | 14142 rv = trans->Start(&request3, callback.callback(), BoundNetLog()); |
14138 EXPECT_EQ(ERR_IO_PENDING, rv); | 14143 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14139 EXPECT_EQ(OK, callback.WaitForResult()); | 14144 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
14140 | 14145 |
14141 response = trans->GetResponseInfo(); | 14146 response = trans->GetResponseInfo(); |
14142 ASSERT_TRUE(response); | 14147 ASSERT_TRUE(response); |
14143 ASSERT_TRUE(response->headers); | 14148 ASSERT_TRUE(response->headers); |
14144 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 14149 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
14145 EXPECT_FALSE(response->was_fetched_via_spdy); | 14150 EXPECT_FALSE(response->was_fetched_via_spdy); |
14146 EXPECT_FALSE(response->was_npn_negotiated); | 14151 EXPECT_FALSE(response->was_npn_negotiated); |
14147 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 14152 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
14148 EXPECT_EQ("hello!", response_data); | 14153 EXPECT_EQ("hello!", response_data); |
14149 EXPECT_FALSE( | 14154 EXPECT_FALSE( |
14150 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 14155 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
14151 EXPECT_FALSE( | 14156 EXPECT_FALSE( |
14152 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | 14157 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
14153 } | 14158 } |
14154 | 14159 |
14155 TEST_P(HttpNetworkTransactionTest, HttpSyncConnectError) { | 14160 TEST_P(HttpNetworkTransactionTest, HttpSyncConnectError) { |
14156 HttpRequestInfo request; | 14161 HttpRequestInfo request; |
14157 request.method = "GET"; | 14162 request.method = "GET"; |
14158 request.url = GURL("http://www.example.org/"); | 14163 request.url = GURL("http://www.example.org/"); |
14159 request.load_flags = 0; | 14164 request.load_flags = 0; |
14160 | 14165 |
14161 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14166 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
14162 std::unique_ptr<HttpTransaction> trans( | 14167 std::unique_ptr<HttpTransaction> trans( |
14163 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14168 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
14164 | 14169 |
14165 MockConnect mock_connect(SYNCHRONOUS, ERR_NAME_NOT_RESOLVED); | 14170 MockConnect mock_connect(SYNCHRONOUS, ERR_NAME_NOT_RESOLVED); |
14166 StaticSocketDataProvider data; | 14171 StaticSocketDataProvider data; |
14167 data.set_connect_data(mock_connect); | 14172 data.set_connect_data(mock_connect); |
14168 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14173 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14169 | 14174 |
14170 TestCompletionCallback callback; | 14175 TestCompletionCallback callback; |
14171 | 14176 |
14172 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14177 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14173 EXPECT_EQ(ERR_IO_PENDING, rv); | 14178 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14174 | 14179 |
14175 rv = callback.WaitForResult(); | 14180 rv = callback.WaitForResult(); |
14176 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); | 14181 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); |
14177 | 14182 |
14178 // We don't care whether this succeeds or fails, but it shouldn't crash. | 14183 // We don't care whether this succeeds or fails, but it shouldn't crash. |
14179 HttpRequestHeaders request_headers; | 14184 HttpRequestHeaders request_headers; |
14180 trans->GetFullRequestHeaders(&request_headers); | 14185 trans->GetFullRequestHeaders(&request_headers); |
14181 | 14186 |
14182 ConnectionAttempts attempts; | 14187 ConnectionAttempts attempts; |
14183 trans->GetConnectionAttempts(&attempts); | 14188 trans->GetConnectionAttempts(&attempts); |
14184 ASSERT_EQ(1u, attempts.size()); | 14189 ASSERT_EQ(1u, attempts.size()); |
14185 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, attempts[0].result); | 14190 EXPECT_THAT(attempts[0].result, IsError(ERR_NAME_NOT_RESOLVED)); |
14186 | 14191 |
14187 IPEndPoint endpoint; | 14192 IPEndPoint endpoint; |
14188 EXPECT_FALSE(trans->GetRemoteEndpoint(&endpoint)); | 14193 EXPECT_FALSE(trans->GetRemoteEndpoint(&endpoint)); |
14189 EXPECT_TRUE(endpoint.address().empty()); | 14194 EXPECT_TRUE(endpoint.address().empty()); |
14190 } | 14195 } |
14191 | 14196 |
14192 TEST_P(HttpNetworkTransactionTest, HttpAsyncConnectError) { | 14197 TEST_P(HttpNetworkTransactionTest, HttpAsyncConnectError) { |
14193 HttpRequestInfo request; | 14198 HttpRequestInfo request; |
14194 request.method = "GET"; | 14199 request.method = "GET"; |
14195 request.url = GURL("http://www.example.org/"); | 14200 request.url = GURL("http://www.example.org/"); |
14196 request.load_flags = 0; | 14201 request.load_flags = 0; |
14197 | 14202 |
14198 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14203 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
14199 std::unique_ptr<HttpTransaction> trans( | 14204 std::unique_ptr<HttpTransaction> trans( |
14200 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14205 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
14201 | 14206 |
14202 MockConnect mock_connect(ASYNC, ERR_NAME_NOT_RESOLVED); | 14207 MockConnect mock_connect(ASYNC, ERR_NAME_NOT_RESOLVED); |
14203 StaticSocketDataProvider data; | 14208 StaticSocketDataProvider data; |
14204 data.set_connect_data(mock_connect); | 14209 data.set_connect_data(mock_connect); |
14205 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14210 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14206 | 14211 |
14207 TestCompletionCallback callback; | 14212 TestCompletionCallback callback; |
14208 | 14213 |
14209 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14214 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14210 EXPECT_EQ(ERR_IO_PENDING, rv); | 14215 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14211 | 14216 |
14212 rv = callback.WaitForResult(); | 14217 rv = callback.WaitForResult(); |
14213 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); | 14218 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); |
14214 | 14219 |
14215 // We don't care whether this succeeds or fails, but it shouldn't crash. | 14220 // We don't care whether this succeeds or fails, but it shouldn't crash. |
14216 HttpRequestHeaders request_headers; | 14221 HttpRequestHeaders request_headers; |
14217 trans->GetFullRequestHeaders(&request_headers); | 14222 trans->GetFullRequestHeaders(&request_headers); |
14218 | 14223 |
14219 ConnectionAttempts attempts; | 14224 ConnectionAttempts attempts; |
14220 trans->GetConnectionAttempts(&attempts); | 14225 trans->GetConnectionAttempts(&attempts); |
14221 ASSERT_EQ(1u, attempts.size()); | 14226 ASSERT_EQ(1u, attempts.size()); |
14222 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, attempts[0].result); | 14227 EXPECT_THAT(attempts[0].result, IsError(ERR_NAME_NOT_RESOLVED)); |
14223 | 14228 |
14224 IPEndPoint endpoint; | 14229 IPEndPoint endpoint; |
14225 EXPECT_FALSE(trans->GetRemoteEndpoint(&endpoint)); | 14230 EXPECT_FALSE(trans->GetRemoteEndpoint(&endpoint)); |
14226 EXPECT_TRUE(endpoint.address().empty()); | 14231 EXPECT_TRUE(endpoint.address().empty()); |
14227 } | 14232 } |
14228 | 14233 |
14229 TEST_P(HttpNetworkTransactionTest, HttpSyncWriteError) { | 14234 TEST_P(HttpNetworkTransactionTest, HttpSyncWriteError) { |
14230 HttpRequestInfo request; | 14235 HttpRequestInfo request; |
14231 request.method = "GET"; | 14236 request.method = "GET"; |
14232 request.url = GURL("http://www.example.org/"); | 14237 request.url = GURL("http://www.example.org/"); |
(...skipping 10 matching lines...) Expand all Loading... |
14243 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 14248 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
14244 }; | 14249 }; |
14245 | 14250 |
14246 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 14251 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
14247 data_writes, arraysize(data_writes)); | 14252 data_writes, arraysize(data_writes)); |
14248 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14253 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14249 | 14254 |
14250 TestCompletionCallback callback; | 14255 TestCompletionCallback callback; |
14251 | 14256 |
14252 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14257 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14253 EXPECT_EQ(ERR_IO_PENDING, rv); | 14258 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14254 | 14259 |
14255 rv = callback.WaitForResult(); | 14260 rv = callback.WaitForResult(); |
14256 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 14261 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
14257 | 14262 |
14258 HttpRequestHeaders request_headers; | 14263 HttpRequestHeaders request_headers; |
14259 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 14264 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
14260 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14265 EXPECT_TRUE(request_headers.HasHeader("Host")); |
14261 } | 14266 } |
14262 | 14267 |
14263 TEST_P(HttpNetworkTransactionTest, HttpAsyncWriteError) { | 14268 TEST_P(HttpNetworkTransactionTest, HttpAsyncWriteError) { |
14264 HttpRequestInfo request; | 14269 HttpRequestInfo request; |
14265 request.method = "GET"; | 14270 request.method = "GET"; |
14266 request.url = GURL("http://www.example.org/"); | 14271 request.url = GURL("http://www.example.org/"); |
(...skipping 10 matching lines...) Expand all Loading... |
14277 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 14282 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
14278 }; | 14283 }; |
14279 | 14284 |
14280 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 14285 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
14281 data_writes, arraysize(data_writes)); | 14286 data_writes, arraysize(data_writes)); |
14282 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14287 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14283 | 14288 |
14284 TestCompletionCallback callback; | 14289 TestCompletionCallback callback; |
14285 | 14290 |
14286 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14291 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14287 EXPECT_EQ(ERR_IO_PENDING, rv); | 14292 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14288 | 14293 |
14289 rv = callback.WaitForResult(); | 14294 rv = callback.WaitForResult(); |
14290 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 14295 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
14291 | 14296 |
14292 HttpRequestHeaders request_headers; | 14297 HttpRequestHeaders request_headers; |
14293 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 14298 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
14294 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14299 EXPECT_TRUE(request_headers.HasHeader("Host")); |
14295 } | 14300 } |
14296 | 14301 |
14297 TEST_P(HttpNetworkTransactionTest, HttpSyncReadError) { | 14302 TEST_P(HttpNetworkTransactionTest, HttpSyncReadError) { |
14298 HttpRequestInfo request; | 14303 HttpRequestInfo request; |
14299 request.method = "GET"; | 14304 request.method = "GET"; |
14300 request.url = GURL("http://www.example.org/"); | 14305 request.url = GURL("http://www.example.org/"); |
(...skipping 13 matching lines...) Expand all Loading... |
14314 MockRead(SYNCHRONOUS, ERR_CONNECTION_RESET), | 14319 MockRead(SYNCHRONOUS, ERR_CONNECTION_RESET), |
14315 }; | 14320 }; |
14316 | 14321 |
14317 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 14322 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
14318 data_writes, arraysize(data_writes)); | 14323 data_writes, arraysize(data_writes)); |
14319 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14324 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14320 | 14325 |
14321 TestCompletionCallback callback; | 14326 TestCompletionCallback callback; |
14322 | 14327 |
14323 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14328 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14324 EXPECT_EQ(ERR_IO_PENDING, rv); | 14329 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14325 | 14330 |
14326 rv = callback.WaitForResult(); | 14331 rv = callback.WaitForResult(); |
14327 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 14332 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
14328 | 14333 |
14329 HttpRequestHeaders request_headers; | 14334 HttpRequestHeaders request_headers; |
14330 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 14335 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
14331 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14336 EXPECT_TRUE(request_headers.HasHeader("Host")); |
14332 } | 14337 } |
14333 | 14338 |
14334 TEST_P(HttpNetworkTransactionTest, HttpAsyncReadError) { | 14339 TEST_P(HttpNetworkTransactionTest, HttpAsyncReadError) { |
14335 HttpRequestInfo request; | 14340 HttpRequestInfo request; |
14336 request.method = "GET"; | 14341 request.method = "GET"; |
14337 request.url = GURL("http://www.example.org/"); | 14342 request.url = GURL("http://www.example.org/"); |
(...skipping 13 matching lines...) Expand all Loading... |
14351 MockRead(ASYNC, ERR_CONNECTION_RESET), | 14356 MockRead(ASYNC, ERR_CONNECTION_RESET), |
14352 }; | 14357 }; |
14353 | 14358 |
14354 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 14359 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
14355 data_writes, arraysize(data_writes)); | 14360 data_writes, arraysize(data_writes)); |
14356 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14361 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14357 | 14362 |
14358 TestCompletionCallback callback; | 14363 TestCompletionCallback callback; |
14359 | 14364 |
14360 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14365 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14361 EXPECT_EQ(ERR_IO_PENDING, rv); | 14366 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14362 | 14367 |
14363 rv = callback.WaitForResult(); | 14368 rv = callback.WaitForResult(); |
14364 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 14369 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
14365 | 14370 |
14366 HttpRequestHeaders request_headers; | 14371 HttpRequestHeaders request_headers; |
14367 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 14372 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
14368 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14373 EXPECT_TRUE(request_headers.HasHeader("Host")); |
14369 } | 14374 } |
14370 | 14375 |
14371 TEST_P(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { | 14376 TEST_P(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { |
14372 HttpRequestInfo request; | 14377 HttpRequestInfo request; |
14373 request.method = "GET"; | 14378 request.method = "GET"; |
14374 request.url = GURL("http://www.example.org/"); | 14379 request.url = GURL("http://www.example.org/"); |
(...skipping 18 matching lines...) Expand all Loading... |
14393 MockRead(ASYNC, ERR_UNEXPECTED), | 14398 MockRead(ASYNC, ERR_UNEXPECTED), |
14394 }; | 14399 }; |
14395 | 14400 |
14396 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 14401 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
14397 data_writes, arraysize(data_writes)); | 14402 data_writes, arraysize(data_writes)); |
14398 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14403 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14399 | 14404 |
14400 TestCompletionCallback callback; | 14405 TestCompletionCallback callback; |
14401 | 14406 |
14402 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14407 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14403 EXPECT_EQ(ERR_IO_PENDING, rv); | 14408 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14404 | 14409 |
14405 rv = callback.WaitForResult(); | 14410 rv = callback.WaitForResult(); |
14406 EXPECT_EQ(OK, rv); | 14411 EXPECT_THAT(rv, IsOk()); |
14407 | 14412 |
14408 HttpRequestHeaders request_headers; | 14413 HttpRequestHeaders request_headers; |
14409 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 14414 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
14410 std::string foo; | 14415 std::string foo; |
14411 EXPECT_TRUE(request_headers.GetHeader("X-Foo", &foo)); | 14416 EXPECT_TRUE(request_headers.GetHeader("X-Foo", &foo)); |
14412 EXPECT_EQ("bar", foo); | 14417 EXPECT_EQ("bar", foo); |
14413 } | 14418 } |
14414 | 14419 |
14415 namespace { | 14420 namespace { |
14416 | 14421 |
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14964 // Start the HTTP request. Pool should stall. | 14969 // Start the HTTP request. Pool should stall. |
14965 TestCompletionCallback http_callback; | 14970 TestCompletionCallback http_callback; |
14966 std::unique_ptr<HttpTransaction> http_trans( | 14971 std::unique_ptr<HttpTransaction> http_trans( |
14967 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14972 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
14968 ASSERT_EQ(ERR_IO_PENDING, | 14973 ASSERT_EQ(ERR_IO_PENDING, |
14969 http_trans->Start(&http_request, http_callback.callback(), | 14974 http_trans->Start(&http_request, http_callback.callback(), |
14970 BoundNetLog())); | 14975 BoundNetLog())); |
14971 EXPECT_TRUE(IsTransportSocketPoolStalled(session.get())); | 14976 EXPECT_TRUE(IsTransportSocketPoolStalled(session.get())); |
14972 | 14977 |
14973 // Wait for response from SSL request. | 14978 // Wait for response from SSL request. |
14974 ASSERT_EQ(OK, ssl_callback.WaitForResult()); | 14979 ASSERT_THAT(ssl_callback.WaitForResult(), IsOk()); |
14975 std::string response_data; | 14980 std::string response_data; |
14976 ASSERT_EQ(OK, ReadTransaction(ssl_trans.get(), &response_data)); | 14981 ASSERT_THAT(ReadTransaction(ssl_trans.get(), &response_data), IsOk()); |
14977 EXPECT_EQ("hello world", response_data); | 14982 EXPECT_EQ("hello world", response_data); |
14978 | 14983 |
14979 // The SSL socket should automatically be closed, so the HTTP request can | 14984 // The SSL socket should automatically be closed, so the HTTP request can |
14980 // start. | 14985 // start. |
14981 EXPECT_EQ(0, GetIdleSocketCountInSSLSocketPool(session.get())); | 14986 EXPECT_EQ(0, GetIdleSocketCountInSSLSocketPool(session.get())); |
14982 ASSERT_FALSE(IsTransportSocketPoolStalled(session.get())); | 14987 ASSERT_FALSE(IsTransportSocketPoolStalled(session.get())); |
14983 | 14988 |
14984 // The HTTP request can now complete. | 14989 // The HTTP request can now complete. |
14985 ASSERT_EQ(OK, http_callback.WaitForResult()); | 14990 ASSERT_THAT(http_callback.WaitForResult(), IsOk()); |
14986 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data)); | 14991 ASSERT_THAT(ReadTransaction(http_trans.get(), &response_data), IsOk()); |
14987 EXPECT_EQ("falafel", response_data); | 14992 EXPECT_EQ("falafel", response_data); |
14988 | 14993 |
14989 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 14994 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
14990 } | 14995 } |
14991 | 14996 |
14992 // Tests that when a SSL connection is established but there's no corresponding | 14997 // Tests that when a SSL connection is established but there's no corresponding |
14993 // request that needs it, the new socket is closed if the transport socket pool | 14998 // request that needs it, the new socket is closed if the transport socket pool |
14994 // is stalled on the global socket limit. | 14999 // is stalled on the global socket limit. |
14995 TEST_P(HttpNetworkTransactionTest, CloseSSLSocketOnIdleForHttpRequest2) { | 15000 TEST_P(HttpNetworkTransactionTest, CloseSSLSocketOnIdleForHttpRequest2) { |
14996 ClientSocketPoolManager::set_max_sockets_per_group( | 15001 ClientSocketPoolManager::set_max_sockets_per_group( |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15045 TestCompletionCallback http_callback; | 15050 TestCompletionCallback http_callback; |
15046 std::unique_ptr<HttpTransaction> http_trans( | 15051 std::unique_ptr<HttpTransaction> http_trans( |
15047 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15052 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
15048 ASSERT_EQ(ERR_IO_PENDING, | 15053 ASSERT_EQ(ERR_IO_PENDING, |
15049 http_trans->Start(&http_request, http_callback.callback(), | 15054 http_trans->Start(&http_request, http_callback.callback(), |
15050 BoundNetLog())); | 15055 BoundNetLog())); |
15051 EXPECT_TRUE(IsTransportSocketPoolStalled(session.get())); | 15056 EXPECT_TRUE(IsTransportSocketPoolStalled(session.get())); |
15052 | 15057 |
15053 // The SSL connection will automatically be closed once the connection is | 15058 // The SSL connection will automatically be closed once the connection is |
15054 // established, to let the HTTP request start. | 15059 // established, to let the HTTP request start. |
15055 ASSERT_EQ(OK, http_callback.WaitForResult()); | 15060 ASSERT_THAT(http_callback.WaitForResult(), IsOk()); |
15056 std::string response_data; | 15061 std::string response_data; |
15057 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data)); | 15062 ASSERT_THAT(ReadTransaction(http_trans.get(), &response_data), IsOk()); |
15058 EXPECT_EQ("falafel", response_data); | 15063 EXPECT_EQ("falafel", response_data); |
15059 | 15064 |
15060 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 15065 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
15061 } | 15066 } |
15062 | 15067 |
15063 TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterReset) { | 15068 TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterReset) { |
15064 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15069 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15065 element_readers.push_back( | 15070 element_readers.push_back( |
15066 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15071 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
15067 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15072 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
(...skipping 21 matching lines...) Expand all Loading... |
15089 MockRead("hello world"), | 15094 MockRead("hello world"), |
15090 MockRead(SYNCHRONOUS, OK), | 15095 MockRead(SYNCHRONOUS, OK), |
15091 }; | 15096 }; |
15092 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15097 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15093 arraysize(data_writes)); | 15098 arraysize(data_writes)); |
15094 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15099 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15095 | 15100 |
15096 TestCompletionCallback callback; | 15101 TestCompletionCallback callback; |
15097 | 15102 |
15098 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15103 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
15099 EXPECT_EQ(ERR_IO_PENDING, rv); | 15104 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15100 | 15105 |
15101 rv = callback.WaitForResult(); | 15106 rv = callback.WaitForResult(); |
15102 EXPECT_EQ(OK, rv); | 15107 EXPECT_THAT(rv, IsOk()); |
15103 | 15108 |
15104 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15109 const HttpResponseInfo* response = trans->GetResponseInfo(); |
15105 ASSERT_TRUE(response); | 15110 ASSERT_TRUE(response); |
15106 | 15111 |
15107 EXPECT_TRUE(response->headers); | 15112 EXPECT_TRUE(response->headers); |
15108 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); | 15113 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); |
15109 | 15114 |
15110 std::string response_data; | 15115 std::string response_data; |
15111 rv = ReadTransaction(trans.get(), &response_data); | 15116 rv = ReadTransaction(trans.get(), &response_data); |
15112 EXPECT_EQ(OK, rv); | 15117 EXPECT_THAT(rv, IsOk()); |
15113 EXPECT_EQ("hello world", response_data); | 15118 EXPECT_EQ("hello world", response_data); |
15114 } | 15119 } |
15115 | 15120 |
15116 // This test makes sure the retry logic doesn't trigger when reading an error | 15121 // This test makes sure the retry logic doesn't trigger when reading an error |
15117 // response from a server that rejected a POST with a CONNECTION_RESET. | 15122 // response from a server that rejected a POST with a CONNECTION_RESET. |
15118 TEST_P(HttpNetworkTransactionTest, | 15123 TEST_P(HttpNetworkTransactionTest, |
15119 PostReadsErrorResponseAfterResetOnReusedSocket) { | 15124 PostReadsErrorResponseAfterResetOnReusedSocket) { |
15120 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15125 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
15121 MockWrite data_writes[] = { | 15126 MockWrite data_writes[] = { |
15122 MockWrite("GET / HTTP/1.1\r\n" | 15127 MockWrite("GET / HTTP/1.1\r\n" |
(...skipping 21 matching lines...) Expand all Loading... |
15144 | 15149 |
15145 TestCompletionCallback callback; | 15150 TestCompletionCallback callback; |
15146 HttpRequestInfo request1; | 15151 HttpRequestInfo request1; |
15147 request1.method = "GET"; | 15152 request1.method = "GET"; |
15148 request1.url = GURL("http://www.foo.com/"); | 15153 request1.url = GURL("http://www.foo.com/"); |
15149 request1.load_flags = 0; | 15154 request1.load_flags = 0; |
15150 | 15155 |
15151 std::unique_ptr<HttpTransaction> trans1( | 15156 std::unique_ptr<HttpTransaction> trans1( |
15152 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15157 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
15153 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); | 15158 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); |
15154 EXPECT_EQ(ERR_IO_PENDING, rv); | 15159 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15155 | 15160 |
15156 rv = callback.WaitForResult(); | 15161 rv = callback.WaitForResult(); |
15157 EXPECT_EQ(OK, rv); | 15162 EXPECT_THAT(rv, IsOk()); |
15158 | 15163 |
15159 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 15164 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
15160 ASSERT_TRUE(response1); | 15165 ASSERT_TRUE(response1); |
15161 | 15166 |
15162 EXPECT_TRUE(response1->headers); | 15167 EXPECT_TRUE(response1->headers); |
15163 EXPECT_EQ("HTTP/1.1 200 Peachy", response1->headers->GetStatusLine()); | 15168 EXPECT_EQ("HTTP/1.1 200 Peachy", response1->headers->GetStatusLine()); |
15164 | 15169 |
15165 std::string response_data1; | 15170 std::string response_data1; |
15166 rv = ReadTransaction(trans1.get(), &response_data1); | 15171 rv = ReadTransaction(trans1.get(), &response_data1); |
15167 EXPECT_EQ(OK, rv); | 15172 EXPECT_THAT(rv, IsOk()); |
15168 EXPECT_EQ("first response", response_data1); | 15173 EXPECT_EQ("first response", response_data1); |
15169 // Delete the transaction to release the socket back into the socket pool. | 15174 // Delete the transaction to release the socket back into the socket pool. |
15170 trans1.reset(); | 15175 trans1.reset(); |
15171 | 15176 |
15172 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15177 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15173 element_readers.push_back( | 15178 element_readers.push_back( |
15174 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15179 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
15175 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15180 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15176 | 15181 |
15177 HttpRequestInfo request2; | 15182 HttpRequestInfo request2; |
15178 request2.method = "POST"; | 15183 request2.method = "POST"; |
15179 request2.url = GURL("http://www.foo.com/"); | 15184 request2.url = GURL("http://www.foo.com/"); |
15180 request2.upload_data_stream = &upload_data_stream; | 15185 request2.upload_data_stream = &upload_data_stream; |
15181 request2.load_flags = 0; | 15186 request2.load_flags = 0; |
15182 | 15187 |
15183 std::unique_ptr<HttpTransaction> trans2( | 15188 std::unique_ptr<HttpTransaction> trans2( |
15184 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15189 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
15185 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 15190 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
15186 EXPECT_EQ(ERR_IO_PENDING, rv); | 15191 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15187 | 15192 |
15188 rv = callback.WaitForResult(); | 15193 rv = callback.WaitForResult(); |
15189 EXPECT_EQ(OK, rv); | 15194 EXPECT_THAT(rv, IsOk()); |
15190 | 15195 |
15191 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 15196 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
15192 ASSERT_TRUE(response2); | 15197 ASSERT_TRUE(response2); |
15193 | 15198 |
15194 EXPECT_TRUE(response2->headers); | 15199 EXPECT_TRUE(response2->headers); |
15195 EXPECT_EQ("HTTP/1.1 400 Not OK", response2->headers->GetStatusLine()); | 15200 EXPECT_EQ("HTTP/1.1 400 Not OK", response2->headers->GetStatusLine()); |
15196 | 15201 |
15197 std::string response_data2; | 15202 std::string response_data2; |
15198 rv = ReadTransaction(trans2.get(), &response_data2); | 15203 rv = ReadTransaction(trans2.get(), &response_data2); |
15199 EXPECT_EQ(OK, rv); | 15204 EXPECT_THAT(rv, IsOk()); |
15200 EXPECT_EQ("second response", response_data2); | 15205 EXPECT_EQ("second response", response_data2); |
15201 } | 15206 } |
15202 | 15207 |
15203 TEST_P(HttpNetworkTransactionTest, | 15208 TEST_P(HttpNetworkTransactionTest, |
15204 PostReadsErrorResponseAfterResetPartialBodySent) { | 15209 PostReadsErrorResponseAfterResetPartialBodySent) { |
15205 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15210 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15206 element_readers.push_back( | 15211 element_readers.push_back( |
15207 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15212 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
15208 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15213 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15209 | 15214 |
(...skipping 21 matching lines...) Expand all Loading... |
15231 MockRead("hello world"), | 15236 MockRead("hello world"), |
15232 MockRead(SYNCHRONOUS, OK), | 15237 MockRead(SYNCHRONOUS, OK), |
15233 }; | 15238 }; |
15234 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15239 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15235 arraysize(data_writes)); | 15240 arraysize(data_writes)); |
15236 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15241 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15237 | 15242 |
15238 TestCompletionCallback callback; | 15243 TestCompletionCallback callback; |
15239 | 15244 |
15240 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15245 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
15241 EXPECT_EQ(ERR_IO_PENDING, rv); | 15246 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15242 | 15247 |
15243 rv = callback.WaitForResult(); | 15248 rv = callback.WaitForResult(); |
15244 EXPECT_EQ(OK, rv); | 15249 EXPECT_THAT(rv, IsOk()); |
15245 | 15250 |
15246 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15251 const HttpResponseInfo* response = trans->GetResponseInfo(); |
15247 ASSERT_TRUE(response); | 15252 ASSERT_TRUE(response); |
15248 | 15253 |
15249 EXPECT_TRUE(response->headers); | 15254 EXPECT_TRUE(response->headers); |
15250 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); | 15255 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); |
15251 | 15256 |
15252 std::string response_data; | 15257 std::string response_data; |
15253 rv = ReadTransaction(trans.get(), &response_data); | 15258 rv = ReadTransaction(trans.get(), &response_data); |
15254 EXPECT_EQ(OK, rv); | 15259 EXPECT_THAT(rv, IsOk()); |
15255 EXPECT_EQ("hello world", response_data); | 15260 EXPECT_EQ("hello world", response_data); |
15256 } | 15261 } |
15257 | 15262 |
15258 // This tests the more common case than the previous test, where headers and | 15263 // This tests the more common case than the previous test, where headers and |
15259 // body are not merged into a single request. | 15264 // body are not merged into a single request. |
15260 TEST_P(HttpNetworkTransactionTest, ChunkedPostReadsErrorResponseAfterReset) { | 15265 TEST_P(HttpNetworkTransactionTest, ChunkedPostReadsErrorResponseAfterReset) { |
15261 ChunkedUploadDataStream upload_data_stream(0); | 15266 ChunkedUploadDataStream upload_data_stream(0); |
15262 | 15267 |
15263 HttpRequestInfo request; | 15268 HttpRequestInfo request; |
15264 request.method = "POST"; | 15269 request.method = "POST"; |
(...skipping 18 matching lines...) Expand all Loading... |
15283 MockRead("hello world"), | 15288 MockRead("hello world"), |
15284 MockRead(SYNCHRONOUS, OK), | 15289 MockRead(SYNCHRONOUS, OK), |
15285 }; | 15290 }; |
15286 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15291 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15287 arraysize(data_writes)); | 15292 arraysize(data_writes)); |
15288 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15293 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15289 | 15294 |
15290 TestCompletionCallback callback; | 15295 TestCompletionCallback callback; |
15291 | 15296 |
15292 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15297 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
15293 EXPECT_EQ(ERR_IO_PENDING, rv); | 15298 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15294 // Make sure the headers are sent before adding a chunk. This ensures that | 15299 // Make sure the headers are sent before adding a chunk. This ensures that |
15295 // they can't be merged with the body in a single send. Not currently | 15300 // they can't be merged with the body in a single send. Not currently |
15296 // necessary since a chunked body is never merged with headers, but this makes | 15301 // necessary since a chunked body is never merged with headers, but this makes |
15297 // the test more future proof. | 15302 // the test more future proof. |
15298 base::RunLoop().RunUntilIdle(); | 15303 base::RunLoop().RunUntilIdle(); |
15299 | 15304 |
15300 upload_data_stream.AppendData("last chunk", 10, true); | 15305 upload_data_stream.AppendData("last chunk", 10, true); |
15301 | 15306 |
15302 rv = callback.WaitForResult(); | 15307 rv = callback.WaitForResult(); |
15303 EXPECT_EQ(OK, rv); | 15308 EXPECT_THAT(rv, IsOk()); |
15304 | 15309 |
15305 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15310 const HttpResponseInfo* response = trans->GetResponseInfo(); |
15306 ASSERT_TRUE(response); | 15311 ASSERT_TRUE(response); |
15307 | 15312 |
15308 EXPECT_TRUE(response->headers); | 15313 EXPECT_TRUE(response->headers); |
15309 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); | 15314 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); |
15310 | 15315 |
15311 std::string response_data; | 15316 std::string response_data; |
15312 rv = ReadTransaction(trans.get(), &response_data); | 15317 rv = ReadTransaction(trans.get(), &response_data); |
15313 EXPECT_EQ(OK, rv); | 15318 EXPECT_THAT(rv, IsOk()); |
15314 EXPECT_EQ("hello world", response_data); | 15319 EXPECT_EQ("hello world", response_data); |
15315 } | 15320 } |
15316 | 15321 |
15317 TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterResetAnd100) { | 15322 TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterResetAnd100) { |
15318 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15323 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15319 element_readers.push_back( | 15324 element_readers.push_back( |
15320 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15325 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
15321 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15326 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15322 | 15327 |
15323 HttpRequestInfo request; | 15328 HttpRequestInfo request; |
(...skipping 20 matching lines...) Expand all Loading... |
15344 MockRead("hello world"), | 15349 MockRead("hello world"), |
15345 MockRead(SYNCHRONOUS, OK), | 15350 MockRead(SYNCHRONOUS, OK), |
15346 }; | 15351 }; |
15347 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15352 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15348 arraysize(data_writes)); | 15353 arraysize(data_writes)); |
15349 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15354 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15350 | 15355 |
15351 TestCompletionCallback callback; | 15356 TestCompletionCallback callback; |
15352 | 15357 |
15353 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15358 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
15354 EXPECT_EQ(ERR_IO_PENDING, rv); | 15359 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15355 | 15360 |
15356 rv = callback.WaitForResult(); | 15361 rv = callback.WaitForResult(); |
15357 EXPECT_EQ(OK, rv); | 15362 EXPECT_THAT(rv, IsOk()); |
15358 | 15363 |
15359 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15364 const HttpResponseInfo* response = trans->GetResponseInfo(); |
15360 ASSERT_TRUE(response); | 15365 ASSERT_TRUE(response); |
15361 | 15366 |
15362 EXPECT_TRUE(response->headers); | 15367 EXPECT_TRUE(response->headers); |
15363 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); | 15368 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); |
15364 | 15369 |
15365 std::string response_data; | 15370 std::string response_data; |
15366 rv = ReadTransaction(trans.get(), &response_data); | 15371 rv = ReadTransaction(trans.get(), &response_data); |
15367 EXPECT_EQ(OK, rv); | 15372 EXPECT_THAT(rv, IsOk()); |
15368 EXPECT_EQ("hello world", response_data); | 15373 EXPECT_EQ("hello world", response_data); |
15369 } | 15374 } |
15370 | 15375 |
15371 TEST_P(HttpNetworkTransactionTest, PostIgnoresNonErrorResponseAfterReset) { | 15376 TEST_P(HttpNetworkTransactionTest, PostIgnoresNonErrorResponseAfterReset) { |
15372 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15377 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15373 element_readers.push_back( | 15378 element_readers.push_back( |
15374 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15379 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
15375 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15380 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15376 | 15381 |
15377 HttpRequestInfo request; | 15382 HttpRequestInfo request; |
(...skipping 19 matching lines...) Expand all Loading... |
15397 MockRead("hello world"), | 15402 MockRead("hello world"), |
15398 MockRead(SYNCHRONOUS, OK), | 15403 MockRead(SYNCHRONOUS, OK), |
15399 }; | 15404 }; |
15400 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15405 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15401 arraysize(data_writes)); | 15406 arraysize(data_writes)); |
15402 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15407 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15403 | 15408 |
15404 TestCompletionCallback callback; | 15409 TestCompletionCallback callback; |
15405 | 15410 |
15406 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15411 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
15407 EXPECT_EQ(ERR_IO_PENDING, rv); | 15412 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15408 | 15413 |
15409 rv = callback.WaitForResult(); | 15414 rv = callback.WaitForResult(); |
15410 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 15415 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
15411 } | 15416 } |
15412 | 15417 |
15413 TEST_P(HttpNetworkTransactionTest, | 15418 TEST_P(HttpNetworkTransactionTest, |
15414 PostIgnoresNonErrorResponseAfterResetAnd100) { | 15419 PostIgnoresNonErrorResponseAfterResetAnd100) { |
15415 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15420 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15416 element_readers.push_back( | 15421 element_readers.push_back( |
15417 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15422 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
15418 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15423 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15419 | 15424 |
15420 HttpRequestInfo request; | 15425 HttpRequestInfo request; |
(...skipping 21 matching lines...) Expand all Loading... |
15442 MockRead("Content-Length: 0\r\n\r\n"), | 15447 MockRead("Content-Length: 0\r\n\r\n"), |
15443 MockRead(SYNCHRONOUS, OK), | 15448 MockRead(SYNCHRONOUS, OK), |
15444 }; | 15449 }; |
15445 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15450 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15446 arraysize(data_writes)); | 15451 arraysize(data_writes)); |
15447 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15452 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15448 | 15453 |
15449 TestCompletionCallback callback; | 15454 TestCompletionCallback callback; |
15450 | 15455 |
15451 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15456 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
15452 EXPECT_EQ(ERR_IO_PENDING, rv); | 15457 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15453 | 15458 |
15454 rv = callback.WaitForResult(); | 15459 rv = callback.WaitForResult(); |
15455 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 15460 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
15456 } | 15461 } |
15457 | 15462 |
15458 TEST_P(HttpNetworkTransactionTest, PostIgnoresHttp09ResponseAfterReset) { | 15463 TEST_P(HttpNetworkTransactionTest, PostIgnoresHttp09ResponseAfterReset) { |
15459 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15464 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15460 element_readers.push_back( | 15465 element_readers.push_back( |
15461 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15466 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
15462 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15467 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15463 | 15468 |
15464 HttpRequestInfo request; | 15469 HttpRequestInfo request; |
15465 request.method = "POST"; | 15470 request.method = "POST"; |
(...skipping 17 matching lines...) Expand all Loading... |
15483 MockRead("HTTP 0.9 rocks!"), | 15488 MockRead("HTTP 0.9 rocks!"), |
15484 MockRead(SYNCHRONOUS, OK), | 15489 MockRead(SYNCHRONOUS, OK), |
15485 }; | 15490 }; |
15486 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15491 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15487 arraysize(data_writes)); | 15492 arraysize(data_writes)); |
15488 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15493 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15489 | 15494 |
15490 TestCompletionCallback callback; | 15495 TestCompletionCallback callback; |
15491 | 15496 |
15492 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15497 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
15493 EXPECT_EQ(ERR_IO_PENDING, rv); | 15498 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15494 | 15499 |
15495 rv = callback.WaitForResult(); | 15500 rv = callback.WaitForResult(); |
15496 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 15501 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
15497 } | 15502 } |
15498 | 15503 |
15499 TEST_P(HttpNetworkTransactionTest, PostIgnoresPartial400HeadersAfterReset) { | 15504 TEST_P(HttpNetworkTransactionTest, PostIgnoresPartial400HeadersAfterReset) { |
15500 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15505 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15501 element_readers.push_back( | 15506 element_readers.push_back( |
15502 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15507 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
15503 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15508 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15504 | 15509 |
15505 HttpRequestInfo request; | 15510 HttpRequestInfo request; |
15506 request.method = "POST"; | 15511 request.method = "POST"; |
(...skipping 17 matching lines...) Expand all Loading... |
15524 MockRead("HTTP/1.0 400 Not a Full Response\r\n"), | 15529 MockRead("HTTP/1.0 400 Not a Full Response\r\n"), |
15525 MockRead(SYNCHRONOUS, OK), | 15530 MockRead(SYNCHRONOUS, OK), |
15526 }; | 15531 }; |
15527 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15532 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15528 arraysize(data_writes)); | 15533 arraysize(data_writes)); |
15529 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15534 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15530 | 15535 |
15531 TestCompletionCallback callback; | 15536 TestCompletionCallback callback; |
15532 | 15537 |
15533 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15538 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
15534 EXPECT_EQ(ERR_IO_PENDING, rv); | 15539 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15535 | 15540 |
15536 rv = callback.WaitForResult(); | 15541 rv = callback.WaitForResult(); |
15537 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 15542 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
15538 } | 15543 } |
15539 | 15544 |
15540 // Verify that proxy headers are not sent to the destination server when | 15545 // Verify that proxy headers are not sent to the destination server when |
15541 // establishing a tunnel for a secure WebSocket connection. | 15546 // establishing a tunnel for a secure WebSocket connection. |
15542 TEST_P(HttpNetworkTransactionTest, ProxyHeadersNotSentOverWssTunnel) { | 15547 TEST_P(HttpNetworkTransactionTest, ProxyHeadersNotSentOverWssTunnel) { |
15543 HttpRequestInfo request; | 15548 HttpRequestInfo request; |
15544 request.method = "GET"; | 15549 request.method = "GET"; |
15545 request.url = GURL("wss://www.example.org/"); | 15550 request.url = GURL("wss://www.example.org/"); |
15546 AddWebSocketHeaders(&request.extra_headers); | 15551 AddWebSocketHeaders(&request.extra_headers); |
15547 | 15552 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15599 std::unique_ptr<HttpTransaction> trans( | 15604 std::unique_ptr<HttpTransaction> trans( |
15600 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15605 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
15601 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; | 15606 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; |
15602 trans->SetWebSocketHandshakeStreamCreateHelper( | 15607 trans->SetWebSocketHandshakeStreamCreateHelper( |
15603 &websocket_stream_create_helper); | 15608 &websocket_stream_create_helper); |
15604 | 15609 |
15605 { | 15610 { |
15606 TestCompletionCallback callback; | 15611 TestCompletionCallback callback; |
15607 | 15612 |
15608 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15613 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
15609 EXPECT_EQ(ERR_IO_PENDING, rv); | 15614 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15610 | 15615 |
15611 rv = callback.WaitForResult(); | 15616 rv = callback.WaitForResult(); |
15612 EXPECT_EQ(OK, rv); | 15617 EXPECT_THAT(rv, IsOk()); |
15613 } | 15618 } |
15614 | 15619 |
15615 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15620 const HttpResponseInfo* response = trans->GetResponseInfo(); |
15616 ASSERT_TRUE(response); | 15621 ASSERT_TRUE(response); |
15617 ASSERT_TRUE(response->headers); | 15622 ASSERT_TRUE(response->headers); |
15618 EXPECT_EQ(407, response->headers->response_code()); | 15623 EXPECT_EQ(407, response->headers->response_code()); |
15619 | 15624 |
15620 { | 15625 { |
15621 TestCompletionCallback callback; | 15626 TestCompletionCallback callback; |
15622 | 15627 |
15623 int rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), | 15628 int rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), |
15624 callback.callback()); | 15629 callback.callback()); |
15625 EXPECT_EQ(ERR_IO_PENDING, rv); | 15630 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15626 | 15631 |
15627 rv = callback.WaitForResult(); | 15632 rv = callback.WaitForResult(); |
15628 EXPECT_EQ(OK, rv); | 15633 EXPECT_THAT(rv, IsOk()); |
15629 } | 15634 } |
15630 | 15635 |
15631 response = trans->GetResponseInfo(); | 15636 response = trans->GetResponseInfo(); |
15632 ASSERT_TRUE(response); | 15637 ASSERT_TRUE(response); |
15633 ASSERT_TRUE(response->headers); | 15638 ASSERT_TRUE(response->headers); |
15634 | 15639 |
15635 EXPECT_EQ(101, response->headers->response_code()); | 15640 EXPECT_EQ(101, response->headers->response_code()); |
15636 | 15641 |
15637 trans.reset(); | 15642 trans.reset(); |
15638 session->CloseAllConnections(); | 15643 session->CloseAllConnections(); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15697 | 15702 |
15698 std::unique_ptr<HttpTransaction> trans( | 15703 std::unique_ptr<HttpTransaction> trans( |
15699 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15704 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
15700 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; | 15705 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; |
15701 trans->SetWebSocketHandshakeStreamCreateHelper( | 15706 trans->SetWebSocketHandshakeStreamCreateHelper( |
15702 &websocket_stream_create_helper); | 15707 &websocket_stream_create_helper); |
15703 | 15708 |
15704 TestCompletionCallback callback; | 15709 TestCompletionCallback callback; |
15705 | 15710 |
15706 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15711 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
15707 EXPECT_EQ(ERR_IO_PENDING, rv); | 15712 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15708 | 15713 |
15709 rv = callback.WaitForResult(); | 15714 rv = callback.WaitForResult(); |
15710 EXPECT_EQ(OK, rv); | 15715 EXPECT_THAT(rv, IsOk()); |
15711 | 15716 |
15712 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15717 const HttpResponseInfo* response = trans->GetResponseInfo(); |
15713 ASSERT_TRUE(response); | 15718 ASSERT_TRUE(response); |
15714 ASSERT_TRUE(response->headers); | 15719 ASSERT_TRUE(response->headers); |
15715 | 15720 |
15716 EXPECT_EQ(101, response->headers->response_code()); | 15721 EXPECT_EQ(101, response->headers->response_code()); |
15717 | 15722 |
15718 trans.reset(); | 15723 trans.reset(); |
15719 session->CloseAllConnections(); | 15724 session->CloseAllConnections(); |
15720 } | 15725 } |
(...skipping 25 matching lines...) Expand all Loading... |
15746 MockRead(SYNCHRONOUS, OK), | 15751 MockRead(SYNCHRONOUS, OK), |
15747 }; | 15752 }; |
15748 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15753 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15749 arraysize(data_writes)); | 15754 arraysize(data_writes)); |
15750 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15755 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15751 | 15756 |
15752 TestCompletionCallback callback; | 15757 TestCompletionCallback callback; |
15753 | 15758 |
15754 EXPECT_EQ(ERR_IO_PENDING, | 15759 EXPECT_EQ(ERR_IO_PENDING, |
15755 trans->Start(&request, callback.callback(), BoundNetLog())); | 15760 trans->Start(&request, callback.callback(), BoundNetLog())); |
15756 EXPECT_EQ(OK, callback.WaitForResult()); | 15761 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
15757 | 15762 |
15758 std::string response_data; | 15763 std::string response_data; |
15759 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 15764 EXPECT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
15760 | 15765 |
15761 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | 15766 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
15762 trans->GetTotalSentBytes()); | 15767 trans->GetTotalSentBytes()); |
15763 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | 15768 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
15764 trans->GetTotalReceivedBytes()); | 15769 trans->GetTotalReceivedBytes()); |
15765 } | 15770 } |
15766 | 15771 |
15767 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesPost100Continue) { | 15772 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesPost100Continue) { |
15768 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15773 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15769 element_readers.push_back( | 15774 element_readers.push_back( |
(...skipping 22 matching lines...) Expand all Loading... |
15792 MockRead(SYNCHRONOUS, OK), | 15797 MockRead(SYNCHRONOUS, OK), |
15793 }; | 15798 }; |
15794 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15799 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15795 arraysize(data_writes)); | 15800 arraysize(data_writes)); |
15796 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15801 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15797 | 15802 |
15798 TestCompletionCallback callback; | 15803 TestCompletionCallback callback; |
15799 | 15804 |
15800 EXPECT_EQ(ERR_IO_PENDING, | 15805 EXPECT_EQ(ERR_IO_PENDING, |
15801 trans->Start(&request, callback.callback(), BoundNetLog())); | 15806 trans->Start(&request, callback.callback(), BoundNetLog())); |
15802 EXPECT_EQ(OK, callback.WaitForResult()); | 15807 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
15803 | 15808 |
15804 std::string response_data; | 15809 std::string response_data; |
15805 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 15810 EXPECT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
15806 | 15811 |
15807 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | 15812 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
15808 trans->GetTotalSentBytes()); | 15813 trans->GetTotalSentBytes()); |
15809 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | 15814 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
15810 trans->GetTotalReceivedBytes()); | 15815 trans->GetTotalReceivedBytes()); |
15811 } | 15816 } |
15812 | 15817 |
15813 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesChunkedPost) { | 15818 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesChunkedPost) { |
15814 ChunkedUploadDataStream upload_data_stream(0); | 15819 ChunkedUploadDataStream upload_data_stream(0); |
15815 | 15820 |
(...skipping 26 matching lines...) Expand all Loading... |
15842 | 15847 |
15843 EXPECT_EQ(ERR_IO_PENDING, | 15848 EXPECT_EQ(ERR_IO_PENDING, |
15844 trans->Start(&request, callback.callback(), BoundNetLog())); | 15849 trans->Start(&request, callback.callback(), BoundNetLog())); |
15845 | 15850 |
15846 base::RunLoop().RunUntilIdle(); | 15851 base::RunLoop().RunUntilIdle(); |
15847 upload_data_stream.AppendData("f", 1, false); | 15852 upload_data_stream.AppendData("f", 1, false); |
15848 | 15853 |
15849 base::RunLoop().RunUntilIdle(); | 15854 base::RunLoop().RunUntilIdle(); |
15850 upload_data_stream.AppendData("oo", 2, true); | 15855 upload_data_stream.AppendData("oo", 2, true); |
15851 | 15856 |
15852 EXPECT_EQ(OK, callback.WaitForResult()); | 15857 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
15853 | 15858 |
15854 std::string response_data; | 15859 std::string response_data; |
15855 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 15860 EXPECT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
15856 | 15861 |
15857 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | 15862 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
15858 trans->GetTotalSentBytes()); | 15863 trans->GetTotalSentBytes()); |
15859 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | 15864 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
15860 trans->GetTotalReceivedBytes()); | 15865 trans->GetTotalReceivedBytes()); |
15861 } | 15866 } |
15862 | 15867 |
15863 TEST_P(HttpNetworkTransactionTest, EnableNPN) { | 15868 TEST_P(HttpNetworkTransactionTest, EnableNPN) { |
15864 session_deps_.enable_npn = true; | 15869 session_deps_.enable_npn = true; |
15865 | 15870 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15923 base::RunLoop().RunUntilIdle(); | 15928 base::RunLoop().RunUntilIdle(); |
15924 | 15929 |
15925 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); | 15930 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); |
15926 HttpRequestHeaders headers; | 15931 HttpRequestHeaders headers; |
15927 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); | 15932 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); |
15928 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); | 15933 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); |
15929 } | 15934 } |
15930 #endif // !defined(OS_IOS) | 15935 #endif // !defined(OS_IOS) |
15931 | 15936 |
15932 } // namespace net | 15937 } // namespace net |
OLD | NEW |