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 <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 1566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1577 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1577 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1578 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1578 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1579 | 1579 |
1580 TestCompletionCallback callback; | 1580 TestCompletionCallback callback; |
1581 | 1581 |
1582 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1582 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1583 EXPECT_EQ(ERR_IO_PENDING, rv); | 1583 EXPECT_EQ(ERR_IO_PENDING, rv); |
1584 | 1584 |
1585 rv = callback.WaitForResult(); | 1585 rv = callback.WaitForResult(); |
1586 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 1586 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
1587 | |
1588 const HttpResponseInfo* response = trans->GetResponseInfo(); | |
1589 EXPECT_TRUE(response == NULL); | |
1590 } | 1587 } |
1591 | 1588 |
1592 // What do various browsers do when the server closes a non-keepalive | 1589 // What do various browsers do when the server closes a non-keepalive |
1593 // connection without sending any response header or body? | 1590 // connection without sending any response header or body? |
1594 // | 1591 // |
1595 // IE7: error page | 1592 // IE7: error page |
1596 // Safari 3.1.2 (Windows): error page | 1593 // Safari 3.1.2 (Windows): error page |
1597 // Firefox 3.0.1: blank page | 1594 // Firefox 3.0.1: blank page |
1598 // Opera 9.52: after five attempts, blank page | 1595 // Opera 9.52: after five attempts, blank page |
1599 // Us with WinHTTP: error page (ERR_INVALID_RESPONSE) | 1596 // Us with WinHTTP: error page (ERR_INVALID_RESPONSE) |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1638 | 1635 |
1639 TestCompletionCallback callback; | 1636 TestCompletionCallback callback; |
1640 | 1637 |
1641 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1638 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1642 EXPECT_EQ(ERR_IO_PENDING, rv); | 1639 EXPECT_EQ(ERR_IO_PENDING, rv); |
1643 base::MessageLoop::current()->RunUntilIdle(); | 1640 base::MessageLoop::current()->RunUntilIdle(); |
1644 | 1641 |
1645 // Should have deferred for network start. | 1642 // Should have deferred for network start. |
1646 EXPECT_TRUE(net_start_handler.observed_before_network_start()); | 1643 EXPECT_TRUE(net_start_handler.observed_before_network_start()); |
1647 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); | 1644 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); |
1648 EXPECT_TRUE(trans->GetResponseInfo() == NULL); | |
1649 | 1645 |
1650 trans->ResumeNetworkStart(); | 1646 trans->ResumeNetworkStart(); |
1651 rv = callback.WaitForResult(); | 1647 rv = callback.WaitForResult(); |
1652 EXPECT_EQ(OK, rv); | 1648 EXPECT_EQ(OK, rv); |
1653 EXPECT_TRUE(trans->GetResponseInfo() != NULL); | 1649 EXPECT_TRUE(trans->GetResponseInfo() != NULL); |
1654 | 1650 |
1655 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); | 1651 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); |
1656 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); | 1652 rv = trans->Read(io_buf.get(), io_buf->size(), callback.callback()); |
1657 if (rv == ERR_IO_PENDING) | 1653 if (rv == ERR_IO_PENDING) |
1658 rv = callback.WaitForResult(); | 1654 rv = callback.WaitForResult(); |
(...skipping 20 matching lines...) Expand all Loading... |
1679 | 1675 |
1680 TestCompletionCallback callback; | 1676 TestCompletionCallback callback; |
1681 | 1677 |
1682 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1678 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1683 EXPECT_EQ(ERR_IO_PENDING, rv); | 1679 EXPECT_EQ(ERR_IO_PENDING, rv); |
1684 base::MessageLoop::current()->RunUntilIdle(); | 1680 base::MessageLoop::current()->RunUntilIdle(); |
1685 | 1681 |
1686 // Should have deferred for network start. | 1682 // Should have deferred for network start. |
1687 EXPECT_TRUE(net_start_handler.observed_before_network_start()); | 1683 EXPECT_TRUE(net_start_handler.observed_before_network_start()); |
1688 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); | 1684 EXPECT_EQ(LOAD_STATE_WAITING_FOR_DELEGATE, trans->GetLoadState()); |
1689 EXPECT_TRUE(trans->GetResponseInfo() == NULL); | |
1690 } | 1685 } |
1691 | 1686 |
1692 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression | 1687 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression |
1693 // tests. There was a bug causing HttpNetworkTransaction to hang in the | 1688 // tests. There was a bug causing HttpNetworkTransaction to hang in the |
1694 // destructor in such situations. | 1689 // destructor in such situations. |
1695 // See http://crbug.com/154712 and http://crbug.com/156609. | 1690 // See http://crbug.com/154712 and http://crbug.com/156609. |
1696 TEST_P(HttpNetworkTransactionTest, KeepAliveEarlyClose) { | 1691 TEST_P(HttpNetworkTransactionTest, KeepAliveEarlyClose) { |
1697 HttpRequestInfo request; | 1692 HttpRequestInfo request; |
1698 request.method = "GET"; | 1693 request.method = "GET"; |
1699 request.url = GURL("http://www.example.org/"); | 1694 request.url = GURL("http://www.example.org/"); |
(...skipping 3296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4996 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 4991 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
4997 session_deps_.socket_factory->AddSocketDataProvider(&data); | 4992 session_deps_.socket_factory->AddSocketDataProvider(&data); |
4998 | 4993 |
4999 TestCompletionCallback callback; | 4994 TestCompletionCallback callback; |
5000 | 4995 |
5001 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4996 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5002 EXPECT_EQ(ERR_IO_PENDING, rv); | 4997 EXPECT_EQ(ERR_IO_PENDING, rv); |
5003 | 4998 |
5004 rv = callback.WaitForResult(); | 4999 rv = callback.WaitForResult(); |
5005 EXPECT_EQ(ERR_RESPONSE_HEADERS_TOO_BIG, rv); | 5000 EXPECT_EQ(ERR_RESPONSE_HEADERS_TOO_BIG, rv); |
5006 | |
5007 const HttpResponseInfo* response = trans->GetResponseInfo(); | |
5008 EXPECT_TRUE(response == NULL); | |
5009 } | 5001 } |
5010 | 5002 |
5011 // Make sure that we don't try to reuse a TCPClientSocket when failing to | 5003 // Make sure that we don't try to reuse a TCPClientSocket when failing to |
5012 // establish tunnel. | 5004 // establish tunnel. |
5013 // http://code.google.com/p/chromium/issues/detail?id=3772 | 5005 // http://code.google.com/p/chromium/issues/detail?id=3772 |
5014 TEST_P(HttpNetworkTransactionTest, | 5006 TEST_P(HttpNetworkTransactionTest, |
5015 DontRecycleTransportSocketForSSLTunnel) { | 5007 DontRecycleTransportSocketForSSLTunnel) { |
5016 HttpRequestInfo request; | 5008 HttpRequestInfo request; |
5017 request.method = "GET"; | 5009 request.method = "GET"; |
5018 request.url = GURL("https://www.example.org/"); | 5010 request.url = GURL("https://www.example.org/"); |
(...skipping 29 matching lines...) Expand all Loading... |
5048 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5040 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
5049 | 5041 |
5050 TestCompletionCallback callback1; | 5042 TestCompletionCallback callback1; |
5051 | 5043 |
5052 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5044 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
5053 EXPECT_EQ(ERR_IO_PENDING, rv); | 5045 EXPECT_EQ(ERR_IO_PENDING, rv); |
5054 | 5046 |
5055 rv = callback1.WaitForResult(); | 5047 rv = callback1.WaitForResult(); |
5056 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 5048 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
5057 | 5049 |
5058 const HttpResponseInfo* response = trans->GetResponseInfo(); | |
5059 EXPECT_TRUE(response == NULL); | |
5060 | |
5061 // Empty the current queue. This is necessary because idle sockets are | 5050 // Empty the current queue. This is necessary because idle sockets are |
5062 // added to the connection pool asynchronously with a PostTask. | 5051 // added to the connection pool asynchronously with a PostTask. |
5063 base::MessageLoop::current()->RunUntilIdle(); | 5052 base::MessageLoop::current()->RunUntilIdle(); |
5064 | 5053 |
5065 // We now check to make sure the TCPClientSocket was not added back to | 5054 // We now check to make sure the TCPClientSocket was not added back to |
5066 // the pool. | 5055 // the pool. |
5067 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 5056 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
5068 trans.reset(); | 5057 trans.reset(); |
5069 base::MessageLoop::current()->RunUntilIdle(); | 5058 base::MessageLoop::current()->RunUntilIdle(); |
5070 // Make sure that the socket didn't get recycled after calling the destructor. | 5059 // Make sure that the socket didn't get recycled after calling the destructor. |
(...skipping 3456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8527 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8516 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8528 | 8517 |
8529 TestCompletionCallback callback; | 8518 TestCompletionCallback callback; |
8530 | 8519 |
8531 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8520 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8532 EXPECT_EQ(ERR_IO_PENDING, rv); | 8521 EXPECT_EQ(ERR_IO_PENDING, rv); |
8533 | 8522 |
8534 rv = callback.WaitForResult(); | 8523 rv = callback.WaitForResult(); |
8535 EXPECT_EQ(ERR_ACCESS_DENIED, rv); | 8524 EXPECT_EQ(ERR_ACCESS_DENIED, rv); |
8536 | 8525 |
8537 const HttpResponseInfo* response = trans->GetResponseInfo(); | |
8538 EXPECT_FALSE(response); | |
8539 | |
8540 base::DeleteFile(temp_file, false); | 8526 base::DeleteFile(temp_file, false); |
8541 } | 8527 } |
8542 | 8528 |
8543 TEST_P(HttpNetworkTransactionTest, CancelDuringInitRequestBody) { | 8529 TEST_P(HttpNetworkTransactionTest, CancelDuringInitRequestBody) { |
8544 class FakeUploadElementReader : public UploadElementReader { | 8530 class FakeUploadElementReader : public UploadElementReader { |
8545 public: | 8531 public: |
8546 FakeUploadElementReader() {} | 8532 FakeUploadElementReader() {} |
8547 ~FakeUploadElementReader() override {} | 8533 ~FakeUploadElementReader() override {} |
8548 | 8534 |
8549 const CompletionCallback& callback() const { return callback_; } | 8535 const CompletionCallback& callback() const { return callback_; } |
(...skipping 1629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10179 } else { | 10165 } else { |
10180 rv = trans.RestartWithAuth( | 10166 rv = trans.RestartWithAuth( |
10181 AuthCredentials(kFoo, kBar), callback.callback()); | 10167 AuthCredentials(kFoo, kBar), callback.callback()); |
10182 } | 10168 } |
10183 if (rv == ERR_IO_PENDING) | 10169 if (rv == ERR_IO_PENDING) |
10184 rv = callback.WaitForResult(); | 10170 rv = callback.WaitForResult(); |
10185 | 10171 |
10186 // Compare results with expected data. | 10172 // Compare results with expected data. |
10187 EXPECT_EQ(read_write_round.expected_rv, rv); | 10173 EXPECT_EQ(read_write_round.expected_rv, rv); |
10188 const HttpResponseInfo* response = trans.GetResponseInfo(); | 10174 const HttpResponseInfo* response = trans.GetResponseInfo(); |
10189 if (read_write_round.expected_rv == OK) { | 10175 if (read_write_round.expected_rv != OK) { |
10190 ASSERT_TRUE(response != NULL); | |
10191 } else { | |
10192 EXPECT_TRUE(response == NULL); | |
10193 EXPECT_EQ(round + 1, test_config.num_auth_rounds); | 10176 EXPECT_EQ(round + 1, test_config.num_auth_rounds); |
10194 continue; | 10177 continue; |
10195 } | 10178 } |
10196 if (round + 1 < test_config.num_auth_rounds) { | 10179 if (round + 1 < test_config.num_auth_rounds) { |
10197 EXPECT_FALSE(response->auth_challenge.get() == NULL); | 10180 EXPECT_FALSE(response->auth_challenge.get() == NULL); |
10198 } else { | 10181 } else { |
10199 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 10182 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
10200 } | 10183 } |
10201 } | 10184 } |
10202 } | 10185 } |
(...skipping 2526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12729 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12712 session_deps_.socket_factory->AddSocketDataProvider(&data); |
12730 | 12713 |
12731 TestCompletionCallback callback; | 12714 TestCompletionCallback callback; |
12732 | 12715 |
12733 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12716 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
12734 EXPECT_EQ(ERR_IO_PENDING, rv); | 12717 EXPECT_EQ(ERR_IO_PENDING, rv); |
12735 | 12718 |
12736 rv = callback.WaitForResult(); | 12719 rv = callback.WaitForResult(); |
12737 EXPECT_EQ(ERR_CONNECTION_REFUSED, rv); | 12720 EXPECT_EQ(ERR_CONNECTION_REFUSED, rv); |
12738 | 12721 |
12739 EXPECT_EQ(NULL, trans->GetResponseInfo()); | |
12740 | |
12741 // We don't care whether this succeeds or fails, but it shouldn't crash. | 12722 // We don't care whether this succeeds or fails, but it shouldn't crash. |
12742 HttpRequestHeaders request_headers; | 12723 HttpRequestHeaders request_headers; |
12743 trans->GetFullRequestHeaders(&request_headers); | 12724 trans->GetFullRequestHeaders(&request_headers); |
12744 | 12725 |
12745 ConnectionAttempts attempts; | 12726 ConnectionAttempts attempts; |
12746 trans->GetConnectionAttempts(&attempts); | 12727 trans->GetConnectionAttempts(&attempts); |
12747 ASSERT_EQ(1u, attempts.size()); | 12728 ASSERT_EQ(1u, attempts.size()); |
12748 EXPECT_EQ(ERR_CONNECTION_REFUSED, attempts[0].result); | 12729 EXPECT_EQ(ERR_CONNECTION_REFUSED, attempts[0].result); |
12749 } | 12730 } |
12750 | 12731 |
(...skipping 13 matching lines...) Expand all Loading... |
12764 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12745 session_deps_.socket_factory->AddSocketDataProvider(&data); |
12765 | 12746 |
12766 TestCompletionCallback callback; | 12747 TestCompletionCallback callback; |
12767 | 12748 |
12768 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12749 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
12769 EXPECT_EQ(ERR_IO_PENDING, rv); | 12750 EXPECT_EQ(ERR_IO_PENDING, rv); |
12770 | 12751 |
12771 rv = callback.WaitForResult(); | 12752 rv = callback.WaitForResult(); |
12772 EXPECT_EQ(ERR_CONNECTION_REFUSED, rv); | 12753 EXPECT_EQ(ERR_CONNECTION_REFUSED, rv); |
12773 | 12754 |
12774 EXPECT_EQ(NULL, trans->GetResponseInfo()); | |
12775 | |
12776 // We don't care whether this succeeds or fails, but it shouldn't crash. | 12755 // We don't care whether this succeeds or fails, but it shouldn't crash. |
12777 HttpRequestHeaders request_headers; | 12756 HttpRequestHeaders request_headers; |
12778 trans->GetFullRequestHeaders(&request_headers); | 12757 trans->GetFullRequestHeaders(&request_headers); |
12779 | 12758 |
12780 ConnectionAttempts attempts; | 12759 ConnectionAttempts attempts; |
12781 trans->GetConnectionAttempts(&attempts); | 12760 trans->GetConnectionAttempts(&attempts); |
12782 ASSERT_EQ(1u, attempts.size()); | 12761 ASSERT_EQ(1u, attempts.size()); |
12783 EXPECT_EQ(ERR_CONNECTION_REFUSED, attempts[0].result); | 12762 EXPECT_EQ(ERR_CONNECTION_REFUSED, attempts[0].result); |
12784 } | 12763 } |
12785 | 12764 |
(...skipping 19 matching lines...) Expand all Loading... |
12805 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12784 session_deps_.socket_factory->AddSocketDataProvider(&data); |
12806 | 12785 |
12807 TestCompletionCallback callback; | 12786 TestCompletionCallback callback; |
12808 | 12787 |
12809 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12788 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
12810 EXPECT_EQ(ERR_IO_PENDING, rv); | 12789 EXPECT_EQ(ERR_IO_PENDING, rv); |
12811 | 12790 |
12812 rv = callback.WaitForResult(); | 12791 rv = callback.WaitForResult(); |
12813 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 12792 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
12814 | 12793 |
12815 EXPECT_EQ(NULL, trans->GetResponseInfo()); | |
12816 | |
12817 HttpRequestHeaders request_headers; | 12794 HttpRequestHeaders request_headers; |
12818 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 12795 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
12819 EXPECT_TRUE(request_headers.HasHeader("Host")); | 12796 EXPECT_TRUE(request_headers.HasHeader("Host")); |
12820 } | 12797 } |
12821 | 12798 |
12822 TEST_P(HttpNetworkTransactionTest, HttpAsyncWriteError) { | 12799 TEST_P(HttpNetworkTransactionTest, HttpAsyncWriteError) { |
12823 HttpRequestInfo request; | 12800 HttpRequestInfo request; |
12824 request.method = "GET"; | 12801 request.method = "GET"; |
12825 request.url = GURL("http://www.example.org/"); | 12802 request.url = GURL("http://www.example.org/"); |
12826 request.load_flags = 0; | 12803 request.load_flags = 0; |
(...skipping 14 matching lines...) Expand all Loading... |
12841 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12818 session_deps_.socket_factory->AddSocketDataProvider(&data); |
12842 | 12819 |
12843 TestCompletionCallback callback; | 12820 TestCompletionCallback callback; |
12844 | 12821 |
12845 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12822 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
12846 EXPECT_EQ(ERR_IO_PENDING, rv); | 12823 EXPECT_EQ(ERR_IO_PENDING, rv); |
12847 | 12824 |
12848 rv = callback.WaitForResult(); | 12825 rv = callback.WaitForResult(); |
12849 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 12826 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
12850 | 12827 |
12851 EXPECT_EQ(NULL, trans->GetResponseInfo()); | |
12852 | |
12853 HttpRequestHeaders request_headers; | 12828 HttpRequestHeaders request_headers; |
12854 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 12829 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
12855 EXPECT_TRUE(request_headers.HasHeader("Host")); | 12830 EXPECT_TRUE(request_headers.HasHeader("Host")); |
12856 } | 12831 } |
12857 | 12832 |
12858 TEST_P(HttpNetworkTransactionTest, HttpSyncReadError) { | 12833 TEST_P(HttpNetworkTransactionTest, HttpSyncReadError) { |
12859 HttpRequestInfo request; | 12834 HttpRequestInfo request; |
12860 request.method = "GET"; | 12835 request.method = "GET"; |
12861 request.url = GURL("http://www.example.org/"); | 12836 request.url = GURL("http://www.example.org/"); |
12862 request.load_flags = 0; | 12837 request.load_flags = 0; |
(...skipping 17 matching lines...) Expand all Loading... |
12880 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12855 session_deps_.socket_factory->AddSocketDataProvider(&data); |
12881 | 12856 |
12882 TestCompletionCallback callback; | 12857 TestCompletionCallback callback; |
12883 | 12858 |
12884 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12859 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
12885 EXPECT_EQ(ERR_IO_PENDING, rv); | 12860 EXPECT_EQ(ERR_IO_PENDING, rv); |
12886 | 12861 |
12887 rv = callback.WaitForResult(); | 12862 rv = callback.WaitForResult(); |
12888 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 12863 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
12889 | 12864 |
12890 EXPECT_EQ(NULL, trans->GetResponseInfo()); | |
12891 | |
12892 HttpRequestHeaders request_headers; | 12865 HttpRequestHeaders request_headers; |
12893 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 12866 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
12894 EXPECT_TRUE(request_headers.HasHeader("Host")); | 12867 EXPECT_TRUE(request_headers.HasHeader("Host")); |
12895 } | 12868 } |
12896 | 12869 |
12897 TEST_P(HttpNetworkTransactionTest, HttpAsyncReadError) { | 12870 TEST_P(HttpNetworkTransactionTest, HttpAsyncReadError) { |
12898 HttpRequestInfo request; | 12871 HttpRequestInfo request; |
12899 request.method = "GET"; | 12872 request.method = "GET"; |
12900 request.url = GURL("http://www.example.org/"); | 12873 request.url = GURL("http://www.example.org/"); |
12901 request.load_flags = 0; | 12874 request.load_flags = 0; |
(...skipping 17 matching lines...) Expand all Loading... |
12919 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12892 session_deps_.socket_factory->AddSocketDataProvider(&data); |
12920 | 12893 |
12921 TestCompletionCallback callback; | 12894 TestCompletionCallback callback; |
12922 | 12895 |
12923 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12896 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
12924 EXPECT_EQ(ERR_IO_PENDING, rv); | 12897 EXPECT_EQ(ERR_IO_PENDING, rv); |
12925 | 12898 |
12926 rv = callback.WaitForResult(); | 12899 rv = callback.WaitForResult(); |
12927 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 12900 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
12928 | 12901 |
12929 EXPECT_EQ(NULL, trans->GetResponseInfo()); | |
12930 | |
12931 HttpRequestHeaders request_headers; | 12902 HttpRequestHeaders request_headers; |
12932 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 12903 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
12933 EXPECT_TRUE(request_headers.HasHeader("Host")); | 12904 EXPECT_TRUE(request_headers.HasHeader("Host")); |
12934 } | 12905 } |
12935 | 12906 |
12936 TEST_P(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { | 12907 TEST_P(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { |
12937 HttpRequestInfo request; | 12908 HttpRequestInfo request; |
12938 request.method = "GET"; | 12909 request.method = "GET"; |
12939 request.url = GURL("http://www.example.org/"); | 12910 request.url = GURL("http://www.example.org/"); |
12940 request.load_flags = 0; | 12911 request.load_flags = 0; |
(...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13949 arraysize(data_writes)); | 13920 arraysize(data_writes)); |
13950 session_deps_.socket_factory->AddSocketDataProvider(&data); | 13921 session_deps_.socket_factory->AddSocketDataProvider(&data); |
13951 | 13922 |
13952 TestCompletionCallback callback; | 13923 TestCompletionCallback callback; |
13953 | 13924 |
13954 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13925 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
13955 EXPECT_EQ(ERR_IO_PENDING, rv); | 13926 EXPECT_EQ(ERR_IO_PENDING, rv); |
13956 | 13927 |
13957 rv = callback.WaitForResult(); | 13928 rv = callback.WaitForResult(); |
13958 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 13929 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
13959 | |
13960 const HttpResponseInfo* response = trans->GetResponseInfo(); | |
13961 EXPECT_TRUE(response == NULL); | |
13962 } | 13930 } |
13963 | 13931 |
13964 TEST_P(HttpNetworkTransactionTest, | 13932 TEST_P(HttpNetworkTransactionTest, |
13965 PostIgnoresNonErrorResponseAfterResetAnd100) { | 13933 PostIgnoresNonErrorResponseAfterResetAnd100) { |
13966 ScopedVector<UploadElementReader> element_readers; | 13934 ScopedVector<UploadElementReader> element_readers; |
13967 element_readers.push_back(new UploadBytesElementReader("foo", 3)); | 13935 element_readers.push_back(new UploadBytesElementReader("foo", 3)); |
13968 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); | 13936 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); |
13969 | 13937 |
13970 HttpRequestInfo request; | 13938 HttpRequestInfo request; |
13971 request.method = "POST"; | 13939 request.method = "POST"; |
(...skipping 24 matching lines...) Expand all Loading... |
13996 arraysize(data_writes)); | 13964 arraysize(data_writes)); |
13997 session_deps_.socket_factory->AddSocketDataProvider(&data); | 13965 session_deps_.socket_factory->AddSocketDataProvider(&data); |
13998 | 13966 |
13999 TestCompletionCallback callback; | 13967 TestCompletionCallback callback; |
14000 | 13968 |
14001 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13969 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14002 EXPECT_EQ(ERR_IO_PENDING, rv); | 13970 EXPECT_EQ(ERR_IO_PENDING, rv); |
14003 | 13971 |
14004 rv = callback.WaitForResult(); | 13972 rv = callback.WaitForResult(); |
14005 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 13973 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
14006 | |
14007 const HttpResponseInfo* response = trans->GetResponseInfo(); | |
14008 EXPECT_TRUE(response == NULL); | |
14009 } | 13974 } |
14010 | 13975 |
14011 TEST_P(HttpNetworkTransactionTest, PostIgnoresHttp09ResponseAfterReset) { | 13976 TEST_P(HttpNetworkTransactionTest, PostIgnoresHttp09ResponseAfterReset) { |
14012 ScopedVector<UploadElementReader> element_readers; | 13977 ScopedVector<UploadElementReader> element_readers; |
14013 element_readers.push_back(new UploadBytesElementReader("foo", 3)); | 13978 element_readers.push_back(new UploadBytesElementReader("foo", 3)); |
14014 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); | 13979 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); |
14015 | 13980 |
14016 HttpRequestInfo request; | 13981 HttpRequestInfo request; |
14017 request.method = "POST"; | 13982 request.method = "POST"; |
14018 request.url = GURL("http://www.foo.com/"); | 13983 request.url = GURL("http://www.foo.com/"); |
(...skipping 20 matching lines...) Expand all Loading... |
14039 arraysize(data_writes)); | 14004 arraysize(data_writes)); |
14040 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14005 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14041 | 14006 |
14042 TestCompletionCallback callback; | 14007 TestCompletionCallback callback; |
14043 | 14008 |
14044 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14009 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14045 EXPECT_EQ(ERR_IO_PENDING, rv); | 14010 EXPECT_EQ(ERR_IO_PENDING, rv); |
14046 | 14011 |
14047 rv = callback.WaitForResult(); | 14012 rv = callback.WaitForResult(); |
14048 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 14013 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
14049 | |
14050 const HttpResponseInfo* response = trans->GetResponseInfo(); | |
14051 EXPECT_TRUE(response == NULL); | |
14052 } | 14014 } |
14053 | 14015 |
14054 TEST_P(HttpNetworkTransactionTest, PostIgnoresPartial400HeadersAfterReset) { | 14016 TEST_P(HttpNetworkTransactionTest, PostIgnoresPartial400HeadersAfterReset) { |
14055 ScopedVector<UploadElementReader> element_readers; | 14017 ScopedVector<UploadElementReader> element_readers; |
14056 element_readers.push_back(new UploadBytesElementReader("foo", 3)); | 14018 element_readers.push_back(new UploadBytesElementReader("foo", 3)); |
14057 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); | 14019 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); |
14058 | 14020 |
14059 HttpRequestInfo request; | 14021 HttpRequestInfo request; |
14060 request.method = "POST"; | 14022 request.method = "POST"; |
14061 request.url = GURL("http://www.foo.com/"); | 14023 request.url = GURL("http://www.foo.com/"); |
(...skipping 20 matching lines...) Expand all Loading... |
14082 arraysize(data_writes)); | 14044 arraysize(data_writes)); |
14083 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14045 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14084 | 14046 |
14085 TestCompletionCallback callback; | 14047 TestCompletionCallback callback; |
14086 | 14048 |
14087 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 14049 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
14088 EXPECT_EQ(ERR_IO_PENDING, rv); | 14050 EXPECT_EQ(ERR_IO_PENDING, rv); |
14089 | 14051 |
14090 rv = callback.WaitForResult(); | 14052 rv = callback.WaitForResult(); |
14091 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 14053 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
14092 | |
14093 const HttpResponseInfo* response = trans->GetResponseInfo(); | |
14094 EXPECT_TRUE(response == NULL); | |
14095 } | 14054 } |
14096 | 14055 |
14097 // Verify that proxy headers are not sent to the destination server when | 14056 // Verify that proxy headers are not sent to the destination server when |
14098 // establishing a tunnel for a secure WebSocket connection. | 14057 // establishing a tunnel for a secure WebSocket connection. |
14099 TEST_P(HttpNetworkTransactionTest, ProxyHeadersNotSentOverWssTunnel) { | 14058 TEST_P(HttpNetworkTransactionTest, ProxyHeadersNotSentOverWssTunnel) { |
14100 HttpRequestInfo request; | 14059 HttpRequestInfo request; |
14101 request.method = "GET"; | 14060 request.method = "GET"; |
14102 request.url = GURL("wss://www.example.org/"); | 14061 request.url = GURL("wss://www.example.org/"); |
14103 AddWebSocketHeaders(&request.extra_headers); | 14062 AddWebSocketHeaders(&request.extra_headers); |
14104 | 14063 |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14272 ASSERT_TRUE(response); | 14231 ASSERT_TRUE(response); |
14273 ASSERT_TRUE(response->headers.get()); | 14232 ASSERT_TRUE(response->headers.get()); |
14274 | 14233 |
14275 EXPECT_EQ(101, response->headers->response_code()); | 14234 EXPECT_EQ(101, response->headers->response_code()); |
14276 | 14235 |
14277 trans.reset(); | 14236 trans.reset(); |
14278 session->CloseAllConnections(); | 14237 session->CloseAllConnections(); |
14279 } | 14238 } |
14280 | 14239 |
14281 } // namespace net | 14240 } // namespace net |
OLD | NEW |