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

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

Issue 2109503009: Refactor net tests to use GMock matchers for checking net::Error results (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert changes to contents.txt files Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/http/http_network_transaction_ssl_unittest.cc ('k') | net/http/http_proxy_client_socket_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698