| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/http/http_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
| 6 | 6 |
| 7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
| 8 #include <stdarg.h> | 8 #include <stdarg.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 #include "net/spdy/spdy_session.h" | 81 #include "net/spdy/spdy_session.h" |
| 82 #include "net/spdy/spdy_session_pool.h" | 82 #include "net/spdy/spdy_session_pool.h" |
| 83 #include "net/spdy/spdy_test_util_common.h" | 83 #include "net/spdy/spdy_test_util_common.h" |
| 84 #include "net/ssl/default_channel_id_store.h" | 84 #include "net/ssl/default_channel_id_store.h" |
| 85 #include "net/ssl/ssl_cert_request_info.h" | 85 #include "net/ssl/ssl_cert_request_info.h" |
| 86 #include "net/ssl/ssl_config_service.h" | 86 #include "net/ssl/ssl_config_service.h" |
| 87 #include "net/ssl/ssl_config_service_defaults.h" | 87 #include "net/ssl/ssl_config_service_defaults.h" |
| 88 #include "net/ssl/ssl_info.h" | 88 #include "net/ssl/ssl_info.h" |
| 89 #include "net/ssl/ssl_private_key.h" | 89 #include "net/ssl/ssl_private_key.h" |
| 90 #include "net/test/cert_test_util.h" | 90 #include "net/test/cert_test_util.h" |
| 91 #include "net/test/gtest_util.h" |
| 91 #include "net/test/test_data_directory.h" | 92 #include "net/test/test_data_directory.h" |
| 92 #include "net/websockets/websocket_handshake_stream_base.h" | 93 #include "net/websockets/websocket_handshake_stream_base.h" |
| 93 #include "testing/gmock/include/gmock/gmock.h" | 94 #include "testing/gmock/include/gmock/gmock.h" |
| 94 #include "testing/gtest/include/gtest/gtest.h" | 95 #include "testing/gtest/include/gtest/gtest.h" |
| 95 #include "testing/platform_test.h" | 96 #include "testing/platform_test.h" |
| 96 #include "url/gurl.h" | 97 #include "url/gurl.h" |
| 97 | 98 |
| 99 using net::test::IsError; |
| 100 using net::test::IsOk; |
| 101 |
| 98 using base::ASCIIToUTF16; | 102 using base::ASCIIToUTF16; |
| 99 | 103 |
| 100 //----------------------------------------------------------------------------- | 104 //----------------------------------------------------------------------------- |
| 101 | 105 |
| 102 namespace net { | 106 namespace net { |
| 103 | 107 |
| 104 namespace { | 108 namespace { |
| 105 | 109 |
| 106 enum TestCase { | 110 enum TestCase { |
| 107 // Test using the SPDY/3.1 protocol. | 111 // Test using the SPDY/3.1 protocol. |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 367 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 364 | 368 |
| 365 for (size_t i = 0; i < data_count; ++i) { | 369 for (size_t i = 0; i < data_count; ++i) { |
| 366 session_deps_.socket_factory->AddSocketDataProvider(data[i]); | 370 session_deps_.socket_factory->AddSocketDataProvider(data[i]); |
| 367 } | 371 } |
| 368 | 372 |
| 369 TestCompletionCallback callback; | 373 TestCompletionCallback callback; |
| 370 | 374 |
| 371 EXPECT_TRUE(log.bound().IsCapturing()); | 375 EXPECT_TRUE(log.bound().IsCapturing()); |
| 372 int rv = trans->Start(&request, callback.callback(), log.bound()); | 376 int rv = trans->Start(&request, callback.callback(), log.bound()); |
| 373 EXPECT_EQ(ERR_IO_PENDING, rv); | 377 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 374 | 378 |
| 375 out.rv = callback.WaitForResult(); | 379 out.rv = callback.WaitForResult(); |
| 376 out.total_received_bytes = trans->GetTotalReceivedBytes(); | 380 out.total_received_bytes = trans->GetTotalReceivedBytes(); |
| 377 out.total_sent_bytes = trans->GetTotalSentBytes(); | 381 out.total_sent_bytes = trans->GetTotalSentBytes(); |
| 378 | 382 |
| 379 // Even in the failure cases that use this function, connections are always | 383 // Even in the failure cases that use this function, connections are always |
| 380 // successfully established before the error. | 384 // successfully established before the error. |
| 381 EXPECT_TRUE(trans->GetLoadTimingInfo(&out.load_timing_info)); | 385 EXPECT_TRUE(trans->GetLoadTimingInfo(&out.load_timing_info)); |
| 382 TestLoadTimingNotReused(out.load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); | 386 TestLoadTimingNotReused(out.load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
| 383 | 387 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 395 | 399 |
| 396 EXPECT_EQ("127.0.0.1", response->socket_address.host()); | 400 EXPECT_EQ("127.0.0.1", response->socket_address.host()); |
| 397 EXPECT_EQ(80, response->socket_address.port()); | 401 EXPECT_EQ(80, response->socket_address.port()); |
| 398 | 402 |
| 399 bool got_endpoint = | 403 bool got_endpoint = |
| 400 trans->GetRemoteEndpoint(&out.remote_endpoint_after_start); | 404 trans->GetRemoteEndpoint(&out.remote_endpoint_after_start); |
| 401 EXPECT_EQ(got_endpoint, | 405 EXPECT_EQ(got_endpoint, |
| 402 out.remote_endpoint_after_start.address().size() > 0); | 406 out.remote_endpoint_after_start.address().size() > 0); |
| 403 | 407 |
| 404 rv = ReadTransaction(trans.get(), &out.response_data); | 408 rv = ReadTransaction(trans.get(), &out.response_data); |
| 405 EXPECT_EQ(OK, rv); | 409 EXPECT_THAT(rv, IsOk()); |
| 406 | 410 |
| 407 TestNetLogEntry::List entries; | 411 TestNetLogEntry::List entries; |
| 408 log.GetEntries(&entries); | 412 log.GetEntries(&entries); |
| 409 size_t pos = ExpectLogContainsSomewhere( | 413 size_t pos = ExpectLogContainsSomewhere( |
| 410 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST_HEADERS, | 414 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST_HEADERS, |
| 411 NetLog::PHASE_NONE); | 415 NetLog::PHASE_NONE); |
| 412 ExpectLogContainsSomewhere( | 416 ExpectLogContainsSomewhere( |
| 413 entries, pos, | 417 entries, pos, |
| 414 NetLog::TYPE_HTTP_TRANSACTION_READ_RESPONSE_HEADERS, | 418 NetLog::TYPE_HTTP_TRANSACTION_READ_RESPONSE_HEADERS, |
| 415 NetLog::PHASE_NONE); | 419 NetLog::PHASE_NONE); |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 735 } | 739 } |
| 736 | 740 |
| 737 TEST_P(HttpNetworkTransactionTest, SimpleGET) { | 741 TEST_P(HttpNetworkTransactionTest, SimpleGET) { |
| 738 MockRead data_reads[] = { | 742 MockRead data_reads[] = { |
| 739 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 743 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
| 740 MockRead("hello world"), | 744 MockRead("hello world"), |
| 741 MockRead(SYNCHRONOUS, OK), | 745 MockRead(SYNCHRONOUS, OK), |
| 742 }; | 746 }; |
| 743 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 747 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 744 arraysize(data_reads)); | 748 arraysize(data_reads)); |
| 745 EXPECT_EQ(OK, out.rv); | 749 EXPECT_THAT(out.rv, IsOk()); |
| 746 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 750 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 747 EXPECT_EQ("hello world", out.response_data); | 751 EXPECT_EQ("hello world", out.response_data); |
| 748 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 752 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 749 EXPECT_EQ(reads_size, out.total_received_bytes); | 753 EXPECT_EQ(reads_size, out.total_received_bytes); |
| 750 EXPECT_EQ(0u, out.connection_attempts.size()); | 754 EXPECT_EQ(0u, out.connection_attempts.size()); |
| 751 | 755 |
| 752 EXPECT_FALSE(out.remote_endpoint_after_start.address().empty()); | 756 EXPECT_FALSE(out.remote_endpoint_after_start.address().empty()); |
| 753 } | 757 } |
| 754 | 758 |
| 755 // Response with no status line. | 759 // Response with no status line. |
| 756 TEST_P(HttpNetworkTransactionTest, SimpleGETNoHeaders) { | 760 TEST_P(HttpNetworkTransactionTest, SimpleGETNoHeaders) { |
| 757 MockRead data_reads[] = { | 761 MockRead data_reads[] = { |
| 758 MockRead("hello world"), | 762 MockRead("hello world"), |
| 759 MockRead(SYNCHRONOUS, OK), | 763 MockRead(SYNCHRONOUS, OK), |
| 760 }; | 764 }; |
| 761 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 765 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 762 arraysize(data_reads)); | 766 arraysize(data_reads)); |
| 763 EXPECT_EQ(OK, out.rv); | 767 EXPECT_THAT(out.rv, IsOk()); |
| 764 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 768 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
| 765 EXPECT_EQ("hello world", out.response_data); | 769 EXPECT_EQ("hello world", out.response_data); |
| 766 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 770 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 767 EXPECT_EQ(reads_size, out.total_received_bytes); | 771 EXPECT_EQ(reads_size, out.total_received_bytes); |
| 768 } | 772 } |
| 769 | 773 |
| 770 // Allow up to 4 bytes of junk to precede status line. | 774 // Allow up to 4 bytes of junk to precede status line. |
| 771 TEST_P(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { | 775 TEST_P(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { |
| 772 MockRead data_reads[] = { | 776 MockRead data_reads[] = { |
| 773 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 777 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
| 774 MockRead(SYNCHRONOUS, OK), | 778 MockRead(SYNCHRONOUS, OK), |
| 775 }; | 779 }; |
| 776 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 780 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 777 arraysize(data_reads)); | 781 arraysize(data_reads)); |
| 778 EXPECT_EQ(OK, out.rv); | 782 EXPECT_THAT(out.rv, IsOk()); |
| 779 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 783 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
| 780 EXPECT_EQ("DATA", out.response_data); | 784 EXPECT_EQ("DATA", out.response_data); |
| 781 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 785 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 782 EXPECT_EQ(reads_size, out.total_received_bytes); | 786 EXPECT_EQ(reads_size, out.total_received_bytes); |
| 783 } | 787 } |
| 784 | 788 |
| 785 // Allow up to 4 bytes of junk to precede status line. | 789 // Allow up to 4 bytes of junk to precede status line. |
| 786 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes) { | 790 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes) { |
| 787 MockRead data_reads[] = { | 791 MockRead data_reads[] = { |
| 788 MockRead("\n\nQJHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 792 MockRead("\n\nQJHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
| 789 MockRead(SYNCHRONOUS, OK), | 793 MockRead(SYNCHRONOUS, OK), |
| 790 }; | 794 }; |
| 791 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 795 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 792 arraysize(data_reads)); | 796 arraysize(data_reads)); |
| 793 EXPECT_EQ(OK, out.rv); | 797 EXPECT_THAT(out.rv, IsOk()); |
| 794 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 798 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
| 795 EXPECT_EQ("DATA", out.response_data); | 799 EXPECT_EQ("DATA", out.response_data); |
| 796 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 800 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 797 EXPECT_EQ(reads_size, out.total_received_bytes); | 801 EXPECT_EQ(reads_size, out.total_received_bytes); |
| 798 } | 802 } |
| 799 | 803 |
| 800 // Beyond 4 bytes of slop and it should fail to find a status line. | 804 // Beyond 4 bytes of slop and it should fail to find a status line. |
| 801 TEST_P(HttpNetworkTransactionTest, StatusLineJunk5Bytes) { | 805 TEST_P(HttpNetworkTransactionTest, StatusLineJunk5Bytes) { |
| 802 MockRead data_reads[] = { | 806 MockRead data_reads[] = { |
| 803 MockRead("xxxxxHTTP/1.1 404 Not Found\nServer: blah"), | 807 MockRead("xxxxxHTTP/1.1 404 Not Found\nServer: blah"), |
| 804 MockRead(SYNCHRONOUS, OK), | 808 MockRead(SYNCHRONOUS, OK), |
| 805 }; | 809 }; |
| 806 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 810 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 807 arraysize(data_reads)); | 811 arraysize(data_reads)); |
| 808 EXPECT_EQ(OK, out.rv); | 812 EXPECT_THAT(out.rv, IsOk()); |
| 809 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 813 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
| 810 EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); | 814 EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); |
| 811 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 815 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 812 EXPECT_EQ(reads_size, out.total_received_bytes); | 816 EXPECT_EQ(reads_size, out.total_received_bytes); |
| 813 } | 817 } |
| 814 | 818 |
| 815 // Same as StatusLineJunk4Bytes, except the read chunks are smaller. | 819 // Same as StatusLineJunk4Bytes, except the read chunks are smaller. |
| 816 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes_Slow) { | 820 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes_Slow) { |
| 817 MockRead data_reads[] = { | 821 MockRead data_reads[] = { |
| 818 MockRead("\n"), | 822 MockRead("\n"), |
| 819 MockRead("\n"), | 823 MockRead("\n"), |
| 820 MockRead("Q"), | 824 MockRead("Q"), |
| 821 MockRead("J"), | 825 MockRead("J"), |
| 822 MockRead("HTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 826 MockRead("HTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
| 823 MockRead(SYNCHRONOUS, OK), | 827 MockRead(SYNCHRONOUS, OK), |
| 824 }; | 828 }; |
| 825 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 829 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 826 arraysize(data_reads)); | 830 arraysize(data_reads)); |
| 827 EXPECT_EQ(OK, out.rv); | 831 EXPECT_THAT(out.rv, IsOk()); |
| 828 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 832 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
| 829 EXPECT_EQ("DATA", out.response_data); | 833 EXPECT_EQ("DATA", out.response_data); |
| 830 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 834 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 831 EXPECT_EQ(reads_size, out.total_received_bytes); | 835 EXPECT_EQ(reads_size, out.total_received_bytes); |
| 832 } | 836 } |
| 833 | 837 |
| 834 // Close the connection before enough bytes to have a status line. | 838 // Close the connection before enough bytes to have a status line. |
| 835 TEST_P(HttpNetworkTransactionTest, StatusLinePartial) { | 839 TEST_P(HttpNetworkTransactionTest, StatusLinePartial) { |
| 836 MockRead data_reads[] = { | 840 MockRead data_reads[] = { |
| 837 MockRead("HTT"), | 841 MockRead("HTT"), |
| 838 MockRead(SYNCHRONOUS, OK), | 842 MockRead(SYNCHRONOUS, OK), |
| 839 }; | 843 }; |
| 840 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 844 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 841 arraysize(data_reads)); | 845 arraysize(data_reads)); |
| 842 EXPECT_EQ(OK, out.rv); | 846 EXPECT_THAT(out.rv, IsOk()); |
| 843 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 847 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
| 844 EXPECT_EQ("HTT", out.response_data); | 848 EXPECT_EQ("HTT", out.response_data); |
| 845 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 849 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 846 EXPECT_EQ(reads_size, out.total_received_bytes); | 850 EXPECT_EQ(reads_size, out.total_received_bytes); |
| 847 } | 851 } |
| 848 | 852 |
| 849 // Simulate a 204 response, lacking a Content-Length header, sent over a | 853 // Simulate a 204 response, lacking a Content-Length header, sent over a |
| 850 // persistent connection. The response should still terminate since a 204 | 854 // persistent connection. The response should still terminate since a 204 |
| 851 // cannot have a response body. | 855 // cannot have a response body. |
| 852 TEST_P(HttpNetworkTransactionTest, StopsReading204) { | 856 TEST_P(HttpNetworkTransactionTest, StopsReading204) { |
| 853 char junk[] = "junk"; | 857 char junk[] = "junk"; |
| 854 MockRead data_reads[] = { | 858 MockRead data_reads[] = { |
| 855 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), | 859 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), |
| 856 MockRead(junk), // Should not be read!! | 860 MockRead(junk), // Should not be read!! |
| 857 MockRead(SYNCHRONOUS, OK), | 861 MockRead(SYNCHRONOUS, OK), |
| 858 }; | 862 }; |
| 859 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 863 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 860 arraysize(data_reads)); | 864 arraysize(data_reads)); |
| 861 EXPECT_EQ(OK, out.rv); | 865 EXPECT_THAT(out.rv, IsOk()); |
| 862 EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); | 866 EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); |
| 863 EXPECT_EQ("", out.response_data); | 867 EXPECT_EQ("", out.response_data); |
| 864 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 868 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 865 int64_t response_size = reads_size - strlen(junk); | 869 int64_t response_size = reads_size - strlen(junk); |
| 866 EXPECT_EQ(response_size, out.total_received_bytes); | 870 EXPECT_EQ(response_size, out.total_received_bytes); |
| 867 } | 871 } |
| 868 | 872 |
| 869 // A simple request using chunked encoding with some extra data after. | 873 // A simple request using chunked encoding with some extra data after. |
| 870 TEST_P(HttpNetworkTransactionTest, ChunkedEncoding) { | 874 TEST_P(HttpNetworkTransactionTest, ChunkedEncoding) { |
| 871 std::string final_chunk = "0\r\n\r\n"; | 875 std::string final_chunk = "0\r\n\r\n"; |
| 872 std::string extra_data = "HTTP/1.1 200 OK\r\n"; | 876 std::string extra_data = "HTTP/1.1 200 OK\r\n"; |
| 873 std::string last_read = final_chunk + extra_data; | 877 std::string last_read = final_chunk + extra_data; |
| 874 MockRead data_reads[] = { | 878 MockRead data_reads[] = { |
| 875 MockRead("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n"), | 879 MockRead("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n"), |
| 876 MockRead("5\r\nHello\r\n"), | 880 MockRead("5\r\nHello\r\n"), |
| 877 MockRead("1\r\n"), | 881 MockRead("1\r\n"), |
| 878 MockRead(" \r\n"), | 882 MockRead(" \r\n"), |
| 879 MockRead("5\r\nworld\r\n"), | 883 MockRead("5\r\nworld\r\n"), |
| 880 MockRead(last_read.data()), | 884 MockRead(last_read.data()), |
| 881 MockRead(SYNCHRONOUS, OK), | 885 MockRead(SYNCHRONOUS, OK), |
| 882 }; | 886 }; |
| 883 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 887 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 884 arraysize(data_reads)); | 888 arraysize(data_reads)); |
| 885 EXPECT_EQ(OK, out.rv); | 889 EXPECT_THAT(out.rv, IsOk()); |
| 886 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 890 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 887 EXPECT_EQ("Hello world", out.response_data); | 891 EXPECT_EQ("Hello world", out.response_data); |
| 888 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 892 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 889 int64_t response_size = reads_size - extra_data.size(); | 893 int64_t response_size = reads_size - extra_data.size(); |
| 890 EXPECT_EQ(response_size, out.total_received_bytes); | 894 EXPECT_EQ(response_size, out.total_received_bytes); |
| 891 } | 895 } |
| 892 | 896 |
| 893 // Next tests deal with http://crbug.com/56344. | 897 // Next tests deal with http://crbug.com/56344. |
| 894 | 898 |
| 895 TEST_P(HttpNetworkTransactionTest, | 899 TEST_P(HttpNetworkTransactionTest, |
| 896 MultipleContentLengthHeadersNoTransferEncoding) { | 900 MultipleContentLengthHeadersNoTransferEncoding) { |
| 897 MockRead data_reads[] = { | 901 MockRead data_reads[] = { |
| 898 MockRead("HTTP/1.1 200 OK\r\n"), | 902 MockRead("HTTP/1.1 200 OK\r\n"), |
| 899 MockRead("Content-Length: 10\r\n"), | 903 MockRead("Content-Length: 10\r\n"), |
| 900 MockRead("Content-Length: 5\r\n\r\n"), | 904 MockRead("Content-Length: 5\r\n\r\n"), |
| 901 }; | 905 }; |
| 902 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 906 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 903 arraysize(data_reads)); | 907 arraysize(data_reads)); |
| 904 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); | 908 EXPECT_THAT(out.rv, IsError(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH)); |
| 905 } | 909 } |
| 906 | 910 |
| 907 TEST_P(HttpNetworkTransactionTest, | 911 TEST_P(HttpNetworkTransactionTest, |
| 908 DuplicateContentLengthHeadersNoTransferEncoding) { | 912 DuplicateContentLengthHeadersNoTransferEncoding) { |
| 909 MockRead data_reads[] = { | 913 MockRead data_reads[] = { |
| 910 MockRead("HTTP/1.1 200 OK\r\n"), | 914 MockRead("HTTP/1.1 200 OK\r\n"), |
| 911 MockRead("Content-Length: 5\r\n"), | 915 MockRead("Content-Length: 5\r\n"), |
| 912 MockRead("Content-Length: 5\r\n\r\n"), | 916 MockRead("Content-Length: 5\r\n\r\n"), |
| 913 MockRead("Hello"), | 917 MockRead("Hello"), |
| 914 }; | 918 }; |
| 915 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 919 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 916 arraysize(data_reads)); | 920 arraysize(data_reads)); |
| 917 EXPECT_EQ(OK, out.rv); | 921 EXPECT_THAT(out.rv, IsOk()); |
| 918 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 922 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 919 EXPECT_EQ("Hello", out.response_data); | 923 EXPECT_EQ("Hello", out.response_data); |
| 920 } | 924 } |
| 921 | 925 |
| 922 TEST_P(HttpNetworkTransactionTest, | 926 TEST_P(HttpNetworkTransactionTest, |
| 923 ComplexContentLengthHeadersNoTransferEncoding) { | 927 ComplexContentLengthHeadersNoTransferEncoding) { |
| 924 // More than 2 dupes. | 928 // More than 2 dupes. |
| 925 { | 929 { |
| 926 MockRead data_reads[] = { | 930 MockRead data_reads[] = { |
| 927 MockRead("HTTP/1.1 200 OK\r\n"), | 931 MockRead("HTTP/1.1 200 OK\r\n"), |
| 928 MockRead("Content-Length: 5\r\n"), | 932 MockRead("Content-Length: 5\r\n"), |
| 929 MockRead("Content-Length: 5\r\n"), | 933 MockRead("Content-Length: 5\r\n"), |
| 930 MockRead("Content-Length: 5\r\n\r\n"), | 934 MockRead("Content-Length: 5\r\n\r\n"), |
| 931 MockRead("Hello"), | 935 MockRead("Hello"), |
| 932 }; | 936 }; |
| 933 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 937 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 934 arraysize(data_reads)); | 938 arraysize(data_reads)); |
| 935 EXPECT_EQ(OK, out.rv); | 939 EXPECT_THAT(out.rv, IsOk()); |
| 936 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 940 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 937 EXPECT_EQ("Hello", out.response_data); | 941 EXPECT_EQ("Hello", out.response_data); |
| 938 } | 942 } |
| 939 // HTTP/1.0 | 943 // HTTP/1.0 |
| 940 { | 944 { |
| 941 MockRead data_reads[] = { | 945 MockRead data_reads[] = { |
| 942 MockRead("HTTP/1.0 200 OK\r\n"), | 946 MockRead("HTTP/1.0 200 OK\r\n"), |
| 943 MockRead("Content-Length: 5\r\n"), | 947 MockRead("Content-Length: 5\r\n"), |
| 944 MockRead("Content-Length: 5\r\n"), | 948 MockRead("Content-Length: 5\r\n"), |
| 945 MockRead("Content-Length: 5\r\n\r\n"), | 949 MockRead("Content-Length: 5\r\n\r\n"), |
| 946 MockRead("Hello"), | 950 MockRead("Hello"), |
| 947 }; | 951 }; |
| 948 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 952 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 949 arraysize(data_reads)); | 953 arraysize(data_reads)); |
| 950 EXPECT_EQ(OK, out.rv); | 954 EXPECT_THAT(out.rv, IsOk()); |
| 951 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 955 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 952 EXPECT_EQ("Hello", out.response_data); | 956 EXPECT_EQ("Hello", out.response_data); |
| 953 } | 957 } |
| 954 // 2 dupes and one mismatched. | 958 // 2 dupes and one mismatched. |
| 955 { | 959 { |
| 956 MockRead data_reads[] = { | 960 MockRead data_reads[] = { |
| 957 MockRead("HTTP/1.1 200 OK\r\n"), | 961 MockRead("HTTP/1.1 200 OK\r\n"), |
| 958 MockRead("Content-Length: 10\r\n"), | 962 MockRead("Content-Length: 10\r\n"), |
| 959 MockRead("Content-Length: 10\r\n"), | 963 MockRead("Content-Length: 10\r\n"), |
| 960 MockRead("Content-Length: 5\r\n\r\n"), | 964 MockRead("Content-Length: 5\r\n\r\n"), |
| 961 }; | 965 }; |
| 962 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 966 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 963 arraysize(data_reads)); | 967 arraysize(data_reads)); |
| 964 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); | 968 EXPECT_THAT(out.rv, IsError(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH)); |
| 965 } | 969 } |
| 966 } | 970 } |
| 967 | 971 |
| 968 TEST_P(HttpNetworkTransactionTest, | 972 TEST_P(HttpNetworkTransactionTest, |
| 969 MultipleContentLengthHeadersTransferEncoding) { | 973 MultipleContentLengthHeadersTransferEncoding) { |
| 970 MockRead data_reads[] = { | 974 MockRead data_reads[] = { |
| 971 MockRead("HTTP/1.1 200 OK\r\n"), | 975 MockRead("HTTP/1.1 200 OK\r\n"), |
| 972 MockRead("Content-Length: 666\r\n"), | 976 MockRead("Content-Length: 666\r\n"), |
| 973 MockRead("Content-Length: 1337\r\n"), | 977 MockRead("Content-Length: 1337\r\n"), |
| 974 MockRead("Transfer-Encoding: chunked\r\n\r\n"), | 978 MockRead("Transfer-Encoding: chunked\r\n\r\n"), |
| 975 MockRead("5\r\nHello\r\n"), | 979 MockRead("5\r\nHello\r\n"), |
| 976 MockRead("1\r\n"), | 980 MockRead("1\r\n"), |
| 977 MockRead(" \r\n"), | 981 MockRead(" \r\n"), |
| 978 MockRead("5\r\nworld\r\n"), | 982 MockRead("5\r\nworld\r\n"), |
| 979 MockRead("0\r\n\r\nHTTP/1.1 200 OK\r\n"), | 983 MockRead("0\r\n\r\nHTTP/1.1 200 OK\r\n"), |
| 980 MockRead(SYNCHRONOUS, OK), | 984 MockRead(SYNCHRONOUS, OK), |
| 981 }; | 985 }; |
| 982 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 986 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 983 arraysize(data_reads)); | 987 arraysize(data_reads)); |
| 984 EXPECT_EQ(OK, out.rv); | 988 EXPECT_THAT(out.rv, IsOk()); |
| 985 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 989 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 986 EXPECT_EQ("Hello world", out.response_data); | 990 EXPECT_EQ("Hello world", out.response_data); |
| 987 } | 991 } |
| 988 | 992 |
| 989 // Next tests deal with http://crbug.com/98895. | 993 // Next tests deal with http://crbug.com/98895. |
| 990 | 994 |
| 991 // Checks that a single Content-Disposition header results in no error. | 995 // Checks that a single Content-Disposition header results in no error. |
| 992 TEST_P(HttpNetworkTransactionTest, SingleContentDispositionHeader) { | 996 TEST_P(HttpNetworkTransactionTest, SingleContentDispositionHeader) { |
| 993 MockRead data_reads[] = { | 997 MockRead data_reads[] = { |
| 994 MockRead("HTTP/1.1 200 OK\r\n"), | 998 MockRead("HTTP/1.1 200 OK\r\n"), |
| 995 MockRead("Content-Disposition: attachment;filename=\"salutations.txt\"r\n"), | 999 MockRead("Content-Disposition: attachment;filename=\"salutations.txt\"r\n"), |
| 996 MockRead("Content-Length: 5\r\n\r\n"), | 1000 MockRead("Content-Length: 5\r\n\r\n"), |
| 997 MockRead("Hello"), | 1001 MockRead("Hello"), |
| 998 }; | 1002 }; |
| 999 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1003 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 1000 arraysize(data_reads)); | 1004 arraysize(data_reads)); |
| 1001 EXPECT_EQ(OK, out.rv); | 1005 EXPECT_THAT(out.rv, IsOk()); |
| 1002 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 1006 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 1003 EXPECT_EQ("Hello", out.response_data); | 1007 EXPECT_EQ("Hello", out.response_data); |
| 1004 } | 1008 } |
| 1005 | 1009 |
| 1006 // Checks that two identical Content-Disposition headers result in no error. | 1010 // Checks that two identical Content-Disposition headers result in no error. |
| 1007 TEST_P(HttpNetworkTransactionTest, | 1011 TEST_P(HttpNetworkTransactionTest, |
| 1008 TwoIdenticalContentDispositionHeaders) { | 1012 TwoIdenticalContentDispositionHeaders) { |
| 1009 MockRead data_reads[] = { | 1013 MockRead data_reads[] = { |
| 1010 MockRead("HTTP/1.1 200 OK\r\n"), | 1014 MockRead("HTTP/1.1 200 OK\r\n"), |
| 1011 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 1015 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
| 1012 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 1016 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
| 1013 MockRead("Content-Length: 5\r\n\r\n"), | 1017 MockRead("Content-Length: 5\r\n\r\n"), |
| 1014 MockRead("Hello"), | 1018 MockRead("Hello"), |
| 1015 }; | 1019 }; |
| 1016 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1020 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 1017 arraysize(data_reads)); | 1021 arraysize(data_reads)); |
| 1018 EXPECT_EQ(OK, out.rv); | 1022 EXPECT_THAT(out.rv, IsOk()); |
| 1019 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 1023 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 1020 EXPECT_EQ("Hello", out.response_data); | 1024 EXPECT_EQ("Hello", out.response_data); |
| 1021 } | 1025 } |
| 1022 | 1026 |
| 1023 // Checks that two distinct Content-Disposition headers result in an error. | 1027 // Checks that two distinct Content-Disposition headers result in an error. |
| 1024 TEST_P(HttpNetworkTransactionTest, TwoDistinctContentDispositionHeaders) { | 1028 TEST_P(HttpNetworkTransactionTest, TwoDistinctContentDispositionHeaders) { |
| 1025 MockRead data_reads[] = { | 1029 MockRead data_reads[] = { |
| 1026 MockRead("HTTP/1.1 200 OK\r\n"), | 1030 MockRead("HTTP/1.1 200 OK\r\n"), |
| 1027 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 1031 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
| 1028 MockRead("Content-Disposition: attachment;filename=\"hi.txt\"r\n"), | 1032 MockRead("Content-Disposition: attachment;filename=\"hi.txt\"r\n"), |
| 1029 MockRead("Content-Length: 5\r\n\r\n"), | 1033 MockRead("Content-Length: 5\r\n\r\n"), |
| 1030 MockRead("Hello"), | 1034 MockRead("Hello"), |
| 1031 }; | 1035 }; |
| 1032 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1036 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 1033 arraysize(data_reads)); | 1037 arraysize(data_reads)); |
| 1034 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION, out.rv); | 1038 EXPECT_THAT(out.rv, |
| 1039 IsError(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION)); |
| 1035 } | 1040 } |
| 1036 | 1041 |
| 1037 // Checks that two identical Location headers result in no error. | 1042 // Checks that two identical Location headers result in no error. |
| 1038 // Also tests Location header behavior. | 1043 // Also tests Location header behavior. |
| 1039 TEST_P(HttpNetworkTransactionTest, TwoIdenticalLocationHeaders) { | 1044 TEST_P(HttpNetworkTransactionTest, TwoIdenticalLocationHeaders) { |
| 1040 MockRead data_reads[] = { | 1045 MockRead data_reads[] = { |
| 1041 MockRead("HTTP/1.1 302 Redirect\r\n"), | 1046 MockRead("HTTP/1.1 302 Redirect\r\n"), |
| 1042 MockRead("Location: http://good.com/\r\n"), | 1047 MockRead("Location: http://good.com/\r\n"), |
| 1043 MockRead("Location: http://good.com/\r\n"), | 1048 MockRead("Location: http://good.com/\r\n"), |
| 1044 MockRead("Content-Length: 0\r\n\r\n"), | 1049 MockRead("Content-Length: 0\r\n\r\n"), |
| 1045 MockRead(SYNCHRONOUS, OK), | 1050 MockRead(SYNCHRONOUS, OK), |
| 1046 }; | 1051 }; |
| 1047 | 1052 |
| 1048 HttpRequestInfo request; | 1053 HttpRequestInfo request; |
| 1049 request.method = "GET"; | 1054 request.method = "GET"; |
| 1050 request.url = GURL("http://redirect.com/"); | 1055 request.url = GURL("http://redirect.com/"); |
| 1051 request.load_flags = 0; | 1056 request.load_flags = 0; |
| 1052 | 1057 |
| 1053 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1058 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1054 std::unique_ptr<HttpTransaction> trans( | 1059 std::unique_ptr<HttpTransaction> trans( |
| 1055 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1060 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1056 | 1061 |
| 1057 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1062 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1058 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1063 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1059 | 1064 |
| 1060 TestCompletionCallback callback; | 1065 TestCompletionCallback callback; |
| 1061 | 1066 |
| 1062 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1067 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1063 EXPECT_EQ(ERR_IO_PENDING, rv); | 1068 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1064 | 1069 |
| 1065 EXPECT_EQ(OK, callback.WaitForResult()); | 1070 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 1066 | 1071 |
| 1067 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1072 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1068 ASSERT_TRUE(response); | 1073 ASSERT_TRUE(response); |
| 1069 ASSERT_TRUE(response->headers); | 1074 ASSERT_TRUE(response->headers); |
| 1070 EXPECT_EQ("HTTP/1.1 302 Redirect", response->headers->GetStatusLine()); | 1075 EXPECT_EQ("HTTP/1.1 302 Redirect", response->headers->GetStatusLine()); |
| 1071 std::string url; | 1076 std::string url; |
| 1072 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 1077 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
| 1073 EXPECT_EQ("http://good.com/", url); | 1078 EXPECT_EQ("http://good.com/", url); |
| 1074 EXPECT_TRUE(response->proxy_server.IsEmpty()); | 1079 EXPECT_TRUE(response->proxy_server.IsEmpty()); |
| 1075 } | 1080 } |
| 1076 | 1081 |
| 1077 // Checks that two distinct Location headers result in an error. | 1082 // Checks that two distinct Location headers result in an error. |
| 1078 TEST_P(HttpNetworkTransactionTest, TwoDistinctLocationHeaders) { | 1083 TEST_P(HttpNetworkTransactionTest, TwoDistinctLocationHeaders) { |
| 1079 MockRead data_reads[] = { | 1084 MockRead data_reads[] = { |
| 1080 MockRead("HTTP/1.1 302 Redirect\r\n"), | 1085 MockRead("HTTP/1.1 302 Redirect\r\n"), |
| 1081 MockRead("Location: http://good.com/\r\n"), | 1086 MockRead("Location: http://good.com/\r\n"), |
| 1082 MockRead("Location: http://evil.com/\r\n"), | 1087 MockRead("Location: http://evil.com/\r\n"), |
| 1083 MockRead("Content-Length: 0\r\n\r\n"), | 1088 MockRead("Content-Length: 0\r\n\r\n"), |
| 1084 MockRead(SYNCHRONOUS, OK), | 1089 MockRead(SYNCHRONOUS, OK), |
| 1085 }; | 1090 }; |
| 1086 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1091 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 1087 arraysize(data_reads)); | 1092 arraysize(data_reads)); |
| 1088 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION, out.rv); | 1093 EXPECT_THAT(out.rv, IsError(ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION)); |
| 1089 } | 1094 } |
| 1090 | 1095 |
| 1091 // Do a request using the HEAD method. Verify that we don't try to read the | 1096 // Do a request using the HEAD method. Verify that we don't try to read the |
| 1092 // message body (since HEAD has none). | 1097 // message body (since HEAD has none). |
| 1093 TEST_P(HttpNetworkTransactionTest, Head) { | 1098 TEST_P(HttpNetworkTransactionTest, Head) { |
| 1094 HttpRequestInfo request; | 1099 HttpRequestInfo request; |
| 1095 request.method = "HEAD"; | 1100 request.method = "HEAD"; |
| 1096 request.url = GURL("http://www.example.org/"); | 1101 request.url = GURL("http://www.example.org/"); |
| 1097 request.load_flags = 0; | 1102 request.load_flags = 0; |
| 1098 | 1103 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1117 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | 1122 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
| 1118 }; | 1123 }; |
| 1119 | 1124 |
| 1120 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1125 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 1121 data_writes1, arraysize(data_writes1)); | 1126 data_writes1, arraysize(data_writes1)); |
| 1122 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 1127 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 1123 | 1128 |
| 1124 TestCompletionCallback callback1; | 1129 TestCompletionCallback callback1; |
| 1125 | 1130 |
| 1126 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 1131 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 1127 EXPECT_EQ(ERR_IO_PENDING, rv); | 1132 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1128 | 1133 |
| 1129 rv = callback1.WaitForResult(); | 1134 rv = callback1.WaitForResult(); |
| 1130 EXPECT_EQ(OK, rv); | 1135 EXPECT_THAT(rv, IsOk()); |
| 1131 | 1136 |
| 1132 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1137 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1133 ASSERT_TRUE(response); | 1138 ASSERT_TRUE(response); |
| 1134 | 1139 |
| 1135 // Check that the headers got parsed. | 1140 // Check that the headers got parsed. |
| 1136 EXPECT_TRUE(response->headers); | 1141 EXPECT_TRUE(response->headers); |
| 1137 EXPECT_EQ(1234, response->headers->GetContentLength()); | 1142 EXPECT_EQ(1234, response->headers->GetContentLength()); |
| 1138 EXPECT_EQ("HTTP/1.1 404 Not Found", response->headers->GetStatusLine()); | 1143 EXPECT_EQ("HTTP/1.1 404 Not Found", response->headers->GetStatusLine()); |
| 1139 EXPECT_TRUE(response->proxy_server.IsEmpty()); | 1144 EXPECT_TRUE(response->proxy_server.IsEmpty()); |
| 1140 EXPECT_TRUE(headers_handler.observed_before_headers_sent()); | 1145 EXPECT_TRUE(headers_handler.observed_before_headers_sent()); |
| 1141 EXPECT_FALSE(headers_handler.observed_before_headers_sent_with_proxy()); | 1146 EXPECT_FALSE(headers_handler.observed_before_headers_sent_with_proxy()); |
| 1142 | 1147 |
| 1143 std::string server_header; | 1148 std::string server_header; |
| 1144 size_t iter = 0; | 1149 size_t iter = 0; |
| 1145 bool has_server_header = response->headers->EnumerateHeader( | 1150 bool has_server_header = response->headers->EnumerateHeader( |
| 1146 &iter, "Server", &server_header); | 1151 &iter, "Server", &server_header); |
| 1147 EXPECT_TRUE(has_server_header); | 1152 EXPECT_TRUE(has_server_header); |
| 1148 EXPECT_EQ("Blah", server_header); | 1153 EXPECT_EQ("Blah", server_header); |
| 1149 | 1154 |
| 1150 // Reading should give EOF right away, since there is no message body | 1155 // Reading should give EOF right away, since there is no message body |
| 1151 // (despite non-zero content-length). | 1156 // (despite non-zero content-length). |
| 1152 std::string response_data; | 1157 std::string response_data; |
| 1153 rv = ReadTransaction(trans.get(), &response_data); | 1158 rv = ReadTransaction(trans.get(), &response_data); |
| 1154 EXPECT_EQ(OK, rv); | 1159 EXPECT_THAT(rv, IsOk()); |
| 1155 EXPECT_EQ("", response_data); | 1160 EXPECT_EQ("", response_data); |
| 1156 } | 1161 } |
| 1157 | 1162 |
| 1158 TEST_P(HttpNetworkTransactionTest, ReuseConnection) { | 1163 TEST_P(HttpNetworkTransactionTest, ReuseConnection) { |
| 1159 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1164 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1160 | 1165 |
| 1161 MockRead data_reads[] = { | 1166 MockRead data_reads[] = { |
| 1162 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1167 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
| 1163 MockRead("hello"), | 1168 MockRead("hello"), |
| 1164 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1169 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1177 request.method = "GET"; | 1182 request.method = "GET"; |
| 1178 request.url = GURL("http://www.example.org/"); | 1183 request.url = GURL("http://www.example.org/"); |
| 1179 request.load_flags = 0; | 1184 request.load_flags = 0; |
| 1180 | 1185 |
| 1181 std::unique_ptr<HttpTransaction> trans( | 1186 std::unique_ptr<HttpTransaction> trans( |
| 1182 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1187 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1183 | 1188 |
| 1184 TestCompletionCallback callback; | 1189 TestCompletionCallback callback; |
| 1185 | 1190 |
| 1186 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1191 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1187 EXPECT_EQ(ERR_IO_PENDING, rv); | 1192 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1188 | 1193 |
| 1189 rv = callback.WaitForResult(); | 1194 rv = callback.WaitForResult(); |
| 1190 EXPECT_EQ(OK, rv); | 1195 EXPECT_THAT(rv, IsOk()); |
| 1191 | 1196 |
| 1192 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1197 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1193 ASSERT_TRUE(response); | 1198 ASSERT_TRUE(response); |
| 1194 | 1199 |
| 1195 EXPECT_TRUE(response->headers); | 1200 EXPECT_TRUE(response->headers); |
| 1196 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1201 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 1197 EXPECT_TRUE(response->proxy_server.IsEmpty()); | 1202 EXPECT_TRUE(response->proxy_server.IsEmpty()); |
| 1198 | 1203 |
| 1199 std::string response_data; | 1204 std::string response_data; |
| 1200 rv = ReadTransaction(trans.get(), &response_data); | 1205 rv = ReadTransaction(trans.get(), &response_data); |
| 1201 EXPECT_EQ(OK, rv); | 1206 EXPECT_THAT(rv, IsOk()); |
| 1202 EXPECT_EQ(kExpectedResponseData[i], response_data); | 1207 EXPECT_EQ(kExpectedResponseData[i], response_data); |
| 1203 } | 1208 } |
| 1204 } | 1209 } |
| 1205 | 1210 |
| 1206 TEST_P(HttpNetworkTransactionTest, Ignores100) { | 1211 TEST_P(HttpNetworkTransactionTest, Ignores100) { |
| 1207 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 1212 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 1208 element_readers.push_back( | 1213 element_readers.push_back( |
| 1209 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 1214 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
| 1210 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 1215 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 1211 | 1216 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1224 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 1229 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
| 1225 MockRead("hello world"), | 1230 MockRead("hello world"), |
| 1226 MockRead(SYNCHRONOUS, OK), | 1231 MockRead(SYNCHRONOUS, OK), |
| 1227 }; | 1232 }; |
| 1228 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1233 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1229 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1234 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1230 | 1235 |
| 1231 TestCompletionCallback callback; | 1236 TestCompletionCallback callback; |
| 1232 | 1237 |
| 1233 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1238 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1234 EXPECT_EQ(ERR_IO_PENDING, rv); | 1239 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1235 | 1240 |
| 1236 rv = callback.WaitForResult(); | 1241 rv = callback.WaitForResult(); |
| 1237 EXPECT_EQ(OK, rv); | 1242 EXPECT_THAT(rv, IsOk()); |
| 1238 | 1243 |
| 1239 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1244 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1240 ASSERT_TRUE(response); | 1245 ASSERT_TRUE(response); |
| 1241 | 1246 |
| 1242 EXPECT_TRUE(response->headers); | 1247 EXPECT_TRUE(response->headers); |
| 1243 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 1248 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
| 1244 | 1249 |
| 1245 std::string response_data; | 1250 std::string response_data; |
| 1246 rv = ReadTransaction(trans.get(), &response_data); | 1251 rv = ReadTransaction(trans.get(), &response_data); |
| 1247 EXPECT_EQ(OK, rv); | 1252 EXPECT_THAT(rv, IsOk()); |
| 1248 EXPECT_EQ("hello world", response_data); | 1253 EXPECT_EQ("hello world", response_data); |
| 1249 } | 1254 } |
| 1250 | 1255 |
| 1251 // This test is almost the same as Ignores100 above, but the response contains | 1256 // This test is almost the same as Ignores100 above, but the response contains |
| 1252 // a 102 instead of a 100. Also, instead of HTTP/1.0 the response is | 1257 // a 102 instead of a 100. Also, instead of HTTP/1.0 the response is |
| 1253 // HTTP/1.1 and the two status headers are read in one read. | 1258 // HTTP/1.1 and the two status headers are read in one read. |
| 1254 TEST_P(HttpNetworkTransactionTest, Ignores1xx) { | 1259 TEST_P(HttpNetworkTransactionTest, Ignores1xx) { |
| 1255 HttpRequestInfo request; | 1260 HttpRequestInfo request; |
| 1256 request.method = "GET"; | 1261 request.method = "GET"; |
| 1257 request.url = GURL("http://www.foo.com/"); | 1262 request.url = GURL("http://www.foo.com/"); |
| 1258 request.load_flags = 0; | 1263 request.load_flags = 0; |
| 1259 | 1264 |
| 1260 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1265 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1261 std::unique_ptr<HttpTransaction> trans( | 1266 std::unique_ptr<HttpTransaction> trans( |
| 1262 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1267 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1263 | 1268 |
| 1264 MockRead data_reads[] = { | 1269 MockRead data_reads[] = { |
| 1265 MockRead("HTTP/1.1 102 Unspecified status code\r\n\r\n" | 1270 MockRead("HTTP/1.1 102 Unspecified status code\r\n\r\n" |
| 1266 "HTTP/1.1 200 OK\r\n\r\n"), | 1271 "HTTP/1.1 200 OK\r\n\r\n"), |
| 1267 MockRead("hello world"), | 1272 MockRead("hello world"), |
| 1268 MockRead(SYNCHRONOUS, OK), | 1273 MockRead(SYNCHRONOUS, OK), |
| 1269 }; | 1274 }; |
| 1270 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1275 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1271 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1276 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1272 | 1277 |
| 1273 TestCompletionCallback callback; | 1278 TestCompletionCallback callback; |
| 1274 | 1279 |
| 1275 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1280 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1276 EXPECT_EQ(ERR_IO_PENDING, rv); | 1281 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1277 | 1282 |
| 1278 rv = callback.WaitForResult(); | 1283 rv = callback.WaitForResult(); |
| 1279 EXPECT_EQ(OK, rv); | 1284 EXPECT_THAT(rv, IsOk()); |
| 1280 | 1285 |
| 1281 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1286 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1282 ASSERT_TRUE(response); | 1287 ASSERT_TRUE(response); |
| 1283 | 1288 |
| 1284 EXPECT_TRUE(response->headers); | 1289 EXPECT_TRUE(response->headers); |
| 1285 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1290 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 1286 | 1291 |
| 1287 std::string response_data; | 1292 std::string response_data; |
| 1288 rv = ReadTransaction(trans.get(), &response_data); | 1293 rv = ReadTransaction(trans.get(), &response_data); |
| 1289 EXPECT_EQ(OK, rv); | 1294 EXPECT_THAT(rv, IsOk()); |
| 1290 EXPECT_EQ("hello world", response_data); | 1295 EXPECT_EQ("hello world", response_data); |
| 1291 } | 1296 } |
| 1292 | 1297 |
| 1293 TEST_P(HttpNetworkTransactionTest, Incomplete100ThenEOF) { | 1298 TEST_P(HttpNetworkTransactionTest, Incomplete100ThenEOF) { |
| 1294 HttpRequestInfo request; | 1299 HttpRequestInfo request; |
| 1295 request.method = "POST"; | 1300 request.method = "POST"; |
| 1296 request.url = GURL("http://www.foo.com/"); | 1301 request.url = GURL("http://www.foo.com/"); |
| 1297 request.load_flags = 0; | 1302 request.load_flags = 0; |
| 1298 | 1303 |
| 1299 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1304 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1300 std::unique_ptr<HttpTransaction> trans( | 1305 std::unique_ptr<HttpTransaction> trans( |
| 1301 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1306 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1302 | 1307 |
| 1303 MockRead data_reads[] = { | 1308 MockRead data_reads[] = { |
| 1304 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), | 1309 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), |
| 1305 MockRead(ASYNC, 0), | 1310 MockRead(ASYNC, 0), |
| 1306 }; | 1311 }; |
| 1307 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1312 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1308 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1313 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1309 | 1314 |
| 1310 TestCompletionCallback callback; | 1315 TestCompletionCallback callback; |
| 1311 | 1316 |
| 1312 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1317 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1313 EXPECT_EQ(ERR_IO_PENDING, rv); | 1318 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1314 | 1319 |
| 1315 rv = callback.WaitForResult(); | 1320 rv = callback.WaitForResult(); |
| 1316 EXPECT_EQ(OK, rv); | 1321 EXPECT_THAT(rv, IsOk()); |
| 1317 | 1322 |
| 1318 std::string response_data; | 1323 std::string response_data; |
| 1319 rv = ReadTransaction(trans.get(), &response_data); | 1324 rv = ReadTransaction(trans.get(), &response_data); |
| 1320 EXPECT_EQ(OK, rv); | 1325 EXPECT_THAT(rv, IsOk()); |
| 1321 EXPECT_EQ("", response_data); | 1326 EXPECT_EQ("", response_data); |
| 1322 } | 1327 } |
| 1323 | 1328 |
| 1324 TEST_P(HttpNetworkTransactionTest, EmptyResponse) { | 1329 TEST_P(HttpNetworkTransactionTest, EmptyResponse) { |
| 1325 HttpRequestInfo request; | 1330 HttpRequestInfo request; |
| 1326 request.method = "POST"; | 1331 request.method = "POST"; |
| 1327 request.url = GURL("http://www.foo.com/"); | 1332 request.url = GURL("http://www.foo.com/"); |
| 1328 request.load_flags = 0; | 1333 request.load_flags = 0; |
| 1329 | 1334 |
| 1330 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1335 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1331 std::unique_ptr<HttpTransaction> trans( | 1336 std::unique_ptr<HttpTransaction> trans( |
| 1332 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1337 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1333 | 1338 |
| 1334 MockRead data_reads[] = { | 1339 MockRead data_reads[] = { |
| 1335 MockRead(ASYNC, 0), | 1340 MockRead(ASYNC, 0), |
| 1336 }; | 1341 }; |
| 1337 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1342 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1338 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1343 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1339 | 1344 |
| 1340 TestCompletionCallback callback; | 1345 TestCompletionCallback callback; |
| 1341 | 1346 |
| 1342 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1347 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1343 EXPECT_EQ(ERR_IO_PENDING, rv); | 1348 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1344 | 1349 |
| 1345 rv = callback.WaitForResult(); | 1350 rv = callback.WaitForResult(); |
| 1346 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); | 1351 EXPECT_THAT(rv, IsError(ERR_EMPTY_RESPONSE)); |
| 1347 } | 1352 } |
| 1348 | 1353 |
| 1349 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( | 1354 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( |
| 1350 const MockWrite* write_failure, | 1355 const MockWrite* write_failure, |
| 1351 const MockRead* read_failure) { | 1356 const MockRead* read_failure) { |
| 1352 HttpRequestInfo request; | 1357 HttpRequestInfo request; |
| 1353 request.method = "GET"; | 1358 request.method = "GET"; |
| 1354 request.url = GURL("http://www.foo.com/"); | 1359 request.url = GURL("http://www.foo.com/"); |
| 1355 request.load_flags = 0; | 1360 request.load_flags = 0; |
| 1356 | 1361 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1400 }; | 1405 }; |
| 1401 | 1406 |
| 1402 uint32_t first_socket_log_id = NetLog::Source::kInvalidId; | 1407 uint32_t first_socket_log_id = NetLog::Source::kInvalidId; |
| 1403 for (int i = 0; i < 2; ++i) { | 1408 for (int i = 0; i < 2; ++i) { |
| 1404 TestCompletionCallback callback; | 1409 TestCompletionCallback callback; |
| 1405 | 1410 |
| 1406 std::unique_ptr<HttpTransaction> trans( | 1411 std::unique_ptr<HttpTransaction> trans( |
| 1407 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1412 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1408 | 1413 |
| 1409 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1414 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1410 EXPECT_EQ(ERR_IO_PENDING, rv); | 1415 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1411 | 1416 |
| 1412 rv = callback.WaitForResult(); | 1417 rv = callback.WaitForResult(); |
| 1413 EXPECT_EQ(OK, rv); | 1418 EXPECT_THAT(rv, IsOk()); |
| 1414 | 1419 |
| 1415 LoadTimingInfo load_timing_info; | 1420 LoadTimingInfo load_timing_info; |
| 1416 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 1421 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 1417 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); | 1422 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
| 1418 if (i == 0) { | 1423 if (i == 0) { |
| 1419 first_socket_log_id = load_timing_info.socket_log_id; | 1424 first_socket_log_id = load_timing_info.socket_log_id; |
| 1420 } else { | 1425 } else { |
| 1421 // The second request should be using a new socket. | 1426 // The second request should be using a new socket. |
| 1422 EXPECT_NE(first_socket_log_id, load_timing_info.socket_log_id); | 1427 EXPECT_NE(first_socket_log_id, load_timing_info.socket_log_id); |
| 1423 } | 1428 } |
| 1424 | 1429 |
| 1425 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1430 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1426 ASSERT_TRUE(response); | 1431 ASSERT_TRUE(response); |
| 1427 | 1432 |
| 1428 EXPECT_TRUE(response->headers); | 1433 EXPECT_TRUE(response->headers); |
| 1429 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1434 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 1430 | 1435 |
| 1431 std::string response_data; | 1436 std::string response_data; |
| 1432 rv = ReadTransaction(trans.get(), &response_data); | 1437 rv = ReadTransaction(trans.get(), &response_data); |
| 1433 EXPECT_EQ(OK, rv); | 1438 EXPECT_THAT(rv, IsOk()); |
| 1434 EXPECT_EQ(kExpectedResponseData[i], response_data); | 1439 EXPECT_EQ(kExpectedResponseData[i], response_data); |
| 1435 } | 1440 } |
| 1436 } | 1441 } |
| 1437 | 1442 |
| 1438 void HttpNetworkTransactionTest::PreconnectErrorResendRequestTest( | 1443 void HttpNetworkTransactionTest::PreconnectErrorResendRequestTest( |
| 1439 const MockWrite* write_failure, | 1444 const MockWrite* write_failure, |
| 1440 const MockRead* read_failure, | 1445 const MockRead* read_failure, |
| 1441 bool use_spdy) { | 1446 bool use_spdy) { |
| 1442 HttpRequestInfo request; | 1447 HttpRequestInfo request; |
| 1443 request.method = "GET"; | 1448 request.method = "GET"; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1521 base::RunLoop().RunUntilIdle(); | 1526 base::RunLoop().RunUntilIdle(); |
| 1522 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 1527 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
| 1523 | 1528 |
| 1524 // Make the request. | 1529 // Make the request. |
| 1525 TestCompletionCallback callback; | 1530 TestCompletionCallback callback; |
| 1526 | 1531 |
| 1527 std::unique_ptr<HttpTransaction> trans( | 1532 std::unique_ptr<HttpTransaction> trans( |
| 1528 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1533 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1529 | 1534 |
| 1530 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1535 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1531 EXPECT_EQ(ERR_IO_PENDING, rv); | 1536 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1532 | 1537 |
| 1533 rv = callback.WaitForResult(); | 1538 rv = callback.WaitForResult(); |
| 1534 EXPECT_EQ(OK, rv); | 1539 EXPECT_THAT(rv, IsOk()); |
| 1535 | 1540 |
| 1536 LoadTimingInfo load_timing_info; | 1541 LoadTimingInfo load_timing_info; |
| 1537 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 1542 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 1538 TestLoadTimingNotReused( | 1543 TestLoadTimingNotReused( |
| 1539 load_timing_info, | 1544 load_timing_info, |
| 1540 CONNECT_TIMING_HAS_DNS_TIMES|CONNECT_TIMING_HAS_SSL_TIMES); | 1545 CONNECT_TIMING_HAS_DNS_TIMES|CONNECT_TIMING_HAS_SSL_TIMES); |
| 1541 | 1546 |
| 1542 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1547 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1543 ASSERT_TRUE(response); | 1548 ASSERT_TRUE(response); |
| 1544 | 1549 |
| 1545 EXPECT_TRUE(response->headers); | 1550 EXPECT_TRUE(response->headers); |
| 1546 if (response->was_fetched_via_spdy) { | 1551 if (response->was_fetched_via_spdy) { |
| 1547 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 1552 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 1548 } else { | 1553 } else { |
| 1549 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1554 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 1550 } | 1555 } |
| 1551 | 1556 |
| 1552 std::string response_data; | 1557 std::string response_data; |
| 1553 rv = ReadTransaction(trans.get(), &response_data); | 1558 rv = ReadTransaction(trans.get(), &response_data); |
| 1554 EXPECT_EQ(OK, rv); | 1559 EXPECT_THAT(rv, IsOk()); |
| 1555 EXPECT_EQ(kHttpData, response_data); | 1560 EXPECT_EQ(kHttpData, response_data); |
| 1556 } | 1561 } |
| 1557 | 1562 |
| 1558 TEST_P(HttpNetworkTransactionTest, | 1563 TEST_P(HttpNetworkTransactionTest, |
| 1559 KeepAliveConnectionNotConnectedOnWrite) { | 1564 KeepAliveConnectionNotConnectedOnWrite) { |
| 1560 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 1565 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 1561 KeepAliveConnectionResendRequestTest(&write_failure, NULL); | 1566 KeepAliveConnectionResendRequestTest(&write_failure, NULL); |
| 1562 } | 1567 } |
| 1563 | 1568 |
| 1564 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionReset) { | 1569 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionReset) { |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1651 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used | 1656 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used |
| 1652 MockRead("hello world"), | 1657 MockRead("hello world"), |
| 1653 MockRead(SYNCHRONOUS, OK), | 1658 MockRead(SYNCHRONOUS, OK), |
| 1654 }; | 1659 }; |
| 1655 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1660 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1656 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1661 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1657 | 1662 |
| 1658 TestCompletionCallback callback; | 1663 TestCompletionCallback callback; |
| 1659 | 1664 |
| 1660 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1665 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1661 EXPECT_EQ(ERR_IO_PENDING, rv); | 1666 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1662 | 1667 |
| 1663 rv = callback.WaitForResult(); | 1668 rv = callback.WaitForResult(); |
| 1664 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 1669 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
| 1665 | 1670 |
| 1666 IPEndPoint endpoint; | 1671 IPEndPoint endpoint; |
| 1667 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); | 1672 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); |
| 1668 EXPECT_LT(0u, endpoint.address().size()); | 1673 EXPECT_LT(0u, endpoint.address().size()); |
| 1669 } | 1674 } |
| 1670 | 1675 |
| 1671 // What do various browsers do when the server closes a non-keepalive | 1676 // What do various browsers do when the server closes a non-keepalive |
| 1672 // connection without sending any response header or body? | 1677 // connection without sending any response header or body? |
| 1673 // | 1678 // |
| 1674 // IE7: error page | 1679 // IE7: error page |
| 1675 // Safari 3.1.2 (Windows): error page | 1680 // Safari 3.1.2 (Windows): error page |
| 1676 // Firefox 3.0.1: blank page | 1681 // Firefox 3.0.1: blank page |
| 1677 // Opera 9.52: after five attempts, blank page | 1682 // Opera 9.52: after five attempts, blank page |
| 1678 // Us with WinHTTP: error page (ERR_INVALID_RESPONSE) | 1683 // Us with WinHTTP: error page (ERR_INVALID_RESPONSE) |
| 1679 // Us: error page (EMPTY_RESPONSE) | 1684 // Us: error page (EMPTY_RESPONSE) |
| 1680 TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionEOF) { | 1685 TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionEOF) { |
| 1681 MockRead data_reads[] = { | 1686 MockRead data_reads[] = { |
| 1682 MockRead(SYNCHRONOUS, OK), // EOF | 1687 MockRead(SYNCHRONOUS, OK), // EOF |
| 1683 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used | 1688 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used |
| 1684 MockRead("hello world"), | 1689 MockRead("hello world"), |
| 1685 MockRead(SYNCHRONOUS, OK), | 1690 MockRead(SYNCHRONOUS, OK), |
| 1686 }; | 1691 }; |
| 1687 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1692 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
| 1688 arraysize(data_reads)); | 1693 arraysize(data_reads)); |
| 1689 EXPECT_EQ(ERR_EMPTY_RESPONSE, out.rv); | 1694 EXPECT_THAT(out.rv, IsError(ERR_EMPTY_RESPONSE)); |
| 1690 } | 1695 } |
| 1691 | 1696 |
| 1692 // Test that network access can be deferred and resumed. | 1697 // Test that network access can be deferred and resumed. |
| 1693 TEST_P(HttpNetworkTransactionTest, ThrottleBeforeNetworkStart) { | 1698 TEST_P(HttpNetworkTransactionTest, ThrottleBeforeNetworkStart) { |
| 1694 HttpRequestInfo request; | 1699 HttpRequestInfo request; |
| 1695 request.method = "GET"; | 1700 request.method = "GET"; |
| 1696 request.url = GURL("http://www.example.org/"); | 1701 request.url = GURL("http://www.example.org/"); |
| 1697 request.load_flags = 0; | 1702 request.load_flags = 0; |
| 1698 | 1703 |
| 1699 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1704 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1711 MockRead("Content-Length: 5\r\n\r\n"), | 1716 MockRead("Content-Length: 5\r\n\r\n"), |
| 1712 MockRead("hello"), | 1717 MockRead("hello"), |
| 1713 MockRead(SYNCHRONOUS, 0), | 1718 MockRead(SYNCHRONOUS, 0), |
| 1714 }; | 1719 }; |
| 1715 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1720 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1716 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1721 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1717 | 1722 |
| 1718 TestCompletionCallback callback; | 1723 TestCompletionCallback callback; |
| 1719 | 1724 |
| 1720 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1725 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1721 EXPECT_EQ(ERR_IO_PENDING, rv); | 1726 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1722 base::RunLoop().RunUntilIdle(); | 1727 base::RunLoop().RunUntilIdle(); |
| 1723 | 1728 |
| 1724 // Should have deferred for network start. | 1729 // Should have deferred for network start. |
| 1725 EXPECT_TRUE(net_start_handler.observed_before_network_start()); | 1730 EXPECT_TRUE(net_start_handler.observed_before_network_start()); |
| 1726 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); | 1731 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); |
| 1727 | 1732 |
| 1728 trans->ResumeNetworkStart(); | 1733 trans->ResumeNetworkStart(); |
| 1729 rv = callback.WaitForResult(); | 1734 rv = callback.WaitForResult(); |
| 1730 EXPECT_EQ(OK, rv); | 1735 EXPECT_THAT(rv, IsOk()); |
| 1731 EXPECT_TRUE(trans->GetResponseInfo()); | 1736 EXPECT_TRUE(trans->GetResponseInfo()); |
| 1732 | 1737 |
| 1733 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); | 1738 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); |
| 1734 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 1739 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
| 1735 if (rv == ERR_IO_PENDING) | 1740 if (rv == ERR_IO_PENDING) |
| 1736 rv = callback.WaitForResult(); | 1741 rv = callback.WaitForResult(); |
| 1737 EXPECT_EQ(5, rv); | 1742 EXPECT_EQ(5, rv); |
| 1738 trans.reset(); | 1743 trans.reset(); |
| 1739 } | 1744 } |
| 1740 | 1745 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1751 | 1756 |
| 1752 // Defer on OnBeforeNetworkStart. | 1757 // Defer on OnBeforeNetworkStart. |
| 1753 BeforeNetworkStartHandler net_start_handler(true); // defer | 1758 BeforeNetworkStartHandler net_start_handler(true); // defer |
| 1754 trans->SetBeforeNetworkStartCallback( | 1759 trans->SetBeforeNetworkStartCallback( |
| 1755 base::Bind(&BeforeNetworkStartHandler::OnBeforeNetworkStart, | 1760 base::Bind(&BeforeNetworkStartHandler::OnBeforeNetworkStart, |
| 1756 base::Unretained(&net_start_handler))); | 1761 base::Unretained(&net_start_handler))); |
| 1757 | 1762 |
| 1758 TestCompletionCallback callback; | 1763 TestCompletionCallback callback; |
| 1759 | 1764 |
| 1760 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1765 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1761 EXPECT_EQ(ERR_IO_PENDING, rv); | 1766 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1762 base::RunLoop().RunUntilIdle(); | 1767 base::RunLoop().RunUntilIdle(); |
| 1763 | 1768 |
| 1764 // Should have deferred for network start. | 1769 // Should have deferred for network start. |
| 1765 EXPECT_TRUE(net_start_handler.observed_before_network_start()); | 1770 EXPECT_TRUE(net_start_handler.observed_before_network_start()); |
| 1766 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); | 1771 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); |
| 1767 } | 1772 } |
| 1768 | 1773 |
| 1769 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression | 1774 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression |
| 1770 // tests. There was a bug causing HttpNetworkTransaction to hang in the | 1775 // tests. There was a bug causing HttpNetworkTransaction to hang in the |
| 1771 // destructor in such situations. | 1776 // destructor in such situations. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1786 MockRead("Content-Length: 100\r\n\r\n"), | 1791 MockRead("Content-Length: 100\r\n\r\n"), |
| 1787 MockRead("hello"), | 1792 MockRead("hello"), |
| 1788 MockRead(SYNCHRONOUS, 0), | 1793 MockRead(SYNCHRONOUS, 0), |
| 1789 }; | 1794 }; |
| 1790 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1795 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1791 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1796 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1792 | 1797 |
| 1793 TestCompletionCallback callback; | 1798 TestCompletionCallback callback; |
| 1794 | 1799 |
| 1795 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1800 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1796 EXPECT_EQ(ERR_IO_PENDING, rv); | 1801 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1797 | 1802 |
| 1798 rv = callback.WaitForResult(); | 1803 rv = callback.WaitForResult(); |
| 1799 EXPECT_EQ(OK, rv); | 1804 EXPECT_THAT(rv, IsOk()); |
| 1800 | 1805 |
| 1801 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); | 1806 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); |
| 1802 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 1807 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
| 1803 if (rv == ERR_IO_PENDING) | 1808 if (rv == ERR_IO_PENDING) |
| 1804 rv = callback.WaitForResult(); | 1809 rv = callback.WaitForResult(); |
| 1805 EXPECT_EQ(5, rv); | 1810 EXPECT_EQ(5, rv); |
| 1806 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 1811 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
| 1807 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 1812 EXPECT_THAT(rv, IsError(ERR_CONTENT_LENGTH_MISMATCH)); |
| 1808 | 1813 |
| 1809 trans.reset(); | 1814 trans.reset(); |
| 1810 base::RunLoop().RunUntilIdle(); | 1815 base::RunLoop().RunUntilIdle(); |
| 1811 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1816 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 1812 } | 1817 } |
| 1813 | 1818 |
| 1814 TEST_P(HttpNetworkTransactionTest, KeepAliveEarlyClose2) { | 1819 TEST_P(HttpNetworkTransactionTest, KeepAliveEarlyClose2) { |
| 1815 HttpRequestInfo request; | 1820 HttpRequestInfo request; |
| 1816 request.method = "GET"; | 1821 request.method = "GET"; |
| 1817 request.url = GURL("http://www.example.org/"); | 1822 request.url = GURL("http://www.example.org/"); |
| 1818 request.load_flags = 0; | 1823 request.load_flags = 0; |
| 1819 | 1824 |
| 1820 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1825 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1821 std::unique_ptr<HttpTransaction> trans( | 1826 std::unique_ptr<HttpTransaction> trans( |
| 1822 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1827 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1823 | 1828 |
| 1824 MockRead data_reads[] = { | 1829 MockRead data_reads[] = { |
| 1825 MockRead("HTTP/1.0 200 OK\r\n"), | 1830 MockRead("HTTP/1.0 200 OK\r\n"), |
| 1826 MockRead("Connection: keep-alive\r\n"), | 1831 MockRead("Connection: keep-alive\r\n"), |
| 1827 MockRead("Content-Length: 100\r\n\r\n"), | 1832 MockRead("Content-Length: 100\r\n\r\n"), |
| 1828 MockRead(SYNCHRONOUS, 0), | 1833 MockRead(SYNCHRONOUS, 0), |
| 1829 }; | 1834 }; |
| 1830 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1835 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1831 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1836 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1832 | 1837 |
| 1833 TestCompletionCallback callback; | 1838 TestCompletionCallback callback; |
| 1834 | 1839 |
| 1835 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1840 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1836 EXPECT_EQ(ERR_IO_PENDING, rv); | 1841 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1837 | 1842 |
| 1838 rv = callback.WaitForResult(); | 1843 rv = callback.WaitForResult(); |
| 1839 EXPECT_EQ(OK, rv); | 1844 EXPECT_THAT(rv, IsOk()); |
| 1840 | 1845 |
| 1841 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); | 1846 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); |
| 1842 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 1847 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
| 1843 if (rv == ERR_IO_PENDING) | 1848 if (rv == ERR_IO_PENDING) |
| 1844 rv = callback.WaitForResult(); | 1849 rv = callback.WaitForResult(); |
| 1845 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 1850 EXPECT_THAT(rv, IsError(ERR_CONTENT_LENGTH_MISMATCH)); |
| 1846 | 1851 |
| 1847 trans.reset(); | 1852 trans.reset(); |
| 1848 base::RunLoop().RunUntilIdle(); | 1853 base::RunLoop().RunUntilIdle(); |
| 1849 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1854 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 1850 } | 1855 } |
| 1851 | 1856 |
| 1852 // Test that we correctly reuse a keep-alive connection after not explicitly | 1857 // Test that we correctly reuse a keep-alive connection after not explicitly |
| 1853 // reading the body. | 1858 // reading the body. |
| 1854 TEST_P(HttpNetworkTransactionTest, KeepAliveAfterUnreadBody) { | 1859 TEST_P(HttpNetworkTransactionTest, KeepAliveAfterUnreadBody) { |
| 1855 HttpRequestInfo request; | 1860 HttpRequestInfo request; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1923 std::string response_lines[kNumUnreadBodies]; | 1928 std::string response_lines[kNumUnreadBodies]; |
| 1924 | 1929 |
| 1925 uint32_t first_socket_log_id = NetLog::Source::kInvalidId; | 1930 uint32_t first_socket_log_id = NetLog::Source::kInvalidId; |
| 1926 for (size_t i = 0; i < kNumUnreadBodies; ++i) { | 1931 for (size_t i = 0; i < kNumUnreadBodies; ++i) { |
| 1927 TestCompletionCallback callback; | 1932 TestCompletionCallback callback; |
| 1928 | 1933 |
| 1929 std::unique_ptr<HttpTransaction> trans( | 1934 std::unique_ptr<HttpTransaction> trans( |
| 1930 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1935 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1931 | 1936 |
| 1932 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1937 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1933 EXPECT_EQ(OK, callback.GetResult(rv)); | 1938 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 1934 | 1939 |
| 1935 LoadTimingInfo load_timing_info; | 1940 LoadTimingInfo load_timing_info; |
| 1936 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 1941 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 1937 if (i == 0) { | 1942 if (i == 0) { |
| 1938 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); | 1943 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
| 1939 first_socket_log_id = load_timing_info.socket_log_id; | 1944 first_socket_log_id = load_timing_info.socket_log_id; |
| 1940 } else { | 1945 } else { |
| 1941 TestLoadTimingReused(load_timing_info); | 1946 TestLoadTimingReused(load_timing_info); |
| 1942 EXPECT_EQ(first_socket_log_id, load_timing_info.socket_log_id); | 1947 EXPECT_EQ(first_socket_log_id, load_timing_info.socket_log_id); |
| 1943 } | 1948 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1969 static_assert(kNumUnreadBodies == arraysize(kStatusLines), | 1974 static_assert(kNumUnreadBodies == arraysize(kStatusLines), |
| 1970 "forgot to update kStatusLines"); | 1975 "forgot to update kStatusLines"); |
| 1971 | 1976 |
| 1972 for (int i = 0; i < kNumUnreadBodies; ++i) | 1977 for (int i = 0; i < kNumUnreadBodies; ++i) |
| 1973 EXPECT_EQ(kStatusLines[i], response_lines[i]); | 1978 EXPECT_EQ(kStatusLines[i], response_lines[i]); |
| 1974 | 1979 |
| 1975 TestCompletionCallback callback; | 1980 TestCompletionCallback callback; |
| 1976 std::unique_ptr<HttpTransaction> trans( | 1981 std::unique_ptr<HttpTransaction> trans( |
| 1977 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1982 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1978 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1983 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1979 EXPECT_EQ(OK, callback.GetResult(rv)); | 1984 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 1980 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1985 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1981 ASSERT_TRUE(response); | 1986 ASSERT_TRUE(response); |
| 1982 ASSERT_TRUE(response->headers); | 1987 ASSERT_TRUE(response->headers); |
| 1983 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1988 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 1984 std::string response_data; | 1989 std::string response_data; |
| 1985 rv = ReadTransaction(trans.get(), &response_data); | 1990 rv = ReadTransaction(trans.get(), &response_data); |
| 1986 EXPECT_EQ(OK, rv); | 1991 EXPECT_THAT(rv, IsOk()); |
| 1987 EXPECT_EQ("hello", response_data); | 1992 EXPECT_EQ("hello", response_data); |
| 1988 } | 1993 } |
| 1989 | 1994 |
| 1990 // Sockets that receive extra data after a response is complete should not be | 1995 // Sockets that receive extra data after a response is complete should not be |
| 1991 // reused. | 1996 // reused. |
| 1992 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData1) { | 1997 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData1) { |
| 1993 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1998 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1994 MockWrite data_writes1[] = { | 1999 MockWrite data_writes1[] = { |
| 1995 MockWrite("HEAD / HTTP/1.1\r\n" | 2000 MockWrite("HEAD / HTTP/1.1\r\n" |
| 1996 "Host: www.borked.com\r\n" | 2001 "Host: www.borked.com\r\n" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2023 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2028 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2024 | 2029 |
| 2025 TestCompletionCallback callback; | 2030 TestCompletionCallback callback; |
| 2026 HttpRequestInfo request1; | 2031 HttpRequestInfo request1; |
| 2027 request1.method = "HEAD"; | 2032 request1.method = "HEAD"; |
| 2028 request1.url = GURL("http://www.borked.com/"); | 2033 request1.url = GURL("http://www.borked.com/"); |
| 2029 | 2034 |
| 2030 std::unique_ptr<HttpTransaction> trans1( | 2035 std::unique_ptr<HttpTransaction> trans1( |
| 2031 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2036 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2032 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); | 2037 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); |
| 2033 EXPECT_EQ(OK, callback.GetResult(rv)); | 2038 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 2034 | 2039 |
| 2035 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2040 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
| 2036 ASSERT_TRUE(response1); | 2041 ASSERT_TRUE(response1); |
| 2037 ASSERT_TRUE(response1->headers); | 2042 ASSERT_TRUE(response1->headers); |
| 2038 EXPECT_EQ(200, response1->headers->response_code()); | 2043 EXPECT_EQ(200, response1->headers->response_code()); |
| 2039 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2044 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
| 2040 | 2045 |
| 2041 std::string response_data1; | 2046 std::string response_data1; |
| 2042 EXPECT_EQ(OK, ReadTransaction(trans1.get(), &response_data1)); | 2047 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
| 2043 EXPECT_EQ("", response_data1); | 2048 EXPECT_EQ("", response_data1); |
| 2044 // Deleting the transaction attempts to release the socket back into the | 2049 // Deleting the transaction attempts to release the socket back into the |
| 2045 // socket pool. | 2050 // socket pool. |
| 2046 trans1.reset(); | 2051 trans1.reset(); |
| 2047 | 2052 |
| 2048 HttpRequestInfo request2; | 2053 HttpRequestInfo request2; |
| 2049 request2.method = "GET"; | 2054 request2.method = "GET"; |
| 2050 request2.url = GURL("http://www.borked.com/foo"); | 2055 request2.url = GURL("http://www.borked.com/foo"); |
| 2051 | 2056 |
| 2052 std::unique_ptr<HttpTransaction> trans2( | 2057 std::unique_ptr<HttpTransaction> trans2( |
| 2053 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2058 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2054 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 2059 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
| 2055 EXPECT_EQ(OK, callback.GetResult(rv)); | 2060 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 2056 | 2061 |
| 2057 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 2062 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
| 2058 ASSERT_TRUE(response2); | 2063 ASSERT_TRUE(response2); |
| 2059 ASSERT_TRUE(response2->headers); | 2064 ASSERT_TRUE(response2->headers); |
| 2060 EXPECT_EQ(200, response2->headers->response_code()); | 2065 EXPECT_EQ(200, response2->headers->response_code()); |
| 2061 | 2066 |
| 2062 std::string response_data2; | 2067 std::string response_data2; |
| 2063 EXPECT_EQ(OK, ReadTransaction(trans2.get(), &response_data2)); | 2068 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); |
| 2064 EXPECT_EQ("foo", response_data2); | 2069 EXPECT_EQ("foo", response_data2); |
| 2065 } | 2070 } |
| 2066 | 2071 |
| 2067 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData2) { | 2072 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData2) { |
| 2068 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2073 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2069 MockWrite data_writes1[] = { | 2074 MockWrite data_writes1[] = { |
| 2070 MockWrite("GET / HTTP/1.1\r\n" | 2075 MockWrite("GET / HTTP/1.1\r\n" |
| 2071 "Host: www.borked.com\r\n" | 2076 "Host: www.borked.com\r\n" |
| 2072 "Connection: keep-alive\r\n\r\n"), | 2077 "Connection: keep-alive\r\n\r\n"), |
| 2073 }; | 2078 }; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2099 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2104 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2100 | 2105 |
| 2101 TestCompletionCallback callback; | 2106 TestCompletionCallback callback; |
| 2102 HttpRequestInfo request1; | 2107 HttpRequestInfo request1; |
| 2103 request1.method = "GET"; | 2108 request1.method = "GET"; |
| 2104 request1.url = GURL("http://www.borked.com/"); | 2109 request1.url = GURL("http://www.borked.com/"); |
| 2105 | 2110 |
| 2106 std::unique_ptr<HttpTransaction> trans1( | 2111 std::unique_ptr<HttpTransaction> trans1( |
| 2107 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2112 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2108 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); | 2113 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); |
| 2109 EXPECT_EQ(OK, callback.GetResult(rv)); | 2114 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 2110 | 2115 |
| 2111 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2116 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
| 2112 ASSERT_TRUE(response1); | 2117 ASSERT_TRUE(response1); |
| 2113 ASSERT_TRUE(response1->headers); | 2118 ASSERT_TRUE(response1->headers); |
| 2114 EXPECT_EQ(200, response1->headers->response_code()); | 2119 EXPECT_EQ(200, response1->headers->response_code()); |
| 2115 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2120 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
| 2116 | 2121 |
| 2117 std::string response_data1; | 2122 std::string response_data1; |
| 2118 EXPECT_EQ(OK, ReadTransaction(trans1.get(), &response_data1)); | 2123 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
| 2119 EXPECT_EQ("This server is borked.", response_data1); | 2124 EXPECT_EQ("This server is borked.", response_data1); |
| 2120 // Deleting the transaction attempts to release the socket back into the | 2125 // Deleting the transaction attempts to release the socket back into the |
| 2121 // socket pool. | 2126 // socket pool. |
| 2122 trans1.reset(); | 2127 trans1.reset(); |
| 2123 | 2128 |
| 2124 HttpRequestInfo request2; | 2129 HttpRequestInfo request2; |
| 2125 request2.method = "GET"; | 2130 request2.method = "GET"; |
| 2126 request2.url = GURL("http://www.borked.com/foo"); | 2131 request2.url = GURL("http://www.borked.com/foo"); |
| 2127 | 2132 |
| 2128 std::unique_ptr<HttpTransaction> trans2( | 2133 std::unique_ptr<HttpTransaction> trans2( |
| 2129 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2134 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2130 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 2135 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
| 2131 EXPECT_EQ(OK, callback.GetResult(rv)); | 2136 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 2132 | 2137 |
| 2133 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 2138 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
| 2134 ASSERT_TRUE(response2); | 2139 ASSERT_TRUE(response2); |
| 2135 ASSERT_TRUE(response2->headers); | 2140 ASSERT_TRUE(response2->headers); |
| 2136 EXPECT_EQ(200, response2->headers->response_code()); | 2141 EXPECT_EQ(200, response2->headers->response_code()); |
| 2137 | 2142 |
| 2138 std::string response_data2; | 2143 std::string response_data2; |
| 2139 EXPECT_EQ(OK, ReadTransaction(trans2.get(), &response_data2)); | 2144 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); |
| 2140 EXPECT_EQ("foo", response_data2); | 2145 EXPECT_EQ("foo", response_data2); |
| 2141 } | 2146 } |
| 2142 | 2147 |
| 2143 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData3) { | 2148 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData3) { |
| 2144 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2149 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2145 MockWrite data_writes1[] = { | 2150 MockWrite data_writes1[] = { |
| 2146 MockWrite("GET / HTTP/1.1\r\n" | 2151 MockWrite("GET / HTTP/1.1\r\n" |
| 2147 "Host: www.borked.com\r\n" | 2152 "Host: www.borked.com\r\n" |
| 2148 "Connection: keep-alive\r\n\r\n"), | 2153 "Connection: keep-alive\r\n\r\n"), |
| 2149 }; | 2154 }; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2175 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2180 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2176 | 2181 |
| 2177 TestCompletionCallback callback; | 2182 TestCompletionCallback callback; |
| 2178 HttpRequestInfo request1; | 2183 HttpRequestInfo request1; |
| 2179 request1.method = "GET"; | 2184 request1.method = "GET"; |
| 2180 request1.url = GURL("http://www.borked.com/"); | 2185 request1.url = GURL("http://www.borked.com/"); |
| 2181 | 2186 |
| 2182 std::unique_ptr<HttpTransaction> trans1( | 2187 std::unique_ptr<HttpTransaction> trans1( |
| 2183 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2188 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2184 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); | 2189 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); |
| 2185 EXPECT_EQ(OK, callback.GetResult(rv)); | 2190 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 2186 | 2191 |
| 2187 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2192 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
| 2188 ASSERT_TRUE(response1); | 2193 ASSERT_TRUE(response1); |
| 2189 ASSERT_TRUE(response1->headers); | 2194 ASSERT_TRUE(response1->headers); |
| 2190 EXPECT_EQ(200, response1->headers->response_code()); | 2195 EXPECT_EQ(200, response1->headers->response_code()); |
| 2191 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2196 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
| 2192 | 2197 |
| 2193 std::string response_data1; | 2198 std::string response_data1; |
| 2194 EXPECT_EQ(OK, ReadTransaction(trans1.get(), &response_data1)); | 2199 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
| 2195 EXPECT_EQ("This server is borked.", response_data1); | 2200 EXPECT_EQ("This server is borked.", response_data1); |
| 2196 // Deleting the transaction attempts to release the socket back into the | 2201 // Deleting the transaction attempts to release the socket back into the |
| 2197 // socket pool. | 2202 // socket pool. |
| 2198 trans1.reset(); | 2203 trans1.reset(); |
| 2199 | 2204 |
| 2200 HttpRequestInfo request2; | 2205 HttpRequestInfo request2; |
| 2201 request2.method = "GET"; | 2206 request2.method = "GET"; |
| 2202 request2.url = GURL("http://www.borked.com/foo"); | 2207 request2.url = GURL("http://www.borked.com/foo"); |
| 2203 | 2208 |
| 2204 std::unique_ptr<HttpTransaction> trans2( | 2209 std::unique_ptr<HttpTransaction> trans2( |
| 2205 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2210 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2206 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 2211 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
| 2207 EXPECT_EQ(OK, callback.GetResult(rv)); | 2212 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 2208 | 2213 |
| 2209 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 2214 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
| 2210 ASSERT_TRUE(response2); | 2215 ASSERT_TRUE(response2); |
| 2211 ASSERT_TRUE(response2->headers); | 2216 ASSERT_TRUE(response2->headers); |
| 2212 EXPECT_EQ(200, response2->headers->response_code()); | 2217 EXPECT_EQ(200, response2->headers->response_code()); |
| 2213 | 2218 |
| 2214 std::string response_data2; | 2219 std::string response_data2; |
| 2215 EXPECT_EQ(OK, ReadTransaction(trans2.get(), &response_data2)); | 2220 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); |
| 2216 EXPECT_EQ("foo", response_data2); | 2221 EXPECT_EQ("foo", response_data2); |
| 2217 } | 2222 } |
| 2218 | 2223 |
| 2219 // This is a little different from the others - it tests the case that the | 2224 // This is a little different from the others - it tests the case that the |
| 2220 // HttpStreamParser doesn't know if there's extra data on a socket or not when | 2225 // HttpStreamParser doesn't know if there's extra data on a socket or not when |
| 2221 // the HttpNetworkTransaction is torn down, because the response body hasn't | 2226 // the HttpNetworkTransaction is torn down, because the response body hasn't |
| 2222 // been read from yet, but the request goes through the HttpResponseBodyDrainer. | 2227 // been read from yet, but the request goes through the HttpResponseBodyDrainer. |
| 2223 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData4) { | 2228 TEST_P(HttpNetworkTransactionTest, KeepAliveWithUnusedData4) { |
| 2224 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2229 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2225 MockWrite data_writes1[] = { | 2230 MockWrite data_writes1[] = { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2240 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2245 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2241 | 2246 |
| 2242 TestCompletionCallback callback; | 2247 TestCompletionCallback callback; |
| 2243 HttpRequestInfo request1; | 2248 HttpRequestInfo request1; |
| 2244 request1.method = "GET"; | 2249 request1.method = "GET"; |
| 2245 request1.url = GURL("http://www.borked.com/"); | 2250 request1.url = GURL("http://www.borked.com/"); |
| 2246 | 2251 |
| 2247 std::unique_ptr<HttpTransaction> trans1( | 2252 std::unique_ptr<HttpTransaction> trans1( |
| 2248 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2253 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2249 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); | 2254 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); |
| 2250 EXPECT_EQ(OK, callback.GetResult(rv)); | 2255 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 2251 | 2256 |
| 2252 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2257 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
| 2253 ASSERT_TRUE(response1); | 2258 ASSERT_TRUE(response1); |
| 2254 ASSERT_TRUE(response1->headers); | 2259 ASSERT_TRUE(response1->headers); |
| 2255 EXPECT_EQ(200, response1->headers->response_code()); | 2260 EXPECT_EQ(200, response1->headers->response_code()); |
| 2256 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2261 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
| 2257 | 2262 |
| 2258 // Deleting the transaction creates an HttpResponseBodyDrainer to read the | 2263 // Deleting the transaction creates an HttpResponseBodyDrainer to read the |
| 2259 // response body. | 2264 // response body. |
| 2260 trans1.reset(); | 2265 trans1.reset(); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2322 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2327 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 2323 data_writes1, arraysize(data_writes1)); | 2328 data_writes1, arraysize(data_writes1)); |
| 2324 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2329 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 2325 data_writes2, arraysize(data_writes2)); | 2330 data_writes2, arraysize(data_writes2)); |
| 2326 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2331 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2327 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2332 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2328 | 2333 |
| 2329 TestCompletionCallback callback1; | 2334 TestCompletionCallback callback1; |
| 2330 | 2335 |
| 2331 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2336 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 2332 EXPECT_EQ(ERR_IO_PENDING, rv); | 2337 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2333 | 2338 |
| 2334 rv = callback1.WaitForResult(); | 2339 rv = callback1.WaitForResult(); |
| 2335 EXPECT_EQ(OK, rv); | 2340 EXPECT_THAT(rv, IsOk()); |
| 2336 | 2341 |
| 2337 LoadTimingInfo load_timing_info1; | 2342 LoadTimingInfo load_timing_info1; |
| 2338 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); | 2343 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); |
| 2339 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); | 2344 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); |
| 2340 | 2345 |
| 2341 int64_t writes_size1 = CountWriteBytes(data_writes1, arraysize(data_writes1)); | 2346 int64_t writes_size1 = CountWriteBytes(data_writes1, arraysize(data_writes1)); |
| 2342 EXPECT_EQ(writes_size1, trans->GetTotalSentBytes()); | 2347 EXPECT_EQ(writes_size1, trans->GetTotalSentBytes()); |
| 2343 int64_t reads_size1 = CountReadBytes(data_reads1, arraysize(data_reads1)); | 2348 int64_t reads_size1 = CountReadBytes(data_reads1, arraysize(data_reads1)); |
| 2344 EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); | 2349 EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); |
| 2345 | 2350 |
| 2346 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2351 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2347 ASSERT_TRUE(response); | 2352 ASSERT_TRUE(response); |
| 2348 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2353 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 2349 | 2354 |
| 2350 TestCompletionCallback callback2; | 2355 TestCompletionCallback callback2; |
| 2351 | 2356 |
| 2352 rv = trans->RestartWithAuth( | 2357 rv = trans->RestartWithAuth( |
| 2353 AuthCredentials(kFoo, kBar), callback2.callback()); | 2358 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 2354 EXPECT_EQ(ERR_IO_PENDING, rv); | 2359 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2355 | 2360 |
| 2356 rv = callback2.WaitForResult(); | 2361 rv = callback2.WaitForResult(); |
| 2357 EXPECT_EQ(OK, rv); | 2362 EXPECT_THAT(rv, IsOk()); |
| 2358 | 2363 |
| 2359 LoadTimingInfo load_timing_info2; | 2364 LoadTimingInfo load_timing_info2; |
| 2360 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); | 2365 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); |
| 2361 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_DNS_TIMES); | 2366 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_DNS_TIMES); |
| 2362 // The load timing after restart should have a new socket ID, and times after | 2367 // The load timing after restart should have a new socket ID, and times after |
| 2363 // those of the first load timing. | 2368 // those of the first load timing. |
| 2364 EXPECT_LE(load_timing_info1.receive_headers_end, | 2369 EXPECT_LE(load_timing_info1.receive_headers_end, |
| 2365 load_timing_info2.connect_timing.connect_start); | 2370 load_timing_info2.connect_timing.connect_start); |
| 2366 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 2371 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
| 2367 | 2372 |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2517 MockRead("Content-Length: 10000\r\n\r\n"), | 2522 MockRead("Content-Length: 10000\r\n\r\n"), |
| 2518 MockRead(SYNCHRONOUS, ERR_FAILED), | 2523 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 2519 }; | 2524 }; |
| 2520 | 2525 |
| 2521 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 2526 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 2522 data_writes, arraysize(data_writes)); | 2527 data_writes, arraysize(data_writes)); |
| 2523 session_deps_.socket_factory->AddSocketDataProvider(&data); | 2528 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 2524 TestCompletionCallback callback; | 2529 TestCompletionCallback callback; |
| 2525 | 2530 |
| 2526 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 2531 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 2527 EXPECT_EQ(ERR_IO_PENDING, rv); | 2532 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2528 | 2533 |
| 2529 rv = callback.WaitForResult(); | 2534 rv = callback.WaitForResult(); |
| 2530 EXPECT_EQ(0, rv); | 2535 EXPECT_EQ(0, rv); |
| 2531 | 2536 |
| 2532 int64_t writes_size = CountWriteBytes(data_writes, arraysize(data_writes)); | 2537 int64_t writes_size = CountWriteBytes(data_writes, arraysize(data_writes)); |
| 2533 EXPECT_EQ(writes_size, trans->GetTotalSentBytes()); | 2538 EXPECT_EQ(writes_size, trans->GetTotalSentBytes()); |
| 2534 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 2539 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 2535 EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); | 2540 EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); |
| 2536 | 2541 |
| 2537 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2542 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2587 SequencedSocketData data(data_reads, arraysize(data_reads), data_writes, | 2592 SequencedSocketData data(data_reads, arraysize(data_reads), data_writes, |
| 2588 arraysize(data_writes)); | 2593 arraysize(data_writes)); |
| 2589 data.set_busy_before_sync_reads(true); | 2594 data.set_busy_before_sync_reads(true); |
| 2590 session_deps_.socket_factory->AddSocketDataProvider(&data); | 2595 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 2591 | 2596 |
| 2592 TestCompletionCallback callback1; | 2597 TestCompletionCallback callback1; |
| 2593 | 2598 |
| 2594 std::unique_ptr<HttpTransaction> trans( | 2599 std::unique_ptr<HttpTransaction> trans( |
| 2595 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2600 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2596 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2601 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 2597 ASSERT_EQ(OK, callback1.GetResult(rv)); | 2602 ASSERT_THAT(callback1.GetResult(rv), IsOk()); |
| 2598 | 2603 |
| 2599 LoadTimingInfo load_timing_info1; | 2604 LoadTimingInfo load_timing_info1; |
| 2600 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); | 2605 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); |
| 2601 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); | 2606 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); |
| 2602 | 2607 |
| 2603 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2608 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2604 ASSERT_TRUE(response); | 2609 ASSERT_TRUE(response); |
| 2605 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2610 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 2606 | 2611 |
| 2607 TestCompletionCallback callback2; | 2612 TestCompletionCallback callback2; |
| 2608 | 2613 |
| 2609 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), | 2614 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), |
| 2610 callback2.callback()); | 2615 callback2.callback()); |
| 2611 ASSERT_EQ(OK, callback2.GetResult(rv)); | 2616 ASSERT_THAT(callback2.GetResult(rv), IsOk()); |
| 2612 | 2617 |
| 2613 LoadTimingInfo load_timing_info2; | 2618 LoadTimingInfo load_timing_info2; |
| 2614 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); | 2619 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); |
| 2615 TestLoadTimingReused(load_timing_info2); | 2620 TestLoadTimingReused(load_timing_info2); |
| 2616 // The load timing after restart should have the same socket ID, and times | 2621 // The load timing after restart should have the same socket ID, and times |
| 2617 // those of the first load timing. | 2622 // those of the first load timing. |
| 2618 EXPECT_LE(load_timing_info1.receive_headers_end, | 2623 EXPECT_LE(load_timing_info1.receive_headers_end, |
| 2619 load_timing_info2.send_start); | 2624 load_timing_info2.send_start); |
| 2620 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 2625 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
| 2621 | 2626 |
| 2622 response = trans->GetResponseInfo(); | 2627 response = trans->GetResponseInfo(); |
| 2623 ASSERT_TRUE(response); | 2628 ASSERT_TRUE(response); |
| 2624 EXPECT_FALSE(response->auth_challenge); | 2629 EXPECT_FALSE(response->auth_challenge); |
| 2625 EXPECT_EQ(5, response->headers->GetContentLength()); | 2630 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 2626 | 2631 |
| 2627 std::string response_data; | 2632 std::string response_data; |
| 2628 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 2633 EXPECT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 2629 | 2634 |
| 2630 int64_t writes_size = CountWriteBytes(data_writes, arraysize(data_writes)); | 2635 int64_t writes_size = CountWriteBytes(data_writes, arraysize(data_writes)); |
| 2631 EXPECT_EQ(writes_size, trans->GetTotalSentBytes()); | 2636 EXPECT_EQ(writes_size, trans->GetTotalSentBytes()); |
| 2632 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 2637 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| 2633 EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); | 2638 EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); |
| 2634 } | 2639 } |
| 2635 } | 2640 } |
| 2636 | 2641 |
| 2637 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2642 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
| 2638 // connection and with no response body to drain. | 2643 // connection and with no response body to drain. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2681 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2686 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 2682 NULL, 0); | 2687 NULL, 0); |
| 2683 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2688 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2684 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2689 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2685 | 2690 |
| 2686 TestCompletionCallback callback1; | 2691 TestCompletionCallback callback1; |
| 2687 | 2692 |
| 2688 std::unique_ptr<HttpTransaction> trans( | 2693 std::unique_ptr<HttpTransaction> trans( |
| 2689 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2694 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2690 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2695 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 2691 EXPECT_EQ(ERR_IO_PENDING, rv); | 2696 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2692 | 2697 |
| 2693 rv = callback1.WaitForResult(); | 2698 rv = callback1.WaitForResult(); |
| 2694 EXPECT_EQ(OK, rv); | 2699 EXPECT_THAT(rv, IsOk()); |
| 2695 | 2700 |
| 2696 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2701 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2697 ASSERT_TRUE(response); | 2702 ASSERT_TRUE(response); |
| 2698 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2703 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 2699 | 2704 |
| 2700 TestCompletionCallback callback2; | 2705 TestCompletionCallback callback2; |
| 2701 | 2706 |
| 2702 rv = trans->RestartWithAuth( | 2707 rv = trans->RestartWithAuth( |
| 2703 AuthCredentials(kFoo, kBar), callback2.callback()); | 2708 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 2704 EXPECT_EQ(ERR_IO_PENDING, rv); | 2709 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2705 | 2710 |
| 2706 rv = callback2.WaitForResult(); | 2711 rv = callback2.WaitForResult(); |
| 2707 EXPECT_EQ(OK, rv); | 2712 EXPECT_THAT(rv, IsOk()); |
| 2708 | 2713 |
| 2709 response = trans->GetResponseInfo(); | 2714 response = trans->GetResponseInfo(); |
| 2710 ASSERT_TRUE(response); | 2715 ASSERT_TRUE(response); |
| 2711 EXPECT_FALSE(response->auth_challenge); | 2716 EXPECT_FALSE(response->auth_challenge); |
| 2712 EXPECT_EQ(5, response->headers->GetContentLength()); | 2717 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 2713 } | 2718 } |
| 2714 | 2719 |
| 2715 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2720 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
| 2716 // connection and with a large response body to drain. | 2721 // connection and with a large response body to drain. |
| 2717 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveLargeBody) { | 2722 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveLargeBody) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2767 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2772 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 2768 NULL, 0); | 2773 NULL, 0); |
| 2769 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2774 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2770 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2775 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2771 | 2776 |
| 2772 TestCompletionCallback callback1; | 2777 TestCompletionCallback callback1; |
| 2773 | 2778 |
| 2774 std::unique_ptr<HttpTransaction> trans( | 2779 std::unique_ptr<HttpTransaction> trans( |
| 2775 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2780 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2776 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2781 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 2777 EXPECT_EQ(ERR_IO_PENDING, rv); | 2782 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2778 | 2783 |
| 2779 rv = callback1.WaitForResult(); | 2784 rv = callback1.WaitForResult(); |
| 2780 EXPECT_EQ(OK, rv); | 2785 EXPECT_THAT(rv, IsOk()); |
| 2781 | 2786 |
| 2782 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2787 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2783 ASSERT_TRUE(response); | 2788 ASSERT_TRUE(response); |
| 2784 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2789 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 2785 | 2790 |
| 2786 TestCompletionCallback callback2; | 2791 TestCompletionCallback callback2; |
| 2787 | 2792 |
| 2788 rv = trans->RestartWithAuth( | 2793 rv = trans->RestartWithAuth( |
| 2789 AuthCredentials(kFoo, kBar), callback2.callback()); | 2794 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 2790 EXPECT_EQ(ERR_IO_PENDING, rv); | 2795 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2791 | 2796 |
| 2792 rv = callback2.WaitForResult(); | 2797 rv = callback2.WaitForResult(); |
| 2793 EXPECT_EQ(OK, rv); | 2798 EXPECT_THAT(rv, IsOk()); |
| 2794 | 2799 |
| 2795 response = trans->GetResponseInfo(); | 2800 response = trans->GetResponseInfo(); |
| 2796 ASSERT_TRUE(response); | 2801 ASSERT_TRUE(response); |
| 2797 EXPECT_FALSE(response->auth_challenge); | 2802 EXPECT_FALSE(response->auth_challenge); |
| 2798 EXPECT_EQ(5, response->headers->GetContentLength()); | 2803 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 2799 } | 2804 } |
| 2800 | 2805 |
| 2801 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2806 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
| 2802 // connection, but the server gets impatient and closes the connection. | 2807 // connection, but the server gets impatient and closes the connection. |
| 2803 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveImpatientServer) { | 2808 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveImpatientServer) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2856 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2861 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 2857 data_writes2, arraysize(data_writes2)); | 2862 data_writes2, arraysize(data_writes2)); |
| 2858 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2863 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2859 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2864 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2860 | 2865 |
| 2861 TestCompletionCallback callback1; | 2866 TestCompletionCallback callback1; |
| 2862 | 2867 |
| 2863 std::unique_ptr<HttpTransaction> trans( | 2868 std::unique_ptr<HttpTransaction> trans( |
| 2864 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2869 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2865 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2870 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 2866 EXPECT_EQ(ERR_IO_PENDING, rv); | 2871 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2867 | 2872 |
| 2868 rv = callback1.WaitForResult(); | 2873 rv = callback1.WaitForResult(); |
| 2869 EXPECT_EQ(OK, rv); | 2874 EXPECT_THAT(rv, IsOk()); |
| 2870 | 2875 |
| 2871 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2876 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2872 ASSERT_TRUE(response); | 2877 ASSERT_TRUE(response); |
| 2873 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2878 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 2874 | 2879 |
| 2875 TestCompletionCallback callback2; | 2880 TestCompletionCallback callback2; |
| 2876 | 2881 |
| 2877 rv = trans->RestartWithAuth( | 2882 rv = trans->RestartWithAuth( |
| 2878 AuthCredentials(kFoo, kBar), callback2.callback()); | 2883 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 2879 EXPECT_EQ(ERR_IO_PENDING, rv); | 2884 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2880 | 2885 |
| 2881 rv = callback2.WaitForResult(); | 2886 rv = callback2.WaitForResult(); |
| 2882 EXPECT_EQ(OK, rv); | 2887 EXPECT_THAT(rv, IsOk()); |
| 2883 | 2888 |
| 2884 response = trans->GetResponseInfo(); | 2889 response = trans->GetResponseInfo(); |
| 2885 ASSERT_TRUE(response); | 2890 ASSERT_TRUE(response); |
| 2886 EXPECT_FALSE(response->auth_challenge); | 2891 EXPECT_FALSE(response->auth_challenge); |
| 2887 EXPECT_EQ(5, response->headers->GetContentLength()); | 2892 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 2888 } | 2893 } |
| 2889 | 2894 |
| 2890 // Test the request-challenge-retry sequence for basic auth, over a connection | 2895 // Test the request-challenge-retry sequence for basic auth, over a connection |
| 2891 // that requires a restart when setting up an SSL tunnel. | 2896 // that requires a restart when setting up an SSL tunnel. |
| 2892 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyNoKeepAliveHttp10) { | 2897 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyNoKeepAliveHttp10) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2950 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2955 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2951 SSLSocketDataProvider ssl(ASYNC, OK); | 2956 SSLSocketDataProvider ssl(ASYNC, OK); |
| 2952 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2957 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 2953 | 2958 |
| 2954 TestCompletionCallback callback1; | 2959 TestCompletionCallback callback1; |
| 2955 | 2960 |
| 2956 std::unique_ptr<HttpTransaction> trans( | 2961 std::unique_ptr<HttpTransaction> trans( |
| 2957 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2962 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2958 | 2963 |
| 2959 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2964 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 2960 EXPECT_EQ(ERR_IO_PENDING, rv); | 2965 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2961 | 2966 |
| 2962 rv = callback1.WaitForResult(); | 2967 rv = callback1.WaitForResult(); |
| 2963 EXPECT_EQ(OK, rv); | 2968 EXPECT_THAT(rv, IsOk()); |
| 2964 TestNetLogEntry::List entries; | 2969 TestNetLogEntry::List entries; |
| 2965 log.GetEntries(&entries); | 2970 log.GetEntries(&entries); |
| 2966 size_t pos = ExpectLogContainsSomewhere( | 2971 size_t pos = ExpectLogContainsSomewhere( |
| 2967 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 2972 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 2968 NetLog::PHASE_NONE); | 2973 NetLog::PHASE_NONE); |
| 2969 ExpectLogContainsSomewhere( | 2974 ExpectLogContainsSomewhere( |
| 2970 entries, pos, NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 2975 entries, pos, NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 2971 NetLog::PHASE_NONE); | 2976 NetLog::PHASE_NONE); |
| 2972 | 2977 |
| 2973 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2978 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2974 ASSERT_TRUE(response); | 2979 ASSERT_TRUE(response); |
| 2975 EXPECT_FALSE(response->headers->IsKeepAlive()); | 2980 EXPECT_FALSE(response->headers->IsKeepAlive()); |
| 2976 ASSERT_TRUE(response->headers); | 2981 ASSERT_TRUE(response->headers); |
| 2977 EXPECT_EQ(407, response->headers->response_code()); | 2982 EXPECT_EQ(407, response->headers->response_code()); |
| 2978 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); | 2983 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); |
| 2979 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 2984 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 2980 | 2985 |
| 2981 LoadTimingInfo load_timing_info; | 2986 LoadTimingInfo load_timing_info; |
| 2982 // CONNECT requests and responses are handled at the connect job level, so | 2987 // CONNECT requests and responses are handled at the connect job level, so |
| 2983 // the transaction does not yet have a connection. | 2988 // the transaction does not yet have a connection. |
| 2984 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 2989 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 2985 | 2990 |
| 2986 TestCompletionCallback callback2; | 2991 TestCompletionCallback callback2; |
| 2987 | 2992 |
| 2988 rv = | 2993 rv = |
| 2989 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); | 2994 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 2990 EXPECT_EQ(ERR_IO_PENDING, rv); | 2995 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2991 | 2996 |
| 2992 rv = callback2.WaitForResult(); | 2997 rv = callback2.WaitForResult(); |
| 2993 EXPECT_EQ(OK, rv); | 2998 EXPECT_THAT(rv, IsOk()); |
| 2994 | 2999 |
| 2995 response = trans->GetResponseInfo(); | 3000 response = trans->GetResponseInfo(); |
| 2996 ASSERT_TRUE(response); | 3001 ASSERT_TRUE(response); |
| 2997 | 3002 |
| 2998 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3003 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 2999 EXPECT_EQ(200, response->headers->response_code()); | 3004 EXPECT_EQ(200, response->headers->response_code()); |
| 3000 EXPECT_EQ(5, response->headers->GetContentLength()); | 3005 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 3001 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3006 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3002 | 3007 |
| 3003 // The password prompt info should not be set. | 3008 // The password prompt info should not be set. |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3073 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3078 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 3074 SSLSocketDataProvider ssl(ASYNC, OK); | 3079 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3075 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3080 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3076 | 3081 |
| 3077 TestCompletionCallback callback1; | 3082 TestCompletionCallback callback1; |
| 3078 | 3083 |
| 3079 std::unique_ptr<HttpTransaction> trans( | 3084 std::unique_ptr<HttpTransaction> trans( |
| 3080 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3085 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 3081 | 3086 |
| 3082 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3087 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 3083 EXPECT_EQ(ERR_IO_PENDING, rv); | 3088 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 3084 | 3089 |
| 3085 rv = callback1.WaitForResult(); | 3090 rv = callback1.WaitForResult(); |
| 3086 EXPECT_EQ(OK, rv); | 3091 EXPECT_THAT(rv, IsOk()); |
| 3087 TestNetLogEntry::List entries; | 3092 TestNetLogEntry::List entries; |
| 3088 log.GetEntries(&entries); | 3093 log.GetEntries(&entries); |
| 3089 size_t pos = ExpectLogContainsSomewhere( | 3094 size_t pos = ExpectLogContainsSomewhere( |
| 3090 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3095 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 3091 NetLog::PHASE_NONE); | 3096 NetLog::PHASE_NONE); |
| 3092 ExpectLogContainsSomewhere( | 3097 ExpectLogContainsSomewhere( |
| 3093 entries, pos, | 3098 entries, pos, |
| 3094 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 3099 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 3095 NetLog::PHASE_NONE); | 3100 NetLog::PHASE_NONE); |
| 3096 | 3101 |
| 3097 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3102 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 3098 ASSERT_TRUE(response); | 3103 ASSERT_TRUE(response); |
| 3099 EXPECT_FALSE(response->headers->IsKeepAlive()); | 3104 EXPECT_FALSE(response->headers->IsKeepAlive()); |
| 3100 ASSERT_TRUE(response->headers); | 3105 ASSERT_TRUE(response->headers); |
| 3101 EXPECT_EQ(407, response->headers->response_code()); | 3106 EXPECT_EQ(407, response->headers->response_code()); |
| 3102 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3107 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3103 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3108 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 3104 | 3109 |
| 3105 LoadTimingInfo load_timing_info; | 3110 LoadTimingInfo load_timing_info; |
| 3106 // CONNECT requests and responses are handled at the connect job level, so | 3111 // CONNECT requests and responses are handled at the connect job level, so |
| 3107 // the transaction does not yet have a connection. | 3112 // the transaction does not yet have a connection. |
| 3108 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 3113 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 3109 | 3114 |
| 3110 TestCompletionCallback callback2; | 3115 TestCompletionCallback callback2; |
| 3111 | 3116 |
| 3112 rv = trans->RestartWithAuth( | 3117 rv = trans->RestartWithAuth( |
| 3113 AuthCredentials(kFoo, kBar), callback2.callback()); | 3118 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 3114 EXPECT_EQ(ERR_IO_PENDING, rv); | 3119 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 3115 | 3120 |
| 3116 rv = callback2.WaitForResult(); | 3121 rv = callback2.WaitForResult(); |
| 3117 EXPECT_EQ(OK, rv); | 3122 EXPECT_THAT(rv, IsOk()); |
| 3118 | 3123 |
| 3119 response = trans->GetResponseInfo(); | 3124 response = trans->GetResponseInfo(); |
| 3120 ASSERT_TRUE(response); | 3125 ASSERT_TRUE(response); |
| 3121 | 3126 |
| 3122 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3127 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3123 EXPECT_EQ(200, response->headers->response_code()); | 3128 EXPECT_EQ(200, response->headers->response_code()); |
| 3124 EXPECT_EQ(5, response->headers->GetContentLength()); | 3129 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 3125 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3130 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3126 | 3131 |
| 3127 // The password prompt info should not be set. | 3132 // The password prompt info should not be set. |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3196 }; | 3201 }; |
| 3197 | 3202 |
| 3198 SequencedSocketData data1(data_reads1, arraysize(data_reads1), data_writes1, | 3203 SequencedSocketData data1(data_reads1, arraysize(data_reads1), data_writes1, |
| 3199 arraysize(data_writes1)); | 3204 arraysize(data_writes1)); |
| 3200 data1.set_busy_before_sync_reads(true); | 3205 data1.set_busy_before_sync_reads(true); |
| 3201 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3206 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 3202 | 3207 |
| 3203 TestCompletionCallback callback1; | 3208 TestCompletionCallback callback1; |
| 3204 | 3209 |
| 3205 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3210 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 3206 EXPECT_EQ(OK, callback1.GetResult(rv)); | 3211 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
| 3207 | 3212 |
| 3208 TestNetLogEntry::List entries; | 3213 TestNetLogEntry::List entries; |
| 3209 log.GetEntries(&entries); | 3214 log.GetEntries(&entries); |
| 3210 size_t pos = ExpectLogContainsSomewhere( | 3215 size_t pos = ExpectLogContainsSomewhere( |
| 3211 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3216 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 3212 NetLog::PHASE_NONE); | 3217 NetLog::PHASE_NONE); |
| 3213 ExpectLogContainsSomewhere( | 3218 ExpectLogContainsSomewhere( |
| 3214 entries, pos, | 3219 entries, pos, |
| 3215 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 3220 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 3216 NetLog::PHASE_NONE); | 3221 NetLog::PHASE_NONE); |
| 3217 | 3222 |
| 3218 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3223 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 3219 ASSERT_TRUE(response); | 3224 ASSERT_TRUE(response); |
| 3220 ASSERT_TRUE(response->headers); | 3225 ASSERT_TRUE(response->headers); |
| 3221 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3226 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3222 EXPECT_EQ(407, response->headers->response_code()); | 3227 EXPECT_EQ(407, response->headers->response_code()); |
| 3223 EXPECT_EQ(10, response->headers->GetContentLength()); | 3228 EXPECT_EQ(10, response->headers->GetContentLength()); |
| 3224 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); | 3229 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); |
| 3225 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3230 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 3226 | 3231 |
| 3227 TestCompletionCallback callback2; | 3232 TestCompletionCallback callback2; |
| 3228 | 3233 |
| 3229 // Wrong password (should be "bar"). | 3234 // Wrong password (should be "bar"). |
| 3230 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBaz), | 3235 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBaz), |
| 3231 callback2.callback()); | 3236 callback2.callback()); |
| 3232 EXPECT_EQ(OK, callback2.GetResult(rv)); | 3237 EXPECT_THAT(callback2.GetResult(rv), IsOk()); |
| 3233 | 3238 |
| 3234 response = trans->GetResponseInfo(); | 3239 response = trans->GetResponseInfo(); |
| 3235 ASSERT_TRUE(response); | 3240 ASSERT_TRUE(response); |
| 3236 ASSERT_TRUE(response->headers); | 3241 ASSERT_TRUE(response->headers); |
| 3237 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3242 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3238 EXPECT_EQ(407, response->headers->response_code()); | 3243 EXPECT_EQ(407, response->headers->response_code()); |
| 3239 EXPECT_EQ(10, response->headers->GetContentLength()); | 3244 EXPECT_EQ(10, response->headers->GetContentLength()); |
| 3240 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); | 3245 EXPECT_TRUE(HttpVersion(1, 0) == response->headers->GetHttpVersion()); |
| 3241 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3246 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 3242 | 3247 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3305 }; | 3310 }; |
| 3306 | 3311 |
| 3307 SequencedSocketData data1(data_reads1, arraysize(data_reads1), data_writes1, | 3312 SequencedSocketData data1(data_reads1, arraysize(data_reads1), data_writes1, |
| 3308 arraysize(data_writes1)); | 3313 arraysize(data_writes1)); |
| 3309 data1.set_busy_before_sync_reads(true); | 3314 data1.set_busy_before_sync_reads(true); |
| 3310 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3315 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 3311 | 3316 |
| 3312 TestCompletionCallback callback1; | 3317 TestCompletionCallback callback1; |
| 3313 | 3318 |
| 3314 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3319 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 3315 EXPECT_EQ(OK, callback1.GetResult(rv)); | 3320 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
| 3316 | 3321 |
| 3317 TestNetLogEntry::List entries; | 3322 TestNetLogEntry::List entries; |
| 3318 log.GetEntries(&entries); | 3323 log.GetEntries(&entries); |
| 3319 size_t pos = ExpectLogContainsSomewhere( | 3324 size_t pos = ExpectLogContainsSomewhere( |
| 3320 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3325 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 3321 NetLog::PHASE_NONE); | 3326 NetLog::PHASE_NONE); |
| 3322 ExpectLogContainsSomewhere( | 3327 ExpectLogContainsSomewhere( |
| 3323 entries, pos, | 3328 entries, pos, |
| 3324 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 3329 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 3325 NetLog::PHASE_NONE); | 3330 NetLog::PHASE_NONE); |
| 3326 | 3331 |
| 3327 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3332 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 3328 ASSERT_TRUE(response); | 3333 ASSERT_TRUE(response); |
| 3329 ASSERT_TRUE(response->headers); | 3334 ASSERT_TRUE(response->headers); |
| 3330 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3335 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3331 EXPECT_EQ(407, response->headers->response_code()); | 3336 EXPECT_EQ(407, response->headers->response_code()); |
| 3332 EXPECT_EQ(10, response->headers->GetContentLength()); | 3337 EXPECT_EQ(10, response->headers->GetContentLength()); |
| 3333 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3338 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3334 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3339 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 3335 | 3340 |
| 3336 TestCompletionCallback callback2; | 3341 TestCompletionCallback callback2; |
| 3337 | 3342 |
| 3338 // Wrong password (should be "bar"). | 3343 // Wrong password (should be "bar"). |
| 3339 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBaz), | 3344 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBaz), |
| 3340 callback2.callback()); | 3345 callback2.callback()); |
| 3341 EXPECT_EQ(OK, callback2.GetResult(rv)); | 3346 EXPECT_THAT(callback2.GetResult(rv), IsOk()); |
| 3342 | 3347 |
| 3343 response = trans->GetResponseInfo(); | 3348 response = trans->GetResponseInfo(); |
| 3344 ASSERT_TRUE(response); | 3349 ASSERT_TRUE(response); |
| 3345 ASSERT_TRUE(response->headers); | 3350 ASSERT_TRUE(response->headers); |
| 3346 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3351 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3347 EXPECT_EQ(407, response->headers->response_code()); | 3352 EXPECT_EQ(407, response->headers->response_code()); |
| 3348 EXPECT_EQ(10, response->headers->GetContentLength()); | 3353 EXPECT_EQ(10, response->headers->GetContentLength()); |
| 3349 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3354 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3350 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3355 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 3351 | 3356 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3428 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3433 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 3429 SSLSocketDataProvider ssl(ASYNC, OK); | 3434 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3430 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3435 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3431 | 3436 |
| 3432 TestCompletionCallback callback1; | 3437 TestCompletionCallback callback1; |
| 3433 | 3438 |
| 3434 std::unique_ptr<HttpTransaction> trans( | 3439 std::unique_ptr<HttpTransaction> trans( |
| 3435 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3440 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 3436 | 3441 |
| 3437 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3442 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 3438 EXPECT_EQ(OK, callback1.GetResult(rv)); | 3443 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
| 3439 | 3444 |
| 3440 TestNetLogEntry::List entries; | 3445 TestNetLogEntry::List entries; |
| 3441 log.GetEntries(&entries); | 3446 log.GetEntries(&entries); |
| 3442 size_t pos = ExpectLogContainsSomewhere( | 3447 size_t pos = ExpectLogContainsSomewhere( |
| 3443 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3448 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 3444 NetLog::PHASE_NONE); | 3449 NetLog::PHASE_NONE); |
| 3445 ExpectLogContainsSomewhere( | 3450 ExpectLogContainsSomewhere( |
| 3446 entries, pos, | 3451 entries, pos, |
| 3447 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 3452 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 3448 NetLog::PHASE_NONE); | 3453 NetLog::PHASE_NONE); |
| 3449 | 3454 |
| 3450 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3455 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 3451 ASSERT_TRUE(response); | 3456 ASSERT_TRUE(response); |
| 3452 ASSERT_TRUE(response->headers); | 3457 ASSERT_TRUE(response->headers); |
| 3453 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3458 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3454 EXPECT_EQ(407, response->headers->response_code()); | 3459 EXPECT_EQ(407, response->headers->response_code()); |
| 3455 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3460 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3456 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3461 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 3457 | 3462 |
| 3458 LoadTimingInfo load_timing_info; | 3463 LoadTimingInfo load_timing_info; |
| 3459 // CONNECT requests and responses are handled at the connect job level, so | 3464 // CONNECT requests and responses are handled at the connect job level, so |
| 3460 // the transaction does not yet have a connection. | 3465 // the transaction does not yet have a connection. |
| 3461 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 3466 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 3462 | 3467 |
| 3463 TestCompletionCallback callback2; | 3468 TestCompletionCallback callback2; |
| 3464 | 3469 |
| 3465 rv = | 3470 rv = |
| 3466 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); | 3471 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 3467 EXPECT_EQ(OK, callback2.GetResult(rv)); | 3472 EXPECT_THAT(callback2.GetResult(rv), IsOk()); |
| 3468 | 3473 |
| 3469 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3474 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3470 EXPECT_EQ(200, response->headers->response_code()); | 3475 EXPECT_EQ(200, response->headers->response_code()); |
| 3471 EXPECT_EQ(5, response->headers->GetContentLength()); | 3476 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 3472 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3477 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3473 | 3478 |
| 3474 // The password prompt info should not be set. | 3479 // The password prompt info should not be set. |
| 3475 EXPECT_FALSE(response->auth_challenge); | 3480 EXPECT_FALSE(response->auth_challenge); |
| 3476 | 3481 |
| 3477 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 3482 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3544 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3549 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 3545 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 3550 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 3546 data_writes2, arraysize(data_writes2)); | 3551 data_writes2, arraysize(data_writes2)); |
| 3547 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3552 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 3548 SSLSocketDataProvider ssl(ASYNC, OK); | 3553 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3549 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3554 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3550 | 3555 |
| 3551 TestCompletionCallback callback; | 3556 TestCompletionCallback callback; |
| 3552 | 3557 |
| 3553 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3558 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 3554 EXPECT_EQ(OK, callback.GetResult(rv)); | 3559 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 3555 | 3560 |
| 3556 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3561 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 3557 ASSERT_TRUE(response); | 3562 ASSERT_TRUE(response); |
| 3558 ASSERT_TRUE(response->headers); | 3563 ASSERT_TRUE(response->headers); |
| 3559 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3564 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3560 EXPECT_EQ(407, response->headers->response_code()); | 3565 EXPECT_EQ(407, response->headers->response_code()); |
| 3561 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3566 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 3562 | 3567 |
| 3563 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback.callback()); | 3568 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback.callback()); |
| 3564 EXPECT_EQ(OK, callback.GetResult(rv)); | 3569 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 3565 | 3570 |
| 3566 response = trans->GetResponseInfo(); | 3571 response = trans->GetResponseInfo(); |
| 3567 ASSERT_TRUE(response); | 3572 ASSERT_TRUE(response); |
| 3568 ASSERT_TRUE(response->headers); | 3573 ASSERT_TRUE(response->headers); |
| 3569 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3574 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3570 EXPECT_EQ(200, response->headers->response_code()); | 3575 EXPECT_EQ(200, response->headers->response_code()); |
| 3571 std::string body; | 3576 std::string body; |
| 3572 EXPECT_EQ(OK, ReadTransaction(trans.get(), &body)); | 3577 EXPECT_THAT(ReadTransaction(trans.get(), &body), IsOk()); |
| 3573 EXPECT_EQ("hello", body); | 3578 EXPECT_EQ("hello", body); |
| 3574 } | 3579 } |
| 3575 | 3580 |
| 3576 // Test that we don't read the response body when we fail to establish a tunnel, | 3581 // Test that we don't read the response body when we fail to establish a tunnel, |
| 3577 // even if the user cancels the proxy's auth attempt. | 3582 // even if the user cancels the proxy's auth attempt. |
| 3578 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyCancelTunnel) { | 3583 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyCancelTunnel) { |
| 3579 HttpRequestInfo request; | 3584 HttpRequestInfo request; |
| 3580 request.method = "GET"; | 3585 request.method = "GET"; |
| 3581 request.url = GURL("https://www.example.org/"); | 3586 request.url = GURL("https://www.example.org/"); |
| 3582 request.load_flags = 0; | 3587 request.load_flags = 0; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 3605 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | 3610 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
| 3606 }; | 3611 }; |
| 3607 | 3612 |
| 3608 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 3613 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 3609 data_writes, arraysize(data_writes)); | 3614 data_writes, arraysize(data_writes)); |
| 3610 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3615 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 3611 | 3616 |
| 3612 TestCompletionCallback callback; | 3617 TestCompletionCallback callback; |
| 3613 | 3618 |
| 3614 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3619 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 3615 EXPECT_EQ(ERR_IO_PENDING, rv); | 3620 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 3616 | 3621 |
| 3617 rv = callback.WaitForResult(); | 3622 rv = callback.WaitForResult(); |
| 3618 EXPECT_EQ(OK, rv); | 3623 EXPECT_THAT(rv, IsOk()); |
| 3619 | 3624 |
| 3620 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3625 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 3621 ASSERT_TRUE(response); | 3626 ASSERT_TRUE(response); |
| 3622 ASSERT_TRUE(response->headers); | 3627 ASSERT_TRUE(response->headers); |
| 3623 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3628 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3624 EXPECT_EQ(407, response->headers->response_code()); | 3629 EXPECT_EQ(407, response->headers->response_code()); |
| 3625 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3630 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3626 | 3631 |
| 3627 std::string response_data; | 3632 std::string response_data; |
| 3628 rv = ReadTransaction(trans.get(), &response_data); | 3633 rv = ReadTransaction(trans.get(), &response_data); |
| 3629 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 3634 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
| 3630 | 3635 |
| 3631 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. | 3636 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. |
| 3632 session->CloseAllConnections(); | 3637 session->CloseAllConnections(); |
| 3633 } | 3638 } |
| 3634 | 3639 |
| 3635 // Test that we don't pass extraneous headers from the proxy's response to the | 3640 // Test that we don't pass extraneous headers from the proxy's response to the |
| 3636 // caller when the proxy responds to CONNECT with 407. | 3641 // caller when the proxy responds to CONNECT with 407. |
| 3637 TEST_P(HttpNetworkTransactionTest, SanitizeProxyAuthHeaders) { | 3642 TEST_P(HttpNetworkTransactionTest, SanitizeProxyAuthHeaders) { |
| 3638 HttpRequestInfo request; | 3643 HttpRequestInfo request; |
| 3639 request.method = "GET"; | 3644 request.method = "GET"; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 3665 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | 3670 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
| 3666 }; | 3671 }; |
| 3667 | 3672 |
| 3668 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 3673 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 3669 arraysize(data_writes)); | 3674 arraysize(data_writes)); |
| 3670 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3675 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 3671 | 3676 |
| 3672 TestCompletionCallback callback; | 3677 TestCompletionCallback callback; |
| 3673 | 3678 |
| 3674 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3679 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 3675 EXPECT_EQ(ERR_IO_PENDING, rv); | 3680 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 3676 | 3681 |
| 3677 rv = callback.WaitForResult(); | 3682 rv = callback.WaitForResult(); |
| 3678 EXPECT_EQ(OK, rv); | 3683 EXPECT_THAT(rv, IsOk()); |
| 3679 | 3684 |
| 3680 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3685 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 3681 ASSERT_TRUE(response); | 3686 ASSERT_TRUE(response); |
| 3682 ASSERT_TRUE(response->headers); | 3687 ASSERT_TRUE(response->headers); |
| 3683 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3688 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3684 EXPECT_EQ(407, response->headers->response_code()); | 3689 EXPECT_EQ(407, response->headers->response_code()); |
| 3685 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3690 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3686 EXPECT_FALSE(response->headers->HasHeader("X-Foo")); | 3691 EXPECT_FALSE(response->headers->HasHeader("X-Foo")); |
| 3687 EXPECT_FALSE(response->headers->HasHeader("Set-Cookie")); | 3692 EXPECT_FALSE(response->headers->HasHeader("Set-Cookie")); |
| 3688 | 3693 |
| 3689 std::string response_data; | 3694 std::string response_data; |
| 3690 rv = ReadTransaction(trans.get(), &response_data); | 3695 rv = ReadTransaction(trans.get(), &response_data); |
| 3691 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 3696 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
| 3692 | 3697 |
| 3693 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. | 3698 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. |
| 3694 session->CloseAllConnections(); | 3699 session->CloseAllConnections(); |
| 3695 } | 3700 } |
| 3696 | 3701 |
| 3697 // Test when a server (non-proxy) returns a 407 (proxy-authenticate). | 3702 // Test when a server (non-proxy) returns a 407 (proxy-authenticate). |
| 3698 // The request should fail with ERR_UNEXPECTED_PROXY_AUTH. | 3703 // The request should fail with ERR_UNEXPECTED_PROXY_AUTH. |
| 3699 TEST_P(HttpNetworkTransactionTest, UnexpectedProxyAuth) { | 3704 TEST_P(HttpNetworkTransactionTest, UnexpectedProxyAuth) { |
| 3700 HttpRequestInfo request; | 3705 HttpRequestInfo request; |
| 3701 request.method = "GET"; | 3706 request.method = "GET"; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3722 MockRead(SYNCHRONOUS, ERR_FAILED), | 3727 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 3723 }; | 3728 }; |
| 3724 | 3729 |
| 3725 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 3730 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 3726 data_writes1, arraysize(data_writes1)); | 3731 data_writes1, arraysize(data_writes1)); |
| 3727 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3732 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 3728 | 3733 |
| 3729 TestCompletionCallback callback; | 3734 TestCompletionCallback callback; |
| 3730 | 3735 |
| 3731 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3736 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 3732 EXPECT_EQ(ERR_IO_PENDING, rv); | 3737 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 3733 | 3738 |
| 3734 rv = callback.WaitForResult(); | 3739 rv = callback.WaitForResult(); |
| 3735 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); | 3740 EXPECT_THAT(rv, IsError(ERR_UNEXPECTED_PROXY_AUTH)); |
| 3736 } | 3741 } |
| 3737 | 3742 |
| 3738 // Tests when an HTTPS server (non-proxy) returns a 407 (proxy-authentication) | 3743 // Tests when an HTTPS server (non-proxy) returns a 407 (proxy-authentication) |
| 3739 // through a non-authenticating proxy. The request should fail with | 3744 // through a non-authenticating proxy. The request should fail with |
| 3740 // ERR_UNEXPECTED_PROXY_AUTH. | 3745 // ERR_UNEXPECTED_PROXY_AUTH. |
| 3741 // Note that it is impossible to detect if an HTTP server returns a 407 through | 3746 // Note that it is impossible to detect if an HTTP server returns a 407 through |
| 3742 // a non-authenticating proxy - there is nothing to indicate whether the | 3747 // a non-authenticating proxy - there is nothing to indicate whether the |
| 3743 // response came from the proxy or the server, so it is treated as if the proxy | 3748 // response came from the proxy or the server, so it is treated as if the proxy |
| 3744 // issued the challenge. | 3749 // issued the challenge. |
| 3745 TEST_P(HttpNetworkTransactionTest, | 3750 TEST_P(HttpNetworkTransactionTest, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3778 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3783 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 3779 SSLSocketDataProvider ssl(ASYNC, OK); | 3784 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3780 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3785 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3781 | 3786 |
| 3782 TestCompletionCallback callback1; | 3787 TestCompletionCallback callback1; |
| 3783 | 3788 |
| 3784 std::unique_ptr<HttpTransaction> trans( | 3789 std::unique_ptr<HttpTransaction> trans( |
| 3785 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3790 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 3786 | 3791 |
| 3787 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3792 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 3788 EXPECT_EQ(ERR_IO_PENDING, rv); | 3793 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 3789 | 3794 |
| 3790 rv = callback1.WaitForResult(); | 3795 rv = callback1.WaitForResult(); |
| 3791 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); | 3796 EXPECT_THAT(rv, IsError(ERR_UNEXPECTED_PROXY_AUTH)); |
| 3792 TestNetLogEntry::List entries; | 3797 TestNetLogEntry::List entries; |
| 3793 log.GetEntries(&entries); | 3798 log.GetEntries(&entries); |
| 3794 size_t pos = ExpectLogContainsSomewhere( | 3799 size_t pos = ExpectLogContainsSomewhere( |
| 3795 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3800 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 3796 NetLog::PHASE_NONE); | 3801 NetLog::PHASE_NONE); |
| 3797 ExpectLogContainsSomewhere( | 3802 ExpectLogContainsSomewhere( |
| 3798 entries, pos, | 3803 entries, pos, |
| 3799 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 3804 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 3800 NetLog::PHASE_NONE); | 3805 NetLog::PHASE_NONE); |
| 3801 } | 3806 } |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3873 data_writes2, arraysize(data_writes2)); | 3878 data_writes2, arraysize(data_writes2)); |
| 3874 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3879 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 3875 SSLSocketDataProvider ssl(ASYNC, OK); | 3880 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3876 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3881 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3877 | 3882 |
| 3878 std::unique_ptr<HttpTransaction> trans( | 3883 std::unique_ptr<HttpTransaction> trans( |
| 3879 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3884 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 3880 | 3885 |
| 3881 TestCompletionCallback callback; | 3886 TestCompletionCallback callback; |
| 3882 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3887 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 3883 EXPECT_EQ(OK, callback.GetResult(rv)); | 3888 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 3884 | 3889 |
| 3885 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3890 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 3886 ASSERT_TRUE(response); | 3891 ASSERT_TRUE(response); |
| 3887 ASSERT_TRUE(response->headers); | 3892 ASSERT_TRUE(response->headers); |
| 3888 EXPECT_FALSE(response->headers->IsKeepAlive()); | 3893 EXPECT_FALSE(response->headers->IsKeepAlive()); |
| 3889 EXPECT_EQ(407, response->headers->response_code()); | 3894 EXPECT_EQ(407, response->headers->response_code()); |
| 3890 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3895 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3891 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 3896 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 3892 EXPECT_FALSE(response->auth_challenge); | 3897 EXPECT_FALSE(response->auth_challenge); |
| 3893 | 3898 |
| 3894 LoadTimingInfo load_timing_info; | 3899 LoadTimingInfo load_timing_info; |
| 3895 // CONNECT requests and responses are handled at the connect job level, so | 3900 // CONNECT requests and responses are handled at the connect job level, so |
| 3896 // the transaction does not yet have a connection. | 3901 // the transaction does not yet have a connection. |
| 3897 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 3902 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 3898 | 3903 |
| 3899 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 3904 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
| 3900 EXPECT_EQ(OK, callback.GetResult(rv)); | 3905 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 3901 response = trans->GetResponseInfo(); | 3906 response = trans->GetResponseInfo(); |
| 3902 ASSERT_TRUE(response); | 3907 ASSERT_TRUE(response); |
| 3903 ASSERT_TRUE(response->headers); | 3908 ASSERT_TRUE(response->headers); |
| 3904 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3909 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3905 EXPECT_EQ(200, response->headers->response_code()); | 3910 EXPECT_EQ(200, response->headers->response_code()); |
| 3906 EXPECT_EQ(5, response->headers->GetContentLength()); | 3911 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 3907 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3912 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3908 | 3913 |
| 3909 // The password prompt info should not be set. | 3914 // The password prompt info should not be set. |
| 3910 EXPECT_FALSE(response->auth_challenge); | 3915 EXPECT_FALSE(response->auth_challenge); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3993 data_writes2, arraysize(data_writes2)); | 3998 data_writes2, arraysize(data_writes2)); |
| 3994 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3999 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 3995 SSLSocketDataProvider ssl(ASYNC, OK); | 4000 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3996 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4001 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3997 | 4002 |
| 3998 std::unique_ptr<HttpTransaction> trans( | 4003 std::unique_ptr<HttpTransaction> trans( |
| 3999 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4004 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4000 | 4005 |
| 4001 TestCompletionCallback callback; | 4006 TestCompletionCallback callback; |
| 4002 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4007 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 4003 EXPECT_EQ(OK, callback.GetResult(rv)); | 4008 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 4004 | 4009 |
| 4005 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4010 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 4006 ASSERT_TRUE(response); | 4011 ASSERT_TRUE(response); |
| 4007 ASSERT_TRUE(response->headers); | 4012 ASSERT_TRUE(response->headers); |
| 4008 EXPECT_TRUE(response->headers->IsKeepAlive()); | 4013 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 4009 EXPECT_EQ(407, response->headers->response_code()); | 4014 EXPECT_EQ(407, response->headers->response_code()); |
| 4010 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4015 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 4011 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 4016 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 4012 EXPECT_FALSE(response->auth_challenge); | 4017 EXPECT_FALSE(response->auth_challenge); |
| 4013 | 4018 |
| 4014 LoadTimingInfo load_timing_info; | 4019 LoadTimingInfo load_timing_info; |
| 4015 // CONNECT requests and responses are handled at the connect job level, so | 4020 // CONNECT requests and responses are handled at the connect job level, so |
| 4016 // the transaction does not yet have a connection. | 4021 // the transaction does not yet have a connection. |
| 4017 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 4022 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 4018 | 4023 |
| 4019 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 4024 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
| 4020 EXPECT_EQ(OK, callback.GetResult(rv)); | 4025 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 4021 | 4026 |
| 4022 response = trans->GetResponseInfo(); | 4027 response = trans->GetResponseInfo(); |
| 4023 ASSERT_TRUE(response); | 4028 ASSERT_TRUE(response); |
| 4024 ASSERT_TRUE(response->headers); | 4029 ASSERT_TRUE(response->headers); |
| 4025 EXPECT_TRUE(response->headers->IsKeepAlive()); | 4030 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 4026 EXPECT_EQ(200, response->headers->response_code()); | 4031 EXPECT_EQ(200, response->headers->response_code()); |
| 4027 EXPECT_EQ(5, response->headers->GetContentLength()); | 4032 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 4028 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4033 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 4029 | 4034 |
| 4030 // The password prompt info should not be set. | 4035 // The password prompt info should not be set. |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4108 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4113 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 4109 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4114 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 4110 data_writes2, arraysize(data_writes2)); | 4115 data_writes2, arraysize(data_writes2)); |
| 4111 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4116 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 4112 | 4117 |
| 4113 std::unique_ptr<HttpTransaction> trans( | 4118 std::unique_ptr<HttpTransaction> trans( |
| 4114 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4119 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4115 | 4120 |
| 4116 TestCompletionCallback callback; | 4121 TestCompletionCallback callback; |
| 4117 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4122 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 4118 EXPECT_EQ(OK, callback.GetResult(rv)); | 4123 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 4119 | 4124 |
| 4120 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4125 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 4121 ASSERT_TRUE(response); | 4126 ASSERT_TRUE(response); |
| 4122 ASSERT_TRUE(response->headers); | 4127 ASSERT_TRUE(response->headers); |
| 4123 EXPECT_TRUE(response->headers->IsKeepAlive()); | 4128 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 4124 EXPECT_EQ(407, response->headers->response_code()); | 4129 EXPECT_EQ(407, response->headers->response_code()); |
| 4125 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4130 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 4126 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 4131 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 4127 EXPECT_FALSE(response->auth_challenge); | 4132 EXPECT_FALSE(response->auth_challenge); |
| 4128 | 4133 |
| 4129 LoadTimingInfo load_timing_info; | 4134 LoadTimingInfo load_timing_info; |
| 4130 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 4135 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 4131 | 4136 |
| 4132 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 4137 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
| 4133 EXPECT_EQ(ERR_EMPTY_RESPONSE, callback.GetResult(rv)); | 4138 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_EMPTY_RESPONSE)); |
| 4134 | 4139 |
| 4135 trans.reset(); | 4140 trans.reset(); |
| 4136 session->CloseAllConnections(); | 4141 session->CloseAllConnections(); |
| 4137 } | 4142 } |
| 4138 | 4143 |
| 4139 // Test a proxy auth scheme that allows default credentials and a proxy server | 4144 // Test a proxy auth scheme that allows default credentials and a proxy server |
| 4140 // that hangs up when credentials are initially sent, and sends a challenge | 4145 // that hangs up when credentials are initially sent, and sends a challenge |
| 4141 // again they are retried. | 4146 // again they are retried. |
| 4142 TEST_P(HttpNetworkTransactionTest, | 4147 TEST_P(HttpNetworkTransactionTest, |
| 4143 AuthAllowsDefaultCredentialsTunnelServerChallengesTwice) { | 4148 AuthAllowsDefaultCredentialsTunnelServerChallengesTwice) { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4207 data_writes2, arraysize(data_writes2)); | 4212 data_writes2, arraysize(data_writes2)); |
| 4208 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4213 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 4209 SSLSocketDataProvider ssl(ASYNC, OK); | 4214 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4210 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4215 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4211 | 4216 |
| 4212 std::unique_ptr<HttpTransaction> trans( | 4217 std::unique_ptr<HttpTransaction> trans( |
| 4213 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4218 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4214 | 4219 |
| 4215 TestCompletionCallback callback; | 4220 TestCompletionCallback callback; |
| 4216 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4221 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 4217 EXPECT_EQ(OK, callback.GetResult(rv)); | 4222 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 4218 | 4223 |
| 4219 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4224 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 4220 ASSERT_TRUE(response); | 4225 ASSERT_TRUE(response); |
| 4221 ASSERT_TRUE(response->headers); | 4226 ASSERT_TRUE(response->headers); |
| 4222 EXPECT_EQ(407, response->headers->response_code()); | 4227 EXPECT_EQ(407, response->headers->response_code()); |
| 4223 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4228 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 4224 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 4229 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 4225 EXPECT_FALSE(response->auth_challenge); | 4230 EXPECT_FALSE(response->auth_challenge); |
| 4226 | 4231 |
| 4227 LoadTimingInfo load_timing_info; | 4232 LoadTimingInfo load_timing_info; |
| 4228 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 4233 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 4229 | 4234 |
| 4230 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 4235 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
| 4231 EXPECT_EQ(OK, callback.GetResult(rv)); | 4236 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 4232 response = trans->GetResponseInfo(); | 4237 response = trans->GetResponseInfo(); |
| 4233 ASSERT_TRUE(response); | 4238 ASSERT_TRUE(response); |
| 4234 ASSERT_TRUE(response->headers); | 4239 ASSERT_TRUE(response->headers); |
| 4235 EXPECT_EQ(407, response->headers->response_code()); | 4240 EXPECT_EQ(407, response->headers->response_code()); |
| 4236 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 4241 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 4237 EXPECT_TRUE(response->auth_challenge); | 4242 EXPECT_TRUE(response->auth_challenge); |
| 4238 | 4243 |
| 4239 trans.reset(); | 4244 trans.reset(); |
| 4240 session->CloseAllConnections(); | 4245 session->CloseAllConnections(); |
| 4241 } | 4246 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4289 data_writes1, arraysize(data_writes1)); | 4294 data_writes1, arraysize(data_writes1)); |
| 4290 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4295 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 4291 SSLSocketDataProvider ssl(ASYNC, OK); | 4296 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4292 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4297 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4293 | 4298 |
| 4294 TestCompletionCallback callback1; | 4299 TestCompletionCallback callback1; |
| 4295 std::unique_ptr<HttpTransaction> trans1( | 4300 std::unique_ptr<HttpTransaction> trans1( |
| 4296 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4301 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4297 | 4302 |
| 4298 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); | 4303 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); |
| 4299 EXPECT_EQ(ERR_IO_PENDING, rv); | 4304 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4300 | 4305 |
| 4301 rv = callback1.WaitForResult(); | 4306 rv = callback1.WaitForResult(); |
| 4302 EXPECT_EQ(OK, rv); | 4307 EXPECT_THAT(rv, IsOk()); |
| 4303 | 4308 |
| 4304 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 4309 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
| 4305 ASSERT_TRUE(response1); | 4310 ASSERT_TRUE(response1); |
| 4306 ASSERT_TRUE(response1->headers); | 4311 ASSERT_TRUE(response1->headers); |
| 4307 EXPECT_EQ(1, response1->headers->GetContentLength()); | 4312 EXPECT_EQ(1, response1->headers->GetContentLength()); |
| 4308 | 4313 |
| 4309 LoadTimingInfo load_timing_info1; | 4314 LoadTimingInfo load_timing_info1; |
| 4310 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); | 4315 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); |
| 4311 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_SSL_TIMES); | 4316 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_SSL_TIMES); |
| 4312 | 4317 |
| 4313 trans1.reset(); | 4318 trans1.reset(); |
| 4314 | 4319 |
| 4315 TestCompletionCallback callback2; | 4320 TestCompletionCallback callback2; |
| 4316 std::unique_ptr<HttpTransaction> trans2( | 4321 std::unique_ptr<HttpTransaction> trans2( |
| 4317 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4322 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4318 | 4323 |
| 4319 rv = trans2->Start(&request2, callback2.callback(), log.bound()); | 4324 rv = trans2->Start(&request2, callback2.callback(), log.bound()); |
| 4320 EXPECT_EQ(ERR_IO_PENDING, rv); | 4325 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4321 | 4326 |
| 4322 rv = callback2.WaitForResult(); | 4327 rv = callback2.WaitForResult(); |
| 4323 EXPECT_EQ(OK, rv); | 4328 EXPECT_THAT(rv, IsOk()); |
| 4324 | 4329 |
| 4325 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 4330 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
| 4326 ASSERT_TRUE(response2); | 4331 ASSERT_TRUE(response2); |
| 4327 ASSERT_TRUE(response2->headers); | 4332 ASSERT_TRUE(response2->headers); |
| 4328 EXPECT_EQ(2, response2->headers->GetContentLength()); | 4333 EXPECT_EQ(2, response2->headers->GetContentLength()); |
| 4329 | 4334 |
| 4330 LoadTimingInfo load_timing_info2; | 4335 LoadTimingInfo load_timing_info2; |
| 4331 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 4336 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
| 4332 TestLoadTimingReused(load_timing_info2); | 4337 TestLoadTimingReused(load_timing_info2); |
| 4333 | 4338 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4387 data_writes1, arraysize(data_writes1)); | 4392 data_writes1, arraysize(data_writes1)); |
| 4388 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4393 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 4389 SSLSocketDataProvider ssl(ASYNC, OK); | 4394 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4390 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4395 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4391 | 4396 |
| 4392 TestCompletionCallback callback1; | 4397 TestCompletionCallback callback1; |
| 4393 std::unique_ptr<HttpTransaction> trans1( | 4398 std::unique_ptr<HttpTransaction> trans1( |
| 4394 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4399 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4395 | 4400 |
| 4396 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); | 4401 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); |
| 4397 EXPECT_EQ(ERR_IO_PENDING, rv); | 4402 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4398 | 4403 |
| 4399 rv = callback1.WaitForResult(); | 4404 rv = callback1.WaitForResult(); |
| 4400 EXPECT_EQ(OK, rv); | 4405 EXPECT_THAT(rv, IsOk()); |
| 4401 | 4406 |
| 4402 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 4407 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
| 4403 ASSERT_TRUE(response1); | 4408 ASSERT_TRUE(response1); |
| 4404 ASSERT_TRUE(response1->headers); | 4409 ASSERT_TRUE(response1->headers); |
| 4405 EXPECT_EQ(1, response1->headers->GetContentLength()); | 4410 EXPECT_EQ(1, response1->headers->GetContentLength()); |
| 4406 | 4411 |
| 4407 LoadTimingInfo load_timing_info1; | 4412 LoadTimingInfo load_timing_info1; |
| 4408 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); | 4413 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); |
| 4409 TestLoadTimingNotReusedWithPac(load_timing_info1, | 4414 TestLoadTimingNotReusedWithPac(load_timing_info1, |
| 4410 CONNECT_TIMING_HAS_SSL_TIMES); | 4415 CONNECT_TIMING_HAS_SSL_TIMES); |
| 4411 | 4416 |
| 4412 trans1.reset(); | 4417 trans1.reset(); |
| 4413 | 4418 |
| 4414 TestCompletionCallback callback2; | 4419 TestCompletionCallback callback2; |
| 4415 std::unique_ptr<HttpTransaction> trans2( | 4420 std::unique_ptr<HttpTransaction> trans2( |
| 4416 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4421 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4417 | 4422 |
| 4418 rv = trans2->Start(&request2, callback2.callback(), log.bound()); | 4423 rv = trans2->Start(&request2, callback2.callback(), log.bound()); |
| 4419 EXPECT_EQ(ERR_IO_PENDING, rv); | 4424 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4420 | 4425 |
| 4421 rv = callback2.WaitForResult(); | 4426 rv = callback2.WaitForResult(); |
| 4422 EXPECT_EQ(OK, rv); | 4427 EXPECT_THAT(rv, IsOk()); |
| 4423 | 4428 |
| 4424 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 4429 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
| 4425 ASSERT_TRUE(response2); | 4430 ASSERT_TRUE(response2); |
| 4426 ASSERT_TRUE(response2->headers); | 4431 ASSERT_TRUE(response2->headers); |
| 4427 EXPECT_EQ(2, response2->headers->GetContentLength()); | 4432 EXPECT_EQ(2, response2->headers->GetContentLength()); |
| 4428 | 4433 |
| 4429 LoadTimingInfo load_timing_info2; | 4434 LoadTimingInfo load_timing_info2; |
| 4430 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 4435 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
| 4431 TestLoadTimingReusedWithPac(load_timing_info2); | 4436 TestLoadTimingReusedWithPac(load_timing_info2); |
| 4432 | 4437 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4468 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4473 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 4469 SSLSocketDataProvider ssl(ASYNC, OK); | 4474 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4470 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4475 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4471 | 4476 |
| 4472 TestCompletionCallback callback1; | 4477 TestCompletionCallback callback1; |
| 4473 | 4478 |
| 4474 std::unique_ptr<HttpTransaction> trans( | 4479 std::unique_ptr<HttpTransaction> trans( |
| 4475 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4480 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4476 | 4481 |
| 4477 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4482 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 4478 EXPECT_EQ(ERR_IO_PENDING, rv); | 4483 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4479 | 4484 |
| 4480 rv = callback1.WaitForResult(); | 4485 rv = callback1.WaitForResult(); |
| 4481 EXPECT_EQ(OK, rv); | 4486 EXPECT_THAT(rv, IsOk()); |
| 4482 | 4487 |
| 4483 LoadTimingInfo load_timing_info; | 4488 LoadTimingInfo load_timing_info; |
| 4484 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 4489 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 4485 TestLoadTimingNotReused(load_timing_info, | 4490 TestLoadTimingNotReused(load_timing_info, |
| 4486 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 4491 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 4487 | 4492 |
| 4488 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4493 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 4489 ASSERT_TRUE(response); | 4494 ASSERT_TRUE(response); |
| 4490 | 4495 |
| 4491 EXPECT_TRUE(response->headers->IsKeepAlive()); | 4496 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4530 SSLSocketDataProvider ssl(ASYNC, OK); | 4535 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4531 ssl.SetNextProto(GetProtocol()); | 4536 ssl.SetNextProto(GetProtocol()); |
| 4532 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4537 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4533 | 4538 |
| 4534 TestCompletionCallback callback1; | 4539 TestCompletionCallback callback1; |
| 4535 | 4540 |
| 4536 std::unique_ptr<HttpTransaction> trans( | 4541 std::unique_ptr<HttpTransaction> trans( |
| 4537 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4542 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4538 | 4543 |
| 4539 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4544 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 4540 EXPECT_EQ(ERR_IO_PENDING, rv); | 4545 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4541 | 4546 |
| 4542 rv = callback1.WaitForResult(); | 4547 rv = callback1.WaitForResult(); |
| 4543 EXPECT_EQ(OK, rv); | 4548 EXPECT_THAT(rv, IsOk()); |
| 4544 | 4549 |
| 4545 LoadTimingInfo load_timing_info; | 4550 LoadTimingInfo load_timing_info; |
| 4546 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 4551 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 4547 TestLoadTimingNotReused(load_timing_info, | 4552 TestLoadTimingNotReused(load_timing_info, |
| 4548 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 4553 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 4549 | 4554 |
| 4550 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4555 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 4551 ASSERT_TRUE(response); | 4556 ASSERT_TRUE(response); |
| 4552 ASSERT_TRUE(response->headers); | 4557 ASSERT_TRUE(response->headers); |
| 4553 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 4558 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 4554 | 4559 |
| 4555 std::string response_data; | 4560 std::string response_data; |
| 4556 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 4561 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 4557 EXPECT_EQ(kUploadData, response_data); | 4562 EXPECT_EQ(kUploadData, response_data); |
| 4558 } | 4563 } |
| 4559 | 4564 |
| 4560 // Verifies that a session which races and wins against the owning transaction | 4565 // Verifies that a session which races and wins against the owning transaction |
| 4561 // (completing prior to host resolution), doesn't fail the transaction. | 4566 // (completing prior to host resolution), doesn't fail the transaction. |
| 4562 // Regression test for crbug.com/334413. | 4567 // Regression test for crbug.com/334413. |
| 4563 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithSessionRace) { | 4568 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithSessionRace) { |
| 4564 HttpRequestInfo request; | 4569 HttpRequestInfo request; |
| 4565 request.method = "GET"; | 4570 request.method = "GET"; |
| 4566 request.url = GURL("http://www.example.org/"); | 4571 request.url = GURL("http://www.example.org/"); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 4596 TestCompletionCallback callback1; | 4601 TestCompletionCallback callback1; |
| 4597 | 4602 |
| 4598 std::unique_ptr<HttpTransaction> trans( | 4603 std::unique_ptr<HttpTransaction> trans( |
| 4599 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4604 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4600 | 4605 |
| 4601 // Stall the hostname resolution begun by the transaction. | 4606 // Stall the hostname resolution begun by the transaction. |
| 4602 session_deps_.host_resolver->set_synchronous_mode(false); | 4607 session_deps_.host_resolver->set_synchronous_mode(false); |
| 4603 session_deps_.host_resolver->set_ondemand_mode(true); | 4608 session_deps_.host_resolver->set_ondemand_mode(true); |
| 4604 | 4609 |
| 4605 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4610 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 4606 EXPECT_EQ(ERR_IO_PENDING, rv); | 4611 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4607 | 4612 |
| 4608 // Race a session to the proxy, which completes first. | 4613 // Race a session to the proxy, which completes first. |
| 4609 session_deps_.host_resolver->set_ondemand_mode(false); | 4614 session_deps_.host_resolver->set_ondemand_mode(false); |
| 4610 SpdySessionKey key( | 4615 SpdySessionKey key( |
| 4611 HostPortPair("proxy", 70), ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 4616 HostPortPair("proxy", 70), ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
| 4612 base::WeakPtr<SpdySession> spdy_session = | 4617 base::WeakPtr<SpdySession> spdy_session = |
| 4613 CreateSecureSpdySession(session.get(), key, log.bound()); | 4618 CreateSecureSpdySession(session.get(), key, log.bound()); |
| 4614 | 4619 |
| 4615 // Unstall the resolution begun by the transaction. | 4620 // Unstall the resolution begun by the transaction. |
| 4616 session_deps_.host_resolver->set_ondemand_mode(true); | 4621 session_deps_.host_resolver->set_ondemand_mode(true); |
| 4617 session_deps_.host_resolver->ResolveAllPending(); | 4622 session_deps_.host_resolver->ResolveAllPending(); |
| 4618 | 4623 |
| 4619 EXPECT_FALSE(callback1.have_result()); | 4624 EXPECT_FALSE(callback1.have_result()); |
| 4620 rv = callback1.WaitForResult(); | 4625 rv = callback1.WaitForResult(); |
| 4621 EXPECT_EQ(OK, rv); | 4626 EXPECT_THAT(rv, IsOk()); |
| 4622 | 4627 |
| 4623 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4628 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 4624 ASSERT_TRUE(response); | 4629 ASSERT_TRUE(response); |
| 4625 ASSERT_TRUE(response->headers); | 4630 ASSERT_TRUE(response->headers); |
| 4626 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 4631 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 4627 | 4632 |
| 4628 std::string response_data; | 4633 std::string response_data; |
| 4629 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 4634 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 4630 EXPECT_EQ(kUploadData, response_data); | 4635 EXPECT_EQ(kUploadData, response_data); |
| 4631 } | 4636 } |
| 4632 | 4637 |
| 4633 // Test a SPDY get through an HTTPS Proxy. | 4638 // Test a SPDY get through an HTTPS Proxy. |
| 4634 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithProxyAuth) { | 4639 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithProxyAuth) { |
| 4635 HttpRequestInfo request; | 4640 HttpRequestInfo request; |
| 4636 request.method = "GET"; | 4641 request.method = "GET"; |
| 4637 request.url = GURL("http://www.example.org/"); | 4642 request.url = GURL("http://www.example.org/"); |
| 4638 request.load_flags = 0; | 4643 request.load_flags = 0; |
| 4639 | 4644 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4691 SSLSocketDataProvider ssl(ASYNC, OK); | 4696 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4692 ssl.SetNextProto(GetProtocol()); | 4697 ssl.SetNextProto(GetProtocol()); |
| 4693 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4698 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4694 | 4699 |
| 4695 TestCompletionCallback callback1; | 4700 TestCompletionCallback callback1; |
| 4696 | 4701 |
| 4697 std::unique_ptr<HttpTransaction> trans( | 4702 std::unique_ptr<HttpTransaction> trans( |
| 4698 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4703 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4699 | 4704 |
| 4700 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4705 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 4701 EXPECT_EQ(ERR_IO_PENDING, rv); | 4706 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4702 | 4707 |
| 4703 rv = callback1.WaitForResult(); | 4708 rv = callback1.WaitForResult(); |
| 4704 EXPECT_EQ(OK, rv); | 4709 EXPECT_THAT(rv, IsOk()); |
| 4705 | 4710 |
| 4706 const HttpResponseInfo* const response = trans->GetResponseInfo(); | 4711 const HttpResponseInfo* const response = trans->GetResponseInfo(); |
| 4707 | 4712 |
| 4708 ASSERT_TRUE(response); | 4713 ASSERT_TRUE(response); |
| 4709 ASSERT_TRUE(response->headers); | 4714 ASSERT_TRUE(response->headers); |
| 4710 EXPECT_EQ(407, response->headers->response_code()); | 4715 EXPECT_EQ(407, response->headers->response_code()); |
| 4711 EXPECT_TRUE(response->was_fetched_via_spdy); | 4716 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 4712 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); | 4717 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); |
| 4713 | 4718 |
| 4714 TestCompletionCallback callback2; | 4719 TestCompletionCallback callback2; |
| 4715 | 4720 |
| 4716 rv = trans->RestartWithAuth( | 4721 rv = trans->RestartWithAuth( |
| 4717 AuthCredentials(kFoo, kBar), callback2.callback()); | 4722 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 4718 EXPECT_EQ(ERR_IO_PENDING, rv); | 4723 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4719 | 4724 |
| 4720 rv = callback2.WaitForResult(); | 4725 rv = callback2.WaitForResult(); |
| 4721 EXPECT_EQ(OK, rv); | 4726 EXPECT_THAT(rv, IsOk()); |
| 4722 | 4727 |
| 4723 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); | 4728 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); |
| 4724 | 4729 |
| 4725 ASSERT_TRUE(response_restart); | 4730 ASSERT_TRUE(response_restart); |
| 4726 ASSERT_TRUE(response_restart->headers); | 4731 ASSERT_TRUE(response_restart->headers); |
| 4727 EXPECT_EQ(200, response_restart->headers->response_code()); | 4732 EXPECT_EQ(200, response_restart->headers->response_code()); |
| 4728 // The password prompt info should not be set. | 4733 // The password prompt info should not be set. |
| 4729 EXPECT_FALSE(response_restart->auth_challenge); | 4734 EXPECT_FALSE(response_restart->auth_challenge); |
| 4730 } | 4735 } |
| 4731 | 4736 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4787 | 4792 |
| 4788 SSLSocketDataProvider ssl(ASYNC, OK); | 4793 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4789 ssl.SetNextProto(GetProtocol()); | 4794 ssl.SetNextProto(GetProtocol()); |
| 4790 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4795 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4791 SSLSocketDataProvider ssl2(ASYNC, OK); | 4796 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 4792 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 4797 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 4793 | 4798 |
| 4794 TestCompletionCallback callback1; | 4799 TestCompletionCallback callback1; |
| 4795 | 4800 |
| 4796 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4801 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 4797 EXPECT_EQ(ERR_IO_PENDING, rv); | 4802 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4798 | 4803 |
| 4799 rv = callback1.WaitForResult(); | 4804 rv = callback1.WaitForResult(); |
| 4800 ASSERT_EQ(OK, rv); | 4805 ASSERT_THAT(rv, IsOk()); |
| 4801 | 4806 |
| 4802 LoadTimingInfo load_timing_info; | 4807 LoadTimingInfo load_timing_info; |
| 4803 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 4808 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 4804 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 4809 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
| 4805 | 4810 |
| 4806 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4811 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 4807 ASSERT_TRUE(response); | 4812 ASSERT_TRUE(response); |
| 4808 ASSERT_TRUE(response->headers); | 4813 ASSERT_TRUE(response->headers); |
| 4809 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 4814 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 4810 | 4815 |
| 4811 std::string response_data; | 4816 std::string response_data; |
| 4812 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 4817 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 4813 EXPECT_EQ("1234567890", response_data); | 4818 EXPECT_EQ("1234567890", response_data); |
| 4814 } | 4819 } |
| 4815 | 4820 |
| 4816 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. | 4821 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. |
| 4817 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { | 4822 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { |
| 4818 SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); | 4823 SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); |
| 4819 | 4824 |
| 4820 HttpRequestInfo request; | 4825 HttpRequestInfo request; |
| 4821 request.method = "GET"; | 4826 request.method = "GET"; |
| 4822 request.url = GURL("https://www.example.org/"); | 4827 request.url = GURL("https://www.example.org/"); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4877 SSLSocketDataProvider ssl(ASYNC, OK); | 4882 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4878 ssl.SetNextProto(GetProtocol()); | 4883 ssl.SetNextProto(GetProtocol()); |
| 4879 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4884 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4880 SSLSocketDataProvider ssl2(ASYNC, OK); | 4885 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 4881 ssl2.SetNextProto(GetProtocol()); | 4886 ssl2.SetNextProto(GetProtocol()); |
| 4882 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 4887 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 4883 | 4888 |
| 4884 TestCompletionCallback callback1; | 4889 TestCompletionCallback callback1; |
| 4885 | 4890 |
| 4886 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4891 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 4887 EXPECT_EQ(ERR_IO_PENDING, rv); | 4892 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4888 | 4893 |
| 4889 // Allow the SpdyProxyClientSocket's write callback to complete. | 4894 // Allow the SpdyProxyClientSocket's write callback to complete. |
| 4890 base::RunLoop().RunUntilIdle(); | 4895 base::RunLoop().RunUntilIdle(); |
| 4891 // Now allow the read of the response to complete. | 4896 // Now allow the read of the response to complete. |
| 4892 spdy_data.Resume(); | 4897 spdy_data.Resume(); |
| 4893 rv = callback1.WaitForResult(); | 4898 rv = callback1.WaitForResult(); |
| 4894 EXPECT_EQ(OK, rv); | 4899 EXPECT_THAT(rv, IsOk()); |
| 4895 | 4900 |
| 4896 LoadTimingInfo load_timing_info; | 4901 LoadTimingInfo load_timing_info; |
| 4897 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 4902 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 4898 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 4903 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
| 4899 | 4904 |
| 4900 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4905 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 4901 ASSERT_TRUE(response); | 4906 ASSERT_TRUE(response); |
| 4902 ASSERT_TRUE(response->headers); | 4907 ASSERT_TRUE(response->headers); |
| 4903 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 4908 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 4904 | 4909 |
| 4905 std::string response_data; | 4910 std::string response_data; |
| 4906 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 4911 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 4907 EXPECT_EQ(kUploadData, response_data); | 4912 EXPECT_EQ(kUploadData, response_data); |
| 4908 } | 4913 } |
| 4909 | 4914 |
| 4910 // Test a SPDY CONNECT failure through an HTTPS Proxy. | 4915 // Test a SPDY CONNECT failure through an HTTPS Proxy. |
| 4911 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) { | 4916 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) { |
| 4912 HttpRequestInfo request; | 4917 HttpRequestInfo request; |
| 4913 request.method = "GET"; | 4918 request.method = "GET"; |
| 4914 request.url = GURL("https://www.example.org/"); | 4919 request.url = GURL("https://www.example.org/"); |
| 4915 request.load_flags = 0; | 4920 request.load_flags = 0; |
| 4916 | 4921 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4948 SSLSocketDataProvider ssl(ASYNC, OK); | 4953 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4949 ssl.SetNextProto(GetProtocol()); | 4954 ssl.SetNextProto(GetProtocol()); |
| 4950 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4955 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4951 SSLSocketDataProvider ssl2(ASYNC, OK); | 4956 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 4952 ssl2.SetNextProto(GetProtocol()); | 4957 ssl2.SetNextProto(GetProtocol()); |
| 4953 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 4958 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 4954 | 4959 |
| 4955 TestCompletionCallback callback1; | 4960 TestCompletionCallback callback1; |
| 4956 | 4961 |
| 4957 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 4962 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 4958 EXPECT_EQ(ERR_IO_PENDING, rv); | 4963 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 4959 | 4964 |
| 4960 rv = callback1.WaitForResult(); | 4965 rv = callback1.WaitForResult(); |
| 4961 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 4966 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
| 4962 | 4967 |
| 4963 // TODO(juliatuttle): Anything else to check here? | 4968 // TODO(juliatuttle): Anything else to check here? |
| 4964 } | 4969 } |
| 4965 | 4970 |
| 4966 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY | 4971 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY |
| 4967 // HTTPS Proxy to different servers. | 4972 // HTTPS Proxy to different servers. |
| 4968 TEST_P(HttpNetworkTransactionTest, | 4973 TEST_P(HttpNetworkTransactionTest, |
| 4969 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsTwoServers) { | 4974 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsTwoServers) { |
| 4970 // Configure against https proxy server "proxy:70". | 4975 // Configure against https proxy server "proxy:70". |
| 4971 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 4976 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5063 SSLSocketDataProvider ssl2(ASYNC, OK); | 5068 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 5064 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 5069 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 5065 SSLSocketDataProvider ssl3(ASYNC, OK); | 5070 SSLSocketDataProvider ssl3(ASYNC, OK); |
| 5066 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl3); | 5071 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl3); |
| 5067 | 5072 |
| 5068 TestCompletionCallback callback; | 5073 TestCompletionCallback callback; |
| 5069 | 5074 |
| 5070 std::unique_ptr<HttpTransaction> trans( | 5075 std::unique_ptr<HttpTransaction> trans( |
| 5071 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5076 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5072 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); | 5077 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); |
| 5073 EXPECT_EQ(OK, callback.GetResult(rv)); | 5078 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 5074 | 5079 |
| 5075 LoadTimingInfo load_timing_info; | 5080 LoadTimingInfo load_timing_info; |
| 5076 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5081 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 5077 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 5082 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
| 5078 | 5083 |
| 5079 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5084 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5080 ASSERT_TRUE(response); | 5085 ASSERT_TRUE(response); |
| 5081 ASSERT_TRUE(response->headers); | 5086 ASSERT_TRUE(response->headers); |
| 5082 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 5087 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 5083 | 5088 |
| 5084 std::string response_data; | 5089 std::string response_data; |
| 5085 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); | 5090 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); |
| 5086 rv = trans->Read(buf.get(), 256, callback.callback()); | 5091 rv = trans->Read(buf.get(), 256, callback.callback()); |
| 5087 EXPECT_EQ(1, callback.GetResult(rv)); | 5092 EXPECT_EQ(1, callback.GetResult(rv)); |
| 5088 | 5093 |
| 5089 std::unique_ptr<HttpTransaction> trans2( | 5094 std::unique_ptr<HttpTransaction> trans2( |
| 5090 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5095 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5091 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 5096 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
| 5092 EXPECT_EQ(OK, callback.GetResult(rv)); | 5097 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 5093 | 5098 |
| 5094 LoadTimingInfo load_timing_info2; | 5099 LoadTimingInfo load_timing_info2; |
| 5095 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 5100 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
| 5096 // Even though the SPDY connection is reused, a new tunnelled connection has | 5101 // Even though the SPDY connection is reused, a new tunnelled connection has |
| 5097 // to be created, so the socket's load timing looks like a fresh connection. | 5102 // to be created, so the socket's load timing looks like a fresh connection. |
| 5098 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_SSL_TIMES); | 5103 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_SSL_TIMES); |
| 5099 | 5104 |
| 5100 // The requests should have different IDs, since they each are using their own | 5105 // The requests should have different IDs, since they each are using their own |
| 5101 // separate stream. | 5106 // separate stream. |
| 5102 EXPECT_NE(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 5107 EXPECT_NE(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5185 ssl.SetNextProto(GetProtocol()); | 5190 ssl.SetNextProto(GetProtocol()); |
| 5186 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 5191 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 5187 SSLSocketDataProvider ssl2(ASYNC, OK); | 5192 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 5188 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 5193 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 5189 | 5194 |
| 5190 TestCompletionCallback callback; | 5195 TestCompletionCallback callback; |
| 5191 | 5196 |
| 5192 std::unique_ptr<HttpTransaction> trans( | 5197 std::unique_ptr<HttpTransaction> trans( |
| 5193 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5198 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5194 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); | 5199 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); |
| 5195 EXPECT_EQ(ERR_IO_PENDING, rv); | 5200 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5196 | 5201 |
| 5197 rv = callback.WaitForResult(); | 5202 rv = callback.WaitForResult(); |
| 5198 EXPECT_EQ(OK, rv); | 5203 EXPECT_THAT(rv, IsOk()); |
| 5199 | 5204 |
| 5200 LoadTimingInfo load_timing_info; | 5205 LoadTimingInfo load_timing_info; |
| 5201 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5206 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 5202 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 5207 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
| 5203 | 5208 |
| 5204 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5209 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5205 ASSERT_TRUE(response); | 5210 ASSERT_TRUE(response); |
| 5206 ASSERT_TRUE(response->headers); | 5211 ASSERT_TRUE(response->headers); |
| 5207 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 5212 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 5208 | 5213 |
| 5209 std::string response_data; | 5214 std::string response_data; |
| 5210 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); | 5215 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); |
| 5211 EXPECT_EQ(1, trans->Read(buf.get(), 256, callback.callback())); | 5216 EXPECT_EQ(1, trans->Read(buf.get(), 256, callback.callback())); |
| 5212 trans.reset(); | 5217 trans.reset(); |
| 5213 | 5218 |
| 5214 std::unique_ptr<HttpTransaction> trans2( | 5219 std::unique_ptr<HttpTransaction> trans2( |
| 5215 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5220 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5216 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 5221 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
| 5217 EXPECT_EQ(ERR_IO_PENDING, rv); | 5222 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5218 | 5223 |
| 5219 rv = callback.WaitForResult(); | 5224 rv = callback.WaitForResult(); |
| 5220 EXPECT_EQ(OK, rv); | 5225 EXPECT_THAT(rv, IsOk()); |
| 5221 | 5226 |
| 5222 LoadTimingInfo load_timing_info2; | 5227 LoadTimingInfo load_timing_info2; |
| 5223 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 5228 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
| 5224 TestLoadTimingReused(load_timing_info2); | 5229 TestLoadTimingReused(load_timing_info2); |
| 5225 | 5230 |
| 5226 // The requests should have the same ID. | 5231 // The requests should have the same ID. |
| 5227 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 5232 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
| 5228 | 5233 |
| 5229 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); | 5234 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); |
| 5230 } | 5235 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5289 | 5294 |
| 5290 SSLSocketDataProvider ssl(ASYNC, OK); | 5295 SSLSocketDataProvider ssl(ASYNC, OK); |
| 5291 ssl.SetNextProto(GetProtocol()); | 5296 ssl.SetNextProto(GetProtocol()); |
| 5292 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 5297 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 5293 | 5298 |
| 5294 TestCompletionCallback callback; | 5299 TestCompletionCallback callback; |
| 5295 | 5300 |
| 5296 std::unique_ptr<HttpTransaction> trans( | 5301 std::unique_ptr<HttpTransaction> trans( |
| 5297 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5302 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5298 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); | 5303 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); |
| 5299 EXPECT_EQ(OK, callback.GetResult(rv)); | 5304 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 5300 | 5305 |
| 5301 LoadTimingInfo load_timing_info; | 5306 LoadTimingInfo load_timing_info; |
| 5302 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5307 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 5303 TestLoadTimingNotReused(load_timing_info, | 5308 TestLoadTimingNotReused(load_timing_info, |
| 5304 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 5309 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 5305 | 5310 |
| 5306 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5311 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5307 ASSERT_TRUE(response); | 5312 ASSERT_TRUE(response); |
| 5308 ASSERT_TRUE(response->headers); | 5313 ASSERT_TRUE(response->headers); |
| 5309 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 5314 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 5310 | 5315 |
| 5311 std::string response_data; | 5316 std::string response_data; |
| 5312 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); | 5317 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); |
| 5313 rv = trans->Read(buf.get(), 256, callback.callback()); | 5318 rv = trans->Read(buf.get(), 256, callback.callback()); |
| 5314 EXPECT_EQ(1, callback.GetResult(rv)); | 5319 EXPECT_EQ(1, callback.GetResult(rv)); |
| 5315 // Delete the first request, so the second one can reuse the socket. | 5320 // Delete the first request, so the second one can reuse the socket. |
| 5316 trans.reset(); | 5321 trans.reset(); |
| 5317 | 5322 |
| 5318 std::unique_ptr<HttpTransaction> trans2( | 5323 std::unique_ptr<HttpTransaction> trans2( |
| 5319 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5324 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5320 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 5325 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
| 5321 EXPECT_EQ(OK, callback.GetResult(rv)); | 5326 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 5322 | 5327 |
| 5323 LoadTimingInfo load_timing_info2; | 5328 LoadTimingInfo load_timing_info2; |
| 5324 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 5329 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
| 5325 TestLoadTimingReused(load_timing_info2); | 5330 TestLoadTimingReused(load_timing_info2); |
| 5326 | 5331 |
| 5327 // The requests should have the same ID. | 5332 // The requests should have the same ID. |
| 5328 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 5333 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
| 5329 | 5334 |
| 5330 rv = trans2->Read(buf.get(), 256, callback.callback()); | 5335 rv = trans2->Read(buf.get(), 256, callback.callback()); |
| 5331 EXPECT_EQ(2, callback.GetResult(rv)); | 5336 EXPECT_EQ(2, callback.GetResult(rv)); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5381 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5386 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5382 SSLSocketDataProvider ssl(ASYNC, OK); | 5387 SSLSocketDataProvider ssl(ASYNC, OK); |
| 5383 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 5388 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 5384 | 5389 |
| 5385 TestCompletionCallback callback1; | 5390 TestCompletionCallback callback1; |
| 5386 | 5391 |
| 5387 std::unique_ptr<HttpTransaction> trans( | 5392 std::unique_ptr<HttpTransaction> trans( |
| 5388 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5393 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5389 | 5394 |
| 5390 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 5395 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 5391 EXPECT_EQ(ERR_IO_PENDING, rv); | 5396 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5392 | 5397 |
| 5393 rv = callback1.WaitForResult(); | 5398 rv = callback1.WaitForResult(); |
| 5394 EXPECT_EQ(OK, rv); | 5399 EXPECT_THAT(rv, IsOk()); |
| 5395 | 5400 |
| 5396 LoadTimingInfo load_timing_info; | 5401 LoadTimingInfo load_timing_info; |
| 5397 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5402 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 5398 TestLoadTimingNotReused(load_timing_info, | 5403 TestLoadTimingNotReused(load_timing_info, |
| 5399 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 5404 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 5400 | 5405 |
| 5401 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5406 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5402 ASSERT_TRUE(response); | 5407 ASSERT_TRUE(response); |
| 5403 ASSERT_TRUE(response->headers); | 5408 ASSERT_TRUE(response->headers); |
| 5404 EXPECT_EQ(407, response->headers->response_code()); | 5409 EXPECT_EQ(407, response->headers->response_code()); |
| 5405 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 5410 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 5406 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); | 5411 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); |
| 5407 | 5412 |
| 5408 TestCompletionCallback callback2; | 5413 TestCompletionCallback callback2; |
| 5409 | 5414 |
| 5410 rv = trans->RestartWithAuth( | 5415 rv = trans->RestartWithAuth( |
| 5411 AuthCredentials(kFoo, kBar), callback2.callback()); | 5416 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 5412 EXPECT_EQ(ERR_IO_PENDING, rv); | 5417 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5413 | 5418 |
| 5414 rv = callback2.WaitForResult(); | 5419 rv = callback2.WaitForResult(); |
| 5415 EXPECT_EQ(OK, rv); | 5420 EXPECT_THAT(rv, IsOk()); |
| 5416 | 5421 |
| 5417 load_timing_info = LoadTimingInfo(); | 5422 load_timing_info = LoadTimingInfo(); |
| 5418 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5423 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 5419 // Retrying with HTTP AUTH is considered to be reusing a socket. | 5424 // Retrying with HTTP AUTH is considered to be reusing a socket. |
| 5420 TestLoadTimingReused(load_timing_info); | 5425 TestLoadTimingReused(load_timing_info); |
| 5421 | 5426 |
| 5422 response = trans->GetResponseInfo(); | 5427 response = trans->GetResponseInfo(); |
| 5423 ASSERT_TRUE(response); | 5428 ASSERT_TRUE(response); |
| 5424 | 5429 |
| 5425 EXPECT_TRUE(response->headers->IsKeepAlive()); | 5430 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5458 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5463 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 5459 data_writes, arraysize(data_writes)); | 5464 data_writes, arraysize(data_writes)); |
| 5460 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5465 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 5461 | 5466 |
| 5462 TestCompletionCallback callback; | 5467 TestCompletionCallback callback; |
| 5463 | 5468 |
| 5464 std::unique_ptr<HttpTransaction> trans( | 5469 std::unique_ptr<HttpTransaction> trans( |
| 5465 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5470 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5466 | 5471 |
| 5467 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5472 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 5468 EXPECT_EQ(ERR_IO_PENDING, rv); | 5473 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5469 | 5474 |
| 5470 rv = callback.WaitForResult(); | 5475 rv = callback.WaitForResult(); |
| 5471 EXPECT_EQ(expected_status, rv); | 5476 EXPECT_EQ(expected_status, rv); |
| 5472 } | 5477 } |
| 5473 | 5478 |
| 5474 void HttpNetworkTransactionTest::ConnectStatusHelper( | 5479 void HttpNetworkTransactionTest::ConnectStatusHelper( |
| 5475 const MockRead& status) { | 5480 const MockRead& status) { |
| 5476 ConnectStatusHelperWithExpectedStatus( | 5481 ConnectStatusHelperWithExpectedStatus( |
| 5477 status, ERR_TUNNEL_CONNECTION_FAILED); | 5482 status, ERR_TUNNEL_CONNECTION_FAILED); |
| 5478 } | 5483 } |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5729 data_writes2, arraysize(data_writes2)); | 5734 data_writes2, arraysize(data_writes2)); |
| 5730 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 5735 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
| 5731 data_writes3, arraysize(data_writes3)); | 5736 data_writes3, arraysize(data_writes3)); |
| 5732 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5737 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5733 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5738 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 5734 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 5739 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 5735 | 5740 |
| 5736 TestCompletionCallback callback1; | 5741 TestCompletionCallback callback1; |
| 5737 | 5742 |
| 5738 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5743 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5739 EXPECT_EQ(ERR_IO_PENDING, rv); | 5744 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5740 | 5745 |
| 5741 rv = callback1.WaitForResult(); | 5746 rv = callback1.WaitForResult(); |
| 5742 EXPECT_EQ(OK, rv); | 5747 EXPECT_THAT(rv, IsOk()); |
| 5743 | 5748 |
| 5744 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5749 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5745 ASSERT_TRUE(response); | 5750 ASSERT_TRUE(response); |
| 5746 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 5751 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 5747 | 5752 |
| 5748 TestCompletionCallback callback2; | 5753 TestCompletionCallback callback2; |
| 5749 | 5754 |
| 5750 rv = trans->RestartWithAuth( | 5755 rv = trans->RestartWithAuth( |
| 5751 AuthCredentials(kFoo, kBar), callback2.callback()); | 5756 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 5752 EXPECT_EQ(ERR_IO_PENDING, rv); | 5757 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5753 | 5758 |
| 5754 rv = callback2.WaitForResult(); | 5759 rv = callback2.WaitForResult(); |
| 5755 EXPECT_EQ(OK, rv); | 5760 EXPECT_THAT(rv, IsOk()); |
| 5756 | 5761 |
| 5757 response = trans->GetResponseInfo(); | 5762 response = trans->GetResponseInfo(); |
| 5758 ASSERT_TRUE(response); | 5763 ASSERT_TRUE(response); |
| 5759 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 5764 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 5760 | 5765 |
| 5761 TestCompletionCallback callback3; | 5766 TestCompletionCallback callback3; |
| 5762 | 5767 |
| 5763 rv = trans->RestartWithAuth( | 5768 rv = trans->RestartWithAuth( |
| 5764 AuthCredentials(kFoo2, kBar2), callback3.callback()); | 5769 AuthCredentials(kFoo2, kBar2), callback3.callback()); |
| 5765 EXPECT_EQ(ERR_IO_PENDING, rv); | 5770 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5766 | 5771 |
| 5767 rv = callback3.WaitForResult(); | 5772 rv = callback3.WaitForResult(); |
| 5768 EXPECT_EQ(OK, rv); | 5773 EXPECT_THAT(rv, IsOk()); |
| 5769 | 5774 |
| 5770 response = trans->GetResponseInfo(); | 5775 response = trans->GetResponseInfo(); |
| 5771 EXPECT_FALSE(response->auth_challenge); | 5776 EXPECT_FALSE(response->auth_challenge); |
| 5772 EXPECT_EQ(100, response->headers->GetContentLength()); | 5777 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 5773 } | 5778 } |
| 5774 | 5779 |
| 5775 // For the NTLM implementation using SSPI, we skip the NTLM tests since we | 5780 // For the NTLM implementation using SSPI, we skip the NTLM tests since we |
| 5776 // can't hook into its internals to cause it to generate predictable NTLM | 5781 // can't hook into its internals to cause it to generate predictable NTLM |
| 5777 // authorization headers. | 5782 // authorization headers. |
| 5778 #if defined(NTLM_PORTABLE) | 5783 #if defined(NTLM_PORTABLE) |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5865 data_writes2, arraysize(data_writes2)); | 5870 data_writes2, arraysize(data_writes2)); |
| 5866 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5871 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5867 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5872 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 5868 | 5873 |
| 5869 TestCompletionCallback callback1; | 5874 TestCompletionCallback callback1; |
| 5870 | 5875 |
| 5871 std::unique_ptr<HttpTransaction> trans( | 5876 std::unique_ptr<HttpTransaction> trans( |
| 5872 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5877 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5873 | 5878 |
| 5874 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5879 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5875 EXPECT_EQ(ERR_IO_PENDING, rv); | 5880 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5876 | 5881 |
| 5877 rv = callback1.WaitForResult(); | 5882 rv = callback1.WaitForResult(); |
| 5878 EXPECT_EQ(OK, rv); | 5883 EXPECT_THAT(rv, IsOk()); |
| 5879 | 5884 |
| 5880 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 5885 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 5881 | 5886 |
| 5882 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5887 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5883 ASSERT_TRUE(response); | 5888 ASSERT_TRUE(response); |
| 5884 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); | 5889 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); |
| 5885 | 5890 |
| 5886 TestCompletionCallback callback2; | 5891 TestCompletionCallback callback2; |
| 5887 | 5892 |
| 5888 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kTestingNTLM), | 5893 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kTestingNTLM), |
| 5889 callback2.callback()); | 5894 callback2.callback()); |
| 5890 EXPECT_EQ(ERR_IO_PENDING, rv); | 5895 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5891 | 5896 |
| 5892 rv = callback2.WaitForResult(); | 5897 rv = callback2.WaitForResult(); |
| 5893 EXPECT_EQ(OK, rv); | 5898 EXPECT_THAT(rv, IsOk()); |
| 5894 | 5899 |
| 5895 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 5900 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 5896 | 5901 |
| 5897 response = trans->GetResponseInfo(); | 5902 response = trans->GetResponseInfo(); |
| 5898 ASSERT_TRUE(response); | 5903 ASSERT_TRUE(response); |
| 5899 EXPECT_FALSE(response->auth_challenge); | 5904 EXPECT_FALSE(response->auth_challenge); |
| 5900 | 5905 |
| 5901 TestCompletionCallback callback3; | 5906 TestCompletionCallback callback3; |
| 5902 | 5907 |
| 5903 rv = trans->RestartWithAuth(AuthCredentials(), callback3.callback()); | 5908 rv = trans->RestartWithAuth(AuthCredentials(), callback3.callback()); |
| 5904 EXPECT_EQ(ERR_IO_PENDING, rv); | 5909 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 5905 | 5910 |
| 5906 rv = callback3.WaitForResult(); | 5911 rv = callback3.WaitForResult(); |
| 5907 EXPECT_EQ(OK, rv); | 5912 EXPECT_THAT(rv, IsOk()); |
| 5908 | 5913 |
| 5909 response = trans->GetResponseInfo(); | 5914 response = trans->GetResponseInfo(); |
| 5910 ASSERT_TRUE(response); | 5915 ASSERT_TRUE(response); |
| 5911 EXPECT_FALSE(response->auth_challenge); | 5916 EXPECT_FALSE(response->auth_challenge); |
| 5912 EXPECT_EQ(13, response->headers->GetContentLength()); | 5917 EXPECT_EQ(13, response->headers->GetContentLength()); |
| 5913 } | 5918 } |
| 5914 | 5919 |
| 5915 // Enter a wrong password, and then the correct one. | 5920 // Enter a wrong password, and then the correct one. |
| 5916 TEST_P(HttpNetworkTransactionTest, NTLMAuth2) { | 5921 TEST_P(HttpNetworkTransactionTest, NTLMAuth2) { |
| 5917 HttpRequestInfo request; | 5922 HttpRequestInfo request; |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6045 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6050 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 6046 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6051 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 6047 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 6052 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 6048 | 6053 |
| 6049 TestCompletionCallback callback1; | 6054 TestCompletionCallback callback1; |
| 6050 | 6055 |
| 6051 std::unique_ptr<HttpTransaction> trans( | 6056 std::unique_ptr<HttpTransaction> trans( |
| 6052 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6057 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 6053 | 6058 |
| 6054 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6059 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 6055 EXPECT_EQ(ERR_IO_PENDING, rv); | 6060 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6056 | 6061 |
| 6057 rv = callback1.WaitForResult(); | 6062 rv = callback1.WaitForResult(); |
| 6058 EXPECT_EQ(OK, rv); | 6063 EXPECT_THAT(rv, IsOk()); |
| 6059 | 6064 |
| 6060 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6065 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 6061 | 6066 |
| 6062 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6067 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6063 ASSERT_TRUE(response); | 6068 ASSERT_TRUE(response); |
| 6064 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); | 6069 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); |
| 6065 | 6070 |
| 6066 TestCompletionCallback callback2; | 6071 TestCompletionCallback callback2; |
| 6067 | 6072 |
| 6068 // Enter the wrong password. | 6073 // Enter the wrong password. |
| 6069 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kWrongPassword), | 6074 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kWrongPassword), |
| 6070 callback2.callback()); | 6075 callback2.callback()); |
| 6071 EXPECT_EQ(ERR_IO_PENDING, rv); | 6076 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6072 | 6077 |
| 6073 rv = callback2.WaitForResult(); | 6078 rv = callback2.WaitForResult(); |
| 6074 EXPECT_EQ(OK, rv); | 6079 EXPECT_THAT(rv, IsOk()); |
| 6075 | 6080 |
| 6076 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 6081 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 6077 TestCompletionCallback callback3; | 6082 TestCompletionCallback callback3; |
| 6078 rv = trans->RestartWithAuth(AuthCredentials(), callback3.callback()); | 6083 rv = trans->RestartWithAuth(AuthCredentials(), callback3.callback()); |
| 6079 EXPECT_EQ(ERR_IO_PENDING, rv); | 6084 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6080 rv = callback3.WaitForResult(); | 6085 rv = callback3.WaitForResult(); |
| 6081 EXPECT_EQ(OK, rv); | 6086 EXPECT_THAT(rv, IsOk()); |
| 6082 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6087 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 6083 | 6088 |
| 6084 response = trans->GetResponseInfo(); | 6089 response = trans->GetResponseInfo(); |
| 6085 ASSERT_TRUE(response); | 6090 ASSERT_TRUE(response); |
| 6086 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); | 6091 EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge.get())); |
| 6087 | 6092 |
| 6088 TestCompletionCallback callback4; | 6093 TestCompletionCallback callback4; |
| 6089 | 6094 |
| 6090 // Now enter the right password. | 6095 // Now enter the right password. |
| 6091 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kTestingNTLM), | 6096 rv = trans->RestartWithAuth(AuthCredentials(kTestingNTLM, kTestingNTLM), |
| 6092 callback4.callback()); | 6097 callback4.callback()); |
| 6093 EXPECT_EQ(ERR_IO_PENDING, rv); | 6098 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6094 | 6099 |
| 6095 rv = callback4.WaitForResult(); | 6100 rv = callback4.WaitForResult(); |
| 6096 EXPECT_EQ(OK, rv); | 6101 EXPECT_THAT(rv, IsOk()); |
| 6097 | 6102 |
| 6098 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 6103 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 6099 | 6104 |
| 6100 TestCompletionCallback callback5; | 6105 TestCompletionCallback callback5; |
| 6101 | 6106 |
| 6102 // One more roundtrip | 6107 // One more roundtrip |
| 6103 rv = trans->RestartWithAuth(AuthCredentials(), callback5.callback()); | 6108 rv = trans->RestartWithAuth(AuthCredentials(), callback5.callback()); |
| 6104 EXPECT_EQ(ERR_IO_PENDING, rv); | 6109 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6105 | 6110 |
| 6106 rv = callback5.WaitForResult(); | 6111 rv = callback5.WaitForResult(); |
| 6107 EXPECT_EQ(OK, rv); | 6112 EXPECT_THAT(rv, IsOk()); |
| 6108 | 6113 |
| 6109 response = trans->GetResponseInfo(); | 6114 response = trans->GetResponseInfo(); |
| 6110 EXPECT_FALSE(response->auth_challenge); | 6115 EXPECT_FALSE(response->auth_challenge); |
| 6111 EXPECT_EQ(13, response->headers->GetContentLength()); | 6116 EXPECT_EQ(13, response->headers->GetContentLength()); |
| 6112 } | 6117 } |
| 6113 #endif // NTLM_PORTABLE | 6118 #endif // NTLM_PORTABLE |
| 6114 | 6119 |
| 6115 // Test reading a server response which has only headers, and no body. | 6120 // Test reading a server response which has only headers, and no body. |
| 6116 // After some maximum number of bytes is consumed, the transaction should | 6121 // After some maximum number of bytes is consumed, the transaction should |
| 6117 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. | 6122 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 6134 MockRead(ASYNC, large_headers_string.data(), large_headers_string.size()), | 6139 MockRead(ASYNC, large_headers_string.data(), large_headers_string.size()), |
| 6135 MockRead("\r\nBODY"), | 6140 MockRead("\r\nBODY"), |
| 6136 MockRead(SYNCHRONOUS, OK), | 6141 MockRead(SYNCHRONOUS, OK), |
| 6137 }; | 6142 }; |
| 6138 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 6143 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 6139 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6144 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6140 | 6145 |
| 6141 TestCompletionCallback callback; | 6146 TestCompletionCallback callback; |
| 6142 | 6147 |
| 6143 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6148 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6144 EXPECT_EQ(ERR_IO_PENDING, rv); | 6149 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6145 | 6150 |
| 6146 rv = callback.WaitForResult(); | 6151 rv = callback.WaitForResult(); |
| 6147 EXPECT_EQ(ERR_RESPONSE_HEADERS_TOO_BIG, rv); | 6152 EXPECT_THAT(rv, IsError(ERR_RESPONSE_HEADERS_TOO_BIG)); |
| 6148 } | 6153 } |
| 6149 | 6154 |
| 6150 // Make sure that we don't try to reuse a TCPClientSocket when failing to | 6155 // Make sure that we don't try to reuse a TCPClientSocket when failing to |
| 6151 // establish tunnel. | 6156 // establish tunnel. |
| 6152 // http://code.google.com/p/chromium/issues/detail?id=3772 | 6157 // http://code.google.com/p/chromium/issues/detail?id=3772 |
| 6153 TEST_P(HttpNetworkTransactionTest, | 6158 TEST_P(HttpNetworkTransactionTest, |
| 6154 DontRecycleTransportSocketForSSLTunnel) { | 6159 DontRecycleTransportSocketForSSLTunnel) { |
| 6155 HttpRequestInfo request; | 6160 HttpRequestInfo request; |
| 6156 request.method = "GET"; | 6161 request.method = "GET"; |
| 6157 request.url = GURL("https://www.example.org/"); | 6162 request.url = GURL("https://www.example.org/"); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 6181 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | 6186 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
| 6182 }; | 6187 }; |
| 6183 | 6188 |
| 6184 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6189 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 6185 data_writes1, arraysize(data_writes1)); | 6190 data_writes1, arraysize(data_writes1)); |
| 6186 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6191 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 6187 | 6192 |
| 6188 TestCompletionCallback callback1; | 6193 TestCompletionCallback callback1; |
| 6189 | 6194 |
| 6190 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6195 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 6191 EXPECT_EQ(ERR_IO_PENDING, rv); | 6196 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6192 | 6197 |
| 6193 rv = callback1.WaitForResult(); | 6198 rv = callback1.WaitForResult(); |
| 6194 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 6199 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
| 6195 | 6200 |
| 6196 // Empty the current queue. This is necessary because idle sockets are | 6201 // Empty the current queue. This is necessary because idle sockets are |
| 6197 // added to the connection pool asynchronously with a PostTask. | 6202 // added to the connection pool asynchronously with a PostTask. |
| 6198 base::RunLoop().RunUntilIdle(); | 6203 base::RunLoop().RunUntilIdle(); |
| 6199 | 6204 |
| 6200 // We now check to make sure the TCPClientSocket was not added back to | 6205 // We now check to make sure the TCPClientSocket was not added back to |
| 6201 // the pool. | 6206 // the pool. |
| 6202 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6207 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 6203 trans.reset(); | 6208 trans.reset(); |
| 6204 base::RunLoop().RunUntilIdle(); | 6209 base::RunLoop().RunUntilIdle(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 6227 MockRead("junk"), // Should not be read!! | 6232 MockRead("junk"), // Should not be read!! |
| 6228 MockRead(SYNCHRONOUS, OK), | 6233 MockRead(SYNCHRONOUS, OK), |
| 6229 }; | 6234 }; |
| 6230 | 6235 |
| 6231 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 6236 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 6232 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6237 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6233 | 6238 |
| 6234 TestCompletionCallback callback; | 6239 TestCompletionCallback callback; |
| 6235 | 6240 |
| 6236 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6241 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6237 EXPECT_EQ(ERR_IO_PENDING, rv); | 6242 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6238 | 6243 |
| 6239 rv = callback.WaitForResult(); | 6244 rv = callback.WaitForResult(); |
| 6240 EXPECT_EQ(OK, rv); | 6245 EXPECT_THAT(rv, IsOk()); |
| 6241 | 6246 |
| 6242 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6247 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6243 ASSERT_TRUE(response); | 6248 ASSERT_TRUE(response); |
| 6244 | 6249 |
| 6245 EXPECT_TRUE(response->headers); | 6250 EXPECT_TRUE(response->headers); |
| 6246 std::string status_line = response->headers->GetStatusLine(); | 6251 std::string status_line = response->headers->GetStatusLine(); |
| 6247 EXPECT_EQ("HTTP/1.1 200 OK", status_line); | 6252 EXPECT_EQ("HTTP/1.1 200 OK", status_line); |
| 6248 | 6253 |
| 6249 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6254 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 6250 | 6255 |
| 6251 std::string response_data; | 6256 std::string response_data; |
| 6252 rv = ReadTransaction(trans.get(), &response_data); | 6257 rv = ReadTransaction(trans.get(), &response_data); |
| 6253 EXPECT_EQ(OK, rv); | 6258 EXPECT_THAT(rv, IsOk()); |
| 6254 EXPECT_EQ("hello world", response_data); | 6259 EXPECT_EQ("hello world", response_data); |
| 6255 | 6260 |
| 6256 // Empty the current queue. This is necessary because idle sockets are | 6261 // Empty the current queue. This is necessary because idle sockets are |
| 6257 // added to the connection pool asynchronously with a PostTask. | 6262 // added to the connection pool asynchronously with a PostTask. |
| 6258 base::RunLoop().RunUntilIdle(); | 6263 base::RunLoop().RunUntilIdle(); |
| 6259 | 6264 |
| 6260 // We now check to make sure the socket was added back to the pool. | 6265 // We now check to make sure the socket was added back to the pool. |
| 6261 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 6266 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 6262 } | 6267 } |
| 6263 | 6268 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 6291 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6296 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6292 | 6297 |
| 6293 TestCompletionCallback callback; | 6298 TestCompletionCallback callback; |
| 6294 | 6299 |
| 6295 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6300 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6296 std::unique_ptr<HttpTransaction> trans( | 6301 std::unique_ptr<HttpTransaction> trans( |
| 6297 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6302 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 6298 | 6303 |
| 6299 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6304 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6300 | 6305 |
| 6301 EXPECT_EQ(ERR_IO_PENDING, rv); | 6306 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6302 EXPECT_EQ(OK, callback.WaitForResult()); | 6307 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 6303 | 6308 |
| 6304 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6309 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6305 ASSERT_TRUE(response); | 6310 ASSERT_TRUE(response); |
| 6306 ASSERT_TRUE(response->headers); | 6311 ASSERT_TRUE(response->headers); |
| 6307 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6312 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 6308 | 6313 |
| 6309 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6314 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 6310 | 6315 |
| 6311 std::string response_data; | 6316 std::string response_data; |
| 6312 rv = ReadTransaction(trans.get(), &response_data); | 6317 rv = ReadTransaction(trans.get(), &response_data); |
| 6313 EXPECT_EQ(OK, rv); | 6318 EXPECT_THAT(rv, IsOk()); |
| 6314 EXPECT_EQ("hello world", response_data); | 6319 EXPECT_EQ("hello world", response_data); |
| 6315 | 6320 |
| 6316 // Empty the current queue. This is necessary because idle sockets are | 6321 // Empty the current queue. This is necessary because idle sockets are |
| 6317 // added to the connection pool asynchronously with a PostTask. | 6322 // added to the connection pool asynchronously with a PostTask. |
| 6318 base::RunLoop().RunUntilIdle(); | 6323 base::RunLoop().RunUntilIdle(); |
| 6319 | 6324 |
| 6320 // We now check to make sure the socket was added back to the pool. | 6325 // We now check to make sure the socket was added back to the pool. |
| 6321 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 6326 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
| 6322 } | 6327 } |
| 6323 | 6328 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6357 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6362 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 6358 | 6363 |
| 6359 TestCompletionCallback callback; | 6364 TestCompletionCallback callback; |
| 6360 | 6365 |
| 6361 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6366 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6362 std::unique_ptr<HttpTransaction> trans( | 6367 std::unique_ptr<HttpTransaction> trans( |
| 6363 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6368 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 6364 | 6369 |
| 6365 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6370 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6366 | 6371 |
| 6367 EXPECT_EQ(ERR_IO_PENDING, rv); | 6372 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6368 EXPECT_EQ(OK, callback.WaitForResult()); | 6373 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 6369 | 6374 |
| 6370 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6375 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6371 ASSERT_TRUE(response); | 6376 ASSERT_TRUE(response); |
| 6372 ASSERT_TRUE(response->headers); | 6377 ASSERT_TRUE(response->headers); |
| 6373 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6378 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 6374 | 6379 |
| 6375 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6380 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 6376 | 6381 |
| 6377 std::string response_data; | 6382 std::string response_data; |
| 6378 rv = ReadTransaction(trans.get(), &response_data); | 6383 rv = ReadTransaction(trans.get(), &response_data); |
| 6379 EXPECT_EQ(OK, rv); | 6384 EXPECT_THAT(rv, IsOk()); |
| 6380 EXPECT_EQ("hello world", response_data); | 6385 EXPECT_EQ("hello world", response_data); |
| 6381 | 6386 |
| 6382 // Empty the current queue. This is necessary because idle sockets are | 6387 // Empty the current queue. This is necessary because idle sockets are |
| 6383 // added to the connection pool asynchronously with a PostTask. | 6388 // added to the connection pool asynchronously with a PostTask. |
| 6384 base::RunLoop().RunUntilIdle(); | 6389 base::RunLoop().RunUntilIdle(); |
| 6385 | 6390 |
| 6386 // We now check to make sure the socket was added back to the pool. | 6391 // We now check to make sure the socket was added back to the pool. |
| 6387 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 6392 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
| 6388 | 6393 |
| 6389 // Now start the second transaction, which should reuse the previous socket. | 6394 // Now start the second transaction, which should reuse the previous socket. |
| 6390 | 6395 |
| 6391 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6396 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 6392 | 6397 |
| 6393 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6398 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6394 | 6399 |
| 6395 EXPECT_EQ(ERR_IO_PENDING, rv); | 6400 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6396 EXPECT_EQ(OK, callback.WaitForResult()); | 6401 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 6397 | 6402 |
| 6398 response = trans->GetResponseInfo(); | 6403 response = trans->GetResponseInfo(); |
| 6399 ASSERT_TRUE(response); | 6404 ASSERT_TRUE(response); |
| 6400 ASSERT_TRUE(response->headers); | 6405 ASSERT_TRUE(response->headers); |
| 6401 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6406 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 6402 | 6407 |
| 6403 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6408 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 6404 | 6409 |
| 6405 rv = ReadTransaction(trans.get(), &response_data); | 6410 rv = ReadTransaction(trans.get(), &response_data); |
| 6406 EXPECT_EQ(OK, rv); | 6411 EXPECT_THAT(rv, IsOk()); |
| 6407 EXPECT_EQ("hello world", response_data); | 6412 EXPECT_EQ("hello world", response_data); |
| 6408 | 6413 |
| 6409 // Empty the current queue. This is necessary because idle sockets are | 6414 // Empty the current queue. This is necessary because idle sockets are |
| 6410 // added to the connection pool asynchronously with a PostTask. | 6415 // added to the connection pool asynchronously with a PostTask. |
| 6411 base::RunLoop().RunUntilIdle(); | 6416 base::RunLoop().RunUntilIdle(); |
| 6412 | 6417 |
| 6413 // We now check to make sure the socket was added back to the pool. | 6418 // We now check to make sure the socket was added back to the pool. |
| 6414 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 6419 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
| 6415 } | 6420 } |
| 6416 | 6421 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 6440 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6445 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6441 | 6446 |
| 6442 // Transaction must be created after the MockReads, so it's destroyed before | 6447 // Transaction must be created after the MockReads, so it's destroyed before |
| 6443 // them. | 6448 // them. |
| 6444 std::unique_ptr<HttpTransaction> trans( | 6449 std::unique_ptr<HttpTransaction> trans( |
| 6445 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6450 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 6446 | 6451 |
| 6447 TestCompletionCallback callback; | 6452 TestCompletionCallback callback; |
| 6448 | 6453 |
| 6449 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6454 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6450 EXPECT_EQ(ERR_IO_PENDING, rv); | 6455 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6451 | 6456 |
| 6452 rv = callback.WaitForResult(); | 6457 rv = callback.WaitForResult(); |
| 6453 EXPECT_EQ(OK, rv); | 6458 EXPECT_THAT(rv, IsOk()); |
| 6454 | 6459 |
| 6455 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6460 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6456 ASSERT_TRUE(response); | 6461 ASSERT_TRUE(response); |
| 6457 | 6462 |
| 6458 EXPECT_TRUE(response->headers); | 6463 EXPECT_TRUE(response->headers); |
| 6459 std::string status_line = response->headers->GetStatusLine(); | 6464 std::string status_line = response->headers->GetStatusLine(); |
| 6460 EXPECT_EQ("HTTP/1.1 204 No Content", status_line); | 6465 EXPECT_EQ("HTTP/1.1 204 No Content", status_line); |
| 6461 | 6466 |
| 6462 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6467 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 6463 | 6468 |
| 6464 std::string response_data; | 6469 std::string response_data; |
| 6465 rv = ReadTransaction(trans.get(), &response_data); | 6470 rv = ReadTransaction(trans.get(), &response_data); |
| 6466 EXPECT_EQ(OK, rv); | 6471 EXPECT_THAT(rv, IsOk()); |
| 6467 EXPECT_EQ("", response_data); | 6472 EXPECT_EQ("", response_data); |
| 6468 | 6473 |
| 6469 // Empty the current queue. This is necessary because idle sockets are | 6474 // Empty the current queue. This is necessary because idle sockets are |
| 6470 // added to the connection pool asynchronously with a PostTask. | 6475 // added to the connection pool asynchronously with a PostTask. |
| 6471 base::RunLoop().RunUntilIdle(); | 6476 base::RunLoop().RunUntilIdle(); |
| 6472 | 6477 |
| 6473 // We now check to make sure the socket was added back to the pool. | 6478 // We now check to make sure the socket was added back to the pool. |
| 6474 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 6479 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 6475 } | 6480 } |
| 6476 | 6481 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6539 "hello world", "welcome" | 6544 "hello world", "welcome" |
| 6540 }; | 6545 }; |
| 6541 | 6546 |
| 6542 for (int i = 0; i < 2; ++i) { | 6547 for (int i = 0; i < 2; ++i) { |
| 6543 std::unique_ptr<HttpTransaction> trans( | 6548 std::unique_ptr<HttpTransaction> trans( |
| 6544 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6549 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 6545 | 6550 |
| 6546 TestCompletionCallback callback; | 6551 TestCompletionCallback callback; |
| 6547 | 6552 |
| 6548 int rv = trans->Start(&request[i], callback.callback(), BoundNetLog()); | 6553 int rv = trans->Start(&request[i], callback.callback(), BoundNetLog()); |
| 6549 EXPECT_EQ(ERR_IO_PENDING, rv); | 6554 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6550 | 6555 |
| 6551 rv = callback.WaitForResult(); | 6556 rv = callback.WaitForResult(); |
| 6552 EXPECT_EQ(OK, rv); | 6557 EXPECT_THAT(rv, IsOk()); |
| 6553 | 6558 |
| 6554 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6559 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6555 ASSERT_TRUE(response); | 6560 ASSERT_TRUE(response); |
| 6556 | 6561 |
| 6557 EXPECT_TRUE(response->headers); | 6562 EXPECT_TRUE(response->headers); |
| 6558 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6563 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 6559 | 6564 |
| 6560 std::string response_data; | 6565 std::string response_data; |
| 6561 rv = ReadTransaction(trans.get(), &response_data); | 6566 rv = ReadTransaction(trans.get(), &response_data); |
| 6562 EXPECT_EQ(OK, rv); | 6567 EXPECT_THAT(rv, IsOk()); |
| 6563 EXPECT_EQ(kExpectedResponseData[i], response_data); | 6568 EXPECT_EQ(kExpectedResponseData[i], response_data); |
| 6564 } | 6569 } |
| 6565 } | 6570 } |
| 6566 | 6571 |
| 6567 // Test the request-challenge-retry sequence for basic auth when there is | 6572 // Test the request-challenge-retry sequence for basic auth when there is |
| 6568 // an identity in the URL. The request should be sent as normal, but when | 6573 // an identity in the URL. The request should be sent as normal, but when |
| 6569 // it fails the identity from the URL is used to answer the challenge. | 6574 // it fails the identity from the URL is used to answer the challenge. |
| 6570 TEST_P(HttpNetworkTransactionTest, AuthIdentityInURL) { | 6575 TEST_P(HttpNetworkTransactionTest, AuthIdentityInURL) { |
| 6571 HttpRequestInfo request; | 6576 HttpRequestInfo request; |
| 6572 request.method = "GET"; | 6577 request.method = "GET"; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6613 | 6618 |
| 6614 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6619 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 6615 data_writes1, arraysize(data_writes1)); | 6620 data_writes1, arraysize(data_writes1)); |
| 6616 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 6621 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 6617 data_writes2, arraysize(data_writes2)); | 6622 data_writes2, arraysize(data_writes2)); |
| 6618 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6623 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 6619 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6624 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 6620 | 6625 |
| 6621 TestCompletionCallback callback1; | 6626 TestCompletionCallback callback1; |
| 6622 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6627 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 6623 EXPECT_EQ(ERR_IO_PENDING, rv); | 6628 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6624 rv = callback1.WaitForResult(); | 6629 rv = callback1.WaitForResult(); |
| 6625 EXPECT_EQ(OK, rv); | 6630 EXPECT_THAT(rv, IsOk()); |
| 6626 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 6631 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 6627 | 6632 |
| 6628 TestCompletionCallback callback2; | 6633 TestCompletionCallback callback2; |
| 6629 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 6634 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
| 6630 EXPECT_EQ(ERR_IO_PENDING, rv); | 6635 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6631 rv = callback2.WaitForResult(); | 6636 rv = callback2.WaitForResult(); |
| 6632 EXPECT_EQ(OK, rv); | 6637 EXPECT_THAT(rv, IsOk()); |
| 6633 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6638 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 6634 | 6639 |
| 6635 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6640 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6636 ASSERT_TRUE(response); | 6641 ASSERT_TRUE(response); |
| 6637 | 6642 |
| 6638 // There is no challenge info, since the identity in URL worked. | 6643 // There is no challenge info, since the identity in URL worked. |
| 6639 EXPECT_FALSE(response->auth_challenge); | 6644 EXPECT_FALSE(response->auth_challenge); |
| 6640 | 6645 |
| 6641 EXPECT_EQ(100, response->headers->GetContentLength()); | 6646 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 6642 | 6647 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6713 data_writes2, arraysize(data_writes2)); | 6718 data_writes2, arraysize(data_writes2)); |
| 6714 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 6719 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
| 6715 data_writes3, arraysize(data_writes3)); | 6720 data_writes3, arraysize(data_writes3)); |
| 6716 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6721 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 6717 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6722 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 6718 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 6723 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 6719 | 6724 |
| 6720 TestCompletionCallback callback1; | 6725 TestCompletionCallback callback1; |
| 6721 | 6726 |
| 6722 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6727 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 6723 EXPECT_EQ(ERR_IO_PENDING, rv); | 6728 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6724 | 6729 |
| 6725 rv = callback1.WaitForResult(); | 6730 rv = callback1.WaitForResult(); |
| 6726 EXPECT_EQ(OK, rv); | 6731 EXPECT_THAT(rv, IsOk()); |
| 6727 | 6732 |
| 6728 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 6733 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 6729 TestCompletionCallback callback2; | 6734 TestCompletionCallback callback2; |
| 6730 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 6735 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
| 6731 EXPECT_EQ(ERR_IO_PENDING, rv); | 6736 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6732 rv = callback2.WaitForResult(); | 6737 rv = callback2.WaitForResult(); |
| 6733 EXPECT_EQ(OK, rv); | 6738 EXPECT_THAT(rv, IsOk()); |
| 6734 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6739 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 6735 | 6740 |
| 6736 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6741 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6737 ASSERT_TRUE(response); | 6742 ASSERT_TRUE(response); |
| 6738 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 6743 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 6739 | 6744 |
| 6740 TestCompletionCallback callback3; | 6745 TestCompletionCallback callback3; |
| 6741 rv = trans->RestartWithAuth( | 6746 rv = trans->RestartWithAuth( |
| 6742 AuthCredentials(kFoo, kBar), callback3.callback()); | 6747 AuthCredentials(kFoo, kBar), callback3.callback()); |
| 6743 EXPECT_EQ(ERR_IO_PENDING, rv); | 6748 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6744 rv = callback3.WaitForResult(); | 6749 rv = callback3.WaitForResult(); |
| 6745 EXPECT_EQ(OK, rv); | 6750 EXPECT_THAT(rv, IsOk()); |
| 6746 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6751 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 6747 | 6752 |
| 6748 response = trans->GetResponseInfo(); | 6753 response = trans->GetResponseInfo(); |
| 6749 ASSERT_TRUE(response); | 6754 ASSERT_TRUE(response); |
| 6750 | 6755 |
| 6751 // There is no challenge info, since the identity worked. | 6756 // There is no challenge info, since the identity worked. |
| 6752 EXPECT_FALSE(response->auth_challenge); | 6757 EXPECT_FALSE(response->auth_challenge); |
| 6753 | 6758 |
| 6754 EXPECT_EQ(100, response->headers->GetContentLength()); | 6759 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 6755 | 6760 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6804 | 6809 |
| 6805 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6810 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 6806 data_writes1, arraysize(data_writes1)); | 6811 data_writes1, arraysize(data_writes1)); |
| 6807 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 6812 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
| 6808 data_writes3, arraysize(data_writes3)); | 6813 data_writes3, arraysize(data_writes3)); |
| 6809 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6814 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 6810 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 6815 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 6811 | 6816 |
| 6812 TestCompletionCallback callback1; | 6817 TestCompletionCallback callback1; |
| 6813 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6818 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 6814 EXPECT_EQ(ERR_IO_PENDING, rv); | 6819 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6815 rv = callback1.WaitForResult(); | 6820 rv = callback1.WaitForResult(); |
| 6816 EXPECT_EQ(OK, rv); | 6821 EXPECT_THAT(rv, IsOk()); |
| 6817 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6822 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 6818 | 6823 |
| 6819 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6824 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6820 ASSERT_TRUE(response); | 6825 ASSERT_TRUE(response); |
| 6821 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 6826 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 6822 | 6827 |
| 6823 TestCompletionCallback callback3; | 6828 TestCompletionCallback callback3; |
| 6824 rv = trans->RestartWithAuth( | 6829 rv = trans->RestartWithAuth( |
| 6825 AuthCredentials(kFoo, kBar), callback3.callback()); | 6830 AuthCredentials(kFoo, kBar), callback3.callback()); |
| 6826 EXPECT_EQ(ERR_IO_PENDING, rv); | 6831 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6827 rv = callback3.WaitForResult(); | 6832 rv = callback3.WaitForResult(); |
| 6828 EXPECT_EQ(OK, rv); | 6833 EXPECT_THAT(rv, IsOk()); |
| 6829 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 6834 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 6830 | 6835 |
| 6831 response = trans->GetResponseInfo(); | 6836 response = trans->GetResponseInfo(); |
| 6832 ASSERT_TRUE(response); | 6837 ASSERT_TRUE(response); |
| 6833 | 6838 |
| 6834 // There is no challenge info, since the identity worked. | 6839 // There is no challenge info, since the identity worked. |
| 6835 EXPECT_FALSE(response->auth_challenge); | 6840 EXPECT_FALSE(response->auth_challenge); |
| 6836 EXPECT_EQ(100, response->headers->GetContentLength()); | 6841 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 6837 | 6842 |
| 6838 // Empty the current queue. | 6843 // Empty the current queue. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6886 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6891 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 6887 data_writes1, arraysize(data_writes1)); | 6892 data_writes1, arraysize(data_writes1)); |
| 6888 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 6893 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 6889 data_writes2, arraysize(data_writes2)); | 6894 data_writes2, arraysize(data_writes2)); |
| 6890 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6895 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 6891 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6896 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 6892 | 6897 |
| 6893 TestCompletionCallback callback1; | 6898 TestCompletionCallback callback1; |
| 6894 | 6899 |
| 6895 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6900 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 6896 EXPECT_EQ(ERR_IO_PENDING, rv); | 6901 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6897 | 6902 |
| 6898 rv = callback1.WaitForResult(); | 6903 rv = callback1.WaitForResult(); |
| 6899 EXPECT_EQ(OK, rv); | 6904 EXPECT_THAT(rv, IsOk()); |
| 6900 | 6905 |
| 6901 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6906 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6902 ASSERT_TRUE(response); | 6907 ASSERT_TRUE(response); |
| 6903 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 6908 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 6904 | 6909 |
| 6905 TestCompletionCallback callback2; | 6910 TestCompletionCallback callback2; |
| 6906 | 6911 |
| 6907 rv = trans->RestartWithAuth( | 6912 rv = trans->RestartWithAuth( |
| 6908 AuthCredentials(kFoo, kBar), callback2.callback()); | 6913 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 6909 EXPECT_EQ(ERR_IO_PENDING, rv); | 6914 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6910 | 6915 |
| 6911 rv = callback2.WaitForResult(); | 6916 rv = callback2.WaitForResult(); |
| 6912 EXPECT_EQ(OK, rv); | 6917 EXPECT_THAT(rv, IsOk()); |
| 6913 | 6918 |
| 6914 response = trans->GetResponseInfo(); | 6919 response = trans->GetResponseInfo(); |
| 6915 ASSERT_TRUE(response); | 6920 ASSERT_TRUE(response); |
| 6916 EXPECT_FALSE(response->auth_challenge); | 6921 EXPECT_FALSE(response->auth_challenge); |
| 6917 EXPECT_EQ(100, response->headers->GetContentLength()); | 6922 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 6918 } | 6923 } |
| 6919 | 6924 |
| 6920 // ------------------------------------------------------------------------ | 6925 // ------------------------------------------------------------------------ |
| 6921 | 6926 |
| 6922 // Transaction 2: authenticate (foo2, bar2) on MyRealm2 | 6927 // Transaction 2: authenticate (foo2, bar2) on MyRealm2 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6968 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6973 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 6969 data_writes1, arraysize(data_writes1)); | 6974 data_writes1, arraysize(data_writes1)); |
| 6970 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 6975 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 6971 data_writes2, arraysize(data_writes2)); | 6976 data_writes2, arraysize(data_writes2)); |
| 6972 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6977 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 6973 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6978 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 6974 | 6979 |
| 6975 TestCompletionCallback callback1; | 6980 TestCompletionCallback callback1; |
| 6976 | 6981 |
| 6977 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6982 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 6978 EXPECT_EQ(ERR_IO_PENDING, rv); | 6983 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6979 | 6984 |
| 6980 rv = callback1.WaitForResult(); | 6985 rv = callback1.WaitForResult(); |
| 6981 EXPECT_EQ(OK, rv); | 6986 EXPECT_THAT(rv, IsOk()); |
| 6982 | 6987 |
| 6983 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6988 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6984 ASSERT_TRUE(response); | 6989 ASSERT_TRUE(response); |
| 6985 ASSERT_TRUE(response->auth_challenge); | 6990 ASSERT_TRUE(response->auth_challenge); |
| 6986 EXPECT_FALSE(response->auth_challenge->is_proxy); | 6991 EXPECT_FALSE(response->auth_challenge->is_proxy); |
| 6987 EXPECT_EQ("http://www.example.org", | 6992 EXPECT_EQ("http://www.example.org", |
| 6988 response->auth_challenge->challenger.Serialize()); | 6993 response->auth_challenge->challenger.Serialize()); |
| 6989 EXPECT_EQ("MyRealm2", response->auth_challenge->realm); | 6994 EXPECT_EQ("MyRealm2", response->auth_challenge->realm); |
| 6990 EXPECT_EQ(kBasicAuthScheme, response->auth_challenge->scheme); | 6995 EXPECT_EQ(kBasicAuthScheme, response->auth_challenge->scheme); |
| 6991 | 6996 |
| 6992 TestCompletionCallback callback2; | 6997 TestCompletionCallback callback2; |
| 6993 | 6998 |
| 6994 rv = trans->RestartWithAuth( | 6999 rv = trans->RestartWithAuth( |
| 6995 AuthCredentials(kFoo2, kBar2), callback2.callback()); | 7000 AuthCredentials(kFoo2, kBar2), callback2.callback()); |
| 6996 EXPECT_EQ(ERR_IO_PENDING, rv); | 7001 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 6997 | 7002 |
| 6998 rv = callback2.WaitForResult(); | 7003 rv = callback2.WaitForResult(); |
| 6999 EXPECT_EQ(OK, rv); | 7004 EXPECT_THAT(rv, IsOk()); |
| 7000 | 7005 |
| 7001 response = trans->GetResponseInfo(); | 7006 response = trans->GetResponseInfo(); |
| 7002 ASSERT_TRUE(response); | 7007 ASSERT_TRUE(response); |
| 7003 EXPECT_FALSE(response->auth_challenge); | 7008 EXPECT_FALSE(response->auth_challenge); |
| 7004 EXPECT_EQ(100, response->headers->GetContentLength()); | 7009 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 7005 } | 7010 } |
| 7006 | 7011 |
| 7007 // ------------------------------------------------------------------------ | 7012 // ------------------------------------------------------------------------ |
| 7008 | 7013 |
| 7009 // Transaction 3: Resend a request in MyRealm's protection space -- | 7014 // Transaction 3: Resend a request in MyRealm's protection space -- |
| (...skipping 24 matching lines...) Expand all Loading... |
| 7034 MockRead(SYNCHRONOUS, OK), | 7039 MockRead(SYNCHRONOUS, OK), |
| 7035 }; | 7040 }; |
| 7036 | 7041 |
| 7037 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 7042 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 7038 data_writes1, arraysize(data_writes1)); | 7043 data_writes1, arraysize(data_writes1)); |
| 7039 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7044 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 7040 | 7045 |
| 7041 TestCompletionCallback callback1; | 7046 TestCompletionCallback callback1; |
| 7042 | 7047 |
| 7043 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7048 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 7044 EXPECT_EQ(ERR_IO_PENDING, rv); | 7049 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7045 | 7050 |
| 7046 rv = callback1.WaitForResult(); | 7051 rv = callback1.WaitForResult(); |
| 7047 EXPECT_EQ(OK, rv); | 7052 EXPECT_THAT(rv, IsOk()); |
| 7048 | 7053 |
| 7049 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7054 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7050 ASSERT_TRUE(response); | 7055 ASSERT_TRUE(response); |
| 7051 | 7056 |
| 7052 EXPECT_FALSE(response->auth_challenge); | 7057 EXPECT_FALSE(response->auth_challenge); |
| 7053 EXPECT_EQ(100, response->headers->GetContentLength()); | 7058 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 7054 } | 7059 } |
| 7055 | 7060 |
| 7056 // ------------------------------------------------------------------------ | 7061 // ------------------------------------------------------------------------ |
| 7057 | 7062 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7099 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 7104 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 7100 data_writes1, arraysize(data_writes1)); | 7105 data_writes1, arraysize(data_writes1)); |
| 7101 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 7106 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 7102 data_writes2, arraysize(data_writes2)); | 7107 data_writes2, arraysize(data_writes2)); |
| 7103 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7108 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 7104 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 7109 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 7105 | 7110 |
| 7106 TestCompletionCallback callback1; | 7111 TestCompletionCallback callback1; |
| 7107 | 7112 |
| 7108 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7113 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 7109 EXPECT_EQ(ERR_IO_PENDING, rv); | 7114 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7110 | 7115 |
| 7111 rv = callback1.WaitForResult(); | 7116 rv = callback1.WaitForResult(); |
| 7112 EXPECT_EQ(OK, rv); | 7117 EXPECT_THAT(rv, IsOk()); |
| 7113 | 7118 |
| 7114 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 7119 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 7115 TestCompletionCallback callback2; | 7120 TestCompletionCallback callback2; |
| 7116 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 7121 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
| 7117 EXPECT_EQ(ERR_IO_PENDING, rv); | 7122 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7118 rv = callback2.WaitForResult(); | 7123 rv = callback2.WaitForResult(); |
| 7119 EXPECT_EQ(OK, rv); | 7124 EXPECT_THAT(rv, IsOk()); |
| 7120 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 7125 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 7121 | 7126 |
| 7122 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7127 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7123 ASSERT_TRUE(response); | 7128 ASSERT_TRUE(response); |
| 7124 EXPECT_FALSE(response->auth_challenge); | 7129 EXPECT_FALSE(response->auth_challenge); |
| 7125 EXPECT_EQ(100, response->headers->GetContentLength()); | 7130 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 7126 } | 7131 } |
| 7127 | 7132 |
| 7128 // ------------------------------------------------------------------------ | 7133 // ------------------------------------------------------------------------ |
| 7129 | 7134 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7192 data_writes2, arraysize(data_writes2)); | 7197 data_writes2, arraysize(data_writes2)); |
| 7193 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 7198 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
| 7194 data_writes3, arraysize(data_writes3)); | 7199 data_writes3, arraysize(data_writes3)); |
| 7195 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7200 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 7196 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 7201 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 7197 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 7202 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 7198 | 7203 |
| 7199 TestCompletionCallback callback1; | 7204 TestCompletionCallback callback1; |
| 7200 | 7205 |
| 7201 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7206 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 7202 EXPECT_EQ(ERR_IO_PENDING, rv); | 7207 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7203 | 7208 |
| 7204 rv = callback1.WaitForResult(); | 7209 rv = callback1.WaitForResult(); |
| 7205 EXPECT_EQ(OK, rv); | 7210 EXPECT_THAT(rv, IsOk()); |
| 7206 | 7211 |
| 7207 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 7212 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 7208 TestCompletionCallback callback2; | 7213 TestCompletionCallback callback2; |
| 7209 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 7214 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
| 7210 EXPECT_EQ(ERR_IO_PENDING, rv); | 7215 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7211 rv = callback2.WaitForResult(); | 7216 rv = callback2.WaitForResult(); |
| 7212 EXPECT_EQ(OK, rv); | 7217 EXPECT_THAT(rv, IsOk()); |
| 7213 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 7218 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 7214 | 7219 |
| 7215 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7220 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7216 ASSERT_TRUE(response); | 7221 ASSERT_TRUE(response); |
| 7217 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 7222 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 7218 | 7223 |
| 7219 TestCompletionCallback callback3; | 7224 TestCompletionCallback callback3; |
| 7220 | 7225 |
| 7221 rv = trans->RestartWithAuth( | 7226 rv = trans->RestartWithAuth( |
| 7222 AuthCredentials(kFoo3, kBar3), callback3.callback()); | 7227 AuthCredentials(kFoo3, kBar3), callback3.callback()); |
| 7223 EXPECT_EQ(ERR_IO_PENDING, rv); | 7228 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7224 | 7229 |
| 7225 rv = callback3.WaitForResult(); | 7230 rv = callback3.WaitForResult(); |
| 7226 EXPECT_EQ(OK, rv); | 7231 EXPECT_THAT(rv, IsOk()); |
| 7227 | 7232 |
| 7228 response = trans->GetResponseInfo(); | 7233 response = trans->GetResponseInfo(); |
| 7229 ASSERT_TRUE(response); | 7234 ASSERT_TRUE(response); |
| 7230 EXPECT_FALSE(response->auth_challenge); | 7235 EXPECT_FALSE(response->auth_challenge); |
| 7231 EXPECT_EQ(100, response->headers->GetContentLength()); | 7236 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 7232 } | 7237 } |
| 7233 } | 7238 } |
| 7234 | 7239 |
| 7235 // Tests that nonce count increments when multiple auth attempts | 7240 // Tests that nonce count increments when multiple auth attempts |
| 7236 // are started with the same nonce. | 7241 // are started with the same nonce. |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7288 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 7293 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 7289 data_writes1, arraysize(data_writes1)); | 7294 data_writes1, arraysize(data_writes1)); |
| 7290 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 7295 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 7291 data_writes2, arraysize(data_writes2)); | 7296 data_writes2, arraysize(data_writes2)); |
| 7292 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7297 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 7293 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 7298 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 7294 | 7299 |
| 7295 TestCompletionCallback callback1; | 7300 TestCompletionCallback callback1; |
| 7296 | 7301 |
| 7297 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7302 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 7298 EXPECT_EQ(ERR_IO_PENDING, rv); | 7303 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7299 | 7304 |
| 7300 rv = callback1.WaitForResult(); | 7305 rv = callback1.WaitForResult(); |
| 7301 EXPECT_EQ(OK, rv); | 7306 EXPECT_THAT(rv, IsOk()); |
| 7302 | 7307 |
| 7303 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7308 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7304 ASSERT_TRUE(response); | 7309 ASSERT_TRUE(response); |
| 7305 EXPECT_TRUE(CheckDigestServerAuth(response->auth_challenge.get())); | 7310 EXPECT_TRUE(CheckDigestServerAuth(response->auth_challenge.get())); |
| 7306 | 7311 |
| 7307 TestCompletionCallback callback2; | 7312 TestCompletionCallback callback2; |
| 7308 | 7313 |
| 7309 rv = trans->RestartWithAuth( | 7314 rv = trans->RestartWithAuth( |
| 7310 AuthCredentials(kFoo, kBar), callback2.callback()); | 7315 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 7311 EXPECT_EQ(ERR_IO_PENDING, rv); | 7316 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7312 | 7317 |
| 7313 rv = callback2.WaitForResult(); | 7318 rv = callback2.WaitForResult(); |
| 7314 EXPECT_EQ(OK, rv); | 7319 EXPECT_THAT(rv, IsOk()); |
| 7315 | 7320 |
| 7316 response = trans->GetResponseInfo(); | 7321 response = trans->GetResponseInfo(); |
| 7317 ASSERT_TRUE(response); | 7322 ASSERT_TRUE(response); |
| 7318 EXPECT_FALSE(response->auth_challenge); | 7323 EXPECT_FALSE(response->auth_challenge); |
| 7319 } | 7324 } |
| 7320 | 7325 |
| 7321 // ------------------------------------------------------------------------ | 7326 // ------------------------------------------------------------------------ |
| 7322 | 7327 |
| 7323 // Transaction 2: Request another resource in digestive's protection space. | 7328 // Transaction 2: Request another resource in digestive's protection space. |
| 7324 // This will preemptively add an Authorization header which should have an | 7329 // This will preemptively add an Authorization header which should have an |
| (...skipping 27 matching lines...) Expand all Loading... |
| 7352 MockRead(SYNCHRONOUS, OK), | 7357 MockRead(SYNCHRONOUS, OK), |
| 7353 }; | 7358 }; |
| 7354 | 7359 |
| 7355 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 7360 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
| 7356 data_writes1, arraysize(data_writes1)); | 7361 data_writes1, arraysize(data_writes1)); |
| 7357 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7362 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 7358 | 7363 |
| 7359 TestCompletionCallback callback1; | 7364 TestCompletionCallback callback1; |
| 7360 | 7365 |
| 7361 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7366 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 7362 EXPECT_EQ(ERR_IO_PENDING, rv); | 7367 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7363 | 7368 |
| 7364 rv = callback1.WaitForResult(); | 7369 rv = callback1.WaitForResult(); |
| 7365 EXPECT_EQ(OK, rv); | 7370 EXPECT_THAT(rv, IsOk()); |
| 7366 | 7371 |
| 7367 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7372 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7368 ASSERT_TRUE(response); | 7373 ASSERT_TRUE(response); |
| 7369 EXPECT_FALSE(response->auth_challenge); | 7374 EXPECT_FALSE(response->auth_challenge); |
| 7370 } | 7375 } |
| 7371 } | 7376 } |
| 7372 | 7377 |
| 7373 // Test the ResetStateForRestart() private method. | 7378 // Test the ResetStateForRestart() private method. |
| 7374 TEST_P(HttpNetworkTransactionTest, ResetStateForRestart) { | 7379 TEST_P(HttpNetworkTransactionTest, ResetStateForRestart) { |
| 7375 // Create a transaction (the dependencies aren't important). | 7380 // Create a transaction (the dependencies aren't important). |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7445 SSLSocketDataProvider ssl(ASYNC, OK); | 7450 SSLSocketDataProvider ssl(ASYNC, OK); |
| 7446 | 7451 |
| 7447 session_deps_.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); | 7452 session_deps_.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); |
| 7448 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7453 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7449 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bad); | 7454 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bad); |
| 7450 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 7455 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 7451 | 7456 |
| 7452 TestCompletionCallback callback; | 7457 TestCompletionCallback callback; |
| 7453 | 7458 |
| 7454 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7459 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7455 EXPECT_EQ(ERR_IO_PENDING, rv); | 7460 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7456 | 7461 |
| 7457 rv = callback.WaitForResult(); | 7462 rv = callback.WaitForResult(); |
| 7458 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, rv); | 7463 EXPECT_THAT(rv, IsError(ERR_CERT_AUTHORITY_INVALID)); |
| 7459 | 7464 |
| 7460 rv = trans->RestartIgnoringLastError(callback.callback()); | 7465 rv = trans->RestartIgnoringLastError(callback.callback()); |
| 7461 EXPECT_EQ(ERR_IO_PENDING, rv); | 7466 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7462 | 7467 |
| 7463 rv = callback.WaitForResult(); | 7468 rv = callback.WaitForResult(); |
| 7464 EXPECT_EQ(OK, rv); | 7469 EXPECT_THAT(rv, IsOk()); |
| 7465 | 7470 |
| 7466 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7471 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7467 | 7472 |
| 7468 ASSERT_TRUE(response); | 7473 ASSERT_TRUE(response); |
| 7469 EXPECT_EQ(100, response->headers->GetContentLength()); | 7474 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 7470 } | 7475 } |
| 7471 | 7476 |
| 7472 // Test HTTPS connections to a site with a bad certificate, going through a | 7477 // Test HTTPS connections to a site with a bad certificate, going through a |
| 7473 // proxy | 7478 // proxy |
| 7474 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaProxy) { | 7479 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaProxy) { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7523 TestCompletionCallback callback; | 7528 TestCompletionCallback callback; |
| 7524 | 7529 |
| 7525 for (int i = 0; i < 2; i++) { | 7530 for (int i = 0; i < 2; i++) { |
| 7526 session_deps_.socket_factory->ResetNextMockIndexes(); | 7531 session_deps_.socket_factory->ResetNextMockIndexes(); |
| 7527 | 7532 |
| 7528 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7533 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7529 std::unique_ptr<HttpTransaction> trans( | 7534 std::unique_ptr<HttpTransaction> trans( |
| 7530 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7535 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 7531 | 7536 |
| 7532 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7537 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7533 EXPECT_EQ(ERR_IO_PENDING, rv); | 7538 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7534 | 7539 |
| 7535 rv = callback.WaitForResult(); | 7540 rv = callback.WaitForResult(); |
| 7536 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, rv); | 7541 EXPECT_THAT(rv, IsError(ERR_CERT_AUTHORITY_INVALID)); |
| 7537 | 7542 |
| 7538 rv = trans->RestartIgnoringLastError(callback.callback()); | 7543 rv = trans->RestartIgnoringLastError(callback.callback()); |
| 7539 EXPECT_EQ(ERR_IO_PENDING, rv); | 7544 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7540 | 7545 |
| 7541 rv = callback.WaitForResult(); | 7546 rv = callback.WaitForResult(); |
| 7542 EXPECT_EQ(OK, rv); | 7547 EXPECT_THAT(rv, IsOk()); |
| 7543 | 7548 |
| 7544 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7549 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7545 | 7550 |
| 7546 ASSERT_TRUE(response); | 7551 ASSERT_TRUE(response); |
| 7547 EXPECT_EQ(100, response->headers->GetContentLength()); | 7552 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 7548 } | 7553 } |
| 7549 } | 7554 } |
| 7550 | 7555 |
| 7551 | 7556 |
| 7552 // Test HTTPS connections to a site, going through an HTTPS proxy | 7557 // Test HTTPS connections to a site, going through an HTTPS proxy |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7587 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 7592 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
| 7588 session_deps_.socket_factory->AddSSLSocketDataProvider(&tunnel_ssl); | 7593 session_deps_.socket_factory->AddSSLSocketDataProvider(&tunnel_ssl); |
| 7589 | 7594 |
| 7590 TestCompletionCallback callback; | 7595 TestCompletionCallback callback; |
| 7591 | 7596 |
| 7592 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7597 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7593 std::unique_ptr<HttpTransaction> trans( | 7598 std::unique_ptr<HttpTransaction> trans( |
| 7594 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7599 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 7595 | 7600 |
| 7596 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7601 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7597 EXPECT_EQ(ERR_IO_PENDING, rv); | 7602 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7598 | 7603 |
| 7599 rv = callback.WaitForResult(); | 7604 rv = callback.WaitForResult(); |
| 7600 EXPECT_EQ(OK, rv); | 7605 EXPECT_THAT(rv, IsOk()); |
| 7601 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7606 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7602 | 7607 |
| 7603 ASSERT_TRUE(response); | 7608 ASSERT_TRUE(response); |
| 7604 | 7609 |
| 7605 EXPECT_TRUE(response->headers->IsKeepAlive()); | 7610 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 7606 EXPECT_EQ(200, response->headers->response_code()); | 7611 EXPECT_EQ(200, response->headers->response_code()); |
| 7607 EXPECT_EQ(100, response->headers->GetContentLength()); | 7612 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 7608 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 7613 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 7609 | 7614 |
| 7610 LoadTimingInfo load_timing_info; | 7615 LoadTimingInfo load_timing_info; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7645 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7650 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7646 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 7651 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
| 7647 | 7652 |
| 7648 TestCompletionCallback callback; | 7653 TestCompletionCallback callback; |
| 7649 | 7654 |
| 7650 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7655 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7651 std::unique_ptr<HttpTransaction> trans( | 7656 std::unique_ptr<HttpTransaction> trans( |
| 7652 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7657 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 7653 | 7658 |
| 7654 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7659 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7655 EXPECT_EQ(ERR_IO_PENDING, rv); | 7660 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7656 | 7661 |
| 7657 rv = callback.WaitForResult(); | 7662 rv = callback.WaitForResult(); |
| 7658 EXPECT_EQ(OK, rv); | 7663 EXPECT_THAT(rv, IsOk()); |
| 7659 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7664 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7660 | 7665 |
| 7661 ASSERT_TRUE(response); | 7666 ASSERT_TRUE(response); |
| 7662 | 7667 |
| 7663 EXPECT_EQ(302, response->headers->response_code()); | 7668 EXPECT_EQ(302, response->headers->response_code()); |
| 7664 std::string url; | 7669 std::string url; |
| 7665 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 7670 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
| 7666 EXPECT_EQ("http://login.example.com/", url); | 7671 EXPECT_EQ("http://login.example.com/", url); |
| 7667 | 7672 |
| 7668 // In the case of redirects from proxies, HttpNetworkTransaction returns | 7673 // In the case of redirects from proxies, HttpNetworkTransaction returns |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7726 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7731 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7727 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 7732 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
| 7728 | 7733 |
| 7729 TestCompletionCallback callback; | 7734 TestCompletionCallback callback; |
| 7730 | 7735 |
| 7731 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7736 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7732 std::unique_ptr<HttpTransaction> trans( | 7737 std::unique_ptr<HttpTransaction> trans( |
| 7733 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7738 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 7734 | 7739 |
| 7735 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7740 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7736 EXPECT_EQ(ERR_IO_PENDING, rv); | 7741 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7737 | 7742 |
| 7738 rv = callback.WaitForResult(); | 7743 rv = callback.WaitForResult(); |
| 7739 EXPECT_EQ(OK, rv); | 7744 EXPECT_THAT(rv, IsOk()); |
| 7740 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7745 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7741 | 7746 |
| 7742 ASSERT_TRUE(response); | 7747 ASSERT_TRUE(response); |
| 7743 | 7748 |
| 7744 EXPECT_EQ(302, response->headers->response_code()); | 7749 EXPECT_EQ(302, response->headers->response_code()); |
| 7745 std::string url; | 7750 std::string url; |
| 7746 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 7751 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
| 7747 EXPECT_EQ("http://login.example.com/", url); | 7752 EXPECT_EQ("http://login.example.com/", url); |
| 7748 } | 7753 } |
| 7749 | 7754 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 7777 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7782 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7778 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 7783 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
| 7779 | 7784 |
| 7780 TestCompletionCallback callback; | 7785 TestCompletionCallback callback; |
| 7781 | 7786 |
| 7782 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7787 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7783 std::unique_ptr<HttpTransaction> trans( | 7788 std::unique_ptr<HttpTransaction> trans( |
| 7784 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7789 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 7785 | 7790 |
| 7786 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7791 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7787 EXPECT_EQ(ERR_IO_PENDING, rv); | 7792 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7788 | 7793 |
| 7789 rv = callback.WaitForResult(); | 7794 rv = callback.WaitForResult(); |
| 7790 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 7795 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
| 7791 | 7796 |
| 7792 // TODO(juliatuttle): Anything else to check here? | 7797 // TODO(juliatuttle): Anything else to check here? |
| 7793 } | 7798 } |
| 7794 | 7799 |
| 7795 // Test that a SPDY proxy's response to a CONNECT request is filtered. | 7800 // Test that a SPDY proxy's response to a CONNECT request is filtered. |
| 7796 TEST_P(HttpNetworkTransactionTest, | 7801 TEST_P(HttpNetworkTransactionTest, |
| 7797 ErrorResponseToHttpsConnectViaSpdyProxy) { | 7802 ErrorResponseToHttpsConnectViaSpdyProxy) { |
| 7798 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 7803 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
| 7799 | 7804 |
| 7800 HttpRequestInfo request; | 7805 HttpRequestInfo request; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7833 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7838 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7834 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 7839 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
| 7835 | 7840 |
| 7836 TestCompletionCallback callback; | 7841 TestCompletionCallback callback; |
| 7837 | 7842 |
| 7838 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7843 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7839 std::unique_ptr<HttpTransaction> trans( | 7844 std::unique_ptr<HttpTransaction> trans( |
| 7840 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7845 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 7841 | 7846 |
| 7842 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7847 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7843 EXPECT_EQ(ERR_IO_PENDING, rv); | 7848 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7844 | 7849 |
| 7845 rv = callback.WaitForResult(); | 7850 rv = callback.WaitForResult(); |
| 7846 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 7851 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
| 7847 | 7852 |
| 7848 // TODO(juliatuttle): Anything else to check here? | 7853 // TODO(juliatuttle): Anything else to check here? |
| 7849 } | 7854 } |
| 7850 | 7855 |
| 7851 // Test the request-challenge-retry sequence for basic auth, through | 7856 // Test the request-challenge-retry sequence for basic auth, through |
| 7852 // a SPDY proxy over a single SPDY session. | 7857 // a SPDY proxy over a single SPDY session. |
| 7853 TEST_P(HttpNetworkTransactionTest, BasicAuthSpdyProxy) { | 7858 TEST_P(HttpNetworkTransactionTest, BasicAuthSpdyProxy) { |
| 7854 HttpRequestInfo request; | 7859 HttpRequestInfo request; |
| 7855 request.method = "GET"; | 7860 request.method = "GET"; |
| 7856 request.url = GURL("https://www.example.org/"); | 7861 request.url = GURL("https://www.example.org/"); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7931 // Vanilla SSL to the server | 7936 // Vanilla SSL to the server |
| 7932 SSLSocketDataProvider server(ASYNC, OK); | 7937 SSLSocketDataProvider server(ASYNC, OK); |
| 7933 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); | 7938 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); |
| 7934 | 7939 |
| 7935 TestCompletionCallback callback1; | 7940 TestCompletionCallback callback1; |
| 7936 | 7941 |
| 7937 std::unique_ptr<HttpTransaction> trans( | 7942 std::unique_ptr<HttpTransaction> trans( |
| 7938 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7943 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 7939 | 7944 |
| 7940 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 7945 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 7941 EXPECT_EQ(ERR_IO_PENDING, rv); | 7946 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7942 | 7947 |
| 7943 rv = callback1.WaitForResult(); | 7948 rv = callback1.WaitForResult(); |
| 7944 EXPECT_EQ(OK, rv); | 7949 EXPECT_THAT(rv, IsOk()); |
| 7945 TestNetLogEntry::List entries; | 7950 TestNetLogEntry::List entries; |
| 7946 log.GetEntries(&entries); | 7951 log.GetEntries(&entries); |
| 7947 size_t pos = ExpectLogContainsSomewhere( | 7952 size_t pos = ExpectLogContainsSomewhere( |
| 7948 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 7953 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 7949 NetLog::PHASE_NONE); | 7954 NetLog::PHASE_NONE); |
| 7950 ExpectLogContainsSomewhere( | 7955 ExpectLogContainsSomewhere( |
| 7951 entries, pos, | 7956 entries, pos, |
| 7952 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 7957 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 7953 NetLog::PHASE_NONE); | 7958 NetLog::PHASE_NONE); |
| 7954 | 7959 |
| 7955 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7960 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7956 ASSERT_TRUE(response); | 7961 ASSERT_TRUE(response); |
| 7957 ASSERT_TRUE(response->headers); | 7962 ASSERT_TRUE(response->headers); |
| 7958 EXPECT_EQ(407, response->headers->response_code()); | 7963 EXPECT_EQ(407, response->headers->response_code()); |
| 7959 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 7964 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 7960 EXPECT_TRUE(response->auth_challenge); | 7965 EXPECT_TRUE(response->auth_challenge); |
| 7961 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); | 7966 EXPECT_TRUE(CheckBasicSecureProxyAuth(response->auth_challenge.get())); |
| 7962 | 7967 |
| 7963 TestCompletionCallback callback2; | 7968 TestCompletionCallback callback2; |
| 7964 | 7969 |
| 7965 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), | 7970 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), |
| 7966 callback2.callback()); | 7971 callback2.callback()); |
| 7967 EXPECT_EQ(ERR_IO_PENDING, rv); | 7972 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 7968 | 7973 |
| 7969 rv = callback2.WaitForResult(); | 7974 rv = callback2.WaitForResult(); |
| 7970 EXPECT_EQ(OK, rv); | 7975 EXPECT_THAT(rv, IsOk()); |
| 7971 | 7976 |
| 7972 response = trans->GetResponseInfo(); | 7977 response = trans->GetResponseInfo(); |
| 7973 ASSERT_TRUE(response); | 7978 ASSERT_TRUE(response); |
| 7974 | 7979 |
| 7975 EXPECT_TRUE(response->headers->IsKeepAlive()); | 7980 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 7976 EXPECT_EQ(200, response->headers->response_code()); | 7981 EXPECT_EQ(200, response->headers->response_code()); |
| 7977 EXPECT_EQ(5, response->headers->GetContentLength()); | 7982 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 7978 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 7983 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 7979 | 7984 |
| 7980 // The password prompt info should not be set. | 7985 // The password prompt info should not be set. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8047 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8052 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 8048 // Negotiate SPDY to the proxy | 8053 // Negotiate SPDY to the proxy |
| 8049 SSLSocketDataProvider proxy(ASYNC, OK); | 8054 SSLSocketDataProvider proxy(ASYNC, OK); |
| 8050 proxy.SetNextProto(GetProtocol()); | 8055 proxy.SetNextProto(GetProtocol()); |
| 8051 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 8056 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
| 8052 | 8057 |
| 8053 std::unique_ptr<HttpTransaction> trans( | 8058 std::unique_ptr<HttpTransaction> trans( |
| 8054 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8059 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 8055 TestCompletionCallback callback; | 8060 TestCompletionCallback callback; |
| 8056 int rv = trans->Start(&request, callback.callback(), log.bound()); | 8061 int rv = trans->Start(&request, callback.callback(), log.bound()); |
| 8057 EXPECT_EQ(ERR_IO_PENDING, rv); | 8062 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8058 | 8063 |
| 8059 rv = callback.WaitForResult(); | 8064 rv = callback.WaitForResult(); |
| 8060 EXPECT_EQ(OK, rv); | 8065 EXPECT_THAT(rv, IsOk()); |
| 8061 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8066 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 8062 | 8067 |
| 8063 std::unique_ptr<HttpTransaction> push_trans( | 8068 std::unique_ptr<HttpTransaction> push_trans( |
| 8064 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8069 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 8065 rv = push_trans->Start(&push_request, callback.callback(), log.bound()); | 8070 rv = push_trans->Start(&push_request, callback.callback(), log.bound()); |
| 8066 EXPECT_EQ(ERR_IO_PENDING, rv); | 8071 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8067 | 8072 |
| 8068 rv = callback.WaitForResult(); | 8073 rv = callback.WaitForResult(); |
| 8069 EXPECT_EQ(OK, rv); | 8074 EXPECT_THAT(rv, IsOk()); |
| 8070 const HttpResponseInfo* push_response = push_trans->GetResponseInfo(); | 8075 const HttpResponseInfo* push_response = push_trans->GetResponseInfo(); |
| 8071 | 8076 |
| 8072 ASSERT_TRUE(response); | 8077 ASSERT_TRUE(response); |
| 8073 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8078 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 8074 | 8079 |
| 8075 EXPECT_EQ(200, response->headers->response_code()); | 8080 EXPECT_EQ(200, response->headers->response_code()); |
| 8076 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 8081 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 8077 | 8082 |
| 8078 std::string response_data; | 8083 std::string response_data; |
| 8079 rv = ReadTransaction(trans.get(), &response_data); | 8084 rv = ReadTransaction(trans.get(), &response_data); |
| 8080 EXPECT_EQ(OK, rv); | 8085 EXPECT_THAT(rv, IsOk()); |
| 8081 EXPECT_EQ("hello!", response_data); | 8086 EXPECT_EQ("hello!", response_data); |
| 8082 | 8087 |
| 8083 LoadTimingInfo load_timing_info; | 8088 LoadTimingInfo load_timing_info; |
| 8084 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 8089 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 8085 TestLoadTimingNotReusedWithPac(load_timing_info, | 8090 TestLoadTimingNotReusedWithPac(load_timing_info, |
| 8086 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 8091 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 8087 | 8092 |
| 8088 // Verify the pushed stream. | 8093 // Verify the pushed stream. |
| 8089 EXPECT_TRUE(push_response->headers); | 8094 EXPECT_TRUE(push_response->headers); |
| 8090 EXPECT_EQ(200, push_response->headers->response_code()); | 8095 EXPECT_EQ(200, push_response->headers->response_code()); |
| 8091 | 8096 |
| 8092 rv = ReadTransaction(push_trans.get(), &response_data); | 8097 rv = ReadTransaction(push_trans.get(), &response_data); |
| 8093 EXPECT_EQ(OK, rv); | 8098 EXPECT_THAT(rv, IsOk()); |
| 8094 EXPECT_EQ("pushed", response_data); | 8099 EXPECT_EQ("pushed", response_data); |
| 8095 | 8100 |
| 8096 LoadTimingInfo push_load_timing_info; | 8101 LoadTimingInfo push_load_timing_info; |
| 8097 EXPECT_TRUE(push_trans->GetLoadTimingInfo(&push_load_timing_info)); | 8102 EXPECT_TRUE(push_trans->GetLoadTimingInfo(&push_load_timing_info)); |
| 8098 TestLoadTimingReusedWithPac(push_load_timing_info); | 8103 TestLoadTimingReusedWithPac(push_load_timing_info); |
| 8099 // The transactions should share a socket ID, despite being for different | 8104 // The transactions should share a socket ID, despite being for different |
| 8100 // origins. | 8105 // origins. |
| 8101 EXPECT_EQ(load_timing_info.socket_log_id, | 8106 EXPECT_EQ(load_timing_info.socket_log_id, |
| 8102 push_load_timing_info.socket_log_id); | 8107 push_load_timing_info.socket_log_id); |
| 8103 | 8108 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8158 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8163 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 8159 // Negotiate SPDY to the proxy | 8164 // Negotiate SPDY to the proxy |
| 8160 SSLSocketDataProvider proxy(ASYNC, OK); | 8165 SSLSocketDataProvider proxy(ASYNC, OK); |
| 8161 proxy.SetNextProto(GetProtocol()); | 8166 proxy.SetNextProto(GetProtocol()); |
| 8162 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 8167 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
| 8163 | 8168 |
| 8164 std::unique_ptr<HttpTransaction> trans( | 8169 std::unique_ptr<HttpTransaction> trans( |
| 8165 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8170 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 8166 TestCompletionCallback callback; | 8171 TestCompletionCallback callback; |
| 8167 int rv = trans->Start(&request, callback.callback(), log.bound()); | 8172 int rv = trans->Start(&request, callback.callback(), log.bound()); |
| 8168 EXPECT_EQ(ERR_IO_PENDING, rv); | 8173 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8169 | 8174 |
| 8170 rv = callback.WaitForResult(); | 8175 rv = callback.WaitForResult(); |
| 8171 EXPECT_EQ(OK, rv); | 8176 EXPECT_THAT(rv, IsOk()); |
| 8172 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8177 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 8173 | 8178 |
| 8174 ASSERT_TRUE(response); | 8179 ASSERT_TRUE(response); |
| 8175 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8180 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 8176 | 8181 |
| 8177 EXPECT_EQ(200, response->headers->response_code()); | 8182 EXPECT_EQ(200, response->headers->response_code()); |
| 8178 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 8183 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 8179 | 8184 |
| 8180 std::string response_data; | 8185 std::string response_data; |
| 8181 rv = ReadTransaction(trans.get(), &response_data); | 8186 rv = ReadTransaction(trans.get(), &response_data); |
| 8182 EXPECT_EQ(OK, rv); | 8187 EXPECT_THAT(rv, IsOk()); |
| 8183 EXPECT_EQ("hello!", response_data); | 8188 EXPECT_EQ("hello!", response_data); |
| 8184 | 8189 |
| 8185 trans.reset(); | 8190 trans.reset(); |
| 8186 session->CloseAllConnections(); | 8191 session->CloseAllConnections(); |
| 8187 } | 8192 } |
| 8188 | 8193 |
| 8189 // Test that an explicitly trusted SPDY proxy can push same-origin HTTPS | 8194 // Test that an explicitly trusted SPDY proxy can push same-origin HTTPS |
| 8190 // resources. | 8195 // resources. |
| 8191 TEST_P(HttpNetworkTransactionTest, SameOriginProxyPushCorrectness) { | 8196 TEST_P(HttpNetworkTransactionTest, SameOriginProxyPushCorrectness) { |
| 8192 // Configure the proxy delegate to allow cross-origin SPDY pushes. | 8197 // Configure the proxy delegate to allow cross-origin SPDY pushes. |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8244 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8249 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 8245 // Negotiate SPDY to the proxy | 8250 // Negotiate SPDY to the proxy |
| 8246 SSLSocketDataProvider proxy(ASYNC, OK); | 8251 SSLSocketDataProvider proxy(ASYNC, OK); |
| 8247 proxy.SetNextProto(GetProtocol()); | 8252 proxy.SetNextProto(GetProtocol()); |
| 8248 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 8253 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
| 8249 | 8254 |
| 8250 std::unique_ptr<HttpTransaction> trans( | 8255 std::unique_ptr<HttpTransaction> trans( |
| 8251 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8256 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 8252 TestCompletionCallback callback; | 8257 TestCompletionCallback callback; |
| 8253 int rv = trans->Start(&request, callback.callback(), log.bound()); | 8258 int rv = trans->Start(&request, callback.callback(), log.bound()); |
| 8254 EXPECT_EQ(ERR_IO_PENDING, rv); | 8259 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8255 | 8260 |
| 8256 rv = callback.WaitForResult(); | 8261 rv = callback.WaitForResult(); |
| 8257 EXPECT_EQ(OK, rv); | 8262 EXPECT_THAT(rv, IsOk()); |
| 8258 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8263 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 8259 | 8264 |
| 8260 ASSERT_TRUE(response); | 8265 ASSERT_TRUE(response); |
| 8261 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8266 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 8262 | 8267 |
| 8263 EXPECT_EQ(200, response->headers->response_code()); | 8268 EXPECT_EQ(200, response->headers->response_code()); |
| 8264 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 8269 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 8265 | 8270 |
| 8266 std::string response_data; | 8271 std::string response_data; |
| 8267 rv = ReadTransaction(trans.get(), &response_data); | 8272 rv = ReadTransaction(trans.get(), &response_data); |
| 8268 EXPECT_EQ(OK, rv); | 8273 EXPECT_THAT(rv, IsOk()); |
| 8269 EXPECT_EQ("hello!", response_data); | 8274 EXPECT_EQ("hello!", response_data); |
| 8270 | 8275 |
| 8271 trans.reset(); | 8276 trans.reset(); |
| 8272 session->CloseAllConnections(); | 8277 session->CloseAllConnections(); |
| 8273 } | 8278 } |
| 8274 | 8279 |
| 8275 // Test HTTPS connections to a site with a bad certificate, going through an | 8280 // Test HTTPS connections to a site with a bad certificate, going through an |
| 8276 // HTTPS proxy | 8281 // HTTPS proxy |
| 8277 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaHttpsProxy) { | 8282 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaHttpsProxy) { |
| 8278 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 8283 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8330 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8335 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8331 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8336 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 8332 | 8337 |
| 8333 TestCompletionCallback callback; | 8338 TestCompletionCallback callback; |
| 8334 | 8339 |
| 8335 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8340 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8336 std::unique_ptr<HttpTransaction> trans( | 8341 std::unique_ptr<HttpTransaction> trans( |
| 8337 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8342 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 8338 | 8343 |
| 8339 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8344 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8340 EXPECT_EQ(ERR_IO_PENDING, rv); | 8345 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8341 | 8346 |
| 8342 rv = callback.WaitForResult(); | 8347 rv = callback.WaitForResult(); |
| 8343 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, rv); | 8348 EXPECT_THAT(rv, IsError(ERR_CERT_AUTHORITY_INVALID)); |
| 8344 | 8349 |
| 8345 rv = trans->RestartIgnoringLastError(callback.callback()); | 8350 rv = trans->RestartIgnoringLastError(callback.callback()); |
| 8346 EXPECT_EQ(ERR_IO_PENDING, rv); | 8351 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8347 | 8352 |
| 8348 rv = callback.WaitForResult(); | 8353 rv = callback.WaitForResult(); |
| 8349 EXPECT_EQ(OK, rv); | 8354 EXPECT_THAT(rv, IsOk()); |
| 8350 | 8355 |
| 8351 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8356 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 8352 | 8357 |
| 8353 ASSERT_TRUE(response); | 8358 ASSERT_TRUE(response); |
| 8354 EXPECT_EQ(100, response->headers->GetContentLength()); | 8359 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 8355 } | 8360 } |
| 8356 | 8361 |
| 8357 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgent) { | 8362 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgent) { |
| 8358 HttpRequestInfo request; | 8363 HttpRequestInfo request; |
| 8359 request.method = "GET"; | 8364 request.method = "GET"; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 8381 MockRead(SYNCHRONOUS, OK), | 8386 MockRead(SYNCHRONOUS, OK), |
| 8382 }; | 8387 }; |
| 8383 | 8388 |
| 8384 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8389 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8385 data_writes, arraysize(data_writes)); | 8390 data_writes, arraysize(data_writes)); |
| 8386 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8391 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8387 | 8392 |
| 8388 TestCompletionCallback callback; | 8393 TestCompletionCallback callback; |
| 8389 | 8394 |
| 8390 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8395 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8391 EXPECT_EQ(ERR_IO_PENDING, rv); | 8396 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8392 | 8397 |
| 8393 rv = callback.WaitForResult(); | 8398 rv = callback.WaitForResult(); |
| 8394 EXPECT_EQ(OK, rv); | 8399 EXPECT_THAT(rv, IsOk()); |
| 8395 } | 8400 } |
| 8396 | 8401 |
| 8397 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgentOverTunnel) { | 8402 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgentOverTunnel) { |
| 8398 HttpRequestInfo request; | 8403 HttpRequestInfo request; |
| 8399 request.method = "GET"; | 8404 request.method = "GET"; |
| 8400 request.url = GURL("https://www.example.org/"); | 8405 request.url = GURL("https://www.example.org/"); |
| 8401 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, | 8406 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, |
| 8402 "Chromium Ultra Awesome X Edition"); | 8407 "Chromium Ultra Awesome X Edition"); |
| 8403 | 8408 |
| 8404 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 8409 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 8420 MockRead("Proxy-Connection: close\r\n\r\n"), | 8425 MockRead("Proxy-Connection: close\r\n\r\n"), |
| 8421 }; | 8426 }; |
| 8422 | 8427 |
| 8423 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8428 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8424 data_writes, arraysize(data_writes)); | 8429 data_writes, arraysize(data_writes)); |
| 8425 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8430 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8426 | 8431 |
| 8427 TestCompletionCallback callback; | 8432 TestCompletionCallback callback; |
| 8428 | 8433 |
| 8429 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8434 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8430 EXPECT_EQ(ERR_IO_PENDING, rv); | 8435 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8431 | 8436 |
| 8432 rv = callback.WaitForResult(); | 8437 rv = callback.WaitForResult(); |
| 8433 EXPECT_EQ(OK, rv); | 8438 EXPECT_THAT(rv, IsOk()); |
| 8434 } | 8439 } |
| 8435 | 8440 |
| 8436 TEST_P(HttpNetworkTransactionTest, BuildRequest_Referer) { | 8441 TEST_P(HttpNetworkTransactionTest, BuildRequest_Referer) { |
| 8437 HttpRequestInfo request; | 8442 HttpRequestInfo request; |
| 8438 request.method = "GET"; | 8443 request.method = "GET"; |
| 8439 request.url = GURL("http://www.example.org/"); | 8444 request.url = GURL("http://www.example.org/"); |
| 8440 request.load_flags = 0; | 8445 request.load_flags = 0; |
| 8441 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, | 8446 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, |
| 8442 "http://the.previous.site.com/"); | 8447 "http://the.previous.site.com/"); |
| 8443 | 8448 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 8461 MockRead(SYNCHRONOUS, OK), | 8466 MockRead(SYNCHRONOUS, OK), |
| 8462 }; | 8467 }; |
| 8463 | 8468 |
| 8464 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8469 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8465 data_writes, arraysize(data_writes)); | 8470 data_writes, arraysize(data_writes)); |
| 8466 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8471 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8467 | 8472 |
| 8468 TestCompletionCallback callback; | 8473 TestCompletionCallback callback; |
| 8469 | 8474 |
| 8470 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8475 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8471 EXPECT_EQ(ERR_IO_PENDING, rv); | 8476 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8472 | 8477 |
| 8473 rv = callback.WaitForResult(); | 8478 rv = callback.WaitForResult(); |
| 8474 EXPECT_EQ(OK, rv); | 8479 EXPECT_THAT(rv, IsOk()); |
| 8475 } | 8480 } |
| 8476 | 8481 |
| 8477 TEST_P(HttpNetworkTransactionTest, BuildRequest_PostContentLengthZero) { | 8482 TEST_P(HttpNetworkTransactionTest, BuildRequest_PostContentLengthZero) { |
| 8478 HttpRequestInfo request; | 8483 HttpRequestInfo request; |
| 8479 request.method = "POST"; | 8484 request.method = "POST"; |
| 8480 request.url = GURL("http://www.example.org/"); | 8485 request.url = GURL("http://www.example.org/"); |
| 8481 | 8486 |
| 8482 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8487 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8483 std::unique_ptr<HttpTransaction> trans( | 8488 std::unique_ptr<HttpTransaction> trans( |
| 8484 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8489 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 8499 MockRead(SYNCHRONOUS, OK), | 8504 MockRead(SYNCHRONOUS, OK), |
| 8500 }; | 8505 }; |
| 8501 | 8506 |
| 8502 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8507 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8503 data_writes, arraysize(data_writes)); | 8508 data_writes, arraysize(data_writes)); |
| 8504 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8509 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8505 | 8510 |
| 8506 TestCompletionCallback callback; | 8511 TestCompletionCallback callback; |
| 8507 | 8512 |
| 8508 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8513 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8509 EXPECT_EQ(ERR_IO_PENDING, rv); | 8514 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8510 | 8515 |
| 8511 rv = callback.WaitForResult(); | 8516 rv = callback.WaitForResult(); |
| 8512 EXPECT_EQ(OK, rv); | 8517 EXPECT_THAT(rv, IsOk()); |
| 8513 } | 8518 } |
| 8514 | 8519 |
| 8515 TEST_P(HttpNetworkTransactionTest, BuildRequest_PutContentLengthZero) { | 8520 TEST_P(HttpNetworkTransactionTest, BuildRequest_PutContentLengthZero) { |
| 8516 HttpRequestInfo request; | 8521 HttpRequestInfo request; |
| 8517 request.method = "PUT"; | 8522 request.method = "PUT"; |
| 8518 request.url = GURL("http://www.example.org/"); | 8523 request.url = GURL("http://www.example.org/"); |
| 8519 | 8524 |
| 8520 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8525 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8521 std::unique_ptr<HttpTransaction> trans( | 8526 std::unique_ptr<HttpTransaction> trans( |
| 8522 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8527 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 8537 MockRead(SYNCHRONOUS, OK), | 8542 MockRead(SYNCHRONOUS, OK), |
| 8538 }; | 8543 }; |
| 8539 | 8544 |
| 8540 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8545 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8541 data_writes, arraysize(data_writes)); | 8546 data_writes, arraysize(data_writes)); |
| 8542 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8547 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8543 | 8548 |
| 8544 TestCompletionCallback callback; | 8549 TestCompletionCallback callback; |
| 8545 | 8550 |
| 8546 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8551 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8547 EXPECT_EQ(ERR_IO_PENDING, rv); | 8552 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8548 | 8553 |
| 8549 rv = callback.WaitForResult(); | 8554 rv = callback.WaitForResult(); |
| 8550 EXPECT_EQ(OK, rv); | 8555 EXPECT_THAT(rv, IsOk()); |
| 8551 } | 8556 } |
| 8552 | 8557 |
| 8553 TEST_P(HttpNetworkTransactionTest, BuildRequest_HeadContentLengthZero) { | 8558 TEST_P(HttpNetworkTransactionTest, BuildRequest_HeadContentLengthZero) { |
| 8554 HttpRequestInfo request; | 8559 HttpRequestInfo request; |
| 8555 request.method = "HEAD"; | 8560 request.method = "HEAD"; |
| 8556 request.url = GURL("http://www.example.org/"); | 8561 request.url = GURL("http://www.example.org/"); |
| 8557 | 8562 |
| 8558 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8563 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8559 std::unique_ptr<HttpTransaction> trans( | 8564 std::unique_ptr<HttpTransaction> trans( |
| 8560 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8565 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 8573 MockRead(SYNCHRONOUS, OK), | 8578 MockRead(SYNCHRONOUS, OK), |
| 8574 }; | 8579 }; |
| 8575 | 8580 |
| 8576 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8581 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8577 data_writes, arraysize(data_writes)); | 8582 data_writes, arraysize(data_writes)); |
| 8578 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8583 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8579 | 8584 |
| 8580 TestCompletionCallback callback; | 8585 TestCompletionCallback callback; |
| 8581 | 8586 |
| 8582 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8587 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8583 EXPECT_EQ(ERR_IO_PENDING, rv); | 8588 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8584 | 8589 |
| 8585 rv = callback.WaitForResult(); | 8590 rv = callback.WaitForResult(); |
| 8586 EXPECT_EQ(OK, rv); | 8591 EXPECT_THAT(rv, IsOk()); |
| 8587 } | 8592 } |
| 8588 | 8593 |
| 8589 TEST_P(HttpNetworkTransactionTest, BuildRequest_CacheControlNoCache) { | 8594 TEST_P(HttpNetworkTransactionTest, BuildRequest_CacheControlNoCache) { |
| 8590 HttpRequestInfo request; | 8595 HttpRequestInfo request; |
| 8591 request.method = "GET"; | 8596 request.method = "GET"; |
| 8592 request.url = GURL("http://www.example.org/"); | 8597 request.url = GURL("http://www.example.org/"); |
| 8593 request.load_flags = LOAD_BYPASS_CACHE; | 8598 request.load_flags = LOAD_BYPASS_CACHE; |
| 8594 | 8599 |
| 8595 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8600 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8596 std::unique_ptr<HttpTransaction> trans( | 8601 std::unique_ptr<HttpTransaction> trans( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 8613 MockRead(SYNCHRONOUS, OK), | 8618 MockRead(SYNCHRONOUS, OK), |
| 8614 }; | 8619 }; |
| 8615 | 8620 |
| 8616 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8621 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8617 data_writes, arraysize(data_writes)); | 8622 data_writes, arraysize(data_writes)); |
| 8618 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8623 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8619 | 8624 |
| 8620 TestCompletionCallback callback; | 8625 TestCompletionCallback callback; |
| 8621 | 8626 |
| 8622 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8627 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8623 EXPECT_EQ(ERR_IO_PENDING, rv); | 8628 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8624 | 8629 |
| 8625 rv = callback.WaitForResult(); | 8630 rv = callback.WaitForResult(); |
| 8626 EXPECT_EQ(OK, rv); | 8631 EXPECT_THAT(rv, IsOk()); |
| 8627 } | 8632 } |
| 8628 | 8633 |
| 8629 TEST_P(HttpNetworkTransactionTest, | 8634 TEST_P(HttpNetworkTransactionTest, |
| 8630 BuildRequest_CacheControlValidateCache) { | 8635 BuildRequest_CacheControlValidateCache) { |
| 8631 HttpRequestInfo request; | 8636 HttpRequestInfo request; |
| 8632 request.method = "GET"; | 8637 request.method = "GET"; |
| 8633 request.url = GURL("http://www.example.org/"); | 8638 request.url = GURL("http://www.example.org/"); |
| 8634 request.load_flags = LOAD_VALIDATE_CACHE; | 8639 request.load_flags = LOAD_VALIDATE_CACHE; |
| 8635 | 8640 |
| 8636 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8641 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 8653 MockRead(SYNCHRONOUS, OK), | 8658 MockRead(SYNCHRONOUS, OK), |
| 8654 }; | 8659 }; |
| 8655 | 8660 |
| 8656 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8661 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8657 data_writes, arraysize(data_writes)); | 8662 data_writes, arraysize(data_writes)); |
| 8658 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8663 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8659 | 8664 |
| 8660 TestCompletionCallback callback; | 8665 TestCompletionCallback callback; |
| 8661 | 8666 |
| 8662 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8667 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8663 EXPECT_EQ(ERR_IO_PENDING, rv); | 8668 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8664 | 8669 |
| 8665 rv = callback.WaitForResult(); | 8670 rv = callback.WaitForResult(); |
| 8666 EXPECT_EQ(OK, rv); | 8671 EXPECT_THAT(rv, IsOk()); |
| 8667 } | 8672 } |
| 8668 | 8673 |
| 8669 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeaders) { | 8674 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeaders) { |
| 8670 HttpRequestInfo request; | 8675 HttpRequestInfo request; |
| 8671 request.method = "GET"; | 8676 request.method = "GET"; |
| 8672 request.url = GURL("http://www.example.org/"); | 8677 request.url = GURL("http://www.example.org/"); |
| 8673 request.extra_headers.SetHeader("FooHeader", "Bar"); | 8678 request.extra_headers.SetHeader("FooHeader", "Bar"); |
| 8674 | 8679 |
| 8675 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8680 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8676 std::unique_ptr<HttpTransaction> trans( | 8681 std::unique_ptr<HttpTransaction> trans( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 8692 MockRead(SYNCHRONOUS, OK), | 8697 MockRead(SYNCHRONOUS, OK), |
| 8693 }; | 8698 }; |
| 8694 | 8699 |
| 8695 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8700 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8696 data_writes, arraysize(data_writes)); | 8701 data_writes, arraysize(data_writes)); |
| 8697 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8702 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8698 | 8703 |
| 8699 TestCompletionCallback callback; | 8704 TestCompletionCallback callback; |
| 8700 | 8705 |
| 8701 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8706 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8702 EXPECT_EQ(ERR_IO_PENDING, rv); | 8707 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8703 | 8708 |
| 8704 rv = callback.WaitForResult(); | 8709 rv = callback.WaitForResult(); |
| 8705 EXPECT_EQ(OK, rv); | 8710 EXPECT_THAT(rv, IsOk()); |
| 8706 } | 8711 } |
| 8707 | 8712 |
| 8708 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeadersStripped) { | 8713 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeadersStripped) { |
| 8709 HttpRequestInfo request; | 8714 HttpRequestInfo request; |
| 8710 request.method = "GET"; | 8715 request.method = "GET"; |
| 8711 request.url = GURL("http://www.example.org/"); | 8716 request.url = GURL("http://www.example.org/"); |
| 8712 request.extra_headers.SetHeader("referer", "www.foo.com"); | 8717 request.extra_headers.SetHeader("referer", "www.foo.com"); |
| 8713 request.extra_headers.SetHeader("hEllo", "Kitty"); | 8718 request.extra_headers.SetHeader("hEllo", "Kitty"); |
| 8714 request.extra_headers.SetHeader("FoO", "bar"); | 8719 request.extra_headers.SetHeader("FoO", "bar"); |
| 8715 | 8720 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 8735 MockRead(SYNCHRONOUS, OK), | 8740 MockRead(SYNCHRONOUS, OK), |
| 8736 }; | 8741 }; |
| 8737 | 8742 |
| 8738 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8743 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8739 data_writes, arraysize(data_writes)); | 8744 data_writes, arraysize(data_writes)); |
| 8740 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8745 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8741 | 8746 |
| 8742 TestCompletionCallback callback; | 8747 TestCompletionCallback callback; |
| 8743 | 8748 |
| 8744 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8749 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8745 EXPECT_EQ(ERR_IO_PENDING, rv); | 8750 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8746 | 8751 |
| 8747 rv = callback.WaitForResult(); | 8752 rv = callback.WaitForResult(); |
| 8748 EXPECT_EQ(OK, rv); | 8753 EXPECT_THAT(rv, IsOk()); |
| 8749 } | 8754 } |
| 8750 | 8755 |
| 8751 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { | 8756 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { |
| 8752 HttpRequestInfo request; | 8757 HttpRequestInfo request; |
| 8753 request.method = "GET"; | 8758 request.method = "GET"; |
| 8754 request.url = GURL("http://www.example.org/"); | 8759 request.url = GURL("http://www.example.org/"); |
| 8755 request.load_flags = 0; | 8760 request.load_flags = 0; |
| 8756 | 8761 |
| 8757 session_deps_.proxy_service = | 8762 session_deps_.proxy_service = |
| 8758 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080"); | 8763 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080"); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 8781 MockRead(SYNCHRONOUS, OK) | 8786 MockRead(SYNCHRONOUS, OK) |
| 8782 }; | 8787 }; |
| 8783 | 8788 |
| 8784 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8789 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8785 data_writes, arraysize(data_writes)); | 8790 data_writes, arraysize(data_writes)); |
| 8786 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8791 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8787 | 8792 |
| 8788 TestCompletionCallback callback; | 8793 TestCompletionCallback callback; |
| 8789 | 8794 |
| 8790 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8795 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8791 EXPECT_EQ(ERR_IO_PENDING, rv); | 8796 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8792 | 8797 |
| 8793 rv = callback.WaitForResult(); | 8798 rv = callback.WaitForResult(); |
| 8794 EXPECT_EQ(OK, rv); | 8799 EXPECT_THAT(rv, IsOk()); |
| 8795 | 8800 |
| 8796 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8801 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 8797 ASSERT_TRUE(response); | 8802 ASSERT_TRUE(response); |
| 8798 | 8803 |
| 8799 LoadTimingInfo load_timing_info; | 8804 LoadTimingInfo load_timing_info; |
| 8800 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 8805 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 8801 TestLoadTimingNotReusedWithPac(load_timing_info, | 8806 TestLoadTimingNotReusedWithPac(load_timing_info, |
| 8802 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 8807 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 8803 | 8808 |
| 8804 std::string response_text; | 8809 std::string response_text; |
| 8805 rv = ReadTransaction(trans.get(), &response_text); | 8810 rv = ReadTransaction(trans.get(), &response_text); |
| 8806 EXPECT_EQ(OK, rv); | 8811 EXPECT_THAT(rv, IsOk()); |
| 8807 EXPECT_EQ("Payload", response_text); | 8812 EXPECT_EQ("Payload", response_text); |
| 8808 } | 8813 } |
| 8809 | 8814 |
| 8810 TEST_P(HttpNetworkTransactionTest, SOCKS4_SSL_GET) { | 8815 TEST_P(HttpNetworkTransactionTest, SOCKS4_SSL_GET) { |
| 8811 HttpRequestInfo request; | 8816 HttpRequestInfo request; |
| 8812 request.method = "GET"; | 8817 request.method = "GET"; |
| 8813 request.url = GURL("https://www.example.org/"); | 8818 request.url = GURL("https://www.example.org/"); |
| 8814 request.load_flags = 0; | 8819 request.load_flags = 0; |
| 8815 | 8820 |
| 8816 session_deps_.proxy_service = | 8821 session_deps_.proxy_service = |
| (...skipping 28 matching lines...) Expand all Loading... |
| 8845 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8850 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8846 data_writes, arraysize(data_writes)); | 8851 data_writes, arraysize(data_writes)); |
| 8847 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8852 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8848 | 8853 |
| 8849 SSLSocketDataProvider ssl(ASYNC, OK); | 8854 SSLSocketDataProvider ssl(ASYNC, OK); |
| 8850 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8855 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 8851 | 8856 |
| 8852 TestCompletionCallback callback; | 8857 TestCompletionCallback callback; |
| 8853 | 8858 |
| 8854 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8859 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8855 EXPECT_EQ(ERR_IO_PENDING, rv); | 8860 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8856 | 8861 |
| 8857 rv = callback.WaitForResult(); | 8862 rv = callback.WaitForResult(); |
| 8858 EXPECT_EQ(OK, rv); | 8863 EXPECT_THAT(rv, IsOk()); |
| 8859 | 8864 |
| 8860 LoadTimingInfo load_timing_info; | 8865 LoadTimingInfo load_timing_info; |
| 8861 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 8866 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 8862 TestLoadTimingNotReusedWithPac(load_timing_info, | 8867 TestLoadTimingNotReusedWithPac(load_timing_info, |
| 8863 CONNECT_TIMING_HAS_SSL_TIMES); | 8868 CONNECT_TIMING_HAS_SSL_TIMES); |
| 8864 | 8869 |
| 8865 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8870 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 8866 ASSERT_TRUE(response); | 8871 ASSERT_TRUE(response); |
| 8867 | 8872 |
| 8868 std::string response_text; | 8873 std::string response_text; |
| 8869 rv = ReadTransaction(trans.get(), &response_text); | 8874 rv = ReadTransaction(trans.get(), &response_text); |
| 8870 EXPECT_EQ(OK, rv); | 8875 EXPECT_THAT(rv, IsOk()); |
| 8871 EXPECT_EQ("Payload", response_text); | 8876 EXPECT_EQ("Payload", response_text); |
| 8872 } | 8877 } |
| 8873 | 8878 |
| 8874 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET_no_PAC) { | 8879 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET_no_PAC) { |
| 8875 HttpRequestInfo request; | 8880 HttpRequestInfo request; |
| 8876 request.method = "GET"; | 8881 request.method = "GET"; |
| 8877 request.url = GURL("http://www.example.org/"); | 8882 request.url = GURL("http://www.example.org/"); |
| 8878 request.load_flags = 0; | 8883 request.load_flags = 0; |
| 8879 | 8884 |
| 8880 session_deps_.proxy_service = | 8885 session_deps_.proxy_service = |
| (...skipping 23 matching lines...) Expand all Loading... |
| 8904 MockRead(SYNCHRONOUS, OK) | 8909 MockRead(SYNCHRONOUS, OK) |
| 8905 }; | 8910 }; |
| 8906 | 8911 |
| 8907 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8912 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8908 data_writes, arraysize(data_writes)); | 8913 data_writes, arraysize(data_writes)); |
| 8909 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8914 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8910 | 8915 |
| 8911 TestCompletionCallback callback; | 8916 TestCompletionCallback callback; |
| 8912 | 8917 |
| 8913 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8918 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8914 EXPECT_EQ(ERR_IO_PENDING, rv); | 8919 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8915 | 8920 |
| 8916 rv = callback.WaitForResult(); | 8921 rv = callback.WaitForResult(); |
| 8917 EXPECT_EQ(OK, rv); | 8922 EXPECT_THAT(rv, IsOk()); |
| 8918 | 8923 |
| 8919 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8924 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 8920 ASSERT_TRUE(response); | 8925 ASSERT_TRUE(response); |
| 8921 | 8926 |
| 8922 LoadTimingInfo load_timing_info; | 8927 LoadTimingInfo load_timing_info; |
| 8923 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 8928 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 8924 TestLoadTimingNotReused(load_timing_info, | 8929 TestLoadTimingNotReused(load_timing_info, |
| 8925 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 8930 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 8926 | 8931 |
| 8927 std::string response_text; | 8932 std::string response_text; |
| 8928 rv = ReadTransaction(trans.get(), &response_text); | 8933 rv = ReadTransaction(trans.get(), &response_text); |
| 8929 EXPECT_EQ(OK, rv); | 8934 EXPECT_THAT(rv, IsOk()); |
| 8930 EXPECT_EQ("Payload", response_text); | 8935 EXPECT_EQ("Payload", response_text); |
| 8931 } | 8936 } |
| 8932 | 8937 |
| 8933 TEST_P(HttpNetworkTransactionTest, SOCKS5_HTTP_GET) { | 8938 TEST_P(HttpNetworkTransactionTest, SOCKS5_HTTP_GET) { |
| 8934 HttpRequestInfo request; | 8939 HttpRequestInfo request; |
| 8935 request.method = "GET"; | 8940 request.method = "GET"; |
| 8936 request.url = GURL("http://www.example.org/"); | 8941 request.url = GURL("http://www.example.org/"); |
| 8937 request.load_flags = 0; | 8942 request.load_flags = 0; |
| 8938 | 8943 |
| 8939 session_deps_.proxy_service = | 8944 session_deps_.proxy_service = |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8976 MockRead(SYNCHRONOUS, OK) | 8981 MockRead(SYNCHRONOUS, OK) |
| 8977 }; | 8982 }; |
| 8978 | 8983 |
| 8979 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8984 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 8980 data_writes, arraysize(data_writes)); | 8985 data_writes, arraysize(data_writes)); |
| 8981 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8986 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8982 | 8987 |
| 8983 TestCompletionCallback callback; | 8988 TestCompletionCallback callback; |
| 8984 | 8989 |
| 8985 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8990 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8986 EXPECT_EQ(ERR_IO_PENDING, rv); | 8991 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 8987 | 8992 |
| 8988 rv = callback.WaitForResult(); | 8993 rv = callback.WaitForResult(); |
| 8989 EXPECT_EQ(OK, rv); | 8994 EXPECT_THAT(rv, IsOk()); |
| 8990 | 8995 |
| 8991 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8996 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 8992 ASSERT_TRUE(response); | 8997 ASSERT_TRUE(response); |
| 8993 | 8998 |
| 8994 LoadTimingInfo load_timing_info; | 8999 LoadTimingInfo load_timing_info; |
| 8995 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 9000 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 8996 TestLoadTimingNotReusedWithPac(load_timing_info, | 9001 TestLoadTimingNotReusedWithPac(load_timing_info, |
| 8997 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 9002 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 8998 | 9003 |
| 8999 std::string response_text; | 9004 std::string response_text; |
| 9000 rv = ReadTransaction(trans.get(), &response_text); | 9005 rv = ReadTransaction(trans.get(), &response_text); |
| 9001 EXPECT_EQ(OK, rv); | 9006 EXPECT_THAT(rv, IsOk()); |
| 9002 EXPECT_EQ("Payload", response_text); | 9007 EXPECT_EQ("Payload", response_text); |
| 9003 } | 9008 } |
| 9004 | 9009 |
| 9005 TEST_P(HttpNetworkTransactionTest, SOCKS5_SSL_GET) { | 9010 TEST_P(HttpNetworkTransactionTest, SOCKS5_SSL_GET) { |
| 9006 HttpRequestInfo request; | 9011 HttpRequestInfo request; |
| 9007 request.method = "GET"; | 9012 request.method = "GET"; |
| 9008 request.url = GURL("https://www.example.org/"); | 9013 request.url = GURL("https://www.example.org/"); |
| 9009 request.load_flags = 0; | 9014 request.load_flags = 0; |
| 9010 | 9015 |
| 9011 session_deps_.proxy_service = | 9016 session_deps_.proxy_service = |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9053 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 9058 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 9054 data_writes, arraysize(data_writes)); | 9059 data_writes, arraysize(data_writes)); |
| 9055 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9060 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 9056 | 9061 |
| 9057 SSLSocketDataProvider ssl(ASYNC, OK); | 9062 SSLSocketDataProvider ssl(ASYNC, OK); |
| 9058 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 9063 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 9059 | 9064 |
| 9060 TestCompletionCallback callback; | 9065 TestCompletionCallback callback; |
| 9061 | 9066 |
| 9062 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9067 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9063 EXPECT_EQ(ERR_IO_PENDING, rv); | 9068 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9064 | 9069 |
| 9065 rv = callback.WaitForResult(); | 9070 rv = callback.WaitForResult(); |
| 9066 EXPECT_EQ(OK, rv); | 9071 EXPECT_THAT(rv, IsOk()); |
| 9067 | 9072 |
| 9068 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9073 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 9069 ASSERT_TRUE(response); | 9074 ASSERT_TRUE(response); |
| 9070 | 9075 |
| 9071 LoadTimingInfo load_timing_info; | 9076 LoadTimingInfo load_timing_info; |
| 9072 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 9077 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 9073 TestLoadTimingNotReusedWithPac(load_timing_info, | 9078 TestLoadTimingNotReusedWithPac(load_timing_info, |
| 9074 CONNECT_TIMING_HAS_SSL_TIMES); | 9079 CONNECT_TIMING_HAS_SSL_TIMES); |
| 9075 | 9080 |
| 9076 std::string response_text; | 9081 std::string response_text; |
| 9077 rv = ReadTransaction(trans.get(), &response_text); | 9082 rv = ReadTransaction(trans.get(), &response_text); |
| 9078 EXPECT_EQ(OK, rv); | 9083 EXPECT_THAT(rv, IsOk()); |
| 9079 EXPECT_EQ("Payload", response_text); | 9084 EXPECT_EQ("Payload", response_text); |
| 9080 } | 9085 } |
| 9081 | 9086 |
| 9082 namespace { | 9087 namespace { |
| 9083 | 9088 |
| 9084 // Tests that for connection endpoints the group names are correctly set. | 9089 // Tests that for connection endpoints the group names are correctly set. |
| 9085 | 9090 |
| 9086 struct GroupNameTest { | 9091 struct GroupNameTest { |
| 9087 std::string proxy_server; | 9092 std::string proxy_server; |
| 9088 std::string url; | 9093 std::string url; |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9335 // connecting to both proxies (myproxy:70 and foobar:80). | 9340 // connecting to both proxies (myproxy:70 and foobar:80). |
| 9336 session_deps_.host_resolver->rules()->AddSimulatedFailure("*"); | 9341 session_deps_.host_resolver->rules()->AddSimulatedFailure("*"); |
| 9337 | 9342 |
| 9338 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9343 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9339 std::unique_ptr<HttpTransaction> trans( | 9344 std::unique_ptr<HttpTransaction> trans( |
| 9340 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9345 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9341 | 9346 |
| 9342 TestCompletionCallback callback; | 9347 TestCompletionCallback callback; |
| 9343 | 9348 |
| 9344 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9349 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9345 EXPECT_EQ(ERR_IO_PENDING, rv); | 9350 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9346 | 9351 |
| 9347 rv = callback.WaitForResult(); | 9352 rv = callback.WaitForResult(); |
| 9348 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 9353 EXPECT_THAT(rv, IsError(ERR_PROXY_CONNECTION_FAILED)); |
| 9349 } | 9354 } |
| 9350 | 9355 |
| 9351 // Base test to make sure that when the load flags for a request specify to | 9356 // Base test to make sure that when the load flags for a request specify to |
| 9352 // bypass the cache, the DNS cache is not used. | 9357 // bypass the cache, the DNS cache is not used. |
| 9353 void HttpNetworkTransactionTest::BypassHostCacheOnRefreshHelper( | 9358 void HttpNetworkTransactionTest::BypassHostCacheOnRefreshHelper( |
| 9354 int load_flags) { | 9359 int load_flags) { |
| 9355 // Issue a request, asking to bypass the cache(s). | 9360 // Issue a request, asking to bypass the cache(s). |
| 9356 HttpRequestInfo request; | 9361 HttpRequestInfo request; |
| 9357 request.method = "GET"; | 9362 request.method = "GET"; |
| 9358 request.load_flags = load_flags; | 9363 request.load_flags = load_flags; |
| 9359 request.url = GURL("http://www.example.org/"); | 9364 request.url = GURL("http://www.example.org/"); |
| 9360 | 9365 |
| 9361 // Select a host resolver that does caching. | 9366 // Select a host resolver that does caching. |
| 9362 session_deps_.host_resolver.reset(new MockCachingHostResolver); | 9367 session_deps_.host_resolver.reset(new MockCachingHostResolver); |
| 9363 | 9368 |
| 9364 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9369 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9365 std::unique_ptr<HttpTransaction> trans( | 9370 std::unique_ptr<HttpTransaction> trans( |
| 9366 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9371 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9367 | 9372 |
| 9368 // Warm up the host cache so it has an entry for "www.example.org". | 9373 // Warm up the host cache so it has an entry for "www.example.org". |
| 9369 AddressList addrlist; | 9374 AddressList addrlist; |
| 9370 TestCompletionCallback callback; | 9375 TestCompletionCallback callback; |
| 9371 int rv = session_deps_.host_resolver->Resolve( | 9376 int rv = session_deps_.host_resolver->Resolve( |
| 9372 HostResolver::RequestInfo(HostPortPair("www.example.org", 80)), | 9377 HostResolver::RequestInfo(HostPortPair("www.example.org", 80)), |
| 9373 DEFAULT_PRIORITY, &addrlist, callback.callback(), NULL, BoundNetLog()); | 9378 DEFAULT_PRIORITY, &addrlist, callback.callback(), NULL, BoundNetLog()); |
| 9374 EXPECT_EQ(ERR_IO_PENDING, rv); | 9379 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9375 rv = callback.WaitForResult(); | 9380 rv = callback.WaitForResult(); |
| 9376 EXPECT_EQ(OK, rv); | 9381 EXPECT_THAT(rv, IsOk()); |
| 9377 | 9382 |
| 9378 // Verify that it was added to host cache, by doing a subsequent async lookup | 9383 // Verify that it was added to host cache, by doing a subsequent async lookup |
| 9379 // and confirming it completes synchronously. | 9384 // and confirming it completes synchronously. |
| 9380 rv = session_deps_.host_resolver->Resolve( | 9385 rv = session_deps_.host_resolver->Resolve( |
| 9381 HostResolver::RequestInfo(HostPortPair("www.example.org", 80)), | 9386 HostResolver::RequestInfo(HostPortPair("www.example.org", 80)), |
| 9382 DEFAULT_PRIORITY, &addrlist, callback.callback(), NULL, BoundNetLog()); | 9387 DEFAULT_PRIORITY, &addrlist, callback.callback(), NULL, BoundNetLog()); |
| 9383 ASSERT_EQ(OK, rv); | 9388 ASSERT_THAT(rv, IsOk()); |
| 9384 | 9389 |
| 9385 // Inject a failure the next time that "www.example.org" is resolved. This way | 9390 // Inject a failure the next time that "www.example.org" is resolved. This way |
| 9386 // we can tell if the next lookup hit the cache, or the "network". | 9391 // we can tell if the next lookup hit the cache, or the "network". |
| 9387 // (cache --> success, "network" --> failure). | 9392 // (cache --> success, "network" --> failure). |
| 9388 session_deps_.host_resolver->rules()->AddSimulatedFailure("www.example.org"); | 9393 session_deps_.host_resolver->rules()->AddSimulatedFailure("www.example.org"); |
| 9389 | 9394 |
| 9390 // Connect up a mock socket which will fail with ERR_UNEXPECTED during the | 9395 // Connect up a mock socket which will fail with ERR_UNEXPECTED during the |
| 9391 // first read -- this won't be reached as the host resolution will fail first. | 9396 // first read -- this won't be reached as the host resolution will fail first. |
| 9392 MockRead data_reads[] = { MockRead(SYNCHRONOUS, ERR_UNEXPECTED) }; | 9397 MockRead data_reads[] = { MockRead(SYNCHRONOUS, ERR_UNEXPECTED) }; |
| 9393 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9398 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 9394 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9399 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 9395 | 9400 |
| 9396 // Run the request. | 9401 // Run the request. |
| 9397 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9402 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9398 ASSERT_EQ(ERR_IO_PENDING, rv); | 9403 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9399 rv = callback.WaitForResult(); | 9404 rv = callback.WaitForResult(); |
| 9400 | 9405 |
| 9401 // If we bypassed the cache, we would have gotten a failure while resolving | 9406 // If we bypassed the cache, we would have gotten a failure while resolving |
| 9402 // "www.example.org". | 9407 // "www.example.org". |
| 9403 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); | 9408 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); |
| 9404 } | 9409 } |
| 9405 | 9410 |
| 9406 // There are multiple load flags that should trigger the host cache bypass. | 9411 // There are multiple load flags that should trigger the host cache bypass. |
| 9407 // Test each in isolation: | 9412 // Test each in isolation: |
| 9408 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh1) { | 9413 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh1) { |
| 9409 BypassHostCacheOnRefreshHelper(LOAD_BYPASS_CACHE); | 9414 BypassHostCacheOnRefreshHelper(LOAD_BYPASS_CACHE); |
| 9410 } | 9415 } |
| 9411 | 9416 |
| 9412 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh2) { | 9417 TEST_P(HttpNetworkTransactionTest, BypassHostCacheOnRefresh2) { |
| 9413 BypassHostCacheOnRefreshHelper(LOAD_VALIDATE_CACHE); | 9418 BypassHostCacheOnRefreshHelper(LOAD_VALIDATE_CACHE); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 9431 write_failure, arraysize(write_failure)); | 9436 write_failure, arraysize(write_failure)); |
| 9432 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9437 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 9433 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9438 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9434 | 9439 |
| 9435 TestCompletionCallback callback; | 9440 TestCompletionCallback callback; |
| 9436 | 9441 |
| 9437 std::unique_ptr<HttpTransaction> trans( | 9442 std::unique_ptr<HttpTransaction> trans( |
| 9438 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9443 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9439 | 9444 |
| 9440 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9445 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9441 EXPECT_EQ(ERR_IO_PENDING, rv); | 9446 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9442 | 9447 |
| 9443 rv = callback.WaitForResult(); | 9448 rv = callback.WaitForResult(); |
| 9444 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 9449 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
| 9445 | 9450 |
| 9446 IPEndPoint endpoint; | 9451 IPEndPoint endpoint; |
| 9447 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); | 9452 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); |
| 9448 EXPECT_LT(0u, endpoint.address().size()); | 9453 EXPECT_LT(0u, endpoint.address().size()); |
| 9449 } | 9454 } |
| 9450 | 9455 |
| 9451 // Check that a connection closed after the start of the headers finishes ok. | 9456 // Check that a connection closed after the start of the headers finishes ok. |
| 9452 TEST_P(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { | 9457 TEST_P(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { |
| 9453 HttpRequestInfo request; | 9458 HttpRequestInfo request; |
| 9454 request.method = "GET"; | 9459 request.method = "GET"; |
| 9455 request.url = GURL("http://www.foo.com/"); | 9460 request.url = GURL("http://www.foo.com/"); |
| 9456 request.load_flags = 0; | 9461 request.load_flags = 0; |
| 9457 | 9462 |
| 9458 MockRead data_reads[] = { | 9463 MockRead data_reads[] = { |
| 9459 MockRead("HTTP/1."), | 9464 MockRead("HTTP/1."), |
| 9460 MockRead(SYNCHRONOUS, OK), | 9465 MockRead(SYNCHRONOUS, OK), |
| 9461 }; | 9466 }; |
| 9462 | 9467 |
| 9463 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9468 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 9464 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9469 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 9465 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9470 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9466 | 9471 |
| 9467 TestCompletionCallback callback; | 9472 TestCompletionCallback callback; |
| 9468 | 9473 |
| 9469 std::unique_ptr<HttpTransaction> trans( | 9474 std::unique_ptr<HttpTransaction> trans( |
| 9470 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9475 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9471 | 9476 |
| 9472 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9477 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9473 EXPECT_EQ(ERR_IO_PENDING, rv); | 9478 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9474 | 9479 |
| 9475 rv = callback.WaitForResult(); | 9480 rv = callback.WaitForResult(); |
| 9476 EXPECT_EQ(OK, rv); | 9481 EXPECT_THAT(rv, IsOk()); |
| 9477 | 9482 |
| 9478 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9483 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 9479 ASSERT_TRUE(response); | 9484 ASSERT_TRUE(response); |
| 9480 | 9485 |
| 9481 EXPECT_TRUE(response->headers); | 9486 EXPECT_TRUE(response->headers); |
| 9482 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 9487 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
| 9483 | 9488 |
| 9484 std::string response_data; | 9489 std::string response_data; |
| 9485 rv = ReadTransaction(trans.get(), &response_data); | 9490 rv = ReadTransaction(trans.get(), &response_data); |
| 9486 EXPECT_EQ(OK, rv); | 9491 EXPECT_THAT(rv, IsOk()); |
| 9487 EXPECT_EQ("", response_data); | 9492 EXPECT_EQ("", response_data); |
| 9488 | 9493 |
| 9489 IPEndPoint endpoint; | 9494 IPEndPoint endpoint; |
| 9490 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); | 9495 EXPECT_TRUE(trans->GetRemoteEndpoint(&endpoint)); |
| 9491 EXPECT_LT(0u, endpoint.address().size()); | 9496 EXPECT_LT(0u, endpoint.address().size()); |
| 9492 } | 9497 } |
| 9493 | 9498 |
| 9494 // Make sure that a dropped connection while draining the body for auth | 9499 // Make sure that a dropped connection while draining the body for auth |
| 9495 // restart does the right thing. | 9500 // restart does the right thing. |
| 9496 TEST_P(HttpNetworkTransactionTest, DrainResetOK) { | 9501 TEST_P(HttpNetworkTransactionTest, DrainResetOK) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9541 data_writes2, arraysize(data_writes2)); | 9546 data_writes2, arraysize(data_writes2)); |
| 9542 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 9547 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 9543 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9548 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9544 | 9549 |
| 9545 TestCompletionCallback callback1; | 9550 TestCompletionCallback callback1; |
| 9546 | 9551 |
| 9547 std::unique_ptr<HttpTransaction> trans( | 9552 std::unique_ptr<HttpTransaction> trans( |
| 9548 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9553 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9549 | 9554 |
| 9550 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 9555 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 9551 EXPECT_EQ(ERR_IO_PENDING, rv); | 9556 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9552 | 9557 |
| 9553 rv = callback1.WaitForResult(); | 9558 rv = callback1.WaitForResult(); |
| 9554 EXPECT_EQ(OK, rv); | 9559 EXPECT_THAT(rv, IsOk()); |
| 9555 | 9560 |
| 9556 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9561 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 9557 ASSERT_TRUE(response); | 9562 ASSERT_TRUE(response); |
| 9558 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 9563 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 9559 | 9564 |
| 9560 TestCompletionCallback callback2; | 9565 TestCompletionCallback callback2; |
| 9561 | 9566 |
| 9562 rv = trans->RestartWithAuth( | 9567 rv = trans->RestartWithAuth( |
| 9563 AuthCredentials(kFoo, kBar), callback2.callback()); | 9568 AuthCredentials(kFoo, kBar), callback2.callback()); |
| 9564 EXPECT_EQ(ERR_IO_PENDING, rv); | 9569 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9565 | 9570 |
| 9566 rv = callback2.WaitForResult(); | 9571 rv = callback2.WaitForResult(); |
| 9567 EXPECT_EQ(OK, rv); | 9572 EXPECT_THAT(rv, IsOk()); |
| 9568 | 9573 |
| 9569 response = trans->GetResponseInfo(); | 9574 response = trans->GetResponseInfo(); |
| 9570 ASSERT_TRUE(response); | 9575 ASSERT_TRUE(response); |
| 9571 EXPECT_FALSE(response->auth_challenge); | 9576 EXPECT_FALSE(response->auth_challenge); |
| 9572 EXPECT_EQ(100, response->headers->GetContentLength()); | 9577 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 9573 } | 9578 } |
| 9574 | 9579 |
| 9575 // Test HTTPS connections going through a proxy that sends extra data. | 9580 // Test HTTPS connections going through a proxy that sends extra data. |
| 9576 TEST_P(HttpNetworkTransactionTest, HTTPSViaProxyWithExtraData) { | 9581 TEST_P(HttpNetworkTransactionTest, HTTPSViaProxyWithExtraData) { |
| 9577 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 9582 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 9594 | 9599 |
| 9595 TestCompletionCallback callback; | 9600 TestCompletionCallback callback; |
| 9596 | 9601 |
| 9597 session_deps_.socket_factory->ResetNextMockIndexes(); | 9602 session_deps_.socket_factory->ResetNextMockIndexes(); |
| 9598 | 9603 |
| 9599 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9604 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9600 std::unique_ptr<HttpTransaction> trans( | 9605 std::unique_ptr<HttpTransaction> trans( |
| 9601 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9606 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9602 | 9607 |
| 9603 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9608 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9604 EXPECT_EQ(ERR_IO_PENDING, rv); | 9609 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9605 | 9610 |
| 9606 rv = callback.WaitForResult(); | 9611 rv = callback.WaitForResult(); |
| 9607 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 9612 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
| 9608 } | 9613 } |
| 9609 | 9614 |
| 9610 TEST_P(HttpNetworkTransactionTest, LargeContentLengthThenClose) { | 9615 TEST_P(HttpNetworkTransactionTest, LargeContentLengthThenClose) { |
| 9611 HttpRequestInfo request; | 9616 HttpRequestInfo request; |
| 9612 request.method = "GET"; | 9617 request.method = "GET"; |
| 9613 request.url = GURL("http://www.example.org/"); | 9618 request.url = GURL("http://www.example.org/"); |
| 9614 request.load_flags = 0; | 9619 request.load_flags = 0; |
| 9615 | 9620 |
| 9616 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9621 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9617 std::unique_ptr<HttpTransaction> trans( | 9622 std::unique_ptr<HttpTransaction> trans( |
| 9618 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9623 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9619 | 9624 |
| 9620 MockRead data_reads[] = { | 9625 MockRead data_reads[] = { |
| 9621 MockRead("HTTP/1.0 200 OK\r\nContent-Length:6719476739\r\n\r\n"), | 9626 MockRead("HTTP/1.0 200 OK\r\nContent-Length:6719476739\r\n\r\n"), |
| 9622 MockRead(SYNCHRONOUS, OK), | 9627 MockRead(SYNCHRONOUS, OK), |
| 9623 }; | 9628 }; |
| 9624 | 9629 |
| 9625 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9630 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 9626 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9631 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 9627 | 9632 |
| 9628 TestCompletionCallback callback; | 9633 TestCompletionCallback callback; |
| 9629 | 9634 |
| 9630 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9635 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9631 EXPECT_EQ(ERR_IO_PENDING, rv); | 9636 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9632 | 9637 |
| 9633 EXPECT_EQ(OK, callback.WaitForResult()); | 9638 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 9634 | 9639 |
| 9635 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9640 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 9636 ASSERT_TRUE(response); | 9641 ASSERT_TRUE(response); |
| 9637 | 9642 |
| 9638 EXPECT_TRUE(response->headers); | 9643 EXPECT_TRUE(response->headers); |
| 9639 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 9644 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
| 9640 | 9645 |
| 9641 std::string response_data; | 9646 std::string response_data; |
| 9642 rv = ReadTransaction(trans.get(), &response_data); | 9647 rv = ReadTransaction(trans.get(), &response_data); |
| 9643 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 9648 EXPECT_THAT(rv, IsError(ERR_CONTENT_LENGTH_MISMATCH)); |
| 9644 } | 9649 } |
| 9645 | 9650 |
| 9646 TEST_P(HttpNetworkTransactionTest, UploadFileSmallerThanLength) { | 9651 TEST_P(HttpNetworkTransactionTest, UploadFileSmallerThanLength) { |
| 9647 base::FilePath temp_file_path; | 9652 base::FilePath temp_file_path; |
| 9648 ASSERT_TRUE(base::CreateTemporaryFile(&temp_file_path)); | 9653 ASSERT_TRUE(base::CreateTemporaryFile(&temp_file_path)); |
| 9649 const uint64_t kFakeSize = 100000; // file is actually blank | 9654 const uint64_t kFakeSize = 100000; // file is actually blank |
| 9650 UploadFileElementReader::ScopedOverridingContentLengthForTests | 9655 UploadFileElementReader::ScopedOverridingContentLengthForTests |
| 9651 overriding_content_length(kFakeSize); | 9656 overriding_content_length(kFakeSize); |
| 9652 | 9657 |
| 9653 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 9658 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 9670 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 9675 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
| 9671 MockRead("hello world"), | 9676 MockRead("hello world"), |
| 9672 MockRead(SYNCHRONOUS, OK), | 9677 MockRead(SYNCHRONOUS, OK), |
| 9673 }; | 9678 }; |
| 9674 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9679 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 9675 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9680 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 9676 | 9681 |
| 9677 TestCompletionCallback callback; | 9682 TestCompletionCallback callback; |
| 9678 | 9683 |
| 9679 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9684 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9680 EXPECT_EQ(ERR_IO_PENDING, rv); | 9685 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9681 | 9686 |
| 9682 rv = callback.WaitForResult(); | 9687 rv = callback.WaitForResult(); |
| 9683 EXPECT_EQ(ERR_UPLOAD_FILE_CHANGED, rv); | 9688 EXPECT_THAT(rv, IsError(ERR_UPLOAD_FILE_CHANGED)); |
| 9684 | 9689 |
| 9685 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9690 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 9686 ASSERT_TRUE(response); | 9691 ASSERT_TRUE(response); |
| 9687 | 9692 |
| 9688 EXPECT_FALSE(response->headers); | 9693 EXPECT_FALSE(response->headers); |
| 9689 | 9694 |
| 9690 base::DeleteFile(temp_file_path, false); | 9695 base::DeleteFile(temp_file_path, false); |
| 9691 } | 9696 } |
| 9692 | 9697 |
| 9693 TEST_P(HttpNetworkTransactionTest, UploadUnreadableFile) { | 9698 TEST_P(HttpNetworkTransactionTest, UploadUnreadableFile) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 9714 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9719 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9715 std::unique_ptr<HttpTransaction> trans( | 9720 std::unique_ptr<HttpTransaction> trans( |
| 9716 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9721 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9717 | 9722 |
| 9718 StaticSocketDataProvider data(NULL, 0, NULL, 0); | 9723 StaticSocketDataProvider data(NULL, 0, NULL, 0); |
| 9719 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9724 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 9720 | 9725 |
| 9721 TestCompletionCallback callback; | 9726 TestCompletionCallback callback; |
| 9722 | 9727 |
| 9723 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9728 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9724 EXPECT_EQ(ERR_IO_PENDING, rv); | 9729 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9725 | 9730 |
| 9726 rv = callback.WaitForResult(); | 9731 rv = callback.WaitForResult(); |
| 9727 EXPECT_EQ(ERR_ACCESS_DENIED, rv); | 9732 EXPECT_THAT(rv, IsError(ERR_ACCESS_DENIED)); |
| 9728 | 9733 |
| 9729 base::DeleteFile(temp_file, false); | 9734 base::DeleteFile(temp_file, false); |
| 9730 } | 9735 } |
| 9731 | 9736 |
| 9732 TEST_P(HttpNetworkTransactionTest, CancelDuringInitRequestBody) { | 9737 TEST_P(HttpNetworkTransactionTest, CancelDuringInitRequestBody) { |
| 9733 class FakeUploadElementReader : public UploadElementReader { | 9738 class FakeUploadElementReader : public UploadElementReader { |
| 9734 public: | 9739 public: |
| 9735 FakeUploadElementReader() {} | 9740 FakeUploadElementReader() {} |
| 9736 ~FakeUploadElementReader() override {} | 9741 ~FakeUploadElementReader() override {} |
| 9737 | 9742 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 9767 | 9772 |
| 9768 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9773 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9769 std::unique_ptr<HttpTransaction> trans( | 9774 std::unique_ptr<HttpTransaction> trans( |
| 9770 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9775 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9771 | 9776 |
| 9772 StaticSocketDataProvider data; | 9777 StaticSocketDataProvider data; |
| 9773 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9778 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 9774 | 9779 |
| 9775 TestCompletionCallback callback; | 9780 TestCompletionCallback callback; |
| 9776 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9781 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9777 EXPECT_EQ(ERR_IO_PENDING, rv); | 9782 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9778 base::RunLoop().RunUntilIdle(); | 9783 base::RunLoop().RunUntilIdle(); |
| 9779 | 9784 |
| 9780 // Transaction is pending on request body initialization. | 9785 // Transaction is pending on request body initialization. |
| 9781 ASSERT_FALSE(fake_reader->callback().is_null()); | 9786 ASSERT_FALSE(fake_reader->callback().is_null()); |
| 9782 | 9787 |
| 9783 // Return Init()'s result after the transaction gets destroyed. | 9788 // Return Init()'s result after the transaction gets destroyed. |
| 9784 trans.reset(); | 9789 trans.reset(); |
| 9785 fake_reader->callback().Run(OK); // Should not crash. | 9790 fake_reader->callback().Run(OK); // Should not crash. |
| 9786 } | 9791 } |
| 9787 | 9792 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9873 TestCompletionCallback callback1; | 9878 TestCompletionCallback callback1; |
| 9874 | 9879 |
| 9875 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9880 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9876 std::unique_ptr<HttpTransaction> trans( | 9881 std::unique_ptr<HttpTransaction> trans( |
| 9877 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9882 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9878 | 9883 |
| 9879 // Issue the first request with Authorize headers. There should be a | 9884 // Issue the first request with Authorize headers. There should be a |
| 9880 // password prompt for first_realm waiting to be filled in after the | 9885 // password prompt for first_realm waiting to be filled in after the |
| 9881 // transaction completes. | 9886 // transaction completes. |
| 9882 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 9887 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 9883 EXPECT_EQ(ERR_IO_PENDING, rv); | 9888 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9884 rv = callback1.WaitForResult(); | 9889 rv = callback1.WaitForResult(); |
| 9885 EXPECT_EQ(OK, rv); | 9890 EXPECT_THAT(rv, IsOk()); |
| 9886 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9891 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 9887 ASSERT_TRUE(response); | 9892 ASSERT_TRUE(response); |
| 9888 const AuthChallengeInfo* challenge = response->auth_challenge.get(); | 9893 const AuthChallengeInfo* challenge = response->auth_challenge.get(); |
| 9889 ASSERT_TRUE(challenge); | 9894 ASSERT_TRUE(challenge); |
| 9890 EXPECT_FALSE(challenge->is_proxy); | 9895 EXPECT_FALSE(challenge->is_proxy); |
| 9891 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); | 9896 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); |
| 9892 EXPECT_EQ("first_realm", challenge->realm); | 9897 EXPECT_EQ("first_realm", challenge->realm); |
| 9893 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); | 9898 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); |
| 9894 | 9899 |
| 9895 // Issue the second request with an incorrect password. There should be a | 9900 // Issue the second request with an incorrect password. There should be a |
| 9896 // password prompt for second_realm waiting to be filled in after the | 9901 // password prompt for second_realm waiting to be filled in after the |
| 9897 // transaction completes. | 9902 // transaction completes. |
| 9898 TestCompletionCallback callback2; | 9903 TestCompletionCallback callback2; |
| 9899 rv = trans->RestartWithAuth( | 9904 rv = trans->RestartWithAuth( |
| 9900 AuthCredentials(kFirst, kBaz), callback2.callback()); | 9905 AuthCredentials(kFirst, kBaz), callback2.callback()); |
| 9901 EXPECT_EQ(ERR_IO_PENDING, rv); | 9906 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9902 rv = callback2.WaitForResult(); | 9907 rv = callback2.WaitForResult(); |
| 9903 EXPECT_EQ(OK, rv); | 9908 EXPECT_THAT(rv, IsOk()); |
| 9904 response = trans->GetResponseInfo(); | 9909 response = trans->GetResponseInfo(); |
| 9905 ASSERT_TRUE(response); | 9910 ASSERT_TRUE(response); |
| 9906 challenge = response->auth_challenge.get(); | 9911 challenge = response->auth_challenge.get(); |
| 9907 ASSERT_TRUE(challenge); | 9912 ASSERT_TRUE(challenge); |
| 9908 EXPECT_FALSE(challenge->is_proxy); | 9913 EXPECT_FALSE(challenge->is_proxy); |
| 9909 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); | 9914 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); |
| 9910 EXPECT_EQ("second_realm", challenge->realm); | 9915 EXPECT_EQ("second_realm", challenge->realm); |
| 9911 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); | 9916 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); |
| 9912 | 9917 |
| 9913 // Issue the third request with another incorrect password. There should be | 9918 // Issue the third request with another incorrect password. There should be |
| 9914 // a password prompt for first_realm waiting to be filled in. If the password | 9919 // a password prompt for first_realm waiting to be filled in. If the password |
| 9915 // prompt is not present, it indicates that the HttpAuthCacheEntry for | 9920 // prompt is not present, it indicates that the HttpAuthCacheEntry for |
| 9916 // first_realm was not correctly removed. | 9921 // first_realm was not correctly removed. |
| 9917 TestCompletionCallback callback3; | 9922 TestCompletionCallback callback3; |
| 9918 rv = trans->RestartWithAuth( | 9923 rv = trans->RestartWithAuth( |
| 9919 AuthCredentials(kSecond, kFou), callback3.callback()); | 9924 AuthCredentials(kSecond, kFou), callback3.callback()); |
| 9920 EXPECT_EQ(ERR_IO_PENDING, rv); | 9925 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9921 rv = callback3.WaitForResult(); | 9926 rv = callback3.WaitForResult(); |
| 9922 EXPECT_EQ(OK, rv); | 9927 EXPECT_THAT(rv, IsOk()); |
| 9923 response = trans->GetResponseInfo(); | 9928 response = trans->GetResponseInfo(); |
| 9924 ASSERT_TRUE(response); | 9929 ASSERT_TRUE(response); |
| 9925 challenge = response->auth_challenge.get(); | 9930 challenge = response->auth_challenge.get(); |
| 9926 ASSERT_TRUE(challenge); | 9931 ASSERT_TRUE(challenge); |
| 9927 EXPECT_FALSE(challenge->is_proxy); | 9932 EXPECT_FALSE(challenge->is_proxy); |
| 9928 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); | 9933 EXPECT_EQ("http://www.example.org", challenge->challenger.Serialize()); |
| 9929 EXPECT_EQ("first_realm", challenge->realm); | 9934 EXPECT_EQ("first_realm", challenge->realm); |
| 9930 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); | 9935 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); |
| 9931 | 9936 |
| 9932 // Issue the fourth request with the correct password and username. | 9937 // Issue the fourth request with the correct password and username. |
| 9933 TestCompletionCallback callback4; | 9938 TestCompletionCallback callback4; |
| 9934 rv = trans->RestartWithAuth( | 9939 rv = trans->RestartWithAuth( |
| 9935 AuthCredentials(kFirst, kBar), callback4.callback()); | 9940 AuthCredentials(kFirst, kBar), callback4.callback()); |
| 9936 EXPECT_EQ(ERR_IO_PENDING, rv); | 9941 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9937 rv = callback4.WaitForResult(); | 9942 rv = callback4.WaitForResult(); |
| 9938 EXPECT_EQ(OK, rv); | 9943 EXPECT_THAT(rv, IsOk()); |
| 9939 response = trans->GetResponseInfo(); | 9944 response = trans->GetResponseInfo(); |
| 9940 ASSERT_TRUE(response); | 9945 ASSERT_TRUE(response); |
| 9941 EXPECT_FALSE(response->auth_challenge); | 9946 EXPECT_FALSE(response->auth_challenge); |
| 9942 } | 9947 } |
| 9943 | 9948 |
| 9944 TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { | 9949 TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { |
| 9945 std::string alternative_service_http_header = | 9950 std::string alternative_service_http_header = |
| 9946 GetAlternativeServiceHttpHeader(); | 9951 GetAlternativeServiceHttpHeader(); |
| 9947 | 9952 |
| 9948 MockRead data_reads[] = { | 9953 MockRead data_reads[] = { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 9964 SSLSocketDataProvider ssl(ASYNC, OK); | 9969 SSLSocketDataProvider ssl(ASYNC, OK); |
| 9965 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 9970 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 9966 | 9971 |
| 9967 TestCompletionCallback callback; | 9972 TestCompletionCallback callback; |
| 9968 | 9973 |
| 9969 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9974 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9970 std::unique_ptr<HttpTransaction> trans( | 9975 std::unique_ptr<HttpTransaction> trans( |
| 9971 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9976 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9972 | 9977 |
| 9973 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9978 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9974 EXPECT_EQ(ERR_IO_PENDING, rv); | 9979 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 9975 | 9980 |
| 9976 url::SchemeHostPort test_server(request.url); | 9981 url::SchemeHostPort test_server(request.url); |
| 9977 HttpServerProperties* http_server_properties = | 9982 HttpServerProperties* http_server_properties = |
| 9978 session->http_server_properties(); | 9983 session->http_server_properties(); |
| 9979 AlternativeServiceVector alternative_service_vector = | 9984 AlternativeServiceVector alternative_service_vector = |
| 9980 http_server_properties->GetAlternativeServices(test_server); | 9985 http_server_properties->GetAlternativeServices(test_server); |
| 9981 EXPECT_TRUE(alternative_service_vector.empty()); | 9986 EXPECT_TRUE(alternative_service_vector.empty()); |
| 9982 | 9987 |
| 9983 EXPECT_EQ(OK, callback.WaitForResult()); | 9988 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 9984 | 9989 |
| 9985 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9990 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 9986 ASSERT_TRUE(response); | 9991 ASSERT_TRUE(response); |
| 9987 ASSERT_TRUE(response->headers); | 9992 ASSERT_TRUE(response->headers); |
| 9988 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 9993 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 9989 EXPECT_FALSE(response->was_fetched_via_spdy); | 9994 EXPECT_FALSE(response->was_fetched_via_spdy); |
| 9990 EXPECT_FALSE(response->was_npn_negotiated); | 9995 EXPECT_FALSE(response->was_npn_negotiated); |
| 9991 | 9996 |
| 9992 std::string response_data; | 9997 std::string response_data; |
| 9993 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 9998 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 9994 EXPECT_EQ("hello world", response_data); | 9999 EXPECT_EQ("hello world", response_data); |
| 9995 | 10000 |
| 9996 alternative_service_vector = | 10001 alternative_service_vector = |
| 9997 http_server_properties->GetAlternativeServices(test_server); | 10002 http_server_properties->GetAlternativeServices(test_server); |
| 9998 ASSERT_EQ(1u, alternative_service_vector.size()); | 10003 ASSERT_EQ(1u, alternative_service_vector.size()); |
| 9999 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), | 10004 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
| 10000 alternative_service_vector[0].protocol); | 10005 alternative_service_vector[0].protocol); |
| 10001 EXPECT_EQ("mail.example.org", alternative_service_vector[0].host); | 10006 EXPECT_EQ("mail.example.org", alternative_service_vector[0].host); |
| 10002 EXPECT_EQ(443, alternative_service_vector[0].port); | 10007 EXPECT_EQ(443, alternative_service_vector[0].port); |
| 10003 } | 10008 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 10031 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10036 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10032 | 10037 |
| 10033 url::SchemeHostPort test_server(request.url); | 10038 url::SchemeHostPort test_server(request.url); |
| 10034 HttpServerProperties* http_server_properties = | 10039 HttpServerProperties* http_server_properties = |
| 10035 session->http_server_properties(); | 10040 session->http_server_properties(); |
| 10036 AlternativeServiceVector alternative_service_vector = | 10041 AlternativeServiceVector alternative_service_vector = |
| 10037 http_server_properties->GetAlternativeServices(test_server); | 10042 http_server_properties->GetAlternativeServices(test_server); |
| 10038 EXPECT_TRUE(alternative_service_vector.empty()); | 10043 EXPECT_TRUE(alternative_service_vector.empty()); |
| 10039 | 10044 |
| 10040 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10045 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 10041 EXPECT_EQ(ERR_IO_PENDING, rv); | 10046 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10042 EXPECT_EQ(OK, callback.WaitForResult()); | 10047 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 10043 | 10048 |
| 10044 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10049 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 10045 ASSERT_TRUE(response); | 10050 ASSERT_TRUE(response); |
| 10046 ASSERT_TRUE(response->headers); | 10051 ASSERT_TRUE(response->headers); |
| 10047 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10052 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 10048 EXPECT_FALSE(response->was_fetched_via_spdy); | 10053 EXPECT_FALSE(response->was_fetched_via_spdy); |
| 10049 EXPECT_FALSE(response->was_npn_negotiated); | 10054 EXPECT_FALSE(response->was_npn_negotiated); |
| 10050 | 10055 |
| 10051 std::string response_data; | 10056 std::string response_data; |
| 10052 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10057 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 10053 EXPECT_EQ("hello world", response_data); | 10058 EXPECT_EQ("hello world", response_data); |
| 10054 | 10059 |
| 10055 alternative_service_vector = | 10060 alternative_service_vector = |
| 10056 http_server_properties->GetAlternativeServices(test_server); | 10061 http_server_properties->GetAlternativeServices(test_server); |
| 10057 EXPECT_TRUE(alternative_service_vector.empty()); | 10062 EXPECT_TRUE(alternative_service_vector.empty()); |
| 10058 } | 10063 } |
| 10059 | 10064 |
| 10060 // HTTP/2 Alternative Services should be disabled if alternative service | 10065 // HTTP/2 Alternative Services should be disabled if alternative service |
| 10061 // hostname is different from that of origin. | 10066 // hostname is different from that of origin. |
| 10062 // TODO(bnc): Remove when https://crbug.com/615413 is fixed. | 10067 // TODO(bnc): Remove when https://crbug.com/615413 is fixed. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10095 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10100 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 10096 http_server_properties->SetAlternativeService( | 10101 http_server_properties->SetAlternativeService( |
| 10097 url::SchemeHostPort(request.url), alternative_service, expiration); | 10102 url::SchemeHostPort(request.url), alternative_service, expiration); |
| 10098 | 10103 |
| 10099 std::unique_ptr<HttpTransaction> trans( | 10104 std::unique_ptr<HttpTransaction> trans( |
| 10100 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10105 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10101 TestCompletionCallback callback; | 10106 TestCompletionCallback callback; |
| 10102 | 10107 |
| 10103 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10108 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 10104 // Alternative service is not used, request fails. | 10109 // Alternative service is not used, request fails. |
| 10105 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv)); | 10110 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); |
| 10106 } | 10111 } |
| 10107 | 10112 |
| 10108 // Regression test for https://crbug.com/615497: | 10113 // Regression test for https://crbug.com/615497: |
| 10109 // Alternative Services should be disabled for http origin. | 10114 // Alternative Services should be disabled for http origin. |
| 10110 TEST_P(HttpNetworkTransactionTest, | 10115 TEST_P(HttpNetworkTransactionTest, |
| 10111 DisableAlternativeServicesForInsecureOrigin) { | 10116 DisableAlternativeServicesForInsecureOrigin) { |
| 10112 HttpRequestInfo request; | 10117 HttpRequestInfo request; |
| 10113 request.method = "GET"; | 10118 request.method = "GET"; |
| 10114 request.url = GURL("http://www.example.org/"); | 10119 request.url = GURL("http://www.example.org/"); |
| 10115 request.load_flags = 0; | 10120 request.load_flags = 0; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 10136 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10141 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 10137 http_server_properties->SetAlternativeService( | 10142 http_server_properties->SetAlternativeService( |
| 10138 url::SchemeHostPort(request.url), alternative_service, expiration); | 10143 url::SchemeHostPort(request.url), alternative_service, expiration); |
| 10139 | 10144 |
| 10140 std::unique_ptr<HttpTransaction> trans( | 10145 std::unique_ptr<HttpTransaction> trans( |
| 10141 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10146 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10142 TestCompletionCallback callback; | 10147 TestCompletionCallback callback; |
| 10143 | 10148 |
| 10144 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10149 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 10145 // Alternative service is not used, request fails. | 10150 // Alternative service is not used, request fails. |
| 10146 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv)); | 10151 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); |
| 10147 } | 10152 } |
| 10148 | 10153 |
| 10149 TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { | 10154 TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { |
| 10150 // Set an alternative service for origin. | 10155 // Set an alternative service for origin. |
| 10151 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10156 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10152 HttpServerProperties* http_server_properties = | 10157 HttpServerProperties* http_server_properties = |
| 10153 session->http_server_properties(); | 10158 session->http_server_properties(); |
| 10154 url::SchemeHostPort test_server("https", "www.example.org", 443); | 10159 url::SchemeHostPort test_server("https", "www.example.org", 443); |
| 10155 AlternativeService alternative_service(QUIC, "", 80); | 10160 AlternativeService alternative_service(QUIC, "", 80); |
| 10156 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10161 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 10178 request.method = "GET"; | 10183 request.method = "GET"; |
| 10179 request.url = GURL("https://www.example.org/"); | 10184 request.url = GURL("https://www.example.org/"); |
| 10180 request.load_flags = 0; | 10185 request.load_flags = 0; |
| 10181 | 10186 |
| 10182 TestCompletionCallback callback; | 10187 TestCompletionCallback callback; |
| 10183 | 10188 |
| 10184 std::unique_ptr<HttpTransaction> trans( | 10189 std::unique_ptr<HttpTransaction> trans( |
| 10185 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10190 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10186 | 10191 |
| 10187 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10192 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 10188 EXPECT_EQ(OK, callback.GetResult(rv)); | 10193 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 10189 | 10194 |
| 10190 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10195 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 10191 ASSERT_TRUE(response); | 10196 ASSERT_TRUE(response); |
| 10192 ASSERT_TRUE(response->headers); | 10197 ASSERT_TRUE(response->headers); |
| 10193 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10198 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 10194 EXPECT_FALSE(response->was_fetched_via_spdy); | 10199 EXPECT_FALSE(response->was_fetched_via_spdy); |
| 10195 EXPECT_FALSE(response->was_npn_negotiated); | 10200 EXPECT_FALSE(response->was_npn_negotiated); |
| 10196 | 10201 |
| 10197 std::string response_data; | 10202 std::string response_data; |
| 10198 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10203 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 10199 EXPECT_EQ("hello world", response_data); | 10204 EXPECT_EQ("hello world", response_data); |
| 10200 | 10205 |
| 10201 alternative_service_vector = | 10206 alternative_service_vector = |
| 10202 http_server_properties->GetAlternativeServices(test_server); | 10207 http_server_properties->GetAlternativeServices(test_server); |
| 10203 EXPECT_TRUE(alternative_service_vector.empty()); | 10208 EXPECT_TRUE(alternative_service_vector.empty()); |
| 10204 } | 10209 } |
| 10205 | 10210 |
| 10206 TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) { | 10211 TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) { |
| 10207 MockRead data_reads[] = { | 10212 MockRead data_reads[] = { |
| 10208 MockRead("HTTP/1.1 200 OK\r\n"), | 10213 MockRead("HTTP/1.1 200 OK\r\n"), |
| (...skipping 17 matching lines...) Expand all Loading... |
| 10226 SSLSocketDataProvider ssl(ASYNC, OK); | 10231 SSLSocketDataProvider ssl(ASYNC, OK); |
| 10227 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10232 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 10228 | 10233 |
| 10229 TestCompletionCallback callback; | 10234 TestCompletionCallback callback; |
| 10230 | 10235 |
| 10231 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10236 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10232 std::unique_ptr<HttpTransaction> trans( | 10237 std::unique_ptr<HttpTransaction> trans( |
| 10233 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10238 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10234 | 10239 |
| 10235 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10240 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 10236 EXPECT_EQ(ERR_IO_PENDING, rv); | 10241 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10237 | 10242 |
| 10238 url::SchemeHostPort test_server("https", "www.example.org", 443); | 10243 url::SchemeHostPort test_server("https", "www.example.org", 443); |
| 10239 HttpServerProperties* http_server_properties = | 10244 HttpServerProperties* http_server_properties = |
| 10240 session->http_server_properties(); | 10245 session->http_server_properties(); |
| 10241 AlternativeServiceVector alternative_service_vector = | 10246 AlternativeServiceVector alternative_service_vector = |
| 10242 http_server_properties->GetAlternativeServices(test_server); | 10247 http_server_properties->GetAlternativeServices(test_server); |
| 10243 EXPECT_TRUE(alternative_service_vector.empty()); | 10248 EXPECT_TRUE(alternative_service_vector.empty()); |
| 10244 | 10249 |
| 10245 EXPECT_EQ(OK, callback.WaitForResult()); | 10250 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 10246 | 10251 |
| 10247 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10252 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 10248 ASSERT_TRUE(response); | 10253 ASSERT_TRUE(response); |
| 10249 ASSERT_TRUE(response->headers); | 10254 ASSERT_TRUE(response->headers); |
| 10250 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10255 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 10251 EXPECT_FALSE(response->was_fetched_via_spdy); | 10256 EXPECT_FALSE(response->was_fetched_via_spdy); |
| 10252 EXPECT_FALSE(response->was_npn_negotiated); | 10257 EXPECT_FALSE(response->was_npn_negotiated); |
| 10253 | 10258 |
| 10254 std::string response_data; | 10259 std::string response_data; |
| 10255 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10260 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 10256 EXPECT_EQ("hello world", response_data); | 10261 EXPECT_EQ("hello world", response_data); |
| 10257 | 10262 |
| 10258 alternative_service_vector = | 10263 alternative_service_vector = |
| 10259 http_server_properties->GetAlternativeServices(test_server); | 10264 http_server_properties->GetAlternativeServices(test_server); |
| 10260 ASSERT_EQ(2u, alternative_service_vector.size()); | 10265 ASSERT_EQ(2u, alternative_service_vector.size()); |
| 10261 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), | 10266 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
| 10262 alternative_service_vector[0].protocol); | 10267 alternative_service_vector[0].protocol); |
| 10263 EXPECT_EQ("www.example.com", alternative_service_vector[0].host); | 10268 EXPECT_EQ("www.example.com", alternative_service_vector[0].host); |
| 10264 EXPECT_EQ(443, alternative_service_vector[0].port); | 10269 EXPECT_EQ(443, alternative_service_vector[0].port); |
| 10265 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), | 10270 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10437 666); // Port is ignored by MockConnect anyway. | 10442 666); // Port is ignored by MockConnect anyway. |
| 10438 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10443 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 10439 http_server_properties->SetAlternativeService(server, alternative_service, | 10444 http_server_properties->SetAlternativeService(server, alternative_service, |
| 10440 expiration); | 10445 expiration); |
| 10441 | 10446 |
| 10442 std::unique_ptr<HttpTransaction> trans( | 10447 std::unique_ptr<HttpTransaction> trans( |
| 10443 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10448 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10444 TestCompletionCallback callback; | 10449 TestCompletionCallback callback; |
| 10445 | 10450 |
| 10446 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10451 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 10447 EXPECT_EQ(ERR_IO_PENDING, rv); | 10452 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10448 EXPECT_EQ(OK, callback.WaitForResult()); | 10453 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 10449 | 10454 |
| 10450 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10455 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 10451 ASSERT_TRUE(response); | 10456 ASSERT_TRUE(response); |
| 10452 ASSERT_TRUE(response->headers); | 10457 ASSERT_TRUE(response->headers); |
| 10453 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10458 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 10454 | 10459 |
| 10455 std::string response_data; | 10460 std::string response_data; |
| 10456 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10461 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 10457 EXPECT_EQ("hello world", response_data); | 10462 EXPECT_EQ("hello world", response_data); |
| 10458 | 10463 |
| 10459 const AlternativeServiceVector alternative_service_vector = | 10464 const AlternativeServiceVector alternative_service_vector = |
| 10460 http_server_properties->GetAlternativeServices(server); | 10465 http_server_properties->GetAlternativeServices(server); |
| 10461 ASSERT_EQ(1u, alternative_service_vector.size()); | 10466 ASSERT_EQ(1u, alternative_service_vector.size()); |
| 10462 EXPECT_EQ(alternative_service, alternative_service_vector[0]); | 10467 EXPECT_EQ(alternative_service, alternative_service_vector[0]); |
| 10463 EXPECT_TRUE(http_server_properties->IsAlternativeServiceBroken( | 10468 EXPECT_TRUE(http_server_properties->IsAlternativeServiceBroken( |
| 10464 alternative_service_vector[0])); | 10469 alternative_service_vector[0])); |
| 10465 } | 10470 } |
| 10466 | 10471 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10505 url::SchemeHostPort(restricted_port_request.url), alternative_service, | 10510 url::SchemeHostPort(restricted_port_request.url), alternative_service, |
| 10506 expiration); | 10511 expiration); |
| 10507 | 10512 |
| 10508 std::unique_ptr<HttpTransaction> trans( | 10513 std::unique_ptr<HttpTransaction> trans( |
| 10509 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10514 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10510 TestCompletionCallback callback; | 10515 TestCompletionCallback callback; |
| 10511 | 10516 |
| 10512 int rv = trans->Start( | 10517 int rv = trans->Start( |
| 10513 &restricted_port_request, | 10518 &restricted_port_request, |
| 10514 callback.callback(), BoundNetLog()); | 10519 callback.callback(), BoundNetLog()); |
| 10515 EXPECT_EQ(ERR_IO_PENDING, rv); | 10520 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10516 // Invalid change to unrestricted port should fail. | 10521 // Invalid change to unrestricted port should fail. |
| 10517 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); | 10522 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_REFUSED)); |
| 10518 } | 10523 } |
| 10519 | 10524 |
| 10520 // Ensure that we are allowed to redirect traffic via an alternate protocol to | 10525 // Ensure that we are allowed to redirect traffic via an alternate protocol to |
| 10521 // an unrestricted (port >= 1024) when the original traffic was on a restricted | 10526 // an unrestricted (port >= 1024) when the original traffic was on a restricted |
| 10522 // port (port < 1024) if we set |enable_user_alternate_protocol_ports|. | 10527 // port (port < 1024) if we set |enable_user_alternate_protocol_ports|. |
| 10523 TEST_P(HttpNetworkTransactionTest, | 10528 TEST_P(HttpNetworkTransactionTest, |
| 10524 AlternateProtocolPortRestrictedPermitted) { | 10529 AlternateProtocolPortRestrictedPermitted) { |
| 10525 session_deps_.enable_user_alternate_protocol_ports = true; | 10530 session_deps_.enable_user_alternate_protocol_ports = true; |
| 10526 | 10531 |
| 10527 HttpRequestInfo restricted_port_request; | 10532 HttpRequestInfo restricted_port_request; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10560 expiration); | 10565 expiration); |
| 10561 | 10566 |
| 10562 std::unique_ptr<HttpTransaction> trans( | 10567 std::unique_ptr<HttpTransaction> trans( |
| 10563 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10568 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10564 TestCompletionCallback callback; | 10569 TestCompletionCallback callback; |
| 10565 | 10570 |
| 10566 EXPECT_EQ(ERR_IO_PENDING, trans->Start( | 10571 EXPECT_EQ(ERR_IO_PENDING, trans->Start( |
| 10567 &restricted_port_request, | 10572 &restricted_port_request, |
| 10568 callback.callback(), BoundNetLog())); | 10573 callback.callback(), BoundNetLog())); |
| 10569 // Change to unrestricted port should succeed. | 10574 // Change to unrestricted port should succeed. |
| 10570 EXPECT_EQ(OK, callback.WaitForResult()); | 10575 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 10571 } | 10576 } |
| 10572 | 10577 |
| 10573 // Ensure that we are not allowed to redirect traffic via an alternate protocol | 10578 // Ensure that we are not allowed to redirect traffic via an alternate protocol |
| 10574 // to an unrestricted (port >= 1024) when the original traffic was on a | 10579 // to an unrestricted (port >= 1024) when the original traffic was on a |
| 10575 // restricted port (port < 1024). Ensure that we can redirect in all other | 10580 // restricted port (port < 1024). Ensure that we can redirect in all other |
| 10576 // cases. | 10581 // cases. |
| 10577 TEST_P(HttpNetworkTransactionTest, | 10582 TEST_P(HttpNetworkTransactionTest, |
| 10578 AlternateProtocolPortRestrictedAllowed) { | 10583 AlternateProtocolPortRestrictedAllowed) { |
| 10579 HttpRequestInfo restricted_port_request; | 10584 HttpRequestInfo restricted_port_request; |
| 10580 restricted_port_request.method = "GET"; | 10585 restricted_port_request.method = "GET"; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 10611 url::SchemeHostPort(restricted_port_request.url), alternative_service, | 10616 url::SchemeHostPort(restricted_port_request.url), alternative_service, |
| 10612 expiration); | 10617 expiration); |
| 10613 | 10618 |
| 10614 std::unique_ptr<HttpTransaction> trans( | 10619 std::unique_ptr<HttpTransaction> trans( |
| 10615 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10620 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10616 TestCompletionCallback callback; | 10621 TestCompletionCallback callback; |
| 10617 | 10622 |
| 10618 int rv = trans->Start( | 10623 int rv = trans->Start( |
| 10619 &restricted_port_request, | 10624 &restricted_port_request, |
| 10620 callback.callback(), BoundNetLog()); | 10625 callback.callback(), BoundNetLog()); |
| 10621 EXPECT_EQ(ERR_IO_PENDING, rv); | 10626 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10622 // Valid change to restricted port should pass. | 10627 // Valid change to restricted port should pass. |
| 10623 EXPECT_EQ(OK, callback.WaitForResult()); | 10628 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 10624 } | 10629 } |
| 10625 | 10630 |
| 10626 // Ensure that we are not allowed to redirect traffic via an alternate protocol | 10631 // Ensure that we are not allowed to redirect traffic via an alternate protocol |
| 10627 // to an unrestricted (port >= 1024) when the original traffic was on a | 10632 // to an unrestricted (port >= 1024) when the original traffic was on a |
| 10628 // restricted port (port < 1024). Ensure that we can redirect in all other | 10633 // restricted port (port < 1024). Ensure that we can redirect in all other |
| 10629 // cases. | 10634 // cases. |
| 10630 TEST_P(HttpNetworkTransactionTest, | 10635 TEST_P(HttpNetworkTransactionTest, |
| 10631 AlternateProtocolPortUnrestrictedAllowed1) { | 10636 AlternateProtocolPortUnrestrictedAllowed1) { |
| 10632 HttpRequestInfo unrestricted_port_request; | 10637 HttpRequestInfo unrestricted_port_request; |
| 10633 unrestricted_port_request.method = "GET"; | 10638 unrestricted_port_request.method = "GET"; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 10663 http_server_properties->SetAlternativeService( | 10668 http_server_properties->SetAlternativeService( |
| 10664 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, | 10669 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, |
| 10665 expiration); | 10670 expiration); |
| 10666 | 10671 |
| 10667 std::unique_ptr<HttpTransaction> trans( | 10672 std::unique_ptr<HttpTransaction> trans( |
| 10668 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10673 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10669 TestCompletionCallback callback; | 10674 TestCompletionCallback callback; |
| 10670 | 10675 |
| 10671 int rv = trans->Start( | 10676 int rv = trans->Start( |
| 10672 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 10677 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
| 10673 EXPECT_EQ(ERR_IO_PENDING, rv); | 10678 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10674 // Valid change to restricted port should pass. | 10679 // Valid change to restricted port should pass. |
| 10675 EXPECT_EQ(OK, callback.WaitForResult()); | 10680 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 10676 } | 10681 } |
| 10677 | 10682 |
| 10678 // Ensure that we are not allowed to redirect traffic via an alternate protocol | 10683 // Ensure that we are not allowed to redirect traffic via an alternate protocol |
| 10679 // to an unrestricted (port >= 1024) when the original traffic was on a | 10684 // to an unrestricted (port >= 1024) when the original traffic was on a |
| 10680 // restricted port (port < 1024). Ensure that we can redirect in all other | 10685 // restricted port (port < 1024). Ensure that we can redirect in all other |
| 10681 // cases. | 10686 // cases. |
| 10682 TEST_P(HttpNetworkTransactionTest, | 10687 TEST_P(HttpNetworkTransactionTest, |
| 10683 AlternateProtocolPortUnrestrictedAllowed2) { | 10688 AlternateProtocolPortUnrestrictedAllowed2) { |
| 10684 HttpRequestInfo unrestricted_port_request; | 10689 HttpRequestInfo unrestricted_port_request; |
| 10685 unrestricted_port_request.method = "GET"; | 10690 unrestricted_port_request.method = "GET"; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 10715 http_server_properties->SetAlternativeService( | 10720 http_server_properties->SetAlternativeService( |
| 10716 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, | 10721 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, |
| 10717 expiration); | 10722 expiration); |
| 10718 | 10723 |
| 10719 std::unique_ptr<HttpTransaction> trans( | 10724 std::unique_ptr<HttpTransaction> trans( |
| 10720 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10725 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10721 TestCompletionCallback callback; | 10726 TestCompletionCallback callback; |
| 10722 | 10727 |
| 10723 int rv = trans->Start( | 10728 int rv = trans->Start( |
| 10724 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 10729 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
| 10725 EXPECT_EQ(ERR_IO_PENDING, rv); | 10730 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10726 // Valid change to an unrestricted port should pass. | 10731 // Valid change to an unrestricted port should pass. |
| 10727 EXPECT_EQ(OK, callback.WaitForResult()); | 10732 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 10728 } | 10733 } |
| 10729 | 10734 |
| 10730 // Ensure that we are not allowed to redirect traffic via an alternate protocol | 10735 // Ensure that we are not allowed to redirect traffic via an alternate protocol |
| 10731 // to an unsafe port, and that we resume the second HttpStreamFactoryImpl::Job | 10736 // to an unsafe port, and that we resume the second HttpStreamFactoryImpl::Job |
| 10732 // once the alternate protocol request fails. | 10737 // once the alternate protocol request fails. |
| 10733 TEST_P(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { | 10738 TEST_P(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { |
| 10734 HttpRequestInfo request; | 10739 HttpRequestInfo request; |
| 10735 request.method = "GET"; | 10740 request.method = "GET"; |
| 10736 request.url = GURL("http://www.example.org/"); | 10741 request.url = GURL("http://www.example.org/"); |
| 10737 request.load_flags = 0; | 10742 request.load_flags = 0; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 10757 kUnsafePort); | 10762 kUnsafePort); |
| 10758 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10763 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 10759 http_server_properties->SetAlternativeService( | 10764 http_server_properties->SetAlternativeService( |
| 10760 url::SchemeHostPort(request.url), alternative_service, expiration); | 10765 url::SchemeHostPort(request.url), alternative_service, expiration); |
| 10761 | 10766 |
| 10762 std::unique_ptr<HttpTransaction> trans( | 10767 std::unique_ptr<HttpTransaction> trans( |
| 10763 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10768 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10764 TestCompletionCallback callback; | 10769 TestCompletionCallback callback; |
| 10765 | 10770 |
| 10766 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10771 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 10767 EXPECT_EQ(ERR_IO_PENDING, rv); | 10772 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10768 // The HTTP request should succeed. | 10773 // The HTTP request should succeed. |
| 10769 EXPECT_EQ(OK, callback.WaitForResult()); | 10774 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 10770 | 10775 |
| 10771 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10776 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 10772 ASSERT_TRUE(response); | 10777 ASSERT_TRUE(response); |
| 10773 ASSERT_TRUE(response->headers); | 10778 ASSERT_TRUE(response->headers); |
| 10774 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10779 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 10775 | 10780 |
| 10776 std::string response_data; | 10781 std::string response_data; |
| 10777 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10782 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 10778 EXPECT_EQ("hello world", response_data); | 10783 EXPECT_EQ("hello world", response_data); |
| 10779 } | 10784 } |
| 10780 | 10785 |
| 10781 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { | 10786 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
| 10782 HttpRequestInfo request; | 10787 HttpRequestInfo request; |
| 10783 request.method = "GET"; | 10788 request.method = "GET"; |
| 10784 request.url = GURL("https://www.example.org/"); | 10789 request.url = GURL("https://www.example.org/"); |
| 10785 request.load_flags = 0; | 10790 request.load_flags = 0; |
| 10786 | 10791 |
| 10787 std::string alternative_service_http_header = | 10792 std::string alternative_service_http_header = |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10833 session_deps_.socket_factory->AddSocketDataProvider( | 10838 session_deps_.socket_factory->AddSocketDataProvider( |
| 10834 &hanging_non_alternate_protocol_socket); | 10839 &hanging_non_alternate_protocol_socket); |
| 10835 | 10840 |
| 10836 TestCompletionCallback callback; | 10841 TestCompletionCallback callback; |
| 10837 | 10842 |
| 10838 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10843 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10839 std::unique_ptr<HttpTransaction> trans( | 10844 std::unique_ptr<HttpTransaction> trans( |
| 10840 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10845 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10841 | 10846 |
| 10842 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10847 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 10843 EXPECT_EQ(ERR_IO_PENDING, rv); | 10848 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10844 EXPECT_EQ(OK, callback.WaitForResult()); | 10849 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 10845 | 10850 |
| 10846 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10851 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 10847 ASSERT_TRUE(response); | 10852 ASSERT_TRUE(response); |
| 10848 ASSERT_TRUE(response->headers); | 10853 ASSERT_TRUE(response->headers); |
| 10849 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10854 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 10850 | 10855 |
| 10851 std::string response_data; | 10856 std::string response_data; |
| 10852 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10857 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 10853 EXPECT_EQ("hello world", response_data); | 10858 EXPECT_EQ("hello world", response_data); |
| 10854 | 10859 |
| 10855 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10860 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10856 | 10861 |
| 10857 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10862 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 10858 EXPECT_EQ(ERR_IO_PENDING, rv); | 10863 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10859 EXPECT_EQ(OK, callback.WaitForResult()); | 10864 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 10860 | 10865 |
| 10861 response = trans->GetResponseInfo(); | 10866 response = trans->GetResponseInfo(); |
| 10862 ASSERT_TRUE(response); | 10867 ASSERT_TRUE(response); |
| 10863 ASSERT_TRUE(response->headers); | 10868 ASSERT_TRUE(response->headers); |
| 10864 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 10869 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 10865 EXPECT_TRUE(response->was_fetched_via_spdy); | 10870 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 10866 EXPECT_TRUE(response->was_npn_negotiated); | 10871 EXPECT_TRUE(response->was_npn_negotiated); |
| 10867 | 10872 |
| 10868 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10873 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 10869 EXPECT_EQ("hello!", response_data); | 10874 EXPECT_EQ("hello!", response_data); |
| 10870 } | 10875 } |
| 10871 | 10876 |
| 10872 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { | 10877 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
| 10873 HttpRequestInfo request; | 10878 HttpRequestInfo request; |
| 10874 request.method = "GET"; | 10879 request.method = "GET"; |
| 10875 request.url = GURL("https://www.example.org/"); | 10880 request.url = GURL("https://www.example.org/"); |
| 10876 request.load_flags = 0; | 10881 request.load_flags = 0; |
| 10877 | 10882 |
| 10878 // First transaction receives Alt-Svc header over HTTP/1.1. | 10883 // First transaction receives Alt-Svc header over HTTP/1.1. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10945 | 10950 |
| 10946 StaticSocketDataProvider hanging_socket3(NULL, 0, NULL, 0); | 10951 StaticSocketDataProvider hanging_socket3(NULL, 0, NULL, 0); |
| 10947 hanging_socket3.set_connect_data(never_finishing_connect); | 10952 hanging_socket3.set_connect_data(never_finishing_connect); |
| 10948 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket3); | 10953 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket3); |
| 10949 | 10954 |
| 10950 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10955 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10951 TestCompletionCallback callback1; | 10956 TestCompletionCallback callback1; |
| 10952 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 10957 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
| 10953 | 10958 |
| 10954 int rv = trans1.Start(&request, callback1.callback(), BoundNetLog()); | 10959 int rv = trans1.Start(&request, callback1.callback(), BoundNetLog()); |
| 10955 EXPECT_EQ(ERR_IO_PENDING, rv); | 10960 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10956 EXPECT_EQ(OK, callback1.WaitForResult()); | 10961 EXPECT_THAT(callback1.WaitForResult(), IsOk()); |
| 10957 | 10962 |
| 10958 const HttpResponseInfo* response = trans1.GetResponseInfo(); | 10963 const HttpResponseInfo* response = trans1.GetResponseInfo(); |
| 10959 ASSERT_TRUE(response); | 10964 ASSERT_TRUE(response); |
| 10960 ASSERT_TRUE(response->headers); | 10965 ASSERT_TRUE(response->headers); |
| 10961 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10966 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 10962 | 10967 |
| 10963 std::string response_data; | 10968 std::string response_data; |
| 10964 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); | 10969 ASSERT_THAT(ReadTransaction(&trans1, &response_data), IsOk()); |
| 10965 EXPECT_EQ("hello world", response_data); | 10970 EXPECT_EQ("hello world", response_data); |
| 10966 | 10971 |
| 10967 TestCompletionCallback callback2; | 10972 TestCompletionCallback callback2; |
| 10968 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 10973 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
| 10969 rv = trans2.Start(&request, callback2.callback(), BoundNetLog()); | 10974 rv = trans2.Start(&request, callback2.callback(), BoundNetLog()); |
| 10970 EXPECT_EQ(ERR_IO_PENDING, rv); | 10975 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10971 | 10976 |
| 10972 TestCompletionCallback callback3; | 10977 TestCompletionCallback callback3; |
| 10973 HttpNetworkTransaction trans3(DEFAULT_PRIORITY, session.get()); | 10978 HttpNetworkTransaction trans3(DEFAULT_PRIORITY, session.get()); |
| 10974 rv = trans3.Start(&request, callback3.callback(), BoundNetLog()); | 10979 rv = trans3.Start(&request, callback3.callback(), BoundNetLog()); |
| 10975 EXPECT_EQ(ERR_IO_PENDING, rv); | 10980 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 10976 | 10981 |
| 10977 EXPECT_EQ(OK, callback2.WaitForResult()); | 10982 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
| 10978 EXPECT_EQ(OK, callback3.WaitForResult()); | 10983 EXPECT_THAT(callback3.WaitForResult(), IsOk()); |
| 10979 | 10984 |
| 10980 response = trans2.GetResponseInfo(); | 10985 response = trans2.GetResponseInfo(); |
| 10981 ASSERT_TRUE(response); | 10986 ASSERT_TRUE(response); |
| 10982 ASSERT_TRUE(response->headers); | 10987 ASSERT_TRUE(response->headers); |
| 10983 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 10988 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 10984 EXPECT_TRUE(response->was_fetched_via_spdy); | 10989 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 10985 EXPECT_TRUE(response->was_npn_negotiated); | 10990 EXPECT_TRUE(response->was_npn_negotiated); |
| 10986 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 10991 ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk()); |
| 10987 EXPECT_EQ("hello!", response_data); | 10992 EXPECT_EQ("hello!", response_data); |
| 10988 | 10993 |
| 10989 response = trans3.GetResponseInfo(); | 10994 response = trans3.GetResponseInfo(); |
| 10990 ASSERT_TRUE(response); | 10995 ASSERT_TRUE(response); |
| 10991 ASSERT_TRUE(response->headers); | 10996 ASSERT_TRUE(response->headers); |
| 10992 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 10997 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 10993 EXPECT_TRUE(response->was_fetched_via_spdy); | 10998 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 10994 EXPECT_TRUE(response->was_npn_negotiated); | 10999 EXPECT_TRUE(response->was_npn_negotiated); |
| 10995 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); | 11000 ASSERT_THAT(ReadTransaction(&trans3, &response_data), IsOk()); |
| 10996 EXPECT_EQ("hello!", response_data); | 11001 EXPECT_EQ("hello!", response_data); |
| 10997 } | 11002 } |
| 10998 | 11003 |
| 10999 TEST_P(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) { | 11004 TEST_P(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) { |
| 11000 HttpRequestInfo request; | 11005 HttpRequestInfo request; |
| 11001 request.method = "GET"; | 11006 request.method = "GET"; |
| 11002 request.url = GURL("https://www.example.org/"); | 11007 request.url = GURL("https://www.example.org/"); |
| 11003 request.load_flags = 0; | 11008 request.load_flags = 0; |
| 11004 | 11009 |
| 11005 std::string alternative_service_http_header = | 11010 std::string alternative_service_http_header = |
| (...skipping 29 matching lines...) Expand all Loading... |
| 11035 session_deps_.socket_factory->AddSocketDataProvider(&second_transaction); | 11040 session_deps_.socket_factory->AddSocketDataProvider(&second_transaction); |
| 11036 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 11041 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 11037 | 11042 |
| 11038 TestCompletionCallback callback; | 11043 TestCompletionCallback callback; |
| 11039 | 11044 |
| 11040 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11045 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11041 std::unique_ptr<HttpTransaction> trans( | 11046 std::unique_ptr<HttpTransaction> trans( |
| 11042 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11047 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 11043 | 11048 |
| 11044 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11049 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11045 EXPECT_EQ(ERR_IO_PENDING, rv); | 11050 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 11046 EXPECT_EQ(OK, callback.WaitForResult()); | 11051 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 11047 | 11052 |
| 11048 const HttpResponseInfo* response = trans->GetResponseInfo(); | 11053 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 11049 ASSERT_TRUE(response); | 11054 ASSERT_TRUE(response); |
| 11050 ASSERT_TRUE(response->headers); | 11055 ASSERT_TRUE(response->headers); |
| 11051 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 11056 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 11052 | 11057 |
| 11053 std::string response_data; | 11058 std::string response_data; |
| 11054 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11059 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 11055 EXPECT_EQ("hello world", response_data); | 11060 EXPECT_EQ("hello world", response_data); |
| 11056 | 11061 |
| 11057 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11062 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 11058 | 11063 |
| 11059 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11064 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11060 EXPECT_EQ(ERR_IO_PENDING, rv); | 11065 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 11061 EXPECT_EQ(OK, callback.WaitForResult()); | 11066 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 11062 | 11067 |
| 11063 response = trans->GetResponseInfo(); | 11068 response = trans->GetResponseInfo(); |
| 11064 ASSERT_TRUE(response); | 11069 ASSERT_TRUE(response); |
| 11065 ASSERT_TRUE(response->headers); | 11070 ASSERT_TRUE(response->headers); |
| 11066 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 11071 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 11067 EXPECT_FALSE(response->was_fetched_via_spdy); | 11072 EXPECT_FALSE(response->was_fetched_via_spdy); |
| 11068 EXPECT_FALSE(response->was_npn_negotiated); | 11073 EXPECT_FALSE(response->was_npn_negotiated); |
| 11069 | 11074 |
| 11070 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11075 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 11071 EXPECT_EQ("hello world", response_data); | 11076 EXPECT_EQ("hello world", response_data); |
| 11072 } | 11077 } |
| 11073 | 11078 |
| 11074 class CapturingProxyResolver : public ProxyResolver { | 11079 class CapturingProxyResolver : public ProxyResolver { |
| 11075 public: | 11080 public: |
| 11076 CapturingProxyResolver() {} | 11081 CapturingProxyResolver() {} |
| 11077 ~CapturingProxyResolver() override {} | 11082 ~CapturingProxyResolver() override {} |
| 11078 | 11083 |
| 11079 int GetProxyForURL(const GURL& url, | 11084 int GetProxyForURL(const GURL& url, |
| 11080 ProxyInfo* results, | 11085 ProxyInfo* results, |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11199 session_deps_.socket_factory->AddSocketDataProvider( | 11204 session_deps_.socket_factory->AddSocketDataProvider( |
| 11200 &hanging_non_alternate_protocol_socket); | 11205 &hanging_non_alternate_protocol_socket); |
| 11201 | 11206 |
| 11202 TestCompletionCallback callback; | 11207 TestCompletionCallback callback; |
| 11203 | 11208 |
| 11204 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11209 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11205 std::unique_ptr<HttpTransaction> trans( | 11210 std::unique_ptr<HttpTransaction> trans( |
| 11206 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11211 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 11207 | 11212 |
| 11208 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11213 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11209 EXPECT_EQ(ERR_IO_PENDING, rv); | 11214 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 11210 EXPECT_EQ(OK, callback.WaitForResult()); | 11215 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 11211 | 11216 |
| 11212 const HttpResponseInfo* response = trans->GetResponseInfo(); | 11217 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 11213 ASSERT_TRUE(response); | 11218 ASSERT_TRUE(response); |
| 11214 ASSERT_TRUE(response->headers); | 11219 ASSERT_TRUE(response->headers); |
| 11215 EXPECT_EQ("HTTP/0.9 200 OK", response->headers->GetStatusLine()); | 11220 EXPECT_EQ("HTTP/0.9 200 OK", response->headers->GetStatusLine()); |
| 11216 EXPECT_FALSE(response->was_fetched_via_spdy); | 11221 EXPECT_FALSE(response->was_fetched_via_spdy); |
| 11217 EXPECT_TRUE(response->was_npn_negotiated); | 11222 EXPECT_TRUE(response->was_npn_negotiated); |
| 11218 | 11223 |
| 11219 std::string response_data; | 11224 std::string response_data; |
| 11220 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11225 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 11221 EXPECT_EQ("hello world", response_data); | 11226 EXPECT_EQ("hello world", response_data); |
| 11222 | 11227 |
| 11223 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11228 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 11224 | 11229 |
| 11225 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11230 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11226 EXPECT_EQ(ERR_IO_PENDING, rv); | 11231 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 11227 EXPECT_EQ(OK, callback.WaitForResult()); | 11232 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 11228 | 11233 |
| 11229 response = trans->GetResponseInfo(); | 11234 response = trans->GetResponseInfo(); |
| 11230 ASSERT_TRUE(response); | 11235 ASSERT_TRUE(response); |
| 11231 ASSERT_TRUE(response->headers); | 11236 ASSERT_TRUE(response->headers); |
| 11232 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 11237 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 11233 EXPECT_TRUE(response->was_fetched_via_spdy); | 11238 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 11234 EXPECT_TRUE(response->was_npn_negotiated); | 11239 EXPECT_TRUE(response->was_npn_negotiated); |
| 11235 | 11240 |
| 11236 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11241 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 11237 EXPECT_EQ("hello!", response_data); | 11242 EXPECT_EQ("hello!", response_data); |
| 11238 ASSERT_EQ(2u, capturing_proxy_resolver.resolved().size()); | 11243 ASSERT_EQ(2u, capturing_proxy_resolver.resolved().size()); |
| 11239 EXPECT_EQ("https://www.example.org/", | 11244 EXPECT_EQ("https://www.example.org/", |
| 11240 capturing_proxy_resolver.resolved()[0].spec()); | 11245 capturing_proxy_resolver.resolved()[0].spec()); |
| 11241 EXPECT_EQ("https://www.example.org/", | 11246 EXPECT_EQ("https://www.example.org/", |
| 11242 capturing_proxy_resolver.resolved()[1].spec()); | 11247 capturing_proxy_resolver.resolved()[1].spec()); |
| 11243 | 11248 |
| 11244 LoadTimingInfo load_timing_info; | 11249 LoadTimingInfo load_timing_info; |
| 11245 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 11250 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 11246 TestLoadTimingNotReusedWithPac(load_timing_info, | 11251 TestLoadTimingNotReusedWithPac(load_timing_info, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11296 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 11301 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 11297 | 11302 |
| 11298 TestCompletionCallback callback; | 11303 TestCompletionCallback callback; |
| 11299 | 11304 |
| 11300 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11305 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11301 | 11306 |
| 11302 std::unique_ptr<HttpTransaction> trans( | 11307 std::unique_ptr<HttpTransaction> trans( |
| 11303 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11308 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 11304 | 11309 |
| 11305 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11310 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11306 EXPECT_EQ(ERR_IO_PENDING, rv); | 11311 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 11307 EXPECT_EQ(OK, callback.WaitForResult()); | 11312 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 11308 | 11313 |
| 11309 const HttpResponseInfo* response = trans->GetResponseInfo(); | 11314 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 11310 ASSERT_TRUE(response); | 11315 ASSERT_TRUE(response); |
| 11311 ASSERT_TRUE(response->headers); | 11316 ASSERT_TRUE(response->headers); |
| 11312 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 11317 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 11313 | 11318 |
| 11314 std::string response_data; | 11319 std::string response_data; |
| 11315 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11320 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 11316 EXPECT_EQ("hello world", response_data); | 11321 EXPECT_EQ("hello world", response_data); |
| 11317 | 11322 |
| 11318 // Set up an initial SpdySession in the pool to reuse. | 11323 // Set up an initial SpdySession in the pool to reuse. |
| 11319 HostPortPair host_port_pair("www.example.org", 443); | 11324 HostPortPair host_port_pair("www.example.org", 443); |
| 11320 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 11325 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
| 11321 PRIVACY_MODE_DISABLED); | 11326 PRIVACY_MODE_DISABLED); |
| 11322 base::WeakPtr<SpdySession> spdy_session = | 11327 base::WeakPtr<SpdySession> spdy_session = |
| 11323 CreateSecureSpdySession(session.get(), key, BoundNetLog()); | 11328 CreateSecureSpdySession(session.get(), key, BoundNetLog()); |
| 11324 | 11329 |
| 11325 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11330 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 11326 | 11331 |
| 11327 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11332 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11328 EXPECT_EQ(ERR_IO_PENDING, rv); | 11333 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 11329 EXPECT_EQ(OK, callback.WaitForResult()); | 11334 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 11330 | 11335 |
| 11331 response = trans->GetResponseInfo(); | 11336 response = trans->GetResponseInfo(); |
| 11332 ASSERT_TRUE(response); | 11337 ASSERT_TRUE(response); |
| 11333 ASSERT_TRUE(response->headers); | 11338 ASSERT_TRUE(response->headers); |
| 11334 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 11339 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 11335 EXPECT_TRUE(response->was_fetched_via_spdy); | 11340 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 11336 EXPECT_TRUE(response->was_npn_negotiated); | 11341 EXPECT_TRUE(response->was_npn_negotiated); |
| 11337 | 11342 |
| 11338 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 11343 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 11339 EXPECT_EQ("hello!", response_data); | 11344 EXPECT_EQ("hello!", response_data); |
| 11340 } | 11345 } |
| 11341 | 11346 |
| 11342 // GenerateAuthToken is a mighty big test. | 11347 // GenerateAuthToken is a mighty big test. |
| 11343 // It tests all permutation of GenerateAuthToken behavior: | 11348 // It tests all permutation of GenerateAuthToken behavior: |
| 11344 // - Synchronous and Asynchronous completion. | 11349 // - Synchronous and Asynchronous completion. |
| 11345 // - OK or error on completion. | 11350 // - OK or error on completion. |
| 11346 // - Direct connection, non-authenticating proxy, and authenticating proxy. | 11351 // - Direct connection, non-authenticating proxy, and authenticating proxy. |
| 11347 // - HTTP or HTTPS backend (to include proxy tunneling). | 11352 // - HTTP or HTTPS backend (to include proxy tunneling). |
| 11348 // - Non-authenticating and authenticating backend. | 11353 // - Non-authenticating and authenticating backend. |
| (...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11863 writes, arraysize(writes)); | 11868 writes, arraysize(writes)); |
| 11864 session_deps_.socket_factory->AddSocketDataProvider(&data_provider); | 11869 session_deps_.socket_factory->AddSocketDataProvider(&data_provider); |
| 11865 | 11870 |
| 11866 const char kSocketGroup[] = "www.example.com:80"; | 11871 const char kSocketGroup[] = "www.example.com:80"; |
| 11867 | 11872 |
| 11868 // First round of authentication. | 11873 // First round of authentication. |
| 11869 auth_handler->SetGenerateExpectation(false, OK); | 11874 auth_handler->SetGenerateExpectation(false, OK); |
| 11870 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11875 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11871 if (rv == ERR_IO_PENDING) | 11876 if (rv == ERR_IO_PENDING) |
| 11872 rv = callback.WaitForResult(); | 11877 rv = callback.WaitForResult(); |
| 11873 EXPECT_EQ(OK, rv); | 11878 EXPECT_THAT(rv, IsOk()); |
| 11874 response = trans->GetResponseInfo(); | 11879 response = trans->GetResponseInfo(); |
| 11875 ASSERT_TRUE(response); | 11880 ASSERT_TRUE(response); |
| 11876 EXPECT_TRUE(response->auth_challenge); | 11881 EXPECT_TRUE(response->auth_challenge); |
| 11877 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11882 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
| 11878 | 11883 |
| 11879 // In between rounds, another request comes in for the same domain. | 11884 // In between rounds, another request comes in for the same domain. |
| 11880 // It should not be able to grab the TCP socket that trans has already | 11885 // It should not be able to grab the TCP socket that trans has already |
| 11881 // claimed. | 11886 // claimed. |
| 11882 std::unique_ptr<HttpTransaction> trans_compete( | 11887 std::unique_ptr<HttpTransaction> trans_compete( |
| 11883 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11888 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 11884 TestCompletionCallback callback_compete; | 11889 TestCompletionCallback callback_compete; |
| 11885 rv = trans_compete->Start( | 11890 rv = trans_compete->Start( |
| 11886 &request, callback_compete.callback(), BoundNetLog()); | 11891 &request, callback_compete.callback(), BoundNetLog()); |
| 11887 EXPECT_EQ(ERR_IO_PENDING, rv); | 11892 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 11888 // callback_compete.WaitForResult at this point would stall forever, | 11893 // callback_compete.WaitForResult at this point would stall forever, |
| 11889 // since the HttpNetworkTransaction does not release the request back to | 11894 // since the HttpNetworkTransaction does not release the request back to |
| 11890 // the pool until after authentication completes. | 11895 // the pool until after authentication completes. |
| 11891 | 11896 |
| 11892 // Second round of authentication. | 11897 // Second round of authentication. |
| 11893 auth_handler->SetGenerateExpectation(false, OK); | 11898 auth_handler->SetGenerateExpectation(false, OK); |
| 11894 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback.callback()); | 11899 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback.callback()); |
| 11895 if (rv == ERR_IO_PENDING) | 11900 if (rv == ERR_IO_PENDING) |
| 11896 rv = callback.WaitForResult(); | 11901 rv = callback.WaitForResult(); |
| 11897 EXPECT_EQ(OK, rv); | 11902 EXPECT_THAT(rv, IsOk()); |
| 11898 response = trans->GetResponseInfo(); | 11903 response = trans->GetResponseInfo(); |
| 11899 ASSERT_TRUE(response); | 11904 ASSERT_TRUE(response); |
| 11900 EXPECT_FALSE(response->auth_challenge); | 11905 EXPECT_FALSE(response->auth_challenge); |
| 11901 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11906 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
| 11902 | 11907 |
| 11903 // Third round of authentication. | 11908 // Third round of authentication. |
| 11904 auth_handler->SetGenerateExpectation(false, OK); | 11909 auth_handler->SetGenerateExpectation(false, OK); |
| 11905 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 11910 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
| 11906 if (rv == ERR_IO_PENDING) | 11911 if (rv == ERR_IO_PENDING) |
| 11907 rv = callback.WaitForResult(); | 11912 rv = callback.WaitForResult(); |
| 11908 EXPECT_EQ(OK, rv); | 11913 EXPECT_THAT(rv, IsOk()); |
| 11909 response = trans->GetResponseInfo(); | 11914 response = trans->GetResponseInfo(); |
| 11910 ASSERT_TRUE(response); | 11915 ASSERT_TRUE(response); |
| 11911 EXPECT_FALSE(response->auth_challenge); | 11916 EXPECT_FALSE(response->auth_challenge); |
| 11912 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11917 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
| 11913 | 11918 |
| 11914 // Fourth round of authentication, which completes successfully. | 11919 // Fourth round of authentication, which completes successfully. |
| 11915 auth_handler->SetGenerateExpectation(false, OK); | 11920 auth_handler->SetGenerateExpectation(false, OK); |
| 11916 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); | 11921 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback()); |
| 11917 if (rv == ERR_IO_PENDING) | 11922 if (rv == ERR_IO_PENDING) |
| 11918 rv = callback.WaitForResult(); | 11923 rv = callback.WaitForResult(); |
| 11919 EXPECT_EQ(OK, rv); | 11924 EXPECT_THAT(rv, IsOk()); |
| 11920 response = trans->GetResponseInfo(); | 11925 response = trans->GetResponseInfo(); |
| 11921 ASSERT_TRUE(response); | 11926 ASSERT_TRUE(response); |
| 11922 EXPECT_FALSE(response->auth_challenge); | 11927 EXPECT_FALSE(response->auth_challenge); |
| 11923 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11928 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
| 11924 | 11929 |
| 11925 // Read the body since the fourth round was successful. This will also | 11930 // Read the body since the fourth round was successful. This will also |
| 11926 // release the socket back to the pool. | 11931 // release the socket back to the pool. |
| 11927 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(50)); | 11932 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(50)); |
| 11928 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 11933 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
| 11929 if (rv == ERR_IO_PENDING) | 11934 if (rv == ERR_IO_PENDING) |
| 11930 rv = callback.WaitForResult(); | 11935 rv = callback.WaitForResult(); |
| 11931 EXPECT_EQ(3, rv); | 11936 EXPECT_EQ(3, rv); |
| 11932 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 11937 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
| 11933 EXPECT_EQ(0, rv); | 11938 EXPECT_EQ(0, rv); |
| 11934 // There are still 0 idle sockets, since the trans_compete transaction | 11939 // There are still 0 idle sockets, since the trans_compete transaction |
| 11935 // will be handed it immediately after trans releases it to the group. | 11940 // will be handed it immediately after trans releases it to the group. |
| 11936 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11941 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
| 11937 | 11942 |
| 11938 // The competing request can now finish. Wait for the headers and then | 11943 // The competing request can now finish. Wait for the headers and then |
| 11939 // read the body. | 11944 // read the body. |
| 11940 rv = callback_compete.WaitForResult(); | 11945 rv = callback_compete.WaitForResult(); |
| 11941 EXPECT_EQ(OK, rv); | 11946 EXPECT_THAT(rv, IsOk()); |
| 11942 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); | 11947 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); |
| 11943 if (rv == ERR_IO_PENDING) | 11948 if (rv == ERR_IO_PENDING) |
| 11944 rv = callback.WaitForResult(); | 11949 rv = callback.WaitForResult(); |
| 11945 EXPECT_EQ(3, rv); | 11950 EXPECT_EQ(3, rv); |
| 11946 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); | 11951 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); |
| 11947 EXPECT_EQ(0, rv); | 11952 EXPECT_EQ(0, rv); |
| 11948 | 11953 |
| 11949 // Finally, the socket is released to the group. | 11954 // Finally, the socket is released to the group. |
| 11950 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 11955 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
| 11951 } | 11956 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11986 session_deps_.socket_factory->AddSocketDataProvider(&data); | 11991 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 11987 | 11992 |
| 11988 TestCompletionCallback callback; | 11993 TestCompletionCallback callback; |
| 11989 | 11994 |
| 11990 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11995 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11991 std::unique_ptr<HttpTransaction> trans( | 11996 std::unique_ptr<HttpTransaction> trans( |
| 11992 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11997 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 11993 | 11998 |
| 11994 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 11999 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11995 | 12000 |
| 11996 EXPECT_EQ(ERR_IO_PENDING, rv); | 12001 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 11997 EXPECT_EQ(OK, callback.WaitForResult()); | 12002 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 11998 | 12003 |
| 11999 const HttpResponseInfo* response = trans->GetResponseInfo(); | 12004 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 12000 ASSERT_TRUE(response); | 12005 ASSERT_TRUE(response); |
| 12001 ASSERT_TRUE(response->headers); | 12006 ASSERT_TRUE(response->headers); |
| 12002 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 12007 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 12003 | 12008 |
| 12004 std::string response_data; | 12009 std::string response_data; |
| 12005 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 12010 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 12006 EXPECT_EQ("hello world", response_data); | 12011 EXPECT_EQ("hello world", response_data); |
| 12007 | 12012 |
| 12008 EXPECT_FALSE(response->was_fetched_via_spdy); | 12013 EXPECT_FALSE(response->was_fetched_via_spdy); |
| 12009 EXPECT_TRUE(response->was_npn_negotiated); | 12014 EXPECT_TRUE(response->was_npn_negotiated); |
| 12010 } | 12015 } |
| 12011 | 12016 |
| 12012 // Simulate the SSL handshake completing with an NPN negotiation followed by an | 12017 // Simulate the SSL handshake completing with an NPN negotiation followed by an |
| 12013 // immediate server closing of the socket. | 12018 // immediate server closing of the socket. |
| 12014 // Regression test for https://crbug.com/46369. | 12019 // Regression test for https://crbug.com/46369. |
| 12015 TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { | 12020 TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 12034 arraysize(spdy_writes)); | 12039 arraysize(spdy_writes)); |
| 12035 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 12040 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 12036 | 12041 |
| 12037 TestCompletionCallback callback; | 12042 TestCompletionCallback callback; |
| 12038 | 12043 |
| 12039 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12044 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12040 std::unique_ptr<HttpTransaction> trans( | 12045 std::unique_ptr<HttpTransaction> trans( |
| 12041 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12046 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12042 | 12047 |
| 12043 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12048 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 12044 EXPECT_EQ(ERR_IO_PENDING, rv); | 12049 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12045 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 12050 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); |
| 12046 } | 12051 } |
| 12047 | 12052 |
| 12048 // A subclass of HttpAuthHandlerMock that records the request URL when | 12053 // A subclass of HttpAuthHandlerMock that records the request URL when |
| 12049 // it gets it. This is needed since the auth handler may get destroyed | 12054 // it gets it. This is needed since the auth handler may get destroyed |
| 12050 // before we get a chance to query it. | 12055 // before we get a chance to query it. |
| 12051 class UrlRecordingHttpAuthHandlerMock : public HttpAuthHandlerMock { | 12056 class UrlRecordingHttpAuthHandlerMock : public HttpAuthHandlerMock { |
| 12052 public: | 12057 public: |
| 12053 explicit UrlRecordingHttpAuthHandlerMock(GURL* url) : url_(url) {} | 12058 explicit UrlRecordingHttpAuthHandlerMock(GURL* url) : url_(url) {} |
| 12054 | 12059 |
| 12055 ~UrlRecordingHttpAuthHandlerMock() override {} | 12060 ~UrlRecordingHttpAuthHandlerMock() override {} |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12094 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12099 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12095 | 12100 |
| 12096 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 12101 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 12097 data.set_connect_data(mock_connect); | 12102 data.set_connect_data(mock_connect); |
| 12098 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12103 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 12099 | 12104 |
| 12100 TestCompletionCallback callback; | 12105 TestCompletionCallback callback; |
| 12101 | 12106 |
| 12102 BoundTestNetLog log; | 12107 BoundTestNetLog log; |
| 12103 int rv = trans->Start(&request, callback.callback(), log.bound()); | 12108 int rv = trans->Start(&request, callback.callback(), log.bound()); |
| 12104 EXPECT_EQ(ERR_IO_PENDING, rv); | 12109 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12105 trans.reset(); // Cancel the transaction here. | 12110 trans.reset(); // Cancel the transaction here. |
| 12106 | 12111 |
| 12107 base::RunLoop().RunUntilIdle(); | 12112 base::RunLoop().RunUntilIdle(); |
| 12108 } | 12113 } |
| 12109 | 12114 |
| 12110 // Test that if a transaction is cancelled after receiving the headers, the | 12115 // Test that if a transaction is cancelled after receiving the headers, the |
| 12111 // stream is drained properly and added back to the socket pool. The main | 12116 // stream is drained properly and added back to the socket pool. The main |
| 12112 // purpose of this test is to make sure that an HttpStreamParser can be read | 12117 // purpose of this test is to make sure that an HttpStreamParser can be read |
| 12113 // from after the HttpNetworkTransaction and the objects it owns have been | 12118 // from after the HttpNetworkTransaction and the objects it owns have been |
| 12114 // deleted. | 12119 // deleted. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 12132 { | 12137 { |
| 12133 HttpRequestInfo request; | 12138 HttpRequestInfo request; |
| 12134 request.method = "GET"; | 12139 request.method = "GET"; |
| 12135 request.url = GURL("http://www.example.org/"); | 12140 request.url = GURL("http://www.example.org/"); |
| 12136 request.load_flags = 0; | 12141 request.load_flags = 0; |
| 12137 | 12142 |
| 12138 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 12143 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
| 12139 TestCompletionCallback callback; | 12144 TestCompletionCallback callback; |
| 12140 | 12145 |
| 12141 int rv = trans.Start(&request, callback.callback(), BoundNetLog()); | 12146 int rv = trans.Start(&request, callback.callback(), BoundNetLog()); |
| 12142 EXPECT_EQ(ERR_IO_PENDING, rv); | 12147 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12143 callback.WaitForResult(); | 12148 callback.WaitForResult(); |
| 12144 | 12149 |
| 12145 const HttpResponseInfo* response = trans.GetResponseInfo(); | 12150 const HttpResponseInfo* response = trans.GetResponseInfo(); |
| 12146 ASSERT_TRUE(response); | 12151 ASSERT_TRUE(response); |
| 12147 EXPECT_TRUE(response->headers); | 12152 EXPECT_TRUE(response->headers); |
| 12148 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 12153 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 12149 | 12154 |
| 12150 // The transaction and HttpRequestInfo are deleted. | 12155 // The transaction and HttpRequestInfo are deleted. |
| 12151 } | 12156 } |
| 12152 | 12157 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12190 TestCompletionCallback callback1; | 12195 TestCompletionCallback callback1; |
| 12191 | 12196 |
| 12192 std::unique_ptr<HttpTransaction> trans( | 12197 std::unique_ptr<HttpTransaction> trans( |
| 12193 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12198 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12194 BeforeHeadersSentHandler headers_handler; | 12199 BeforeHeadersSentHandler headers_handler; |
| 12195 trans->SetBeforeHeadersSentCallback( | 12200 trans->SetBeforeHeadersSentCallback( |
| 12196 base::Bind(&BeforeHeadersSentHandler::OnBeforeHeadersSent, | 12201 base::Bind(&BeforeHeadersSentHandler::OnBeforeHeadersSent, |
| 12197 base::Unretained(&headers_handler))); | 12202 base::Unretained(&headers_handler))); |
| 12198 | 12203 |
| 12199 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 12204 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 12200 EXPECT_EQ(ERR_IO_PENDING, rv); | 12205 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12201 | 12206 |
| 12202 rv = callback1.WaitForResult(); | 12207 rv = callback1.WaitForResult(); |
| 12203 EXPECT_EQ(OK, rv); | 12208 EXPECT_THAT(rv, IsOk()); |
| 12204 | 12209 |
| 12205 const HttpResponseInfo* response = trans->GetResponseInfo(); | 12210 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 12206 ASSERT_TRUE(response); | 12211 ASSERT_TRUE(response); |
| 12207 | 12212 |
| 12208 EXPECT_TRUE(response->headers->IsKeepAlive()); | 12213 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 12209 EXPECT_EQ(200, response->headers->response_code()); | 12214 EXPECT_EQ(200, response->headers->response_code()); |
| 12210 EXPECT_EQ(100, response->headers->GetContentLength()); | 12215 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 12211 EXPECT_TRUE(response->was_fetched_via_proxy); | 12216 EXPECT_TRUE(response->was_fetched_via_proxy); |
| 12212 EXPECT_TRUE( | 12217 EXPECT_TRUE( |
| 12213 response->proxy_server.Equals(HostPortPair::FromString("myproxy:70"))); | 12218 response->proxy_server.Equals(HostPortPair::FromString("myproxy:70"))); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12263 TestCompletionCallback callback1; | 12268 TestCompletionCallback callback1; |
| 12264 | 12269 |
| 12265 std::unique_ptr<HttpTransaction> trans( | 12270 std::unique_ptr<HttpTransaction> trans( |
| 12266 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12271 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12267 BeforeHeadersSentHandler headers_handler; | 12272 BeforeHeadersSentHandler headers_handler; |
| 12268 trans->SetBeforeHeadersSentCallback( | 12273 trans->SetBeforeHeadersSentCallback( |
| 12269 base::Bind(&BeforeHeadersSentHandler::OnBeforeHeadersSent, | 12274 base::Bind(&BeforeHeadersSentHandler::OnBeforeHeadersSent, |
| 12270 base::Unretained(&headers_handler))); | 12275 base::Unretained(&headers_handler))); |
| 12271 | 12276 |
| 12272 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 12277 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 12273 EXPECT_EQ(ERR_IO_PENDING, rv); | 12278 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12274 | 12279 |
| 12275 rv = callback1.WaitForResult(); | 12280 rv = callback1.WaitForResult(); |
| 12276 EXPECT_EQ(OK, rv); | 12281 EXPECT_THAT(rv, IsOk()); |
| 12277 TestNetLogEntry::List entries; | 12282 TestNetLogEntry::List entries; |
| 12278 log.GetEntries(&entries); | 12283 log.GetEntries(&entries); |
| 12279 size_t pos = ExpectLogContainsSomewhere( | 12284 size_t pos = ExpectLogContainsSomewhere( |
| 12280 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 12285 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 12281 NetLog::PHASE_NONE); | 12286 NetLog::PHASE_NONE); |
| 12282 ExpectLogContainsSomewhere( | 12287 ExpectLogContainsSomewhere( |
| 12283 entries, pos, | 12288 entries, pos, |
| 12284 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 12289 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 12285 NetLog::PHASE_NONE); | 12290 NetLog::PHASE_NONE); |
| 12286 | 12291 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12342 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 12347 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 12343 SSLSocketDataProvider ssl(ASYNC, OK); | 12348 SSLSocketDataProvider ssl(ASYNC, OK); |
| 12344 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 12349 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 12345 | 12350 |
| 12346 TestCompletionCallback callback1; | 12351 TestCompletionCallback callback1; |
| 12347 | 12352 |
| 12348 std::unique_ptr<HttpTransaction> trans( | 12353 std::unique_ptr<HttpTransaction> trans( |
| 12349 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12354 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12350 | 12355 |
| 12351 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 12356 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 12352 EXPECT_EQ(ERR_IO_PENDING, rv); | 12357 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12353 | 12358 |
| 12354 rv = callback1.WaitForResult(); | 12359 rv = callback1.WaitForResult(); |
| 12355 EXPECT_EQ(OK, rv); | 12360 EXPECT_THAT(rv, IsOk()); |
| 12356 TestNetLogEntry::List entries; | 12361 TestNetLogEntry::List entries; |
| 12357 log.GetEntries(&entries); | 12362 log.GetEntries(&entries); |
| 12358 size_t pos = ExpectLogContainsSomewhere( | 12363 size_t pos = ExpectLogContainsSomewhere( |
| 12359 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 12364 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 12360 NetLog::PHASE_NONE); | 12365 NetLog::PHASE_NONE); |
| 12361 ExpectLogContainsSomewhere( | 12366 ExpectLogContainsSomewhere( |
| 12362 entries, pos, NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 12367 entries, pos, NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 12363 NetLog::PHASE_NONE); | 12368 NetLog::PHASE_NONE); |
| 12364 | 12369 |
| 12365 const HttpResponseInfo* response = trans->GetResponseInfo(); | 12370 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12413 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 12418 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 12414 SSLSocketDataProvider ssl(ASYNC, OK); | 12419 SSLSocketDataProvider ssl(ASYNC, OK); |
| 12415 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 12420 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 12416 | 12421 |
| 12417 TestCompletionCallback callback1; | 12422 TestCompletionCallback callback1; |
| 12418 | 12423 |
| 12419 std::unique_ptr<HttpTransaction> trans( | 12424 std::unique_ptr<HttpTransaction> trans( |
| 12420 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12425 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12421 | 12426 |
| 12422 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 12427 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 12423 EXPECT_EQ(ERR_IO_PENDING, rv); | 12428 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12424 | 12429 |
| 12425 rv = callback1.WaitForResult(); | 12430 rv = callback1.WaitForResult(); |
| 12426 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); | 12431 EXPECT_THAT(rv, IsError(ERR_EMPTY_RESPONSE)); |
| 12427 TestNetLogEntry::List entries; | 12432 TestNetLogEntry::List entries; |
| 12428 log.GetEntries(&entries); | 12433 log.GetEntries(&entries); |
| 12429 size_t pos = ExpectLogContainsSomewhere( | 12434 size_t pos = ExpectLogContainsSomewhere( |
| 12430 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 12435 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 12431 NetLog::PHASE_NONE); | 12436 NetLog::PHASE_NONE); |
| 12432 ExpectLogContainsSomewhere( | 12437 ExpectLogContainsSomewhere( |
| 12433 entries, pos, | 12438 entries, pos, |
| 12434 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 12439 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 12435 NetLog::PHASE_NONE); | 12440 NetLog::PHASE_NONE); |
| 12436 } | 12441 } |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12472 request.load_flags = 0; | 12477 request.load_flags = 0; |
| 12473 | 12478 |
| 12474 // This is the important line that marks this as a preconnect. | 12479 // This is the important line that marks this as a preconnect. |
| 12475 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; | 12480 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; |
| 12476 | 12481 |
| 12477 std::unique_ptr<HttpTransaction> trans( | 12482 std::unique_ptr<HttpTransaction> trans( |
| 12478 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12483 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12479 | 12484 |
| 12480 TestCompletionCallback callback; | 12485 TestCompletionCallback callback; |
| 12481 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12486 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 12482 EXPECT_EQ(ERR_IO_PENDING, rv); | 12487 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12483 EXPECT_EQ(OK, callback.WaitForResult()); | 12488 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 12484 } | 12489 } |
| 12485 | 12490 |
| 12486 // Given a net error, cause that error to be returned from the first Write() | 12491 // Given a net error, cause that error to be returned from the first Write() |
| 12487 // call and verify that the HttpTransaction fails with that error. | 12492 // call and verify that the HttpTransaction fails with that error. |
| 12488 void HttpNetworkTransactionTest::CheckErrorIsPassedBack( | 12493 void HttpNetworkTransactionTest::CheckErrorIsPassedBack( |
| 12489 int error, IoMode mode) { | 12494 int error, IoMode mode) { |
| 12490 HttpRequestInfo request_info; | 12495 HttpRequestInfo request_info; |
| 12491 request_info.url = GURL("https://www.example.com/"); | 12496 request_info.url = GURL("https://www.example.com/"); |
| 12492 request_info.method = "GET"; | 12497 request_info.method = "GET"; |
| 12493 request_info.load_flags = LOAD_NORMAL; | 12498 request_info.load_flags = LOAD_NORMAL; |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12587 StaticSocketDataProvider data4(NULL, 0, NULL, 0); | 12592 StaticSocketDataProvider data4(NULL, 0, NULL, 0); |
| 12588 session_deps_.socket_factory->AddSocketDataProvider(&data4); | 12593 session_deps_.socket_factory->AddSocketDataProvider(&data4); |
| 12589 | 12594 |
| 12590 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12595 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12591 std::unique_ptr<HttpTransaction> trans( | 12596 std::unique_ptr<HttpTransaction> trans( |
| 12592 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12597 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12593 | 12598 |
| 12594 // Begin the SSL handshake with the peer. This consumes ssl_data1. | 12599 // Begin the SSL handshake with the peer. This consumes ssl_data1. |
| 12595 TestCompletionCallback callback; | 12600 TestCompletionCallback callback; |
| 12596 int rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); | 12601 int rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); |
| 12597 ASSERT_EQ(ERR_IO_PENDING, rv); | 12602 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12598 | 12603 |
| 12599 // Complete the SSL handshake, which should abort due to requiring a | 12604 // Complete the SSL handshake, which should abort due to requiring a |
| 12600 // client certificate. | 12605 // client certificate. |
| 12601 rv = callback.WaitForResult(); | 12606 rv = callback.WaitForResult(); |
| 12602 ASSERT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); | 12607 ASSERT_THAT(rv, IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
| 12603 | 12608 |
| 12604 // Indicate that no certificate should be supplied. From the perspective | 12609 // Indicate that no certificate should be supplied. From the perspective |
| 12605 // of SSLClientCertCache, NULL is just as meaningful as a real | 12610 // of SSLClientCertCache, NULL is just as meaningful as a real |
| 12606 // certificate, so this is the same as supply a | 12611 // certificate, so this is the same as supply a |
| 12607 // legitimate-but-unacceptable certificate. | 12612 // legitimate-but-unacceptable certificate. |
| 12608 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); | 12613 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); |
| 12609 ASSERT_EQ(ERR_IO_PENDING, rv); | 12614 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12610 | 12615 |
| 12611 // Ensure the certificate was added to the client auth cache before | 12616 // Ensure the certificate was added to the client auth cache before |
| 12612 // allowing the connection to continue restarting. | 12617 // allowing the connection to continue restarting. |
| 12613 scoped_refptr<X509Certificate> client_cert; | 12618 scoped_refptr<X509Certificate> client_cert; |
| 12614 scoped_refptr<SSLPrivateKey> client_private_key; | 12619 scoped_refptr<SSLPrivateKey> client_private_key; |
| 12615 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( | 12620 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( |
| 12616 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); | 12621 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); |
| 12617 ASSERT_FALSE(client_cert); | 12622 ASSERT_FALSE(client_cert); |
| 12618 | 12623 |
| 12619 // Restart the handshake. This will consume ssl_data2, which fails, and | 12624 // Restart the handshake. This will consume ssl_data2, which fails, and |
| 12620 // then consume ssl_data3 and ssl_data4, both of which should also fail. | 12625 // then consume ssl_data3 and ssl_data4, both of which should also fail. |
| 12621 // The result code is checked against what ssl_data4 should return. | 12626 // The result code is checked against what ssl_data4 should return. |
| 12622 rv = callback.WaitForResult(); | 12627 rv = callback.WaitForResult(); |
| 12623 ASSERT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); | 12628 ASSERT_THAT(rv, IsError(ERR_SSL_PROTOCOL_ERROR)); |
| 12624 | 12629 |
| 12625 // Ensure that the client certificate is removed from the cache on a | 12630 // Ensure that the client certificate is removed from the cache on a |
| 12626 // handshake failure. | 12631 // handshake failure. |
| 12627 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 12632 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
| 12628 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); | 12633 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); |
| 12629 } | 12634 } |
| 12630 | 12635 |
| 12631 // Ensure that a client certificate is removed from the SSL client auth | 12636 // Ensure that a client certificate is removed from the SSL client auth |
| 12632 // cache when: | 12637 // cache when: |
| 12633 // 1) No proxy is involved. | 12638 // 1) No proxy is involved. |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12705 StaticSocketDataProvider data5(data2_reads, arraysize(data2_reads), NULL, 0); | 12710 StaticSocketDataProvider data5(data2_reads, arraysize(data2_reads), NULL, 0); |
| 12706 session_deps_.socket_factory->AddSocketDataProvider(&data5); | 12711 session_deps_.socket_factory->AddSocketDataProvider(&data5); |
| 12707 | 12712 |
| 12708 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12713 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12709 std::unique_ptr<HttpTransaction> trans( | 12714 std::unique_ptr<HttpTransaction> trans( |
| 12710 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12715 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12711 | 12716 |
| 12712 // Begin the initial SSL handshake. | 12717 // Begin the initial SSL handshake. |
| 12713 TestCompletionCallback callback; | 12718 TestCompletionCallback callback; |
| 12714 int rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); | 12719 int rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); |
| 12715 ASSERT_EQ(ERR_IO_PENDING, rv); | 12720 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12716 | 12721 |
| 12717 // Complete the SSL handshake, which should abort due to requiring a | 12722 // Complete the SSL handshake, which should abort due to requiring a |
| 12718 // client certificate. | 12723 // client certificate. |
| 12719 rv = callback.WaitForResult(); | 12724 rv = callback.WaitForResult(); |
| 12720 ASSERT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); | 12725 ASSERT_THAT(rv, IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
| 12721 | 12726 |
| 12722 // Indicate that no certificate should be supplied. From the perspective | 12727 // Indicate that no certificate should be supplied. From the perspective |
| 12723 // of SSLClientCertCache, NULL is just as meaningful as a real | 12728 // of SSLClientCertCache, NULL is just as meaningful as a real |
| 12724 // certificate, so this is the same as supply a | 12729 // certificate, so this is the same as supply a |
| 12725 // legitimate-but-unacceptable certificate. | 12730 // legitimate-but-unacceptable certificate. |
| 12726 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); | 12731 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); |
| 12727 ASSERT_EQ(ERR_IO_PENDING, rv); | 12732 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12728 | 12733 |
| 12729 // Ensure the certificate was added to the client auth cache before | 12734 // Ensure the certificate was added to the client auth cache before |
| 12730 // allowing the connection to continue restarting. | 12735 // allowing the connection to continue restarting. |
| 12731 scoped_refptr<X509Certificate> client_cert; | 12736 scoped_refptr<X509Certificate> client_cert; |
| 12732 scoped_refptr<SSLPrivateKey> client_private_key; | 12737 scoped_refptr<SSLPrivateKey> client_private_key; |
| 12733 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( | 12738 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( |
| 12734 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); | 12739 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); |
| 12735 ASSERT_FALSE(client_cert); | 12740 ASSERT_FALSE(client_cert); |
| 12736 | 12741 |
| 12737 // Restart the handshake. This will consume ssl_data2, which fails, and | 12742 // Restart the handshake. This will consume ssl_data2, which fails, and |
| 12738 // then consume ssl_data3 and ssl_data4, both of which should also fail. | 12743 // then consume ssl_data3 and ssl_data4, both of which should also fail. |
| 12739 // The result code is checked against what ssl_data4 should return. | 12744 // The result code is checked against what ssl_data4 should return. |
| 12740 rv = callback.WaitForResult(); | 12745 rv = callback.WaitForResult(); |
| 12741 ASSERT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); | 12746 ASSERT_THAT(rv, IsError(ERR_SSL_PROTOCOL_ERROR)); |
| 12742 | 12747 |
| 12743 // Ensure that the client certificate is removed from the cache on a | 12748 // Ensure that the client certificate is removed from the cache on a |
| 12744 // handshake failure. | 12749 // handshake failure. |
| 12745 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 12750 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
| 12746 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); | 12751 HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); |
| 12747 } | 12752 } |
| 12748 | 12753 |
| 12749 // Ensure that a client certificate is removed from the SSL client auth | 12754 // Ensure that a client certificate is removed from the SSL client auth |
| 12750 // cache when: | 12755 // cache when: |
| 12751 // 1) An HTTPS proxy is involved. | 12756 // 1) An HTTPS proxy is involved. |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12798 | 12803 |
| 12799 for (size_t i = 0; i < arraysize(requests); ++i) { | 12804 for (size_t i = 0; i < arraysize(requests); ++i) { |
| 12800 session_deps_.socket_factory->ResetNextMockIndexes(); | 12805 session_deps_.socket_factory->ResetNextMockIndexes(); |
| 12801 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12806 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12802 std::unique_ptr<HttpNetworkTransaction> trans( | 12807 std::unique_ptr<HttpNetworkTransaction> trans( |
| 12803 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12808 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12804 | 12809 |
| 12805 // Begin the SSL handshake with the proxy. | 12810 // Begin the SSL handshake with the proxy. |
| 12806 TestCompletionCallback callback; | 12811 TestCompletionCallback callback; |
| 12807 int rv = trans->Start(&requests[i], callback.callback(), BoundNetLog()); | 12812 int rv = trans->Start(&requests[i], callback.callback(), BoundNetLog()); |
| 12808 ASSERT_EQ(ERR_IO_PENDING, rv); | 12813 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12809 | 12814 |
| 12810 // Complete the SSL handshake, which should abort due to requiring a | 12815 // Complete the SSL handshake, which should abort due to requiring a |
| 12811 // client certificate. | 12816 // client certificate. |
| 12812 rv = callback.WaitForResult(); | 12817 rv = callback.WaitForResult(); |
| 12813 ASSERT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); | 12818 ASSERT_THAT(rv, IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
| 12814 | 12819 |
| 12815 // Indicate that no certificate should be supplied. From the perspective | 12820 // Indicate that no certificate should be supplied. From the perspective |
| 12816 // of SSLClientCertCache, NULL is just as meaningful as a real | 12821 // of SSLClientCertCache, NULL is just as meaningful as a real |
| 12817 // certificate, so this is the same as supply a | 12822 // certificate, so this is the same as supply a |
| 12818 // legitimate-but-unacceptable certificate. | 12823 // legitimate-but-unacceptable certificate. |
| 12819 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); | 12824 rv = trans->RestartWithCertificate(NULL, NULL, callback.callback()); |
| 12820 ASSERT_EQ(ERR_IO_PENDING, rv); | 12825 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12821 | 12826 |
| 12822 // Ensure the certificate was added to the client auth cache before | 12827 // Ensure the certificate was added to the client auth cache before |
| 12823 // allowing the connection to continue restarting. | 12828 // allowing the connection to continue restarting. |
| 12824 scoped_refptr<X509Certificate> client_cert; | 12829 scoped_refptr<X509Certificate> client_cert; |
| 12825 scoped_refptr<SSLPrivateKey> client_private_key; | 12830 scoped_refptr<SSLPrivateKey> client_private_key; |
| 12826 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( | 12831 ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( |
| 12827 HostPortPair("proxy", 70), &client_cert, &client_private_key)); | 12832 HostPortPair("proxy", 70), &client_cert, &client_private_key)); |
| 12828 ASSERT_FALSE(client_cert); | 12833 ASSERT_FALSE(client_cert); |
| 12829 // Ensure the certificate was NOT cached for the endpoint. This only | 12834 // Ensure the certificate was NOT cached for the endpoint. This only |
| 12830 // applies to HTTPS requests, but is fine to check for HTTP requests. | 12835 // applies to HTTPS requests, but is fine to check for HTTP requests. |
| 12831 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 12836 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
| 12832 HostPortPair("www.example.com", 443), &client_cert, | 12837 HostPortPair("www.example.com", 443), &client_cert, |
| 12833 &client_private_key)); | 12838 &client_private_key)); |
| 12834 | 12839 |
| 12835 // Restart the handshake. This will consume ssl_data2, which fails, and | 12840 // Restart the handshake. This will consume ssl_data2, which fails, and |
| 12836 // then consume ssl_data3, which should also fail. The result code is | 12841 // then consume ssl_data3, which should also fail. The result code is |
| 12837 // checked against what ssl_data3 should return. | 12842 // checked against what ssl_data3 should return. |
| 12838 rv = callback.WaitForResult(); | 12843 rv = callback.WaitForResult(); |
| 12839 ASSERT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 12844 ASSERT_THAT(rv, IsError(ERR_PROXY_CONNECTION_FAILED)); |
| 12840 | 12845 |
| 12841 // Now that the new handshake has failed, ensure that the client | 12846 // Now that the new handshake has failed, ensure that the client |
| 12842 // certificate was removed from the client auth cache. | 12847 // certificate was removed from the client auth cache. |
| 12843 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 12848 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
| 12844 HostPortPair("proxy", 70), &client_cert, &client_private_key)); | 12849 HostPortPair("proxy", 70), &client_cert, &client_private_key)); |
| 12845 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 12850 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
| 12846 HostPortPair("www.example.com", 443), &client_cert, | 12851 HostPortPair("www.example.com", 443), &client_cert, |
| 12847 &client_private_key)); | 12852 &client_private_key)); |
| 12848 } | 12853 } |
| 12849 } | 12854 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12890 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 12895 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 12891 | 12896 |
| 12892 TestCompletionCallback callback; | 12897 TestCompletionCallback callback; |
| 12893 HttpRequestInfo request1; | 12898 HttpRequestInfo request1; |
| 12894 request1.method = "GET"; | 12899 request1.method = "GET"; |
| 12895 request1.url = GURL("https://www.example.org/"); | 12900 request1.url = GURL("https://www.example.org/"); |
| 12896 request1.load_flags = 0; | 12901 request1.load_flags = 0; |
| 12897 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 12902 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
| 12898 | 12903 |
| 12899 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 12904 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
| 12900 EXPECT_EQ(ERR_IO_PENDING, rv); | 12905 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12901 EXPECT_EQ(OK, callback.WaitForResult()); | 12906 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 12902 | 12907 |
| 12903 const HttpResponseInfo* response = trans1.GetResponseInfo(); | 12908 const HttpResponseInfo* response = trans1.GetResponseInfo(); |
| 12904 ASSERT_TRUE(response); | 12909 ASSERT_TRUE(response); |
| 12905 ASSERT_TRUE(response->headers); | 12910 ASSERT_TRUE(response->headers); |
| 12906 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 12911 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 12907 | 12912 |
| 12908 std::string response_data; | 12913 std::string response_data; |
| 12909 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); | 12914 ASSERT_THAT(ReadTransaction(&trans1, &response_data), IsOk()); |
| 12910 EXPECT_EQ("hello!", response_data); | 12915 EXPECT_EQ("hello!", response_data); |
| 12911 | 12916 |
| 12912 // Preload www.gmail.com into HostCache. | 12917 // Preload www.gmail.com into HostCache. |
| 12913 HostPortPair host_port("www.gmail.com", 443); | 12918 HostPortPair host_port("www.gmail.com", 443); |
| 12914 HostResolver::RequestInfo resolve_info(host_port); | 12919 HostResolver::RequestInfo resolve_info(host_port); |
| 12915 AddressList ignored; | 12920 AddressList ignored; |
| 12916 rv = session_deps_.host_resolver->Resolve(resolve_info, | 12921 rv = session_deps_.host_resolver->Resolve(resolve_info, |
| 12917 DEFAULT_PRIORITY, | 12922 DEFAULT_PRIORITY, |
| 12918 &ignored, | 12923 &ignored, |
| 12919 callback.callback(), | 12924 callback.callback(), |
| 12920 NULL, | 12925 NULL, |
| 12921 BoundNetLog()); | 12926 BoundNetLog()); |
| 12922 EXPECT_EQ(ERR_IO_PENDING, rv); | 12927 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12923 rv = callback.WaitForResult(); | 12928 rv = callback.WaitForResult(); |
| 12924 EXPECT_EQ(OK, rv); | 12929 EXPECT_THAT(rv, IsOk()); |
| 12925 | 12930 |
| 12926 HttpRequestInfo request2; | 12931 HttpRequestInfo request2; |
| 12927 request2.method = "GET"; | 12932 request2.method = "GET"; |
| 12928 request2.url = GURL("https://www.gmail.com/"); | 12933 request2.url = GURL("https://www.gmail.com/"); |
| 12929 request2.load_flags = 0; | 12934 request2.load_flags = 0; |
| 12930 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 12935 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
| 12931 | 12936 |
| 12932 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); | 12937 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); |
| 12933 EXPECT_EQ(ERR_IO_PENDING, rv); | 12938 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12934 EXPECT_EQ(OK, callback.WaitForResult()); | 12939 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 12935 | 12940 |
| 12936 response = trans2.GetResponseInfo(); | 12941 response = trans2.GetResponseInfo(); |
| 12937 ASSERT_TRUE(response); | 12942 ASSERT_TRUE(response); |
| 12938 ASSERT_TRUE(response->headers); | 12943 ASSERT_TRUE(response->headers); |
| 12939 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 12944 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 12940 EXPECT_TRUE(response->was_fetched_via_spdy); | 12945 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 12941 EXPECT_TRUE(response->was_npn_negotiated); | 12946 EXPECT_TRUE(response->was_npn_negotiated); |
| 12942 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 12947 ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk()); |
| 12943 EXPECT_EQ("hello!", response_data); | 12948 EXPECT_EQ("hello!", response_data); |
| 12944 } | 12949 } |
| 12945 | 12950 |
| 12946 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { | 12951 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { |
| 12947 // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 12952 // Set up a special HttpNetworkSession with a MockCachingHostResolver. |
| 12948 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 12953 session_deps_.host_resolver.reset(new MockCachingHostResolver()); |
| 12949 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12954 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12950 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 12955 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
| 12951 pool_peer.DisableDomainAuthenticationVerification(); | 12956 pool_peer.DisableDomainAuthenticationVerification(); |
| 12952 | 12957 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12985 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 12990 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 12986 | 12991 |
| 12987 TestCompletionCallback callback; | 12992 TestCompletionCallback callback; |
| 12988 HttpRequestInfo request1; | 12993 HttpRequestInfo request1; |
| 12989 request1.method = "GET"; | 12994 request1.method = "GET"; |
| 12990 request1.url = GURL("https://www.example.org/"); | 12995 request1.url = GURL("https://www.example.org/"); |
| 12991 request1.load_flags = 0; | 12996 request1.load_flags = 0; |
| 12992 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 12997 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
| 12993 | 12998 |
| 12994 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 12999 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
| 12995 EXPECT_EQ(ERR_IO_PENDING, rv); | 13000 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 12996 EXPECT_EQ(OK, callback.WaitForResult()); | 13001 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 12997 | 13002 |
| 12998 const HttpResponseInfo* response = trans1.GetResponseInfo(); | 13003 const HttpResponseInfo* response = trans1.GetResponseInfo(); |
| 12999 ASSERT_TRUE(response); | 13004 ASSERT_TRUE(response); |
| 13000 ASSERT_TRUE(response->headers); | 13005 ASSERT_TRUE(response->headers); |
| 13001 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 13006 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 13002 | 13007 |
| 13003 std::string response_data; | 13008 std::string response_data; |
| 13004 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); | 13009 ASSERT_THAT(ReadTransaction(&trans1, &response_data), IsOk()); |
| 13005 EXPECT_EQ("hello!", response_data); | 13010 EXPECT_EQ("hello!", response_data); |
| 13006 | 13011 |
| 13007 HttpRequestInfo request2; | 13012 HttpRequestInfo request2; |
| 13008 request2.method = "GET"; | 13013 request2.method = "GET"; |
| 13009 request2.url = GURL("https://www.gmail.com/"); | 13014 request2.url = GURL("https://www.gmail.com/"); |
| 13010 request2.load_flags = 0; | 13015 request2.load_flags = 0; |
| 13011 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 13016 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
| 13012 | 13017 |
| 13013 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); | 13018 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); |
| 13014 EXPECT_EQ(ERR_IO_PENDING, rv); | 13019 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 13015 EXPECT_EQ(OK, callback.WaitForResult()); | 13020 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 13016 | 13021 |
| 13017 response = trans2.GetResponseInfo(); | 13022 response = trans2.GetResponseInfo(); |
| 13018 ASSERT_TRUE(response); | 13023 ASSERT_TRUE(response); |
| 13019 ASSERT_TRUE(response->headers); | 13024 ASSERT_TRUE(response->headers); |
| 13020 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 13025 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 13021 EXPECT_TRUE(response->was_fetched_via_spdy); | 13026 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 13022 EXPECT_TRUE(response->was_npn_negotiated); | 13027 EXPECT_TRUE(response->was_npn_negotiated); |
| 13023 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 13028 ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk()); |
| 13024 EXPECT_EQ("hello!", response_data); | 13029 EXPECT_EQ("hello!", response_data); |
| 13025 } | 13030 } |
| 13026 | 13031 |
| 13027 class OneTimeCachingHostResolver : public HostResolver { | 13032 class OneTimeCachingHostResolver : public HostResolver { |
| 13028 public: | 13033 public: |
| 13029 explicit OneTimeCachingHostResolver(const HostPortPair& host_port) | 13034 explicit OneTimeCachingHostResolver(const HostPortPair& host_port) |
| 13030 : host_port_(host_port) {} | 13035 : host_port_(host_port) {} |
| 13031 ~OneTimeCachingHostResolver() override {} | 13036 ~OneTimeCachingHostResolver() override {} |
| 13032 | 13037 |
| 13033 RuleBasedHostResolverProc* rules() { return host_resolver_.rules(); } | 13038 RuleBasedHostResolverProc* rules() { return host_resolver_.rules(); } |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13111 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 13116 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 13112 | 13117 |
| 13113 TestCompletionCallback callback; | 13118 TestCompletionCallback callback; |
| 13114 HttpRequestInfo request1; | 13119 HttpRequestInfo request1; |
| 13115 request1.method = "GET"; | 13120 request1.method = "GET"; |
| 13116 request1.url = GURL("https://www.example.org/"); | 13121 request1.url = GURL("https://www.example.org/"); |
| 13117 request1.load_flags = 0; | 13122 request1.load_flags = 0; |
| 13118 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 13123 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
| 13119 | 13124 |
| 13120 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 13125 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
| 13121 EXPECT_EQ(ERR_IO_PENDING, rv); | 13126 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 13122 EXPECT_EQ(OK, callback.WaitForResult()); | 13127 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 13123 | 13128 |
| 13124 const HttpResponseInfo* response = trans1.GetResponseInfo(); | 13129 const HttpResponseInfo* response = trans1.GetResponseInfo(); |
| 13125 ASSERT_TRUE(response); | 13130 ASSERT_TRUE(response); |
| 13126 ASSERT_TRUE(response->headers); | 13131 ASSERT_TRUE(response->headers); |
| 13127 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 13132 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 13128 | 13133 |
| 13129 std::string response_data; | 13134 std::string response_data; |
| 13130 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); | 13135 ASSERT_THAT(ReadTransaction(&trans1, &response_data), IsOk()); |
| 13131 EXPECT_EQ("hello!", response_data); | 13136 EXPECT_EQ("hello!", response_data); |
| 13132 | 13137 |
| 13133 // Preload cache entries into HostCache. | 13138 // Preload cache entries into HostCache. |
| 13134 HostResolver::RequestInfo resolve_info(HostPortPair("www.gmail.com", 443)); | 13139 HostResolver::RequestInfo resolve_info(HostPortPair("www.gmail.com", 443)); |
| 13135 AddressList ignored; | 13140 AddressList ignored; |
| 13136 rv = host_resolver.Resolve(resolve_info, | 13141 rv = host_resolver.Resolve(resolve_info, |
| 13137 DEFAULT_PRIORITY, | 13142 DEFAULT_PRIORITY, |
| 13138 &ignored, | 13143 &ignored, |
| 13139 callback.callback(), | 13144 callback.callback(), |
| 13140 NULL, | 13145 NULL, |
| 13141 BoundNetLog()); | 13146 BoundNetLog()); |
| 13142 EXPECT_EQ(ERR_IO_PENDING, rv); | 13147 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 13143 rv = callback.WaitForResult(); | 13148 rv = callback.WaitForResult(); |
| 13144 EXPECT_EQ(OK, rv); | 13149 EXPECT_THAT(rv, IsOk()); |
| 13145 | 13150 |
| 13146 HttpRequestInfo request2; | 13151 HttpRequestInfo request2; |
| 13147 request2.method = "GET"; | 13152 request2.method = "GET"; |
| 13148 request2.url = GURL("https://www.gmail.com/"); | 13153 request2.url = GURL("https://www.gmail.com/"); |
| 13149 request2.load_flags = 0; | 13154 request2.load_flags = 0; |
| 13150 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 13155 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
| 13151 | 13156 |
| 13152 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); | 13157 rv = trans2.Start(&request2, callback.callback(), BoundNetLog()); |
| 13153 EXPECT_EQ(ERR_IO_PENDING, rv); | 13158 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 13154 EXPECT_EQ(OK, callback.WaitForResult()); | 13159 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 13155 | 13160 |
| 13156 response = trans2.GetResponseInfo(); | 13161 response = trans2.GetResponseInfo(); |
| 13157 ASSERT_TRUE(response); | 13162 ASSERT_TRUE(response); |
| 13158 ASSERT_TRUE(response->headers); | 13163 ASSERT_TRUE(response->headers); |
| 13159 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 13164 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 13160 EXPECT_TRUE(response->was_fetched_via_spdy); | 13165 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 13161 EXPECT_TRUE(response->was_npn_negotiated); | 13166 EXPECT_TRUE(response->was_npn_negotiated); |
| 13162 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 13167 ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk()); |
| 13163 EXPECT_EQ("hello!", response_data); | 13168 EXPECT_EQ("hello!", response_data); |
| 13164 } | 13169 } |
| 13165 | 13170 |
| 13166 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttp) { | 13171 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttp) { |
| 13167 const std::string https_url = "https://www.example.org:8080/"; | 13172 const std::string https_url = "https://www.example.org:8080/"; |
| 13168 const std::string http_url = "http://www.example.org:8080/"; | 13173 const std::string http_url = "http://www.example.org:8080/"; |
| 13169 | 13174 |
| 13170 // SPDY GET for HTTPS URL | 13175 // SPDY GET for HTTPS URL |
| 13171 std::unique_ptr<SpdySerializedFrame> req1( | 13176 std::unique_ptr<SpdySerializedFrame> req1( |
| 13172 spdy_util_.ConstructSpdyGet(https_url.c_str(), 1, LOWEST)); | 13177 spdy_util_.ConstructSpdyGet(https_url.c_str(), 1, LOWEST)); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13216 HttpRequestInfo request1; | 13221 HttpRequestInfo request1; |
| 13217 request1.method = "GET"; | 13222 request1.method = "GET"; |
| 13218 request1.url = GURL(https_url); | 13223 request1.url = GURL(https_url); |
| 13219 request1.load_flags = 0; | 13224 request1.load_flags = 0; |
| 13220 HttpNetworkTransaction trans1(LOWEST, session.get()); | 13225 HttpNetworkTransaction trans1(LOWEST, session.get()); |
| 13221 TestCompletionCallback callback1; | 13226 TestCompletionCallback callback1; |
| 13222 EXPECT_EQ(ERR_IO_PENDING, | 13227 EXPECT_EQ(ERR_IO_PENDING, |
| 13223 trans1.Start(&request1, callback1.callback(), BoundNetLog())); | 13228 trans1.Start(&request1, callback1.callback(), BoundNetLog())); |
| 13224 base::RunLoop().RunUntilIdle(); | 13229 base::RunLoop().RunUntilIdle(); |
| 13225 | 13230 |
| 13226 EXPECT_EQ(OK, callback1.WaitForResult()); | 13231 EXPECT_THAT(callback1.WaitForResult(), IsOk()); |
| 13227 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); | 13232 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); |
| 13228 | 13233 |
| 13229 // Now, start the HTTP request | 13234 // Now, start the HTTP request |
| 13230 HttpRequestInfo request2; | 13235 HttpRequestInfo request2; |
| 13231 request2.method = "GET"; | 13236 request2.method = "GET"; |
| 13232 request2.url = GURL(http_url); | 13237 request2.url = GURL(http_url); |
| 13233 request2.load_flags = 0; | 13238 request2.load_flags = 0; |
| 13234 HttpNetworkTransaction trans2(MEDIUM, session.get()); | 13239 HttpNetworkTransaction trans2(MEDIUM, session.get()); |
| 13235 TestCompletionCallback callback2; | 13240 TestCompletionCallback callback2; |
| 13236 EXPECT_EQ(ERR_IO_PENDING, | 13241 EXPECT_EQ(ERR_IO_PENDING, |
| 13237 trans2.Start(&request2, callback2.callback(), BoundNetLog())); | 13242 trans2.Start(&request2, callback2.callback(), BoundNetLog())); |
| 13238 base::RunLoop().RunUntilIdle(); | 13243 base::RunLoop().RunUntilIdle(); |
| 13239 | 13244 |
| 13240 EXPECT_EQ(OK, callback2.WaitForResult()); | 13245 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
| 13241 EXPECT_FALSE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 13246 EXPECT_FALSE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
| 13242 } | 13247 } |
| 13243 | 13248 |
| 13244 class AltSvcCertificateVerificationTest : public HttpNetworkTransactionTest { | 13249 class AltSvcCertificateVerificationTest : public HttpNetworkTransactionTest { |
| 13245 public: | 13250 public: |
| 13246 void Run(bool pooling, bool valid) { | 13251 void Run(bool pooling, bool valid) { |
| 13247 url::SchemeHostPort server(GURL(valid ? "https://mail.example.org:443" | 13252 url::SchemeHostPort server(GURL(valid ? "https://mail.example.org:443" |
| 13248 : "https://invalid.example.org:443")); | 13253 : "https://invalid.example.org:443")); |
| 13249 HostPortPair alternative("www.example.org", 443); | 13254 HostPortPair alternative("www.example.org", 443); |
| 13250 | 13255 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13335 if (pooling) { | 13340 if (pooling) { |
| 13336 std::unique_ptr<HttpTransaction> trans0( | 13341 std::unique_ptr<HttpTransaction> trans0( |
| 13337 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13342 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 13338 HttpRequestInfo request0; | 13343 HttpRequestInfo request0; |
| 13339 request0.method = "GET"; | 13344 request0.method = "GET"; |
| 13340 request0.url = GURL(url0); | 13345 request0.url = GURL(url0); |
| 13341 request0.load_flags = 0; | 13346 request0.load_flags = 0; |
| 13342 TestCompletionCallback callback0; | 13347 TestCompletionCallback callback0; |
| 13343 | 13348 |
| 13344 int rv = trans0->Start(&request0, callback0.callback(), BoundNetLog()); | 13349 int rv = trans0->Start(&request0, callback0.callback(), BoundNetLog()); |
| 13345 EXPECT_EQ(ERR_IO_PENDING, rv); | 13350 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 13346 rv = callback0.WaitForResult(); | 13351 rv = callback0.WaitForResult(); |
| 13347 EXPECT_EQ(OK, rv); | 13352 EXPECT_THAT(rv, IsOk()); |
| 13348 } | 13353 } |
| 13349 | 13354 |
| 13350 // Second request to origin. | 13355 // Second request to origin. |
| 13351 std::unique_ptr<HttpTransaction> trans1( | 13356 std::unique_ptr<HttpTransaction> trans1( |
| 13352 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13357 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 13353 HttpRequestInfo request1; | 13358 HttpRequestInfo request1; |
| 13354 request1.method = "GET"; | 13359 request1.method = "GET"; |
| 13355 request1.url = GURL(url1); | 13360 request1.url = GURL(url1); |
| 13356 request1.load_flags = 0; | 13361 request1.load_flags = 0; |
| 13357 TestCompletionCallback callback1; | 13362 TestCompletionCallback callback1; |
| 13358 | 13363 |
| 13359 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); | 13364 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); |
| 13360 EXPECT_EQ(ERR_IO_PENDING, rv); | 13365 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 13361 base::RunLoop().RunUntilIdle(); | 13366 base::RunLoop().RunUntilIdle(); |
| 13362 if (data.IsPaused()) | 13367 if (data.IsPaused()) |
| 13363 data.Resume(); | 13368 data.Resume(); |
| 13364 rv = callback1.WaitForResult(); | 13369 rv = callback1.WaitForResult(); |
| 13365 if (valid) { | 13370 if (valid) { |
| 13366 EXPECT_EQ(OK, rv); | 13371 EXPECT_THAT(rv, IsOk()); |
| 13367 } else { | 13372 } else { |
| 13368 if (pooling) { | 13373 if (pooling) { |
| 13369 EXPECT_EQ(ERR_CONNECTION_REFUSED, rv); | 13374 EXPECT_THAT(rv, IsError(ERR_CONNECTION_REFUSED)); |
| 13370 } else { | 13375 } else { |
| 13371 EXPECT_EQ(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN, rv); | 13376 EXPECT_THAT(rv, IsError(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN)); |
| 13372 } | 13377 } |
| 13373 } | 13378 } |
| 13374 } | 13379 } |
| 13375 }; | 13380 }; |
| 13376 | 13381 |
| 13377 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, | 13382 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, |
| 13378 AltSvcCertificateVerificationTest, | 13383 AltSvcCertificateVerificationTest, |
| 13379 testing::Values(kTestCaseSPDY31, | 13384 testing::Values(kTestCaseSPDY31, |
| 13380 kTestCaseHTTP2NoPriorityDependencies, | 13385 kTestCaseHTTP2NoPriorityDependencies, |
| 13381 kTestCaseHTTP2PriorityDependencies)); | 13386 kTestCaseHTTP2PriorityDependencies)); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13439 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13444 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 13440 HttpRequestInfo request; | 13445 HttpRequestInfo request; |
| 13441 request.method = "GET"; | 13446 request.method = "GET"; |
| 13442 request.url = GURL("https://www.example.org:443"); | 13447 request.url = GURL("https://www.example.org:443"); |
| 13443 request.load_flags = 0; | 13448 request.load_flags = 0; |
| 13444 TestCompletionCallback callback; | 13449 TestCompletionCallback callback; |
| 13445 | 13450 |
| 13446 // HTTP/2 (or SPDY) is required for alternative service, if HTTP/1.1 is | 13451 // HTTP/2 (or SPDY) is required for alternative service, if HTTP/1.1 is |
| 13447 // negotiated, the alternate Job should fail with ERR_NPN_NEGOTIATION_FAILED. | 13452 // negotiated, the alternate Job should fail with ERR_NPN_NEGOTIATION_FAILED. |
| 13448 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13453 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 13449 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.GetResult(rv)); | 13454 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_NPN_NEGOTIATION_FAILED)); |
| 13450 } | 13455 } |
| 13451 | 13456 |
| 13452 // A request to a server with an alternative service fires two Jobs: one to the | 13457 // A request to a server with an alternative service fires two Jobs: one to the |
| 13453 // server, and an alternate one to the alternative server. If the former | 13458 // server, and an alternate one to the alternative server. If the former |
| 13454 // succeeds, the request should succeed, even if the latter fails because | 13459 // succeeds, the request should succeed, even if the latter fails because |
| 13455 // HTTP/1.1 is negotiated which is insufficient for alternative service. | 13460 // HTTP/1.1 is negotiated which is insufficient for alternative service. |
| 13456 TEST_P(HttpNetworkTransactionTest, FailedAlternativeServiceIsNotUserVisible) { | 13461 TEST_P(HttpNetworkTransactionTest, FailedAlternativeServiceIsNotUserVisible) { |
| 13457 url::SchemeHostPort server("https", "www.example.org", 443); | 13462 url::SchemeHostPort server("https", "www.example.org", 443); |
| 13458 HostPortPair alternative("www.example.org", 444); | 13463 HostPortPair alternative("www.example.org", 444); |
| 13459 | 13464 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13507 | 13512 |
| 13508 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 13513 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
| 13509 HttpRequestInfo request1; | 13514 HttpRequestInfo request1; |
| 13510 request1.method = "GET"; | 13515 request1.method = "GET"; |
| 13511 request1.url = GURL("https://www.example.org:443"); | 13516 request1.url = GURL("https://www.example.org:443"); |
| 13512 request1.load_flags = 0; | 13517 request1.load_flags = 0; |
| 13513 TestCompletionCallback callback1; | 13518 TestCompletionCallback callback1; |
| 13514 | 13519 |
| 13515 int rv = trans1.Start(&request1, callback1.callback(), BoundNetLog()); | 13520 int rv = trans1.Start(&request1, callback1.callback(), BoundNetLog()); |
| 13516 rv = callback1.GetResult(rv); | 13521 rv = callback1.GetResult(rv); |
| 13517 EXPECT_EQ(OK, rv); | 13522 EXPECT_THAT(rv, IsOk()); |
| 13518 | 13523 |
| 13519 const HttpResponseInfo* response1 = trans1.GetResponseInfo(); | 13524 const HttpResponseInfo* response1 = trans1.GetResponseInfo(); |
| 13520 ASSERT_TRUE(response1); | 13525 ASSERT_TRUE(response1); |
| 13521 ASSERT_TRUE(response1->headers); | 13526 ASSERT_TRUE(response1->headers); |
| 13522 EXPECT_EQ("HTTP/1.1 200 OK", response1->headers->GetStatusLine()); | 13527 EXPECT_EQ("HTTP/1.1 200 OK", response1->headers->GetStatusLine()); |
| 13523 | 13528 |
| 13524 std::string response_data1; | 13529 std::string response_data1; |
| 13525 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data1)); | 13530 ASSERT_THAT(ReadTransaction(&trans1, &response_data1), IsOk()); |
| 13526 EXPECT_EQ("foobar", response_data1); | 13531 EXPECT_EQ("foobar", response_data1); |
| 13527 | 13532 |
| 13528 // Alternative should be marked as broken, because HTTP/1.1 is not sufficient | 13533 // Alternative should be marked as broken, because HTTP/1.1 is not sufficient |
| 13529 // for alternative service. | 13534 // for alternative service. |
| 13530 EXPECT_TRUE( | 13535 EXPECT_TRUE( |
| 13531 http_server_properties->IsAlternativeServiceBroken(alternative_service)); | 13536 http_server_properties->IsAlternativeServiceBroken(alternative_service)); |
| 13532 | 13537 |
| 13533 // Since |alternative_service| is broken, a second transaction to server | 13538 // Since |alternative_service| is broken, a second transaction to server |
| 13534 // should not start an alternate Job. It should pool to existing connection | 13539 // should not start an alternate Job. It should pool to existing connection |
| 13535 // to server. | 13540 // to server. |
| 13536 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 13541 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
| 13537 HttpRequestInfo request2; | 13542 HttpRequestInfo request2; |
| 13538 request2.method = "GET"; | 13543 request2.method = "GET"; |
| 13539 request2.url = GURL("https://www.example.org:443/second"); | 13544 request2.url = GURL("https://www.example.org:443/second"); |
| 13540 request2.load_flags = 0; | 13545 request2.load_flags = 0; |
| 13541 TestCompletionCallback callback2; | 13546 TestCompletionCallback callback2; |
| 13542 | 13547 |
| 13543 rv = trans2.Start(&request2, callback2.callback(), BoundNetLog()); | 13548 rv = trans2.Start(&request2, callback2.callback(), BoundNetLog()); |
| 13544 rv = callback2.GetResult(rv); | 13549 rv = callback2.GetResult(rv); |
| 13545 EXPECT_EQ(OK, rv); | 13550 EXPECT_THAT(rv, IsOk()); |
| 13546 | 13551 |
| 13547 const HttpResponseInfo* response2 = trans2.GetResponseInfo(); | 13552 const HttpResponseInfo* response2 = trans2.GetResponseInfo(); |
| 13548 ASSERT_TRUE(response2); | 13553 ASSERT_TRUE(response2); |
| 13549 ASSERT_TRUE(response2->headers); | 13554 ASSERT_TRUE(response2->headers); |
| 13550 EXPECT_EQ("HTTP/1.1 200 OK", response2->headers->GetStatusLine()); | 13555 EXPECT_EQ("HTTP/1.1 200 OK", response2->headers->GetStatusLine()); |
| 13551 | 13556 |
| 13552 std::string response_data2; | 13557 std::string response_data2; |
| 13553 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data2)); | 13558 ASSERT_THAT(ReadTransaction(&trans2, &response_data2), IsOk()); |
| 13554 EXPECT_EQ("another", response_data2); | 13559 EXPECT_EQ("another", response_data2); |
| 13555 } | 13560 } |
| 13556 | 13561 |
| 13557 // Alternative service requires HTTP/2 (or SPDY), but there is already a | 13562 // Alternative service requires HTTP/2 (or SPDY), but there is already a |
| 13558 // HTTP/1.1 socket open to the alternative server. That socket should not be | 13563 // HTTP/1.1 socket open to the alternative server. That socket should not be |
| 13559 // used. | 13564 // used. |
| 13560 TEST_P(HttpNetworkTransactionTest, AlternativeServiceShouldNotPoolToHttp11) { | 13565 TEST_P(HttpNetworkTransactionTest, AlternativeServiceShouldNotPoolToHttp11) { |
| 13561 url::SchemeHostPort server("https", "origin.example.org", 443); | 13566 url::SchemeHostPort server("https", "origin.example.org", 443); |
| 13562 HostPortPair alternative("alternative.example.org", 443); | 13567 HostPortPair alternative("alternative.example.org", 443); |
| 13563 std::string origin_url = "https://origin.example.org:443"; | 13568 std::string origin_url = "https://origin.example.org:443"; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13616 // First transaction to alternative to open an HTTP/1.1 socket. | 13621 // First transaction to alternative to open an HTTP/1.1 socket. |
| 13617 std::unique_ptr<HttpTransaction> trans1( | 13622 std::unique_ptr<HttpTransaction> trans1( |
| 13618 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13623 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 13619 HttpRequestInfo request1; | 13624 HttpRequestInfo request1; |
| 13620 request1.method = "GET"; | 13625 request1.method = "GET"; |
| 13621 request1.url = GURL(alternative_url); | 13626 request1.url = GURL(alternative_url); |
| 13622 request1.load_flags = 0; | 13627 request1.load_flags = 0; |
| 13623 TestCompletionCallback callback1; | 13628 TestCompletionCallback callback1; |
| 13624 | 13629 |
| 13625 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); | 13630 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); |
| 13626 EXPECT_EQ(OK, callback1.GetResult(rv)); | 13631 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
| 13627 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 13632 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
| 13628 ASSERT_TRUE(response1); | 13633 ASSERT_TRUE(response1); |
| 13629 ASSERT_TRUE(response1->headers); | 13634 ASSERT_TRUE(response1->headers); |
| 13630 EXPECT_EQ("HTTP/1.1 200 OK", response1->headers->GetStatusLine()); | 13635 EXPECT_EQ("HTTP/1.1 200 OK", response1->headers->GetStatusLine()); |
| 13631 EXPECT_TRUE(response1->was_npn_negotiated); | 13636 EXPECT_TRUE(response1->was_npn_negotiated); |
| 13632 EXPECT_FALSE(response1->was_fetched_via_spdy); | 13637 EXPECT_FALSE(response1->was_fetched_via_spdy); |
| 13633 std::string response_data1; | 13638 std::string response_data1; |
| 13634 ASSERT_EQ(OK, ReadTransaction(trans1.get(), &response_data1)); | 13639 ASSERT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
| 13635 EXPECT_EQ("first HTTP/1.1 response from alternative", response_data1); | 13640 EXPECT_EQ("first HTTP/1.1 response from alternative", response_data1); |
| 13636 | 13641 |
| 13637 // Request for origin.example.org, which has an alternative service. This | 13642 // Request for origin.example.org, which has an alternative service. This |
| 13638 // will start two Jobs: the alternative looks for connections to pool to, | 13643 // will start two Jobs: the alternative looks for connections to pool to, |
| 13639 // finds one which is HTTP/1.1, and should ignore it, and should not try to | 13644 // finds one which is HTTP/1.1, and should ignore it, and should not try to |
| 13640 // open other connections to alternative server. The Job to server fails, so | 13645 // open other connections to alternative server. The Job to server fails, so |
| 13641 // this request fails. | 13646 // this request fails. |
| 13642 std::unique_ptr<HttpTransaction> trans2( | 13647 std::unique_ptr<HttpTransaction> trans2( |
| 13643 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13648 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 13644 HttpRequestInfo request2; | 13649 HttpRequestInfo request2; |
| 13645 request2.method = "GET"; | 13650 request2.method = "GET"; |
| 13646 request2.url = GURL(origin_url); | 13651 request2.url = GURL(origin_url); |
| 13647 request2.load_flags = 0; | 13652 request2.load_flags = 0; |
| 13648 TestCompletionCallback callback2; | 13653 TestCompletionCallback callback2; |
| 13649 | 13654 |
| 13650 rv = trans2->Start(&request2, callback2.callback(), BoundNetLog()); | 13655 rv = trans2->Start(&request2, callback2.callback(), BoundNetLog()); |
| 13651 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback2.GetResult(rv)); | 13656 EXPECT_THAT(callback2.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); |
| 13652 | 13657 |
| 13653 // Another transaction to alternative. This is to test that the HTTP/1.1 | 13658 // Another transaction to alternative. This is to test that the HTTP/1.1 |
| 13654 // socket is still open and in the pool. | 13659 // socket is still open and in the pool. |
| 13655 std::unique_ptr<HttpTransaction> trans3( | 13660 std::unique_ptr<HttpTransaction> trans3( |
| 13656 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 13661 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 13657 HttpRequestInfo request3; | 13662 HttpRequestInfo request3; |
| 13658 request3.method = "GET"; | 13663 request3.method = "GET"; |
| 13659 request3.url = GURL(alternative_url); | 13664 request3.url = GURL(alternative_url); |
| 13660 request3.load_flags = 0; | 13665 request3.load_flags = 0; |
| 13661 TestCompletionCallback callback3; | 13666 TestCompletionCallback callback3; |
| 13662 | 13667 |
| 13663 rv = trans3->Start(&request3, callback3.callback(), BoundNetLog()); | 13668 rv = trans3->Start(&request3, callback3.callback(), BoundNetLog()); |
| 13664 EXPECT_EQ(OK, callback3.GetResult(rv)); | 13669 EXPECT_THAT(callback3.GetResult(rv), IsOk()); |
| 13665 const HttpResponseInfo* response3 = trans3->GetResponseInfo(); | 13670 const HttpResponseInfo* response3 = trans3->GetResponseInfo(); |
| 13666 ASSERT_TRUE(response3); | 13671 ASSERT_TRUE(response3); |
| 13667 ASSERT_TRUE(response3->headers); | 13672 ASSERT_TRUE(response3->headers); |
| 13668 EXPECT_EQ("HTTP/1.1 200 OK", response3->headers->GetStatusLine()); | 13673 EXPECT_EQ("HTTP/1.1 200 OK", response3->headers->GetStatusLine()); |
| 13669 EXPECT_TRUE(response3->was_npn_negotiated); | 13674 EXPECT_TRUE(response3->was_npn_negotiated); |
| 13670 EXPECT_FALSE(response3->was_fetched_via_spdy); | 13675 EXPECT_FALSE(response3->was_fetched_via_spdy); |
| 13671 std::string response_data3; | 13676 std::string response_data3; |
| 13672 ASSERT_EQ(OK, ReadTransaction(trans3.get(), &response_data3)); | 13677 ASSERT_THAT(ReadTransaction(trans3.get(), &response_data3), IsOk()); |
| 13673 EXPECT_EQ("second HTTP/1.1 response from alternative", response_data3); | 13678 EXPECT_EQ("second HTTP/1.1 response from alternative", response_data3); |
| 13674 } | 13679 } |
| 13675 | 13680 |
| 13676 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { | 13681 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { |
| 13677 const std::string https_url = "https://www.example.org:8080/"; | 13682 const std::string https_url = "https://www.example.org:8080/"; |
| 13678 const std::string http_url = "http://www.example.org:8080/"; | 13683 const std::string http_url = "http://www.example.org:8080/"; |
| 13679 | 13684 |
| 13680 // Separate SPDY util instance for naked and wrapped requests. | 13685 // Separate SPDY util instance for naked and wrapped requests. |
| 13681 SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); | 13686 SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); |
| 13682 | 13687 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13754 request1.url = GURL(https_url); | 13759 request1.url = GURL(https_url); |
| 13755 request1.load_flags = 0; | 13760 request1.load_flags = 0; |
| 13756 HttpNetworkTransaction trans1(LOWEST, session.get()); | 13761 HttpNetworkTransaction trans1(LOWEST, session.get()); |
| 13757 TestCompletionCallback callback1; | 13762 TestCompletionCallback callback1; |
| 13758 int rv = trans1.Start(&request1, callback1.callback(), BoundNetLog()); | 13763 int rv = trans1.Start(&request1, callback1.callback(), BoundNetLog()); |
| 13759 | 13764 |
| 13760 // This pause is a hack to avoid running into https://crbug.com/497228. | 13765 // This pause is a hack to avoid running into https://crbug.com/497228. |
| 13761 data1.RunUntilPaused(); | 13766 data1.RunUntilPaused(); |
| 13762 base::RunLoop().RunUntilIdle(); | 13767 base::RunLoop().RunUntilIdle(); |
| 13763 data1.Resume(); | 13768 data1.Resume(); |
| 13764 EXPECT_EQ(OK, callback1.GetResult(rv)); | 13769 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
| 13765 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); | 13770 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); |
| 13766 | 13771 |
| 13767 LoadTimingInfo load_timing_info1; | 13772 LoadTimingInfo load_timing_info1; |
| 13768 EXPECT_TRUE(trans1.GetLoadTimingInfo(&load_timing_info1)); | 13773 EXPECT_TRUE(trans1.GetLoadTimingInfo(&load_timing_info1)); |
| 13769 TestLoadTimingNotReusedWithPac(load_timing_info1, | 13774 TestLoadTimingNotReusedWithPac(load_timing_info1, |
| 13770 CONNECT_TIMING_HAS_SSL_TIMES); | 13775 CONNECT_TIMING_HAS_SSL_TIMES); |
| 13771 | 13776 |
| 13772 // Now, start the HTTP request. | 13777 // Now, start the HTTP request. |
| 13773 HttpRequestInfo request2; | 13778 HttpRequestInfo request2; |
| 13774 request2.method = "GET"; | 13779 request2.method = "GET"; |
| 13775 request2.url = GURL(http_url); | 13780 request2.url = GURL(http_url); |
| 13776 request2.load_flags = 0; | 13781 request2.load_flags = 0; |
| 13777 HttpNetworkTransaction trans2(MEDIUM, session.get()); | 13782 HttpNetworkTransaction trans2(MEDIUM, session.get()); |
| 13778 TestCompletionCallback callback2; | 13783 TestCompletionCallback callback2; |
| 13779 rv = trans2.Start(&request2, callback2.callback(), BoundNetLog()); | 13784 rv = trans2.Start(&request2, callback2.callback(), BoundNetLog()); |
| 13780 | 13785 |
| 13781 // This pause is a hack to avoid running into https://crbug.com/497228. | 13786 // This pause is a hack to avoid running into https://crbug.com/497228. |
| 13782 data1.RunUntilPaused(); | 13787 data1.RunUntilPaused(); |
| 13783 base::RunLoop().RunUntilIdle(); | 13788 base::RunLoop().RunUntilIdle(); |
| 13784 data1.Resume(); | 13789 data1.Resume(); |
| 13785 EXPECT_EQ(OK, callback2.GetResult(rv)); | 13790 EXPECT_THAT(callback2.GetResult(rv), IsOk()); |
| 13786 | 13791 |
| 13787 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 13792 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
| 13788 | 13793 |
| 13789 LoadTimingInfo load_timing_info2; | 13794 LoadTimingInfo load_timing_info2; |
| 13790 EXPECT_TRUE(trans2.GetLoadTimingInfo(&load_timing_info2)); | 13795 EXPECT_TRUE(trans2.GetLoadTimingInfo(&load_timing_info2)); |
| 13791 // The established SPDY sessions is considered reused by the HTTP request. | 13796 // The established SPDY sessions is considered reused by the HTTP request. |
| 13792 TestLoadTimingReusedWithPac(load_timing_info2); | 13797 TestLoadTimingReusedWithPac(load_timing_info2); |
| 13793 // HTTP requests over a SPDY session should have a different connection | 13798 // HTTP requests over a SPDY session should have a different connection |
| 13794 // socket_log_id than requests over a tunnel. | 13799 // socket_log_id than requests over a tunnel. |
| 13795 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 13800 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13891 request1.load_flags = 0; | 13896 request1.load_flags = 0; |
| 13892 HttpNetworkTransaction trans1(LOWEST, session.get()); | 13897 HttpNetworkTransaction trans1(LOWEST, session.get()); |
| 13893 TestCompletionCallback callback1; | 13898 TestCompletionCallback callback1; |
| 13894 ASSERT_EQ(ERR_IO_PENDING, | 13899 ASSERT_EQ(ERR_IO_PENDING, |
| 13895 trans1.Start(&request1, callback1.callback(), BoundNetLog())); | 13900 trans1.Start(&request1, callback1.callback(), BoundNetLog())); |
| 13896 // This pause is a hack to avoid running into https://crbug.com/497228. | 13901 // This pause is a hack to avoid running into https://crbug.com/497228. |
| 13897 data1.RunUntilPaused(); | 13902 data1.RunUntilPaused(); |
| 13898 base::RunLoop().RunUntilIdle(); | 13903 base::RunLoop().RunUntilIdle(); |
| 13899 data1.Resume(); | 13904 data1.Resume(); |
| 13900 | 13905 |
| 13901 EXPECT_EQ(OK, callback1.WaitForResult()); | 13906 EXPECT_THAT(callback1.WaitForResult(), IsOk()); |
| 13902 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); | 13907 EXPECT_TRUE(trans1.GetResponseInfo()->was_fetched_via_spdy); |
| 13903 | 13908 |
| 13904 // Now, start the HTTP request | 13909 // Now, start the HTTP request |
| 13905 HttpRequestInfo request2; | 13910 HttpRequestInfo request2; |
| 13906 request2.method = "GET"; | 13911 request2.method = "GET"; |
| 13907 request2.url = GURL(url2); | 13912 request2.url = GURL(url2); |
| 13908 request2.load_flags = 0; | 13913 request2.load_flags = 0; |
| 13909 HttpNetworkTransaction trans2(MEDIUM, session.get()); | 13914 HttpNetworkTransaction trans2(MEDIUM, session.get()); |
| 13910 TestCompletionCallback callback2; | 13915 TestCompletionCallback callback2; |
| 13911 EXPECT_EQ(ERR_IO_PENDING, | 13916 EXPECT_EQ(ERR_IO_PENDING, |
| 13912 trans2.Start(&request2, callback2.callback(), BoundNetLog())); | 13917 trans2.Start(&request2, callback2.callback(), BoundNetLog())); |
| 13913 base::RunLoop().RunUntilIdle(); | 13918 base::RunLoop().RunUntilIdle(); |
| 13914 | 13919 |
| 13915 ASSERT_TRUE(callback2.have_result()); | 13920 ASSERT_TRUE(callback2.have_result()); |
| 13916 EXPECT_EQ(OK, callback2.WaitForResult()); | 13921 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
| 13917 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 13922 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
| 13918 } | 13923 } |
| 13919 | 13924 |
| 13920 // Test to verify that a failed socket read (due to an ERR_CONNECTION_CLOSED | 13925 // Test to verify that a failed socket read (due to an ERR_CONNECTION_CLOSED |
| 13921 // error) in SPDY session, removes the socket from pool and closes the SPDY | 13926 // error) in SPDY session, removes the socket from pool and closes the SPDY |
| 13922 // session. Verify that new url's from the same HttpNetworkSession (and a new | 13927 // session. Verify that new url's from the same HttpNetworkSession (and a new |
| 13923 // SpdySession) do work. http://crbug.com/224701 | 13928 // SpdySession) do work. http://crbug.com/224701 |
| 13924 TEST_P(HttpNetworkTransactionTest, ErrorSocketNotConnected) { | 13929 TEST_P(HttpNetworkTransactionTest, ErrorSocketNotConnected) { |
| 13925 const std::string https_url = "https://www.example.org/"; | 13930 const std::string https_url = "https://www.example.org/"; |
| 13926 | 13931 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13965 // Start the first transaction to set up the SpdySession and verify that | 13970 // Start the first transaction to set up the SpdySession and verify that |
| 13966 // connection was closed. | 13971 // connection was closed. |
| 13967 HttpRequestInfo request1; | 13972 HttpRequestInfo request1; |
| 13968 request1.method = "GET"; | 13973 request1.method = "GET"; |
| 13969 request1.url = GURL(https_url); | 13974 request1.url = GURL(https_url); |
| 13970 request1.load_flags = 0; | 13975 request1.load_flags = 0; |
| 13971 HttpNetworkTransaction trans1(MEDIUM, session.get()); | 13976 HttpNetworkTransaction trans1(MEDIUM, session.get()); |
| 13972 TestCompletionCallback callback1; | 13977 TestCompletionCallback callback1; |
| 13973 EXPECT_EQ(ERR_IO_PENDING, | 13978 EXPECT_EQ(ERR_IO_PENDING, |
| 13974 trans1.Start(&request1, callback1.callback(), BoundNetLog())); | 13979 trans1.Start(&request1, callback1.callback(), BoundNetLog())); |
| 13975 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback1.WaitForResult()); | 13980 EXPECT_THAT(callback1.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); |
| 13976 | 13981 |
| 13977 // Now, start the second request and make sure it succeeds. | 13982 // Now, start the second request and make sure it succeeds. |
| 13978 HttpRequestInfo request2; | 13983 HttpRequestInfo request2; |
| 13979 request2.method = "GET"; | 13984 request2.method = "GET"; |
| 13980 request2.url = GURL(https_url); | 13985 request2.url = GURL(https_url); |
| 13981 request2.load_flags = 0; | 13986 request2.load_flags = 0; |
| 13982 HttpNetworkTransaction trans2(MEDIUM, session.get()); | 13987 HttpNetworkTransaction trans2(MEDIUM, session.get()); |
| 13983 TestCompletionCallback callback2; | 13988 TestCompletionCallback callback2; |
| 13984 EXPECT_EQ(ERR_IO_PENDING, | 13989 EXPECT_EQ(ERR_IO_PENDING, |
| 13985 trans2.Start(&request2, callback2.callback(), BoundNetLog())); | 13990 trans2.Start(&request2, callback2.callback(), BoundNetLog())); |
| 13986 | 13991 |
| 13987 ASSERT_EQ(OK, callback2.WaitForResult()); | 13992 ASSERT_THAT(callback2.WaitForResult(), IsOk()); |
| 13988 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 13993 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
| 13989 } | 13994 } |
| 13990 | 13995 |
| 13991 TEST_P(HttpNetworkTransactionTest, CloseIdleSpdySessionToOpenNewOne) { | 13996 TEST_P(HttpNetworkTransactionTest, CloseIdleSpdySessionToOpenNewOne) { |
| 13992 ClientSocketPoolManager::set_max_sockets_per_group( | 13997 ClientSocketPoolManager::set_max_sockets_per_group( |
| 13993 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 13998 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
| 13994 ClientSocketPoolManager::set_max_sockets_per_pool( | 13999 ClientSocketPoolManager::set_max_sockets_per_pool( |
| 13995 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 14000 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
| 13996 | 14001 |
| 13997 // Use two different hosts with different IPs so they don't get pooled. | 14002 // Use two different hosts with different IPs so they don't get pooled. |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14071 | 14076 |
| 14072 TestCompletionCallback callback; | 14077 TestCompletionCallback callback; |
| 14073 HttpRequestInfo request1; | 14078 HttpRequestInfo request1; |
| 14074 request1.method = "GET"; | 14079 request1.method = "GET"; |
| 14075 request1.url = GURL("https://www.a.com/"); | 14080 request1.url = GURL("https://www.a.com/"); |
| 14076 request1.load_flags = 0; | 14081 request1.load_flags = 0; |
| 14077 std::unique_ptr<HttpNetworkTransaction> trans( | 14082 std::unique_ptr<HttpNetworkTransaction> trans( |
| 14078 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14083 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 14079 | 14084 |
| 14080 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); | 14085 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); |
| 14081 EXPECT_EQ(ERR_IO_PENDING, rv); | 14086 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 14082 EXPECT_EQ(OK, callback.WaitForResult()); | 14087 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 14083 | 14088 |
| 14084 const HttpResponseInfo* response = trans->GetResponseInfo(); | 14089 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 14085 ASSERT_TRUE(response); | 14090 ASSERT_TRUE(response); |
| 14086 ASSERT_TRUE(response->headers); | 14091 ASSERT_TRUE(response->headers); |
| 14087 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 14092 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 14088 EXPECT_TRUE(response->was_fetched_via_spdy); | 14093 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 14089 EXPECT_TRUE(response->was_npn_negotiated); | 14094 EXPECT_TRUE(response->was_npn_negotiated); |
| 14090 | 14095 |
| 14091 std::string response_data; | 14096 std::string response_data; |
| 14092 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 14097 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 14093 EXPECT_EQ("hello!", response_data); | 14098 EXPECT_EQ("hello!", response_data); |
| 14094 trans.reset(); | 14099 trans.reset(); |
| 14095 EXPECT_TRUE( | 14100 EXPECT_TRUE( |
| 14096 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 14101 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
| 14097 | 14102 |
| 14098 HostPortPair host_port_pair_b("www.b.com", 443); | 14103 HostPortPair host_port_pair_b("www.b.com", 443); |
| 14099 SpdySessionKey spdy_session_key_b( | 14104 SpdySessionKey spdy_session_key_b( |
| 14100 host_port_pair_b, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 14105 host_port_pair_b, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
| 14101 EXPECT_FALSE( | 14106 EXPECT_FALSE( |
| 14102 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | 14107 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
| 14103 HttpRequestInfo request2; | 14108 HttpRequestInfo request2; |
| 14104 request2.method = "GET"; | 14109 request2.method = "GET"; |
| 14105 request2.url = GURL("https://www.b.com/"); | 14110 request2.url = GURL("https://www.b.com/"); |
| 14106 request2.load_flags = 0; | 14111 request2.load_flags = 0; |
| 14107 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14112 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 14108 | 14113 |
| 14109 rv = trans->Start(&request2, callback.callback(), BoundNetLog()); | 14114 rv = trans->Start(&request2, callback.callback(), BoundNetLog()); |
| 14110 EXPECT_EQ(ERR_IO_PENDING, rv); | 14115 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 14111 EXPECT_EQ(OK, callback.WaitForResult()); | 14116 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 14112 | 14117 |
| 14113 response = trans->GetResponseInfo(); | 14118 response = trans->GetResponseInfo(); |
| 14114 ASSERT_TRUE(response); | 14119 ASSERT_TRUE(response); |
| 14115 ASSERT_TRUE(response->headers); | 14120 ASSERT_TRUE(response->headers); |
| 14116 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 14121 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 14117 EXPECT_TRUE(response->was_fetched_via_spdy); | 14122 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 14118 EXPECT_TRUE(response->was_npn_negotiated); | 14123 EXPECT_TRUE(response->was_npn_negotiated); |
| 14119 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 14124 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 14120 EXPECT_EQ("hello!", response_data); | 14125 EXPECT_EQ("hello!", response_data); |
| 14121 EXPECT_FALSE( | 14126 EXPECT_FALSE( |
| 14122 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 14127 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
| 14123 EXPECT_TRUE( | 14128 EXPECT_TRUE( |
| 14124 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | 14129 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
| 14125 | 14130 |
| 14126 HostPortPair host_port_pair_a1("www.a.com", 80); | 14131 HostPortPair host_port_pair_a1("www.a.com", 80); |
| 14127 SpdySessionKey spdy_session_key_a1( | 14132 SpdySessionKey spdy_session_key_a1( |
| 14128 host_port_pair_a1, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 14133 host_port_pair_a1, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
| 14129 EXPECT_FALSE( | 14134 EXPECT_FALSE( |
| 14130 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a1)); | 14135 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a1)); |
| 14131 HttpRequestInfo request3; | 14136 HttpRequestInfo request3; |
| 14132 request3.method = "GET"; | 14137 request3.method = "GET"; |
| 14133 request3.url = GURL("http://www.a.com/"); | 14138 request3.url = GURL("http://www.a.com/"); |
| 14134 request3.load_flags = 0; | 14139 request3.load_flags = 0; |
| 14135 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14140 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 14136 | 14141 |
| 14137 rv = trans->Start(&request3, callback.callback(), BoundNetLog()); | 14142 rv = trans->Start(&request3, callback.callback(), BoundNetLog()); |
| 14138 EXPECT_EQ(ERR_IO_PENDING, rv); | 14143 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 14139 EXPECT_EQ(OK, callback.WaitForResult()); | 14144 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 14140 | 14145 |
| 14141 response = trans->GetResponseInfo(); | 14146 response = trans->GetResponseInfo(); |
| 14142 ASSERT_TRUE(response); | 14147 ASSERT_TRUE(response); |
| 14143 ASSERT_TRUE(response->headers); | 14148 ASSERT_TRUE(response->headers); |
| 14144 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 14149 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 14145 EXPECT_FALSE(response->was_fetched_via_spdy); | 14150 EXPECT_FALSE(response->was_fetched_via_spdy); |
| 14146 EXPECT_FALSE(response->was_npn_negotiated); | 14151 EXPECT_FALSE(response->was_npn_negotiated); |
| 14147 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 14152 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 14148 EXPECT_EQ("hello!", response_data); | 14153 EXPECT_EQ("hello!", response_data); |
| 14149 EXPECT_FALSE( | 14154 EXPECT_FALSE( |
| 14150 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 14155 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
| 14151 EXPECT_FALSE( | 14156 EXPECT_FALSE( |
| 14152 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | 14157 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
| 14153 } | 14158 } |
| 14154 | 14159 |
| 14155 TEST_P(HttpNetworkTransactionTest, HttpSyncConnectError) { | 14160 TEST_P(HttpNetworkTransactionTest, HttpSyncConnectError) { |
| 14156 HttpRequestInfo request; | 14161 HttpRequestInfo request; |
| 14157 request.method = "GET"; | 14162 request.method = "GET"; |
| 14158 request.url = GURL("http://www.example.org/"); | 14163 request.url = GURL("http://www.example.org/"); |
| 14159 request.load_flags = 0; | 14164 request.load_flags = 0; |
| 14160 | 14165 |
| 14161 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14166 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 14162 std::unique_ptr<HttpTransaction> trans( | 14167 std::unique_ptr<HttpTransaction> trans( |
| 14163 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14168 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 14164 | 14169 |
| 14165 MockConnect mock_connect(SYNCHRONOUS, ERR_NAME_NOT_RESOLVED); | 14170 MockConnect mock_connect(SYNCHRONOUS, ERR_NAME_NOT_RESOLVED); |
| 14166 StaticSocketDataProvider data; | 14171 StaticSocketDataProvider data; |
| 14167 data.set_connect_data(mock_connect); | 14172 data.set_connect_data(mock_connect); |
| 14168 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14173 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 14169 | 14174 |
| 14170 TestCompletionCallback callback; | 14175 TestCompletionCallback callback; |
| 14171 | 14176 |
| 14172 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14177 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 14173 EXPECT_EQ(ERR_IO_PENDING, rv); | 14178 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 14174 | 14179 |
| 14175 rv = callback.WaitForResult(); | 14180 rv = callback.WaitForResult(); |
| 14176 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); | 14181 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); |
| 14177 | 14182 |
| 14178 // We don't care whether this succeeds or fails, but it shouldn't crash. | 14183 // We don't care whether this succeeds or fails, but it shouldn't crash. |
| 14179 HttpRequestHeaders request_headers; | 14184 HttpRequestHeaders request_headers; |
| 14180 trans->GetFullRequestHeaders(&request_headers); | 14185 trans->GetFullRequestHeaders(&request_headers); |
| 14181 | 14186 |
| 14182 ConnectionAttempts attempts; | 14187 ConnectionAttempts attempts; |
| 14183 trans->GetConnectionAttempts(&attempts); | 14188 trans->GetConnectionAttempts(&attempts); |
| 14184 ASSERT_EQ(1u, attempts.size()); | 14189 ASSERT_EQ(1u, attempts.size()); |
| 14185 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, attempts[0].result); | 14190 EXPECT_THAT(attempts[0].result, IsError(ERR_NAME_NOT_RESOLVED)); |
| 14186 | 14191 |
| 14187 IPEndPoint endpoint; | 14192 IPEndPoint endpoint; |
| 14188 EXPECT_FALSE(trans->GetRemoteEndpoint(&endpoint)); | 14193 EXPECT_FALSE(trans->GetRemoteEndpoint(&endpoint)); |
| 14189 EXPECT_TRUE(endpoint.address().empty()); | 14194 EXPECT_TRUE(endpoint.address().empty()); |
| 14190 } | 14195 } |
| 14191 | 14196 |
| 14192 TEST_P(HttpNetworkTransactionTest, HttpAsyncConnectError) { | 14197 TEST_P(HttpNetworkTransactionTest, HttpAsyncConnectError) { |
| 14193 HttpRequestInfo request; | 14198 HttpRequestInfo request; |
| 14194 request.method = "GET"; | 14199 request.method = "GET"; |
| 14195 request.url = GURL("http://www.example.org/"); | 14200 request.url = GURL("http://www.example.org/"); |
| 14196 request.load_flags = 0; | 14201 request.load_flags = 0; |
| 14197 | 14202 |
| 14198 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14203 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 14199 std::unique_ptr<HttpTransaction> trans( | 14204 std::unique_ptr<HttpTransaction> trans( |
| 14200 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14205 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 14201 | 14206 |
| 14202 MockConnect mock_connect(ASYNC, ERR_NAME_NOT_RESOLVED); | 14207 MockConnect mock_connect(ASYNC, ERR_NAME_NOT_RESOLVED); |
| 14203 StaticSocketDataProvider data; | 14208 StaticSocketDataProvider data; |
| 14204 data.set_connect_data(mock_connect); | 14209 data.set_connect_data(mock_connect); |
| 14205 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14210 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 14206 | 14211 |
| 14207 TestCompletionCallback callback; | 14212 TestCompletionCallback callback; |
| 14208 | 14213 |
| 14209 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14214 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 14210 EXPECT_EQ(ERR_IO_PENDING, rv); | 14215 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 14211 | 14216 |
| 14212 rv = callback.WaitForResult(); | 14217 rv = callback.WaitForResult(); |
| 14213 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); | 14218 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); |
| 14214 | 14219 |
| 14215 // We don't care whether this succeeds or fails, but it shouldn't crash. | 14220 // We don't care whether this succeeds or fails, but it shouldn't crash. |
| 14216 HttpRequestHeaders request_headers; | 14221 HttpRequestHeaders request_headers; |
| 14217 trans->GetFullRequestHeaders(&request_headers); | 14222 trans->GetFullRequestHeaders(&request_headers); |
| 14218 | 14223 |
| 14219 ConnectionAttempts attempts; | 14224 ConnectionAttempts attempts; |
| 14220 trans->GetConnectionAttempts(&attempts); | 14225 trans->GetConnectionAttempts(&attempts); |
| 14221 ASSERT_EQ(1u, attempts.size()); | 14226 ASSERT_EQ(1u, attempts.size()); |
| 14222 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, attempts[0].result); | 14227 EXPECT_THAT(attempts[0].result, IsError(ERR_NAME_NOT_RESOLVED)); |
| 14223 | 14228 |
| 14224 IPEndPoint endpoint; | 14229 IPEndPoint endpoint; |
| 14225 EXPECT_FALSE(trans->GetRemoteEndpoint(&endpoint)); | 14230 EXPECT_FALSE(trans->GetRemoteEndpoint(&endpoint)); |
| 14226 EXPECT_TRUE(endpoint.address().empty()); | 14231 EXPECT_TRUE(endpoint.address().empty()); |
| 14227 } | 14232 } |
| 14228 | 14233 |
| 14229 TEST_P(HttpNetworkTransactionTest, HttpSyncWriteError) { | 14234 TEST_P(HttpNetworkTransactionTest, HttpSyncWriteError) { |
| 14230 HttpRequestInfo request; | 14235 HttpRequestInfo request; |
| 14231 request.method = "GET"; | 14236 request.method = "GET"; |
| 14232 request.url = GURL("http://www.example.org/"); | 14237 request.url = GURL("http://www.example.org/"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 14243 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 14248 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
| 14244 }; | 14249 }; |
| 14245 | 14250 |
| 14246 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 14251 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 14247 data_writes, arraysize(data_writes)); | 14252 data_writes, arraysize(data_writes)); |
| 14248 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14253 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 14249 | 14254 |
| 14250 TestCompletionCallback callback; | 14255 TestCompletionCallback callback; |
| 14251 | 14256 |
| 14252 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14257 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 14253 EXPECT_EQ(ERR_IO_PENDING, rv); | 14258 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 14254 | 14259 |
| 14255 rv = callback.WaitForResult(); | 14260 rv = callback.WaitForResult(); |
| 14256 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 14261 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
| 14257 | 14262 |
| 14258 HttpRequestHeaders request_headers; | 14263 HttpRequestHeaders request_headers; |
| 14259 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 14264 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
| 14260 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14265 EXPECT_TRUE(request_headers.HasHeader("Host")); |
| 14261 } | 14266 } |
| 14262 | 14267 |
| 14263 TEST_P(HttpNetworkTransactionTest, HttpAsyncWriteError) { | 14268 TEST_P(HttpNetworkTransactionTest, HttpAsyncWriteError) { |
| 14264 HttpRequestInfo request; | 14269 HttpRequestInfo request; |
| 14265 request.method = "GET"; | 14270 request.method = "GET"; |
| 14266 request.url = GURL("http://www.example.org/"); | 14271 request.url = GURL("http://www.example.org/"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 14277 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 14282 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
| 14278 }; | 14283 }; |
| 14279 | 14284 |
| 14280 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 14285 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 14281 data_writes, arraysize(data_writes)); | 14286 data_writes, arraysize(data_writes)); |
| 14282 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14287 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 14283 | 14288 |
| 14284 TestCompletionCallback callback; | 14289 TestCompletionCallback callback; |
| 14285 | 14290 |
| 14286 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14291 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 14287 EXPECT_EQ(ERR_IO_PENDING, rv); | 14292 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 14288 | 14293 |
| 14289 rv = callback.WaitForResult(); | 14294 rv = callback.WaitForResult(); |
| 14290 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 14295 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
| 14291 | 14296 |
| 14292 HttpRequestHeaders request_headers; | 14297 HttpRequestHeaders request_headers; |
| 14293 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 14298 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
| 14294 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14299 EXPECT_TRUE(request_headers.HasHeader("Host")); |
| 14295 } | 14300 } |
| 14296 | 14301 |
| 14297 TEST_P(HttpNetworkTransactionTest, HttpSyncReadError) { | 14302 TEST_P(HttpNetworkTransactionTest, HttpSyncReadError) { |
| 14298 HttpRequestInfo request; | 14303 HttpRequestInfo request; |
| 14299 request.method = "GET"; | 14304 request.method = "GET"; |
| 14300 request.url = GURL("http://www.example.org/"); | 14305 request.url = GURL("http://www.example.org/"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 14314 MockRead(SYNCHRONOUS, ERR_CONNECTION_RESET), | 14319 MockRead(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 14315 }; | 14320 }; |
| 14316 | 14321 |
| 14317 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 14322 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 14318 data_writes, arraysize(data_writes)); | 14323 data_writes, arraysize(data_writes)); |
| 14319 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14324 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 14320 | 14325 |
| 14321 TestCompletionCallback callback; | 14326 TestCompletionCallback callback; |
| 14322 | 14327 |
| 14323 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14328 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 14324 EXPECT_EQ(ERR_IO_PENDING, rv); | 14329 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 14325 | 14330 |
| 14326 rv = callback.WaitForResult(); | 14331 rv = callback.WaitForResult(); |
| 14327 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 14332 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
| 14328 | 14333 |
| 14329 HttpRequestHeaders request_headers; | 14334 HttpRequestHeaders request_headers; |
| 14330 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 14335 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
| 14331 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14336 EXPECT_TRUE(request_headers.HasHeader("Host")); |
| 14332 } | 14337 } |
| 14333 | 14338 |
| 14334 TEST_P(HttpNetworkTransactionTest, HttpAsyncReadError) { | 14339 TEST_P(HttpNetworkTransactionTest, HttpAsyncReadError) { |
| 14335 HttpRequestInfo request; | 14340 HttpRequestInfo request; |
| 14336 request.method = "GET"; | 14341 request.method = "GET"; |
| 14337 request.url = GURL("http://www.example.org/"); | 14342 request.url = GURL("http://www.example.org/"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 14351 MockRead(ASYNC, ERR_CONNECTION_RESET), | 14356 MockRead(ASYNC, ERR_CONNECTION_RESET), |
| 14352 }; | 14357 }; |
| 14353 | 14358 |
| 14354 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 14359 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 14355 data_writes, arraysize(data_writes)); | 14360 data_writes, arraysize(data_writes)); |
| 14356 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14361 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 14357 | 14362 |
| 14358 TestCompletionCallback callback; | 14363 TestCompletionCallback callback; |
| 14359 | 14364 |
| 14360 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14365 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 14361 EXPECT_EQ(ERR_IO_PENDING, rv); | 14366 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 14362 | 14367 |
| 14363 rv = callback.WaitForResult(); | 14368 rv = callback.WaitForResult(); |
| 14364 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 14369 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
| 14365 | 14370 |
| 14366 HttpRequestHeaders request_headers; | 14371 HttpRequestHeaders request_headers; |
| 14367 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 14372 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
| 14368 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14373 EXPECT_TRUE(request_headers.HasHeader("Host")); |
| 14369 } | 14374 } |
| 14370 | 14375 |
| 14371 TEST_P(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { | 14376 TEST_P(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { |
| 14372 HttpRequestInfo request; | 14377 HttpRequestInfo request; |
| 14373 request.method = "GET"; | 14378 request.method = "GET"; |
| 14374 request.url = GURL("http://www.example.org/"); | 14379 request.url = GURL("http://www.example.org/"); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 14393 MockRead(ASYNC, ERR_UNEXPECTED), | 14398 MockRead(ASYNC, ERR_UNEXPECTED), |
| 14394 }; | 14399 }; |
| 14395 | 14400 |
| 14396 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 14401 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 14397 data_writes, arraysize(data_writes)); | 14402 data_writes, arraysize(data_writes)); |
| 14398 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14403 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 14399 | 14404 |
| 14400 TestCompletionCallback callback; | 14405 TestCompletionCallback callback; |
| 14401 | 14406 |
| 14402 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14407 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 14403 EXPECT_EQ(ERR_IO_PENDING, rv); | 14408 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 14404 | 14409 |
| 14405 rv = callback.WaitForResult(); | 14410 rv = callback.WaitForResult(); |
| 14406 EXPECT_EQ(OK, rv); | 14411 EXPECT_THAT(rv, IsOk()); |
| 14407 | 14412 |
| 14408 HttpRequestHeaders request_headers; | 14413 HttpRequestHeaders request_headers; |
| 14409 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 14414 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
| 14410 std::string foo; | 14415 std::string foo; |
| 14411 EXPECT_TRUE(request_headers.GetHeader("X-Foo", &foo)); | 14416 EXPECT_TRUE(request_headers.GetHeader("X-Foo", &foo)); |
| 14412 EXPECT_EQ("bar", foo); | 14417 EXPECT_EQ("bar", foo); |
| 14413 } | 14418 } |
| 14414 | 14419 |
| 14415 namespace { | 14420 namespace { |
| 14416 | 14421 |
| (...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14964 // Start the HTTP request. Pool should stall. | 14969 // Start the HTTP request. Pool should stall. |
| 14965 TestCompletionCallback http_callback; | 14970 TestCompletionCallback http_callback; |
| 14966 std::unique_ptr<HttpTransaction> http_trans( | 14971 std::unique_ptr<HttpTransaction> http_trans( |
| 14967 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14972 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 14968 ASSERT_EQ(ERR_IO_PENDING, | 14973 ASSERT_EQ(ERR_IO_PENDING, |
| 14969 http_trans->Start(&http_request, http_callback.callback(), | 14974 http_trans->Start(&http_request, http_callback.callback(), |
| 14970 BoundNetLog())); | 14975 BoundNetLog())); |
| 14971 EXPECT_TRUE(IsTransportSocketPoolStalled(session.get())); | 14976 EXPECT_TRUE(IsTransportSocketPoolStalled(session.get())); |
| 14972 | 14977 |
| 14973 // Wait for response from SSL request. | 14978 // Wait for response from SSL request. |
| 14974 ASSERT_EQ(OK, ssl_callback.WaitForResult()); | 14979 ASSERT_THAT(ssl_callback.WaitForResult(), IsOk()); |
| 14975 std::string response_data; | 14980 std::string response_data; |
| 14976 ASSERT_EQ(OK, ReadTransaction(ssl_trans.get(), &response_data)); | 14981 ASSERT_THAT(ReadTransaction(ssl_trans.get(), &response_data), IsOk()); |
| 14977 EXPECT_EQ("hello world", response_data); | 14982 EXPECT_EQ("hello world", response_data); |
| 14978 | 14983 |
| 14979 // The SSL socket should automatically be closed, so the HTTP request can | 14984 // The SSL socket should automatically be closed, so the HTTP request can |
| 14980 // start. | 14985 // start. |
| 14981 EXPECT_EQ(0, GetIdleSocketCountInSSLSocketPool(session.get())); | 14986 EXPECT_EQ(0, GetIdleSocketCountInSSLSocketPool(session.get())); |
| 14982 ASSERT_FALSE(IsTransportSocketPoolStalled(session.get())); | 14987 ASSERT_FALSE(IsTransportSocketPoolStalled(session.get())); |
| 14983 | 14988 |
| 14984 // The HTTP request can now complete. | 14989 // The HTTP request can now complete. |
| 14985 ASSERT_EQ(OK, http_callback.WaitForResult()); | 14990 ASSERT_THAT(http_callback.WaitForResult(), IsOk()); |
| 14986 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data)); | 14991 ASSERT_THAT(ReadTransaction(http_trans.get(), &response_data), IsOk()); |
| 14987 EXPECT_EQ("falafel", response_data); | 14992 EXPECT_EQ("falafel", response_data); |
| 14988 | 14993 |
| 14989 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 14994 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 14990 } | 14995 } |
| 14991 | 14996 |
| 14992 // Tests that when a SSL connection is established but there's no corresponding | 14997 // Tests that when a SSL connection is established but there's no corresponding |
| 14993 // request that needs it, the new socket is closed if the transport socket pool | 14998 // request that needs it, the new socket is closed if the transport socket pool |
| 14994 // is stalled on the global socket limit. | 14999 // is stalled on the global socket limit. |
| 14995 TEST_P(HttpNetworkTransactionTest, CloseSSLSocketOnIdleForHttpRequest2) { | 15000 TEST_P(HttpNetworkTransactionTest, CloseSSLSocketOnIdleForHttpRequest2) { |
| 14996 ClientSocketPoolManager::set_max_sockets_per_group( | 15001 ClientSocketPoolManager::set_max_sockets_per_group( |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15045 TestCompletionCallback http_callback; | 15050 TestCompletionCallback http_callback; |
| 15046 std::unique_ptr<HttpTransaction> http_trans( | 15051 std::unique_ptr<HttpTransaction> http_trans( |
| 15047 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15052 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 15048 ASSERT_EQ(ERR_IO_PENDING, | 15053 ASSERT_EQ(ERR_IO_PENDING, |
| 15049 http_trans->Start(&http_request, http_callback.callback(), | 15054 http_trans->Start(&http_request, http_callback.callback(), |
| 15050 BoundNetLog())); | 15055 BoundNetLog())); |
| 15051 EXPECT_TRUE(IsTransportSocketPoolStalled(session.get())); | 15056 EXPECT_TRUE(IsTransportSocketPoolStalled(session.get())); |
| 15052 | 15057 |
| 15053 // The SSL connection will automatically be closed once the connection is | 15058 // The SSL connection will automatically be closed once the connection is |
| 15054 // established, to let the HTTP request start. | 15059 // established, to let the HTTP request start. |
| 15055 ASSERT_EQ(OK, http_callback.WaitForResult()); | 15060 ASSERT_THAT(http_callback.WaitForResult(), IsOk()); |
| 15056 std::string response_data; | 15061 std::string response_data; |
| 15057 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data)); | 15062 ASSERT_THAT(ReadTransaction(http_trans.get(), &response_data), IsOk()); |
| 15058 EXPECT_EQ("falafel", response_data); | 15063 EXPECT_EQ("falafel", response_data); |
| 15059 | 15064 |
| 15060 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 15065 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
| 15061 } | 15066 } |
| 15062 | 15067 |
| 15063 TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterReset) { | 15068 TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterReset) { |
| 15064 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15069 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 15065 element_readers.push_back( | 15070 element_readers.push_back( |
| 15066 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15071 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
| 15067 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15072 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 15089 MockRead("hello world"), | 15094 MockRead("hello world"), |
| 15090 MockRead(SYNCHRONOUS, OK), | 15095 MockRead(SYNCHRONOUS, OK), |
| 15091 }; | 15096 }; |
| 15092 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15097 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 15093 arraysize(data_writes)); | 15098 arraysize(data_writes)); |
| 15094 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15099 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 15095 | 15100 |
| 15096 TestCompletionCallback callback; | 15101 TestCompletionCallback callback; |
| 15097 | 15102 |
| 15098 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15103 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 15099 EXPECT_EQ(ERR_IO_PENDING, rv); | 15104 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15100 | 15105 |
| 15101 rv = callback.WaitForResult(); | 15106 rv = callback.WaitForResult(); |
| 15102 EXPECT_EQ(OK, rv); | 15107 EXPECT_THAT(rv, IsOk()); |
| 15103 | 15108 |
| 15104 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15109 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 15105 ASSERT_TRUE(response); | 15110 ASSERT_TRUE(response); |
| 15106 | 15111 |
| 15107 EXPECT_TRUE(response->headers); | 15112 EXPECT_TRUE(response->headers); |
| 15108 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); | 15113 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); |
| 15109 | 15114 |
| 15110 std::string response_data; | 15115 std::string response_data; |
| 15111 rv = ReadTransaction(trans.get(), &response_data); | 15116 rv = ReadTransaction(trans.get(), &response_data); |
| 15112 EXPECT_EQ(OK, rv); | 15117 EXPECT_THAT(rv, IsOk()); |
| 15113 EXPECT_EQ("hello world", response_data); | 15118 EXPECT_EQ("hello world", response_data); |
| 15114 } | 15119 } |
| 15115 | 15120 |
| 15116 // This test makes sure the retry logic doesn't trigger when reading an error | 15121 // This test makes sure the retry logic doesn't trigger when reading an error |
| 15117 // response from a server that rejected a POST with a CONNECTION_RESET. | 15122 // response from a server that rejected a POST with a CONNECTION_RESET. |
| 15118 TEST_P(HttpNetworkTransactionTest, | 15123 TEST_P(HttpNetworkTransactionTest, |
| 15119 PostReadsErrorResponseAfterResetOnReusedSocket) { | 15124 PostReadsErrorResponseAfterResetOnReusedSocket) { |
| 15120 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15125 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 15121 MockWrite data_writes[] = { | 15126 MockWrite data_writes[] = { |
| 15122 MockWrite("GET / HTTP/1.1\r\n" | 15127 MockWrite("GET / HTTP/1.1\r\n" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 15144 | 15149 |
| 15145 TestCompletionCallback callback; | 15150 TestCompletionCallback callback; |
| 15146 HttpRequestInfo request1; | 15151 HttpRequestInfo request1; |
| 15147 request1.method = "GET"; | 15152 request1.method = "GET"; |
| 15148 request1.url = GURL("http://www.foo.com/"); | 15153 request1.url = GURL("http://www.foo.com/"); |
| 15149 request1.load_flags = 0; | 15154 request1.load_flags = 0; |
| 15150 | 15155 |
| 15151 std::unique_ptr<HttpTransaction> trans1( | 15156 std::unique_ptr<HttpTransaction> trans1( |
| 15152 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15157 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 15153 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); | 15158 int rv = trans1->Start(&request1, callback.callback(), BoundNetLog()); |
| 15154 EXPECT_EQ(ERR_IO_PENDING, rv); | 15159 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15155 | 15160 |
| 15156 rv = callback.WaitForResult(); | 15161 rv = callback.WaitForResult(); |
| 15157 EXPECT_EQ(OK, rv); | 15162 EXPECT_THAT(rv, IsOk()); |
| 15158 | 15163 |
| 15159 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 15164 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
| 15160 ASSERT_TRUE(response1); | 15165 ASSERT_TRUE(response1); |
| 15161 | 15166 |
| 15162 EXPECT_TRUE(response1->headers); | 15167 EXPECT_TRUE(response1->headers); |
| 15163 EXPECT_EQ("HTTP/1.1 200 Peachy", response1->headers->GetStatusLine()); | 15168 EXPECT_EQ("HTTP/1.1 200 Peachy", response1->headers->GetStatusLine()); |
| 15164 | 15169 |
| 15165 std::string response_data1; | 15170 std::string response_data1; |
| 15166 rv = ReadTransaction(trans1.get(), &response_data1); | 15171 rv = ReadTransaction(trans1.get(), &response_data1); |
| 15167 EXPECT_EQ(OK, rv); | 15172 EXPECT_THAT(rv, IsOk()); |
| 15168 EXPECT_EQ("first response", response_data1); | 15173 EXPECT_EQ("first response", response_data1); |
| 15169 // Delete the transaction to release the socket back into the socket pool. | 15174 // Delete the transaction to release the socket back into the socket pool. |
| 15170 trans1.reset(); | 15175 trans1.reset(); |
| 15171 | 15176 |
| 15172 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15177 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 15173 element_readers.push_back( | 15178 element_readers.push_back( |
| 15174 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15179 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
| 15175 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15180 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 15176 | 15181 |
| 15177 HttpRequestInfo request2; | 15182 HttpRequestInfo request2; |
| 15178 request2.method = "POST"; | 15183 request2.method = "POST"; |
| 15179 request2.url = GURL("http://www.foo.com/"); | 15184 request2.url = GURL("http://www.foo.com/"); |
| 15180 request2.upload_data_stream = &upload_data_stream; | 15185 request2.upload_data_stream = &upload_data_stream; |
| 15181 request2.load_flags = 0; | 15186 request2.load_flags = 0; |
| 15182 | 15187 |
| 15183 std::unique_ptr<HttpTransaction> trans2( | 15188 std::unique_ptr<HttpTransaction> trans2( |
| 15184 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15189 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 15185 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); | 15190 rv = trans2->Start(&request2, callback.callback(), BoundNetLog()); |
| 15186 EXPECT_EQ(ERR_IO_PENDING, rv); | 15191 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15187 | 15192 |
| 15188 rv = callback.WaitForResult(); | 15193 rv = callback.WaitForResult(); |
| 15189 EXPECT_EQ(OK, rv); | 15194 EXPECT_THAT(rv, IsOk()); |
| 15190 | 15195 |
| 15191 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 15196 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
| 15192 ASSERT_TRUE(response2); | 15197 ASSERT_TRUE(response2); |
| 15193 | 15198 |
| 15194 EXPECT_TRUE(response2->headers); | 15199 EXPECT_TRUE(response2->headers); |
| 15195 EXPECT_EQ("HTTP/1.1 400 Not OK", response2->headers->GetStatusLine()); | 15200 EXPECT_EQ("HTTP/1.1 400 Not OK", response2->headers->GetStatusLine()); |
| 15196 | 15201 |
| 15197 std::string response_data2; | 15202 std::string response_data2; |
| 15198 rv = ReadTransaction(trans2.get(), &response_data2); | 15203 rv = ReadTransaction(trans2.get(), &response_data2); |
| 15199 EXPECT_EQ(OK, rv); | 15204 EXPECT_THAT(rv, IsOk()); |
| 15200 EXPECT_EQ("second response", response_data2); | 15205 EXPECT_EQ("second response", response_data2); |
| 15201 } | 15206 } |
| 15202 | 15207 |
| 15203 TEST_P(HttpNetworkTransactionTest, | 15208 TEST_P(HttpNetworkTransactionTest, |
| 15204 PostReadsErrorResponseAfterResetPartialBodySent) { | 15209 PostReadsErrorResponseAfterResetPartialBodySent) { |
| 15205 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15210 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 15206 element_readers.push_back( | 15211 element_readers.push_back( |
| 15207 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15212 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
| 15208 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15213 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 15209 | 15214 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 15231 MockRead("hello world"), | 15236 MockRead("hello world"), |
| 15232 MockRead(SYNCHRONOUS, OK), | 15237 MockRead(SYNCHRONOUS, OK), |
| 15233 }; | 15238 }; |
| 15234 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15239 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 15235 arraysize(data_writes)); | 15240 arraysize(data_writes)); |
| 15236 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15241 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 15237 | 15242 |
| 15238 TestCompletionCallback callback; | 15243 TestCompletionCallback callback; |
| 15239 | 15244 |
| 15240 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15245 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 15241 EXPECT_EQ(ERR_IO_PENDING, rv); | 15246 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15242 | 15247 |
| 15243 rv = callback.WaitForResult(); | 15248 rv = callback.WaitForResult(); |
| 15244 EXPECT_EQ(OK, rv); | 15249 EXPECT_THAT(rv, IsOk()); |
| 15245 | 15250 |
| 15246 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15251 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 15247 ASSERT_TRUE(response); | 15252 ASSERT_TRUE(response); |
| 15248 | 15253 |
| 15249 EXPECT_TRUE(response->headers); | 15254 EXPECT_TRUE(response->headers); |
| 15250 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); | 15255 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); |
| 15251 | 15256 |
| 15252 std::string response_data; | 15257 std::string response_data; |
| 15253 rv = ReadTransaction(trans.get(), &response_data); | 15258 rv = ReadTransaction(trans.get(), &response_data); |
| 15254 EXPECT_EQ(OK, rv); | 15259 EXPECT_THAT(rv, IsOk()); |
| 15255 EXPECT_EQ("hello world", response_data); | 15260 EXPECT_EQ("hello world", response_data); |
| 15256 } | 15261 } |
| 15257 | 15262 |
| 15258 // This tests the more common case than the previous test, where headers and | 15263 // This tests the more common case than the previous test, where headers and |
| 15259 // body are not merged into a single request. | 15264 // body are not merged into a single request. |
| 15260 TEST_P(HttpNetworkTransactionTest, ChunkedPostReadsErrorResponseAfterReset) { | 15265 TEST_P(HttpNetworkTransactionTest, ChunkedPostReadsErrorResponseAfterReset) { |
| 15261 ChunkedUploadDataStream upload_data_stream(0); | 15266 ChunkedUploadDataStream upload_data_stream(0); |
| 15262 | 15267 |
| 15263 HttpRequestInfo request; | 15268 HttpRequestInfo request; |
| 15264 request.method = "POST"; | 15269 request.method = "POST"; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 15283 MockRead("hello world"), | 15288 MockRead("hello world"), |
| 15284 MockRead(SYNCHRONOUS, OK), | 15289 MockRead(SYNCHRONOUS, OK), |
| 15285 }; | 15290 }; |
| 15286 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15291 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 15287 arraysize(data_writes)); | 15292 arraysize(data_writes)); |
| 15288 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15293 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 15289 | 15294 |
| 15290 TestCompletionCallback callback; | 15295 TestCompletionCallback callback; |
| 15291 | 15296 |
| 15292 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15297 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 15293 EXPECT_EQ(ERR_IO_PENDING, rv); | 15298 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15294 // Make sure the headers are sent before adding a chunk. This ensures that | 15299 // Make sure the headers are sent before adding a chunk. This ensures that |
| 15295 // they can't be merged with the body in a single send. Not currently | 15300 // they can't be merged with the body in a single send. Not currently |
| 15296 // necessary since a chunked body is never merged with headers, but this makes | 15301 // necessary since a chunked body is never merged with headers, but this makes |
| 15297 // the test more future proof. | 15302 // the test more future proof. |
| 15298 base::RunLoop().RunUntilIdle(); | 15303 base::RunLoop().RunUntilIdle(); |
| 15299 | 15304 |
| 15300 upload_data_stream.AppendData("last chunk", 10, true); | 15305 upload_data_stream.AppendData("last chunk", 10, true); |
| 15301 | 15306 |
| 15302 rv = callback.WaitForResult(); | 15307 rv = callback.WaitForResult(); |
| 15303 EXPECT_EQ(OK, rv); | 15308 EXPECT_THAT(rv, IsOk()); |
| 15304 | 15309 |
| 15305 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15310 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 15306 ASSERT_TRUE(response); | 15311 ASSERT_TRUE(response); |
| 15307 | 15312 |
| 15308 EXPECT_TRUE(response->headers); | 15313 EXPECT_TRUE(response->headers); |
| 15309 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); | 15314 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); |
| 15310 | 15315 |
| 15311 std::string response_data; | 15316 std::string response_data; |
| 15312 rv = ReadTransaction(trans.get(), &response_data); | 15317 rv = ReadTransaction(trans.get(), &response_data); |
| 15313 EXPECT_EQ(OK, rv); | 15318 EXPECT_THAT(rv, IsOk()); |
| 15314 EXPECT_EQ("hello world", response_data); | 15319 EXPECT_EQ("hello world", response_data); |
| 15315 } | 15320 } |
| 15316 | 15321 |
| 15317 TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterResetAnd100) { | 15322 TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterResetAnd100) { |
| 15318 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15323 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 15319 element_readers.push_back( | 15324 element_readers.push_back( |
| 15320 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15325 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
| 15321 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15326 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 15322 | 15327 |
| 15323 HttpRequestInfo request; | 15328 HttpRequestInfo request; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 15344 MockRead("hello world"), | 15349 MockRead("hello world"), |
| 15345 MockRead(SYNCHRONOUS, OK), | 15350 MockRead(SYNCHRONOUS, OK), |
| 15346 }; | 15351 }; |
| 15347 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15352 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 15348 arraysize(data_writes)); | 15353 arraysize(data_writes)); |
| 15349 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15354 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 15350 | 15355 |
| 15351 TestCompletionCallback callback; | 15356 TestCompletionCallback callback; |
| 15352 | 15357 |
| 15353 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15358 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 15354 EXPECT_EQ(ERR_IO_PENDING, rv); | 15359 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15355 | 15360 |
| 15356 rv = callback.WaitForResult(); | 15361 rv = callback.WaitForResult(); |
| 15357 EXPECT_EQ(OK, rv); | 15362 EXPECT_THAT(rv, IsOk()); |
| 15358 | 15363 |
| 15359 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15364 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 15360 ASSERT_TRUE(response); | 15365 ASSERT_TRUE(response); |
| 15361 | 15366 |
| 15362 EXPECT_TRUE(response->headers); | 15367 EXPECT_TRUE(response->headers); |
| 15363 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); | 15368 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); |
| 15364 | 15369 |
| 15365 std::string response_data; | 15370 std::string response_data; |
| 15366 rv = ReadTransaction(trans.get(), &response_data); | 15371 rv = ReadTransaction(trans.get(), &response_data); |
| 15367 EXPECT_EQ(OK, rv); | 15372 EXPECT_THAT(rv, IsOk()); |
| 15368 EXPECT_EQ("hello world", response_data); | 15373 EXPECT_EQ("hello world", response_data); |
| 15369 } | 15374 } |
| 15370 | 15375 |
| 15371 TEST_P(HttpNetworkTransactionTest, PostIgnoresNonErrorResponseAfterReset) { | 15376 TEST_P(HttpNetworkTransactionTest, PostIgnoresNonErrorResponseAfterReset) { |
| 15372 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15377 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 15373 element_readers.push_back( | 15378 element_readers.push_back( |
| 15374 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15379 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
| 15375 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15380 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 15376 | 15381 |
| 15377 HttpRequestInfo request; | 15382 HttpRequestInfo request; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 15397 MockRead("hello world"), | 15402 MockRead("hello world"), |
| 15398 MockRead(SYNCHRONOUS, OK), | 15403 MockRead(SYNCHRONOUS, OK), |
| 15399 }; | 15404 }; |
| 15400 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15405 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 15401 arraysize(data_writes)); | 15406 arraysize(data_writes)); |
| 15402 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15407 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 15403 | 15408 |
| 15404 TestCompletionCallback callback; | 15409 TestCompletionCallback callback; |
| 15405 | 15410 |
| 15406 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15411 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 15407 EXPECT_EQ(ERR_IO_PENDING, rv); | 15412 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15408 | 15413 |
| 15409 rv = callback.WaitForResult(); | 15414 rv = callback.WaitForResult(); |
| 15410 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 15415 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
| 15411 } | 15416 } |
| 15412 | 15417 |
| 15413 TEST_P(HttpNetworkTransactionTest, | 15418 TEST_P(HttpNetworkTransactionTest, |
| 15414 PostIgnoresNonErrorResponseAfterResetAnd100) { | 15419 PostIgnoresNonErrorResponseAfterResetAnd100) { |
| 15415 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15420 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 15416 element_readers.push_back( | 15421 element_readers.push_back( |
| 15417 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15422 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
| 15418 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15423 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 15419 | 15424 |
| 15420 HttpRequestInfo request; | 15425 HttpRequestInfo request; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 15442 MockRead("Content-Length: 0\r\n\r\n"), | 15447 MockRead("Content-Length: 0\r\n\r\n"), |
| 15443 MockRead(SYNCHRONOUS, OK), | 15448 MockRead(SYNCHRONOUS, OK), |
| 15444 }; | 15449 }; |
| 15445 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15450 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 15446 arraysize(data_writes)); | 15451 arraysize(data_writes)); |
| 15447 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15452 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 15448 | 15453 |
| 15449 TestCompletionCallback callback; | 15454 TestCompletionCallback callback; |
| 15450 | 15455 |
| 15451 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15456 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 15452 EXPECT_EQ(ERR_IO_PENDING, rv); | 15457 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15453 | 15458 |
| 15454 rv = callback.WaitForResult(); | 15459 rv = callback.WaitForResult(); |
| 15455 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 15460 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
| 15456 } | 15461 } |
| 15457 | 15462 |
| 15458 TEST_P(HttpNetworkTransactionTest, PostIgnoresHttp09ResponseAfterReset) { | 15463 TEST_P(HttpNetworkTransactionTest, PostIgnoresHttp09ResponseAfterReset) { |
| 15459 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15464 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 15460 element_readers.push_back( | 15465 element_readers.push_back( |
| 15461 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15466 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
| 15462 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15467 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 15463 | 15468 |
| 15464 HttpRequestInfo request; | 15469 HttpRequestInfo request; |
| 15465 request.method = "POST"; | 15470 request.method = "POST"; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 15483 MockRead("HTTP 0.9 rocks!"), | 15488 MockRead("HTTP 0.9 rocks!"), |
| 15484 MockRead(SYNCHRONOUS, OK), | 15489 MockRead(SYNCHRONOUS, OK), |
| 15485 }; | 15490 }; |
| 15486 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15491 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 15487 arraysize(data_writes)); | 15492 arraysize(data_writes)); |
| 15488 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15493 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 15489 | 15494 |
| 15490 TestCompletionCallback callback; | 15495 TestCompletionCallback callback; |
| 15491 | 15496 |
| 15492 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15497 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 15493 EXPECT_EQ(ERR_IO_PENDING, rv); | 15498 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15494 | 15499 |
| 15495 rv = callback.WaitForResult(); | 15500 rv = callback.WaitForResult(); |
| 15496 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 15501 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
| 15497 } | 15502 } |
| 15498 | 15503 |
| 15499 TEST_P(HttpNetworkTransactionTest, PostIgnoresPartial400HeadersAfterReset) { | 15504 TEST_P(HttpNetworkTransactionTest, PostIgnoresPartial400HeadersAfterReset) { |
| 15500 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15505 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 15501 element_readers.push_back( | 15506 element_readers.push_back( |
| 15502 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15507 base::WrapUnique(new UploadBytesElementReader("foo", 3))); |
| 15503 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15508 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 15504 | 15509 |
| 15505 HttpRequestInfo request; | 15510 HttpRequestInfo request; |
| 15506 request.method = "POST"; | 15511 request.method = "POST"; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 15524 MockRead("HTTP/1.0 400 Not a Full Response\r\n"), | 15529 MockRead("HTTP/1.0 400 Not a Full Response\r\n"), |
| 15525 MockRead(SYNCHRONOUS, OK), | 15530 MockRead(SYNCHRONOUS, OK), |
| 15526 }; | 15531 }; |
| 15527 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15532 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 15528 arraysize(data_writes)); | 15533 arraysize(data_writes)); |
| 15529 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15534 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 15530 | 15535 |
| 15531 TestCompletionCallback callback; | 15536 TestCompletionCallback callback; |
| 15532 | 15537 |
| 15533 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15538 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 15534 EXPECT_EQ(ERR_IO_PENDING, rv); | 15539 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15535 | 15540 |
| 15536 rv = callback.WaitForResult(); | 15541 rv = callback.WaitForResult(); |
| 15537 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 15542 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
| 15538 } | 15543 } |
| 15539 | 15544 |
| 15540 // Verify that proxy headers are not sent to the destination server when | 15545 // Verify that proxy headers are not sent to the destination server when |
| 15541 // establishing a tunnel for a secure WebSocket connection. | 15546 // establishing a tunnel for a secure WebSocket connection. |
| 15542 TEST_P(HttpNetworkTransactionTest, ProxyHeadersNotSentOverWssTunnel) { | 15547 TEST_P(HttpNetworkTransactionTest, ProxyHeadersNotSentOverWssTunnel) { |
| 15543 HttpRequestInfo request; | 15548 HttpRequestInfo request; |
| 15544 request.method = "GET"; | 15549 request.method = "GET"; |
| 15545 request.url = GURL("wss://www.example.org/"); | 15550 request.url = GURL("wss://www.example.org/"); |
| 15546 AddWebSocketHeaders(&request.extra_headers); | 15551 AddWebSocketHeaders(&request.extra_headers); |
| 15547 | 15552 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15599 std::unique_ptr<HttpTransaction> trans( | 15604 std::unique_ptr<HttpTransaction> trans( |
| 15600 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15605 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 15601 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; | 15606 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; |
| 15602 trans->SetWebSocketHandshakeStreamCreateHelper( | 15607 trans->SetWebSocketHandshakeStreamCreateHelper( |
| 15603 &websocket_stream_create_helper); | 15608 &websocket_stream_create_helper); |
| 15604 | 15609 |
| 15605 { | 15610 { |
| 15606 TestCompletionCallback callback; | 15611 TestCompletionCallback callback; |
| 15607 | 15612 |
| 15608 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15613 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 15609 EXPECT_EQ(ERR_IO_PENDING, rv); | 15614 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15610 | 15615 |
| 15611 rv = callback.WaitForResult(); | 15616 rv = callback.WaitForResult(); |
| 15612 EXPECT_EQ(OK, rv); | 15617 EXPECT_THAT(rv, IsOk()); |
| 15613 } | 15618 } |
| 15614 | 15619 |
| 15615 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15620 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 15616 ASSERT_TRUE(response); | 15621 ASSERT_TRUE(response); |
| 15617 ASSERT_TRUE(response->headers); | 15622 ASSERT_TRUE(response->headers); |
| 15618 EXPECT_EQ(407, response->headers->response_code()); | 15623 EXPECT_EQ(407, response->headers->response_code()); |
| 15619 | 15624 |
| 15620 { | 15625 { |
| 15621 TestCompletionCallback callback; | 15626 TestCompletionCallback callback; |
| 15622 | 15627 |
| 15623 int rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), | 15628 int rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), |
| 15624 callback.callback()); | 15629 callback.callback()); |
| 15625 EXPECT_EQ(ERR_IO_PENDING, rv); | 15630 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15626 | 15631 |
| 15627 rv = callback.WaitForResult(); | 15632 rv = callback.WaitForResult(); |
| 15628 EXPECT_EQ(OK, rv); | 15633 EXPECT_THAT(rv, IsOk()); |
| 15629 } | 15634 } |
| 15630 | 15635 |
| 15631 response = trans->GetResponseInfo(); | 15636 response = trans->GetResponseInfo(); |
| 15632 ASSERT_TRUE(response); | 15637 ASSERT_TRUE(response); |
| 15633 ASSERT_TRUE(response->headers); | 15638 ASSERT_TRUE(response->headers); |
| 15634 | 15639 |
| 15635 EXPECT_EQ(101, response->headers->response_code()); | 15640 EXPECT_EQ(101, response->headers->response_code()); |
| 15636 | 15641 |
| 15637 trans.reset(); | 15642 trans.reset(); |
| 15638 session->CloseAllConnections(); | 15643 session->CloseAllConnections(); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15697 | 15702 |
| 15698 std::unique_ptr<HttpTransaction> trans( | 15703 std::unique_ptr<HttpTransaction> trans( |
| 15699 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15704 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 15700 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; | 15705 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; |
| 15701 trans->SetWebSocketHandshakeStreamCreateHelper( | 15706 trans->SetWebSocketHandshakeStreamCreateHelper( |
| 15702 &websocket_stream_create_helper); | 15707 &websocket_stream_create_helper); |
| 15703 | 15708 |
| 15704 TestCompletionCallback callback; | 15709 TestCompletionCallback callback; |
| 15705 | 15710 |
| 15706 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 15711 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 15707 EXPECT_EQ(ERR_IO_PENDING, rv); | 15712 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 15708 | 15713 |
| 15709 rv = callback.WaitForResult(); | 15714 rv = callback.WaitForResult(); |
| 15710 EXPECT_EQ(OK, rv); | 15715 EXPECT_THAT(rv, IsOk()); |
| 15711 | 15716 |
| 15712 const HttpResponseInfo* response = trans->GetResponseInfo(); | 15717 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 15713 ASSERT_TRUE(response); | 15718 ASSERT_TRUE(response); |
| 15714 ASSERT_TRUE(response->headers); | 15719 ASSERT_TRUE(response->headers); |
| 15715 | 15720 |
| 15716 EXPECT_EQ(101, response->headers->response_code()); | 15721 EXPECT_EQ(101, response->headers->response_code()); |
| 15717 | 15722 |
| 15718 trans.reset(); | 15723 trans.reset(); |
| 15719 session->CloseAllConnections(); | 15724 session->CloseAllConnections(); |
| 15720 } | 15725 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 15746 MockRead(SYNCHRONOUS, OK), | 15751 MockRead(SYNCHRONOUS, OK), |
| 15747 }; | 15752 }; |
| 15748 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15753 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 15749 arraysize(data_writes)); | 15754 arraysize(data_writes)); |
| 15750 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15755 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 15751 | 15756 |
| 15752 TestCompletionCallback callback; | 15757 TestCompletionCallback callback; |
| 15753 | 15758 |
| 15754 EXPECT_EQ(ERR_IO_PENDING, | 15759 EXPECT_EQ(ERR_IO_PENDING, |
| 15755 trans->Start(&request, callback.callback(), BoundNetLog())); | 15760 trans->Start(&request, callback.callback(), BoundNetLog())); |
| 15756 EXPECT_EQ(OK, callback.WaitForResult()); | 15761 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 15757 | 15762 |
| 15758 std::string response_data; | 15763 std::string response_data; |
| 15759 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 15764 EXPECT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 15760 | 15765 |
| 15761 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | 15766 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
| 15762 trans->GetTotalSentBytes()); | 15767 trans->GetTotalSentBytes()); |
| 15763 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | 15768 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
| 15764 trans->GetTotalReceivedBytes()); | 15769 trans->GetTotalReceivedBytes()); |
| 15765 } | 15770 } |
| 15766 | 15771 |
| 15767 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesPost100Continue) { | 15772 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesPost100Continue) { |
| 15768 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15773 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 15769 element_readers.push_back( | 15774 element_readers.push_back( |
| (...skipping 22 matching lines...) Expand all Loading... |
| 15792 MockRead(SYNCHRONOUS, OK), | 15797 MockRead(SYNCHRONOUS, OK), |
| 15793 }; | 15798 }; |
| 15794 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15799 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| 15795 arraysize(data_writes)); | 15800 arraysize(data_writes)); |
| 15796 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15801 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 15797 | 15802 |
| 15798 TestCompletionCallback callback; | 15803 TestCompletionCallback callback; |
| 15799 | 15804 |
| 15800 EXPECT_EQ(ERR_IO_PENDING, | 15805 EXPECT_EQ(ERR_IO_PENDING, |
| 15801 trans->Start(&request, callback.callback(), BoundNetLog())); | 15806 trans->Start(&request, callback.callback(), BoundNetLog())); |
| 15802 EXPECT_EQ(OK, callback.WaitForResult()); | 15807 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 15803 | 15808 |
| 15804 std::string response_data; | 15809 std::string response_data; |
| 15805 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 15810 EXPECT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 15806 | 15811 |
| 15807 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | 15812 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
| 15808 trans->GetTotalSentBytes()); | 15813 trans->GetTotalSentBytes()); |
| 15809 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | 15814 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
| 15810 trans->GetTotalReceivedBytes()); | 15815 trans->GetTotalReceivedBytes()); |
| 15811 } | 15816 } |
| 15812 | 15817 |
| 15813 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesChunkedPost) { | 15818 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesChunkedPost) { |
| 15814 ChunkedUploadDataStream upload_data_stream(0); | 15819 ChunkedUploadDataStream upload_data_stream(0); |
| 15815 | 15820 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 15842 | 15847 |
| 15843 EXPECT_EQ(ERR_IO_PENDING, | 15848 EXPECT_EQ(ERR_IO_PENDING, |
| 15844 trans->Start(&request, callback.callback(), BoundNetLog())); | 15849 trans->Start(&request, callback.callback(), BoundNetLog())); |
| 15845 | 15850 |
| 15846 base::RunLoop().RunUntilIdle(); | 15851 base::RunLoop().RunUntilIdle(); |
| 15847 upload_data_stream.AppendData("f", 1, false); | 15852 upload_data_stream.AppendData("f", 1, false); |
| 15848 | 15853 |
| 15849 base::RunLoop().RunUntilIdle(); | 15854 base::RunLoop().RunUntilIdle(); |
| 15850 upload_data_stream.AppendData("oo", 2, true); | 15855 upload_data_stream.AppendData("oo", 2, true); |
| 15851 | 15856 |
| 15852 EXPECT_EQ(OK, callback.WaitForResult()); | 15857 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 15853 | 15858 |
| 15854 std::string response_data; | 15859 std::string response_data; |
| 15855 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 15860 EXPECT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 15856 | 15861 |
| 15857 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | 15862 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
| 15858 trans->GetTotalSentBytes()); | 15863 trans->GetTotalSentBytes()); |
| 15859 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | 15864 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
| 15860 trans->GetTotalReceivedBytes()); | 15865 trans->GetTotalReceivedBytes()); |
| 15861 } | 15866 } |
| 15862 | 15867 |
| 15863 TEST_P(HttpNetworkTransactionTest, EnableNPN) { | 15868 TEST_P(HttpNetworkTransactionTest, EnableNPN) { |
| 15864 session_deps_.enable_npn = true; | 15869 session_deps_.enable_npn = true; |
| 15865 | 15870 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15923 base::RunLoop().RunUntilIdle(); | 15928 base::RunLoop().RunUntilIdle(); |
| 15924 | 15929 |
| 15925 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); | 15930 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); |
| 15926 HttpRequestHeaders headers; | 15931 HttpRequestHeaders headers; |
| 15927 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); | 15932 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); |
| 15928 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); | 15933 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); |
| 15929 } | 15934 } |
| 15930 #endif // !defined(OS_IOS) | 15935 #endif // !defined(OS_IOS) |
| 15931 | 15936 |
| 15932 } // namespace net | 15937 } // namespace net |
| OLD | NEW |