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> | 12 #include <memory> |
| 13 #include <set> |
13 #include <string> | 14 #include <string> |
14 #include <utility> | 15 #include <utility> |
15 #include <vector> | 16 #include <vector> |
16 | 17 |
17 #include "base/compiler_specific.h" | 18 #include "base/compiler_specific.h" |
18 #include "base/files/file_path.h" | 19 #include "base/files/file_path.h" |
19 #include "base/files/file_util.h" | 20 #include "base/files/file_util.h" |
20 #include "base/json/json_writer.h" | 21 #include "base/json/json_writer.h" |
21 #include "base/logging.h" | 22 #include "base/logging.h" |
22 #include "base/macros.h" | 23 #include "base/macros.h" |
23 #include "base/memory/ptr_util.h" | 24 #include "base/memory/ptr_util.h" |
24 #include "base/memory/weak_ptr.h" | 25 #include "base/memory/weak_ptr.h" |
25 #include "base/run_loop.h" | 26 #include "base/run_loop.h" |
26 #include "base/strings/string_util.h" | 27 #include "base/strings/string_util.h" |
27 #include "base/strings/utf_string_conversions.h" | 28 #include "base/strings/utf_string_conversions.h" |
28 #include "base/test/test_file_util.h" | 29 #include "base/test/test_file_util.h" |
29 #include "base/threading/thread_task_runner_handle.h" | 30 #include "base/threading/thread_task_runner_handle.h" |
30 #include "net/base/auth.h" | 31 #include "net/base/auth.h" |
31 #include "net/base/chunked_upload_data_stream.h" | 32 #include "net/base/chunked_upload_data_stream.h" |
32 #include "net/base/completion_callback.h" | 33 #include "net/base/completion_callback.h" |
33 #include "net/base/elements_upload_data_stream.h" | 34 #include "net/base/elements_upload_data_stream.h" |
34 #include "net/base/load_timing_info.h" | 35 #include "net/base/load_timing_info.h" |
35 #include "net/base/load_timing_info_test_util.h" | 36 #include "net/base/load_timing_info_test_util.h" |
36 #include "net/base/net_errors.h" | 37 #include "net/base/net_errors.h" |
| 38 #include "net/base/network_throttle_manager.h" |
37 #include "net/base/proxy_delegate.h" | 39 #include "net/base/proxy_delegate.h" |
38 #include "net/base/request_priority.h" | 40 #include "net/base/request_priority.h" |
39 #include "net/base/test_completion_callback.h" | 41 #include "net/base/test_completion_callback.h" |
40 #include "net/base/test_proxy_delegate.h" | 42 #include "net/base/test_proxy_delegate.h" |
41 #include "net/base/upload_bytes_element_reader.h" | 43 #include "net/base/upload_bytes_element_reader.h" |
42 #include "net/base/upload_file_element_reader.h" | 44 #include "net/base/upload_file_element_reader.h" |
43 #include "net/cert/mock_cert_verifier.h" | 45 #include "net/cert/mock_cert_verifier.h" |
44 #include "net/dns/host_cache.h" | 46 #include "net/dns/host_cache.h" |
45 #include "net/dns/mock_host_resolver.h" | 47 #include "net/dns/mock_host_resolver.h" |
46 #include "net/http/http_auth_challenge_tokenizer.h" | 48 #include "net/http/http_auth_challenge_tokenizer.h" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 using net::test::IsOk; | 104 using net::test::IsOk; |
103 | 105 |
104 using base::ASCIIToUTF16; | 106 using base::ASCIIToUTF16; |
105 | 107 |
106 //----------------------------------------------------------------------------- | 108 //----------------------------------------------------------------------------- |
107 | 109 |
108 namespace net { | 110 namespace net { |
109 | 111 |
110 namespace { | 112 namespace { |
111 | 113 |
| 114 class TestNetworkStreamThrottler : public NetworkThrottleManager { |
| 115 public: |
| 116 TestNetworkStreamThrottler() |
| 117 : throttle_new_requests_(false), |
| 118 num_set_priority_calls_(0), |
| 119 last_priority_set_(IDLE) {} |
| 120 |
| 121 ~TestNetworkStreamThrottler() override { |
| 122 EXPECT_TRUE(outstanding_throttles_.empty()); |
| 123 } |
| 124 |
| 125 // NetworkThrottleManager |
| 126 std::unique_ptr<Throttle> CreateThrottle(ThrottleDelegate* delegate, |
| 127 RequestPriority priority, |
| 128 bool ignore_limits) override { |
| 129 std::unique_ptr<TestThrottle> test_throttle( |
| 130 new TestThrottle(throttle_new_requests_, delegate, this)); |
| 131 outstanding_throttles_.insert(test_throttle.get()); |
| 132 return std::move(test_throttle); |
| 133 } |
| 134 |
| 135 void UnthrottleAllRequests() { |
| 136 std::set<TestThrottle*> outstanding_throttles_copy(outstanding_throttles_); |
| 137 for (auto& throttle : outstanding_throttles_copy) { |
| 138 if (throttle->IsThrottled()) |
| 139 throttle->Unthrottle(); |
| 140 } |
| 141 } |
| 142 |
| 143 void set_throttle_new_requests(bool throttle_new_requests) { |
| 144 throttle_new_requests_ = throttle_new_requests; |
| 145 } |
| 146 |
| 147 // Includes both throttled and unthrottled throttles. |
| 148 size_t num_outstanding_requests() const { |
| 149 return outstanding_throttles_.size(); |
| 150 } |
| 151 |
| 152 int num_set_priority_calls() const { return num_set_priority_calls_; } |
| 153 RequestPriority last_priority_set() const { return last_priority_set_; } |
| 154 void set_priority_change_closure( |
| 155 const base::Closure& priority_change_closure) { |
| 156 priority_change_closure_ = priority_change_closure; |
| 157 } |
| 158 |
| 159 private: |
| 160 class TestThrottle : public NetworkThrottleManager::Throttle { |
| 161 public: |
| 162 ~TestThrottle() override { throttler_->OnThrottleDestroyed(this); } |
| 163 |
| 164 // Throttle |
| 165 bool IsThrottled() const override { return throttled_; } |
| 166 void SetPriority(RequestPriority priority) override { |
| 167 throttler_->SetPriorityCalled(priority); |
| 168 } |
| 169 |
| 170 TestThrottle(bool throttled, |
| 171 ThrottleDelegate* delegate, |
| 172 TestNetworkStreamThrottler* throttler) |
| 173 : throttled_(throttled), delegate_(delegate), throttler_(throttler) {} |
| 174 |
| 175 void Unthrottle() { |
| 176 EXPECT_TRUE(throttled_); |
| 177 |
| 178 throttled_ = false; |
| 179 delegate_->OnThrottleStateChanged(); |
| 180 } |
| 181 |
| 182 bool throttled_; |
| 183 ThrottleDelegate* delegate_; |
| 184 TestNetworkStreamThrottler* throttler_; |
| 185 }; |
| 186 |
| 187 void OnThrottleDestroyed(TestThrottle* throttle) { |
| 188 EXPECT_NE(0u, outstanding_throttles_.count(throttle)); |
| 189 outstanding_throttles_.erase(throttle); |
| 190 } |
| 191 |
| 192 void SetPriorityCalled(RequestPriority priority) { |
| 193 ++num_set_priority_calls_; |
| 194 last_priority_set_ = priority; |
| 195 if (!priority_change_closure_.is_null()) |
| 196 priority_change_closure_.Run(); |
| 197 } |
| 198 |
| 199 // Includes both throttled and unthrottled throttles. |
| 200 std::set<TestThrottle*> outstanding_throttles_; |
| 201 bool throttle_new_requests_; |
| 202 int num_set_priority_calls_; |
| 203 RequestPriority last_priority_set_; |
| 204 base::Closure priority_change_closure_; |
| 205 |
| 206 DISALLOW_COPY_AND_ASSIGN(TestNetworkStreamThrottler); |
| 207 }; |
| 208 |
112 const base::string16 kBar(ASCIIToUTF16("bar")); | 209 const base::string16 kBar(ASCIIToUTF16("bar")); |
113 const base::string16 kBar2(ASCIIToUTF16("bar2")); | 210 const base::string16 kBar2(ASCIIToUTF16("bar2")); |
114 const base::string16 kBar3(ASCIIToUTF16("bar3")); | 211 const base::string16 kBar3(ASCIIToUTF16("bar3")); |
115 const base::string16 kBaz(ASCIIToUTF16("baz")); | 212 const base::string16 kBaz(ASCIIToUTF16("baz")); |
116 const base::string16 kFirst(ASCIIToUTF16("first")); | 213 const base::string16 kFirst(ASCIIToUTF16("first")); |
117 const base::string16 kFoo(ASCIIToUTF16("foo")); | 214 const base::string16 kFoo(ASCIIToUTF16("foo")); |
118 const base::string16 kFoo2(ASCIIToUTF16("foo2")); | 215 const base::string16 kFoo2(ASCIIToUTF16("foo2")); |
119 const base::string16 kFoo3(ASCIIToUTF16("foo3")); | 216 const base::string16 kFoo3(ASCIIToUTF16("foo3")); |
120 const base::string16 kFou(ASCIIToUTF16("fou")); | 217 const base::string16 kFou(ASCIIToUTF16("fou")); |
121 const base::string16 kSecond(ASCIIToUTF16("second")); | 218 const base::string16 kSecond(ASCIIToUTF16("second")); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 headers->SetHeader("Origin", "http://www.example.org"); | 347 headers->SetHeader("Origin", "http://www.example.org"); |
251 headers->SetHeader("Sec-WebSocket-Version", "13"); | 348 headers->SetHeader("Sec-WebSocket-Version", "13"); |
252 headers->SetHeader("Sec-WebSocket-Key", "dGhlIHNhbXBsZSBub25jZQ=="); | 349 headers->SetHeader("Sec-WebSocket-Key", "dGhlIHNhbXBsZSBub25jZQ=="); |
253 } | 350 } |
254 | 351 |
255 std::unique_ptr<HttpNetworkSession> CreateSession( | 352 std::unique_ptr<HttpNetworkSession> CreateSession( |
256 SpdySessionDependencies* session_deps) { | 353 SpdySessionDependencies* session_deps) { |
257 return SpdySessionDependencies::SpdyCreateSession(session_deps); | 354 return SpdySessionDependencies::SpdyCreateSession(session_deps); |
258 } | 355 } |
259 | 356 |
| 357 // Note that the pointer written into |*throttler| will only be valid |
| 358 // for the lifetime of the returned HttpNetworkSession. |
| 359 std::unique_ptr<HttpNetworkSession> CreateSessionWithThrottler( |
| 360 SpdySessionDependencies* session_deps, |
| 361 TestNetworkStreamThrottler** throttler) { |
| 362 std::unique_ptr<HttpNetworkSession> session( |
| 363 SpdySessionDependencies::SpdyCreateSession(session_deps)); |
| 364 |
| 365 std::unique_ptr<TestNetworkStreamThrottler> owned_throttler( |
| 366 new TestNetworkStreamThrottler); |
| 367 *throttler = owned_throttler.get(); |
| 368 |
| 369 HttpNetworkSessionPeer peer(session.get()); |
| 370 peer.SetNetworkStreamThrottler(std::move(owned_throttler)); |
| 371 |
| 372 return session; |
| 373 } |
| 374 |
260 } // namespace | 375 } // namespace |
261 | 376 |
262 class HttpNetworkTransactionTest : public PlatformTest { | 377 class HttpNetworkTransactionTest : public PlatformTest { |
263 public: | 378 public: |
264 ~HttpNetworkTransactionTest() override { | 379 ~HttpNetworkTransactionTest() override { |
265 // Important to restore the per-pool limit first, since the pool limit must | 380 // Important to restore the per-pool limit first, since the pool limit must |
266 // always be greater than group limit, and the tests reduce both limits. | 381 // always be greater than group limit, and the tests reduce both limits. |
267 ClientSocketPoolManager::set_max_sockets_per_pool( | 382 ClientSocketPoolManager::set_max_sockets_per_pool( |
268 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_); | 383 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_); |
269 ClientSocketPoolManager::set_max_sockets_per_group( | 384 ClientSocketPoolManager::set_max_sockets_per_group( |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 const MockRead* read_failure, | 436 const MockRead* read_failure, |
322 bool use_spdy); | 437 bool use_spdy); |
323 | 438 |
324 SimpleGetHelperResult SimpleGetHelperForData(StaticSocketDataProvider* data[], | 439 SimpleGetHelperResult SimpleGetHelperForData(StaticSocketDataProvider* data[], |
325 size_t data_count) { | 440 size_t data_count) { |
326 SimpleGetHelperResult out; | 441 SimpleGetHelperResult out; |
327 | 442 |
328 HttpRequestInfo request; | 443 HttpRequestInfo request; |
329 request.method = "GET"; | 444 request.method = "GET"; |
330 request.url = GURL("http://www.example.org/"); | 445 request.url = GURL("http://www.example.org/"); |
331 request.load_flags = 0; | |
332 | 446 |
333 BoundTestNetLog log; | 447 BoundTestNetLog log; |
334 session_deps_.net_log = log.bound().net_log(); | 448 session_deps_.net_log = log.bound().net_log(); |
335 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 449 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
336 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 450 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
337 | 451 |
338 for (size_t i = 0; i < data_count; ++i) { | 452 for (size_t i = 0; i < data_count; ++i) { |
339 session_deps_.socket_factory->AddSocketDataProvider(data[i]); | 453 session_deps_.socket_factory->AddSocketDataProvider(data[i]); |
340 } | 454 } |
341 | 455 |
(...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1044 MockRead("HTTP/1.1 302 Redirect\r\n"), | 1158 MockRead("HTTP/1.1 302 Redirect\r\n"), |
1045 MockRead("Location: http://good.com/\r\n"), | 1159 MockRead("Location: http://good.com/\r\n"), |
1046 MockRead("Location: http://good.com/\r\n"), | 1160 MockRead("Location: http://good.com/\r\n"), |
1047 MockRead("Content-Length: 0\r\n\r\n"), | 1161 MockRead("Content-Length: 0\r\n\r\n"), |
1048 MockRead(SYNCHRONOUS, OK), | 1162 MockRead(SYNCHRONOUS, OK), |
1049 }; | 1163 }; |
1050 | 1164 |
1051 HttpRequestInfo request; | 1165 HttpRequestInfo request; |
1052 request.method = "GET"; | 1166 request.method = "GET"; |
1053 request.url = GURL("http://redirect.com/"); | 1167 request.url = GURL("http://redirect.com/"); |
1054 request.load_flags = 0; | |
1055 | 1168 |
1056 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1169 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1057 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 1170 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
1058 | 1171 |
1059 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1172 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1060 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1173 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1061 | 1174 |
1062 TestCompletionCallback callback; | 1175 TestCompletionCallback callback; |
1063 | 1176 |
1064 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 1177 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
(...skipping 24 matching lines...) Expand all Loading... |
1089 arraysize(data_reads)); | 1202 arraysize(data_reads)); |
1090 EXPECT_THAT(out.rv, IsError(ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION)); | 1203 EXPECT_THAT(out.rv, IsError(ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION)); |
1091 } | 1204 } |
1092 | 1205 |
1093 // Do a request using the HEAD method. Verify that we don't try to read the | 1206 // Do a request using the HEAD method. Verify that we don't try to read the |
1094 // message body (since HEAD has none). | 1207 // message body (since HEAD has none). |
1095 TEST_F(HttpNetworkTransactionTest, Head) { | 1208 TEST_F(HttpNetworkTransactionTest, Head) { |
1096 HttpRequestInfo request; | 1209 HttpRequestInfo request; |
1097 request.method = "HEAD"; | 1210 request.method = "HEAD"; |
1098 request.url = GURL("http://www.example.org/"); | 1211 request.url = GURL("http://www.example.org/"); |
1099 request.load_flags = 0; | |
1100 | 1212 |
1101 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1213 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1102 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 1214 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
1103 BeforeHeadersSentHandler headers_handler; | 1215 BeforeHeadersSentHandler headers_handler; |
1104 trans.SetBeforeHeadersSentCallback( | 1216 trans.SetBeforeHeadersSentCallback( |
1105 base::Bind(&BeforeHeadersSentHandler::OnBeforeHeadersSent, | 1217 base::Bind(&BeforeHeadersSentHandler::OnBeforeHeadersSent, |
1106 base::Unretained(&headers_handler))); | 1218 base::Unretained(&headers_handler))); |
1107 | 1219 |
1108 MockWrite data_writes1[] = { | 1220 MockWrite data_writes1[] = { |
1109 MockWrite("HEAD / HTTP/1.1\r\n" | 1221 MockWrite("HEAD / HTTP/1.1\r\n" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1170 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1282 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1171 | 1283 |
1172 const char* const kExpectedResponseData[] = { | 1284 const char* const kExpectedResponseData[] = { |
1173 "hello", "world" | 1285 "hello", "world" |
1174 }; | 1286 }; |
1175 | 1287 |
1176 for (int i = 0; i < 2; ++i) { | 1288 for (int i = 0; i < 2; ++i) { |
1177 HttpRequestInfo request; | 1289 HttpRequestInfo request; |
1178 request.method = "GET"; | 1290 request.method = "GET"; |
1179 request.url = GURL("http://www.example.org/"); | 1291 request.url = GURL("http://www.example.org/"); |
1180 request.load_flags = 0; | |
1181 | 1292 |
1182 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 1293 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
1183 | 1294 |
1184 TestCompletionCallback callback; | 1295 TestCompletionCallback callback; |
1185 | 1296 |
1186 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 1297 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
1187 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1298 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1188 | 1299 |
1189 rv = callback.WaitForResult(); | 1300 rv = callback.WaitForResult(); |
1190 EXPECT_THAT(rv, IsOk()); | 1301 EXPECT_THAT(rv, IsOk()); |
(...skipping 15 matching lines...) Expand all Loading... |
1206 TEST_F(HttpNetworkTransactionTest, Ignores100) { | 1317 TEST_F(HttpNetworkTransactionTest, Ignores100) { |
1207 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 1318 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
1208 element_readers.push_back( | 1319 element_readers.push_back( |
1209 base::MakeUnique<UploadBytesElementReader>("foo", 3)); | 1320 base::MakeUnique<UploadBytesElementReader>("foo", 3)); |
1210 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 1321 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
1211 | 1322 |
1212 HttpRequestInfo request; | 1323 HttpRequestInfo request; |
1213 request.method = "POST"; | 1324 request.method = "POST"; |
1214 request.url = GURL("http://www.foo.com/"); | 1325 request.url = GURL("http://www.foo.com/"); |
1215 request.upload_data_stream = &upload_data_stream; | 1326 request.upload_data_stream = &upload_data_stream; |
1216 request.load_flags = 0; | |
1217 | 1327 |
1218 // Check the upload progress returned before initialization is correct. | 1328 // Check the upload progress returned before initialization is correct. |
1219 UploadProgress progress = request.upload_data_stream->GetUploadProgress(); | 1329 UploadProgress progress = request.upload_data_stream->GetUploadProgress(); |
1220 EXPECT_EQ(0u, progress.size()); | 1330 EXPECT_EQ(0u, progress.size()); |
1221 EXPECT_EQ(0u, progress.position()); | 1331 EXPECT_EQ(0u, progress.position()); |
1222 | 1332 |
1223 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1333 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1224 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 1334 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
1225 | 1335 |
1226 MockRead data_reads[] = { | 1336 MockRead data_reads[] = { |
(...skipping 25 matching lines...) Expand all Loading... |
1252 EXPECT_EQ("hello world", response_data); | 1362 EXPECT_EQ("hello world", response_data); |
1253 } | 1363 } |
1254 | 1364 |
1255 // This test is almost the same as Ignores100 above, but the response contains | 1365 // This test is almost the same as Ignores100 above, but the response contains |
1256 // a 102 instead of a 100. Also, instead of HTTP/1.0 the response is | 1366 // a 102 instead of a 100. Also, instead of HTTP/1.0 the response is |
1257 // HTTP/1.1 and the two status headers are read in one read. | 1367 // HTTP/1.1 and the two status headers are read in one read. |
1258 TEST_F(HttpNetworkTransactionTest, Ignores1xx) { | 1368 TEST_F(HttpNetworkTransactionTest, Ignores1xx) { |
1259 HttpRequestInfo request; | 1369 HttpRequestInfo request; |
1260 request.method = "GET"; | 1370 request.method = "GET"; |
1261 request.url = GURL("http://www.foo.com/"); | 1371 request.url = GURL("http://www.foo.com/"); |
1262 request.load_flags = 0; | |
1263 | 1372 |
1264 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1373 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1265 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 1374 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
1266 | 1375 |
1267 MockRead data_reads[] = { | 1376 MockRead data_reads[] = { |
1268 MockRead("HTTP/1.1 102 Unspecified status code\r\n\r\n" | 1377 MockRead("HTTP/1.1 102 Unspecified status code\r\n\r\n" |
1269 "HTTP/1.1 200 OK\r\n\r\n"), | 1378 "HTTP/1.1 200 OK\r\n\r\n"), |
1270 MockRead("hello world"), | 1379 MockRead("hello world"), |
1271 MockRead(SYNCHRONOUS, OK), | 1380 MockRead(SYNCHRONOUS, OK), |
1272 }; | 1381 }; |
(...skipping 17 matching lines...) Expand all Loading... |
1290 std::string response_data; | 1399 std::string response_data; |
1291 rv = ReadTransaction(&trans, &response_data); | 1400 rv = ReadTransaction(&trans, &response_data); |
1292 EXPECT_THAT(rv, IsOk()); | 1401 EXPECT_THAT(rv, IsOk()); |
1293 EXPECT_EQ("hello world", response_data); | 1402 EXPECT_EQ("hello world", response_data); |
1294 } | 1403 } |
1295 | 1404 |
1296 TEST_F(HttpNetworkTransactionTest, Incomplete100ThenEOF) { | 1405 TEST_F(HttpNetworkTransactionTest, Incomplete100ThenEOF) { |
1297 HttpRequestInfo request; | 1406 HttpRequestInfo request; |
1298 request.method = "POST"; | 1407 request.method = "POST"; |
1299 request.url = GURL("http://www.foo.com/"); | 1408 request.url = GURL("http://www.foo.com/"); |
1300 request.load_flags = 0; | |
1301 | 1409 |
1302 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1410 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1303 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 1411 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
1304 | 1412 |
1305 MockRead data_reads[] = { | 1413 MockRead data_reads[] = { |
1306 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), | 1414 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), |
1307 MockRead(ASYNC, 0), | 1415 MockRead(ASYNC, 0), |
1308 }; | 1416 }; |
1309 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1417 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1310 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1418 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1311 | 1419 |
1312 TestCompletionCallback callback; | 1420 TestCompletionCallback callback; |
1313 | 1421 |
1314 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 1422 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
1315 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1423 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1316 | 1424 |
1317 rv = callback.WaitForResult(); | 1425 rv = callback.WaitForResult(); |
1318 EXPECT_THAT(rv, IsOk()); | 1426 EXPECT_THAT(rv, IsOk()); |
1319 | 1427 |
1320 std::string response_data; | 1428 std::string response_data; |
1321 rv = ReadTransaction(&trans, &response_data); | 1429 rv = ReadTransaction(&trans, &response_data); |
1322 EXPECT_THAT(rv, IsOk()); | 1430 EXPECT_THAT(rv, IsOk()); |
1323 EXPECT_EQ("", response_data); | 1431 EXPECT_EQ("", response_data); |
1324 } | 1432 } |
1325 | 1433 |
1326 TEST_F(HttpNetworkTransactionTest, EmptyResponse) { | 1434 TEST_F(HttpNetworkTransactionTest, EmptyResponse) { |
1327 HttpRequestInfo request; | 1435 HttpRequestInfo request; |
1328 request.method = "POST"; | 1436 request.method = "POST"; |
1329 request.url = GURL("http://www.foo.com/"); | 1437 request.url = GURL("http://www.foo.com/"); |
1330 request.load_flags = 0; | |
1331 | 1438 |
1332 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1439 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1333 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 1440 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
1334 | 1441 |
1335 MockRead data_reads[] = { | 1442 MockRead data_reads[] = { |
1336 MockRead(ASYNC, 0), | 1443 MockRead(ASYNC, 0), |
1337 }; | 1444 }; |
1338 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1445 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1339 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1446 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1340 | 1447 |
1341 TestCompletionCallback callback; | 1448 TestCompletionCallback callback; |
1342 | 1449 |
1343 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 1450 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
1344 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1451 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1345 | 1452 |
1346 rv = callback.WaitForResult(); | 1453 rv = callback.WaitForResult(); |
1347 EXPECT_THAT(rv, IsError(ERR_EMPTY_RESPONSE)); | 1454 EXPECT_THAT(rv, IsError(ERR_EMPTY_RESPONSE)); |
1348 } | 1455 } |
1349 | 1456 |
1350 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( | 1457 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( |
1351 const MockWrite* write_failure, | 1458 const MockWrite* write_failure, |
1352 const MockRead* read_failure) { | 1459 const MockRead* read_failure) { |
1353 HttpRequestInfo request; | 1460 HttpRequestInfo request; |
1354 request.method = "GET"; | 1461 request.method = "GET"; |
1355 request.url = GURL("http://www.foo.com/"); | 1462 request.url = GURL("http://www.foo.com/"); |
1356 request.load_flags = 0; | |
1357 | 1463 |
1358 TestNetLog net_log; | 1464 TestNetLog net_log; |
1359 session_deps_.net_log = &net_log; | 1465 session_deps_.net_log = &net_log; |
1360 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1466 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1361 | 1467 |
1362 // Written data for successfully sending both requests. | 1468 // Written data for successfully sending both requests. |
1363 MockWrite data1_writes[] = { | 1469 MockWrite data1_writes[] = { |
1364 MockWrite("GET / HTTP/1.1\r\n" | 1470 MockWrite("GET / HTTP/1.1\r\n" |
1365 "Host: www.foo.com\r\n" | 1471 "Host: www.foo.com\r\n" |
1366 "Connection: keep-alive\r\n\r\n"), | 1472 "Connection: keep-alive\r\n\r\n"), |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1436 } | 1542 } |
1437 } | 1543 } |
1438 | 1544 |
1439 void HttpNetworkTransactionTest::PreconnectErrorResendRequestTest( | 1545 void HttpNetworkTransactionTest::PreconnectErrorResendRequestTest( |
1440 const MockWrite* write_failure, | 1546 const MockWrite* write_failure, |
1441 const MockRead* read_failure, | 1547 const MockRead* read_failure, |
1442 bool use_spdy) { | 1548 bool use_spdy) { |
1443 HttpRequestInfo request; | 1549 HttpRequestInfo request; |
1444 request.method = "GET"; | 1550 request.method = "GET"; |
1445 request.url = GURL("https://www.foo.com/"); | 1551 request.url = GURL("https://www.foo.com/"); |
1446 request.load_flags = 0; | |
1447 | 1552 |
1448 TestNetLog net_log; | 1553 TestNetLog net_log; |
1449 session_deps_.net_log = &net_log; | 1554 session_deps_.net_log = &net_log; |
1450 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1555 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1451 | 1556 |
1452 SSLSocketDataProvider ssl1(ASYNC, OK); | 1557 SSLSocketDataProvider ssl1(ASYNC, OK); |
1453 SSLSocketDataProvider ssl2(ASYNC, OK); | 1558 SSLSocketDataProvider ssl2(ASYNC, OK); |
1454 if (use_spdy) { | 1559 if (use_spdy) { |
1455 ssl1.next_proto = kProtoHTTP2; | 1560 ssl1.next_proto = kProtoHTTP2; |
1456 ssl2.next_proto = kProtoHTTP2; | 1561 ssl2.next_proto = kProtoHTTP2; |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1630 | 1735 |
1631 TEST_F(HttpNetworkTransactionTest, SpdyPreconnectErrorAsyncEOF) { | 1736 TEST_F(HttpNetworkTransactionTest, SpdyPreconnectErrorAsyncEOF) { |
1632 MockRead read_failure(ASYNC, OK); // EOF | 1737 MockRead read_failure(ASYNC, OK); // EOF |
1633 PreconnectErrorResendRequestTest(NULL, &read_failure, true); | 1738 PreconnectErrorResendRequestTest(NULL, &read_failure, true); |
1634 } | 1739 } |
1635 | 1740 |
1636 TEST_F(HttpNetworkTransactionTest, NonKeepAliveConnectionReset) { | 1741 TEST_F(HttpNetworkTransactionTest, NonKeepAliveConnectionReset) { |
1637 HttpRequestInfo request; | 1742 HttpRequestInfo request; |
1638 request.method = "GET"; | 1743 request.method = "GET"; |
1639 request.url = GURL("http://www.example.org/"); | 1744 request.url = GURL("http://www.example.org/"); |
1640 request.load_flags = 0; | |
1641 | 1745 |
1642 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1746 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1643 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 1747 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
1644 | 1748 |
1645 MockRead data_reads[] = { | 1749 MockRead data_reads[] = { |
1646 MockRead(ASYNC, ERR_CONNECTION_RESET), | 1750 MockRead(ASYNC, ERR_CONNECTION_RESET), |
1647 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used | 1751 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used |
1648 MockRead("hello world"), | 1752 MockRead("hello world"), |
1649 MockRead(SYNCHRONOUS, OK), | 1753 MockRead(SYNCHRONOUS, OK), |
1650 }; | 1754 }; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1686 } | 1790 } |
1687 | 1791 |
1688 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression | 1792 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression |
1689 // tests. There was a bug causing HttpNetworkTransaction to hang in the | 1793 // tests. There was a bug causing HttpNetworkTransaction to hang in the |
1690 // destructor in such situations. | 1794 // destructor in such situations. |
1691 // See http://crbug.com/154712 and http://crbug.com/156609. | 1795 // See http://crbug.com/154712 and http://crbug.com/156609. |
1692 TEST_F(HttpNetworkTransactionTest, KeepAliveEarlyClose) { | 1796 TEST_F(HttpNetworkTransactionTest, KeepAliveEarlyClose) { |
1693 HttpRequestInfo request; | 1797 HttpRequestInfo request; |
1694 request.method = "GET"; | 1798 request.method = "GET"; |
1695 request.url = GURL("http://www.example.org/"); | 1799 request.url = GURL("http://www.example.org/"); |
1696 request.load_flags = 0; | |
1697 | 1800 |
1698 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1801 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1699 std::unique_ptr<HttpNetworkTransaction> trans( | 1802 std::unique_ptr<HttpNetworkTransaction> trans( |
1700 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1803 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1701 | 1804 |
1702 MockRead data_reads[] = { | 1805 MockRead data_reads[] = { |
1703 MockRead("HTTP/1.0 200 OK\r\n"), | 1806 MockRead("HTTP/1.0 200 OK\r\n"), |
1704 MockRead("Connection: keep-alive\r\n"), | 1807 MockRead("Connection: keep-alive\r\n"), |
1705 MockRead("Content-Length: 100\r\n\r\n"), | 1808 MockRead("Content-Length: 100\r\n\r\n"), |
1706 MockRead("hello"), | 1809 MockRead("hello"), |
(...skipping 20 matching lines...) Expand all Loading... |
1727 | 1830 |
1728 trans.reset(); | 1831 trans.reset(); |
1729 base::RunLoop().RunUntilIdle(); | 1832 base::RunLoop().RunUntilIdle(); |
1730 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1833 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
1731 } | 1834 } |
1732 | 1835 |
1733 TEST_F(HttpNetworkTransactionTest, KeepAliveEarlyClose2) { | 1836 TEST_F(HttpNetworkTransactionTest, KeepAliveEarlyClose2) { |
1734 HttpRequestInfo request; | 1837 HttpRequestInfo request; |
1735 request.method = "GET"; | 1838 request.method = "GET"; |
1736 request.url = GURL("http://www.example.org/"); | 1839 request.url = GURL("http://www.example.org/"); |
1737 request.load_flags = 0; | |
1738 | 1840 |
1739 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1841 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1740 std::unique_ptr<HttpNetworkTransaction> trans( | 1842 std::unique_ptr<HttpNetworkTransaction> trans( |
1741 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1843 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1742 | 1844 |
1743 MockRead data_reads[] = { | 1845 MockRead data_reads[] = { |
1744 MockRead("HTTP/1.0 200 OK\r\n"), | 1846 MockRead("HTTP/1.0 200 OK\r\n"), |
1745 MockRead("Connection: keep-alive\r\n"), | 1847 MockRead("Connection: keep-alive\r\n"), |
1746 MockRead("Content-Length: 100\r\n\r\n"), | 1848 MockRead("Content-Length: 100\r\n\r\n"), |
1747 MockRead(SYNCHRONOUS, 0), | 1849 MockRead(SYNCHRONOUS, 0), |
(...skipping 19 matching lines...) Expand all Loading... |
1767 base::RunLoop().RunUntilIdle(); | 1869 base::RunLoop().RunUntilIdle(); |
1768 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1870 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
1769 } | 1871 } |
1770 | 1872 |
1771 // Test that we correctly reuse a keep-alive connection after not explicitly | 1873 // Test that we correctly reuse a keep-alive connection after not explicitly |
1772 // reading the body. | 1874 // reading the body. |
1773 TEST_F(HttpNetworkTransactionTest, KeepAliveAfterUnreadBody) { | 1875 TEST_F(HttpNetworkTransactionTest, KeepAliveAfterUnreadBody) { |
1774 HttpRequestInfo request; | 1876 HttpRequestInfo request; |
1775 request.method = "GET"; | 1877 request.method = "GET"; |
1776 request.url = GURL("http://www.foo.com/"); | 1878 request.url = GURL("http://www.foo.com/"); |
1777 request.load_flags = 0; | |
1778 | 1879 |
1779 TestNetLog net_log; | 1880 TestNetLog net_log; |
1780 session_deps_.net_log = &net_log; | 1881 session_deps_.net_log = &net_log; |
1781 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1882 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1782 | 1883 |
1783 const char* request_data = | 1884 const char* request_data = |
1784 "GET / HTTP/1.1\r\n" | 1885 "GET / HTTP/1.1\r\n" |
1785 "Host: www.foo.com\r\n" | 1886 "Host: www.foo.com\r\n" |
1786 "Connection: keep-alive\r\n\r\n"; | 1887 "Connection: keep-alive\r\n\r\n"; |
1787 MockWrite data_writes[] = { | 1888 MockWrite data_writes[] = { |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2184 // There should be no idle sockets in the pool. | 2285 // There should be no idle sockets in the pool. |
2185 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 2286 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
2186 } | 2287 } |
2187 | 2288 |
2188 // Test the request-challenge-retry sequence for basic auth. | 2289 // Test the request-challenge-retry sequence for basic auth. |
2189 // (basic auth is the easiest to mock, because it has no randomness). | 2290 // (basic auth is the easiest to mock, because it has no randomness). |
2190 TEST_F(HttpNetworkTransactionTest, BasicAuth) { | 2291 TEST_F(HttpNetworkTransactionTest, BasicAuth) { |
2191 HttpRequestInfo request; | 2292 HttpRequestInfo request; |
2192 request.method = "GET"; | 2293 request.method = "GET"; |
2193 request.url = GURL("http://www.example.org/"); | 2294 request.url = GURL("http://www.example.org/"); |
2194 request.load_flags = 0; | |
2195 | 2295 |
2196 TestNetLog log; | 2296 TestNetLog log; |
2197 session_deps_.net_log = &log; | 2297 session_deps_.net_log = &log; |
2198 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2298 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2199 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 2299 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
2200 | 2300 |
2201 MockWrite data_writes1[] = { | 2301 MockWrite data_writes1[] = { |
2202 MockWrite( | 2302 MockWrite( |
2203 "GET / HTTP/1.1\r\n" | 2303 "GET / HTTP/1.1\r\n" |
2204 "Host: www.example.org\r\n" | 2304 "Host: www.example.org\r\n" |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2291 EXPECT_FALSE(response->auth_challenge); | 2391 EXPECT_FALSE(response->auth_challenge); |
2292 EXPECT_EQ(100, response->headers->GetContentLength()); | 2392 EXPECT_EQ(100, response->headers->GetContentLength()); |
2293 } | 2393 } |
2294 | 2394 |
2295 // Test the request-challenge-retry sequence for basic auth. | 2395 // Test the request-challenge-retry sequence for basic auth. |
2296 // (basic auth is the easiest to mock, because it has no randomness). | 2396 // (basic auth is the easiest to mock, because it has no randomness). |
2297 TEST_F(HttpNetworkTransactionTest, BasicAuthWithAddressChange) { | 2397 TEST_F(HttpNetworkTransactionTest, BasicAuthWithAddressChange) { |
2298 HttpRequestInfo request; | 2398 HttpRequestInfo request; |
2299 request.method = "GET"; | 2399 request.method = "GET"; |
2300 request.url = GURL("http://www.example.org/"); | 2400 request.url = GURL("http://www.example.org/"); |
2301 request.load_flags = 0; | |
2302 | 2401 |
2303 TestNetLog log; | 2402 TestNetLog log; |
2304 MockHostResolver* resolver = new MockHostResolver(); | 2403 MockHostResolver* resolver = new MockHostResolver(); |
2305 session_deps_.net_log = &log; | 2404 session_deps_.net_log = &log; |
2306 session_deps_.host_resolver.reset(resolver); | 2405 session_deps_.host_resolver.reset(resolver); |
2307 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); | 2406 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); |
2308 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 2407 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
2309 | 2408 |
2310 resolver->rules()->ClearRules(); | 2409 resolver->rules()->ClearRules(); |
2311 resolver->rules()->AddRule("www.example.org", "127.0.0.1"); | 2410 resolver->rules()->AddRule("www.example.org", "127.0.0.1"); |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2456 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2555 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
2457 // connection. | 2556 // connection. |
2458 TEST_F(HttpNetworkTransactionTest, BasicAuthKeepAlive) { | 2557 TEST_F(HttpNetworkTransactionTest, BasicAuthKeepAlive) { |
2459 // On the second pass, the body read of the auth challenge is synchronous, so | 2558 // On the second pass, the body read of the auth challenge is synchronous, so |
2460 // IsConnectedAndIdle returns false. The socket should still be drained and | 2559 // IsConnectedAndIdle returns false. The socket should still be drained and |
2461 // reused. See http://crbug.com/544255. | 2560 // reused. See http://crbug.com/544255. |
2462 for (int i = 0; i < 2; ++i) { | 2561 for (int i = 0; i < 2; ++i) { |
2463 HttpRequestInfo request; | 2562 HttpRequestInfo request; |
2464 request.method = "GET"; | 2563 request.method = "GET"; |
2465 request.url = GURL("http://www.example.org/"); | 2564 request.url = GURL("http://www.example.org/"); |
2466 request.load_flags = 0; | |
2467 | 2565 |
2468 TestNetLog log; | 2566 TestNetLog log; |
2469 session_deps_.net_log = &log; | 2567 session_deps_.net_log = &log; |
2470 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2568 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2471 | 2569 |
2472 MockWrite data_writes[] = { | 2570 MockWrite data_writes[] = { |
2473 MockWrite(ASYNC, 0, | 2571 MockWrite(ASYNC, 0, |
2474 "GET / HTTP/1.1\r\n" | 2572 "GET / HTTP/1.1\r\n" |
2475 "Host: www.example.org\r\n" | 2573 "Host: www.example.org\r\n" |
2476 "Connection: keep-alive\r\n\r\n"), | 2574 "Connection: keep-alive\r\n\r\n"), |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2546 EXPECT_EQ(reads_size, trans.GetTotalReceivedBytes()); | 2644 EXPECT_EQ(reads_size, trans.GetTotalReceivedBytes()); |
2547 } | 2645 } |
2548 } | 2646 } |
2549 | 2647 |
2550 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2648 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
2551 // connection and with no response body to drain. | 2649 // connection and with no response body to drain. |
2552 TEST_F(HttpNetworkTransactionTest, BasicAuthKeepAliveNoBody) { | 2650 TEST_F(HttpNetworkTransactionTest, BasicAuthKeepAliveNoBody) { |
2553 HttpRequestInfo request; | 2651 HttpRequestInfo request; |
2554 request.method = "GET"; | 2652 request.method = "GET"; |
2555 request.url = GURL("http://www.example.org/"); | 2653 request.url = GURL("http://www.example.org/"); |
2556 request.load_flags = 0; | |
2557 | 2654 |
2558 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2655 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2559 | 2656 |
2560 MockWrite data_writes1[] = { | 2657 MockWrite data_writes1[] = { |
2561 MockWrite("GET / HTTP/1.1\r\n" | 2658 MockWrite("GET / HTTP/1.1\r\n" |
2562 "Host: www.example.org\r\n" | 2659 "Host: www.example.org\r\n" |
2563 "Connection: keep-alive\r\n\r\n"), | 2660 "Connection: keep-alive\r\n\r\n"), |
2564 | 2661 |
2565 // After calling trans.RestartWithAuth(), this is the request we should | 2662 // After calling trans.RestartWithAuth(), this is the request we should |
2566 // be issuing -- the final header line contains the credentials. | 2663 // be issuing -- the final header line contains the credentials. |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2620 EXPECT_FALSE(response->auth_challenge); | 2717 EXPECT_FALSE(response->auth_challenge); |
2621 EXPECT_EQ(5, response->headers->GetContentLength()); | 2718 EXPECT_EQ(5, response->headers->GetContentLength()); |
2622 } | 2719 } |
2623 | 2720 |
2624 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2721 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
2625 // connection and with a large response body to drain. | 2722 // connection and with a large response body to drain. |
2626 TEST_F(HttpNetworkTransactionTest, BasicAuthKeepAliveLargeBody) { | 2723 TEST_F(HttpNetworkTransactionTest, BasicAuthKeepAliveLargeBody) { |
2627 HttpRequestInfo request; | 2724 HttpRequestInfo request; |
2628 request.method = "GET"; | 2725 request.method = "GET"; |
2629 request.url = GURL("http://www.example.org/"); | 2726 request.url = GURL("http://www.example.org/"); |
2630 request.load_flags = 0; | |
2631 | 2727 |
2632 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2728 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2633 | 2729 |
2634 MockWrite data_writes1[] = { | 2730 MockWrite data_writes1[] = { |
2635 MockWrite("GET / HTTP/1.1\r\n" | 2731 MockWrite("GET / HTTP/1.1\r\n" |
2636 "Host: www.example.org\r\n" | 2732 "Host: www.example.org\r\n" |
2637 "Connection: keep-alive\r\n\r\n"), | 2733 "Connection: keep-alive\r\n\r\n"), |
2638 | 2734 |
2639 // After calling trans.RestartWithAuth(), this is the request we should | 2735 // After calling trans.RestartWithAuth(), this is the request we should |
2640 // be issuing -- the final header line contains the credentials. | 2736 // be issuing -- the final header line contains the credentials. |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2702 EXPECT_FALSE(response->auth_challenge); | 2798 EXPECT_FALSE(response->auth_challenge); |
2703 EXPECT_EQ(5, response->headers->GetContentLength()); | 2799 EXPECT_EQ(5, response->headers->GetContentLength()); |
2704 } | 2800 } |
2705 | 2801 |
2706 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2802 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
2707 // connection, but the server gets impatient and closes the connection. | 2803 // connection, but the server gets impatient and closes the connection. |
2708 TEST_F(HttpNetworkTransactionTest, BasicAuthKeepAliveImpatientServer) { | 2804 TEST_F(HttpNetworkTransactionTest, BasicAuthKeepAliveImpatientServer) { |
2709 HttpRequestInfo request; | 2805 HttpRequestInfo request; |
2710 request.method = "GET"; | 2806 request.method = "GET"; |
2711 request.url = GURL("http://www.example.org/"); | 2807 request.url = GURL("http://www.example.org/"); |
2712 request.load_flags = 0; | |
2713 | 2808 |
2714 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2809 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
2715 | 2810 |
2716 MockWrite data_writes1[] = { | 2811 MockWrite data_writes1[] = { |
2717 MockWrite( | 2812 MockWrite( |
2718 "GET / HTTP/1.1\r\n" | 2813 "GET / HTTP/1.1\r\n" |
2719 "Host: www.example.org\r\n" | 2814 "Host: www.example.org\r\n" |
2720 "Connection: keep-alive\r\n\r\n"), | 2815 "Connection: keep-alive\r\n\r\n"), |
2721 // This simulates the seemingly successful write to a closed connection | 2816 // This simulates the seemingly successful write to a closed connection |
2722 // if the bug is not fixed. | 2817 // if the bug is not fixed. |
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3473 EXPECT_THAT(ReadTransaction(&trans, &body), IsOk()); | 3568 EXPECT_THAT(ReadTransaction(&trans, &body), IsOk()); |
3474 EXPECT_EQ("hello", body); | 3569 EXPECT_EQ("hello", body); |
3475 } | 3570 } |
3476 | 3571 |
3477 // Test that we don't read the response body when we fail to establish a tunnel, | 3572 // Test that we don't read the response body when we fail to establish a tunnel, |
3478 // even if the user cancels the proxy's auth attempt. | 3573 // even if the user cancels the proxy's auth attempt. |
3479 TEST_F(HttpNetworkTransactionTest, BasicAuthProxyCancelTunnel) { | 3574 TEST_F(HttpNetworkTransactionTest, BasicAuthProxyCancelTunnel) { |
3480 HttpRequestInfo request; | 3575 HttpRequestInfo request; |
3481 request.method = "GET"; | 3576 request.method = "GET"; |
3482 request.url = GURL("https://www.example.org/"); | 3577 request.url = GURL("https://www.example.org/"); |
3483 request.load_flags = 0; | |
3484 | 3578 |
3485 // Configure against proxy server "myproxy:70". | 3579 // Configure against proxy server "myproxy:70". |
3486 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 3580 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
3487 | 3581 |
3488 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3582 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
3489 | 3583 |
3490 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 3584 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
3491 | 3585 |
3492 // Since we have proxy, should try to establish tunnel. | 3586 // Since we have proxy, should try to establish tunnel. |
3493 MockWrite data_writes[] = { | 3587 MockWrite data_writes[] = { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3531 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. | 3625 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. |
3532 session->CloseAllConnections(); | 3626 session->CloseAllConnections(); |
3533 } | 3627 } |
3534 | 3628 |
3535 // Test that we don't pass extraneous headers from the proxy's response to the | 3629 // Test that we don't pass extraneous headers from the proxy's response to the |
3536 // caller when the proxy responds to CONNECT with 407. | 3630 // caller when the proxy responds to CONNECT with 407. |
3537 TEST_F(HttpNetworkTransactionTest, SanitizeProxyAuthHeaders) { | 3631 TEST_F(HttpNetworkTransactionTest, SanitizeProxyAuthHeaders) { |
3538 HttpRequestInfo request; | 3632 HttpRequestInfo request; |
3539 request.method = "GET"; | 3633 request.method = "GET"; |
3540 request.url = GURL("https://www.example.org/"); | 3634 request.url = GURL("https://www.example.org/"); |
3541 request.load_flags = 0; | |
3542 | 3635 |
3543 // Configure against proxy server "myproxy:70". | 3636 // Configure against proxy server "myproxy:70". |
3544 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 3637 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
3545 | 3638 |
3546 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3639 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
3547 | 3640 |
3548 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 3641 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
3549 | 3642 |
3550 // Since we have proxy, should try to establish tunnel. | 3643 // Since we have proxy, should try to establish tunnel. |
3551 MockWrite data_writes[] = { | 3644 MockWrite data_writes[] = { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3592 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. | 3685 // Flush the idle socket before the HttpNetworkTransaction goes out of scope. |
3593 session->CloseAllConnections(); | 3686 session->CloseAllConnections(); |
3594 } | 3687 } |
3595 | 3688 |
3596 // Test when a server (non-proxy) returns a 407 (proxy-authenticate). | 3689 // Test when a server (non-proxy) returns a 407 (proxy-authenticate). |
3597 // The request should fail with ERR_UNEXPECTED_PROXY_AUTH. | 3690 // The request should fail with ERR_UNEXPECTED_PROXY_AUTH. |
3598 TEST_F(HttpNetworkTransactionTest, UnexpectedProxyAuth) { | 3691 TEST_F(HttpNetworkTransactionTest, UnexpectedProxyAuth) { |
3599 HttpRequestInfo request; | 3692 HttpRequestInfo request; |
3600 request.method = "GET"; | 3693 request.method = "GET"; |
3601 request.url = GURL("http://www.example.org/"); | 3694 request.url = GURL("http://www.example.org/"); |
3602 request.load_flags = 0; | |
3603 | 3695 |
3604 // We are using a DIRECT connection (i.e. no proxy) for this session. | 3696 // We are using a DIRECT connection (i.e. no proxy) for this session. |
3605 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3697 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
3606 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 3698 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
3607 | 3699 |
3608 MockWrite data_writes1[] = { | 3700 MockWrite data_writes1[] = { |
3609 MockWrite( | 3701 MockWrite( |
3610 "GET / HTTP/1.1\r\n" | 3702 "GET / HTTP/1.1\r\n" |
3611 "Host: www.example.org\r\n" | 3703 "Host: www.example.org\r\n" |
3612 "Connection: keep-alive\r\n\r\n"), | 3704 "Connection: keep-alive\r\n\r\n"), |
(...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4525 | 4617 |
4526 // The password prompt info should not be set. | 4618 // The password prompt info should not be set. |
4527 EXPECT_FALSE(response->auth_challenge); | 4619 EXPECT_FALSE(response->auth_challenge); |
4528 } | 4620 } |
4529 | 4621 |
4530 // Test a SPDY get through an HTTPS Proxy. | 4622 // Test a SPDY get through an HTTPS Proxy. |
4531 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyGet) { | 4623 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyGet) { |
4532 HttpRequestInfo request; | 4624 HttpRequestInfo request; |
4533 request.method = "GET"; | 4625 request.method = "GET"; |
4534 request.url = GURL("http://www.example.org/"); | 4626 request.url = GURL("http://www.example.org/"); |
4535 request.load_flags = 0; | |
4536 | 4627 |
4537 // Configure against https proxy server "proxy:70". | 4628 // Configure against https proxy server "proxy:70". |
4538 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 4629 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
4539 BoundTestNetLog log; | 4630 BoundTestNetLog log; |
4540 session_deps_.net_log = log.bound().net_log(); | 4631 session_deps_.net_log = log.bound().net_log(); |
4541 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4632 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
4542 | 4633 |
4543 // fetch http://www.example.org/ via SPDY | 4634 // fetch http://www.example.org/ via SPDY |
4544 SpdySerializedFrame req( | 4635 SpdySerializedFrame req( |
4545 spdy_util_.ConstructSpdyGet("http://www.example.org/", 1, LOWEST)); | 4636 spdy_util_.ConstructSpdyGet("http://www.example.org/", 1, LOWEST)); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4585 EXPECT_EQ(kUploadData, response_data); | 4676 EXPECT_EQ(kUploadData, response_data); |
4586 } | 4677 } |
4587 | 4678 |
4588 // Verifies that a session which races and wins against the owning transaction | 4679 // Verifies that a session which races and wins against the owning transaction |
4589 // (completing prior to host resolution), doesn't fail the transaction. | 4680 // (completing prior to host resolution), doesn't fail the transaction. |
4590 // Regression test for crbug.com/334413. | 4681 // Regression test for crbug.com/334413. |
4591 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyGetWithSessionRace) { | 4682 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyGetWithSessionRace) { |
4592 HttpRequestInfo request; | 4683 HttpRequestInfo request; |
4593 request.method = "GET"; | 4684 request.method = "GET"; |
4594 request.url = GURL("http://www.example.org/"); | 4685 request.url = GURL("http://www.example.org/"); |
4595 request.load_flags = 0; | |
4596 | 4686 |
4597 // Configure SPDY proxy server "proxy:70". | 4687 // Configure SPDY proxy server "proxy:70". |
4598 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 4688 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
4599 BoundTestNetLog log; | 4689 BoundTestNetLog log; |
4600 session_deps_.net_log = log.bound().net_log(); | 4690 session_deps_.net_log = log.bound().net_log(); |
4601 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4691 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
4602 | 4692 |
4603 // Fetch http://www.example.org/ through the SPDY proxy. | 4693 // Fetch http://www.example.org/ through the SPDY proxy. |
4604 SpdySerializedFrame req( | 4694 SpdySerializedFrame req( |
4605 spdy_util_.ConstructSpdyGet("http://www.example.org/", 1, LOWEST)); | 4695 spdy_util_.ConstructSpdyGet("http://www.example.org/", 1, LOWEST)); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4653 std::string response_data; | 4743 std::string response_data; |
4654 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); | 4744 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); |
4655 EXPECT_EQ(kUploadData, response_data); | 4745 EXPECT_EQ(kUploadData, response_data); |
4656 } | 4746 } |
4657 | 4747 |
4658 // Test a SPDY get through an HTTPS Proxy. | 4748 // Test a SPDY get through an HTTPS Proxy. |
4659 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyGetWithProxyAuth) { | 4749 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyGetWithProxyAuth) { |
4660 HttpRequestInfo request; | 4750 HttpRequestInfo request; |
4661 request.method = "GET"; | 4751 request.method = "GET"; |
4662 request.url = GURL("http://www.example.org/"); | 4752 request.url = GURL("http://www.example.org/"); |
4663 request.load_flags = 0; | |
4664 | 4753 |
4665 // Configure against https proxy server "myproxy:70". | 4754 // Configure against https proxy server "myproxy:70". |
4666 session_deps_.proxy_service = ProxyService::CreateFixed("https://myproxy:70"); | 4755 session_deps_.proxy_service = ProxyService::CreateFixed("https://myproxy:70"); |
4667 BoundTestNetLog log; | 4756 BoundTestNetLog log; |
4668 session_deps_.net_log = log.bound().net_log(); | 4757 session_deps_.net_log = log.bound().net_log(); |
4669 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4758 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
4670 | 4759 |
4671 // The first request will be a bare GET, the second request will be a | 4760 // The first request will be a bare GET, the second request will be a |
4672 // GET with a Proxy-Authorization header. | 4761 // GET with a Proxy-Authorization header. |
4673 spdy_util_.set_default_url(request.url); | 4762 spdy_util_.set_default_url(request.url); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4746 EXPECT_EQ(200, response_restart->headers->response_code()); | 4835 EXPECT_EQ(200, response_restart->headers->response_code()); |
4747 // The password prompt info should not be set. | 4836 // The password prompt info should not be set. |
4748 EXPECT_FALSE(response_restart->auth_challenge); | 4837 EXPECT_FALSE(response_restart->auth_challenge); |
4749 } | 4838 } |
4750 | 4839 |
4751 // Test a SPDY CONNECT through an HTTPS Proxy to an HTTPS (non-SPDY) Server. | 4840 // Test a SPDY CONNECT through an HTTPS Proxy to an HTTPS (non-SPDY) Server. |
4752 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyConnectHttps) { | 4841 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyConnectHttps) { |
4753 HttpRequestInfo request; | 4842 HttpRequestInfo request; |
4754 request.method = "GET"; | 4843 request.method = "GET"; |
4755 request.url = GURL("https://www.example.org/"); | 4844 request.url = GURL("https://www.example.org/"); |
4756 request.load_flags = 0; | |
4757 | 4845 |
4758 // Configure against https proxy server "proxy:70". | 4846 // Configure against https proxy server "proxy:70". |
4759 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 4847 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
4760 BoundTestNetLog log; | 4848 BoundTestNetLog log; |
4761 session_deps_.net_log = log.bound().net_log(); | 4849 session_deps_.net_log = log.bound().net_log(); |
4762 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4850 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
4763 | 4851 |
4764 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 4852 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
4765 | 4853 |
4766 // CONNECT to www.example.org:443 via SPDY | 4854 // CONNECT to www.example.org:443 via SPDY |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4829 EXPECT_EQ("1234567890", response_data); | 4917 EXPECT_EQ("1234567890", response_data); |
4830 } | 4918 } |
4831 | 4919 |
4832 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. | 4920 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. |
4833 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { | 4921 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { |
4834 SpdyTestUtil spdy_util_wrapped; | 4922 SpdyTestUtil spdy_util_wrapped; |
4835 | 4923 |
4836 HttpRequestInfo request; | 4924 HttpRequestInfo request; |
4837 request.method = "GET"; | 4925 request.method = "GET"; |
4838 request.url = GURL("https://www.example.org/"); | 4926 request.url = GURL("https://www.example.org/"); |
4839 request.load_flags = 0; | |
4840 | 4927 |
4841 // Configure against https proxy server "proxy:70". | 4928 // Configure against https proxy server "proxy:70". |
4842 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 4929 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
4843 BoundTestNetLog log; | 4930 BoundTestNetLog log; |
4844 session_deps_.net_log = log.bound().net_log(); | 4931 session_deps_.net_log = log.bound().net_log(); |
4845 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4932 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
4846 | 4933 |
4847 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 4934 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
4848 | 4935 |
4849 // CONNECT to www.example.org:443 via SPDY | 4936 // CONNECT to www.example.org:443 via SPDY |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4916 std::string response_data; | 5003 std::string response_data; |
4917 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); | 5004 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); |
4918 EXPECT_EQ(kUploadData, response_data); | 5005 EXPECT_EQ(kUploadData, response_data); |
4919 } | 5006 } |
4920 | 5007 |
4921 // Test a SPDY CONNECT failure through an HTTPS Proxy. | 5008 // Test a SPDY CONNECT failure through an HTTPS Proxy. |
4922 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) { | 5009 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) { |
4923 HttpRequestInfo request; | 5010 HttpRequestInfo request; |
4924 request.method = "GET"; | 5011 request.method = "GET"; |
4925 request.url = GURL("https://www.example.org/"); | 5012 request.url = GURL("https://www.example.org/"); |
4926 request.load_flags = 0; | |
4927 | 5013 |
4928 // Configure against https proxy server "proxy:70". | 5014 // Configure against https proxy server "proxy:70". |
4929 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 5015 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
4930 BoundTestNetLog log; | 5016 BoundTestNetLog log; |
4931 session_deps_.net_log = log.bound().net_log(); | 5017 session_deps_.net_log = log.bound().net_log(); |
4932 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 5018 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
4933 | 5019 |
4934 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 5020 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
4935 | 5021 |
4936 // CONNECT to www.example.org:443 via SPDY | 5022 // CONNECT to www.example.org:443 via SPDY |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5414 | 5500 |
5415 // The password prompt info should not be set. | 5501 // The password prompt info should not be set. |
5416 EXPECT_FALSE(response->auth_challenge); | 5502 EXPECT_FALSE(response->auth_challenge); |
5417 } | 5503 } |
5418 | 5504 |
5419 void HttpNetworkTransactionTest::ConnectStatusHelperWithExpectedStatus( | 5505 void HttpNetworkTransactionTest::ConnectStatusHelperWithExpectedStatus( |
5420 const MockRead& status, int expected_status) { | 5506 const MockRead& status, int expected_status) { |
5421 HttpRequestInfo request; | 5507 HttpRequestInfo request; |
5422 request.method = "GET"; | 5508 request.method = "GET"; |
5423 request.url = GURL("https://www.example.org/"); | 5509 request.url = GURL("https://www.example.org/"); |
5424 request.load_flags = 0; | |
5425 | 5510 |
5426 // Configure against proxy server "myproxy:70". | 5511 // Configure against proxy server "myproxy:70". |
5427 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 5512 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
5428 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 5513 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
5429 | 5514 |
5430 // Since we have proxy, should try to establish tunnel. | 5515 // Since we have proxy, should try to establish tunnel. |
5431 MockWrite data_writes[] = { | 5516 MockWrite data_writes[] = { |
5432 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" | 5517 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" |
5433 "Host: www.example.org:443\r\n" | 5518 "Host: www.example.org:443\r\n" |
5434 "Proxy-Connection: keep-alive\r\n\r\n"), | 5519 "Proxy-Connection: keep-alive\r\n\r\n"), |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5629 ConnectStatusHelper(MockRead("HTTP/1.1 505 HTTP Version Not Supported\r\n")); | 5714 ConnectStatusHelper(MockRead("HTTP/1.1 505 HTTP Version Not Supported\r\n")); |
5630 } | 5715 } |
5631 | 5716 |
5632 // Test the flow when both the proxy server AND origin server require | 5717 // Test the flow when both the proxy server AND origin server require |
5633 // authentication. Again, this uses basic auth for both since that is | 5718 // authentication. Again, this uses basic auth for both since that is |
5634 // the simplest to mock. | 5719 // the simplest to mock. |
5635 TEST_F(HttpNetworkTransactionTest, BasicAuthProxyThenServer) { | 5720 TEST_F(HttpNetworkTransactionTest, BasicAuthProxyThenServer) { |
5636 HttpRequestInfo request; | 5721 HttpRequestInfo request; |
5637 request.method = "GET"; | 5722 request.method = "GET"; |
5638 request.url = GURL("http://www.example.org/"); | 5723 request.url = GURL("http://www.example.org/"); |
5639 request.load_flags = 0; | |
5640 | 5724 |
5641 // Configure against proxy server "myproxy:70". | 5725 // Configure against proxy server "myproxy:70". |
5642 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 5726 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
5643 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 5727 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
5644 | 5728 |
5645 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 5729 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
5646 | 5730 |
5647 MockWrite data_writes1[] = { | 5731 MockWrite data_writes1[] = { |
5648 MockWrite( | 5732 MockWrite( |
5649 "GET http://www.example.org/ HTTP/1.1\r\n" | 5733 "GET http://www.example.org/ HTTP/1.1\r\n" |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5891 ASSERT_TRUE(response); | 5975 ASSERT_TRUE(response); |
5892 EXPECT_FALSE(response->auth_challenge); | 5976 EXPECT_FALSE(response->auth_challenge); |
5893 EXPECT_EQ(13, response->headers->GetContentLength()); | 5977 EXPECT_EQ(13, response->headers->GetContentLength()); |
5894 } | 5978 } |
5895 | 5979 |
5896 // Enter a wrong password, and then the correct one. | 5980 // Enter a wrong password, and then the correct one. |
5897 TEST_F(HttpNetworkTransactionTest, NTLMAuth2) { | 5981 TEST_F(HttpNetworkTransactionTest, NTLMAuth2) { |
5898 HttpRequestInfo request; | 5982 HttpRequestInfo request; |
5899 request.method = "GET"; | 5983 request.method = "GET"; |
5900 request.url = GURL("http://172.22.68.17/kids/login.aspx"); | 5984 request.url = GURL("http://172.22.68.17/kids/login.aspx"); |
5901 request.load_flags = 0; | |
5902 | 5985 |
5903 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom2, | 5986 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom2, |
5904 MockGetHostName); | 5987 MockGetHostName); |
5905 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 5988 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
5906 | 5989 |
5907 MockWrite data_writes1[] = { | 5990 MockWrite data_writes1[] = { |
5908 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 5991 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" |
5909 "Host: 172.22.68.17\r\n" | 5992 "Host: 172.22.68.17\r\n" |
5910 "Connection: keep-alive\r\n\r\n"), | 5993 "Connection: keep-alive\r\n\r\n"), |
5911 }; | 5994 }; |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6092 } | 6175 } |
6093 #endif // NTLM_PORTABLE | 6176 #endif // NTLM_PORTABLE |
6094 | 6177 |
6095 // Test reading a server response which has only headers, and no body. | 6178 // Test reading a server response which has only headers, and no body. |
6096 // After some maximum number of bytes is consumed, the transaction should | 6179 // After some maximum number of bytes is consumed, the transaction should |
6097 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. | 6180 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. |
6098 TEST_F(HttpNetworkTransactionTest, LargeHeadersNoBody) { | 6181 TEST_F(HttpNetworkTransactionTest, LargeHeadersNoBody) { |
6099 HttpRequestInfo request; | 6182 HttpRequestInfo request; |
6100 request.method = "GET"; | 6183 request.method = "GET"; |
6101 request.url = GURL("http://www.example.org/"); | 6184 request.url = GURL("http://www.example.org/"); |
6102 request.load_flags = 0; | |
6103 | 6185 |
6104 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6186 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6105 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 6187 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
6106 | 6188 |
6107 // Respond with 300 kb of headers (we should fail after 256 kb). | 6189 // Respond with 300 kb of headers (we should fail after 256 kb). |
6108 std::string large_headers_string; | 6190 std::string large_headers_string; |
6109 FillLargeHeadersString(&large_headers_string, 300 * 1024); | 6191 FillLargeHeadersString(&large_headers_string, 300 * 1024); |
6110 | 6192 |
6111 MockRead data_reads[] = { | 6193 MockRead data_reads[] = { |
6112 MockRead("HTTP/1.0 200 OK\r\n"), | 6194 MockRead("HTTP/1.0 200 OK\r\n"), |
(...skipping 13 matching lines...) Expand all Loading... |
6126 EXPECT_THAT(rv, IsError(ERR_RESPONSE_HEADERS_TOO_BIG)); | 6208 EXPECT_THAT(rv, IsError(ERR_RESPONSE_HEADERS_TOO_BIG)); |
6127 } | 6209 } |
6128 | 6210 |
6129 // Make sure that we don't try to reuse a TCPClientSocket when failing to | 6211 // Make sure that we don't try to reuse a TCPClientSocket when failing to |
6130 // establish tunnel. | 6212 // establish tunnel. |
6131 // http://code.google.com/p/chromium/issues/detail?id=3772 | 6213 // http://code.google.com/p/chromium/issues/detail?id=3772 |
6132 TEST_F(HttpNetworkTransactionTest, DontRecycleTransportSocketForSSLTunnel) { | 6214 TEST_F(HttpNetworkTransactionTest, DontRecycleTransportSocketForSSLTunnel) { |
6133 HttpRequestInfo request; | 6215 HttpRequestInfo request; |
6134 request.method = "GET"; | 6216 request.method = "GET"; |
6135 request.url = GURL("https://www.example.org/"); | 6217 request.url = GURL("https://www.example.org/"); |
6136 request.load_flags = 0; | |
6137 | 6218 |
6138 // Configure against proxy server "myproxy:70". | 6219 // Configure against proxy server "myproxy:70". |
6139 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 6220 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
6140 | 6221 |
6141 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6222 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6142 | 6223 |
6143 std::unique_ptr<HttpNetworkTransaction> trans( | 6224 std::unique_ptr<HttpNetworkTransaction> trans( |
6144 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6225 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
6145 | 6226 |
6146 // Since we have proxy, should try to establish tunnel. | 6227 // Since we have proxy, should try to establish tunnel. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6182 base::RunLoop().RunUntilIdle(); | 6263 base::RunLoop().RunUntilIdle(); |
6183 // Make sure that the socket didn't get recycled after calling the destructor. | 6264 // Make sure that the socket didn't get recycled after calling the destructor. |
6184 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 6265 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
6185 } | 6266 } |
6186 | 6267 |
6187 // Make sure that we recycle a socket after reading all of the response body. | 6268 // Make sure that we recycle a socket after reading all of the response body. |
6188 TEST_F(HttpNetworkTransactionTest, RecycleSocket) { | 6269 TEST_F(HttpNetworkTransactionTest, RecycleSocket) { |
6189 HttpRequestInfo request; | 6270 HttpRequestInfo request; |
6190 request.method = "GET"; | 6271 request.method = "GET"; |
6191 request.url = GURL("http://www.example.org/"); | 6272 request.url = GURL("http://www.example.org/"); |
6192 request.load_flags = 0; | |
6193 | 6273 |
6194 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6274 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6195 | 6275 |
6196 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 6276 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
6197 | 6277 |
6198 MockRead data_reads[] = { | 6278 MockRead data_reads[] = { |
6199 // A part of the response body is received with the response headers. | 6279 // A part of the response body is received with the response headers. |
6200 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\nhel"), | 6280 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\nhel"), |
6201 // The rest of the response body is received in two parts. | 6281 // The rest of the response body is received in two parts. |
6202 MockRead("lo"), | 6282 MockRead("lo"), |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6237 // We now check to make sure the socket was added back to the pool. | 6317 // We now check to make sure the socket was added back to the pool. |
6238 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); | 6318 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); |
6239 } | 6319 } |
6240 | 6320 |
6241 // Make sure that we recycle a SSL socket after reading all of the response | 6321 // Make sure that we recycle a SSL socket after reading all of the response |
6242 // body. | 6322 // body. |
6243 TEST_F(HttpNetworkTransactionTest, RecycleSSLSocket) { | 6323 TEST_F(HttpNetworkTransactionTest, RecycleSSLSocket) { |
6244 HttpRequestInfo request; | 6324 HttpRequestInfo request; |
6245 request.method = "GET"; | 6325 request.method = "GET"; |
6246 request.url = GURL("https://www.example.org/"); | 6326 request.url = GURL("https://www.example.org/"); |
6247 request.load_flags = 0; | |
6248 | 6327 |
6249 MockWrite data_writes[] = { | 6328 MockWrite data_writes[] = { |
6250 MockWrite( | 6329 MockWrite( |
6251 "GET / HTTP/1.1\r\n" | 6330 "GET / HTTP/1.1\r\n" |
6252 "Host: www.example.org\r\n" | 6331 "Host: www.example.org\r\n" |
6253 "Connection: keep-alive\r\n\r\n"), | 6332 "Connection: keep-alive\r\n\r\n"), |
6254 }; | 6333 }; |
6255 | 6334 |
6256 MockRead data_reads[] = { | 6335 MockRead data_reads[] = { |
6257 MockRead("HTTP/1.1 200 OK\r\n"), | 6336 MockRead("HTTP/1.1 200 OK\r\n"), |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6296 // We now check to make sure the socket was added back to the pool. | 6375 // We now check to make sure the socket was added back to the pool. |
6297 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 6376 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
6298 } | 6377 } |
6299 | 6378 |
6300 // Grab a SSL socket, use it, and put it back into the pool. Then, reuse it | 6379 // Grab a SSL socket, use it, and put it back into the pool. Then, reuse it |
6301 // from the pool and make sure that we recover okay. | 6380 // from the pool and make sure that we recover okay. |
6302 TEST_F(HttpNetworkTransactionTest, RecycleDeadSSLSocket) { | 6381 TEST_F(HttpNetworkTransactionTest, RecycleDeadSSLSocket) { |
6303 HttpRequestInfo request; | 6382 HttpRequestInfo request; |
6304 request.method = "GET"; | 6383 request.method = "GET"; |
6305 request.url = GURL("https://www.example.org/"); | 6384 request.url = GURL("https://www.example.org/"); |
6306 request.load_flags = 0; | |
6307 | 6385 |
6308 MockWrite data_writes[] = { | 6386 MockWrite data_writes[] = { |
6309 MockWrite( | 6387 MockWrite( |
6310 "GET / HTTP/1.1\r\n" | 6388 "GET / HTTP/1.1\r\n" |
6311 "Host: www.example.org\r\n" | 6389 "Host: www.example.org\r\n" |
6312 "Connection: keep-alive\r\n\r\n"), | 6390 "Connection: keep-alive\r\n\r\n"), |
6313 MockWrite( | 6391 MockWrite( |
6314 "GET / HTTP/1.1\r\n" | 6392 "GET / HTTP/1.1\r\n" |
6315 "Host: www.example.org\r\n" | 6393 "Host: www.example.org\r\n" |
6316 "Connection: keep-alive\r\n\r\n"), | 6394 "Connection: keep-alive\r\n\r\n"), |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6527 // Make sure that we recycle a socket after a zero-length response. | 6605 // Make sure that we recycle a socket after a zero-length response. |
6528 // http://crbug.com/9880 | 6606 // http://crbug.com/9880 |
6529 TEST_F(HttpNetworkTransactionTest, RecycleSocketAfterZeroContentLength) { | 6607 TEST_F(HttpNetworkTransactionTest, RecycleSocketAfterZeroContentLength) { |
6530 HttpRequestInfo request; | 6608 HttpRequestInfo request; |
6531 request.method = "GET"; | 6609 request.method = "GET"; |
6532 request.url = GURL( | 6610 request.url = GURL( |
6533 "http://www.example.org/csi?v=3&s=web&action=&" | 6611 "http://www.example.org/csi?v=3&s=web&action=&" |
6534 "tran=undefined&ei=mAXcSeegAo-SMurloeUN&" | 6612 "tran=undefined&ei=mAXcSeegAo-SMurloeUN&" |
6535 "e=17259,18167,19592,19773,19981,20133,20173,20233&" | 6613 "e=17259,18167,19592,19773,19981,20133,20173,20233&" |
6536 "rt=prt.2642,ol.2649,xjs.2951"); | 6614 "rt=prt.2642,ol.2649,xjs.2951"); |
6537 request.load_flags = 0; | |
6538 | 6615 |
6539 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6616 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6540 | 6617 |
6541 MockRead data_reads[] = { | 6618 MockRead data_reads[] = { |
6542 MockRead("HTTP/1.1 204 No Content\r\n" | 6619 MockRead("HTTP/1.1 204 No Content\r\n" |
6543 "Content-Length: 0\r\n" | 6620 "Content-Length: 0\r\n" |
6544 "Content-Type: text/html\r\n\r\n"), | 6621 "Content-Type: text/html\r\n\r\n"), |
6545 MockRead("junk"), // Should not be read!! | 6622 MockRead("junk"), // Should not be read!! |
6546 MockRead(SYNCHRONOUS, OK), | 6623 MockRead(SYNCHRONOUS, OK), |
6547 }; | 6624 }; |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6944 | 7021 |
6945 // Test that previously tried username/passwords for a realm get re-used. | 7022 // Test that previously tried username/passwords for a realm get re-used. |
6946 TEST_F(HttpNetworkTransactionTest, BasicAuthCacheAndPreauth) { | 7023 TEST_F(HttpNetworkTransactionTest, BasicAuthCacheAndPreauth) { |
6947 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7024 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
6948 | 7025 |
6949 // Transaction 1: authenticate (foo, bar) on MyRealm1 | 7026 // Transaction 1: authenticate (foo, bar) on MyRealm1 |
6950 { | 7027 { |
6951 HttpRequestInfo request; | 7028 HttpRequestInfo request; |
6952 request.method = "GET"; | 7029 request.method = "GET"; |
6953 request.url = GURL("http://www.example.org/x/y/z"); | 7030 request.url = GURL("http://www.example.org/x/y/z"); |
6954 request.load_flags = 0; | |
6955 | 7031 |
6956 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 7032 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
6957 | 7033 |
6958 MockWrite data_writes1[] = { | 7034 MockWrite data_writes1[] = { |
6959 MockWrite( | 7035 MockWrite( |
6960 "GET /x/y/z HTTP/1.1\r\n" | 7036 "GET /x/y/z HTTP/1.1\r\n" |
6961 "Host: www.example.org\r\n" | 7037 "Host: www.example.org\r\n" |
6962 "Connection: keep-alive\r\n\r\n"), | 7038 "Connection: keep-alive\r\n\r\n"), |
6963 }; | 7039 }; |
6964 | 7040 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7021 | 7097 |
7022 // ------------------------------------------------------------------------ | 7098 // ------------------------------------------------------------------------ |
7023 | 7099 |
7024 // Transaction 2: authenticate (foo2, bar2) on MyRealm2 | 7100 // Transaction 2: authenticate (foo2, bar2) on MyRealm2 |
7025 { | 7101 { |
7026 HttpRequestInfo request; | 7102 HttpRequestInfo request; |
7027 request.method = "GET"; | 7103 request.method = "GET"; |
7028 // Note that Transaction 1 was at /x/y/z, so this is in the same | 7104 // Note that Transaction 1 was at /x/y/z, so this is in the same |
7029 // protection space as MyRealm1. | 7105 // protection space as MyRealm1. |
7030 request.url = GURL("http://www.example.org/x/y/a/b"); | 7106 request.url = GURL("http://www.example.org/x/y/a/b"); |
7031 request.load_flags = 0; | |
7032 | 7107 |
7033 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 7108 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
7034 | 7109 |
7035 MockWrite data_writes1[] = { | 7110 MockWrite data_writes1[] = { |
7036 MockWrite( | 7111 MockWrite( |
7037 "GET /x/y/a/b HTTP/1.1\r\n" | 7112 "GET /x/y/a/b HTTP/1.1\r\n" |
7038 "Host: www.example.org\r\n" | 7113 "Host: www.example.org\r\n" |
7039 "Connection: keep-alive\r\n" | 7114 "Connection: keep-alive\r\n" |
7040 // Send preemptive authorization for MyRealm1 | 7115 // Send preemptive authorization for MyRealm1 |
7041 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 7116 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7106 } | 7181 } |
7107 | 7182 |
7108 // ------------------------------------------------------------------------ | 7183 // ------------------------------------------------------------------------ |
7109 | 7184 |
7110 // Transaction 3: Resend a request in MyRealm's protection space -- | 7185 // Transaction 3: Resend a request in MyRealm's protection space -- |
7111 // succeed with preemptive authorization. | 7186 // succeed with preemptive authorization. |
7112 { | 7187 { |
7113 HttpRequestInfo request; | 7188 HttpRequestInfo request; |
7114 request.method = "GET"; | 7189 request.method = "GET"; |
7115 request.url = GURL("http://www.example.org/x/y/z2"); | 7190 request.url = GURL("http://www.example.org/x/y/z2"); |
7116 request.load_flags = 0; | |
7117 | 7191 |
7118 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 7192 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
7119 | 7193 |
7120 MockWrite data_writes1[] = { | 7194 MockWrite data_writes1[] = { |
7121 MockWrite( | 7195 MockWrite( |
7122 "GET /x/y/z2 HTTP/1.1\r\n" | 7196 "GET /x/y/z2 HTTP/1.1\r\n" |
7123 "Host: www.example.org\r\n" | 7197 "Host: www.example.org\r\n" |
7124 "Connection: keep-alive\r\n" | 7198 "Connection: keep-alive\r\n" |
7125 // The authorization for MyRealm1 gets sent preemptively | 7199 // The authorization for MyRealm1 gets sent preemptively |
7126 // (since the url is in the same protection space) | 7200 // (since the url is in the same protection space) |
(...skipping 27 matching lines...) Expand all Loading... |
7154 } | 7228 } |
7155 | 7229 |
7156 // ------------------------------------------------------------------------ | 7230 // ------------------------------------------------------------------------ |
7157 | 7231 |
7158 // Transaction 4: request another URL in MyRealm (however the | 7232 // Transaction 4: request another URL in MyRealm (however the |
7159 // url is not known to belong to the protection space, so no pre-auth). | 7233 // url is not known to belong to the protection space, so no pre-auth). |
7160 { | 7234 { |
7161 HttpRequestInfo request; | 7235 HttpRequestInfo request; |
7162 request.method = "GET"; | 7236 request.method = "GET"; |
7163 request.url = GURL("http://www.example.org/x/1"); | 7237 request.url = GURL("http://www.example.org/x/1"); |
7164 request.load_flags = 0; | |
7165 | 7238 |
7166 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 7239 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
7167 | 7240 |
7168 MockWrite data_writes1[] = { | 7241 MockWrite data_writes1[] = { |
7169 MockWrite( | 7242 MockWrite( |
7170 "GET /x/1 HTTP/1.1\r\n" | 7243 "GET /x/1 HTTP/1.1\r\n" |
7171 "Host: www.example.org\r\n" | 7244 "Host: www.example.org\r\n" |
7172 "Connection: keep-alive\r\n\r\n"), | 7245 "Connection: keep-alive\r\n\r\n"), |
7173 }; | 7246 }; |
7174 | 7247 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7225 } | 7298 } |
7226 | 7299 |
7227 // ------------------------------------------------------------------------ | 7300 // ------------------------------------------------------------------------ |
7228 | 7301 |
7229 // Transaction 5: request a URL in MyRealm, but the server rejects the | 7302 // Transaction 5: request a URL in MyRealm, but the server rejects the |
7230 // cached identity. Should invalidate and re-prompt. | 7303 // cached identity. Should invalidate and re-prompt. |
7231 { | 7304 { |
7232 HttpRequestInfo request; | 7305 HttpRequestInfo request; |
7233 request.method = "GET"; | 7306 request.method = "GET"; |
7234 request.url = GURL("http://www.example.org/p/q/t"); | 7307 request.url = GURL("http://www.example.org/p/q/t"); |
7235 request.load_flags = 0; | |
7236 | 7308 |
7237 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 7309 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
7238 | 7310 |
7239 MockWrite data_writes1[] = { | 7311 MockWrite data_writes1[] = { |
7240 MockWrite( | 7312 MockWrite( |
7241 "GET /p/q/t HTTP/1.1\r\n" | 7313 "GET /p/q/t HTTP/1.1\r\n" |
7242 "Host: www.example.org\r\n" | 7314 "Host: www.example.org\r\n" |
7243 "Connection: keep-alive\r\n\r\n"), | 7315 "Connection: keep-alive\r\n\r\n"), |
7244 }; | 7316 }; |
7245 | 7317 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7339 new HttpAuthHandlerDigest::FixedNonceGenerator("0123456789abcdef"); | 7411 new HttpAuthHandlerDigest::FixedNonceGenerator("0123456789abcdef"); |
7340 digest_factory->set_nonce_generator(nonce_generator); | 7412 digest_factory->set_nonce_generator(nonce_generator); |
7341 session_deps_.http_auth_handler_factory.reset(digest_factory); | 7413 session_deps_.http_auth_handler_factory.reset(digest_factory); |
7342 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7414 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7343 | 7415 |
7344 // Transaction 1: authenticate (foo, bar) on MyRealm1 | 7416 // Transaction 1: authenticate (foo, bar) on MyRealm1 |
7345 { | 7417 { |
7346 HttpRequestInfo request; | 7418 HttpRequestInfo request; |
7347 request.method = "GET"; | 7419 request.method = "GET"; |
7348 request.url = GURL("http://www.example.org/x/y/z"); | 7420 request.url = GURL("http://www.example.org/x/y/z"); |
7349 request.load_flags = 0; | |
7350 | 7421 |
7351 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 7422 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
7352 | 7423 |
7353 MockWrite data_writes1[] = { | 7424 MockWrite data_writes1[] = { |
7354 MockWrite( | 7425 MockWrite( |
7355 "GET /x/y/z HTTP/1.1\r\n" | 7426 "GET /x/y/z HTTP/1.1\r\n" |
7356 "Host: www.example.org\r\n" | 7427 "Host: www.example.org\r\n" |
7357 "Connection: keep-alive\r\n\r\n"), | 7428 "Connection: keep-alive\r\n\r\n"), |
7358 }; | 7429 }; |
7359 | 7430 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7419 | 7490 |
7420 // Transaction 2: Request another resource in digestive's protection space. | 7491 // Transaction 2: Request another resource in digestive's protection space. |
7421 // This will preemptively add an Authorization header which should have an | 7492 // This will preemptively add an Authorization header which should have an |
7422 // "nc" value of 2 (as compared to 1 in the first use. | 7493 // "nc" value of 2 (as compared to 1 in the first use. |
7423 { | 7494 { |
7424 HttpRequestInfo request; | 7495 HttpRequestInfo request; |
7425 request.method = "GET"; | 7496 request.method = "GET"; |
7426 // Note that Transaction 1 was at /x/y/z, so this is in the same | 7497 // Note that Transaction 1 was at /x/y/z, so this is in the same |
7427 // protection space as digest. | 7498 // protection space as digest. |
7428 request.url = GURL("http://www.example.org/x/y/a/b"); | 7499 request.url = GURL("http://www.example.org/x/y/a/b"); |
7429 request.load_flags = 0; | |
7430 | 7500 |
7431 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 7501 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
7432 | 7502 |
7433 MockWrite data_writes1[] = { | 7503 MockWrite data_writes1[] = { |
7434 MockWrite( | 7504 MockWrite( |
7435 "GET /x/y/a/b HTTP/1.1\r\n" | 7505 "GET /x/y/a/b HTTP/1.1\r\n" |
7436 "Host: www.example.org\r\n" | 7506 "Host: www.example.org\r\n" |
7437 "Connection: keep-alive\r\n" | 7507 "Connection: keep-alive\r\n" |
7438 "Authorization: Digest username=\"foo\", realm=\"digestive\", " | 7508 "Authorization: Digest username=\"foo\", realm=\"digestive\", " |
7439 "nonce=\"OU812\", uri=\"/x/y/a/b\", algorithm=MD5, " | 7509 "nonce=\"OU812\", uri=\"/x/y/a/b\", algorithm=MD5, " |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7506 EXPECT_FALSE(response->was_cached); | 7576 EXPECT_FALSE(response->was_cached); |
7507 EXPECT_EQ(0U, response->ssl_info.cert_status); | 7577 EXPECT_EQ(0U, response->ssl_info.cert_status); |
7508 EXPECT_FALSE(response->vary_data.is_valid()); | 7578 EXPECT_FALSE(response->vary_data.is_valid()); |
7509 } | 7579 } |
7510 | 7580 |
7511 // Test HTTPS connections to a site with a bad certificate | 7581 // Test HTTPS connections to a site with a bad certificate |
7512 TEST_F(HttpNetworkTransactionTest, HTTPSBadCertificate) { | 7582 TEST_F(HttpNetworkTransactionTest, HTTPSBadCertificate) { |
7513 HttpRequestInfo request; | 7583 HttpRequestInfo request; |
7514 request.method = "GET"; | 7584 request.method = "GET"; |
7515 request.url = GURL("https://www.example.org/"); | 7585 request.url = GURL("https://www.example.org/"); |
7516 request.load_flags = 0; | |
7517 | 7586 |
7518 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7587 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
7519 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 7588 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
7520 | 7589 |
7521 MockWrite data_writes[] = { | 7590 MockWrite data_writes[] = { |
7522 MockWrite( | 7591 MockWrite( |
7523 "GET / HTTP/1.1\r\n" | 7592 "GET / HTTP/1.1\r\n" |
7524 "Host: www.example.org\r\n" | 7593 "Host: www.example.org\r\n" |
7525 "Connection: keep-alive\r\n\r\n"), | 7594 "Connection: keep-alive\r\n\r\n"), |
7526 }; | 7595 }; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7564 } | 7633 } |
7565 | 7634 |
7566 // Test HTTPS connections to a site with a bad certificate, going through a | 7635 // Test HTTPS connections to a site with a bad certificate, going through a |
7567 // proxy | 7636 // proxy |
7568 TEST_F(HttpNetworkTransactionTest, HTTPSBadCertificateViaProxy) { | 7637 TEST_F(HttpNetworkTransactionTest, HTTPSBadCertificateViaProxy) { |
7569 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 7638 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
7570 | 7639 |
7571 HttpRequestInfo request; | 7640 HttpRequestInfo request; |
7572 request.method = "GET"; | 7641 request.method = "GET"; |
7573 request.url = GURL("https://www.example.org/"); | 7642 request.url = GURL("https://www.example.org/"); |
7574 request.load_flags = 0; | |
7575 | 7643 |
7576 MockWrite proxy_writes[] = { | 7644 MockWrite proxy_writes[] = { |
7577 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" | 7645 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" |
7578 "Host: www.example.org:443\r\n" | 7646 "Host: www.example.org:443\r\n" |
7579 "Proxy-Connection: keep-alive\r\n\r\n"), | 7647 "Proxy-Connection: keep-alive\r\n\r\n"), |
7580 }; | 7648 }; |
7581 | 7649 |
7582 MockRead proxy_reads[] = { | 7650 MockRead proxy_reads[] = { |
7583 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), | 7651 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), |
7584 MockRead(SYNCHRONOUS, OK) | 7652 MockRead(SYNCHRONOUS, OK) |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7645 // Test HTTPS connections to a site, going through an HTTPS proxy | 7713 // Test HTTPS connections to a site, going through an HTTPS proxy |
7646 TEST_F(HttpNetworkTransactionTest, HTTPSViaHttpsProxy) { | 7714 TEST_F(HttpNetworkTransactionTest, HTTPSViaHttpsProxy) { |
7647 session_deps_.proxy_service = | 7715 session_deps_.proxy_service = |
7648 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70"); | 7716 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70"); |
7649 TestNetLog net_log; | 7717 TestNetLog net_log; |
7650 session_deps_.net_log = &net_log; | 7718 session_deps_.net_log = &net_log; |
7651 | 7719 |
7652 HttpRequestInfo request; | 7720 HttpRequestInfo request; |
7653 request.method = "GET"; | 7721 request.method = "GET"; |
7654 request.url = GURL("https://www.example.org/"); | 7722 request.url = GURL("https://www.example.org/"); |
7655 request.load_flags = 0; | |
7656 | 7723 |
7657 MockWrite data_writes[] = { | 7724 MockWrite data_writes[] = { |
7658 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" | 7725 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" |
7659 "Host: www.example.org:443\r\n" | 7726 "Host: www.example.org:443\r\n" |
7660 "Proxy-Connection: keep-alive\r\n\r\n"), | 7727 "Proxy-Connection: keep-alive\r\n\r\n"), |
7661 MockWrite("GET / HTTP/1.1\r\n" | 7728 MockWrite("GET / HTTP/1.1\r\n" |
7662 "Host: www.example.org\r\n" | 7729 "Host: www.example.org\r\n" |
7663 "Connection: keep-alive\r\n\r\n"), | 7730 "Connection: keep-alive\r\n\r\n"), |
7664 }; | 7731 }; |
7665 | 7732 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7709 // Test an HTTPS Proxy's ability to redirect a CONNECT request | 7776 // Test an HTTPS Proxy's ability to redirect a CONNECT request |
7710 TEST_F(HttpNetworkTransactionTest, RedirectOfHttpsConnectViaHttpsProxy) { | 7777 TEST_F(HttpNetworkTransactionTest, RedirectOfHttpsConnectViaHttpsProxy) { |
7711 session_deps_.proxy_service = | 7778 session_deps_.proxy_service = |
7712 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70"); | 7779 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70"); |
7713 TestNetLog net_log; | 7780 TestNetLog net_log; |
7714 session_deps_.net_log = &net_log; | 7781 session_deps_.net_log = &net_log; |
7715 | 7782 |
7716 HttpRequestInfo request; | 7783 HttpRequestInfo request; |
7717 request.method = "GET"; | 7784 request.method = "GET"; |
7718 request.url = GURL("https://www.example.org/"); | 7785 request.url = GURL("https://www.example.org/"); |
7719 request.load_flags = 0; | |
7720 | 7786 |
7721 MockWrite data_writes[] = { | 7787 MockWrite data_writes[] = { |
7722 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" | 7788 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" |
7723 "Host: www.example.org:443\r\n" | 7789 "Host: www.example.org:443\r\n" |
7724 "Proxy-Connection: keep-alive\r\n\r\n"), | 7790 "Proxy-Connection: keep-alive\r\n\r\n"), |
7725 }; | 7791 }; |
7726 | 7792 |
7727 MockRead data_reads[] = { | 7793 MockRead data_reads[] = { |
7728 MockRead("HTTP/1.1 302 Redirect\r\n"), | 7794 MockRead("HTTP/1.1 302 Redirect\r\n"), |
7729 MockRead("Location: http://login.example.com/\r\n"), | 7795 MockRead("Location: http://login.example.com/\r\n"), |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7781 EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); | 7847 EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); |
7782 } | 7848 } |
7783 | 7849 |
7784 // Test an HTTPS (SPDY) Proxy's ability to redirect a CONNECT request | 7850 // Test an HTTPS (SPDY) Proxy's ability to redirect a CONNECT request |
7785 TEST_F(HttpNetworkTransactionTest, RedirectOfHttpsConnectViaSpdyProxy) { | 7851 TEST_F(HttpNetworkTransactionTest, RedirectOfHttpsConnectViaSpdyProxy) { |
7786 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 7852 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
7787 | 7853 |
7788 HttpRequestInfo request; | 7854 HttpRequestInfo request; |
7789 request.method = "GET"; | 7855 request.method = "GET"; |
7790 request.url = GURL("https://www.example.org/"); | 7856 request.url = GURL("https://www.example.org/"); |
7791 request.load_flags = 0; | |
7792 | 7857 |
7793 SpdySerializedFrame conn(spdy_util_.ConstructSpdyConnect( | 7858 SpdySerializedFrame conn(spdy_util_.ConstructSpdyConnect( |
7794 NULL, 0, 1, LOWEST, HostPortPair("www.example.org", 443))); | 7859 NULL, 0, 1, LOWEST, HostPortPair("www.example.org", 443))); |
7795 SpdySerializedFrame goaway( | 7860 SpdySerializedFrame goaway( |
7796 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 7861 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
7797 MockWrite data_writes[] = { | 7862 MockWrite data_writes[] = { |
7798 CreateMockWrite(conn, 0, SYNCHRONOUS), | 7863 CreateMockWrite(conn, 0, SYNCHRONOUS), |
7799 CreateMockWrite(goaway, 2, SYNCHRONOUS), | 7864 CreateMockWrite(goaway, 2, SYNCHRONOUS), |
7800 }; | 7865 }; |
7801 | 7866 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7837 EXPECT_EQ("http://login.example.com/", url); | 7902 EXPECT_EQ("http://login.example.com/", url); |
7838 } | 7903 } |
7839 | 7904 |
7840 // Test that an HTTPS proxy's response to a CONNECT request is filtered. | 7905 // Test that an HTTPS proxy's response to a CONNECT request is filtered. |
7841 TEST_F(HttpNetworkTransactionTest, ErrorResponseToHttpsConnectViaHttpsProxy) { | 7906 TEST_F(HttpNetworkTransactionTest, ErrorResponseToHttpsConnectViaHttpsProxy) { |
7842 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 7907 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
7843 | 7908 |
7844 HttpRequestInfo request; | 7909 HttpRequestInfo request; |
7845 request.method = "GET"; | 7910 request.method = "GET"; |
7846 request.url = GURL("https://www.example.org/"); | 7911 request.url = GURL("https://www.example.org/"); |
7847 request.load_flags = 0; | |
7848 | 7912 |
7849 MockWrite data_writes[] = { | 7913 MockWrite data_writes[] = { |
7850 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" | 7914 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" |
7851 "Host: www.example.org:443\r\n" | 7915 "Host: www.example.org:443\r\n" |
7852 "Proxy-Connection: keep-alive\r\n\r\n"), | 7916 "Proxy-Connection: keep-alive\r\n\r\n"), |
7853 }; | 7917 }; |
7854 | 7918 |
7855 MockRead data_reads[] = { | 7919 MockRead data_reads[] = { |
7856 MockRead("HTTP/1.1 404 Not Found\r\n"), | 7920 MockRead("HTTP/1.1 404 Not Found\r\n"), |
7857 MockRead("Content-Length: 23\r\n\r\n"), | 7921 MockRead("Content-Length: 23\r\n\r\n"), |
(...skipping 22 matching lines...) Expand all Loading... |
7880 // TODO(juliatuttle): Anything else to check here? | 7944 // TODO(juliatuttle): Anything else to check here? |
7881 } | 7945 } |
7882 | 7946 |
7883 // Test that a SPDY proxy's response to a CONNECT request is filtered. | 7947 // Test that a SPDY proxy's response to a CONNECT request is filtered. |
7884 TEST_F(HttpNetworkTransactionTest, ErrorResponseToHttpsConnectViaSpdyProxy) { | 7948 TEST_F(HttpNetworkTransactionTest, ErrorResponseToHttpsConnectViaSpdyProxy) { |
7885 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 7949 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
7886 | 7950 |
7887 HttpRequestInfo request; | 7951 HttpRequestInfo request; |
7888 request.method = "GET"; | 7952 request.method = "GET"; |
7889 request.url = GURL("https://www.example.org/"); | 7953 request.url = GURL("https://www.example.org/"); |
7890 request.load_flags = 0; | |
7891 | 7954 |
7892 SpdySerializedFrame conn(spdy_util_.ConstructSpdyConnect( | 7955 SpdySerializedFrame conn(spdy_util_.ConstructSpdyConnect( |
7893 NULL, 0, 1, LOWEST, HostPortPair("www.example.org", 443))); | 7956 NULL, 0, 1, LOWEST, HostPortPair("www.example.org", 443))); |
7894 SpdySerializedFrame rst( | 7957 SpdySerializedFrame rst( |
7895 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 7958 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
7896 MockWrite data_writes[] = { | 7959 MockWrite data_writes[] = { |
7897 CreateMockWrite(conn, 0), CreateMockWrite(rst, 3), | 7960 CreateMockWrite(conn, 0), CreateMockWrite(rst, 3), |
7898 }; | 7961 }; |
7899 | 7962 |
7900 static const char* const kExtraHeaders[] = { | 7963 static const char* const kExtraHeaders[] = { |
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8348 } | 8411 } |
8349 | 8412 |
8350 // Test HTTPS connections to a site with a bad certificate, going through an | 8413 // Test HTTPS connections to a site with a bad certificate, going through an |
8351 // HTTPS proxy | 8414 // HTTPS proxy |
8352 TEST_F(HttpNetworkTransactionTest, HTTPSBadCertificateViaHttpsProxy) { | 8415 TEST_F(HttpNetworkTransactionTest, HTTPSBadCertificateViaHttpsProxy) { |
8353 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); | 8416 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); |
8354 | 8417 |
8355 HttpRequestInfo request; | 8418 HttpRequestInfo request; |
8356 request.method = "GET"; | 8419 request.method = "GET"; |
8357 request.url = GURL("https://www.example.org/"); | 8420 request.url = GURL("https://www.example.org/"); |
8358 request.load_flags = 0; | |
8359 | 8421 |
8360 // Attempt to fetch the URL from a server with a bad cert | 8422 // Attempt to fetch the URL from a server with a bad cert |
8361 MockWrite bad_cert_writes[] = { | 8423 MockWrite bad_cert_writes[] = { |
8362 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" | 8424 MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" |
8363 "Host: www.example.org:443\r\n" | 8425 "Host: www.example.org:443\r\n" |
8364 "Proxy-Connection: keep-alive\r\n\r\n"), | 8426 "Proxy-Connection: keep-alive\r\n\r\n"), |
8365 }; | 8427 }; |
8366 | 8428 |
8367 MockRead bad_cert_reads[] = { | 8429 MockRead bad_cert_reads[] = { |
8368 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), | 8430 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8502 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 8564 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8503 | 8565 |
8504 rv = callback.WaitForResult(); | 8566 rv = callback.WaitForResult(); |
8505 EXPECT_THAT(rv, IsOk()); | 8567 EXPECT_THAT(rv, IsOk()); |
8506 } | 8568 } |
8507 | 8569 |
8508 TEST_F(HttpNetworkTransactionTest, BuildRequest_Referer) { | 8570 TEST_F(HttpNetworkTransactionTest, BuildRequest_Referer) { |
8509 HttpRequestInfo request; | 8571 HttpRequestInfo request; |
8510 request.method = "GET"; | 8572 request.method = "GET"; |
8511 request.url = GURL("http://www.example.org/"); | 8573 request.url = GURL("http://www.example.org/"); |
8512 request.load_flags = 0; | |
8513 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, | 8574 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, |
8514 "http://the.previous.site.com/"); | 8575 "http://the.previous.site.com/"); |
8515 | 8576 |
8516 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8577 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8517 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 8578 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
8518 | 8579 |
8519 MockWrite data_writes[] = { | 8580 MockWrite data_writes[] = { |
8520 MockWrite( | 8581 MockWrite( |
8521 "GET / HTTP/1.1\r\n" | 8582 "GET / HTTP/1.1\r\n" |
8522 "Host: www.example.org\r\n" | 8583 "Host: www.example.org\r\n" |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8808 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 8869 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
8809 | 8870 |
8810 rv = callback.WaitForResult(); | 8871 rv = callback.WaitForResult(); |
8811 EXPECT_THAT(rv, IsOk()); | 8872 EXPECT_THAT(rv, IsOk()); |
8812 } | 8873 } |
8813 | 8874 |
8814 TEST_F(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { | 8875 TEST_F(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { |
8815 HttpRequestInfo request; | 8876 HttpRequestInfo request; |
8816 request.method = "GET"; | 8877 request.method = "GET"; |
8817 request.url = GURL("http://www.example.org/"); | 8878 request.url = GURL("http://www.example.org/"); |
8818 request.load_flags = 0; | |
8819 | 8879 |
8820 session_deps_.proxy_service = | 8880 session_deps_.proxy_service = |
8821 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080"); | 8881 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080"); |
8822 TestNetLog net_log; | 8882 TestNetLog net_log; |
8823 session_deps_.net_log = &net_log; | 8883 session_deps_.net_log = &net_log; |
8824 | 8884 |
8825 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8885 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8826 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 8886 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
8827 | 8887 |
8828 char write_buffer[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 }; | 8888 char write_buffer[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 }; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8867 std::string response_text; | 8927 std::string response_text; |
8868 rv = ReadTransaction(&trans, &response_text); | 8928 rv = ReadTransaction(&trans, &response_text); |
8869 EXPECT_THAT(rv, IsOk()); | 8929 EXPECT_THAT(rv, IsOk()); |
8870 EXPECT_EQ("Payload", response_text); | 8930 EXPECT_EQ("Payload", response_text); |
8871 } | 8931 } |
8872 | 8932 |
8873 TEST_F(HttpNetworkTransactionTest, SOCKS4_SSL_GET) { | 8933 TEST_F(HttpNetworkTransactionTest, SOCKS4_SSL_GET) { |
8874 HttpRequestInfo request; | 8934 HttpRequestInfo request; |
8875 request.method = "GET"; | 8935 request.method = "GET"; |
8876 request.url = GURL("https://www.example.org/"); | 8936 request.url = GURL("https://www.example.org/"); |
8877 request.load_flags = 0; | |
8878 | 8937 |
8879 session_deps_.proxy_service = | 8938 session_deps_.proxy_service = |
8880 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080"); | 8939 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080"); |
8881 TestNetLog net_log; | 8940 TestNetLog net_log; |
8882 session_deps_.net_log = &net_log; | 8941 session_deps_.net_log = &net_log; |
8883 | 8942 |
8884 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8943 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8885 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 8944 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
8886 | 8945 |
8887 unsigned char write_buffer[] = { 0x04, 0x01, 0x01, 0xBB, 127, 0, 0, 1, 0 }; | 8946 unsigned char write_buffer[] = { 0x04, 0x01, 0x01, 0xBB, 127, 0, 0, 1, 0 }; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8931 std::string response_text; | 8990 std::string response_text; |
8932 rv = ReadTransaction(&trans, &response_text); | 8991 rv = ReadTransaction(&trans, &response_text); |
8933 EXPECT_THAT(rv, IsOk()); | 8992 EXPECT_THAT(rv, IsOk()); |
8934 EXPECT_EQ("Payload", response_text); | 8993 EXPECT_EQ("Payload", response_text); |
8935 } | 8994 } |
8936 | 8995 |
8937 TEST_F(HttpNetworkTransactionTest, SOCKS4_HTTP_GET_no_PAC) { | 8996 TEST_F(HttpNetworkTransactionTest, SOCKS4_HTTP_GET_no_PAC) { |
8938 HttpRequestInfo request; | 8997 HttpRequestInfo request; |
8939 request.method = "GET"; | 8998 request.method = "GET"; |
8940 request.url = GURL("http://www.example.org/"); | 8999 request.url = GURL("http://www.example.org/"); |
8941 request.load_flags = 0; | |
8942 | 9000 |
8943 session_deps_.proxy_service = | 9001 session_deps_.proxy_service = |
8944 ProxyService::CreateFixed("socks4://myproxy:1080"); | 9002 ProxyService::CreateFixed("socks4://myproxy:1080"); |
8945 TestNetLog net_log; | 9003 TestNetLog net_log; |
8946 session_deps_.net_log = &net_log; | 9004 session_deps_.net_log = &net_log; |
8947 | 9005 |
8948 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9006 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8949 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 9007 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
8950 | 9008 |
8951 char write_buffer[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 }; | 9009 char write_buffer[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 }; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8989 std::string response_text; | 9047 std::string response_text; |
8990 rv = ReadTransaction(&trans, &response_text); | 9048 rv = ReadTransaction(&trans, &response_text); |
8991 EXPECT_THAT(rv, IsOk()); | 9049 EXPECT_THAT(rv, IsOk()); |
8992 EXPECT_EQ("Payload", response_text); | 9050 EXPECT_EQ("Payload", response_text); |
8993 } | 9051 } |
8994 | 9052 |
8995 TEST_F(HttpNetworkTransactionTest, SOCKS5_HTTP_GET) { | 9053 TEST_F(HttpNetworkTransactionTest, SOCKS5_HTTP_GET) { |
8996 HttpRequestInfo request; | 9054 HttpRequestInfo request; |
8997 request.method = "GET"; | 9055 request.method = "GET"; |
8998 request.url = GURL("http://www.example.org/"); | 9056 request.url = GURL("http://www.example.org/"); |
8999 request.load_flags = 0; | |
9000 | 9057 |
9001 session_deps_.proxy_service = | 9058 session_deps_.proxy_service = |
9002 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080"); | 9059 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080"); |
9003 TestNetLog net_log; | 9060 TestNetLog net_log; |
9004 session_deps_.net_log = &net_log; | 9061 session_deps_.net_log = &net_log; |
9005 | 9062 |
9006 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9063 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9007 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 9064 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
9008 | 9065 |
9009 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; | 9066 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9061 std::string response_text; | 9118 std::string response_text; |
9062 rv = ReadTransaction(&trans, &response_text); | 9119 rv = ReadTransaction(&trans, &response_text); |
9063 EXPECT_THAT(rv, IsOk()); | 9120 EXPECT_THAT(rv, IsOk()); |
9064 EXPECT_EQ("Payload", response_text); | 9121 EXPECT_EQ("Payload", response_text); |
9065 } | 9122 } |
9066 | 9123 |
9067 TEST_F(HttpNetworkTransactionTest, SOCKS5_SSL_GET) { | 9124 TEST_F(HttpNetworkTransactionTest, SOCKS5_SSL_GET) { |
9068 HttpRequestInfo request; | 9125 HttpRequestInfo request; |
9069 request.method = "GET"; | 9126 request.method = "GET"; |
9070 request.url = GURL("https://www.example.org/"); | 9127 request.url = GURL("https://www.example.org/"); |
9071 request.load_flags = 0; | |
9072 | 9128 |
9073 session_deps_.proxy_service = | 9129 session_deps_.proxy_service = |
9074 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080"); | 9130 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080"); |
9075 TestNetLog net_log; | 9131 TestNetLog net_log; |
9076 session_deps_.net_log = &net_log; | 9132 session_deps_.net_log = &net_log; |
9077 | 9133 |
9078 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9134 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9079 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 9135 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
9080 | 9136 |
9081 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; | 9137 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9166 alternative_service, expiration); | 9222 alternative_service, expiration); |
9167 | 9223 |
9168 return session; | 9224 return session; |
9169 } | 9225 } |
9170 | 9226 |
9171 int GroupNameTransactionHelper(const std::string& url, | 9227 int GroupNameTransactionHelper(const std::string& url, |
9172 HttpNetworkSession* session) { | 9228 HttpNetworkSession* session) { |
9173 HttpRequestInfo request; | 9229 HttpRequestInfo request; |
9174 request.method = "GET"; | 9230 request.method = "GET"; |
9175 request.url = GURL(url); | 9231 request.url = GURL(url); |
9176 request.load_flags = 0; | |
9177 | 9232 |
9178 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session); | 9233 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session); |
9179 | 9234 |
9180 TestCompletionCallback callback; | 9235 TestCompletionCallback callback; |
9181 | 9236 |
9182 // We do not complete this request, the dtor will clean the transaction up. | 9237 // We do not complete this request, the dtor will clean the transaction up. |
9183 return trans.Start(&request, callback.callback(), NetLogWithSource()); | 9238 return trans.Start(&request, callback.callback(), NetLogWithSource()); |
9184 } | 9239 } |
9185 | 9240 |
9186 } // namespace | 9241 } // namespace |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9480 | 9535 |
9481 TEST_F(HttpNetworkTransactionTest, BypassHostCacheOnRefresh3) { | 9536 TEST_F(HttpNetworkTransactionTest, BypassHostCacheOnRefresh3) { |
9482 BypassHostCacheOnRefreshHelper(LOAD_DISABLE_CACHE); | 9537 BypassHostCacheOnRefreshHelper(LOAD_DISABLE_CACHE); |
9483 } | 9538 } |
9484 | 9539 |
9485 // Make sure we can handle an error when writing the request. | 9540 // Make sure we can handle an error when writing the request. |
9486 TEST_F(HttpNetworkTransactionTest, RequestWriteError) { | 9541 TEST_F(HttpNetworkTransactionTest, RequestWriteError) { |
9487 HttpRequestInfo request; | 9542 HttpRequestInfo request; |
9488 request.method = "GET"; | 9543 request.method = "GET"; |
9489 request.url = GURL("http://www.foo.com/"); | 9544 request.url = GURL("http://www.foo.com/"); |
9490 request.load_flags = 0; | |
9491 | 9545 |
9492 MockWrite write_failure[] = { | 9546 MockWrite write_failure[] = { |
9493 MockWrite(ASYNC, ERR_CONNECTION_RESET), | 9547 MockWrite(ASYNC, ERR_CONNECTION_RESET), |
9494 }; | 9548 }; |
9495 StaticSocketDataProvider data(NULL, 0, | 9549 StaticSocketDataProvider data(NULL, 0, |
9496 write_failure, arraysize(write_failure)); | 9550 write_failure, arraysize(write_failure)); |
9497 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9551 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9498 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9552 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9499 | 9553 |
9500 TestCompletionCallback callback; | 9554 TestCompletionCallback callback; |
9501 | 9555 |
9502 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 9556 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
9503 | 9557 |
9504 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 9558 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
9505 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 9559 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9506 | 9560 |
9507 rv = callback.WaitForResult(); | 9561 rv = callback.WaitForResult(); |
9508 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); | 9562 EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); |
9509 | 9563 |
9510 IPEndPoint endpoint; | 9564 IPEndPoint endpoint; |
9511 EXPECT_TRUE(trans.GetRemoteEndpoint(&endpoint)); | 9565 EXPECT_TRUE(trans.GetRemoteEndpoint(&endpoint)); |
9512 EXPECT_LT(0u, endpoint.address().size()); | 9566 EXPECT_LT(0u, endpoint.address().size()); |
9513 } | 9567 } |
9514 | 9568 |
9515 // Check that a connection closed after the start of the headers finishes ok. | 9569 // Check that a connection closed after the start of the headers finishes ok. |
9516 TEST_F(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { | 9570 TEST_F(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { |
9517 HttpRequestInfo request; | 9571 HttpRequestInfo request; |
9518 request.method = "GET"; | 9572 request.method = "GET"; |
9519 request.url = GURL("http://www.foo.com/"); | 9573 request.url = GURL("http://www.foo.com/"); |
9520 request.load_flags = 0; | |
9521 | 9574 |
9522 MockRead data_reads[] = { | 9575 MockRead data_reads[] = { |
9523 MockRead("HTTP/1."), | 9576 MockRead("HTTP/1."), |
9524 MockRead(SYNCHRONOUS, OK), | 9577 MockRead(SYNCHRONOUS, OK), |
9525 }; | 9578 }; |
9526 | 9579 |
9527 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9580 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
9528 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9581 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9529 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9582 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9530 | 9583 |
(...skipping 22 matching lines...) Expand all Loading... |
9553 EXPECT_TRUE(trans.GetRemoteEndpoint(&endpoint)); | 9606 EXPECT_TRUE(trans.GetRemoteEndpoint(&endpoint)); |
9554 EXPECT_LT(0u, endpoint.address().size()); | 9607 EXPECT_LT(0u, endpoint.address().size()); |
9555 } | 9608 } |
9556 | 9609 |
9557 // Make sure that a dropped connection while draining the body for auth | 9610 // Make sure that a dropped connection while draining the body for auth |
9558 // restart does the right thing. | 9611 // restart does the right thing. |
9559 TEST_F(HttpNetworkTransactionTest, DrainResetOK) { | 9612 TEST_F(HttpNetworkTransactionTest, DrainResetOK) { |
9560 HttpRequestInfo request; | 9613 HttpRequestInfo request; |
9561 request.method = "GET"; | 9614 request.method = "GET"; |
9562 request.url = GURL("http://www.example.org/"); | 9615 request.url = GURL("http://www.example.org/"); |
9563 request.load_flags = 0; | |
9564 | 9616 |
9565 MockWrite data_writes1[] = { | 9617 MockWrite data_writes1[] = { |
9566 MockWrite( | 9618 MockWrite( |
9567 "GET / HTTP/1.1\r\n" | 9619 "GET / HTTP/1.1\r\n" |
9568 "Host: www.example.org\r\n" | 9620 "Host: www.example.org\r\n" |
9569 "Connection: keep-alive\r\n\r\n"), | 9621 "Connection: keep-alive\r\n\r\n"), |
9570 }; | 9622 }; |
9571 | 9623 |
9572 MockRead data_reads1[] = { | 9624 MockRead data_reads1[] = { |
9573 MockRead("HTTP/1.1 401 Unauthorized\r\n"), | 9625 MockRead("HTTP/1.1 401 Unauthorized\r\n"), |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9633 EXPECT_EQ(100, response->headers->GetContentLength()); | 9685 EXPECT_EQ(100, response->headers->GetContentLength()); |
9634 } | 9686 } |
9635 | 9687 |
9636 // Test HTTPS connections going through a proxy that sends extra data. | 9688 // Test HTTPS connections going through a proxy that sends extra data. |
9637 TEST_F(HttpNetworkTransactionTest, HTTPSViaProxyWithExtraData) { | 9689 TEST_F(HttpNetworkTransactionTest, HTTPSViaProxyWithExtraData) { |
9638 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); | 9690 session_deps_.proxy_service = ProxyService::CreateFixed("myproxy:70"); |
9639 | 9691 |
9640 HttpRequestInfo request; | 9692 HttpRequestInfo request; |
9641 request.method = "GET"; | 9693 request.method = "GET"; |
9642 request.url = GURL("https://www.example.org/"); | 9694 request.url = GURL("https://www.example.org/"); |
9643 request.load_flags = 0; | |
9644 | 9695 |
9645 MockRead proxy_reads[] = { | 9696 MockRead proxy_reads[] = { |
9646 MockRead("HTTP/1.0 200 Connected\r\n\r\nExtra data"), | 9697 MockRead("HTTP/1.0 200 Connected\r\n\r\nExtra data"), |
9647 MockRead(SYNCHRONOUS, OK) | 9698 MockRead(SYNCHRONOUS, OK) |
9648 }; | 9699 }; |
9649 | 9700 |
9650 StaticSocketDataProvider data(proxy_reads, arraysize(proxy_reads), NULL, 0); | 9701 StaticSocketDataProvider data(proxy_reads, arraysize(proxy_reads), NULL, 0); |
9651 SSLSocketDataProvider ssl(ASYNC, OK); | 9702 SSLSocketDataProvider ssl(ASYNC, OK); |
9652 | 9703 |
9653 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9704 session_deps_.socket_factory->AddSocketDataProvider(&data); |
(...skipping 10 matching lines...) Expand all Loading... |
9664 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 9715 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9665 | 9716 |
9666 rv = callback.WaitForResult(); | 9717 rv = callback.WaitForResult(); |
9667 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); | 9718 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
9668 } | 9719 } |
9669 | 9720 |
9670 TEST_F(HttpNetworkTransactionTest, LargeContentLengthThenClose) { | 9721 TEST_F(HttpNetworkTransactionTest, LargeContentLengthThenClose) { |
9671 HttpRequestInfo request; | 9722 HttpRequestInfo request; |
9672 request.method = "GET"; | 9723 request.method = "GET"; |
9673 request.url = GURL("http://www.example.org/"); | 9724 request.url = GURL("http://www.example.org/"); |
9674 request.load_flags = 0; | |
9675 | 9725 |
9676 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9726 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9677 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 9727 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
9678 | 9728 |
9679 MockRead data_reads[] = { | 9729 MockRead data_reads[] = { |
9680 MockRead("HTTP/1.0 200 OK\r\nContent-Length:6719476739\r\n\r\n"), | 9730 MockRead("HTTP/1.0 200 OK\r\nContent-Length:6719476739\r\n\r\n"), |
9681 MockRead(SYNCHRONOUS, OK), | 9731 MockRead(SYNCHRONOUS, OK), |
9682 }; | 9732 }; |
9683 | 9733 |
9684 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9734 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
(...skipping 27 matching lines...) Expand all Loading... |
9712 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 9762 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
9713 element_readers.push_back(base::MakeUnique<UploadFileElementReader>( | 9763 element_readers.push_back(base::MakeUnique<UploadFileElementReader>( |
9714 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, | 9764 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, |
9715 std::numeric_limits<uint64_t>::max(), base::Time())); | 9765 std::numeric_limits<uint64_t>::max(), base::Time())); |
9716 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 9766 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
9717 | 9767 |
9718 HttpRequestInfo request; | 9768 HttpRequestInfo request; |
9719 request.method = "POST"; | 9769 request.method = "POST"; |
9720 request.url = GURL("http://www.example.org/upload"); | 9770 request.url = GURL("http://www.example.org/upload"); |
9721 request.upload_data_stream = &upload_data_stream; | 9771 request.upload_data_stream = &upload_data_stream; |
9722 request.load_flags = 0; | |
9723 | 9772 |
9724 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9773 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9725 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 9774 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
9726 | 9775 |
9727 MockRead data_reads[] = { | 9776 MockRead data_reads[] = { |
9728 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 9777 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
9729 MockRead("hello world"), | 9778 MockRead("hello world"), |
9730 MockRead(SYNCHRONOUS, OK), | 9779 MockRead(SYNCHRONOUS, OK), |
9731 }; | 9780 }; |
9732 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 9781 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
(...skipping 26 matching lines...) Expand all Loading... |
9759 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 9808 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
9760 element_readers.push_back(base::MakeUnique<UploadFileElementReader>( | 9809 element_readers.push_back(base::MakeUnique<UploadFileElementReader>( |
9761 base::ThreadTaskRunnerHandle::Get().get(), temp_file, 0, | 9810 base::ThreadTaskRunnerHandle::Get().get(), temp_file, 0, |
9762 std::numeric_limits<uint64_t>::max(), base::Time())); | 9811 std::numeric_limits<uint64_t>::max(), base::Time())); |
9763 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 9812 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
9764 | 9813 |
9765 HttpRequestInfo request; | 9814 HttpRequestInfo request; |
9766 request.method = "POST"; | 9815 request.method = "POST"; |
9767 request.url = GURL("http://www.example.org/upload"); | 9816 request.url = GURL("http://www.example.org/upload"); |
9768 request.upload_data_stream = &upload_data_stream; | 9817 request.upload_data_stream = &upload_data_stream; |
9769 request.load_flags = 0; | |
9770 | 9818 |
9771 // If we try to upload an unreadable file, the transaction should fail. | 9819 // If we try to upload an unreadable file, the transaction should fail. |
9772 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9820 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9773 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 9821 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
9774 | 9822 |
9775 StaticSocketDataProvider data(NULL, 0, NULL, 0); | 9823 StaticSocketDataProvider data(NULL, 0, NULL, 0); |
9776 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9824 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9777 | 9825 |
9778 TestCompletionCallback callback; | 9826 TestCompletionCallback callback; |
9779 | 9827 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9813 | 9861 |
9814 FakeUploadElementReader* fake_reader = new FakeUploadElementReader; | 9862 FakeUploadElementReader* fake_reader = new FakeUploadElementReader; |
9815 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 9863 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
9816 element_readers.push_back(base::WrapUnique(fake_reader)); | 9864 element_readers.push_back(base::WrapUnique(fake_reader)); |
9817 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 9865 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
9818 | 9866 |
9819 HttpRequestInfo request; | 9867 HttpRequestInfo request; |
9820 request.method = "POST"; | 9868 request.method = "POST"; |
9821 request.url = GURL("http://www.example.org/upload"); | 9869 request.url = GURL("http://www.example.org/upload"); |
9822 request.upload_data_stream = &upload_data_stream; | 9870 request.upload_data_stream = &upload_data_stream; |
9823 request.load_flags = 0; | |
9824 | 9871 |
9825 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9872 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
9826 std::unique_ptr<HttpNetworkTransaction> trans( | 9873 std::unique_ptr<HttpNetworkTransaction> trans( |
9827 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9874 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9828 | 9875 |
9829 StaticSocketDataProvider data; | 9876 StaticSocketDataProvider data; |
9830 session_deps_.socket_factory->AddSocketDataProvider(&data); | 9877 session_deps_.socket_factory->AddSocketDataProvider(&data); |
9831 | 9878 |
9832 TestCompletionCallback callback; | 9879 TestCompletionCallback callback; |
9833 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 9880 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
9834 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 9881 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
9835 base::RunLoop().RunUntilIdle(); | 9882 base::RunLoop().RunUntilIdle(); |
9836 | 9883 |
9837 // Transaction is pending on request body initialization. | 9884 // Transaction is pending on request body initialization. |
9838 ASSERT_FALSE(fake_reader->callback().is_null()); | 9885 ASSERT_FALSE(fake_reader->callback().is_null()); |
9839 | 9886 |
9840 // Return Init()'s result after the transaction gets destroyed. | 9887 // Return Init()'s result after the transaction gets destroyed. |
9841 trans.reset(); | 9888 trans.reset(); |
9842 fake_reader->callback().Run(OK); // Should not crash. | 9889 fake_reader->callback().Run(OK); // Should not crash. |
9843 } | 9890 } |
9844 | 9891 |
9845 // Tests that changes to Auth realms are treated like auth rejections. | 9892 // Tests that changes to Auth realms are treated like auth rejections. |
9846 TEST_F(HttpNetworkTransactionTest, ChangeAuthRealms) { | 9893 TEST_F(HttpNetworkTransactionTest, ChangeAuthRealms) { |
9847 HttpRequestInfo request; | 9894 HttpRequestInfo request; |
9848 request.method = "GET"; | 9895 request.method = "GET"; |
9849 request.url = GURL("http://www.example.org/"); | 9896 request.url = GURL("http://www.example.org/"); |
9850 request.load_flags = 0; | |
9851 | 9897 |
9852 // First transaction will request a resource and receive a Basic challenge | 9898 // First transaction will request a resource and receive a Basic challenge |
9853 // with realm="first_realm". | 9899 // with realm="first_realm". |
9854 MockWrite data_writes1[] = { | 9900 MockWrite data_writes1[] = { |
9855 MockWrite( | 9901 MockWrite( |
9856 "GET / HTTP/1.1\r\n" | 9902 "GET / HTTP/1.1\r\n" |
9857 "Host: www.example.org\r\n" | 9903 "Host: www.example.org\r\n" |
9858 "Connection: keep-alive\r\n" | 9904 "Connection: keep-alive\r\n" |
9859 "\r\n"), | 9905 "\r\n"), |
9860 }; | 9906 }; |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10002 MockRead("HTTP/1.1 200 OK\r\n"), | 10048 MockRead("HTTP/1.1 200 OK\r\n"), |
10003 MockRead(kAlternativeServiceHttpHeader), | 10049 MockRead(kAlternativeServiceHttpHeader), |
10004 MockRead("\r\n"), | 10050 MockRead("\r\n"), |
10005 MockRead("hello world"), | 10051 MockRead("hello world"), |
10006 MockRead(SYNCHRONOUS, OK), | 10052 MockRead(SYNCHRONOUS, OK), |
10007 }; | 10053 }; |
10008 | 10054 |
10009 HttpRequestInfo request; | 10055 HttpRequestInfo request; |
10010 request.method = "GET"; | 10056 request.method = "GET"; |
10011 request.url = GURL("https://www.example.org/"); | 10057 request.url = GURL("https://www.example.org/"); |
10012 request.load_flags = 0; | |
10013 | 10058 |
10014 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 10059 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
10015 session_deps_.socket_factory->AddSocketDataProvider(&data); | 10060 session_deps_.socket_factory->AddSocketDataProvider(&data); |
10016 | 10061 |
10017 SSLSocketDataProvider ssl(ASYNC, OK); | 10062 SSLSocketDataProvider ssl(ASYNC, OK); |
10018 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10063 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
10019 | 10064 |
10020 TestCompletionCallback callback; | 10065 TestCompletionCallback callback; |
10021 | 10066 |
10022 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10067 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10216 }; | 10261 }; |
10217 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); | 10262 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); |
10218 session_deps_.socket_factory->AddSocketDataProvider(&data); | 10263 session_deps_.socket_factory->AddSocketDataProvider(&data); |
10219 | 10264 |
10220 SSLSocketDataProvider ssl(ASYNC, OK); | 10265 SSLSocketDataProvider ssl(ASYNC, OK); |
10221 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10266 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
10222 | 10267 |
10223 HttpRequestInfo request; | 10268 HttpRequestInfo request; |
10224 request.method = "GET"; | 10269 request.method = "GET"; |
10225 request.url = GURL("https://www.example.org/"); | 10270 request.url = GURL("https://www.example.org/"); |
10226 request.load_flags = 0; | |
10227 | 10271 |
10228 TestCompletionCallback callback; | 10272 TestCompletionCallback callback; |
10229 | 10273 |
10230 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10274 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10231 | 10275 |
10232 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 10276 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
10233 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 10277 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
10234 | 10278 |
10235 const HttpResponseInfo* response = trans.GetResponseInfo(); | 10279 const HttpResponseInfo* response = trans.GetResponseInfo(); |
10236 ASSERT_TRUE(response); | 10280 ASSERT_TRUE(response); |
(...skipping 16 matching lines...) Expand all Loading... |
10253 MockRead("HTTP/1.1 200 OK\r\n"), | 10297 MockRead("HTTP/1.1 200 OK\r\n"), |
10254 MockRead("Alt-Svc: h2=\"www.example.com:443\","), | 10298 MockRead("Alt-Svc: h2=\"www.example.com:443\","), |
10255 MockRead("h2=\":1234\"\r\n\r\n"), | 10299 MockRead("h2=\":1234\"\r\n\r\n"), |
10256 MockRead("hello world"), | 10300 MockRead("hello world"), |
10257 MockRead(SYNCHRONOUS, OK), | 10301 MockRead(SYNCHRONOUS, OK), |
10258 }; | 10302 }; |
10259 | 10303 |
10260 HttpRequestInfo request; | 10304 HttpRequestInfo request; |
10261 request.method = "GET"; | 10305 request.method = "GET"; |
10262 request.url = GURL("https://www.example.org/"); | 10306 request.url = GURL("https://www.example.org/"); |
10263 request.load_flags = 0; | |
10264 | 10307 |
10265 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 10308 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
10266 session_deps_.socket_factory->AddSocketDataProvider(&data); | 10309 session_deps_.socket_factory->AddSocketDataProvider(&data); |
10267 | 10310 |
10268 SSLSocketDataProvider ssl(ASYNC, OK); | 10311 SSLSocketDataProvider ssl(ASYNC, OK); |
10269 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10312 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
10270 | 10313 |
10271 TestCompletionCallback callback; | 10314 TestCompletionCallback callback; |
10272 | 10315 |
10273 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10316 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10349 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10392 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10350 http_server_properties->SetAlternativeService(server, alternative_service, | 10393 http_server_properties->SetAlternativeService(server, alternative_service, |
10351 expiration); | 10394 expiration); |
10352 // Mark the QUIC alternative service as broken. | 10395 // Mark the QUIC alternative service as broken. |
10353 http_server_properties->MarkAlternativeServiceBroken(alternative_service); | 10396 http_server_properties->MarkAlternativeServiceBroken(alternative_service); |
10354 | 10397 |
10355 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10398 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10356 HttpRequestInfo request; | 10399 HttpRequestInfo request; |
10357 request.method = "GET"; | 10400 request.method = "GET"; |
10358 request.url = GURL(origin_url); | 10401 request.url = GURL(origin_url); |
10359 request.load_flags = 0; | |
10360 TestCompletionCallback callback; | 10402 TestCompletionCallback callback; |
10361 NetErrorDetails details; | 10403 NetErrorDetails details; |
10362 EXPECT_FALSE(details.quic_broken); | 10404 EXPECT_FALSE(details.quic_broken); |
10363 | 10405 |
10364 trans.Start(&request, callback.callback(), NetLogWithSource()); | 10406 trans.Start(&request, callback.callback(), NetLogWithSource()); |
10365 trans.PopulateNetErrorDetails(&details); | 10407 trans.PopulateNetErrorDetails(&details); |
10366 EXPECT_TRUE(details.quic_broken); | 10408 EXPECT_TRUE(details.quic_broken); |
10367 } | 10409 } |
10368 | 10410 |
10369 TEST_F(HttpNetworkTransactionTest, IdentifyQuicNotBroken) { | 10411 TEST_F(HttpNetworkTransactionTest, IdentifyQuicNotBroken) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10423 // Mark one of the QUIC alternative service as broken. | 10465 // Mark one of the QUIC alternative service as broken. |
10424 http_server_properties->MarkAlternativeServiceBroken(alternative_service1); | 10466 http_server_properties->MarkAlternativeServiceBroken(alternative_service1); |
10425 | 10467 |
10426 const AlternativeServiceVector alternative_service_vector = | 10468 const AlternativeServiceVector alternative_service_vector = |
10427 http_server_properties->GetAlternativeServices(server); | 10469 http_server_properties->GetAlternativeServices(server); |
10428 | 10470 |
10429 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10471 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10430 HttpRequestInfo request; | 10472 HttpRequestInfo request; |
10431 request.method = "GET"; | 10473 request.method = "GET"; |
10432 request.url = GURL(origin_url); | 10474 request.url = GURL(origin_url); |
10433 request.load_flags = 0; | |
10434 TestCompletionCallback callback; | 10475 TestCompletionCallback callback; |
10435 NetErrorDetails details; | 10476 NetErrorDetails details; |
10436 EXPECT_FALSE(details.quic_broken); | 10477 EXPECT_FALSE(details.quic_broken); |
10437 | 10478 |
10438 trans.Start(&request, callback.callback(), NetLogWithSource()); | 10479 trans.Start(&request, callback.callback(), NetLogWithSource()); |
10439 trans.PopulateNetErrorDetails(&details); | 10480 trans.PopulateNetErrorDetails(&details); |
10440 EXPECT_FALSE(details.quic_broken); | 10481 EXPECT_FALSE(details.quic_broken); |
10441 } | 10482 } |
10442 | 10483 |
10443 TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) { | 10484 TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) { |
10444 HttpRequestInfo request; | 10485 HttpRequestInfo request; |
10445 request.method = "GET"; | 10486 request.method = "GET"; |
10446 request.url = GURL("https://www.example.org/"); | 10487 request.url = GURL("https://www.example.org/"); |
10447 request.load_flags = 0; | |
10448 | 10488 |
10449 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 10489 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
10450 StaticSocketDataProvider first_data; | 10490 StaticSocketDataProvider first_data; |
10451 first_data.set_connect_data(mock_connect); | 10491 first_data.set_connect_data(mock_connect); |
10452 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 10492 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
10453 SSLSocketDataProvider ssl_http11(ASYNC, OK); | 10493 SSLSocketDataProvider ssl_http11(ASYNC, OK); |
10454 ssl_http11.next_proto = kProtoHTTP11; | 10494 ssl_http11.next_proto = kProtoHTTP11; |
10455 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); | 10495 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
10456 | 10496 |
10457 MockRead data_reads[] = { | 10497 MockRead data_reads[] = { |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10752 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 10792 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
10753 } | 10793 } |
10754 | 10794 |
10755 // Ensure that we are not allowed to redirect traffic via an alternate protocol | 10795 // Ensure that we are not allowed to redirect traffic via an alternate protocol |
10756 // to an unsafe port, and that we resume the second HttpStreamFactoryImpl::Job | 10796 // to an unsafe port, and that we resume the second HttpStreamFactoryImpl::Job |
10757 // once the alternate protocol request fails. | 10797 // once the alternate protocol request fails. |
10758 TEST_F(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { | 10798 TEST_F(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { |
10759 HttpRequestInfo request; | 10799 HttpRequestInfo request; |
10760 request.method = "GET"; | 10800 request.method = "GET"; |
10761 request.url = GURL("http://www.example.org/"); | 10801 request.url = GURL("http://www.example.org/"); |
10762 request.load_flags = 0; | |
10763 | 10802 |
10764 // The alternate protocol request will error out before we attempt to connect, | 10803 // The alternate protocol request will error out before we attempt to connect, |
10765 // so only the standard HTTP request will try to connect. | 10804 // so only the standard HTTP request will try to connect. |
10766 MockRead data_reads[] = { | 10805 MockRead data_reads[] = { |
10767 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 10806 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
10768 MockRead("hello world"), | 10807 MockRead("hello world"), |
10769 MockRead(ASYNC, OK), | 10808 MockRead(ASYNC, OK), |
10770 }; | 10809 }; |
10771 StaticSocketDataProvider data( | 10810 StaticSocketDataProvider data( |
10772 data_reads, arraysize(data_reads), NULL, 0); | 10811 data_reads, arraysize(data_reads), NULL, 0); |
(...skipping 26 matching lines...) Expand all Loading... |
10799 | 10838 |
10800 std::string response_data; | 10839 std::string response_data; |
10801 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); | 10840 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); |
10802 EXPECT_EQ("hello world", response_data); | 10841 EXPECT_EQ("hello world", response_data); |
10803 } | 10842 } |
10804 | 10843 |
10805 TEST_F(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { | 10844 TEST_F(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
10806 HttpRequestInfo request; | 10845 HttpRequestInfo request; |
10807 request.method = "GET"; | 10846 request.method = "GET"; |
10808 request.url = GURL("https://www.example.org/"); | 10847 request.url = GURL("https://www.example.org/"); |
10809 request.load_flags = 0; | |
10810 | 10848 |
10811 MockRead data_reads[] = { | 10849 MockRead data_reads[] = { |
10812 MockRead("HTTP/1.1 200 OK\r\n"), | 10850 MockRead("HTTP/1.1 200 OK\r\n"), |
10813 MockRead(kAlternativeServiceHttpHeader), | 10851 MockRead(kAlternativeServiceHttpHeader), |
10814 MockRead("\r\n"), | 10852 MockRead("\r\n"), |
10815 MockRead("hello world"), | 10853 MockRead("hello world"), |
10816 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 10854 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
10817 MockRead(ASYNC, OK)}; | 10855 MockRead(ASYNC, OK)}; |
10818 | 10856 |
10819 StaticSocketDataProvider first_transaction( | 10857 StaticSocketDataProvider first_transaction( |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10880 EXPECT_TRUE(response->was_alpn_negotiated); | 10918 EXPECT_TRUE(response->was_alpn_negotiated); |
10881 | 10919 |
10882 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); | 10920 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
10883 EXPECT_EQ("hello!", response_data); | 10921 EXPECT_EQ("hello!", response_data); |
10884 } | 10922 } |
10885 | 10923 |
10886 TEST_F(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { | 10924 TEST_F(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
10887 HttpRequestInfo request; | 10925 HttpRequestInfo request; |
10888 request.method = "GET"; | 10926 request.method = "GET"; |
10889 request.url = GURL("https://www.example.org/"); | 10927 request.url = GURL("https://www.example.org/"); |
10890 request.load_flags = 0; | |
10891 | 10928 |
10892 // First transaction receives Alt-Svc header over HTTP/1.1. | 10929 // First transaction receives Alt-Svc header over HTTP/1.1. |
10893 MockRead data_reads[] = { | 10930 MockRead data_reads[] = { |
10894 MockRead("HTTP/1.1 200 OK\r\n"), | 10931 MockRead("HTTP/1.1 200 OK\r\n"), |
10895 MockRead(kAlternativeServiceHttpHeader), | 10932 MockRead(kAlternativeServiceHttpHeader), |
10896 MockRead("\r\n"), | 10933 MockRead("\r\n"), |
10897 MockRead("hello world"), | 10934 MockRead("hello world"), |
10898 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 10935 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
10899 MockRead(ASYNC, OK), | 10936 MockRead(ASYNC, OK), |
10900 }; | 10937 }; |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10993 EXPECT_TRUE(response->was_fetched_via_spdy); | 11030 EXPECT_TRUE(response->was_fetched_via_spdy); |
10994 EXPECT_TRUE(response->was_alpn_negotiated); | 11031 EXPECT_TRUE(response->was_alpn_negotiated); |
10995 ASSERT_THAT(ReadTransaction(&trans3, &response_data), IsOk()); | 11032 ASSERT_THAT(ReadTransaction(&trans3, &response_data), IsOk()); |
10996 EXPECT_EQ("hello!", response_data); | 11033 EXPECT_EQ("hello!", response_data); |
10997 } | 11034 } |
10998 | 11035 |
10999 TEST_F(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) { | 11036 TEST_F(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) { |
11000 HttpRequestInfo request; | 11037 HttpRequestInfo request; |
11001 request.method = "GET"; | 11038 request.method = "GET"; |
11002 request.url = GURL("https://www.example.org/"); | 11039 request.url = GURL("https://www.example.org/"); |
11003 request.load_flags = 0; | |
11004 | 11040 |
11005 MockRead data_reads[] = { | 11041 MockRead data_reads[] = { |
11006 MockRead("HTTP/1.1 200 OK\r\n"), | 11042 MockRead("HTTP/1.1 200 OK\r\n"), |
11007 MockRead(kAlternativeServiceHttpHeader), | 11043 MockRead(kAlternativeServiceHttpHeader), |
11008 MockRead("\r\n"), | 11044 MockRead("\r\n"), |
11009 MockRead("hello world"), | 11045 MockRead("hello world"), |
11010 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 11046 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
11011 MockRead(ASYNC, OK), | 11047 MockRead(ASYNC, OK), |
11012 }; | 11048 }; |
11013 | 11049 |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11208 new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), | 11244 new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), |
11209 base::MakeUnique<CapturingProxyResolverFactory>( | 11245 base::MakeUnique<CapturingProxyResolverFactory>( |
11210 &capturing_proxy_resolver), | 11246 &capturing_proxy_resolver), |
11211 NULL)); | 11247 NULL)); |
11212 TestNetLog net_log; | 11248 TestNetLog net_log; |
11213 session_deps_.net_log = &net_log; | 11249 session_deps_.net_log = &net_log; |
11214 | 11250 |
11215 HttpRequestInfo request; | 11251 HttpRequestInfo request; |
11216 request.method = "GET"; | 11252 request.method = "GET"; |
11217 request.url = GURL("https://www.example.org/"); | 11253 request.url = GURL("https://www.example.org/"); |
11218 request.load_flags = 0; | |
11219 | 11254 |
11220 MockRead data_reads[] = { | 11255 MockRead data_reads[] = { |
11221 MockRead("HTTP/1.1 200 OK\r\n"), | 11256 MockRead("HTTP/1.1 200 OK\r\n"), |
11222 MockRead(kAlternativeServiceHttpHeader), | 11257 MockRead(kAlternativeServiceHttpHeader), |
11223 MockRead("\r\n"), | 11258 MockRead("\r\n"), |
11224 MockRead("hello world"), | 11259 MockRead("hello world"), |
11225 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 11260 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
11226 MockRead(ASYNC, OK), | 11261 MockRead(ASYNC, OK), |
11227 }; | 11262 }; |
11228 | 11263 |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11312 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 11347 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
11313 TestLoadTimingNotReusedWithPac(load_timing_info, | 11348 TestLoadTimingNotReusedWithPac(load_timing_info, |
11314 CONNECT_TIMING_HAS_SSL_TIMES); | 11349 CONNECT_TIMING_HAS_SSL_TIMES); |
11315 } | 11350 } |
11316 | 11351 |
11317 TEST_F(HttpNetworkTransactionTest, | 11352 TEST_F(HttpNetworkTransactionTest, |
11318 UseAlternativeServiceForNpnSpdyWithExistingSpdySession) { | 11353 UseAlternativeServiceForNpnSpdyWithExistingSpdySession) { |
11319 HttpRequestInfo request; | 11354 HttpRequestInfo request; |
11320 request.method = "GET"; | 11355 request.method = "GET"; |
11321 request.url = GURL("https://www.example.org/"); | 11356 request.url = GURL("https://www.example.org/"); |
11322 request.load_flags = 0; | |
11323 | 11357 |
11324 MockRead data_reads[] = { | 11358 MockRead data_reads[] = { |
11325 MockRead("HTTP/1.1 200 OK\r\n"), | 11359 MockRead("HTTP/1.1 200 OK\r\n"), |
11326 MockRead(kAlternativeServiceHttpHeader), | 11360 MockRead(kAlternativeServiceHttpHeader), |
11327 MockRead("\r\n"), | 11361 MockRead("\r\n"), |
11328 MockRead("hello world"), | 11362 MockRead("hello world"), |
11329 MockRead(ASYNC, OK), | 11363 MockRead(ASYNC, OK), |
11330 }; | 11364 }; |
11331 | 11365 |
11332 StaticSocketDataProvider first_transaction( | 11366 StaticSocketDataProvider first_transaction( |
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12140 if (test_config.proxy_url) { | 12174 if (test_config.proxy_url) { |
12141 session_deps_.proxy_service = | 12175 session_deps_.proxy_service = |
12142 ProxyService::CreateFixed(test_config.proxy_url); | 12176 ProxyService::CreateFixed(test_config.proxy_url); |
12143 } else { | 12177 } else { |
12144 session_deps_.proxy_service = ProxyService::CreateDirect(); | 12178 session_deps_.proxy_service = ProxyService::CreateDirect(); |
12145 } | 12179 } |
12146 | 12180 |
12147 HttpRequestInfo request; | 12181 HttpRequestInfo request; |
12148 request.method = "GET"; | 12182 request.method = "GET"; |
12149 request.url = GURL(test_config.server_url); | 12183 request.url = GURL(test_config.server_url); |
12150 request.load_flags = 0; | |
12151 | 12184 |
12152 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12185 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12153 | 12186 |
12154 SSLSocketDataProvider ssl_socket_data_provider(SYNCHRONOUS, OK); | 12187 SSLSocketDataProvider ssl_socket_data_provider(SYNCHRONOUS, OK); |
12155 | 12188 |
12156 std::vector<std::vector<MockRead>> mock_reads(1); | 12189 std::vector<std::vector<MockRead>> mock_reads(1); |
12157 std::vector<std::vector<MockWrite>> mock_writes(1); | 12190 std::vector<std::vector<MockWrite>> mock_writes(1); |
12158 for (int round = 0; round < test_config.num_auth_rounds; ++round) { | 12191 for (int round = 0; round < test_config.num_auth_rounds; ++round) { |
12159 const TestRound& read_write_round = test_config.rounds[round]; | 12192 const TestRound& read_write_round = test_config.rounds[round]; |
12160 | 12193 |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12244 SSLInfo empty_ssl_info; | 12277 SSLInfo empty_ssl_info; |
12245 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, | 12278 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, |
12246 empty_ssl_info, origin, NetLogWithSource()); | 12279 empty_ssl_info, origin, NetLogWithSource()); |
12247 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); | 12280 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); |
12248 | 12281 |
12249 int rv = OK; | 12282 int rv = OK; |
12250 const HttpResponseInfo* response = NULL; | 12283 const HttpResponseInfo* response = NULL; |
12251 HttpRequestInfo request; | 12284 HttpRequestInfo request; |
12252 request.method = "GET"; | 12285 request.method = "GET"; |
12253 request.url = origin; | 12286 request.url = origin; |
12254 request.load_flags = 0; | |
12255 | 12287 |
12256 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12288 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12257 | 12289 |
12258 // Use a TCP Socket Pool with only one connection per group. This is used | 12290 // Use a TCP Socket Pool with only one connection per group. This is used |
12259 // to validate that the TCP socket is not released to the pool between | 12291 // to validate that the TCP socket is not released to the pool between |
12260 // each round of multi-round authentication. | 12292 // each round of multi-round authentication. |
12261 HttpNetworkSessionPeer session_peer(session.get()); | 12293 HttpNetworkSessionPeer session_peer(session.get()); |
12262 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( | 12294 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( |
12263 50, // Max sockets for pool | 12295 50, // Max sockets for pool |
12264 1, // Max sockets per group | 12296 1, // Max sockets per group |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12407 // Finally, the socket is released to the group. | 12439 // Finally, the socket is released to the group. |
12408 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 12440 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
12409 } | 12441 } |
12410 | 12442 |
12411 // This tests the case that a request is issued via http instead of spdy after | 12443 // This tests the case that a request is issued via http instead of spdy after |
12412 // npn is negotiated. | 12444 // npn is negotiated. |
12413 TEST_F(HttpNetworkTransactionTest, NpnWithHttpOverSSL) { | 12445 TEST_F(HttpNetworkTransactionTest, NpnWithHttpOverSSL) { |
12414 HttpRequestInfo request; | 12446 HttpRequestInfo request; |
12415 request.method = "GET"; | 12447 request.method = "GET"; |
12416 request.url = GURL("https://www.example.org/"); | 12448 request.url = GURL("https://www.example.org/"); |
12417 request.load_flags = 0; | |
12418 | 12449 |
12419 MockWrite data_writes[] = { | 12450 MockWrite data_writes[] = { |
12420 MockWrite( | 12451 MockWrite( |
12421 "GET / HTTP/1.1\r\n" | 12452 "GET / HTTP/1.1\r\n" |
12422 "Host: www.example.org\r\n" | 12453 "Host: www.example.org\r\n" |
12423 "Connection: keep-alive\r\n\r\n"), | 12454 "Connection: keep-alive\r\n\r\n"), |
12424 }; | 12455 }; |
12425 | 12456 |
12426 MockRead data_reads[] = { | 12457 MockRead data_reads[] = { |
12427 MockRead("HTTP/1.1 200 OK\r\n"), | 12458 MockRead("HTTP/1.1 200 OK\r\n"), |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12463 EXPECT_TRUE(response->was_alpn_negotiated); | 12494 EXPECT_TRUE(response->was_alpn_negotiated); |
12464 } | 12495 } |
12465 | 12496 |
12466 // Simulate the SSL handshake completing with an NPN negotiation followed by an | 12497 // Simulate the SSL handshake completing with an NPN negotiation followed by an |
12467 // immediate server closing of the socket. | 12498 // immediate server closing of the socket. |
12468 // Regression test for https://crbug.com/46369. | 12499 // Regression test for https://crbug.com/46369. |
12469 TEST_F(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { | 12500 TEST_F(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { |
12470 HttpRequestInfo request; | 12501 HttpRequestInfo request; |
12471 request.method = "GET"; | 12502 request.method = "GET"; |
12472 request.url = GURL("https://www.example.org/"); | 12503 request.url = GURL("https://www.example.org/"); |
12473 request.load_flags = 0; | |
12474 | 12504 |
12475 SSLSocketDataProvider ssl(ASYNC, OK); | 12505 SSLSocketDataProvider ssl(ASYNC, OK); |
12476 ssl.next_proto = kProtoHTTP2; | 12506 ssl.next_proto = kProtoHTTP2; |
12477 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 12507 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
12478 | 12508 |
12479 SpdySerializedFrame req( | 12509 SpdySerializedFrame req( |
12480 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 12510 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
12481 MockWrite spdy_writes[] = {CreateMockWrite(req, 1)}; | 12511 MockWrite spdy_writes[] = {CreateMockWrite(req, 1)}; |
12482 | 12512 |
12483 MockRead spdy_reads[] = { | 12513 MockRead spdy_reads[] = { |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12532 MockConnect mock_connect(SYNCHRONOUS, OK); | 12562 MockConnect mock_connect(SYNCHRONOUS, OK); |
12533 MockRead data_reads[] = { | 12563 MockRead data_reads[] = { |
12534 MockRead(SYNCHRONOUS, "HTTP/1.0 200 OK\r\n\r\n"), | 12564 MockRead(SYNCHRONOUS, "HTTP/1.0 200 OK\r\n\r\n"), |
12535 MockRead(SYNCHRONOUS, "hello world"), | 12565 MockRead(SYNCHRONOUS, "hello world"), |
12536 MockRead(SYNCHRONOUS, OK), | 12566 MockRead(SYNCHRONOUS, OK), |
12537 }; | 12567 }; |
12538 | 12568 |
12539 HttpRequestInfo request; | 12569 HttpRequestInfo request; |
12540 request.method = "GET"; | 12570 request.method = "GET"; |
12541 request.url = GURL("http://www.example.org/"); | 12571 request.url = GURL("http://www.example.org/"); |
12542 request.load_flags = 0; | |
12543 | 12572 |
12544 session_deps_.host_resolver->set_synchronous_mode(true); | 12573 session_deps_.host_resolver->set_synchronous_mode(true); |
12545 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12574 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12546 std::unique_ptr<HttpNetworkTransaction> trans( | 12575 std::unique_ptr<HttpNetworkTransaction> trans( |
12547 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12576 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
12548 | 12577 |
12549 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 12578 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
12550 data.set_connect_data(mock_connect); | 12579 data.set_connect_data(mock_connect); |
12551 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12580 session_deps_.socket_factory->AddSocketDataProvider(&data); |
12552 | 12581 |
(...skipping 26 matching lines...) Expand all Loading... |
12579 }; | 12608 }; |
12580 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 12609 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
12581 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12610 session_deps_.socket_factory->AddSocketDataProvider(&data); |
12582 | 12611 |
12583 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12612 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12584 | 12613 |
12585 { | 12614 { |
12586 HttpRequestInfo request; | 12615 HttpRequestInfo request; |
12587 request.method = "GET"; | 12616 request.method = "GET"; |
12588 request.url = GURL("http://www.example.org/"); | 12617 request.url = GURL("http://www.example.org/"); |
12589 request.load_flags = 0; | |
12590 | 12618 |
12591 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 12619 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
12592 TestCompletionCallback callback; | 12620 TestCompletionCallback callback; |
12593 | 12621 |
12594 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 12622 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
12595 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 12623 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12596 callback.WaitForResult(); | 12624 callback.WaitForResult(); |
12597 | 12625 |
12598 const HttpResponseInfo* response = trans.GetResponseInfo(); | 12626 const HttpResponseInfo* response = trans.GetResponseInfo(); |
12599 ASSERT_TRUE(response); | 12627 ASSERT_TRUE(response); |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12913 // Set up an initial SpdySession in the pool to reuse. | 12941 // Set up an initial SpdySession in the pool to reuse. |
12914 HostPortPair host_port_pair("www.example.org", 443); | 12942 HostPortPair host_port_pair("www.example.org", 443); |
12915 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 12943 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
12916 PRIVACY_MODE_DISABLED); | 12944 PRIVACY_MODE_DISABLED); |
12917 base::WeakPtr<SpdySession> spdy_session = | 12945 base::WeakPtr<SpdySession> spdy_session = |
12918 CreateSecureSpdySession(session.get(), key, NetLogWithSource()); | 12946 CreateSecureSpdySession(session.get(), key, NetLogWithSource()); |
12919 | 12947 |
12920 HttpRequestInfo request; | 12948 HttpRequestInfo request; |
12921 request.method = "GET"; | 12949 request.method = "GET"; |
12922 request.url = GURL("https://www.example.org/"); | 12950 request.url = GURL("https://www.example.org/"); |
12923 request.load_flags = 0; | |
12924 | 12951 |
12925 // This is the important line that marks this as a preconnect. | 12952 // This is the important line that marks this as a preconnect. |
12926 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; | 12953 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; |
12927 | 12954 |
12928 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 12955 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
12929 | 12956 |
12930 TestCompletionCallback callback; | 12957 TestCompletionCallback callback; |
12931 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 12958 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
12932 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 12959 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
12933 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 12960 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13681 AlternativeService alternative_service( | 13708 AlternativeService alternative_service( |
13682 AlternateProtocolFromNextProto(kProtoHTTP2), alternative); | 13709 AlternateProtocolFromNextProto(kProtoHTTP2), alternative); |
13683 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 13710 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
13684 http_server_properties->SetAlternativeService(server, alternative_service, | 13711 http_server_properties->SetAlternativeService(server, alternative_service, |
13685 expiration); | 13712 expiration); |
13686 | 13713 |
13687 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 13714 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
13688 HttpRequestInfo request; | 13715 HttpRequestInfo request; |
13689 request.method = "GET"; | 13716 request.method = "GET"; |
13690 request.url = GURL("https://www.example.org:443"); | 13717 request.url = GURL("https://www.example.org:443"); |
13691 request.load_flags = 0; | |
13692 TestCompletionCallback callback; | 13718 TestCompletionCallback callback; |
13693 | 13719 |
13694 // HTTP/2 (or SPDY) is required for alternative service, if HTTP/1.1 is | 13720 // HTTP/2 (or SPDY) is required for alternative service, if HTTP/1.1 is |
13695 // negotiated, the alternate Job should fail with ERR_ALPN_NEGOTIATION_FAILED. | 13721 // negotiated, the alternate Job should fail with ERR_ALPN_NEGOTIATION_FAILED. |
13696 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 13722 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
13697 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_ALPN_NEGOTIATION_FAILED)); | 13723 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_ALPN_NEGOTIATION_FAILED)); |
13698 } | 13724 } |
13699 | 13725 |
13700 // A request to a server with an alternative service fires two Jobs: one to the | 13726 // A request to a server with an alternative service fires two Jobs: one to the |
13701 // server, and an alternate one to the alternative server. If the former | 13727 // server, and an alternate one to the alternative server. If the former |
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14381 EXPECT_FALSE( | 14407 EXPECT_FALSE( |
14382 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 14408 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
14383 EXPECT_FALSE( | 14409 EXPECT_FALSE( |
14384 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | 14410 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
14385 } | 14411 } |
14386 | 14412 |
14387 TEST_F(HttpNetworkTransactionTest, HttpSyncConnectError) { | 14413 TEST_F(HttpNetworkTransactionTest, HttpSyncConnectError) { |
14388 HttpRequestInfo request; | 14414 HttpRequestInfo request; |
14389 request.method = "GET"; | 14415 request.method = "GET"; |
14390 request.url = GURL("http://www.example.org/"); | 14416 request.url = GURL("http://www.example.org/"); |
14391 request.load_flags = 0; | |
14392 | 14417 |
14393 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14418 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
14394 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 14419 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
14395 | 14420 |
14396 MockConnect mock_connect(SYNCHRONOUS, ERR_NAME_NOT_RESOLVED); | 14421 MockConnect mock_connect(SYNCHRONOUS, ERR_NAME_NOT_RESOLVED); |
14397 StaticSocketDataProvider data; | 14422 StaticSocketDataProvider data; |
14398 data.set_connect_data(mock_connect); | 14423 data.set_connect_data(mock_connect); |
14399 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14424 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14400 | 14425 |
14401 TestCompletionCallback callback; | 14426 TestCompletionCallback callback; |
(...skipping 15 matching lines...) Expand all Loading... |
14417 | 14442 |
14418 IPEndPoint endpoint; | 14443 IPEndPoint endpoint; |
14419 EXPECT_FALSE(trans.GetRemoteEndpoint(&endpoint)); | 14444 EXPECT_FALSE(trans.GetRemoteEndpoint(&endpoint)); |
14420 EXPECT_TRUE(endpoint.address().empty()); | 14445 EXPECT_TRUE(endpoint.address().empty()); |
14421 } | 14446 } |
14422 | 14447 |
14423 TEST_F(HttpNetworkTransactionTest, HttpAsyncConnectError) { | 14448 TEST_F(HttpNetworkTransactionTest, HttpAsyncConnectError) { |
14424 HttpRequestInfo request; | 14449 HttpRequestInfo request; |
14425 request.method = "GET"; | 14450 request.method = "GET"; |
14426 request.url = GURL("http://www.example.org/"); | 14451 request.url = GURL("http://www.example.org/"); |
14427 request.load_flags = 0; | |
14428 | 14452 |
14429 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14453 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
14430 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 14454 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
14431 | 14455 |
14432 MockConnect mock_connect(ASYNC, ERR_NAME_NOT_RESOLVED); | 14456 MockConnect mock_connect(ASYNC, ERR_NAME_NOT_RESOLVED); |
14433 StaticSocketDataProvider data; | 14457 StaticSocketDataProvider data; |
14434 data.set_connect_data(mock_connect); | 14458 data.set_connect_data(mock_connect); |
14435 session_deps_.socket_factory->AddSocketDataProvider(&data); | 14459 session_deps_.socket_factory->AddSocketDataProvider(&data); |
14436 | 14460 |
14437 TestCompletionCallback callback; | 14461 TestCompletionCallback callback; |
(...skipping 15 matching lines...) Expand all Loading... |
14453 | 14477 |
14454 IPEndPoint endpoint; | 14478 IPEndPoint endpoint; |
14455 EXPECT_FALSE(trans.GetRemoteEndpoint(&endpoint)); | 14479 EXPECT_FALSE(trans.GetRemoteEndpoint(&endpoint)); |
14456 EXPECT_TRUE(endpoint.address().empty()); | 14480 EXPECT_TRUE(endpoint.address().empty()); |
14457 } | 14481 } |
14458 | 14482 |
14459 TEST_F(HttpNetworkTransactionTest, HttpSyncWriteError) { | 14483 TEST_F(HttpNetworkTransactionTest, HttpSyncWriteError) { |
14460 HttpRequestInfo request; | 14484 HttpRequestInfo request; |
14461 request.method = "GET"; | 14485 request.method = "GET"; |
14462 request.url = GURL("http://www.example.org/"); | 14486 request.url = GURL("http://www.example.org/"); |
14463 request.load_flags = 0; | |
14464 | 14487 |
14465 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14488 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
14466 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 14489 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
14467 | 14490 |
14468 MockWrite data_writes[] = { | 14491 MockWrite data_writes[] = { |
14469 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 14492 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
14470 }; | 14493 }; |
14471 MockRead data_reads[] = { | 14494 MockRead data_reads[] = { |
14472 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 14495 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
14473 }; | 14496 }; |
(...skipping 12 matching lines...) Expand all Loading... |
14486 | 14509 |
14487 HttpRequestHeaders request_headers; | 14510 HttpRequestHeaders request_headers; |
14488 EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); | 14511 EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); |
14489 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14512 EXPECT_TRUE(request_headers.HasHeader("Host")); |
14490 } | 14513 } |
14491 | 14514 |
14492 TEST_F(HttpNetworkTransactionTest, HttpAsyncWriteError) { | 14515 TEST_F(HttpNetworkTransactionTest, HttpAsyncWriteError) { |
14493 HttpRequestInfo request; | 14516 HttpRequestInfo request; |
14494 request.method = "GET"; | 14517 request.method = "GET"; |
14495 request.url = GURL("http://www.example.org/"); | 14518 request.url = GURL("http://www.example.org/"); |
14496 request.load_flags = 0; | |
14497 | 14519 |
14498 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14520 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
14499 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 14521 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
14500 | 14522 |
14501 MockWrite data_writes[] = { | 14523 MockWrite data_writes[] = { |
14502 MockWrite(ASYNC, ERR_CONNECTION_RESET), | 14524 MockWrite(ASYNC, ERR_CONNECTION_RESET), |
14503 }; | 14525 }; |
14504 MockRead data_reads[] = { | 14526 MockRead data_reads[] = { |
14505 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 14527 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
14506 }; | 14528 }; |
(...skipping 12 matching lines...) Expand all Loading... |
14519 | 14541 |
14520 HttpRequestHeaders request_headers; | 14542 HttpRequestHeaders request_headers; |
14521 EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); | 14543 EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); |
14522 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14544 EXPECT_TRUE(request_headers.HasHeader("Host")); |
14523 } | 14545 } |
14524 | 14546 |
14525 TEST_F(HttpNetworkTransactionTest, HttpSyncReadError) { | 14547 TEST_F(HttpNetworkTransactionTest, HttpSyncReadError) { |
14526 HttpRequestInfo request; | 14548 HttpRequestInfo request; |
14527 request.method = "GET"; | 14549 request.method = "GET"; |
14528 request.url = GURL("http://www.example.org/"); | 14550 request.url = GURL("http://www.example.org/"); |
14529 request.load_flags = 0; | |
14530 | 14551 |
14531 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14552 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
14532 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 14553 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
14533 | 14554 |
14534 MockWrite data_writes[] = { | 14555 MockWrite data_writes[] = { |
14535 MockWrite( | 14556 MockWrite( |
14536 "GET / HTTP/1.1\r\n" | 14557 "GET / HTTP/1.1\r\n" |
14537 "Host: www.example.org\r\n" | 14558 "Host: www.example.org\r\n" |
14538 "Connection: keep-alive\r\n\r\n"), | 14559 "Connection: keep-alive\r\n\r\n"), |
14539 }; | 14560 }; |
(...skipping 15 matching lines...) Expand all Loading... |
14555 | 14576 |
14556 HttpRequestHeaders request_headers; | 14577 HttpRequestHeaders request_headers; |
14557 EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); | 14578 EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); |
14558 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14579 EXPECT_TRUE(request_headers.HasHeader("Host")); |
14559 } | 14580 } |
14560 | 14581 |
14561 TEST_F(HttpNetworkTransactionTest, HttpAsyncReadError) { | 14582 TEST_F(HttpNetworkTransactionTest, HttpAsyncReadError) { |
14562 HttpRequestInfo request; | 14583 HttpRequestInfo request; |
14563 request.method = "GET"; | 14584 request.method = "GET"; |
14564 request.url = GURL("http://www.example.org/"); | 14585 request.url = GURL("http://www.example.org/"); |
14565 request.load_flags = 0; | |
14566 | 14586 |
14567 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14587 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
14568 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 14588 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
14569 | 14589 |
14570 MockWrite data_writes[] = { | 14590 MockWrite data_writes[] = { |
14571 MockWrite( | 14591 MockWrite( |
14572 "GET / HTTP/1.1\r\n" | 14592 "GET / HTTP/1.1\r\n" |
14573 "Host: www.example.org\r\n" | 14593 "Host: www.example.org\r\n" |
14574 "Connection: keep-alive\r\n\r\n"), | 14594 "Connection: keep-alive\r\n\r\n"), |
14575 }; | 14595 }; |
(...skipping 15 matching lines...) Expand all Loading... |
14591 | 14611 |
14592 HttpRequestHeaders request_headers; | 14612 HttpRequestHeaders request_headers; |
14593 EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); | 14613 EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); |
14594 EXPECT_TRUE(request_headers.HasHeader("Host")); | 14614 EXPECT_TRUE(request_headers.HasHeader("Host")); |
14595 } | 14615 } |
14596 | 14616 |
14597 TEST_F(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { | 14617 TEST_F(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { |
14598 HttpRequestInfo request; | 14618 HttpRequestInfo request; |
14599 request.method = "GET"; | 14619 request.method = "GET"; |
14600 request.url = GURL("http://www.example.org/"); | 14620 request.url = GURL("http://www.example.org/"); |
14601 request.load_flags = 0; | |
14602 request.extra_headers.SetHeader("X-Foo", "bar"); | 14621 request.extra_headers.SetHeader("X-Foo", "bar"); |
14603 | 14622 |
14604 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 14623 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
14605 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 14624 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
14606 | 14625 |
14607 MockWrite data_writes[] = { | 14626 MockWrite data_writes[] = { |
14608 MockWrite( | 14627 MockWrite( |
14609 "GET / HTTP/1.1\r\n" | 14628 "GET / HTTP/1.1\r\n" |
14610 "Host: www.example.org\r\n" | 14629 "Host: www.example.org\r\n" |
14611 "Connection: keep-alive\r\n" | 14630 "Connection: keep-alive\r\n" |
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15280 TEST_F(HttpNetworkTransactionTest, PostReadsErrorResponseAfterReset) { | 15299 TEST_F(HttpNetworkTransactionTest, PostReadsErrorResponseAfterReset) { |
15281 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15300 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15282 element_readers.push_back( | 15301 element_readers.push_back( |
15283 base::MakeUnique<UploadBytesElementReader>("foo", 3)); | 15302 base::MakeUnique<UploadBytesElementReader>("foo", 3)); |
15284 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15303 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15285 | 15304 |
15286 HttpRequestInfo request; | 15305 HttpRequestInfo request; |
15287 request.method = "POST"; | 15306 request.method = "POST"; |
15288 request.url = GURL("http://www.foo.com/"); | 15307 request.url = GURL("http://www.foo.com/"); |
15289 request.upload_data_stream = &upload_data_stream; | 15308 request.upload_data_stream = &upload_data_stream; |
15290 request.load_flags = 0; | |
15291 | 15309 |
15292 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15310 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
15293 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15311 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
15294 // Send headers successfully, but get an error while sending the body. | 15312 // Send headers successfully, but get an error while sending the body. |
15295 MockWrite data_writes[] = { | 15313 MockWrite data_writes[] = { |
15296 MockWrite("POST / HTTP/1.1\r\n" | 15314 MockWrite("POST / HTTP/1.1\r\n" |
15297 "Host: www.foo.com\r\n" | 15315 "Host: www.foo.com\r\n" |
15298 "Connection: keep-alive\r\n" | 15316 "Connection: keep-alive\r\n" |
15299 "Content-Length: 3\r\n\r\n"), | 15317 "Content-Length: 3\r\n\r\n"), |
15300 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 15318 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15419 PostReadsErrorResponseAfterResetPartialBodySent) { | 15437 PostReadsErrorResponseAfterResetPartialBodySent) { |
15420 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15438 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15421 element_readers.push_back( | 15439 element_readers.push_back( |
15422 base::MakeUnique<UploadBytesElementReader>("foo", 3)); | 15440 base::MakeUnique<UploadBytesElementReader>("foo", 3)); |
15423 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15441 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15424 | 15442 |
15425 HttpRequestInfo request; | 15443 HttpRequestInfo request; |
15426 request.method = "POST"; | 15444 request.method = "POST"; |
15427 request.url = GURL("http://www.foo.com/"); | 15445 request.url = GURL("http://www.foo.com/"); |
15428 request.upload_data_stream = &upload_data_stream; | 15446 request.upload_data_stream = &upload_data_stream; |
15429 request.load_flags = 0; | |
15430 | 15447 |
15431 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15448 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
15432 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15449 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
15433 // Send headers successfully, but get an error while sending the body. | 15450 // Send headers successfully, but get an error while sending the body. |
15434 MockWrite data_writes[] = { | 15451 MockWrite data_writes[] = { |
15435 MockWrite("POST / HTTP/1.1\r\n" | 15452 MockWrite("POST / HTTP/1.1\r\n" |
15436 "Host: www.foo.com\r\n" | 15453 "Host: www.foo.com\r\n" |
15437 "Connection: keep-alive\r\n" | 15454 "Connection: keep-alive\r\n" |
15438 "Content-Length: 3\r\n\r\n" | 15455 "Content-Length: 3\r\n\r\n" |
15439 "fo"), | 15456 "fo"), |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15471 | 15488 |
15472 // This tests the more common case than the previous test, where headers and | 15489 // This tests the more common case than the previous test, where headers and |
15473 // body are not merged into a single request. | 15490 // body are not merged into a single request. |
15474 TEST_F(HttpNetworkTransactionTest, ChunkedPostReadsErrorResponseAfterReset) { | 15491 TEST_F(HttpNetworkTransactionTest, ChunkedPostReadsErrorResponseAfterReset) { |
15475 ChunkedUploadDataStream upload_data_stream(0); | 15492 ChunkedUploadDataStream upload_data_stream(0); |
15476 | 15493 |
15477 HttpRequestInfo request; | 15494 HttpRequestInfo request; |
15478 request.method = "POST"; | 15495 request.method = "POST"; |
15479 request.url = GURL("http://www.foo.com/"); | 15496 request.url = GURL("http://www.foo.com/"); |
15480 request.upload_data_stream = &upload_data_stream; | 15497 request.upload_data_stream = &upload_data_stream; |
15481 request.load_flags = 0; | |
15482 | 15498 |
15483 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15499 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
15484 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15500 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
15485 // Send headers successfully, but get an error while sending the body. | 15501 // Send headers successfully, but get an error while sending the body. |
15486 MockWrite data_writes[] = { | 15502 MockWrite data_writes[] = { |
15487 MockWrite("POST / HTTP/1.1\r\n" | 15503 MockWrite("POST / HTTP/1.1\r\n" |
15488 "Host: www.foo.com\r\n" | 15504 "Host: www.foo.com\r\n" |
15489 "Connection: keep-alive\r\n" | 15505 "Connection: keep-alive\r\n" |
15490 "Transfer-Encoding: chunked\r\n\r\n"), | 15506 "Transfer-Encoding: chunked\r\n\r\n"), |
15491 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 15507 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15530 TEST_F(HttpNetworkTransactionTest, PostReadsErrorResponseAfterResetAnd100) { | 15546 TEST_F(HttpNetworkTransactionTest, PostReadsErrorResponseAfterResetAnd100) { |
15531 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15547 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15532 element_readers.push_back( | 15548 element_readers.push_back( |
15533 base::MakeUnique<UploadBytesElementReader>("foo", 3)); | 15549 base::MakeUnique<UploadBytesElementReader>("foo", 3)); |
15534 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15550 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15535 | 15551 |
15536 HttpRequestInfo request; | 15552 HttpRequestInfo request; |
15537 request.method = "POST"; | 15553 request.method = "POST"; |
15538 request.url = GURL("http://www.foo.com/"); | 15554 request.url = GURL("http://www.foo.com/"); |
15539 request.upload_data_stream = &upload_data_stream; | 15555 request.upload_data_stream = &upload_data_stream; |
15540 request.load_flags = 0; | |
15541 | 15556 |
15542 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15557 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
15543 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15558 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
15544 | 15559 |
15545 MockWrite data_writes[] = { | 15560 MockWrite data_writes[] = { |
15546 MockWrite("POST / HTTP/1.1\r\n" | 15561 MockWrite("POST / HTTP/1.1\r\n" |
15547 "Host: www.foo.com\r\n" | 15562 "Host: www.foo.com\r\n" |
15548 "Connection: keep-alive\r\n" | 15563 "Connection: keep-alive\r\n" |
15549 "Content-Length: 3\r\n\r\n"), | 15564 "Content-Length: 3\r\n\r\n"), |
15550 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 15565 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15583 TEST_F(HttpNetworkTransactionTest, PostIgnoresNonErrorResponseAfterReset) { | 15598 TEST_F(HttpNetworkTransactionTest, PostIgnoresNonErrorResponseAfterReset) { |
15584 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15599 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15585 element_readers.push_back( | 15600 element_readers.push_back( |
15586 base::MakeUnique<UploadBytesElementReader>("foo", 3)); | 15601 base::MakeUnique<UploadBytesElementReader>("foo", 3)); |
15587 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15602 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15588 | 15603 |
15589 HttpRequestInfo request; | 15604 HttpRequestInfo request; |
15590 request.method = "POST"; | 15605 request.method = "POST"; |
15591 request.url = GURL("http://www.foo.com/"); | 15606 request.url = GURL("http://www.foo.com/"); |
15592 request.upload_data_stream = &upload_data_stream; | 15607 request.upload_data_stream = &upload_data_stream; |
15593 request.load_flags = 0; | |
15594 | 15608 |
15595 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15609 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
15596 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15610 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
15597 // Send headers successfully, but get an error while sending the body. | 15611 // Send headers successfully, but get an error while sending the body. |
15598 MockWrite data_writes[] = { | 15612 MockWrite data_writes[] = { |
15599 MockWrite("POST / HTTP/1.1\r\n" | 15613 MockWrite("POST / HTTP/1.1\r\n" |
15600 "Host: www.foo.com\r\n" | 15614 "Host: www.foo.com\r\n" |
15601 "Connection: keep-alive\r\n" | 15615 "Connection: keep-alive\r\n" |
15602 "Content-Length: 3\r\n\r\n"), | 15616 "Content-Length: 3\r\n\r\n"), |
15603 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 15617 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
(...skipping 21 matching lines...) Expand all Loading... |
15625 PostIgnoresNonErrorResponseAfterResetAnd100) { | 15639 PostIgnoresNonErrorResponseAfterResetAnd100) { |
15626 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15640 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15627 element_readers.push_back( | 15641 element_readers.push_back( |
15628 base::MakeUnique<UploadBytesElementReader>("foo", 3)); | 15642 base::MakeUnique<UploadBytesElementReader>("foo", 3)); |
15629 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15643 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15630 | 15644 |
15631 HttpRequestInfo request; | 15645 HttpRequestInfo request; |
15632 request.method = "POST"; | 15646 request.method = "POST"; |
15633 request.url = GURL("http://www.foo.com/"); | 15647 request.url = GURL("http://www.foo.com/"); |
15634 request.upload_data_stream = &upload_data_stream; | 15648 request.upload_data_stream = &upload_data_stream; |
15635 request.load_flags = 0; | |
15636 | 15649 |
15637 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15650 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
15638 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15651 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
15639 // Send headers successfully, but get an error while sending the body. | 15652 // Send headers successfully, but get an error while sending the body. |
15640 MockWrite data_writes[] = { | 15653 MockWrite data_writes[] = { |
15641 MockWrite("POST / HTTP/1.1\r\n" | 15654 MockWrite("POST / HTTP/1.1\r\n" |
15642 "Host: www.foo.com\r\n" | 15655 "Host: www.foo.com\r\n" |
15643 "Connection: keep-alive\r\n" | 15656 "Connection: keep-alive\r\n" |
15644 "Content-Length: 3\r\n\r\n"), | 15657 "Content-Length: 3\r\n\r\n"), |
15645 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 15658 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
(...skipping 22 matching lines...) Expand all Loading... |
15668 TEST_F(HttpNetworkTransactionTest, PostIgnoresHttp09ResponseAfterReset) { | 15681 TEST_F(HttpNetworkTransactionTest, PostIgnoresHttp09ResponseAfterReset) { |
15669 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15682 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15670 element_readers.push_back( | 15683 element_readers.push_back( |
15671 base::MakeUnique<UploadBytesElementReader>("foo", 3)); | 15684 base::MakeUnique<UploadBytesElementReader>("foo", 3)); |
15672 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15685 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15673 | 15686 |
15674 HttpRequestInfo request; | 15687 HttpRequestInfo request; |
15675 request.method = "POST"; | 15688 request.method = "POST"; |
15676 request.url = GURL("http://www.foo.com/"); | 15689 request.url = GURL("http://www.foo.com/"); |
15677 request.upload_data_stream = &upload_data_stream; | 15690 request.upload_data_stream = &upload_data_stream; |
15678 request.load_flags = 0; | |
15679 | 15691 |
15680 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15692 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
15681 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15693 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
15682 // Send headers successfully, but get an error while sending the body. | 15694 // Send headers successfully, but get an error while sending the body. |
15683 MockWrite data_writes[] = { | 15695 MockWrite data_writes[] = { |
15684 MockWrite("POST / HTTP/1.1\r\n" | 15696 MockWrite("POST / HTTP/1.1\r\n" |
15685 "Host: www.foo.com\r\n" | 15697 "Host: www.foo.com\r\n" |
15686 "Connection: keep-alive\r\n" | 15698 "Connection: keep-alive\r\n" |
15687 "Content-Length: 3\r\n\r\n"), | 15699 "Content-Length: 3\r\n\r\n"), |
15688 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 15700 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
(...skipping 19 matching lines...) Expand all Loading... |
15708 TEST_F(HttpNetworkTransactionTest, PostIgnoresPartial400HeadersAfterReset) { | 15720 TEST_F(HttpNetworkTransactionTest, PostIgnoresPartial400HeadersAfterReset) { |
15709 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 15721 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
15710 element_readers.push_back( | 15722 element_readers.push_back( |
15711 base::MakeUnique<UploadBytesElementReader>("foo", 3)); | 15723 base::MakeUnique<UploadBytesElementReader>("foo", 3)); |
15712 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 15724 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
15713 | 15725 |
15714 HttpRequestInfo request; | 15726 HttpRequestInfo request; |
15715 request.method = "POST"; | 15727 request.method = "POST"; |
15716 request.url = GURL("http://www.foo.com/"); | 15728 request.url = GURL("http://www.foo.com/"); |
15717 request.upload_data_stream = &upload_data_stream; | 15729 request.upload_data_stream = &upload_data_stream; |
15718 request.load_flags = 0; | |
15719 | 15730 |
15720 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15731 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
15721 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15732 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
15722 // Send headers successfully, but get an error while sending the body. | 15733 // Send headers successfully, but get an error while sending the body. |
15723 MockWrite data_writes[] = { | 15734 MockWrite data_writes[] = { |
15724 MockWrite("POST / HTTP/1.1\r\n" | 15735 MockWrite("POST / HTTP/1.1\r\n" |
15725 "Host: www.foo.com\r\n" | 15736 "Host: www.foo.com\r\n" |
15726 "Connection: keep-alive\r\n" | 15737 "Connection: keep-alive\r\n" |
15727 "Content-Length: 3\r\n\r\n"), | 15738 "Content-Length: 3\r\n\r\n"), |
15728 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 15739 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16058 | 16069 |
16059 std::string response_data; | 16070 std::string response_data; |
16060 EXPECT_THAT(ReadTransaction(&trans, &response_data), IsOk()); | 16071 EXPECT_THAT(ReadTransaction(&trans, &response_data), IsOk()); |
16061 | 16072 |
16062 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | 16073 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
16063 trans.GetTotalSentBytes()); | 16074 trans.GetTotalSentBytes()); |
16064 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | 16075 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
16065 trans.GetTotalReceivedBytes()); | 16076 trans.GetTotalReceivedBytes()); |
16066 } | 16077 } |
16067 | 16078 |
| 16079 // Confirm that transactions whose throttle is created in (and stays in) |
| 16080 // the unthrottled state are not blocked. |
| 16081 TEST_F(HttpNetworkTransactionTest, ThrottlingUnthrottled) { |
| 16082 TestNetworkStreamThrottler* throttler(nullptr); |
| 16083 std::unique_ptr<HttpNetworkSession> session( |
| 16084 CreateSessionWithThrottler(&session_deps_, &throttler)); |
| 16085 |
| 16086 // Send a simple request and make sure it goes through. |
| 16087 HttpRequestInfo request; |
| 16088 request.method = "GET"; |
| 16089 request.url = GURL("http://www.example.org/"); |
| 16090 |
| 16091 std::unique_ptr<HttpTransaction> trans( |
| 16092 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 16093 |
| 16094 MockWrite data_writes[] = { |
| 16095 MockWrite("GET / HTTP/1.1\r\n" |
| 16096 "Host: www.example.org\r\n" |
| 16097 "Connection: keep-alive\r\n\r\n"), |
| 16098 }; |
| 16099 MockRead data_reads[] = { |
| 16100 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 16101 MockRead(SYNCHRONOUS, OK), |
| 16102 }; |
| 16103 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, |
| 16104 arraysize(data_writes)); |
| 16105 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
| 16106 |
| 16107 TestCompletionCallback callback; |
| 16108 trans->Start(&request, callback.callback(), NetLogWithSource()); |
| 16109 EXPECT_EQ(OK, callback.WaitForResult()); |
| 16110 } |
| 16111 |
| 16112 // Confirm requests can be blocked by a throttler, and are resumed |
| 16113 // when the throttle is unblocked. |
| 16114 TEST_F(HttpNetworkTransactionTest, ThrottlingBasic) { |
| 16115 TestNetworkStreamThrottler* throttler(nullptr); |
| 16116 std::unique_ptr<HttpNetworkSession> session( |
| 16117 CreateSessionWithThrottler(&session_deps_, &throttler)); |
| 16118 |
| 16119 // Send a simple request and make sure it goes through. |
| 16120 HttpRequestInfo request; |
| 16121 request.method = "GET"; |
| 16122 request.url = GURL("http://www.example.org/"); |
| 16123 |
| 16124 MockWrite data_writes[] = { |
| 16125 MockWrite("GET / HTTP/1.1\r\n" |
| 16126 "Host: www.example.org\r\n" |
| 16127 "Connection: keep-alive\r\n\r\n"), |
| 16128 }; |
| 16129 MockRead data_reads[] = { |
| 16130 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 16131 MockRead(SYNCHRONOUS, OK), |
| 16132 }; |
| 16133 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, |
| 16134 arraysize(data_writes)); |
| 16135 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
| 16136 |
| 16137 // Start a request that will be throttled at start; confirm it |
| 16138 // doesn't complete. |
| 16139 throttler->set_throttle_new_requests(true); |
| 16140 std::unique_ptr<HttpTransaction> trans( |
| 16141 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 16142 |
| 16143 TestCompletionCallback callback; |
| 16144 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
| 16145 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 16146 |
| 16147 base::RunLoop().RunUntilIdle(); |
| 16148 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); |
| 16149 EXPECT_FALSE(callback.have_result()); |
| 16150 |
| 16151 // Confirm the request goes on to complete when unthrottled. |
| 16152 throttler->UnthrottleAllRequests(); |
| 16153 base::RunLoop().RunUntilIdle(); |
| 16154 ASSERT_TRUE(callback.have_result()); |
| 16155 EXPECT_EQ(OK, callback.WaitForResult()); |
| 16156 } |
| 16157 |
| 16158 // Destroy a request while it's throttled. |
| 16159 TEST_F(HttpNetworkTransactionTest, ThrottlingDestruction) { |
| 16160 TestNetworkStreamThrottler* throttler(nullptr); |
| 16161 std::unique_ptr<HttpNetworkSession> session( |
| 16162 CreateSessionWithThrottler(&session_deps_, &throttler)); |
| 16163 |
| 16164 // Send a simple request and make sure it goes through. |
| 16165 HttpRequestInfo request; |
| 16166 request.method = "GET"; |
| 16167 request.url = GURL("http://www.example.org/"); |
| 16168 |
| 16169 MockWrite data_writes[] = { |
| 16170 MockWrite("GET / HTTP/1.1\r\n" |
| 16171 "Host: www.example.org\r\n" |
| 16172 "Connection: keep-alive\r\n\r\n"), |
| 16173 }; |
| 16174 MockRead data_reads[] = { |
| 16175 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 16176 MockRead(SYNCHRONOUS, OK), |
| 16177 }; |
| 16178 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, |
| 16179 arraysize(data_writes)); |
| 16180 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
| 16181 |
| 16182 // Start a request that will be throttled at start; confirm it |
| 16183 // doesn't complete. |
| 16184 throttler->set_throttle_new_requests(true); |
| 16185 std::unique_ptr<HttpTransaction> trans( |
| 16186 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 16187 |
| 16188 TestCompletionCallback callback; |
| 16189 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
| 16190 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 16191 |
| 16192 base::RunLoop().RunUntilIdle(); |
| 16193 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); |
| 16194 EXPECT_FALSE(callback.have_result()); |
| 16195 |
| 16196 EXPECT_EQ(1u, throttler->num_outstanding_requests()); |
| 16197 trans.reset(); |
| 16198 EXPECT_EQ(0u, throttler->num_outstanding_requests()); |
| 16199 } |
| 16200 |
| 16201 // Confirm the throttler receives SetPriority calls. |
| 16202 TEST_F(HttpNetworkTransactionTest, ThrottlingPrioritySet) { |
| 16203 TestNetworkStreamThrottler* throttler(nullptr); |
| 16204 std::unique_ptr<HttpNetworkSession> session( |
| 16205 CreateSessionWithThrottler(&session_deps_, &throttler)); |
| 16206 |
| 16207 // Send a simple request and make sure it goes through. |
| 16208 HttpRequestInfo request; |
| 16209 request.method = "GET"; |
| 16210 request.url = GURL("http://www.example.org/"); |
| 16211 |
| 16212 MockWrite data_writes[] = { |
| 16213 MockWrite("GET / HTTP/1.1\r\n" |
| 16214 "Host: www.example.org\r\n" |
| 16215 "Connection: keep-alive\r\n\r\n"), |
| 16216 }; |
| 16217 MockRead data_reads[] = { |
| 16218 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 16219 MockRead(SYNCHRONOUS, OK), |
| 16220 }; |
| 16221 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, |
| 16222 arraysize(data_writes)); |
| 16223 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
| 16224 |
| 16225 throttler->set_throttle_new_requests(true); |
| 16226 std::unique_ptr<HttpTransaction> trans( |
| 16227 new HttpNetworkTransaction(IDLE, session.get())); |
| 16228 // Start the transaction to associate a throttle with it. |
| 16229 TestCompletionCallback callback; |
| 16230 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
| 16231 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 16232 |
| 16233 EXPECT_EQ(0, throttler->num_set_priority_calls()); |
| 16234 trans->SetPriority(LOW); |
| 16235 EXPECT_EQ(1, throttler->num_set_priority_calls()); |
| 16236 EXPECT_EQ(LOW, throttler->last_priority_set()); |
| 16237 |
| 16238 throttler->UnthrottleAllRequests(); |
| 16239 base::RunLoop().RunUntilIdle(); |
| 16240 ASSERT_TRUE(callback.have_result()); |
| 16241 EXPECT_EQ(OK, callback.WaitForResult()); |
| 16242 } |
| 16243 |
| 16244 // Confirm that unthrottling from a SetPriority call by the |
| 16245 // throttler works properly. |
| 16246 TEST_F(HttpNetworkTransactionTest, ThrottlingPrioritySetUnthrottle) { |
| 16247 TestNetworkStreamThrottler* throttler(nullptr); |
| 16248 std::unique_ptr<HttpNetworkSession> session( |
| 16249 CreateSessionWithThrottler(&session_deps_, &throttler)); |
| 16250 |
| 16251 // Send a simple request and make sure it goes through. |
| 16252 HttpRequestInfo request; |
| 16253 request.method = "GET"; |
| 16254 request.url = GURL("http://www.example.org/"); |
| 16255 |
| 16256 MockWrite data_writes[] = { |
| 16257 MockWrite("GET / HTTP/1.1\r\n" |
| 16258 "Host: www.example.org\r\n" |
| 16259 "Connection: keep-alive\r\n\r\n"), |
| 16260 }; |
| 16261 MockRead data_reads[] = { |
| 16262 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 16263 MockRead(SYNCHRONOUS, OK), |
| 16264 }; |
| 16265 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, |
| 16266 arraysize(data_writes)); |
| 16267 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
| 16268 |
| 16269 StaticSocketDataProvider reads1(data_reads, arraysize(data_reads), |
| 16270 data_writes, arraysize(data_writes)); |
| 16271 session_deps_.socket_factory->AddSocketDataProvider(&reads1); |
| 16272 |
| 16273 // Start a request that will be throttled at start; confirm it |
| 16274 // doesn't complete. |
| 16275 throttler->set_throttle_new_requests(true); |
| 16276 std::unique_ptr<HttpTransaction> trans( |
| 16277 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 16278 |
| 16279 TestCompletionCallback callback; |
| 16280 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
| 16281 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 16282 |
| 16283 base::RunLoop().RunUntilIdle(); |
| 16284 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); |
| 16285 EXPECT_FALSE(callback.have_result()); |
| 16286 |
| 16287 // Create a new request, call SetPriority on it to unthrottle, |
| 16288 // and make sure that allows the original request to complete. |
| 16289 std::unique_ptr<HttpTransaction> trans1( |
| 16290 new HttpNetworkTransaction(LOW, session.get())); |
| 16291 throttler->set_priority_change_closure( |
| 16292 base::Bind(&TestNetworkStreamThrottler::UnthrottleAllRequests, |
| 16293 base::Unretained(throttler))); |
| 16294 |
| 16295 // Start the transaction to associate a throttle with it. |
| 16296 TestCompletionCallback callback1; |
| 16297 rv = trans1->Start(&request, callback1.callback(), NetLogWithSource()); |
| 16298 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 16299 |
| 16300 trans1->SetPriority(IDLE); |
| 16301 |
| 16302 base::RunLoop().RunUntilIdle(); |
| 16303 ASSERT_TRUE(callback.have_result()); |
| 16304 EXPECT_EQ(OK, callback.WaitForResult()); |
| 16305 ASSERT_TRUE(callback1.have_result()); |
| 16306 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 16307 } |
| 16308 |
| 16309 // Transaction will be destroyed when the unique_ptr goes out of scope. |
| 16310 void DestroyTransaction(std::unique_ptr<HttpTransaction> transaction) {} |
| 16311 |
| 16312 // Confirm that destroying a transaction from a SetPriority call by the |
| 16313 // throttler works properly. |
| 16314 TEST_F(HttpNetworkTransactionTest, ThrottlingPrioritySetDestroy) { |
| 16315 TestNetworkStreamThrottler* throttler(nullptr); |
| 16316 std::unique_ptr<HttpNetworkSession> session( |
| 16317 CreateSessionWithThrottler(&session_deps_, &throttler)); |
| 16318 |
| 16319 // Send a simple request and make sure it goes through. |
| 16320 HttpRequestInfo request; |
| 16321 request.method = "GET"; |
| 16322 request.url = GURL("http://www.example.org/"); |
| 16323 |
| 16324 MockWrite data_writes[] = { |
| 16325 MockWrite("GET / HTTP/1.1\r\n" |
| 16326 "Host: www.example.org\r\n" |
| 16327 "Connection: keep-alive\r\n\r\n"), |
| 16328 }; |
| 16329 MockRead data_reads[] = { |
| 16330 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 16331 MockRead(SYNCHRONOUS, OK), |
| 16332 }; |
| 16333 StaticSocketDataProvider reads(data_reads, arraysize(data_reads), data_writes, |
| 16334 arraysize(data_writes)); |
| 16335 session_deps_.socket_factory->AddSocketDataProvider(&reads); |
| 16336 |
| 16337 StaticSocketDataProvider reads1(data_reads, arraysize(data_reads), |
| 16338 data_writes, arraysize(data_writes)); |
| 16339 session_deps_.socket_factory->AddSocketDataProvider(&reads1); |
| 16340 |
| 16341 // Start a request that will be throttled at start; confirm it |
| 16342 // doesn't complete. |
| 16343 throttler->set_throttle_new_requests(true); |
| 16344 std::unique_ptr<HttpTransaction> trans( |
| 16345 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 16346 |
| 16347 TestCompletionCallback callback; |
| 16348 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
| 16349 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 16350 |
| 16351 base::RunLoop().RunUntilIdle(); |
| 16352 EXPECT_EQ(LOAD_STATE_THROTTLED, trans->GetLoadState()); |
| 16353 EXPECT_FALSE(callback.have_result()); |
| 16354 |
| 16355 // Arrange for the set priority call on the above transaction to delete |
| 16356 // the transaction. |
| 16357 HttpTransaction* trans_ptr(trans.get()); |
| 16358 throttler->set_priority_change_closure( |
| 16359 base::Bind(&DestroyTransaction, base::Passed(&trans))); |
| 16360 |
| 16361 // Call it and check results (partially a "doesn't crash" test). |
| 16362 trans_ptr->SetPriority(IDLE); |
| 16363 trans_ptr = nullptr; // No longer a valid pointer. |
| 16364 |
| 16365 base::RunLoop().RunUntilIdle(); |
| 16366 ASSERT_FALSE(callback.have_result()); |
| 16367 } |
| 16368 |
16068 #if !defined(OS_IOS) | 16369 #if !defined(OS_IOS) |
16069 TEST_F(HttpNetworkTransactionTest, TokenBindingSpdy) { | 16370 TEST_F(HttpNetworkTransactionTest, TokenBindingSpdy) { |
16070 const std::string https_url = "https://www.example.com"; | 16371 const std::string https_url = "https://www.example.com"; |
16071 HttpRequestInfo request; | 16372 HttpRequestInfo request; |
16072 request.url = GURL(https_url); | 16373 request.url = GURL(https_url); |
16073 request.method = "GET"; | 16374 request.method = "GET"; |
16074 | 16375 |
16075 SSLSocketDataProvider ssl(ASYNC, OK); | 16376 SSLSocketDataProvider ssl(ASYNC, OK); |
16076 ssl.token_binding_negotiated = true; | 16377 ssl.token_binding_negotiated = true; |
16077 ssl.token_binding_key_param = TB_PARAM_ECDSAP256; | 16378 ssl.token_binding_key_param = TB_PARAM_ECDSAP256; |
(...skipping 17 matching lines...) Expand all Loading... |
16095 base::RunLoop().RunUntilIdle(); | 16396 base::RunLoop().RunUntilIdle(); |
16096 | 16397 |
16097 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); | 16398 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); |
16098 HttpRequestHeaders headers; | 16399 HttpRequestHeaders headers; |
16099 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); | 16400 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); |
16100 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); | 16401 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); |
16101 } | 16402 } |
16102 #endif // !defined(OS_IOS) | 16403 #endif // !defined(OS_IOS) |
16103 | 16404 |
16104 } // namespace net | 16405 } // namespace net |
OLD | NEW |