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 |
11 #include <limits> | 11 #include <limits> |
12 #include <memory> | |
13 #include <set> | 12 #include <set> |
14 #include <string> | 13 #include <string> |
15 #include <utility> | 14 #include <utility> |
16 #include <vector> | 15 #include <vector> |
17 | 16 |
18 #include "base/compiler_specific.h" | 17 #include "base/compiler_specific.h" |
19 #include "base/files/file_path.h" | 18 #include "base/files/file_path.h" |
20 #include "base/files/file_util.h" | 19 #include "base/files/file_util.h" |
21 #include "base/json/json_writer.h" | 20 #include "base/json/json_writer.h" |
22 #include "base/logging.h" | 21 #include "base/logging.h" |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 last_priority_set_(IDLE) {} | 120 last_priority_set_(IDLE) {} |
122 | 121 |
123 ~TestNetworkStreamThrottler() override { | 122 ~TestNetworkStreamThrottler() override { |
124 EXPECT_TRUE(outstanding_throttles_.empty()); | 123 EXPECT_TRUE(outstanding_throttles_.empty()); |
125 } | 124 } |
126 | 125 |
127 // NetworkThrottleManager | 126 // NetworkThrottleManager |
128 std::unique_ptr<Throttle> CreateThrottle(ThrottleDelegate* delegate, | 127 std::unique_ptr<Throttle> CreateThrottle(ThrottleDelegate* delegate, |
129 RequestPriority priority, | 128 RequestPriority priority, |
130 bool ignore_limits) override { | 129 bool ignore_limits) override { |
131 std::unique_ptr<TestThrottle> test_throttle( | 130 auto test_throttle = |
132 new TestThrottle(throttle_new_requests_, delegate, this)); | 131 base::MakeUnique<TestThrottle>(throttle_new_requests_, delegate, this); |
133 outstanding_throttles_.insert(test_throttle.get()); | 132 outstanding_throttles_.insert(test_throttle.get()); |
134 return std::move(test_throttle); | 133 return std::move(test_throttle); |
135 } | 134 } |
136 | 135 |
137 void UnthrottleAllRequests() { | 136 void UnthrottleAllRequests() { |
138 std::set<TestThrottle*> outstanding_throttles_copy(outstanding_throttles_); | 137 std::set<TestThrottle*> outstanding_throttles_copy(outstanding_throttles_); |
139 for (auto* throttle : outstanding_throttles_copy) { | 138 for (auto* throttle : outstanding_throttles_copy) { |
140 if (throttle->IsBlocked()) | 139 if (throttle->IsBlocked()) |
141 throttle->Unthrottle(); | 140 throttle->Unthrottle(); |
142 } | 141 } |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 } | 360 } |
362 | 361 |
363 // Note that the pointer written into |*throttler| will only be valid | 362 // Note that the pointer written into |*throttler| will only be valid |
364 // for the lifetime of the returned HttpNetworkSession. | 363 // for the lifetime of the returned HttpNetworkSession. |
365 std::unique_ptr<HttpNetworkSession> CreateSessionWithThrottler( | 364 std::unique_ptr<HttpNetworkSession> CreateSessionWithThrottler( |
366 SpdySessionDependencies* session_deps, | 365 SpdySessionDependencies* session_deps, |
367 TestNetworkStreamThrottler** throttler) { | 366 TestNetworkStreamThrottler** throttler) { |
368 std::unique_ptr<HttpNetworkSession> session( | 367 std::unique_ptr<HttpNetworkSession> session( |
369 SpdySessionDependencies::SpdyCreateSession(session_deps)); | 368 SpdySessionDependencies::SpdyCreateSession(session_deps)); |
370 | 369 |
371 std::unique_ptr<TestNetworkStreamThrottler> owned_throttler( | 370 auto owned_throttler = base::MakeUnique<TestNetworkStreamThrottler>(); |
372 new TestNetworkStreamThrottler); | |
373 *throttler = owned_throttler.get(); | 371 *throttler = owned_throttler.get(); |
374 | 372 |
375 HttpNetworkSessionPeer peer(session.get()); | 373 HttpNetworkSessionPeer peer(session.get()); |
376 peer.SetNetworkStreamThrottler(std::move(owned_throttler)); | 374 peer.SetNetworkStreamThrottler(std::move(owned_throttler)); |
377 | 375 |
378 return session; | 376 return session; |
379 } | 377 } |
380 | 378 |
381 } // namespace | 379 } // namespace |
382 | 380 |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
844 MockRead data_reads[] = { | 842 MockRead data_reads[] = { |
845 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), | 843 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
846 }; | 844 }; |
847 | 845 |
848 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); | 846 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); |
849 session_deps_.socket_factory->AddSocketDataProvider(&data); | 847 session_deps_.socket_factory->AddSocketDataProvider(&data); |
850 | 848 |
851 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 849 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
852 | 850 |
853 HttpRequestInfo request; | 851 HttpRequestInfo request; |
854 std::unique_ptr<HttpTransaction> trans( | 852 auto trans = |
855 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 853 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
856 | 854 |
857 request.method = "GET"; | 855 request.method = "GET"; |
858 request.url = GURL("http://www.example.com:2000/"); | 856 request.url = GURL("http://www.example.com:2000/"); |
859 TestCompletionCallback callback; | 857 TestCompletionCallback callback; |
860 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 858 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
861 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_INVALID_HTTP_RESPONSE)); | 859 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_INVALID_HTTP_RESPONSE)); |
862 } | 860 } |
863 | 861 |
864 // Response with no status line, and a weird port. Option to allow weird ports | 862 // Response with no status line, and a weird port. Option to allow weird ports |
865 // enabled. | 863 // enabled. |
866 TEST_F(HttpNetworkTransactionTest, SimpleGETNoHeadersWeirdPortAllowed) { | 864 TEST_F(HttpNetworkTransactionTest, SimpleGETNoHeadersWeirdPortAllowed) { |
867 MockRead data_reads[] = { | 865 MockRead data_reads[] = { |
868 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), | 866 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
869 }; | 867 }; |
870 | 868 |
871 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); | 869 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); |
872 session_deps_.socket_factory->AddSocketDataProvider(&data); | 870 session_deps_.socket_factory->AddSocketDataProvider(&data); |
873 session_deps_.http_09_on_non_default_ports_enabled = true; | 871 session_deps_.http_09_on_non_default_ports_enabled = true; |
874 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 872 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
875 | 873 |
876 HttpRequestInfo request; | 874 HttpRequestInfo request; |
877 std::unique_ptr<HttpTransaction> trans( | 875 auto trans = |
878 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 876 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
879 | 877 |
880 request.method = "GET"; | 878 request.method = "GET"; |
881 request.url = GURL("http://www.example.com:2000/"); | 879 request.url = GURL("http://www.example.com:2000/"); |
882 TestCompletionCallback callback; | 880 TestCompletionCallback callback; |
883 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 881 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
884 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 882 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
885 | 883 |
886 const HttpResponseInfo* info = trans->GetResponseInfo(); | 884 const HttpResponseInfo* info = trans->GetResponseInfo(); |
887 ASSERT_TRUE(info->headers); | 885 ASSERT_TRUE(info->headers); |
888 EXPECT_EQ("HTTP/0.9 200 OK", info->headers->GetStatusLine()); | 886 EXPECT_EQ("HTTP/0.9 200 OK", info->headers->GetStatusLine()); |
(...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1799 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression | 1797 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression |
1800 // tests. There was a bug causing HttpNetworkTransaction to hang in the | 1798 // tests. There was a bug causing HttpNetworkTransaction to hang in the |
1801 // destructor in such situations. | 1799 // destructor in such situations. |
1802 // See http://crbug.com/154712 and http://crbug.com/156609. | 1800 // See http://crbug.com/154712 and http://crbug.com/156609. |
1803 TEST_F(HttpNetworkTransactionTest, KeepAliveEarlyClose) { | 1801 TEST_F(HttpNetworkTransactionTest, KeepAliveEarlyClose) { |
1804 HttpRequestInfo request; | 1802 HttpRequestInfo request; |
1805 request.method = "GET"; | 1803 request.method = "GET"; |
1806 request.url = GURL("http://www.example.org/"); | 1804 request.url = GURL("http://www.example.org/"); |
1807 | 1805 |
1808 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1806 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1809 std::unique_ptr<HttpNetworkTransaction> trans( | 1807 auto trans = |
1810 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1808 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
1811 | 1809 |
1812 MockRead data_reads[] = { | 1810 MockRead data_reads[] = { |
1813 MockRead("HTTP/1.0 200 OK\r\n"), | 1811 MockRead("HTTP/1.0 200 OK\r\n"), |
1814 MockRead("Connection: keep-alive\r\n"), | 1812 MockRead("Connection: keep-alive\r\n"), |
1815 MockRead("Content-Length: 100\r\n\r\n"), | 1813 MockRead("Content-Length: 100\r\n\r\n"), |
1816 MockRead("hello"), | 1814 MockRead("hello"), |
1817 MockRead(SYNCHRONOUS, 0), | 1815 MockRead(SYNCHRONOUS, 0), |
1818 }; | 1816 }; |
1819 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1817 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1820 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1818 session_deps_.socket_factory->AddSocketDataProvider(&data); |
(...skipping 18 matching lines...) Expand all Loading... |
1839 base::RunLoop().RunUntilIdle(); | 1837 base::RunLoop().RunUntilIdle(); |
1840 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1838 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
1841 } | 1839 } |
1842 | 1840 |
1843 TEST_F(HttpNetworkTransactionTest, KeepAliveEarlyClose2) { | 1841 TEST_F(HttpNetworkTransactionTest, KeepAliveEarlyClose2) { |
1844 HttpRequestInfo request; | 1842 HttpRequestInfo request; |
1845 request.method = "GET"; | 1843 request.method = "GET"; |
1846 request.url = GURL("http://www.example.org/"); | 1844 request.url = GURL("http://www.example.org/"); |
1847 | 1845 |
1848 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1846 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1849 std::unique_ptr<HttpNetworkTransaction> trans( | 1847 auto trans = |
1850 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1848 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
1851 | 1849 |
1852 MockRead data_reads[] = { | 1850 MockRead data_reads[] = { |
1853 MockRead("HTTP/1.0 200 OK\r\n"), | 1851 MockRead("HTTP/1.0 200 OK\r\n"), |
1854 MockRead("Connection: keep-alive\r\n"), | 1852 MockRead("Connection: keep-alive\r\n"), |
1855 MockRead("Content-Length: 100\r\n\r\n"), | 1853 MockRead("Content-Length: 100\r\n\r\n"), |
1856 MockRead(SYNCHRONOUS, 0), | 1854 MockRead(SYNCHRONOUS, 0), |
1857 }; | 1855 }; |
1858 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1856 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1859 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1857 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1860 | 1858 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1946 data.set_busy_before_sync_reads(true); | 1944 data.set_busy_before_sync_reads(true); |
1947 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1945 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1948 | 1946 |
1949 const int kNumUnreadBodies = arraysize(data_writes) - 1; | 1947 const int kNumUnreadBodies = arraysize(data_writes) - 1; |
1950 std::string response_lines[kNumUnreadBodies]; | 1948 std::string response_lines[kNumUnreadBodies]; |
1951 | 1949 |
1952 uint32_t first_socket_log_id = NetLogSource::kInvalidId; | 1950 uint32_t first_socket_log_id = NetLogSource::kInvalidId; |
1953 for (size_t i = 0; i < kNumUnreadBodies; ++i) { | 1951 for (size_t i = 0; i < kNumUnreadBodies; ++i) { |
1954 TestCompletionCallback callback; | 1952 TestCompletionCallback callback; |
1955 | 1953 |
1956 std::unique_ptr<HttpNetworkTransaction> trans( | 1954 auto trans = base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, |
1957 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1955 session.get()); |
1958 | 1956 |
1959 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 1957 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
1960 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 1958 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
1961 | 1959 |
1962 LoadTimingInfo load_timing_info; | 1960 LoadTimingInfo load_timing_info; |
1963 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 1961 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
1964 if (i == 0) { | 1962 if (i == 0) { |
1965 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); | 1963 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
1966 first_socket_log_id = load_timing_info.socket_log_id; | 1964 first_socket_log_id = load_timing_info.socket_log_id; |
1967 } else { | 1965 } else { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2046 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2044 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
2047 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2045 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
2048 data_writes2, arraysize(data_writes2)); | 2046 data_writes2, arraysize(data_writes2)); |
2049 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2047 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2050 | 2048 |
2051 TestCompletionCallback callback; | 2049 TestCompletionCallback callback; |
2052 HttpRequestInfo request1; | 2050 HttpRequestInfo request1; |
2053 request1.method = "HEAD"; | 2051 request1.method = "HEAD"; |
2054 request1.url = GURL("http://www.borked.com/"); | 2052 request1.url = GURL("http://www.borked.com/"); |
2055 | 2053 |
2056 std::unique_ptr<HttpNetworkTransaction> trans1( | 2054 auto trans1 = |
2057 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2055 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
2058 int rv = trans1->Start(&request1, callback.callback(), NetLogWithSource()); | 2056 int rv = trans1->Start(&request1, callback.callback(), NetLogWithSource()); |
2059 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 2057 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2060 | 2058 |
2061 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2059 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
2062 ASSERT_TRUE(response1); | 2060 ASSERT_TRUE(response1); |
2063 ASSERT_TRUE(response1->headers); | 2061 ASSERT_TRUE(response1->headers); |
2064 EXPECT_EQ(200, response1->headers->response_code()); | 2062 EXPECT_EQ(200, response1->headers->response_code()); |
2065 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2063 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
2066 | 2064 |
2067 std::string response_data1; | 2065 std::string response_data1; |
2068 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); | 2066 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
2069 EXPECT_EQ("", response_data1); | 2067 EXPECT_EQ("", response_data1); |
2070 // Deleting the transaction attempts to release the socket back into the | 2068 // Deleting the transaction attempts to release the socket back into the |
2071 // socket pool. | 2069 // socket pool. |
2072 trans1.reset(); | 2070 trans1.reset(); |
2073 | 2071 |
2074 HttpRequestInfo request2; | 2072 HttpRequestInfo request2; |
2075 request2.method = "GET"; | 2073 request2.method = "GET"; |
2076 request2.url = GURL("http://www.borked.com/foo"); | 2074 request2.url = GURL("http://www.borked.com/foo"); |
2077 | 2075 |
2078 std::unique_ptr<HttpNetworkTransaction> trans2( | 2076 auto trans2 = |
2079 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2077 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
2080 rv = trans2->Start(&request2, callback.callback(), NetLogWithSource()); | 2078 rv = trans2->Start(&request2, callback.callback(), NetLogWithSource()); |
2081 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 2079 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2082 | 2080 |
2083 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 2081 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
2084 ASSERT_TRUE(response2); | 2082 ASSERT_TRUE(response2); |
2085 ASSERT_TRUE(response2->headers); | 2083 ASSERT_TRUE(response2->headers); |
2086 EXPECT_EQ(200, response2->headers->response_code()); | 2084 EXPECT_EQ(200, response2->headers->response_code()); |
2087 | 2085 |
2088 std::string response_data2; | 2086 std::string response_data2; |
2089 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); | 2087 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2122 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2120 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
2123 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2121 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
2124 data_writes2, arraysize(data_writes2)); | 2122 data_writes2, arraysize(data_writes2)); |
2125 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2123 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2126 | 2124 |
2127 TestCompletionCallback callback; | 2125 TestCompletionCallback callback; |
2128 HttpRequestInfo request1; | 2126 HttpRequestInfo request1; |
2129 request1.method = "GET"; | 2127 request1.method = "GET"; |
2130 request1.url = GURL("http://www.borked.com/"); | 2128 request1.url = GURL("http://www.borked.com/"); |
2131 | 2129 |
2132 std::unique_ptr<HttpNetworkTransaction> trans1( | 2130 auto trans1 = |
2133 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2131 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
2134 int rv = trans1->Start(&request1, callback.callback(), NetLogWithSource()); | 2132 int rv = trans1->Start(&request1, callback.callback(), NetLogWithSource()); |
2135 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 2133 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2136 | 2134 |
2137 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2135 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
2138 ASSERT_TRUE(response1); | 2136 ASSERT_TRUE(response1); |
2139 ASSERT_TRUE(response1->headers); | 2137 ASSERT_TRUE(response1->headers); |
2140 EXPECT_EQ(200, response1->headers->response_code()); | 2138 EXPECT_EQ(200, response1->headers->response_code()); |
2141 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2139 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
2142 | 2140 |
2143 std::string response_data1; | 2141 std::string response_data1; |
2144 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); | 2142 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
2145 EXPECT_EQ("This server is borked.", response_data1); | 2143 EXPECT_EQ("This server is borked.", response_data1); |
2146 // Deleting the transaction attempts to release the socket back into the | 2144 // Deleting the transaction attempts to release the socket back into the |
2147 // socket pool. | 2145 // socket pool. |
2148 trans1.reset(); | 2146 trans1.reset(); |
2149 | 2147 |
2150 HttpRequestInfo request2; | 2148 HttpRequestInfo request2; |
2151 request2.method = "GET"; | 2149 request2.method = "GET"; |
2152 request2.url = GURL("http://www.borked.com/foo"); | 2150 request2.url = GURL("http://www.borked.com/foo"); |
2153 | 2151 |
2154 std::unique_ptr<HttpNetworkTransaction> trans2( | 2152 auto trans2 = |
2155 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2153 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
2156 rv = trans2->Start(&request2, callback.callback(), NetLogWithSource()); | 2154 rv = trans2->Start(&request2, callback.callback(), NetLogWithSource()); |
2157 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 2155 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2158 | 2156 |
2159 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 2157 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
2160 ASSERT_TRUE(response2); | 2158 ASSERT_TRUE(response2); |
2161 ASSERT_TRUE(response2->headers); | 2159 ASSERT_TRUE(response2->headers); |
2162 EXPECT_EQ(200, response2->headers->response_code()); | 2160 EXPECT_EQ(200, response2->headers->response_code()); |
2163 | 2161 |
2164 std::string response_data2; | 2162 std::string response_data2; |
2165 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); | 2163 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2198 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2196 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
2199 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2197 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
2200 data_writes2, arraysize(data_writes2)); | 2198 data_writes2, arraysize(data_writes2)); |
2201 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2199 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2202 | 2200 |
2203 TestCompletionCallback callback; | 2201 TestCompletionCallback callback; |
2204 HttpRequestInfo request1; | 2202 HttpRequestInfo request1; |
2205 request1.method = "GET"; | 2203 request1.method = "GET"; |
2206 request1.url = GURL("http://www.borked.com/"); | 2204 request1.url = GURL("http://www.borked.com/"); |
2207 | 2205 |
2208 std::unique_ptr<HttpNetworkTransaction> trans1( | 2206 auto trans1 = |
2209 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2207 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
2210 int rv = trans1->Start(&request1, callback.callback(), NetLogWithSource()); | 2208 int rv = trans1->Start(&request1, callback.callback(), NetLogWithSource()); |
2211 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 2209 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2212 | 2210 |
2213 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2211 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
2214 ASSERT_TRUE(response1); | 2212 ASSERT_TRUE(response1); |
2215 ASSERT_TRUE(response1->headers); | 2213 ASSERT_TRUE(response1->headers); |
2216 EXPECT_EQ(200, response1->headers->response_code()); | 2214 EXPECT_EQ(200, response1->headers->response_code()); |
2217 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2215 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
2218 | 2216 |
2219 std::string response_data1; | 2217 std::string response_data1; |
2220 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); | 2218 EXPECT_THAT(ReadTransaction(trans1.get(), &response_data1), IsOk()); |
2221 EXPECT_EQ("This server is borked.", response_data1); | 2219 EXPECT_EQ("This server is borked.", response_data1); |
2222 // Deleting the transaction attempts to release the socket back into the | 2220 // Deleting the transaction attempts to release the socket back into the |
2223 // socket pool. | 2221 // socket pool. |
2224 trans1.reset(); | 2222 trans1.reset(); |
2225 | 2223 |
2226 HttpRequestInfo request2; | 2224 HttpRequestInfo request2; |
2227 request2.method = "GET"; | 2225 request2.method = "GET"; |
2228 request2.url = GURL("http://www.borked.com/foo"); | 2226 request2.url = GURL("http://www.borked.com/foo"); |
2229 | 2227 |
2230 std::unique_ptr<HttpNetworkTransaction> trans2( | 2228 auto trans2 = |
2231 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2229 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
2232 rv = trans2->Start(&request2, callback.callback(), NetLogWithSource()); | 2230 rv = trans2->Start(&request2, callback.callback(), NetLogWithSource()); |
2233 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 2231 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2234 | 2232 |
2235 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 2233 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
2236 ASSERT_TRUE(response2); | 2234 ASSERT_TRUE(response2); |
2237 ASSERT_TRUE(response2->headers); | 2235 ASSERT_TRUE(response2->headers); |
2238 EXPECT_EQ(200, response2->headers->response_code()); | 2236 EXPECT_EQ(200, response2->headers->response_code()); |
2239 | 2237 |
2240 std::string response_data2; | 2238 std::string response_data2; |
2241 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); | 2239 EXPECT_THAT(ReadTransaction(trans2.get(), &response_data2), IsOk()); |
(...skipping 21 matching lines...) Expand all Loading... |
2263 }; | 2261 }; |
2264 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2262 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
2265 data_writes1, arraysize(data_writes1)); | 2263 data_writes1, arraysize(data_writes1)); |
2266 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2264 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
2267 | 2265 |
2268 TestCompletionCallback callback; | 2266 TestCompletionCallback callback; |
2269 HttpRequestInfo request1; | 2267 HttpRequestInfo request1; |
2270 request1.method = "GET"; | 2268 request1.method = "GET"; |
2271 request1.url = GURL("http://www.borked.com/"); | 2269 request1.url = GURL("http://www.borked.com/"); |
2272 | 2270 |
2273 std::unique_ptr<HttpNetworkTransaction> trans1( | 2271 auto trans = |
2274 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2272 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
2275 int rv = trans1->Start(&request1, callback.callback(), NetLogWithSource()); | 2273 int rv = trans->Start(&request1, callback.callback(), NetLogWithSource()); |
2276 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 2274 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
2277 | 2275 |
2278 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 2276 const HttpResponseInfo* response1 = trans->GetResponseInfo(); |
2279 ASSERT_TRUE(response1); | 2277 ASSERT_TRUE(response1); |
2280 ASSERT_TRUE(response1->headers); | 2278 ASSERT_TRUE(response1->headers); |
2281 EXPECT_EQ(200, response1->headers->response_code()); | 2279 EXPECT_EQ(200, response1->headers->response_code()); |
2282 EXPECT_TRUE(response1->headers->IsKeepAlive()); | 2280 EXPECT_TRUE(response1->headers->IsKeepAlive()); |
2283 | 2281 |
2284 // Deleting the transaction creates an HttpResponseBodyDrainer to read the | 2282 // Deleting the transaction creates an HttpResponseBodyDrainer to read the |
2285 // response body. | 2283 // response body. |
2286 trans1.reset(); | 2284 trans.reset(); |
2287 | 2285 |
2288 // Let the HttpResponseBodyDrainer drain the socket. It should determine the | 2286 // Let the HttpResponseBodyDrainer drain the socket. It should determine the |
2289 // socket can't be reused, rather than returning it to the socket pool. | 2287 // socket can't be reused, rather than returning it to the socket pool. |
2290 base::RunLoop().RunUntilIdle(); | 2288 base::RunLoop().RunUntilIdle(); |
2291 | 2289 |
2292 // There should be no idle sockets in the pool. | 2290 // There should be no idle sockets in the pool. |
2293 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 2291 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
2294 } | 2292 } |
2295 | 2293 |
2296 // Test the request-challenge-retry sequence for basic auth. | 2294 // Test the request-challenge-retry sequence for basic auth. |
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2951 data_writes1, arraysize(data_writes1)); | 2949 data_writes1, arraysize(data_writes1)); |
2952 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2950 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
2953 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2951 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
2954 data_writes2, arraysize(data_writes2)); | 2952 data_writes2, arraysize(data_writes2)); |
2955 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2953 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
2956 SSLSocketDataProvider ssl(ASYNC, OK); | 2954 SSLSocketDataProvider ssl(ASYNC, OK); |
2957 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2955 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
2958 | 2956 |
2959 TestCompletionCallback callback1; | 2957 TestCompletionCallback callback1; |
2960 | 2958 |
2961 std::unique_ptr<HttpNetworkTransaction> trans( | 2959 auto trans = |
2962 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2960 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
2963 | 2961 |
2964 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2962 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2965 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 2963 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
2966 | 2964 |
2967 rv = callback1.WaitForResult(); | 2965 rv = callback1.WaitForResult(); |
2968 EXPECT_THAT(rv, IsOk()); | 2966 EXPECT_THAT(rv, IsOk()); |
2969 TestNetLogEntry::List entries; | 2967 TestNetLogEntry::List entries; |
2970 log.GetEntries(&entries); | 2968 log.GetEntries(&entries); |
2971 size_t pos = ExpectLogContainsSomewhere( | 2969 size_t pos = ExpectLogContainsSomewhere( |
2972 entries, 0, NetLogEventType::HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 2970 entries, 0, NetLogEventType::HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3075 data_writes1, arraysize(data_writes1)); | 3073 data_writes1, arraysize(data_writes1)); |
3076 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3074 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
3077 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 3075 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
3078 data_writes2, arraysize(data_writes2)); | 3076 data_writes2, arraysize(data_writes2)); |
3079 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3077 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
3080 SSLSocketDataProvider ssl(ASYNC, OK); | 3078 SSLSocketDataProvider ssl(ASYNC, OK); |
3081 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3079 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3082 | 3080 |
3083 TestCompletionCallback callback1; | 3081 TestCompletionCallback callback1; |
3084 | 3082 |
3085 std::unique_ptr<HttpNetworkTransaction> trans( | 3083 auto trans = |
3086 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3084 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
3087 | 3085 |
3088 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3086 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
3089 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 3087 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
3090 | 3088 |
3091 rv = callback1.WaitForResult(); | 3089 rv = callback1.WaitForResult(); |
3092 EXPECT_THAT(rv, IsOk()); | 3090 EXPECT_THAT(rv, IsOk()); |
3093 TestNetLogEntry::List entries; | 3091 TestNetLogEntry::List entries; |
3094 log.GetEntries(&entries); | 3092 log.GetEntries(&entries); |
3095 size_t pos = ExpectLogContainsSomewhere( | 3093 size_t pos = ExpectLogContainsSomewhere( |
3096 entries, 0, NetLogEventType::HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3094 entries, 0, NetLogEventType::HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3428 data1.set_busy_before_sync_reads(true); | 3426 data1.set_busy_before_sync_reads(true); |
3429 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3427 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
3430 SequencedSocketData data2(data_reads2, arraysize(data_reads2), data_writes2, | 3428 SequencedSocketData data2(data_reads2, arraysize(data_reads2), data_writes2, |
3431 arraysize(data_writes2)); | 3429 arraysize(data_writes2)); |
3432 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3430 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
3433 SSLSocketDataProvider ssl(ASYNC, OK); | 3431 SSLSocketDataProvider ssl(ASYNC, OK); |
3434 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3432 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3435 | 3433 |
3436 TestCompletionCallback callback1; | 3434 TestCompletionCallback callback1; |
3437 | 3435 |
3438 std::unique_ptr<HttpNetworkTransaction> trans( | 3436 auto trans = |
3439 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3437 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
3440 | 3438 |
3441 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3439 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
3442 EXPECT_THAT(callback1.GetResult(rv), IsOk()); | 3440 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
3443 | 3441 |
3444 TestNetLogEntry::List entries; | 3442 TestNetLogEntry::List entries; |
3445 log.GetEntries(&entries); | 3443 log.GetEntries(&entries); |
3446 size_t pos = ExpectLogContainsSomewhere( | 3444 size_t pos = ExpectLogContainsSomewhere( |
3447 entries, 0, NetLogEventType::HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 3445 entries, 0, NetLogEventType::HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
3448 NetLogEventPhase::NONE); | 3446 NetLogEventPhase::NONE); |
3449 ExpectLogContainsSomewhere( | 3447 ExpectLogContainsSomewhere( |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3800 TEST_F(HttpNetworkTransactionTest, | 3798 TEST_F(HttpNetworkTransactionTest, |
3801 AuthAllowsDefaultCredentialsTunnelConnectionClose) { | 3799 AuthAllowsDefaultCredentialsTunnelConnectionClose) { |
3802 HttpRequestInfo request; | 3800 HttpRequestInfo request; |
3803 request.method = "GET"; | 3801 request.method = "GET"; |
3804 request.url = GURL("https://www.example.org/"); | 3802 request.url = GURL("https://www.example.org/"); |
3805 | 3803 |
3806 // Configure against proxy server "myproxy:70". | 3804 // Configure against proxy server "myproxy:70". |
3807 session_deps_.proxy_service = | 3805 session_deps_.proxy_service = |
3808 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); | 3806 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); |
3809 | 3807 |
3810 std::unique_ptr<HttpAuthHandlerMock::Factory> auth_handler_factory( | 3808 auto auth_handler_factory = base::MakeUnique<HttpAuthHandlerMock::Factory>(); |
3811 new HttpAuthHandlerMock::Factory()); | |
3812 auth_handler_factory->set_do_init_from_challenge(true); | 3809 auth_handler_factory->set_do_init_from_challenge(true); |
3813 std::unique_ptr<HttpAuthHandlerMock> mock_handler(new HttpAuthHandlerMock()); | 3810 auto mock_handler = base::MakeUnique<HttpAuthHandlerMock>(); |
3814 mock_handler->set_allows_default_credentials(true); | 3811 mock_handler->set_allows_default_credentials(true); |
3815 auth_handler_factory->AddMockHandler(mock_handler.release(), | 3812 auth_handler_factory->AddMockHandler(mock_handler.release(), |
3816 HttpAuth::AUTH_PROXY); | 3813 HttpAuth::AUTH_PROXY); |
3817 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory); | 3814 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory); |
3818 | 3815 |
3819 // Add NetLog just so can verify load timing information gets a NetLog ID. | 3816 // Add NetLog just so can verify load timing information gets a NetLog ID. |
3820 NetLog net_log; | 3817 NetLog net_log; |
3821 session_deps_.net_log = &net_log; | 3818 session_deps_.net_log = &net_log; |
3822 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); | 3819 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); |
3823 | 3820 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3863 | 3860 |
3864 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 3861 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
3865 data_writes1, arraysize(data_writes1)); | 3862 data_writes1, arraysize(data_writes1)); |
3866 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3863 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
3867 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 3864 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
3868 data_writes2, arraysize(data_writes2)); | 3865 data_writes2, arraysize(data_writes2)); |
3869 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3866 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
3870 SSLSocketDataProvider ssl(ASYNC, OK); | 3867 SSLSocketDataProvider ssl(ASYNC, OK); |
3871 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3868 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3872 | 3869 |
3873 std::unique_ptr<HttpNetworkTransaction> trans( | 3870 auto trans = |
3874 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3871 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
3875 | 3872 |
3876 TestCompletionCallback callback; | 3873 TestCompletionCallback callback; |
3877 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 3874 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
3878 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 3875 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
3879 | 3876 |
3880 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3877 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3881 ASSERT_TRUE(response); | 3878 ASSERT_TRUE(response); |
3882 ASSERT_TRUE(response->headers); | 3879 ASSERT_TRUE(response->headers); |
3883 EXPECT_FALSE(response->headers->IsKeepAlive()); | 3880 EXPECT_FALSE(response->headers->IsKeepAlive()); |
3884 EXPECT_EQ(407, response->headers->response_code()); | 3881 EXPECT_EQ(407, response->headers->response_code()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3917 TEST_F(HttpNetworkTransactionTest, | 3914 TEST_F(HttpNetworkTransactionTest, |
3918 AuthAllowsDefaultCredentialsTunnelServerClosesConnection) { | 3915 AuthAllowsDefaultCredentialsTunnelServerClosesConnection) { |
3919 HttpRequestInfo request; | 3916 HttpRequestInfo request; |
3920 request.method = "GET"; | 3917 request.method = "GET"; |
3921 request.url = GURL("https://www.example.org/"); | 3918 request.url = GURL("https://www.example.org/"); |
3922 | 3919 |
3923 // Configure against proxy server "myproxy:70". | 3920 // Configure against proxy server "myproxy:70". |
3924 session_deps_.proxy_service = | 3921 session_deps_.proxy_service = |
3925 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); | 3922 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); |
3926 | 3923 |
3927 std::unique_ptr<HttpAuthHandlerMock::Factory> auth_handler_factory( | 3924 auto auth_handler_factory = base::MakeUnique<HttpAuthHandlerMock::Factory>(); |
3928 new HttpAuthHandlerMock::Factory()); | |
3929 auth_handler_factory->set_do_init_from_challenge(true); | 3925 auth_handler_factory->set_do_init_from_challenge(true); |
3930 std::unique_ptr<HttpAuthHandlerMock> mock_handler(new HttpAuthHandlerMock()); | 3926 auto mock_handler = base::MakeUnique<HttpAuthHandlerMock>(); |
3931 mock_handler->set_allows_default_credentials(true); | 3927 mock_handler->set_allows_default_credentials(true); |
3932 auth_handler_factory->AddMockHandler(mock_handler.release(), | 3928 auth_handler_factory->AddMockHandler(mock_handler.release(), |
3933 HttpAuth::AUTH_PROXY); | 3929 HttpAuth::AUTH_PROXY); |
3934 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory); | 3930 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory); |
3935 | 3931 |
3936 // Add NetLog just so can verify load timing information gets a NetLog ID. | 3932 // Add NetLog just so can verify load timing information gets a NetLog ID. |
3937 NetLog net_log; | 3933 NetLog net_log; |
3938 session_deps_.net_log = &net_log; | 3934 session_deps_.net_log = &net_log; |
3939 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); | 3935 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); |
3940 | 3936 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3983 | 3979 |
3984 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 3980 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
3985 data_writes1, arraysize(data_writes1)); | 3981 data_writes1, arraysize(data_writes1)); |
3986 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3982 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
3987 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 3983 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
3988 data_writes2, arraysize(data_writes2)); | 3984 data_writes2, arraysize(data_writes2)); |
3989 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 3985 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
3990 SSLSocketDataProvider ssl(ASYNC, OK); | 3986 SSLSocketDataProvider ssl(ASYNC, OK); |
3991 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3987 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3992 | 3988 |
3993 std::unique_ptr<HttpNetworkTransaction> trans( | 3989 auto trans = |
3994 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3990 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
3995 | 3991 |
3996 TestCompletionCallback callback; | 3992 TestCompletionCallback callback; |
3997 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 3993 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
3998 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 3994 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
3999 | 3995 |
4000 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3996 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4001 ASSERT_TRUE(response); | 3997 ASSERT_TRUE(response); |
4002 ASSERT_TRUE(response->headers); | 3998 ASSERT_TRUE(response->headers); |
4003 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3999 EXPECT_TRUE(response->headers->IsKeepAlive()); |
4004 EXPECT_EQ(407, response->headers->response_code()); | 4000 EXPECT_EQ(407, response->headers->response_code()); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4039 TEST_F(HttpNetworkTransactionTest, | 4035 TEST_F(HttpNetworkTransactionTest, |
4040 AuthAllowsDefaultCredentialsTunnelServerClosesConnectionTwice) { | 4036 AuthAllowsDefaultCredentialsTunnelServerClosesConnectionTwice) { |
4041 HttpRequestInfo request; | 4037 HttpRequestInfo request; |
4042 request.method = "GET"; | 4038 request.method = "GET"; |
4043 request.url = GURL("https://www.example.org/"); | 4039 request.url = GURL("https://www.example.org/"); |
4044 | 4040 |
4045 // Configure against proxy server "myproxy:70". | 4041 // Configure against proxy server "myproxy:70". |
4046 session_deps_.proxy_service = | 4042 session_deps_.proxy_service = |
4047 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); | 4043 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); |
4048 | 4044 |
4049 std::unique_ptr<HttpAuthHandlerMock::Factory> auth_handler_factory( | 4045 auto auth_handler_factory = base::MakeUnique<HttpAuthHandlerMock::Factory>(); |
4050 new HttpAuthHandlerMock::Factory()); | |
4051 auth_handler_factory->set_do_init_from_challenge(true); | 4046 auth_handler_factory->set_do_init_from_challenge(true); |
4052 std::unique_ptr<HttpAuthHandlerMock> mock_handler(new HttpAuthHandlerMock()); | 4047 auto mock_handler = base::MakeUnique<HttpAuthHandlerMock>(); |
4053 mock_handler->set_allows_default_credentials(true); | 4048 mock_handler->set_allows_default_credentials(true); |
4054 auth_handler_factory->AddMockHandler(mock_handler.release(), | 4049 auth_handler_factory->AddMockHandler(mock_handler.release(), |
4055 HttpAuth::AUTH_PROXY); | 4050 HttpAuth::AUTH_PROXY); |
4056 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory); | 4051 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory); |
4057 | 4052 |
4058 // Add NetLog just so can verify load timing information gets a NetLog ID. | 4053 // Add NetLog just so can verify load timing information gets a NetLog ID. |
4059 NetLog net_log; | 4054 NetLog net_log; |
4060 session_deps_.net_log = &net_log; | 4055 session_deps_.net_log = &net_log; |
4061 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); | 4056 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); |
4062 | 4057 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4098 MockRead(SYNCHRONOUS, ERR_CONNECTION_CLOSED), | 4093 MockRead(SYNCHRONOUS, ERR_CONNECTION_CLOSED), |
4099 }; | 4094 }; |
4100 | 4095 |
4101 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4096 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4102 data_writes1, arraysize(data_writes1)); | 4097 data_writes1, arraysize(data_writes1)); |
4103 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4098 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
4104 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4099 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
4105 data_writes2, arraysize(data_writes2)); | 4100 data_writes2, arraysize(data_writes2)); |
4106 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4101 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
4107 | 4102 |
4108 std::unique_ptr<HttpNetworkTransaction> trans( | 4103 auto trans = |
4109 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4104 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
4110 | 4105 |
4111 TestCompletionCallback callback; | 4106 TestCompletionCallback callback; |
4112 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 4107 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
4113 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 4108 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
4114 | 4109 |
4115 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4110 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4116 ASSERT_TRUE(response); | 4111 ASSERT_TRUE(response); |
4117 ASSERT_TRUE(response->headers); | 4112 ASSERT_TRUE(response->headers); |
4118 EXPECT_TRUE(response->headers->IsKeepAlive()); | 4113 EXPECT_TRUE(response->headers->IsKeepAlive()); |
4119 EXPECT_EQ(407, response->headers->response_code()); | 4114 EXPECT_EQ(407, response->headers->response_code()); |
(...skipping 17 matching lines...) Expand all Loading... |
4137 TEST_F(HttpNetworkTransactionTest, | 4132 TEST_F(HttpNetworkTransactionTest, |
4138 AuthAllowsDefaultCredentialsTunnelServerChallengesTwice) { | 4133 AuthAllowsDefaultCredentialsTunnelServerChallengesTwice) { |
4139 HttpRequestInfo request; | 4134 HttpRequestInfo request; |
4140 request.method = "GET"; | 4135 request.method = "GET"; |
4141 request.url = GURL("https://www.example.org/"); | 4136 request.url = GURL("https://www.example.org/"); |
4142 | 4137 |
4143 // Configure against proxy server "myproxy:70". | 4138 // Configure against proxy server "myproxy:70". |
4144 session_deps_.proxy_service = | 4139 session_deps_.proxy_service = |
4145 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); | 4140 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); |
4146 | 4141 |
4147 std::unique_ptr<HttpAuthHandlerMock::Factory> auth_handler_factory( | 4142 auto auth_handler_factory = base::MakeUnique<HttpAuthHandlerMock::Factory>(); |
4148 new HttpAuthHandlerMock::Factory()); | |
4149 auth_handler_factory->set_do_init_from_challenge(true); | 4143 auth_handler_factory->set_do_init_from_challenge(true); |
4150 std::unique_ptr<HttpAuthHandlerMock> mock_handler(new HttpAuthHandlerMock()); | 4144 auto mock_handler = base::MakeUnique<HttpAuthHandlerMock>(); |
4151 mock_handler->set_allows_default_credentials(true); | 4145 mock_handler->set_allows_default_credentials(true); |
4152 auth_handler_factory->AddMockHandler(mock_handler.release(), | 4146 auth_handler_factory->AddMockHandler(mock_handler.release(), |
4153 HttpAuth::AUTH_PROXY); | 4147 HttpAuth::AUTH_PROXY); |
4154 // Add another handler for the second challenge. It supports default | 4148 // Add another handler for the second challenge. It supports default |
4155 // credentials, but they shouldn't be used, since they were already tried. | 4149 // credentials, but they shouldn't be used, since they were already tried. |
4156 mock_handler.reset(new HttpAuthHandlerMock()); | 4150 mock_handler = base::MakeUnique<HttpAuthHandlerMock>(); |
4157 mock_handler->set_allows_default_credentials(true); | 4151 mock_handler->set_allows_default_credentials(true); |
4158 auth_handler_factory->AddMockHandler(mock_handler.release(), | 4152 auth_handler_factory->AddMockHandler(mock_handler.release(), |
4159 HttpAuth::AUTH_PROXY); | 4153 HttpAuth::AUTH_PROXY); |
4160 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory); | 4154 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory); |
4161 | 4155 |
4162 // Add NetLog just so can verify load timing information gets a NetLog ID. | 4156 // Add NetLog just so can verify load timing information gets a NetLog ID. |
4163 NetLog net_log; | 4157 NetLog net_log; |
4164 session_deps_.net_log = &net_log; | 4158 session_deps_.net_log = &net_log; |
4165 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); | 4159 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); |
4166 | 4160 |
(...skipping 30 matching lines...) Expand all Loading... |
4197 | 4191 |
4198 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4192 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4199 data_writes1, arraysize(data_writes1)); | 4193 data_writes1, arraysize(data_writes1)); |
4200 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4194 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
4201 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4195 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
4202 data_writes2, arraysize(data_writes2)); | 4196 data_writes2, arraysize(data_writes2)); |
4203 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4197 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
4204 SSLSocketDataProvider ssl(ASYNC, OK); | 4198 SSLSocketDataProvider ssl(ASYNC, OK); |
4205 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4199 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4206 | 4200 |
4207 std::unique_ptr<HttpNetworkTransaction> trans( | 4201 auto trans = |
4208 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4202 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
4209 | 4203 |
4210 TestCompletionCallback callback; | 4204 TestCompletionCallback callback; |
4211 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 4205 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
4212 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 4206 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
4213 | 4207 |
4214 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4208 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4215 ASSERT_TRUE(response); | 4209 ASSERT_TRUE(response); |
4216 ASSERT_TRUE(response->headers); | 4210 ASSERT_TRUE(response->headers); |
4217 EXPECT_EQ(407, response->headers->response_code()); | 4211 EXPECT_EQ(407, response->headers->response_code()); |
4218 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4212 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
(...skipping 19 matching lines...) Expand all Loading... |
4238 // A more nuanced test than GenerateAuthToken test which asserts that | 4232 // A more nuanced test than GenerateAuthToken test which asserts that |
4239 // ERR_INVALID_AUTH_CREDENTIALS does not cause the auth scheme to be | 4233 // ERR_INVALID_AUTH_CREDENTIALS does not cause the auth scheme to be |
4240 // unnecessarily invalidated, and that if the server co-operates, the | 4234 // unnecessarily invalidated, and that if the server co-operates, the |
4241 // authentication handshake can continue with the same scheme but with a | 4235 // authentication handshake can continue with the same scheme but with a |
4242 // different identity. | 4236 // different identity. |
4243 TEST_F(HttpNetworkTransactionTest, NonPermanentGenerateAuthTokenError) { | 4237 TEST_F(HttpNetworkTransactionTest, NonPermanentGenerateAuthTokenError) { |
4244 HttpRequestInfo request; | 4238 HttpRequestInfo request; |
4245 request.method = "GET"; | 4239 request.method = "GET"; |
4246 request.url = GURL("http://www.example.org/"); | 4240 request.url = GURL("http://www.example.org/"); |
4247 | 4241 |
4248 std::unique_ptr<HttpAuthHandlerMock::Factory> auth_handler_factory( | 4242 auto auth_handler_factory = base::MakeUnique<HttpAuthHandlerMock::Factory>(); |
4249 new HttpAuthHandlerMock::Factory()); | |
4250 auth_handler_factory->set_do_init_from_challenge(true); | 4243 auth_handler_factory->set_do_init_from_challenge(true); |
4251 | 4244 |
4252 // First handler. Uses default credentials, but barfs at generate auth token. | 4245 // First handler. Uses default credentials, but barfs at generate auth token. |
4253 std::unique_ptr<HttpAuthHandlerMock> mock_handler(new HttpAuthHandlerMock()); | 4246 auto mock_handler = base::MakeUnique<HttpAuthHandlerMock>(); |
4254 mock_handler->set_allows_default_credentials(true); | 4247 mock_handler->set_allows_default_credentials(true); |
4255 mock_handler->set_allows_explicit_credentials(true); | 4248 mock_handler->set_allows_explicit_credentials(true); |
4256 mock_handler->set_connection_based(true); | 4249 mock_handler->set_connection_based(true); |
4257 mock_handler->SetGenerateExpectation(true, ERR_INVALID_AUTH_CREDENTIALS); | 4250 mock_handler->SetGenerateExpectation(true, ERR_INVALID_AUTH_CREDENTIALS); |
4258 auth_handler_factory->AddMockHandler(mock_handler.release(), | 4251 auth_handler_factory->AddMockHandler(mock_handler.release(), |
4259 HttpAuth::AUTH_SERVER); | 4252 HttpAuth::AUTH_SERVER); |
4260 | 4253 |
4261 // Add another handler for the second challenge. It supports default | 4254 // Add another handler for the second challenge. It supports default |
4262 // credentials, but they shouldn't be used, since they were already tried. | 4255 // credentials, but they shouldn't be used, since they were already tried. |
4263 mock_handler.reset(new HttpAuthHandlerMock()); | 4256 mock_handler = base::MakeUnique<HttpAuthHandlerMock>(); |
4264 mock_handler->set_allows_default_credentials(true); | 4257 mock_handler->set_allows_default_credentials(true); |
4265 mock_handler->set_allows_explicit_credentials(true); | 4258 mock_handler->set_allows_explicit_credentials(true); |
4266 mock_handler->set_connection_based(true); | 4259 mock_handler->set_connection_based(true); |
4267 auth_handler_factory->AddMockHandler(mock_handler.release(), | 4260 auth_handler_factory->AddMockHandler(mock_handler.release(), |
4268 HttpAuth::AUTH_SERVER); | 4261 HttpAuth::AUTH_SERVER); |
4269 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory); | 4262 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory); |
4270 | 4263 |
4271 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); | 4264 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); |
4272 | 4265 |
4273 MockWrite data_writes1[] = { | 4266 MockWrite data_writes1[] = { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4317 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4310 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
4318 | 4311 |
4319 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4312 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
4320 data_writes2, arraysize(data_writes2)); | 4313 data_writes2, arraysize(data_writes2)); |
4321 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4314 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
4322 | 4315 |
4323 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 4316 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
4324 data_writes3, arraysize(data_writes3)); | 4317 data_writes3, arraysize(data_writes3)); |
4325 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 4318 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
4326 | 4319 |
4327 std::unique_ptr<HttpNetworkTransaction> trans( | 4320 auto trans = |
4328 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4321 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
4329 | 4322 |
4330 TestCompletionCallback callback; | 4323 TestCompletionCallback callback; |
4331 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 4324 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
4332 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 4325 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
4333 | 4326 |
4334 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4327 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4335 ASSERT_TRUE(response); | 4328 ASSERT_TRUE(response); |
4336 ASSERT_TRUE(response->headers); | 4329 ASSERT_TRUE(response->headers); |
4337 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4330 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
4338 | 4331 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4412 MockRead(SYNCHRONOUS, "22"), | 4405 MockRead(SYNCHRONOUS, "22"), |
4413 }; | 4406 }; |
4414 | 4407 |
4415 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4408 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4416 data_writes1, arraysize(data_writes1)); | 4409 data_writes1, arraysize(data_writes1)); |
4417 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4410 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
4418 SSLSocketDataProvider ssl(ASYNC, OK); | 4411 SSLSocketDataProvider ssl(ASYNC, OK); |
4419 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4412 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4420 | 4413 |
4421 TestCompletionCallback callback1; | 4414 TestCompletionCallback callback1; |
4422 std::unique_ptr<HttpNetworkTransaction> trans1( | 4415 auto trans1 = |
4423 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4416 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
4424 | 4417 |
4425 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); | 4418 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); |
4426 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 4419 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4427 | 4420 |
4428 rv = callback1.WaitForResult(); | 4421 rv = callback1.WaitForResult(); |
4429 EXPECT_THAT(rv, IsOk()); | 4422 EXPECT_THAT(rv, IsOk()); |
4430 | 4423 |
4431 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 4424 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
4432 ASSERT_TRUE(response1); | 4425 ASSERT_TRUE(response1); |
4433 EXPECT_TRUE(response1->proxy_server.is_http()); | 4426 EXPECT_TRUE(response1->proxy_server.is_http()); |
4434 ASSERT_TRUE(response1->headers); | 4427 ASSERT_TRUE(response1->headers); |
4435 EXPECT_EQ(1, response1->headers->GetContentLength()); | 4428 EXPECT_EQ(1, response1->headers->GetContentLength()); |
4436 | 4429 |
4437 LoadTimingInfo load_timing_info1; | 4430 LoadTimingInfo load_timing_info1; |
4438 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); | 4431 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); |
4439 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_SSL_TIMES); | 4432 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_SSL_TIMES); |
4440 | 4433 |
4441 trans1.reset(); | 4434 trans1.reset(); |
4442 | 4435 |
4443 TestCompletionCallback callback2; | 4436 TestCompletionCallback callback2; |
4444 std::unique_ptr<HttpNetworkTransaction> trans2( | 4437 auto trans2 = |
4445 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4438 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
4446 | 4439 |
4447 rv = trans2->Start(&request2, callback2.callback(), log.bound()); | 4440 rv = trans2->Start(&request2, callback2.callback(), log.bound()); |
4448 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 4441 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4449 | 4442 |
4450 rv = callback2.WaitForResult(); | 4443 rv = callback2.WaitForResult(); |
4451 EXPECT_THAT(rv, IsOk()); | 4444 EXPECT_THAT(rv, IsOk()); |
4452 | 4445 |
4453 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 4446 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
4454 ASSERT_TRUE(response2); | 4447 ASSERT_TRUE(response2); |
4455 EXPECT_TRUE(response2->proxy_server.is_http()); | 4448 EXPECT_TRUE(response2->proxy_server.is_http()); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4512 MockRead(SYNCHRONOUS, "22"), | 4505 MockRead(SYNCHRONOUS, "22"), |
4513 }; | 4506 }; |
4514 | 4507 |
4515 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4508 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4516 data_writes1, arraysize(data_writes1)); | 4509 data_writes1, arraysize(data_writes1)); |
4517 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4510 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
4518 SSLSocketDataProvider ssl(ASYNC, OK); | 4511 SSLSocketDataProvider ssl(ASYNC, OK); |
4519 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4512 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
4520 | 4513 |
4521 TestCompletionCallback callback1; | 4514 TestCompletionCallback callback1; |
4522 std::unique_ptr<HttpNetworkTransaction> trans1( | 4515 auto trans1 = |
4523 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4516 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
4524 | 4517 |
4525 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); | 4518 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); |
4526 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 4519 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4527 | 4520 |
4528 rv = callback1.WaitForResult(); | 4521 rv = callback1.WaitForResult(); |
4529 EXPECT_THAT(rv, IsOk()); | 4522 EXPECT_THAT(rv, IsOk()); |
4530 | 4523 |
4531 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 4524 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
4532 ASSERT_TRUE(response1); | 4525 ASSERT_TRUE(response1); |
4533 ASSERT_TRUE(response1->headers); | 4526 ASSERT_TRUE(response1->headers); |
4534 EXPECT_EQ(1, response1->headers->GetContentLength()); | 4527 EXPECT_EQ(1, response1->headers->GetContentLength()); |
4535 | 4528 |
4536 LoadTimingInfo load_timing_info1; | 4529 LoadTimingInfo load_timing_info1; |
4537 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); | 4530 EXPECT_TRUE(trans1->GetLoadTimingInfo(&load_timing_info1)); |
4538 TestLoadTimingNotReusedWithPac(load_timing_info1, | 4531 TestLoadTimingNotReusedWithPac(load_timing_info1, |
4539 CONNECT_TIMING_HAS_SSL_TIMES); | 4532 CONNECT_TIMING_HAS_SSL_TIMES); |
4540 | 4533 |
4541 trans1.reset(); | 4534 trans1.reset(); |
4542 | 4535 |
4543 TestCompletionCallback callback2; | 4536 TestCompletionCallback callback2; |
4544 std::unique_ptr<HttpNetworkTransaction> trans2( | 4537 auto trans2 = |
4545 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4538 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
4546 | 4539 |
4547 rv = trans2->Start(&request2, callback2.callback(), log.bound()); | 4540 rv = trans2->Start(&request2, callback2.callback(), log.bound()); |
4548 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 4541 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
4549 | 4542 |
4550 rv = callback2.WaitForResult(); | 4543 rv = callback2.WaitForResult(); |
4551 EXPECT_THAT(rv, IsOk()); | 4544 EXPECT_THAT(rv, IsOk()); |
4552 | 4545 |
4553 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); | 4546 const HttpResponseInfo* response2 = trans2->GetResponseInfo(); |
4554 ASSERT_TRUE(response2); | 4547 ASSERT_TRUE(response2); |
4555 ASSERT_TRUE(response2->headers); | 4548 ASSERT_TRUE(response2->headers); |
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5269 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 5262 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
5270 | 5263 |
5271 SSLSocketDataProvider ssl(ASYNC, OK); | 5264 SSLSocketDataProvider ssl(ASYNC, OK); |
5272 ssl.next_proto = kProtoHTTP2; | 5265 ssl.next_proto = kProtoHTTP2; |
5273 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 5266 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
5274 SSLSocketDataProvider ssl2(ASYNC, OK); | 5267 SSLSocketDataProvider ssl2(ASYNC, OK); |
5275 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 5268 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
5276 | 5269 |
5277 TestCompletionCallback callback; | 5270 TestCompletionCallback callback; |
5278 | 5271 |
5279 std::unique_ptr<HttpNetworkTransaction> trans( | 5272 auto trans = |
5280 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5273 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
5281 int rv = trans->Start(&request1, callback.callback(), NetLogWithSource()); | 5274 int rv = trans->Start(&request1, callback.callback(), NetLogWithSource()); |
5282 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 5275 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5283 | 5276 |
5284 rv = callback.WaitForResult(); | 5277 rv = callback.WaitForResult(); |
5285 EXPECT_THAT(rv, IsOk()); | 5278 EXPECT_THAT(rv, IsOk()); |
5286 | 5279 |
5287 LoadTimingInfo load_timing_info; | 5280 LoadTimingInfo load_timing_info; |
5288 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5281 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
5289 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 5282 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
5290 | 5283 |
5291 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5284 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5292 ASSERT_TRUE(response); | 5285 ASSERT_TRUE(response); |
5293 ASSERT_TRUE(response->headers); | 5286 ASSERT_TRUE(response->headers); |
5294 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 5287 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
5295 | 5288 |
5296 std::string response_data; | 5289 std::string response_data; |
5297 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); | 5290 scoped_refptr<IOBuffer> buf(new IOBuffer(256)); |
5298 EXPECT_EQ(1, trans->Read(buf.get(), 256, callback.callback())); | 5291 EXPECT_EQ(1, trans->Read(buf.get(), 256, callback.callback())); |
5299 trans.reset(); | 5292 trans.reset(); |
5300 | 5293 |
5301 std::unique_ptr<HttpNetworkTransaction> trans2( | 5294 auto trans2 = |
5302 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5295 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
5303 rv = trans2->Start(&request2, callback.callback(), NetLogWithSource()); | 5296 rv = trans2->Start(&request2, callback.callback(), NetLogWithSource()); |
5304 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 5297 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
5305 | 5298 |
5306 rv = callback.WaitForResult(); | 5299 rv = callback.WaitForResult(); |
5307 EXPECT_THAT(rv, IsOk()); | 5300 EXPECT_THAT(rv, IsOk()); |
5308 | 5301 |
5309 LoadTimingInfo load_timing_info2; | 5302 LoadTimingInfo load_timing_info2; |
5310 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); | 5303 EXPECT_TRUE(trans2->GetLoadTimingInfo(&load_timing_info2)); |
5311 TestLoadTimingReused(load_timing_info2); | 5304 TestLoadTimingReused(load_timing_info2); |
5312 | 5305 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5369 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, | 5362 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, |
5370 arraysize(spdy_writes)); | 5363 arraysize(spdy_writes)); |
5371 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 5364 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
5372 | 5365 |
5373 SSLSocketDataProvider ssl(ASYNC, OK); | 5366 SSLSocketDataProvider ssl(ASYNC, OK); |
5374 ssl.next_proto = kProtoHTTP2; | 5367 ssl.next_proto = kProtoHTTP2; |
5375 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 5368 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
5376 | 5369 |
5377 TestCompletionCallback callback; | 5370 TestCompletionCallback callback; |
5378 | 5371 |
5379 std::unique_ptr<HttpNetworkTransaction> trans( | 5372 auto trans = |
5380 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5373 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
5381 int rv = trans->Start(&request1, callback.callback(), NetLogWithSource()); | 5374 int rv = trans->Start(&request1, callback.callback(), NetLogWithSource()); |
5382 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 5375 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
5383 | 5376 |
5384 LoadTimingInfo load_timing_info; | 5377 LoadTimingInfo load_timing_info; |
5385 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 5378 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
5386 TestLoadTimingNotReused(load_timing_info, | 5379 TestLoadTimingNotReused(load_timing_info, |
5387 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 5380 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
5388 | 5381 |
5389 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5382 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5390 ASSERT_TRUE(response); | 5383 ASSERT_TRUE(response); |
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6221 TEST_F(HttpNetworkTransactionTest, DontRecycleTransportSocketForSSLTunnel) { | 6214 TEST_F(HttpNetworkTransactionTest, DontRecycleTransportSocketForSSLTunnel) { |
6222 HttpRequestInfo request; | 6215 HttpRequestInfo request; |
6223 request.method = "GET"; | 6216 request.method = "GET"; |
6224 request.url = GURL("https://www.example.org/"); | 6217 request.url = GURL("https://www.example.org/"); |
6225 | 6218 |
6226 // Configure against proxy server "myproxy:70". | 6219 // Configure against proxy server "myproxy:70". |
6227 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 6220 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
6228 | 6221 |
6229 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6222 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6230 | 6223 |
6231 std::unique_ptr<HttpNetworkTransaction> trans( | 6224 auto trans = |
6232 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6225 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
6233 | 6226 |
6234 // Since we have proxy, should try to establish tunnel. | 6227 // Since we have proxy, should try to establish tunnel. |
6235 MockWrite data_writes1[] = { | 6228 MockWrite data_writes1[] = { |
6236 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" | 6229 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" |
6237 "Host: www.example.org:443\r\n" | 6230 "Host: www.example.org:443\r\n" |
6238 "Proxy-Connection: keep-alive\r\n\r\n"), | 6231 "Proxy-Connection: keep-alive\r\n\r\n"), |
6239 }; | 6232 }; |
6240 | 6233 |
6241 // The proxy responds to the connect with a 404, using a persistent | 6234 // The proxy responds to the connect with a 404, using a persistent |
6242 // connection. Usually a proxy would return 501 (not implemented), | 6235 // connection. Usually a proxy would return 501 (not implemented), |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6413 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 6406 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
6414 data_writes, arraysize(data_writes)); | 6407 data_writes, arraysize(data_writes)); |
6415 StaticSocketDataProvider data2(data_reads, arraysize(data_reads), | 6408 StaticSocketDataProvider data2(data_reads, arraysize(data_reads), |
6416 data_writes, arraysize(data_writes)); | 6409 data_writes, arraysize(data_writes)); |
6417 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6410 session_deps_.socket_factory->AddSocketDataProvider(&data); |
6418 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6411 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
6419 | 6412 |
6420 TestCompletionCallback callback; | 6413 TestCompletionCallback callback; |
6421 | 6414 |
6422 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6415 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6423 std::unique_ptr<HttpNetworkTransaction> trans( | 6416 auto trans = |
6424 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6417 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
6425 | 6418 |
6426 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 6419 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
6427 | 6420 |
6428 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 6421 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6429 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 6422 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
6430 | 6423 |
6431 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6424 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6432 ASSERT_TRUE(response); | 6425 ASSERT_TRUE(response); |
6433 ASSERT_TRUE(response->headers); | 6426 ASSERT_TRUE(response->headers); |
6434 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6427 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
6435 | 6428 |
6436 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6429 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
6437 | 6430 |
6438 std::string response_data; | 6431 std::string response_data; |
6439 rv = ReadTransaction(trans.get(), &response_data); | 6432 rv = ReadTransaction(trans.get(), &response_data); |
6440 EXPECT_THAT(rv, IsOk()); | 6433 EXPECT_THAT(rv, IsOk()); |
6441 EXPECT_EQ("hello world", response_data); | 6434 EXPECT_EQ("hello world", response_data); |
6442 | 6435 |
6443 // Empty the current queue. This is necessary because idle sockets are | 6436 // Empty the current queue. This is necessary because idle sockets are |
6444 // added to the connection pool asynchronously with a PostTask. | 6437 // added to the connection pool asynchronously with a PostTask. |
6445 base::RunLoop().RunUntilIdle(); | 6438 base::RunLoop().RunUntilIdle(); |
6446 | 6439 |
6447 // We now check to make sure the socket was added back to the pool. | 6440 // We now check to make sure the socket was added back to the pool. |
6448 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 6441 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
6449 | 6442 |
6450 // Now start the second transaction, which should reuse the previous socket. | 6443 // Now start the second transaction, which should reuse the previous socket. |
6451 | 6444 |
6452 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6445 trans = |
| 6446 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
6453 | 6447 |
6454 rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 6448 rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
6455 | 6449 |
6456 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 6450 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
6457 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 6451 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
6458 | 6452 |
6459 response = trans->GetResponseInfo(); | 6453 response = trans->GetResponseInfo(); |
6460 ASSERT_TRUE(response); | 6454 ASSERT_TRUE(response); |
6461 ASSERT_TRUE(response->headers); | 6455 ASSERT_TRUE(response->headers); |
6462 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6456 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
(...skipping 1614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8077 // Negotiate SPDY to the proxy | 8071 // Negotiate SPDY to the proxy |
8078 SSLSocketDataProvider proxy(ASYNC, OK); | 8072 SSLSocketDataProvider proxy(ASYNC, OK); |
8079 proxy.next_proto = kProtoHTTP2; | 8073 proxy.next_proto = kProtoHTTP2; |
8080 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 8074 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
8081 // Vanilla SSL to the server | 8075 // Vanilla SSL to the server |
8082 SSLSocketDataProvider server(ASYNC, OK); | 8076 SSLSocketDataProvider server(ASYNC, OK); |
8083 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); | 8077 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); |
8084 | 8078 |
8085 TestCompletionCallback callback1; | 8079 TestCompletionCallback callback1; |
8086 | 8080 |
8087 std::unique_ptr<HttpNetworkTransaction> trans( | 8081 auto trans = |
8088 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8082 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
8089 | 8083 |
8090 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 8084 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
8091 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 8085 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8092 | 8086 |
8093 rv = callback1.WaitForResult(); | 8087 rv = callback1.WaitForResult(); |
8094 EXPECT_THAT(rv, IsOk()); | 8088 EXPECT_THAT(rv, IsOk()); |
8095 TestNetLogEntry::List entries; | 8089 TestNetLogEntry::List entries; |
8096 log.GetEntries(&entries); | 8090 log.GetEntries(&entries); |
8097 size_t pos = ExpectLogContainsSomewhere( | 8091 size_t pos = ExpectLogContainsSomewhere( |
8098 entries, 0, NetLogEventType::HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 8092 entries, 0, NetLogEventType::HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8136 CONNECT_TIMING_HAS_SSL_TIMES); | 8130 CONNECT_TIMING_HAS_SSL_TIMES); |
8137 | 8131 |
8138 trans.reset(); | 8132 trans.reset(); |
8139 session->CloseAllConnections(); | 8133 session->CloseAllConnections(); |
8140 } | 8134 } |
8141 | 8135 |
8142 // Test that an explicitly trusted SPDY proxy can push a resource from an | 8136 // Test that an explicitly trusted SPDY proxy can push a resource from an |
8143 // origin that is different from that of its associated resource. | 8137 // origin that is different from that of its associated resource. |
8144 TEST_F(HttpNetworkTransactionTest, CrossOriginSPDYProxyPush) { | 8138 TEST_F(HttpNetworkTransactionTest, CrossOriginSPDYProxyPush) { |
8145 // Configure the proxy delegate to allow cross-origin SPDY pushes. | 8139 // Configure the proxy delegate to allow cross-origin SPDY pushes. |
8146 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 8140 auto proxy_delegate = base::MakeUnique<TestProxyDelegate>(); |
8147 proxy_delegate->set_trusted_spdy_proxy(net::ProxyServer::FromURI( | 8141 proxy_delegate->set_trusted_spdy_proxy(net::ProxyServer::FromURI( |
8148 "https://myproxy:443", net::ProxyServer::SCHEME_HTTP)); | 8142 "https://myproxy:443", net::ProxyServer::SCHEME_HTTP)); |
8149 HttpRequestInfo request; | 8143 HttpRequestInfo request; |
8150 HttpRequestInfo push_request; | 8144 HttpRequestInfo push_request; |
8151 | 8145 |
8152 request.method = "GET"; | 8146 request.method = "GET"; |
8153 request.url = GURL("http://www.example.org/"); | 8147 request.url = GURL("http://www.example.org/"); |
8154 push_request.method = "GET"; | 8148 push_request.method = "GET"; |
8155 push_request.url = GURL("http://www.another-origin.com/foo.dat"); | 8149 push_request.url = GURL("http://www.another-origin.com/foo.dat"); |
8156 | 8150 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8194 }; | 8188 }; |
8195 | 8189 |
8196 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, | 8190 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, |
8197 arraysize(spdy_writes)); | 8191 arraysize(spdy_writes)); |
8198 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8192 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
8199 // Negotiate SPDY to the proxy | 8193 // Negotiate SPDY to the proxy |
8200 SSLSocketDataProvider proxy(ASYNC, OK); | 8194 SSLSocketDataProvider proxy(ASYNC, OK); |
8201 proxy.next_proto = kProtoHTTP2; | 8195 proxy.next_proto = kProtoHTTP2; |
8202 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 8196 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
8203 | 8197 |
8204 std::unique_ptr<HttpNetworkTransaction> trans( | 8198 auto trans = |
8205 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8199 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
8206 TestCompletionCallback callback; | 8200 TestCompletionCallback callback; |
8207 int rv = trans->Start(&request, callback.callback(), log.bound()); | 8201 int rv = trans->Start(&request, callback.callback(), log.bound()); |
8208 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 8202 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8209 | 8203 |
8210 rv = callback.WaitForResult(); | 8204 rv = callback.WaitForResult(); |
8211 EXPECT_THAT(rv, IsOk()); | 8205 EXPECT_THAT(rv, IsOk()); |
8212 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8206 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8213 | 8207 |
8214 std::unique_ptr<HttpNetworkTransaction> push_trans( | 8208 auto push_trans = |
8215 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8209 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
8216 rv = push_trans->Start(&push_request, callback.callback(), log.bound()); | 8210 rv = push_trans->Start(&push_request, callback.callback(), log.bound()); |
8217 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 8211 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8218 | 8212 |
8219 rv = callback.WaitForResult(); | 8213 rv = callback.WaitForResult(); |
8220 EXPECT_THAT(rv, IsOk()); | 8214 EXPECT_THAT(rv, IsOk()); |
8221 const HttpResponseInfo* push_response = push_trans->GetResponseInfo(); | 8215 const HttpResponseInfo* push_response = push_trans->GetResponseInfo(); |
8222 | 8216 |
8223 ASSERT_TRUE(response); | 8217 ASSERT_TRUE(response); |
8224 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8218 EXPECT_TRUE(response->headers->IsKeepAlive()); |
8225 | 8219 |
(...skipping 27 matching lines...) Expand all Loading... |
8253 push_load_timing_info.socket_log_id); | 8247 push_load_timing_info.socket_log_id); |
8254 | 8248 |
8255 trans.reset(); | 8249 trans.reset(); |
8256 push_trans.reset(); | 8250 push_trans.reset(); |
8257 session->CloseAllConnections(); | 8251 session->CloseAllConnections(); |
8258 } | 8252 } |
8259 | 8253 |
8260 // Test that an explicitly trusted SPDY proxy cannot push HTTPS content. | 8254 // Test that an explicitly trusted SPDY proxy cannot push HTTPS content. |
8261 TEST_F(HttpNetworkTransactionTest, CrossOriginProxyPushCorrectness) { | 8255 TEST_F(HttpNetworkTransactionTest, CrossOriginProxyPushCorrectness) { |
8262 // Configure the proxy delegate to allow cross-origin SPDY pushes. | 8256 // Configure the proxy delegate to allow cross-origin SPDY pushes. |
8263 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 8257 auto proxy_delegate = base::MakeUnique<TestProxyDelegate>(); |
8264 proxy_delegate->set_trusted_spdy_proxy(net::ProxyServer::FromURI( | 8258 proxy_delegate->set_trusted_spdy_proxy(net::ProxyServer::FromURI( |
8265 "https://myproxy:443", net::ProxyServer::SCHEME_HTTP)); | 8259 "https://myproxy:443", net::ProxyServer::SCHEME_HTTP)); |
8266 HttpRequestInfo request; | 8260 HttpRequestInfo request; |
8267 | 8261 |
8268 request.method = "GET"; | 8262 request.method = "GET"; |
8269 request.url = GURL("http://www.example.org/"); | 8263 request.url = GURL("http://www.example.org/"); |
8270 | 8264 |
8271 session_deps_.proxy_service = | 8265 session_deps_.proxy_service = |
8272 ProxyService::CreateFixed("https://myproxy:443"); | 8266 ProxyService::CreateFixed("https://myproxy:443"); |
8273 BoundTestNetLog log; | 8267 BoundTestNetLog log; |
(...skipping 30 matching lines...) Expand all Loading... |
8304 }; | 8298 }; |
8305 | 8299 |
8306 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, | 8300 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, |
8307 arraysize(spdy_writes)); | 8301 arraysize(spdy_writes)); |
8308 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8302 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
8309 // Negotiate SPDY to the proxy | 8303 // Negotiate SPDY to the proxy |
8310 SSLSocketDataProvider proxy(ASYNC, OK); | 8304 SSLSocketDataProvider proxy(ASYNC, OK); |
8311 proxy.next_proto = kProtoHTTP2; | 8305 proxy.next_proto = kProtoHTTP2; |
8312 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 8306 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
8313 | 8307 |
8314 std::unique_ptr<HttpNetworkTransaction> trans( | 8308 auto trans = |
8315 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8309 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
8316 TestCompletionCallback callback; | 8310 TestCompletionCallback callback; |
8317 int rv = trans->Start(&request, callback.callback(), log.bound()); | 8311 int rv = trans->Start(&request, callback.callback(), log.bound()); |
8318 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 8312 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8319 | 8313 |
8320 rv = callback.WaitForResult(); | 8314 rv = callback.WaitForResult(); |
8321 EXPECT_THAT(rv, IsOk()); | 8315 EXPECT_THAT(rv, IsOk()); |
8322 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8316 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8323 | 8317 |
8324 ASSERT_TRUE(response); | 8318 ASSERT_TRUE(response); |
8325 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8319 EXPECT_TRUE(response->headers->IsKeepAlive()); |
8326 | 8320 |
8327 EXPECT_EQ(200, response->headers->response_code()); | 8321 EXPECT_EQ(200, response->headers->response_code()); |
8328 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 8322 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
8329 | 8323 |
8330 std::string response_data; | 8324 std::string response_data; |
8331 rv = ReadTransaction(trans.get(), &response_data); | 8325 rv = ReadTransaction(trans.get(), &response_data); |
8332 EXPECT_THAT(rv, IsOk()); | 8326 EXPECT_THAT(rv, IsOk()); |
8333 EXPECT_EQ("hello!", response_data); | 8327 EXPECT_EQ("hello!", response_data); |
8334 | 8328 |
8335 trans.reset(); | 8329 trans.reset(); |
8336 session->CloseAllConnections(); | 8330 session->CloseAllConnections(); |
8337 } | 8331 } |
8338 | 8332 |
8339 // Test that an explicitly trusted SPDY proxy can push same-origin HTTPS | 8333 // Test that an explicitly trusted SPDY proxy can push same-origin HTTPS |
8340 // resources. | 8334 // resources. |
8341 TEST_F(HttpNetworkTransactionTest, SameOriginProxyPushCorrectness) { | 8335 TEST_F(HttpNetworkTransactionTest, SameOriginProxyPushCorrectness) { |
8342 // Configure the proxy delegate to allow cross-origin SPDY pushes. | 8336 // Configure the proxy delegate to allow cross-origin SPDY pushes. |
8343 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 8337 auto proxy_delegate = base::MakeUnique<TestProxyDelegate>(); |
8344 proxy_delegate->set_trusted_spdy_proxy( | 8338 proxy_delegate->set_trusted_spdy_proxy( |
8345 net::ProxyServer::FromURI("myproxy:70", net::ProxyServer::SCHEME_HTTP)); | 8339 net::ProxyServer::FromURI("myproxy:70", net::ProxyServer::SCHEME_HTTP)); |
8346 | 8340 |
8347 HttpRequestInfo request; | 8341 HttpRequestInfo request; |
8348 | 8342 |
8349 request.method = "GET"; | 8343 request.method = "GET"; |
8350 request.url = GURL("http://www.example.org/"); | 8344 request.url = GURL("http://www.example.org/"); |
8351 | 8345 |
8352 // Configure against https proxy server "myproxy:70". | 8346 // Configure against https proxy server "myproxy:70". |
8353 session_deps_.proxy_service = ProxyService::CreateFixed("https://myproxy:70"); | 8347 session_deps_.proxy_service = ProxyService::CreateFixed("https://myproxy:70"); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8391 }; | 8385 }; |
8392 | 8386 |
8393 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, | 8387 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, |
8394 arraysize(spdy_writes)); | 8388 arraysize(spdy_writes)); |
8395 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8389 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
8396 // Negotiate SPDY to the proxy | 8390 // Negotiate SPDY to the proxy |
8397 SSLSocketDataProvider proxy(ASYNC, OK); | 8391 SSLSocketDataProvider proxy(ASYNC, OK); |
8398 proxy.next_proto = kProtoHTTP2; | 8392 proxy.next_proto = kProtoHTTP2; |
8399 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 8393 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
8400 | 8394 |
8401 std::unique_ptr<HttpNetworkTransaction> trans( | 8395 auto trans = |
8402 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8396 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
8403 TestCompletionCallback callback; | 8397 TestCompletionCallback callback; |
8404 int rv = trans->Start(&request, callback.callback(), log.bound()); | 8398 int rv = trans->Start(&request, callback.callback(), log.bound()); |
8405 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 8399 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8406 | 8400 |
8407 rv = callback.WaitForResult(); | 8401 rv = callback.WaitForResult(); |
8408 EXPECT_THAT(rv, IsOk()); | 8402 EXPECT_THAT(rv, IsOk()); |
8409 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8403 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8410 | 8404 |
8411 ASSERT_TRUE(response); | 8405 ASSERT_TRUE(response); |
8412 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8406 EXPECT_TRUE(response->headers->IsKeepAlive()); |
(...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9289 }; | 9283 }; |
9290 | 9284 |
9291 for (size_t i = 0; i < arraysize(tests); ++i) { | 9285 for (size_t i = 0; i < arraysize(tests); ++i) { |
9292 session_deps_.proxy_service = | 9286 session_deps_.proxy_service = |
9293 ProxyService::CreateFixed(tests[i].proxy_server); | 9287 ProxyService::CreateFixed(tests[i].proxy_server); |
9294 std::unique_ptr<HttpNetworkSession> session( | 9288 std::unique_ptr<HttpNetworkSession> session( |
9295 SetupSessionForGroupNameTests(&session_deps_)); | 9289 SetupSessionForGroupNameTests(&session_deps_)); |
9296 | 9290 |
9297 HttpNetworkSessionPeer peer(session.get()); | 9291 HttpNetworkSessionPeer peer(session.get()); |
9298 CaptureGroupNameTransportSocketPool* transport_conn_pool = | 9292 CaptureGroupNameTransportSocketPool* transport_conn_pool = |
9299 new CaptureGroupNameTransportSocketPool(NULL, NULL); | 9293 new CaptureGroupNameTransportSocketPool(nullptr, nullptr); |
9300 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 9294 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
9301 new CaptureGroupNameSSLSocketPool(NULL, NULL); | 9295 new CaptureGroupNameSSLSocketPool(nullptr, nullptr); |
9302 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( | 9296 auto mock_pool_manager = base::MakeUnique<MockClientSocketPoolManager>(); |
9303 new MockClientSocketPoolManager); | |
9304 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 9297 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
9305 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); | 9298 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
9306 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); | 9299 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); |
9307 | 9300 |
9308 EXPECT_EQ(ERR_IO_PENDING, | 9301 EXPECT_EQ(ERR_IO_PENDING, |
9309 GroupNameTransactionHelper(tests[i].url, session.get())); | 9302 GroupNameTransactionHelper(tests[i].url, session.get())); |
9310 if (tests[i].ssl) | 9303 if (tests[i].ssl) |
9311 EXPECT_EQ(tests[i].expected_group_name, | 9304 EXPECT_EQ(tests[i].expected_group_name, |
9312 ssl_conn_pool->last_group_name_received()); | 9305 ssl_conn_pool->last_group_name_received()); |
9313 else | 9306 else |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9354 std::unique_ptr<HttpNetworkSession> session( | 9347 std::unique_ptr<HttpNetworkSession> session( |
9355 SetupSessionForGroupNameTests(&session_deps_)); | 9348 SetupSessionForGroupNameTests(&session_deps_)); |
9356 | 9349 |
9357 HttpNetworkSessionPeer peer(session.get()); | 9350 HttpNetworkSessionPeer peer(session.get()); |
9358 | 9351 |
9359 HostPortPair proxy_host("http_proxy", 80); | 9352 HostPortPair proxy_host("http_proxy", 80); |
9360 CaptureGroupNameHttpProxySocketPool* http_proxy_pool = | 9353 CaptureGroupNameHttpProxySocketPool* http_proxy_pool = |
9361 new CaptureGroupNameHttpProxySocketPool(NULL, NULL); | 9354 new CaptureGroupNameHttpProxySocketPool(NULL, NULL); |
9362 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 9355 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
9363 new CaptureGroupNameSSLSocketPool(NULL, NULL); | 9356 new CaptureGroupNameSSLSocketPool(NULL, NULL); |
9364 | 9357 auto mock_pool_manager = base::MakeUnique<MockClientSocketPoolManager>(); |
9365 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( | |
9366 new MockClientSocketPoolManager); | |
9367 mock_pool_manager->SetSocketPoolForHTTPProxy( | 9358 mock_pool_manager->SetSocketPoolForHTTPProxy( |
9368 proxy_host, base::WrapUnique(http_proxy_pool)); | 9359 proxy_host, base::WrapUnique(http_proxy_pool)); |
9369 mock_pool_manager->SetSocketPoolForSSLWithProxy( | 9360 mock_pool_manager->SetSocketPoolForSSLWithProxy( |
9370 proxy_host, base::WrapUnique(ssl_conn_pool)); | 9361 proxy_host, base::WrapUnique(ssl_conn_pool)); |
9371 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); | 9362 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); |
9372 | 9363 |
9373 EXPECT_EQ(ERR_IO_PENDING, | 9364 EXPECT_EQ(ERR_IO_PENDING, |
9374 GroupNameTransactionHelper(tests[i].url, session.get())); | 9365 GroupNameTransactionHelper(tests[i].url, session.get())); |
9375 if (tests[i].ssl) | 9366 if (tests[i].ssl) |
9376 EXPECT_EQ(tests[i].expected_group_name, | 9367 EXPECT_EQ(tests[i].expected_group_name, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9424 std::unique_ptr<HttpNetworkSession> session( | 9415 std::unique_ptr<HttpNetworkSession> session( |
9425 SetupSessionForGroupNameTests(&session_deps_)); | 9416 SetupSessionForGroupNameTests(&session_deps_)); |
9426 | 9417 |
9427 HttpNetworkSessionPeer peer(session.get()); | 9418 HttpNetworkSessionPeer peer(session.get()); |
9428 | 9419 |
9429 HostPortPair proxy_host("socks_proxy", 1080); | 9420 HostPortPair proxy_host("socks_proxy", 1080); |
9430 CaptureGroupNameSOCKSSocketPool* socks_conn_pool = | 9421 CaptureGroupNameSOCKSSocketPool* socks_conn_pool = |
9431 new CaptureGroupNameSOCKSSocketPool(NULL, NULL); | 9422 new CaptureGroupNameSOCKSSocketPool(NULL, NULL); |
9432 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 9423 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
9433 new CaptureGroupNameSSLSocketPool(NULL, NULL); | 9424 new CaptureGroupNameSSLSocketPool(NULL, NULL); |
9434 | 9425 auto mock_pool_manager = base::MakeUnique<MockClientSocketPoolManager>(); |
9435 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( | |
9436 new MockClientSocketPoolManager); | |
9437 mock_pool_manager->SetSocketPoolForSOCKSProxy( | 9426 mock_pool_manager->SetSocketPoolForSOCKSProxy( |
9438 proxy_host, base::WrapUnique(socks_conn_pool)); | 9427 proxy_host, base::WrapUnique(socks_conn_pool)); |
9439 mock_pool_manager->SetSocketPoolForSSLWithProxy( | 9428 mock_pool_manager->SetSocketPoolForSSLWithProxy( |
9440 proxy_host, base::WrapUnique(ssl_conn_pool)); | 9429 proxy_host, base::WrapUnique(ssl_conn_pool)); |
9441 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); | 9430 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); |
9442 | 9431 |
9443 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 9432 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
9444 | 9433 |
9445 EXPECT_EQ(ERR_IO_PENDING, | 9434 EXPECT_EQ(ERR_IO_PENDING, |
9446 GroupNameTransactionHelper(tests[i].url, session.get())); | 9435 GroupNameTransactionHelper(tests[i].url, session.get())); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9481 // bypass the cache, the DNS cache is not used. | 9470 // bypass the cache, the DNS cache is not used. |
9482 void HttpNetworkTransactionTest::BypassHostCacheOnRefreshHelper( | 9471 void HttpNetworkTransactionTest::BypassHostCacheOnRefreshHelper( |
9483 int load_flags) { | 9472 int load_flags) { |
9484 // Issue a request, asking to bypass the cache(s). | 9473 // Issue a request, asking to bypass the cache(s). |
9485 HttpRequestInfo request_info; | 9474 HttpRequestInfo request_info; |
9486 request_info.method = "GET"; | 9475 request_info.method = "GET"; |
9487 request_info.load_flags = load_flags; | 9476 request_info.load_flags = load_flags; |
9488 request_info.url = GURL("http://www.example.org/"); | 9477 request_info.url = GURL("http://www.example.org/"); |
9489 | 9478 |
9490 // Select a host resolver that does caching. | 9479 // Select a host resolver that does caching. |
9491 session_deps_.host_resolver.reset(new MockCachingHostResolver); | 9480 session_deps_.host_resolver = base::MakeUnique<MockCachingHostResolver>(); |
9492 | 9481 |
9493 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9482 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9494 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 9483 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
9495 | 9484 |
9496 // Warm up the host cache so it has an entry for "www.example.org". | 9485 // Warm up the host cache so it has an entry for "www.example.org". |
9497 AddressList addrlist; | 9486 AddressList addrlist; |
9498 TestCompletionCallback callback; | 9487 TestCompletionCallback callback; |
9499 std::unique_ptr<HostResolver::Request> request1; | 9488 std::unique_ptr<HostResolver::Request> request1; |
9500 int rv = session_deps_.host_resolver->Resolve( | 9489 int rv = session_deps_.host_resolver->Resolve( |
9501 HostResolver::RequestInfo(HostPortPair("www.example.org", 80)), | 9490 HostResolver::RequestInfo(HostPortPair("www.example.org", 80)), |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9876 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 9865 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
9877 element_readers.push_back(base::WrapUnique(fake_reader)); | 9866 element_readers.push_back(base::WrapUnique(fake_reader)); |
9878 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 9867 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
9879 | 9868 |
9880 HttpRequestInfo request; | 9869 HttpRequestInfo request; |
9881 request.method = "POST"; | 9870 request.method = "POST"; |
9882 request.url = GURL("http://www.example.org/upload"); | 9871 request.url = GURL("http://www.example.org/upload"); |
9883 request.upload_data_stream = &upload_data_stream; | 9872 request.upload_data_stream = &upload_data_stream; |
9884 | 9873 |
9885 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9874 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9886 std::unique_ptr<HttpNetworkTransaction> trans( | 9875 auto trans = |
9887 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9876 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
9888 | 9877 |
9889 StaticSocketDataProvider data; | 9878 StaticSocketDataProvider data; |
9890 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9879 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9891 | 9880 |
9892 TestCompletionCallback callback; | 9881 TestCompletionCallback callback; |
9893 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 9882 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
9894 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 9883 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9895 base::RunLoop().RunUntilIdle(); | 9884 base::RunLoop().RunUntilIdle(); |
9896 | 9885 |
9897 // Transaction is pending on request body initialization. | 9886 // Transaction is pending on request body initialization. |
(...skipping 981 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10879 StaticSocketDataProvider hanging_non_alternate_protocol_socket( | 10868 StaticSocketDataProvider hanging_non_alternate_protocol_socket( |
10880 NULL, 0, NULL, 0); | 10869 NULL, 0, NULL, 0); |
10881 hanging_non_alternate_protocol_socket.set_connect_data( | 10870 hanging_non_alternate_protocol_socket.set_connect_data( |
10882 never_finishing_connect); | 10871 never_finishing_connect); |
10883 session_deps_.socket_factory->AddSocketDataProvider( | 10872 session_deps_.socket_factory->AddSocketDataProvider( |
10884 &hanging_non_alternate_protocol_socket); | 10873 &hanging_non_alternate_protocol_socket); |
10885 | 10874 |
10886 TestCompletionCallback callback; | 10875 TestCompletionCallback callback; |
10887 | 10876 |
10888 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10877 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10889 std::unique_ptr<HttpNetworkTransaction> trans( | 10878 auto trans = |
10890 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10879 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
10891 | 10880 |
10892 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 10881 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
10893 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 10882 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10894 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 10883 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10895 | 10884 |
10896 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10885 const HttpResponseInfo* response = trans->GetResponseInfo(); |
10897 ASSERT_TRUE(response); | 10886 ASSERT_TRUE(response); |
10898 ASSERT_TRUE(response->headers); | 10887 ASSERT_TRUE(response->headers); |
10899 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10888 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10900 | 10889 |
10901 std::string response_data; | 10890 std::string response_data; |
10902 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); | 10891 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
10903 EXPECT_EQ("hello world", response_data); | 10892 EXPECT_EQ("hello world", response_data); |
10904 | 10893 |
10905 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10894 trans = |
| 10895 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
10906 | 10896 |
10907 rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 10897 rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
10908 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 10898 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10909 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 10899 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10910 | 10900 |
10911 response = trans->GetResponseInfo(); | 10901 response = trans->GetResponseInfo(); |
10912 ASSERT_TRUE(response); | 10902 ASSERT_TRUE(response); |
10913 ASSERT_TRUE(response->headers); | 10903 ASSERT_TRUE(response->headers); |
10914 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 10904 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
10915 EXPECT_TRUE(response->was_fetched_via_spdy); | 10905 EXPECT_TRUE(response->was_fetched_via_spdy); |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11062 | 11052 |
11063 // 2nd request is just a copy of the first one, over HTTP/1.1 again. | 11053 // 2nd request is just a copy of the first one, over HTTP/1.1 again. |
11064 StaticSocketDataProvider second_transaction(data_reads, arraysize(data_reads), | 11054 StaticSocketDataProvider second_transaction(data_reads, arraysize(data_reads), |
11065 NULL, 0); | 11055 NULL, 0); |
11066 session_deps_.socket_factory->AddSocketDataProvider(&second_transaction); | 11056 session_deps_.socket_factory->AddSocketDataProvider(&second_transaction); |
11067 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 11057 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
11068 | 11058 |
11069 TestCompletionCallback callback; | 11059 TestCompletionCallback callback; |
11070 | 11060 |
11071 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11061 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11072 std::unique_ptr<HttpNetworkTransaction> trans( | 11062 auto trans = |
11073 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11063 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
11074 | 11064 |
11075 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 11065 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
11076 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 11066 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11077 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 11067 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11078 | 11068 |
11079 const HttpResponseInfo* response = trans->GetResponseInfo(); | 11069 const HttpResponseInfo* response = trans->GetResponseInfo(); |
11080 ASSERT_TRUE(response); | 11070 ASSERT_TRUE(response); |
11081 ASSERT_TRUE(response->headers); | 11071 ASSERT_TRUE(response->headers); |
11082 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 11072 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
11083 | 11073 |
11084 std::string response_data; | 11074 std::string response_data; |
11085 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); | 11075 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
11086 EXPECT_EQ("hello world", response_data); | 11076 EXPECT_EQ("hello world", response_data); |
11087 | 11077 |
11088 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11078 trans = |
| 11079 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
11089 | 11080 |
11090 rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 11081 rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
11091 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 11082 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11092 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 11083 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11093 | 11084 |
11094 response = trans->GetResponseInfo(); | 11085 response = trans->GetResponseInfo(); |
11095 ASSERT_TRUE(response); | 11086 ASSERT_TRUE(response); |
11096 ASSERT_TRUE(response->headers); | 11087 ASSERT_TRUE(response->headers); |
11097 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 11088 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
11098 EXPECT_FALSE(response->was_fetched_via_spdy); | 11089 EXPECT_FALSE(response->was_fetched_via_spdy); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11130 class CapturingProxyResolverFactory : public ProxyResolverFactory { | 11121 class CapturingProxyResolverFactory : public ProxyResolverFactory { |
11131 public: | 11122 public: |
11132 explicit CapturingProxyResolverFactory(CapturingProxyResolver* resolver) | 11123 explicit CapturingProxyResolverFactory(CapturingProxyResolver* resolver) |
11133 : ProxyResolverFactory(false), resolver_(resolver) {} | 11124 : ProxyResolverFactory(false), resolver_(resolver) {} |
11134 | 11125 |
11135 int CreateProxyResolver( | 11126 int CreateProxyResolver( |
11136 const scoped_refptr<ProxyResolverScriptData>& pac_script, | 11127 const scoped_refptr<ProxyResolverScriptData>& pac_script, |
11137 std::unique_ptr<ProxyResolver>* resolver, | 11128 std::unique_ptr<ProxyResolver>* resolver, |
11138 const net::CompletionCallback& callback, | 11129 const net::CompletionCallback& callback, |
11139 std::unique_ptr<Request>* request) override { | 11130 std::unique_ptr<Request>* request) override { |
11140 resolver->reset(new ForwardingProxyResolver(resolver_)); | 11131 *resolver = base::MakeUnique<ForwardingProxyResolver>(resolver_); |
11141 return OK; | 11132 return OK; |
11142 } | 11133 } |
11143 | 11134 |
11144 private: | 11135 private: |
11145 ProxyResolver* resolver_; | 11136 ProxyResolver* resolver_; |
11146 }; | 11137 }; |
11147 | 11138 |
11148 // Test that proxy is resolved using the origin url, | 11139 // Test that proxy is resolved using the origin url, |
11149 // regardless of the alternative server. | 11140 // regardless of the alternative server. |
11150 TEST_F(HttpNetworkTransactionTest, UseOriginNotAlternativeForProxy) { | 11141 TEST_F(HttpNetworkTransactionTest, UseOriginNotAlternativeForProxy) { |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11230 // Origin host bypasses proxy, no resolution should have happened. | 11221 // Origin host bypasses proxy, no resolution should have happened. |
11231 ASSERT_TRUE(capturing_proxy_resolver.resolved().empty()); | 11222 ASSERT_TRUE(capturing_proxy_resolver.resolved().empty()); |
11232 } | 11223 } |
11233 | 11224 |
11234 TEST_F(HttpNetworkTransactionTest, UseAlternativeServiceForTunneledNpnSpdy) { | 11225 TEST_F(HttpNetworkTransactionTest, UseAlternativeServiceForTunneledNpnSpdy) { |
11235 ProxyConfig proxy_config; | 11226 ProxyConfig proxy_config; |
11236 proxy_config.set_auto_detect(true); | 11227 proxy_config.set_auto_detect(true); |
11237 proxy_config.set_pac_url(GURL("http://fooproxyurl")); | 11228 proxy_config.set_pac_url(GURL("http://fooproxyurl")); |
11238 | 11229 |
11239 CapturingProxyResolver capturing_proxy_resolver; | 11230 CapturingProxyResolver capturing_proxy_resolver; |
11240 session_deps_.proxy_service.reset( | 11231 session_deps_.proxy_service = base::MakeUnique<ProxyService>( |
11241 new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), | 11232 base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), |
11242 base::MakeUnique<CapturingProxyResolverFactory>( | 11233 base::MakeUnique<CapturingProxyResolverFactory>( |
11243 &capturing_proxy_resolver), | 11234 &capturing_proxy_resolver), |
11244 NULL)); | 11235 nullptr); |
11245 TestNetLog net_log; | 11236 TestNetLog net_log; |
11246 session_deps_.net_log = &net_log; | 11237 session_deps_.net_log = &net_log; |
11247 | 11238 |
11248 HttpRequestInfo request; | 11239 HttpRequestInfo request; |
11249 request.method = "GET"; | 11240 request.method = "GET"; |
11250 request.url = GURL("https://www.example.org/"); | 11241 request.url = GURL("https://www.example.org/"); |
11251 | 11242 |
11252 MockRead data_reads[] = { | 11243 MockRead data_reads[] = { |
11253 MockRead("HTTP/1.1 200 OK\r\n"), | 11244 MockRead("HTTP/1.1 200 OK\r\n"), |
11254 MockRead(kAlternativeServiceHttpHeader), | 11245 MockRead(kAlternativeServiceHttpHeader), |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11294 StaticSocketDataProvider hanging_non_alternate_protocol_socket( | 11285 StaticSocketDataProvider hanging_non_alternate_protocol_socket( |
11295 NULL, 0, NULL, 0); | 11286 NULL, 0, NULL, 0); |
11296 hanging_non_alternate_protocol_socket.set_connect_data( | 11287 hanging_non_alternate_protocol_socket.set_connect_data( |
11297 never_finishing_connect); | 11288 never_finishing_connect); |
11298 session_deps_.socket_factory->AddSocketDataProvider( | 11289 session_deps_.socket_factory->AddSocketDataProvider( |
11299 &hanging_non_alternate_protocol_socket); | 11290 &hanging_non_alternate_protocol_socket); |
11300 | 11291 |
11301 TestCompletionCallback callback; | 11292 TestCompletionCallback callback; |
11302 | 11293 |
11303 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11294 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11304 std::unique_ptr<HttpNetworkTransaction> trans( | 11295 auto trans = |
11305 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11296 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
11306 | 11297 |
11307 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 11298 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
11308 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 11299 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11309 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 11300 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11310 | 11301 |
11311 const HttpResponseInfo* response = trans->GetResponseInfo(); | 11302 const HttpResponseInfo* response = trans->GetResponseInfo(); |
11312 ASSERT_TRUE(response); | 11303 ASSERT_TRUE(response); |
11313 ASSERT_TRUE(response->headers); | 11304 ASSERT_TRUE(response->headers); |
11314 EXPECT_EQ("HTTP/0.9 200 OK", response->headers->GetStatusLine()); | 11305 EXPECT_EQ("HTTP/0.9 200 OK", response->headers->GetStatusLine()); |
11315 EXPECT_FALSE(response->was_fetched_via_spdy); | 11306 EXPECT_FALSE(response->was_fetched_via_spdy); |
11316 EXPECT_TRUE(response->was_alpn_negotiated); | 11307 EXPECT_TRUE(response->was_alpn_negotiated); |
11317 | 11308 |
11318 std::string response_data; | 11309 std::string response_data; |
11319 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); | 11310 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
11320 EXPECT_EQ("hello world", response_data); | 11311 EXPECT_EQ("hello world", response_data); |
11321 | 11312 |
11322 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11313 trans = |
| 11314 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
11323 | 11315 |
11324 rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 11316 rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
11325 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 11317 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11326 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 11318 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11327 | 11319 |
11328 response = trans->GetResponseInfo(); | 11320 response = trans->GetResponseInfo(); |
11329 ASSERT_TRUE(response); | 11321 ASSERT_TRUE(response); |
11330 ASSERT_TRUE(response->headers); | 11322 ASSERT_TRUE(response->headers); |
11331 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 11323 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
11332 EXPECT_TRUE(response->was_fetched_via_spdy); | 11324 EXPECT_TRUE(response->was_fetched_via_spdy); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11380 }; | 11372 }; |
11381 | 11373 |
11382 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, | 11374 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, |
11383 arraysize(spdy_writes)); | 11375 arraysize(spdy_writes)); |
11384 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 11376 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
11385 | 11377 |
11386 TestCompletionCallback callback; | 11378 TestCompletionCallback callback; |
11387 | 11379 |
11388 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11380 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11389 | 11381 |
11390 std::unique_ptr<HttpNetworkTransaction> trans( | 11382 auto trans = |
11391 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11383 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
11392 | 11384 |
11393 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 11385 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
11394 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 11386 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11395 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 11387 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11396 | 11388 |
11397 const HttpResponseInfo* response = trans->GetResponseInfo(); | 11389 const HttpResponseInfo* response = trans->GetResponseInfo(); |
11398 ASSERT_TRUE(response); | 11390 ASSERT_TRUE(response); |
11399 ASSERT_TRUE(response->headers); | 11391 ASSERT_TRUE(response->headers); |
11400 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 11392 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
11401 | 11393 |
11402 std::string response_data; | 11394 std::string response_data; |
11403 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); | 11395 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
11404 EXPECT_EQ("hello world", response_data); | 11396 EXPECT_EQ("hello world", response_data); |
11405 | 11397 |
11406 // Set up an initial SpdySession in the pool to reuse. | 11398 // Set up an initial SpdySession in the pool to reuse. |
11407 HostPortPair host_port_pair("www.example.org", 443); | 11399 HostPortPair host_port_pair("www.example.org", 443); |
11408 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 11400 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
11409 PRIVACY_MODE_DISABLED); | 11401 PRIVACY_MODE_DISABLED); |
11410 base::WeakPtr<SpdySession> spdy_session = | 11402 base::WeakPtr<SpdySession> spdy_session = |
11411 CreateSecureSpdySession(session.get(), key, NetLogWithSource()); | 11403 CreateSecureSpdySession(session.get(), key, NetLogWithSource()); |
11412 | 11404 |
11413 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11405 trans = |
| 11406 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
11414 | 11407 |
11415 rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 11408 rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
11416 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 11409 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
11417 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 11410 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
11418 | 11411 |
11419 response = trans->GetResponseInfo(); | 11412 response = trans->GetResponseInfo(); |
11420 ASSERT_TRUE(response); | 11413 ASSERT_TRUE(response); |
11421 ASSERT_TRUE(response->headers); | 11414 ASSERT_TRUE(response->headers); |
11422 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 11415 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
11423 EXPECT_TRUE(response->was_fetched_via_spdy); | 11416 EXPECT_TRUE(response->was_fetched_via_spdy); |
(...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12313 } | 12306 } |
12314 | 12307 |
12315 // Add an SSL sequence if necessary. | 12308 // Add an SSL sequence if necessary. |
12316 if (round >= test_config.first_ssl_round) | 12309 if (round >= test_config.first_ssl_round) |
12317 session_deps_.socket_factory->AddSSLSocketDataProvider( | 12310 session_deps_.socket_factory->AddSSLSocketDataProvider( |
12318 &ssl_socket_data_provider); | 12311 &ssl_socket_data_provider); |
12319 } | 12312 } |
12320 | 12313 |
12321 std::vector<std::unique_ptr<StaticSocketDataProvider>> data_providers; | 12314 std::vector<std::unique_ptr<StaticSocketDataProvider>> data_providers; |
12322 for (size_t i = 0; i < mock_reads.size(); ++i) { | 12315 for (size_t i = 0; i < mock_reads.size(); ++i) { |
12323 data_providers.push_back(base::WrapUnique(new StaticSocketDataProvider( | 12316 data_providers.push_back(base::MakeUnique<StaticSocketDataProvider>( |
12324 mock_reads[i].data(), mock_reads[i].size(), mock_writes[i].data(), | 12317 mock_reads[i].data(), mock_reads[i].size(), mock_writes[i].data(), |
12325 mock_writes[i].size()))); | 12318 mock_writes[i].size())); |
12326 session_deps_.socket_factory->AddSocketDataProvider( | 12319 session_deps_.socket_factory->AddSocketDataProvider( |
12327 data_providers.back().get()); | 12320 data_providers.back().get()); |
12328 } | 12321 } |
12329 | 12322 |
12330 // Transaction must be created after DataProviders, so it's destroyed before | 12323 // Transaction must be created after DataProviders, so it's destroyed before |
12331 // they are as well. | 12324 // they are as well. |
12332 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 12325 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
12333 | 12326 |
12334 for (int round = 0; round < test_config.num_auth_rounds; ++round) { | 12327 for (int round = 0; round < test_config.num_auth_rounds; ++round) { |
12335 SCOPED_TRACE(round); | 12328 SCOPED_TRACE(round); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12393 | 12386 |
12394 // Use a TCP Socket Pool with only one connection per group. This is used | 12387 // Use a TCP Socket Pool with only one connection per group. This is used |
12395 // to validate that the TCP socket is not released to the pool between | 12388 // to validate that the TCP socket is not released to the pool between |
12396 // each round of multi-round authentication. | 12389 // each round of multi-round authentication. |
12397 HttpNetworkSessionPeer session_peer(session.get()); | 12390 HttpNetworkSessionPeer session_peer(session.get()); |
12398 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( | 12391 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( |
12399 50, // Max sockets for pool | 12392 50, // Max sockets for pool |
12400 1, // Max sockets per group | 12393 1, // Max sockets per group |
12401 session_deps_.host_resolver.get(), session_deps_.socket_factory.get(), | 12394 session_deps_.host_resolver.get(), session_deps_.socket_factory.get(), |
12402 NULL, session_deps_.net_log); | 12395 NULL, session_deps_.net_log); |
12403 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( | 12396 auto mock_pool_manager = base::MakeUnique<MockClientSocketPoolManager>(); |
12404 new MockClientSocketPoolManager); | |
12405 mock_pool_manager->SetTransportSocketPool(transport_pool); | 12397 mock_pool_manager->SetTransportSocketPool(transport_pool); |
12406 session_peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); | 12398 session_peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); |
12407 | 12399 |
12408 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 12400 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
12409 TestCompletionCallback callback; | 12401 TestCompletionCallback callback; |
12410 | 12402 |
12411 const MockWrite kGet( | 12403 const MockWrite kGet( |
12412 "GET / HTTP/1.1\r\n" | 12404 "GET / HTTP/1.1\r\n" |
12413 "Host: www.example.com\r\n" | 12405 "Host: www.example.com\r\n" |
12414 "Connection: keep-alive\r\n\r\n"); | 12406 "Connection: keep-alive\r\n\r\n"); |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12681 MockRead(SYNCHRONOUS, "hello world"), | 12673 MockRead(SYNCHRONOUS, "hello world"), |
12682 MockRead(SYNCHRONOUS, OK), | 12674 MockRead(SYNCHRONOUS, OK), |
12683 }; | 12675 }; |
12684 | 12676 |
12685 HttpRequestInfo request; | 12677 HttpRequestInfo request; |
12686 request.method = "GET"; | 12678 request.method = "GET"; |
12687 request.url = GURL("http://www.example.org/"); | 12679 request.url = GURL("http://www.example.org/"); |
12688 | 12680 |
12689 session_deps_.host_resolver->set_synchronous_mode(true); | 12681 session_deps_.host_resolver->set_synchronous_mode(true); |
12690 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12682 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12691 std::unique_ptr<HttpNetworkTransaction> trans( | 12683 auto trans = |
12692 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12684 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
12693 | 12685 |
12694 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 12686 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
12695 data.set_connect_data(mock_connect); | 12687 data.set_connect_data(mock_connect); |
12696 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12688 session_deps_.socket_factory->AddSocketDataProvider(&data); |
12697 | 12689 |
12698 TestCompletionCallback callback; | 12690 TestCompletionCallback callback; |
12699 | 12691 |
12700 BoundTestNetLog log; | 12692 BoundTestNetLog log; |
12701 int rv = trans->Start(&request, callback.callback(), log.bound()); | 12693 int rv = trans->Start(&request, callback.callback(), log.bound()); |
12702 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 12694 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13430 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 13422 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
13431 HostPortPair("proxy", 70), &client_cert, &client_private_key)); | 13423 HostPortPair("proxy", 70), &client_cert, &client_private_key)); |
13432 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 13424 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
13433 HostPortPair("www.example.com", 443), &client_cert, | 13425 HostPortPair("www.example.com", 443), &client_cert, |
13434 &client_private_key)); | 13426 &client_private_key)); |
13435 } | 13427 } |
13436 } | 13428 } |
13437 | 13429 |
13438 TEST_F(HttpNetworkTransactionTest, UseIPConnectionPooling) { | 13430 TEST_F(HttpNetworkTransactionTest, UseIPConnectionPooling) { |
13439 // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 13431 // Set up a special HttpNetworkSession with a MockCachingHostResolver. |
13440 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 13432 session_deps_.host_resolver = base::MakeUnique<MockCachingHostResolver>(); |
13441 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13433 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
13442 | 13434 |
13443 AddSSLSocketData(); | 13435 AddSSLSocketData(); |
13444 | 13436 |
13445 SpdySerializedFrame host1_req( | 13437 SpdySerializedFrame host1_req( |
13446 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 13438 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
13447 spdy_util_.UpdateWithStreamDestruction(1); | 13439 spdy_util_.UpdateWithStreamDestruction(1); |
13448 SpdySerializedFrame host2_req( | 13440 SpdySerializedFrame host2_req( |
13449 spdy_util_.ConstructSpdyGet("https://mail.example.com", 3, LOWEST)); | 13441 spdy_util_.ConstructSpdyGet("https://mail.example.com", 3, LOWEST)); |
13450 MockWrite spdy_writes[] = { | 13442 MockWrite spdy_writes[] = { |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13515 ASSERT_TRUE(response->headers); | 13507 ASSERT_TRUE(response->headers); |
13516 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 13508 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
13517 EXPECT_TRUE(response->was_fetched_via_spdy); | 13509 EXPECT_TRUE(response->was_fetched_via_spdy); |
13518 EXPECT_TRUE(response->was_alpn_negotiated); | 13510 EXPECT_TRUE(response->was_alpn_negotiated); |
13519 ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk()); | 13511 ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk()); |
13520 EXPECT_EQ("hello!", response_data); | 13512 EXPECT_EQ("hello!", response_data); |
13521 } | 13513 } |
13522 | 13514 |
13523 TEST_F(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { | 13515 TEST_F(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { |
13524 // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 13516 // Set up a special HttpNetworkSession with a MockCachingHostResolver. |
13525 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 13517 session_deps_.host_resolver = base::MakeUnique<MockCachingHostResolver>(); |
13526 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13518 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
13527 | 13519 |
13528 AddSSLSocketData(); | 13520 AddSSLSocketData(); |
13529 | 13521 |
13530 SpdySerializedFrame host1_req( | 13522 SpdySerializedFrame host1_req( |
13531 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 13523 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
13532 spdy_util_.UpdateWithStreamDestruction(1); | 13524 spdy_util_.UpdateWithStreamDestruction(1); |
13533 SpdySerializedFrame host2_req( | 13525 SpdySerializedFrame host2_req( |
13534 spdy_util_.ConstructSpdyGet("https://mail.example.com", 3, LOWEST)); | 13526 spdy_util_.ConstructSpdyGet("https://mail.example.com", 3, LOWEST)); |
13535 MockWrite spdy_writes[] = { | 13527 MockWrite spdy_writes[] = { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13597 // The server might not be able to serve an IP pooled request, and might send a | 13589 // The server might not be able to serve an IP pooled request, and might send a |
13598 // 421 Misdirected Request response status to indicate this. | 13590 // 421 Misdirected Request response status to indicate this. |
13599 // HttpNetworkTransaction should reset the request and retry without IP pooling. | 13591 // HttpNetworkTransaction should reset the request and retry without IP pooling. |
13600 TEST_F(HttpNetworkTransactionTest, RetryWithoutConnectionPooling) { | 13592 TEST_F(HttpNetworkTransactionTest, RetryWithoutConnectionPooling) { |
13601 // Two hosts resolve to the same IP address. | 13593 // Two hosts resolve to the same IP address. |
13602 const std::string ip_addr = "1.2.3.4"; | 13594 const std::string ip_addr = "1.2.3.4"; |
13603 IPAddress ip; | 13595 IPAddress ip; |
13604 ASSERT_TRUE(ip.AssignFromIPLiteral(ip_addr)); | 13596 ASSERT_TRUE(ip.AssignFromIPLiteral(ip_addr)); |
13605 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 13597 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
13606 | 13598 |
13607 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 13599 session_deps_.host_resolver = base::MakeUnique<MockCachingHostResolver>(); |
13608 session_deps_.host_resolver->rules()->AddRule("www.example.org", ip_addr); | 13600 session_deps_.host_resolver->rules()->AddRule("www.example.org", ip_addr); |
13609 session_deps_.host_resolver->rules()->AddRule("mail.example.org", ip_addr); | 13601 session_deps_.host_resolver->rules()->AddRule("mail.example.org", ip_addr); |
13610 | 13602 |
13611 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13603 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
13612 | 13604 |
13613 // Two requests on the first connection. | 13605 // Two requests on the first connection. |
13614 SpdySerializedFrame req1( | 13606 SpdySerializedFrame req1( |
13615 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 13607 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
13616 spdy_util_.UpdateWithStreamDestruction(1); | 13608 spdy_util_.UpdateWithStreamDestruction(1); |
13617 SpdySerializedFrame req2( | 13609 SpdySerializedFrame req2( |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13725 // Test that HTTP 421 responses are properly returned to the caller if received | 13717 // Test that HTTP 421 responses are properly returned to the caller if received |
13726 // on the retry as well. HttpNetworkTransaction should not infinite loop or lose | 13718 // on the retry as well. HttpNetworkTransaction should not infinite loop or lose |
13727 // portions of the response. | 13719 // portions of the response. |
13728 TEST_F(HttpNetworkTransactionTest, ReturnHTTP421OnRetry) { | 13720 TEST_F(HttpNetworkTransactionTest, ReturnHTTP421OnRetry) { |
13729 // Two hosts resolve to the same IP address. | 13721 // Two hosts resolve to the same IP address. |
13730 const std::string ip_addr = "1.2.3.4"; | 13722 const std::string ip_addr = "1.2.3.4"; |
13731 IPAddress ip; | 13723 IPAddress ip; |
13732 ASSERT_TRUE(ip.AssignFromIPLiteral(ip_addr)); | 13724 ASSERT_TRUE(ip.AssignFromIPLiteral(ip_addr)); |
13733 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 13725 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
13734 | 13726 |
13735 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 13727 session_deps_.host_resolver = base::MakeUnique<MockCachingHostResolver>(); |
13736 session_deps_.host_resolver->rules()->AddRule("www.example.org", ip_addr); | 13728 session_deps_.host_resolver->rules()->AddRule("www.example.org", ip_addr); |
13737 session_deps_.host_resolver->rules()->AddRule("mail.example.org", ip_addr); | 13729 session_deps_.host_resolver->rules()->AddRule("mail.example.org", ip_addr); |
13738 | 13730 |
13739 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13731 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
13740 | 13732 |
13741 // Two requests on the first connection. | 13733 // Two requests on the first connection. |
13742 SpdySerializedFrame req1( | 13734 SpdySerializedFrame req1( |
13743 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 13735 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
13744 spdy_util_.UpdateWithStreamDestruction(1); | 13736 spdy_util_.UpdateWithStreamDestruction(1); |
13745 SpdySerializedFrame req2( | 13737 SpdySerializedFrame req2( |
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14483 | 14475 |
14484 SequencedSocketData data2(reads2, arraysize(reads2), writes2, | 14476 SequencedSocketData data2(reads2, arraysize(reads2), writes2, |
14485 arraysize(writes2)); | 14477 arraysize(writes2)); |
14486 MockConnect connect_data2(ASYNC, OK); | 14478 MockConnect connect_data2(ASYNC, OK); |
14487 data2.set_connect_data(connect_data2); | 14479 data2.set_connect_data(connect_data2); |
14488 | 14480 |
14489 // Set up a proxy config that sends HTTP requests to a proxy, and | 14481 // Set up a proxy config that sends HTTP requests to a proxy, and |
14490 // all others direct. | 14482 // all others direct. |
14491 ProxyConfig proxy_config; | 14483 ProxyConfig proxy_config; |
14492 proxy_config.proxy_rules().ParseFromString("http=https://proxy:443"); | 14484 proxy_config.proxy_rules().ParseFromString("http=https://proxy:443"); |
14493 session_deps_.proxy_service.reset(new ProxyService( | 14485 session_deps_.proxy_service = base::MakeUnique<ProxyService>( |
14494 base::WrapUnique(new ProxyConfigServiceFixed(proxy_config)), nullptr, | 14486 base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), nullptr, |
14495 NULL)); | 14487 nullptr); |
14496 | 14488 |
14497 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy | 14489 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy |
14498 ssl1.next_proto = kProtoHTTP2; | 14490 ssl1.next_proto = kProtoHTTP2; |
14499 // Load a valid cert. Note, that this does not need to | 14491 // Load a valid cert. Note, that this does not need to |
14500 // be valid for proxy because the MockSSLClientSocket does | 14492 // be valid for proxy because the MockSSLClientSocket does |
14501 // not actually verify it. But SpdySession will use this | 14493 // not actually verify it. But SpdySession will use this |
14502 // to see if it is valid for the new origin | 14494 // to see if it is valid for the new origin |
14503 ssl1.cert = ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); | 14495 ssl1.cert = ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); |
14504 ASSERT_TRUE(ssl1.cert); | 14496 ASSERT_TRUE(ssl1.cert); |
14505 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); | 14497 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); |
14506 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 14498 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
14507 | 14499 |
14508 SSLSocketDataProvider ssl2(ASYNC, OK); // to the server | 14500 SSLSocketDataProvider ssl2(ASYNC, OK); // to the server |
14509 ssl2.next_proto = kProtoHTTP2; | 14501 ssl2.next_proto = kProtoHTTP2; |
14510 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 14502 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
14511 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 14503 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
14512 | 14504 |
14513 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 14505 session_deps_.host_resolver = base::MakeUnique<MockCachingHostResolver>(); |
14514 session_deps_.host_resolver->rules()->AddRule("news.example.org", ip_addr); | 14506 session_deps_.host_resolver->rules()->AddRule("news.example.org", ip_addr); |
14515 session_deps_.host_resolver->rules()->AddRule("proxy", ip_addr); | 14507 session_deps_.host_resolver->rules()->AddRule("proxy", ip_addr); |
14516 | 14508 |
14517 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); | 14509 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); |
14518 | 14510 |
14519 // Start the first transaction to set up the SpdySession | 14511 // Start the first transaction to set up the SpdySession |
14520 HttpRequestInfo request1; | 14512 HttpRequestInfo request1; |
14521 request1.method = "GET"; | 14513 request1.method = "GET"; |
14522 request1.url = GURL(url1); | 14514 request1.url = GURL(url1); |
14523 request1.load_flags = 0; | 14515 request1.load_flags = 0; |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14644 SpdySerializedFrame host1_resp_body( | 14636 SpdySerializedFrame host1_resp_body( |
14645 spdy_util_.ConstructSpdyDataFrame(1, true)); | 14637 spdy_util_.ConstructSpdyDataFrame(1, true)); |
14646 MockRead spdy1_reads[] = { | 14638 MockRead spdy1_reads[] = { |
14647 CreateMockRead(host1_resp, 1), CreateMockRead(host1_resp_body, 2), | 14639 CreateMockRead(host1_resp, 1), CreateMockRead(host1_resp_body, 2), |
14648 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 3), | 14640 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 3), |
14649 }; | 14641 }; |
14650 | 14642 |
14651 // Use a separate test instance for the separate SpdySession that will be | 14643 // Use a separate test instance for the separate SpdySession that will be |
14652 // created. | 14644 // created. |
14653 SpdyTestUtil spdy_util_2; | 14645 SpdyTestUtil spdy_util_2; |
14654 std::unique_ptr<SequencedSocketData> spdy1_data( | 14646 auto spdy1_data = base::MakeUnique<SequencedSocketData>( |
14655 new SequencedSocketData(spdy1_reads, arraysize(spdy1_reads), spdy1_writes, | 14647 spdy1_reads, arraysize(spdy1_reads), spdy1_writes, |
14656 arraysize(spdy1_writes))); | 14648 arraysize(spdy1_writes)); |
14657 session_deps_.socket_factory->AddSocketDataProvider(spdy1_data.get()); | 14649 session_deps_.socket_factory->AddSocketDataProvider(spdy1_data.get()); |
14658 | 14650 |
14659 SpdySerializedFrame host2_req( | 14651 SpdySerializedFrame host2_req( |
14660 spdy_util_2.ConstructSpdyGet("https://www.b.com", 1, DEFAULT_PRIORITY)); | 14652 spdy_util_2.ConstructSpdyGet("https://www.b.com", 1, DEFAULT_PRIORITY)); |
14661 MockWrite spdy2_writes[] = { | 14653 MockWrite spdy2_writes[] = { |
14662 CreateMockWrite(host2_req, 0), | 14654 CreateMockWrite(host2_req, 0), |
14663 }; | 14655 }; |
14664 SpdySerializedFrame host2_resp(spdy_util_2.ConstructSpdyGetReply(NULL, 0, 1)); | 14656 SpdySerializedFrame host2_resp(spdy_util_2.ConstructSpdyGetReply(NULL, 0, 1)); |
14665 SpdySerializedFrame host2_resp_body( | 14657 SpdySerializedFrame host2_resp_body( |
14666 spdy_util_2.ConstructSpdyDataFrame(1, true)); | 14658 spdy_util_2.ConstructSpdyDataFrame(1, true)); |
14667 MockRead spdy2_reads[] = { | 14659 MockRead spdy2_reads[] = { |
14668 CreateMockRead(host2_resp, 1), CreateMockRead(host2_resp_body, 2), | 14660 CreateMockRead(host2_resp, 1), CreateMockRead(host2_resp_body, 2), |
14669 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 3), | 14661 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 3), |
14670 }; | 14662 }; |
14671 | 14663 |
14672 std::unique_ptr<SequencedSocketData> spdy2_data( | 14664 auto spdy2_data = base::MakeUnique<SequencedSocketData>( |
14673 new SequencedSocketData(spdy2_reads, arraysize(spdy2_reads), spdy2_writes, | 14665 spdy2_reads, arraysize(spdy2_reads), spdy2_writes, |
14674 arraysize(spdy2_writes))); | 14666 arraysize(spdy2_writes)); |
14675 session_deps_.socket_factory->AddSocketDataProvider(spdy2_data.get()); | 14667 session_deps_.socket_factory->AddSocketDataProvider(spdy2_data.get()); |
14676 | 14668 |
14677 MockWrite http_write[] = { | 14669 MockWrite http_write[] = { |
14678 MockWrite("GET / HTTP/1.1\r\n" | 14670 MockWrite("GET / HTTP/1.1\r\n" |
14679 "Host: www.a.com\r\n" | 14671 "Host: www.a.com\r\n" |
14680 "Connection: keep-alive\r\n\r\n"), | 14672 "Connection: keep-alive\r\n\r\n"), |
14681 }; | 14673 }; |
14682 | 14674 |
14683 MockRead http_read[] = { | 14675 MockRead http_read[] = { |
14684 MockRead("HTTP/1.1 200 OK\r\n"), | 14676 MockRead("HTTP/1.1 200 OK\r\n"), |
14685 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 14677 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
14686 MockRead("Content-Length: 6\r\n\r\n"), | 14678 MockRead("Content-Length: 6\r\n\r\n"), |
14687 MockRead("hello!"), | 14679 MockRead("hello!"), |
14688 }; | 14680 }; |
14689 StaticSocketDataProvider http_data(http_read, arraysize(http_read), | 14681 StaticSocketDataProvider http_data(http_read, arraysize(http_read), |
14690 http_write, arraysize(http_write)); | 14682 http_write, arraysize(http_write)); |
14691 session_deps_.socket_factory->AddSocketDataProvider(&http_data); | 14683 session_deps_.socket_factory->AddSocketDataProvider(&http_data); |
14692 | 14684 |
14693 HostPortPair host_port_pair_a("www.a.com", 443); | 14685 HostPortPair host_port_pair_a("www.a.com", 443); |
14694 SpdySessionKey spdy_session_key_a( | 14686 SpdySessionKey spdy_session_key_a( |
14695 host_port_pair_a, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 14687 host_port_pair_a, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
14696 EXPECT_FALSE( | 14688 EXPECT_FALSE( |
14697 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 14689 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
14698 | 14690 |
14699 TestCompletionCallback callback; | 14691 TestCompletionCallback callback; |
14700 HttpRequestInfo request1; | 14692 HttpRequestInfo request1; |
14701 request1.method = "GET"; | 14693 request1.method = "GET"; |
14702 request1.url = GURL("https://www.a.com/"); | 14694 request1.url = GURL("https://www.a.com/"); |
14703 request1.load_flags = 0; | 14695 request1.load_flags = 0; |
14704 std::unique_ptr<HttpNetworkTransaction> trans( | 14696 auto trans = |
14705 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14697 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
14706 | 14698 |
14707 int rv = trans->Start(&request1, callback.callback(), NetLogWithSource()); | 14699 int rv = trans->Start(&request1, callback.callback(), NetLogWithSource()); |
14708 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 14700 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14709 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 14701 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
14710 | 14702 |
14711 const HttpResponseInfo* response = trans->GetResponseInfo(); | 14703 const HttpResponseInfo* response = trans->GetResponseInfo(); |
14712 ASSERT_TRUE(response); | 14704 ASSERT_TRUE(response); |
14713 ASSERT_TRUE(response->headers); | 14705 ASSERT_TRUE(response->headers); |
14714 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 14706 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
14715 EXPECT_TRUE(response->was_fetched_via_spdy); | 14707 EXPECT_TRUE(response->was_fetched_via_spdy); |
14716 EXPECT_TRUE(response->was_alpn_negotiated); | 14708 EXPECT_TRUE(response->was_alpn_negotiated); |
14717 | 14709 |
14718 std::string response_data; | 14710 std::string response_data; |
14719 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); | 14711 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
14720 EXPECT_EQ("hello!", response_data); | 14712 EXPECT_EQ("hello!", response_data); |
14721 trans.reset(); | 14713 trans.reset(); |
14722 EXPECT_TRUE( | 14714 EXPECT_TRUE( |
14723 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 14715 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
14724 | 14716 |
14725 HostPortPair host_port_pair_b("www.b.com", 443); | 14717 HostPortPair host_port_pair_b("www.b.com", 443); |
14726 SpdySessionKey spdy_session_key_b( | 14718 SpdySessionKey spdy_session_key_b( |
14727 host_port_pair_b, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 14719 host_port_pair_b, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
14728 EXPECT_FALSE( | 14720 EXPECT_FALSE( |
14729 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | 14721 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
14730 HttpRequestInfo request2; | 14722 HttpRequestInfo request2; |
14731 request2.method = "GET"; | 14723 request2.method = "GET"; |
14732 request2.url = GURL("https://www.b.com/"); | 14724 request2.url = GURL("https://www.b.com/"); |
14733 request2.load_flags = 0; | 14725 request2.load_flags = 0; |
14734 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14726 trans = |
| 14727 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
14735 | 14728 |
14736 rv = trans->Start(&request2, callback.callback(), NetLogWithSource()); | 14729 rv = trans->Start(&request2, callback.callback(), NetLogWithSource()); |
14737 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 14730 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14738 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 14731 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
14739 | 14732 |
14740 response = trans->GetResponseInfo(); | 14733 response = trans->GetResponseInfo(); |
14741 ASSERT_TRUE(response); | 14734 ASSERT_TRUE(response); |
14742 ASSERT_TRUE(response->headers); | 14735 ASSERT_TRUE(response->headers); |
14743 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 14736 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
14744 EXPECT_TRUE(response->was_fetched_via_spdy); | 14737 EXPECT_TRUE(response->was_fetched_via_spdy); |
14745 EXPECT_TRUE(response->was_alpn_negotiated); | 14738 EXPECT_TRUE(response->was_alpn_negotiated); |
14746 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); | 14739 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
14747 EXPECT_EQ("hello!", response_data); | 14740 EXPECT_EQ("hello!", response_data); |
14748 EXPECT_FALSE( | 14741 EXPECT_FALSE( |
14749 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 14742 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
14750 EXPECT_TRUE( | 14743 EXPECT_TRUE( |
14751 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | 14744 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
14752 | 14745 |
14753 HostPortPair host_port_pair_a1("www.a.com", 80); | 14746 HostPortPair host_port_pair_a1("www.a.com", 80); |
14754 SpdySessionKey spdy_session_key_a1( | 14747 SpdySessionKey spdy_session_key_a1( |
14755 host_port_pair_a1, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 14748 host_port_pair_a1, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
14756 EXPECT_FALSE( | 14749 EXPECT_FALSE( |
14757 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a1)); | 14750 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a1)); |
14758 HttpRequestInfo request3; | 14751 HttpRequestInfo request3; |
14759 request3.method = "GET"; | 14752 request3.method = "GET"; |
14760 request3.url = GURL("http://www.a.com/"); | 14753 request3.url = GURL("http://www.a.com/"); |
14761 request3.load_flags = 0; | 14754 request3.load_flags = 0; |
14762 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 14755 trans = |
| 14756 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
14763 | 14757 |
14764 rv = trans->Start(&request3, callback.callback(), NetLogWithSource()); | 14758 rv = trans->Start(&request3, callback.callback(), NetLogWithSource()); |
14765 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 14759 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
14766 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 14760 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
14767 | 14761 |
14768 response = trans->GetResponseInfo(); | 14762 response = trans->GetResponseInfo(); |
14769 ASSERT_TRUE(response); | 14763 ASSERT_TRUE(response); |
14770 ASSERT_TRUE(response->headers); | 14764 ASSERT_TRUE(response->headers); |
14771 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 14765 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
14772 EXPECT_FALSE(response->was_fetched_via_spdy); | 14766 EXPECT_FALSE(response->was_fetched_via_spdy); |
(...skipping 987 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15760 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 15754 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
15761 arraysize(data_writes)); | 15755 arraysize(data_writes)); |
15762 session_deps_.socket_factory->AddSocketDataProvider(&data); | 15756 session_deps_.socket_factory->AddSocketDataProvider(&data); |
15763 | 15757 |
15764 TestCompletionCallback callback; | 15758 TestCompletionCallback callback; |
15765 HttpRequestInfo request1; | 15759 HttpRequestInfo request1; |
15766 request1.method = "GET"; | 15760 request1.method = "GET"; |
15767 request1.url = GURL("http://www.foo.com/"); | 15761 request1.url = GURL("http://www.foo.com/"); |
15768 request1.load_flags = 0; | 15762 request1.load_flags = 0; |
15769 | 15763 |
15770 std::unique_ptr<HttpNetworkTransaction> trans1( | 15764 auto trans1 = |
15771 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15765 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
15772 int rv = trans1->Start(&request1, callback.callback(), NetLogWithSource()); | 15766 int rv = trans1->Start(&request1, callback.callback(), NetLogWithSource()); |
15773 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 15767 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
15774 | 15768 |
15775 rv = callback.WaitForResult(); | 15769 rv = callback.WaitForResult(); |
15776 EXPECT_THAT(rv, IsOk()); | 15770 EXPECT_THAT(rv, IsOk()); |
15777 | 15771 |
15778 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); | 15772 const HttpResponseInfo* response1 = trans1->GetResponseInfo(); |
15779 ASSERT_TRUE(response1); | 15773 ASSERT_TRUE(response1); |
15780 | 15774 |
15781 EXPECT_TRUE(response1->headers); | 15775 EXPECT_TRUE(response1->headers); |
15782 EXPECT_EQ("HTTP/1.1 200 Peachy", response1->headers->GetStatusLine()); | 15776 EXPECT_EQ("HTTP/1.1 200 Peachy", response1->headers->GetStatusLine()); |
15783 | 15777 |
15784 std::string response_data1; | 15778 std::string response_data1; |
15785 rv = ReadTransaction(trans1.get(), &response_data1); | 15779 rv = ReadTransaction(trans1.get(), &response_data1); |
15786 EXPECT_THAT(rv, IsOk()); | 15780 EXPECT_THAT(rv, IsOk()); |
15787 EXPECT_EQ("first response", response_data1); | 15781 EXPECT_EQ("first response", response_data1); |
15788 // Delete the transaction to release the socket back into the socket pool. | 15782 // Delete the transaction to release the socket back into the socket pool. |
15789 trans1.reset(); | 15783 trans1.reset(); |
15790 | 15784 |
15791 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15785 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15792 element_readers.push_back( | 15786 element_readers.push_back( |
15793 base::WrapUnique(new UploadBytesElementReader("foo", 3))); | 15787 base::MakeUnique<UploadBytesElementReader>("foo", 3)); |
15794 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15788 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15795 | 15789 |
15796 HttpRequestInfo request2; | 15790 HttpRequestInfo request2; |
15797 request2.method = "POST"; | 15791 request2.method = "POST"; |
15798 request2.url = GURL("http://www.foo.com/"); | 15792 request2.url = GURL("http://www.foo.com/"); |
15799 request2.upload_data_stream = &upload_data_stream; | 15793 request2.upload_data_stream = &upload_data_stream; |
15800 request2.load_flags = 0; | 15794 request2.load_flags = 0; |
15801 | 15795 |
15802 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 15796 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
15803 rv = trans2.Start(&request2, callback.callback(), NetLogWithSource()); | 15797 rv = trans2.Start(&request2, callback.callback(), NetLogWithSource()); |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16193 MockRead("Connection: Upgrade\r\n"), | 16187 MockRead("Connection: Upgrade\r\n"), |
16194 MockRead("Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n"), | 16188 MockRead("Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n"), |
16195 }; | 16189 }; |
16196 | 16190 |
16197 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 16191 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
16198 arraysize(data_writes)); | 16192 arraysize(data_writes)); |
16199 session_deps_.socket_factory->AddSocketDataProvider(&data); | 16193 session_deps_.socket_factory->AddSocketDataProvider(&data); |
16200 SSLSocketDataProvider ssl(ASYNC, OK); | 16194 SSLSocketDataProvider ssl(ASYNC, OK); |
16201 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 16195 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
16202 | 16196 |
16203 std::unique_ptr<HttpNetworkTransaction> trans( | 16197 auto trans = |
16204 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 16198 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
16205 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; | 16199 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; |
16206 trans->SetWebSocketHandshakeStreamCreateHelper( | 16200 trans->SetWebSocketHandshakeStreamCreateHelper( |
16207 &websocket_stream_create_helper); | 16201 &websocket_stream_create_helper); |
16208 | 16202 |
16209 { | 16203 { |
16210 TestCompletionCallback callback; | 16204 TestCompletionCallback callback; |
16211 | 16205 |
16212 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 16206 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
16213 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 16207 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
16214 | 16208 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16292 }; | 16286 }; |
16293 | 16287 |
16294 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 16288 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
16295 arraysize(data_writes)); | 16289 arraysize(data_writes)); |
16296 session_deps_.socket_factory->AddSocketDataProvider(&data); | 16290 session_deps_.socket_factory->AddSocketDataProvider(&data); |
16297 | 16291 |
16298 session->http_auth_cache()->Add( | 16292 session->http_auth_cache()->Add( |
16299 GURL("http://myproxy:70/"), "MyRealm1", HttpAuth::AUTH_SCHEME_BASIC, | 16293 GURL("http://myproxy:70/"), "MyRealm1", HttpAuth::AUTH_SCHEME_BASIC, |
16300 "Basic realm=MyRealm1", AuthCredentials(kFoo, kBar), "/"); | 16294 "Basic realm=MyRealm1", AuthCredentials(kFoo, kBar), "/"); |
16301 | 16295 |
16302 std::unique_ptr<HttpNetworkTransaction> trans( | 16296 auto trans = |
16303 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 16297 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
16304 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; | 16298 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; |
16305 trans->SetWebSocketHandshakeStreamCreateHelper( | 16299 trans->SetWebSocketHandshakeStreamCreateHelper( |
16306 &websocket_stream_create_helper); | 16300 &websocket_stream_create_helper); |
16307 | 16301 |
16308 TestCompletionCallback callback; | 16302 TestCompletionCallback callback; |
16309 | 16303 |
16310 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 16304 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
16311 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 16305 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
16312 | 16306 |
16313 rv = callback.WaitForResult(); | 16307 rv = callback.WaitForResult(); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16466 TEST_F(HttpNetworkTransactionTest, ThrottlingUnthrottled) { | 16460 TEST_F(HttpNetworkTransactionTest, ThrottlingUnthrottled) { |
16467 TestNetworkStreamThrottler* throttler(nullptr); | 16461 TestNetworkStreamThrottler* throttler(nullptr); |
16468 std::unique_ptr<HttpNetworkSession> session( | 16462 std::unique_ptr<HttpNetworkSession> session( |
16469 CreateSessionWithThrottler(&session_deps_, &throttler)); | 16463 CreateSessionWithThrottler(&session_deps_, &throttler)); |
16470 | 16464 |
16471 // Send a simple request and make sure it goes through. | 16465 // Send a simple request and make sure it goes through. |
16472 HttpRequestInfo request; | 16466 HttpRequestInfo request; |
16473 request.method = "GET"; | 16467 request.method = "GET"; |
16474 request.url = GURL("http://www.example.org/"); | 16468 request.url = GURL("http://www.example.org/"); |
16475 | 16469 |
16476 std::unique_ptr<HttpTransaction> trans( | 16470 auto trans = |
16477 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 16471 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
16478 | 16472 |
16479 MockWrite data_writes[] = { | 16473 MockWrite data_writes[] = { |
16480 MockWrite("GET / HTTP/1.1\r\n" | 16474 MockWrite("GET / HTTP/1.1\r\n" |
16481 "Host: www.example.org\r\n" | 16475 "Host: www.example.org\r\n" |
16482 "Connection: keep-alive\r\n\r\n"), | 16476 "Connection: keep-alive\r\n\r\n"), |
16483 }; | 16477 }; |
16484 MockRead data_reads[] = { | 16478 MockRead data_reads[] = { |
16485 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), | 16479 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
16486 MockRead(SYNCHRONOUS, OK), | 16480 MockRead(SYNCHRONOUS, OK), |
16487 }; | 16481 }; |
(...skipping 27 matching lines...) Expand all Loading... |
16515 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), | 16509 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
16516 MockRead(SYNCHRONOUS, OK), | 16510 MockRead(SYNCHRONOUS, OK), |
16517 }; | 16511 }; |
16518 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, | 16512 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, |
16519 arraysize(data_writes)); | 16513 arraysize(data_writes)); |
16520 session_deps_.socket_factory->AddSocketDataProvider(&reads); | 16514 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
16521 | 16515 |
16522 // Start a request that will be throttled at start; confirm it | 16516 // Start a request that will be throttled at start; confirm it |
16523 // doesn't complete. | 16517 // doesn't complete. |
16524 throttler->set_throttle_new_requests(true); | 16518 throttler->set_throttle_new_requests(true); |
16525 std::unique_ptr<HttpTransaction> trans( | 16519 auto trans = |
16526 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 16520 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
16527 | 16521 |
16528 TestCompletionCallback callback; | 16522 TestCompletionCallback callback; |
16529 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 16523 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
16530 EXPECT_EQ(ERR_IO_PENDING, rv); | 16524 EXPECT_EQ(ERR_IO_PENDING, rv); |
16531 | 16525 |
16532 base::RunLoop().RunUntilIdle(); | 16526 base::RunLoop().RunUntilIdle(); |
16533 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); | 16527 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); |
16534 EXPECT_FALSE(callback.have_result()); | 16528 EXPECT_FALSE(callback.have_result()); |
16535 | 16529 |
16536 // Confirm the request goes on to complete when unthrottled. | 16530 // Confirm the request goes on to complete when unthrottled. |
(...skipping 23 matching lines...) Expand all Loading... |
16560 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), | 16554 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
16561 MockRead(SYNCHRONOUS, OK), | 16555 MockRead(SYNCHRONOUS, OK), |
16562 }; | 16556 }; |
16563 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, | 16557 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, |
16564 arraysize(data_writes)); | 16558 arraysize(data_writes)); |
16565 session_deps_.socket_factory->AddSocketDataProvider(&reads); | 16559 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
16566 | 16560 |
16567 // Start a request that will be throttled at start; confirm it | 16561 // Start a request that will be throttled at start; confirm it |
16568 // doesn't complete. | 16562 // doesn't complete. |
16569 throttler->set_throttle_new_requests(true); | 16563 throttler->set_throttle_new_requests(true); |
16570 std::unique_ptr<HttpTransaction> trans( | 16564 auto trans = |
16571 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 16565 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
16572 | 16566 |
16573 TestCompletionCallback callback; | 16567 TestCompletionCallback callback; |
16574 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 16568 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
16575 EXPECT_EQ(ERR_IO_PENDING, rv); | 16569 EXPECT_EQ(ERR_IO_PENDING, rv); |
16576 | 16570 |
16577 base::RunLoop().RunUntilIdle(); | 16571 base::RunLoop().RunUntilIdle(); |
16578 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); | 16572 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); |
16579 EXPECT_FALSE(callback.have_result()); | 16573 EXPECT_FALSE(callback.have_result()); |
16580 | 16574 |
16581 EXPECT_EQ(1u, throttler->num_outstanding_requests()); | 16575 EXPECT_EQ(1u, throttler->num_outstanding_requests()); |
(...skipping 19 matching lines...) Expand all Loading... |
16601 }; | 16595 }; |
16602 MockRead data_reads[] = { | 16596 MockRead data_reads[] = { |
16603 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), | 16597 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
16604 MockRead(SYNCHRONOUS, OK), | 16598 MockRead(SYNCHRONOUS, OK), |
16605 }; | 16599 }; |
16606 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, | 16600 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, |
16607 arraysize(data_writes)); | 16601 arraysize(data_writes)); |
16608 session_deps_.socket_factory->AddSocketDataProvider(&reads); | 16602 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
16609 | 16603 |
16610 throttler->set_throttle_new_requests(true); | 16604 throttler->set_throttle_new_requests(true); |
16611 std::unique_ptr<HttpTransaction> trans( | 16605 auto trans = base::MakeUnique<HttpNetworkTransaction>(IDLE, session.get()); |
16612 new HttpNetworkTransaction(IDLE, session.get())); | |
16613 // Start the transaction to associate a throttle with it. | 16606 // Start the transaction to associate a throttle with it. |
16614 TestCompletionCallback callback; | 16607 TestCompletionCallback callback; |
16615 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 16608 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
16616 EXPECT_EQ(ERR_IO_PENDING, rv); | 16609 EXPECT_EQ(ERR_IO_PENDING, rv); |
16617 | 16610 |
16618 EXPECT_EQ(0, throttler->num_set_priority_calls()); | 16611 EXPECT_EQ(0, throttler->num_set_priority_calls()); |
16619 trans->SetPriority(LOW); | 16612 trans->SetPriority(LOW); |
16620 EXPECT_EQ(1, throttler->num_set_priority_calls()); | 16613 EXPECT_EQ(1, throttler->num_set_priority_calls()); |
16621 EXPECT_EQ(LOW, throttler->last_priority_set()); | 16614 EXPECT_EQ(LOW, throttler->last_priority_set()); |
16622 | 16615 |
(...skipping 28 matching lines...) Expand all Loading... |
16651 arraysize(data_writes)); | 16644 arraysize(data_writes)); |
16652 session_deps_.socket_factory->AddSocketDataProvider(&reads); | 16645 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
16653 | 16646 |
16654 StaticSocketDataProvider reads1(data_reads, arraysize(data_reads), | 16647 StaticSocketDataProvider reads1(data_reads, arraysize(data_reads), |
16655 data_writes, arraysize(data_writes)); | 16648 data_writes, arraysize(data_writes)); |
16656 session_deps_.socket_factory->AddSocketDataProvider(&reads1); | 16649 session_deps_.socket_factory->AddSocketDataProvider(&reads1); |
16657 | 16650 |
16658 // Start a request that will be throttled at start; confirm it | 16651 // Start a request that will be throttled at start; confirm it |
16659 // doesn't complete. | 16652 // doesn't complete. |
16660 throttler->set_throttle_new_requests(true); | 16653 throttler->set_throttle_new_requests(true); |
16661 std::unique_ptr<HttpTransaction> trans( | 16654 auto trans = |
16662 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 16655 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
16663 | 16656 |
16664 TestCompletionCallback callback; | 16657 TestCompletionCallback callback; |
16665 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 16658 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
16666 EXPECT_EQ(ERR_IO_PENDING, rv); | 16659 EXPECT_EQ(ERR_IO_PENDING, rv); |
16667 | 16660 |
16668 base::RunLoop().RunUntilIdle(); | 16661 base::RunLoop().RunUntilIdle(); |
16669 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); | 16662 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); |
16670 EXPECT_FALSE(callback.have_result()); | 16663 EXPECT_FALSE(callback.have_result()); |
16671 | 16664 |
16672 // Create a new request, call SetPriority on it to unthrottle, | 16665 // Create a new request, call SetPriority on it to unthrottle, |
16673 // and make sure that allows the original request to complete. | 16666 // and make sure that allows the original request to complete. |
16674 std::unique_ptr<HttpTransaction> trans1( | 16667 auto trans1 = base::MakeUnique<HttpNetworkTransaction>(LOW, session.get()); |
16675 new HttpNetworkTransaction(LOW, session.get())); | |
16676 throttler->set_priority_change_closure( | 16668 throttler->set_priority_change_closure( |
16677 base::Bind(&TestNetworkStreamThrottler::UnthrottleAllRequests, | 16669 base::Bind(&TestNetworkStreamThrottler::UnthrottleAllRequests, |
16678 base::Unretained(throttler))); | 16670 base::Unretained(throttler))); |
16679 | 16671 |
16680 // Start the transaction to associate a throttle with it. | 16672 // Start the transaction to associate a throttle with it. |
16681 TestCompletionCallback callback1; | 16673 TestCompletionCallback callback1; |
16682 rv = trans1->Start(&request, callback1.callback(), NetLogWithSource()); | 16674 rv = trans1->Start(&request, callback1.callback(), NetLogWithSource()); |
16683 EXPECT_EQ(ERR_IO_PENDING, rv); | 16675 EXPECT_EQ(ERR_IO_PENDING, rv); |
16684 | 16676 |
16685 trans1->SetPriority(IDLE); | 16677 trans1->SetPriority(IDLE); |
16686 | 16678 |
16687 base::RunLoop().RunUntilIdle(); | 16679 base::RunLoop().RunUntilIdle(); |
16688 ASSERT_TRUE(callback.have_result()); | 16680 ASSERT_TRUE(callback.have_result()); |
16689 EXPECT_EQ(OK, callback.WaitForResult()); | 16681 EXPECT_EQ(OK, callback.WaitForResult()); |
16690 ASSERT_TRUE(callback1.have_result()); | 16682 ASSERT_TRUE(callback1.have_result()); |
16691 EXPECT_EQ(OK, callback1.WaitForResult()); | 16683 EXPECT_EQ(OK, callback1.WaitForResult()); |
16692 } | 16684 } |
16693 | 16685 |
16694 // Transaction will be destroyed when the unique_ptr goes out of scope. | 16686 // Transaction will be destroyed when the unique_ptr goes out of scope. |
16695 void DestroyTransaction(std::unique_ptr<HttpTransaction> transaction) {} | 16687 void DestroyTransaction(std::unique_ptr<HttpNetworkTransaction> transaction) {} |
16696 | 16688 |
16697 // Confirm that destroying a transaction from a SetPriority call by the | 16689 // Confirm that destroying a transaction from a SetPriority call by the |
16698 // throttler works properly. | 16690 // throttler works properly. |
16699 TEST_F(HttpNetworkTransactionTest, ThrottlingPrioritySetDestroy) { | 16691 TEST_F(HttpNetworkTransactionTest, ThrottlingPrioritySetDestroy) { |
16700 TestNetworkStreamThrottler* throttler(nullptr); | 16692 TestNetworkStreamThrottler* throttler(nullptr); |
16701 std::unique_ptr<HttpNetworkSession> session( | 16693 std::unique_ptr<HttpNetworkSession> session( |
16702 CreateSessionWithThrottler(&session_deps_, &throttler)); | 16694 CreateSessionWithThrottler(&session_deps_, &throttler)); |
16703 | 16695 |
16704 // Send a simple request and make sure it goes through. | 16696 // Send a simple request and make sure it goes through. |
16705 HttpRequestInfo request; | 16697 HttpRequestInfo request; |
(...skipping 13 matching lines...) Expand all Loading... |
16719 arraysize(data_writes)); | 16711 arraysize(data_writes)); |
16720 session_deps_.socket_factory->AddSocketDataProvider(&reads); | 16712 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
16721 | 16713 |
16722 StaticSocketDataProvider reads1(data_reads, arraysize(data_reads), | 16714 StaticSocketDataProvider reads1(data_reads, arraysize(data_reads), |
16723 data_writes, arraysize(data_writes)); | 16715 data_writes, arraysize(data_writes)); |
16724 session_deps_.socket_factory->AddSocketDataProvider(&reads1); | 16716 session_deps_.socket_factory->AddSocketDataProvider(&reads1); |
16725 | 16717 |
16726 // Start a request that will be throttled at start; confirm it | 16718 // Start a request that will be throttled at start; confirm it |
16727 // doesn't complete. | 16719 // doesn't complete. |
16728 throttler->set_throttle_new_requests(true); | 16720 throttler->set_throttle_new_requests(true); |
16729 std::unique_ptr<HttpTransaction> trans( | 16721 auto trans = |
16730 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 16722 base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); |
16731 | 16723 |
16732 TestCompletionCallback callback; | 16724 TestCompletionCallback callback; |
16733 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 16725 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
16734 EXPECT_EQ(ERR_IO_PENDING, rv); | 16726 EXPECT_EQ(ERR_IO_PENDING, rv); |
16735 | 16727 |
16736 base::RunLoop().RunUntilIdle(); | 16728 base::RunLoop().RunUntilIdle(); |
16737 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); | 16729 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); |
16738 EXPECT_FALSE(callback.have_result()); | 16730 EXPECT_FALSE(callback.have_result()); |
16739 | 16731 |
16740 // Arrange for the set priority call on the above transaction to delete | 16732 // Arrange for the set priority call on the above transaction to delete |
16741 // the transaction. | 16733 // the transaction. |
16742 HttpTransaction* trans_ptr(trans.get()); | 16734 HttpNetworkTransaction* trans_ptr(trans.get()); |
16743 throttler->set_priority_change_closure( | 16735 throttler->set_priority_change_closure( |
16744 base::Bind(&DestroyTransaction, base::Passed(&trans))); | 16736 base::Bind(&DestroyTransaction, base::Passed(&trans))); |
16745 | 16737 |
16746 // Call it and check results (partially a "doesn't crash" test). | 16738 // Call it and check results (partially a "doesn't crash" test). |
16747 trans_ptr->SetPriority(IDLE); | 16739 trans_ptr->SetPriority(IDLE); |
16748 trans_ptr = nullptr; // No longer a valid pointer. | 16740 trans_ptr = nullptr; // No longer a valid pointer. |
16749 | 16741 |
16750 base::RunLoop().RunUntilIdle(); | 16742 base::RunLoop().RunUntilIdle(); |
16751 ASSERT_FALSE(callback.have_result()); | 16743 ASSERT_FALSE(callback.have_result()); |
16752 } | 16744 } |
(...skipping 10 matching lines...) Expand all Loading... |
16763 ssl.token_binding_key_param = TB_PARAM_ECDSAP256; | 16755 ssl.token_binding_key_param = TB_PARAM_ECDSAP256; |
16764 ssl.next_proto = kProtoHTTP2; | 16756 ssl.next_proto = kProtoHTTP2; |
16765 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 16757 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
16766 | 16758 |
16767 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 16759 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
16768 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 16760 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
16769 MockRead reads[] = {CreateMockRead(resp), CreateMockRead(body), | 16761 MockRead reads[] = {CreateMockRead(resp), CreateMockRead(body), |
16770 MockRead(ASYNC, ERR_IO_PENDING)}; | 16762 MockRead(ASYNC, ERR_IO_PENDING)}; |
16771 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); | 16763 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); |
16772 session_deps_.socket_factory->AddSocketDataProvider(&data); | 16764 session_deps_.socket_factory->AddSocketDataProvider(&data); |
16773 session_deps_.channel_id_service.reset( | 16765 session_deps_.channel_id_service = |
16774 new ChannelIDService(new DefaultChannelIDStore(nullptr))); | 16766 base::MakeUnique<ChannelIDService>(new DefaultChannelIDStore(nullptr)); |
16775 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 16767 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
16776 | 16768 |
16777 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 16769 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
16778 TestCompletionCallback callback; | 16770 TestCompletionCallback callback; |
16779 EXPECT_EQ(ERR_IO_PENDING, | 16771 EXPECT_EQ(ERR_IO_PENDING, |
16780 trans.Start(&request, callback.callback(), NetLogWithSource())); | 16772 trans.Start(&request, callback.callback(), NetLogWithSource())); |
16781 | 16773 |
16782 NetTestSuite::GetScopedTaskEnvironment()->RunUntilIdle(); | 16774 NetTestSuite::GetScopedTaskEnvironment()->RunUntilIdle(); |
16783 | 16775 |
16784 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); | 16776 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16855 CheckContentEncodingMatching(&session_deps_, "identity;q=1, *;q=0", "gzip", | 16847 CheckContentEncodingMatching(&session_deps_, "identity;q=1, *;q=0", "gzip", |
16856 "", false); | 16848 "", false); |
16857 } | 16849 } |
16858 | 16850 |
16859 TEST_F(HttpNetworkTransactionTest, MatchContentEncoding4) { | 16851 TEST_F(HttpNetworkTransactionTest, MatchContentEncoding4) { |
16860 CheckContentEncodingMatching(&session_deps_, "identity;q=1, *;q=0", "gzip", | 16852 CheckContentEncodingMatching(&session_deps_, "identity;q=1, *;q=0", "gzip", |
16861 "www.foo.com/other", true); | 16853 "www.foo.com/other", true); |
16862 } | 16854 } |
16863 | 16855 |
16864 } // namespace net | 16856 } // namespace net |
OLD | NEW |