| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/url_request/url_fetcher_impl.h" | 5 #include "net/url_request/url_fetcher_impl.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 virtual TestURLRequestContext* GetURLRequestContext() OVERRIDE { | 434 virtual TestURLRequestContext* GetURLRequestContext() OVERRIDE { |
| 435 if (!context_.get()) { | 435 if (!context_.get()) { |
| 436 context_.reset(new CancelTestURLRequestContext()); | 436 context_.reset(new CancelTestURLRequestContext()); |
| 437 DCHECK(context_->throttler_manager()); | 437 DCHECK(context_->throttler_manager()); |
| 438 | 438 |
| 439 // Registers an entry for test url. The backoff time is calculated by: | 439 // Registers an entry for test url. The backoff time is calculated by: |
| 440 // new_backoff = 2.0 * old_backoff + 0 | 440 // new_backoff = 2.0 * old_backoff + 0 |
| 441 // The initial backoff is 2 seconds and maximum backoff is 4 seconds. | 441 // The initial backoff is 2 seconds and maximum backoff is 4 seconds. |
| 442 // Maximum retries allowed is set to 2. | 442 // Maximum retries allowed is set to 2. |
| 443 scoped_refptr<URLRequestThrottlerEntry> entry( | 443 scoped_refptr<URLRequestThrottlerEntry> entry( |
| 444 new URLRequestThrottlerEntry( | 444 new URLRequestThrottlerEntry(context_->throttler_manager(), |
| 445 context_->throttler_manager(), | 445 std::string(), |
| 446 "", 200, 3, 2000, 2.0, 0.0, 4000)); | 446 200, |
| 447 context_->throttler_manager()->OverrideEntryForTests( | 447 3, |
| 448 throttle_for_url_, entry); | 448 2000, |
| 449 2.0, |
| 450 0.0, |
| 451 4000)); |
| 452 context_->throttler_manager() |
| 453 ->OverrideEntryForTests(throttle_for_url_, entry); |
| 449 | 454 |
| 450 context_created_.Signal(); | 455 context_created_.Signal(); |
| 451 } | 456 } |
| 452 return context_.get(); | 457 return context_.get(); |
| 453 } | 458 } |
| 454 | 459 |
| 455 virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy() const { | 460 virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy() const { |
| 456 return io_message_loop_proxy_; | 461 return io_message_loop_proxy_; |
| 457 } | 462 } |
| 458 | 463 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 std::string data; | 551 std::string data; |
| 547 EXPECT_TRUE(source->GetResponseAsString(&data)); | 552 EXPECT_TRUE(source->GetResponseAsString(&data)); |
| 548 EXPECT_EQ(std::string(&expected[0], size), data); | 553 EXPECT_EQ(std::string(&expected[0], size), data); |
| 549 URLFetcherTest::OnURLFetchComplete(source); | 554 URLFetcherTest::OnURLFetchComplete(source); |
| 550 } | 555 } |
| 551 | 556 |
| 552 void URLFetcherEmptyPostTest::CreateFetcher(const GURL& url) { | 557 void URLFetcherEmptyPostTest::CreateFetcher(const GURL& url) { |
| 553 fetcher_ = new URLFetcherImpl(url, URLFetcher::POST, this); | 558 fetcher_ = new URLFetcherImpl(url, URLFetcher::POST, this); |
| 554 fetcher_->SetRequestContext(new TestURLRequestContextGetter( | 559 fetcher_->SetRequestContext(new TestURLRequestContextGetter( |
| 555 io_message_loop_proxy())); | 560 io_message_loop_proxy())); |
| 556 fetcher_->SetUploadData("text/plain", ""); | 561 fetcher_->SetUploadData("text/plain", std::string()); |
| 557 fetcher_->Start(); | 562 fetcher_->Start(); |
| 558 } | 563 } |
| 559 | 564 |
| 560 void URLFetcherEmptyPostTest::OnURLFetchComplete(const URLFetcher* source) { | 565 void URLFetcherEmptyPostTest::OnURLFetchComplete(const URLFetcher* source) { |
| 561 EXPECT_TRUE(source->GetStatus().is_success()); | 566 EXPECT_TRUE(source->GetStatus().is_success()); |
| 562 EXPECT_EQ(200, source->GetResponseCode()); // HTTP OK | 567 EXPECT_EQ(200, source->GetResponseCode()); // HTTP OK |
| 563 | 568 |
| 564 std::string data; | 569 std::string data; |
| 565 EXPECT_TRUE(source->GetResponseAsString(&data)); | 570 EXPECT_TRUE(source->GetResponseAsString(&data)); |
| 566 EXPECT_TRUE(data.empty()); | 571 EXPECT_TRUE(data.empty()); |
| (...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1156 TestServer test_server(TestServer::TYPE_HTTP, | 1161 TestServer test_server(TestServer::TYPE_HTTP, |
| 1157 TestServer::kLocalhost, | 1162 TestServer::kLocalhost, |
| 1158 base::FilePath(kDocRoot)); | 1163 base::FilePath(kDocRoot)); |
| 1159 ASSERT_TRUE(test_server.Start()); | 1164 ASSERT_TRUE(test_server.Start()); |
| 1160 | 1165 |
| 1161 GURL url(test_server.GetURL("defaultresponse")); | 1166 GURL url(test_server.GetURL("defaultresponse")); |
| 1162 | 1167 |
| 1163 // Registers an entry for test url. It only allows 3 requests to be sent | 1168 // Registers an entry for test url. It only allows 3 requests to be sent |
| 1164 // in 200 milliseconds. | 1169 // in 200 milliseconds. |
| 1165 scoped_refptr<URLRequestThrottlerEntry> entry( | 1170 scoped_refptr<URLRequestThrottlerEntry> entry( |
| 1166 new URLRequestThrottlerEntry( | 1171 new URLRequestThrottlerEntry(request_context()->throttler_manager(), |
| 1167 request_context()->throttler_manager(), | 1172 std::string(), |
| 1168 "", 200, 3, 1, 2.0, 0.0, 256)); | 1173 200, |
| 1174 3, |
| 1175 1, |
| 1176 2.0, |
| 1177 0.0, |
| 1178 256)); |
| 1169 request_context()->throttler_manager()->OverrideEntryForTests(url, entry); | 1179 request_context()->throttler_manager()->OverrideEntryForTests(url, entry); |
| 1170 | 1180 |
| 1171 CreateFetcher(url); | 1181 CreateFetcher(url); |
| 1172 | 1182 |
| 1173 MessageLoop::current()->Run(); | 1183 MessageLoop::current()->Run(); |
| 1174 } | 1184 } |
| 1175 | 1185 |
| 1176 TEST_F(URLFetcherProtectTest, ServerUnavailable) { | 1186 TEST_F(URLFetcherProtectTest, ServerUnavailable) { |
| 1177 TestServer test_server(TestServer::TYPE_HTTP, | 1187 TestServer test_server(TestServer::TYPE_HTTP, |
| 1178 TestServer::kLocalhost, | 1188 TestServer::kLocalhost, |
| 1179 base::FilePath(kDocRoot)); | 1189 base::FilePath(kDocRoot)); |
| 1180 ASSERT_TRUE(test_server.Start()); | 1190 ASSERT_TRUE(test_server.Start()); |
| 1181 | 1191 |
| 1182 GURL url(test_server.GetURL("files/server-unavailable.html")); | 1192 GURL url(test_server.GetURL("files/server-unavailable.html")); |
| 1183 | 1193 |
| 1184 // Registers an entry for test url. The backoff time is calculated by: | 1194 // Registers an entry for test url. The backoff time is calculated by: |
| 1185 // new_backoff = 2.0 * old_backoff + 0 | 1195 // new_backoff = 2.0 * old_backoff + 0 |
| 1186 // and maximum backoff time is 256 milliseconds. | 1196 // and maximum backoff time is 256 milliseconds. |
| 1187 // Maximum retries allowed is set to 11. | 1197 // Maximum retries allowed is set to 11. |
| 1188 scoped_refptr<URLRequestThrottlerEntry> entry( | 1198 scoped_refptr<URLRequestThrottlerEntry> entry( |
| 1189 new URLRequestThrottlerEntry( | 1199 new URLRequestThrottlerEntry(request_context()->throttler_manager(), |
| 1190 request_context()->throttler_manager(), | 1200 std::string(), |
| 1191 "", 200, 3, 1, 2.0, 0.0, 256)); | 1201 200, |
| 1202 3, |
| 1203 1, |
| 1204 2.0, |
| 1205 0.0, |
| 1206 256)); |
| 1192 request_context()->throttler_manager()->OverrideEntryForTests(url, entry); | 1207 request_context()->throttler_manager()->OverrideEntryForTests(url, entry); |
| 1193 | 1208 |
| 1194 CreateFetcher(url); | 1209 CreateFetcher(url); |
| 1195 | 1210 |
| 1196 MessageLoop::current()->Run(); | 1211 MessageLoop::current()->Run(); |
| 1197 } | 1212 } |
| 1198 | 1213 |
| 1199 TEST_F(URLFetcherProtectTestPassedThrough, ServerUnavailablePropagateResponse) { | 1214 TEST_F(URLFetcherProtectTestPassedThrough, ServerUnavailablePropagateResponse) { |
| 1200 TestServer test_server(TestServer::TYPE_HTTP, | 1215 TestServer test_server(TestServer::TYPE_HTTP, |
| 1201 TestServer::kLocalhost, | 1216 TestServer::kLocalhost, |
| 1202 base::FilePath(kDocRoot)); | 1217 base::FilePath(kDocRoot)); |
| 1203 ASSERT_TRUE(test_server.Start()); | 1218 ASSERT_TRUE(test_server.Start()); |
| 1204 | 1219 |
| 1205 GURL url(test_server.GetURL("files/server-unavailable.html")); | 1220 GURL url(test_server.GetURL("files/server-unavailable.html")); |
| 1206 | 1221 |
| 1207 // Registers an entry for test url. The backoff time is calculated by: | 1222 // Registers an entry for test url. The backoff time is calculated by: |
| 1208 // new_backoff = 2.0 * old_backoff + 0 | 1223 // new_backoff = 2.0 * old_backoff + 0 |
| 1209 // and maximum backoff time is 150000 milliseconds. | 1224 // and maximum backoff time is 150000 milliseconds. |
| 1210 // Maximum retries allowed is set to 11. | 1225 // Maximum retries allowed is set to 11. |
| 1211 scoped_refptr<URLRequestThrottlerEntry> entry( | 1226 scoped_refptr<URLRequestThrottlerEntry> entry( |
| 1212 new URLRequestThrottlerEntry( | 1227 new URLRequestThrottlerEntry(request_context()->throttler_manager(), |
| 1213 request_context()->throttler_manager(), | 1228 std::string(), |
| 1214 "", 200, 3, 100, 2.0, 0.0, 150000)); | 1229 200, |
| 1230 3, |
| 1231 100, |
| 1232 2.0, |
| 1233 0.0, |
| 1234 150000)); |
| 1215 // Total time if *not* for not doing automatic backoff would be 150s. | 1235 // Total time if *not* for not doing automatic backoff would be 150s. |
| 1216 // In reality it should be "as soon as server responds". | 1236 // In reality it should be "as soon as server responds". |
| 1217 request_context()->throttler_manager()->OverrideEntryForTests(url, entry); | 1237 request_context()->throttler_manager()->OverrideEntryForTests(url, entry); |
| 1218 | 1238 |
| 1219 CreateFetcher(url); | 1239 CreateFetcher(url); |
| 1220 | 1240 |
| 1221 MessageLoop::current()->Run(); | 1241 MessageLoop::current()->Run(); |
| 1222 } | 1242 } |
| 1223 | 1243 |
| 1224 TEST_F(URLFetcherBadHTTPSTest, BadHTTPSTest) { | 1244 TEST_F(URLFetcherBadHTTPSTest, BadHTTPSTest) { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1261 TestServer::kLocalhost, | 1281 TestServer::kLocalhost, |
| 1262 base::FilePath(kDocRoot)); | 1282 base::FilePath(kDocRoot)); |
| 1263 ASSERT_TRUE(test_server.Start()); | 1283 ASSERT_TRUE(test_server.Start()); |
| 1264 | 1284 |
| 1265 GURL url(test_server.GetURL("files/server-unavailable.html")); | 1285 GURL url(test_server.GetURL("files/server-unavailable.html")); |
| 1266 | 1286 |
| 1267 // Register an entry for test url. | 1287 // Register an entry for test url. |
| 1268 // Using a sliding window of 4 seconds, and max of 1 request, under a fast | 1288 // Using a sliding window of 4 seconds, and max of 1 request, under a fast |
| 1269 // run we expect to have a 4 second delay when posting the Start task. | 1289 // run we expect to have a 4 second delay when posting the Start task. |
| 1270 scoped_refptr<URLRequestThrottlerEntry> entry( | 1290 scoped_refptr<URLRequestThrottlerEntry> entry( |
| 1271 new URLRequestThrottlerEntry( | 1291 new URLRequestThrottlerEntry(request_context()->throttler_manager(), |
| 1272 request_context()->throttler_manager(), | 1292 std::string(), |
| 1273 "", 4000, 1, 2000, 2.0, 0.0, 4000)); | 1293 4000, |
| 1294 1, |
| 1295 2000, |
| 1296 2.0, |
| 1297 0.0, |
| 1298 4000)); |
| 1274 request_context()->throttler_manager()->OverrideEntryForTests(url, entry); | 1299 request_context()->throttler_manager()->OverrideEntryForTests(url, entry); |
| 1275 // Fake that a request has just started. | 1300 // Fake that a request has just started. |
| 1276 entry->ReserveSendingTimeForNextRequest(base::TimeTicks()); | 1301 entry->ReserveSendingTimeForNextRequest(base::TimeTicks()); |
| 1277 | 1302 |
| 1278 // The next request we try to send will be delayed by ~4 seconds. | 1303 // The next request we try to send will be delayed by ~4 seconds. |
| 1279 // The slower the test runs, the less the delay will be (since it takes the | 1304 // The slower the test runs, the less the delay will be (since it takes the |
| 1280 // time difference from now). | 1305 // time difference from now). |
| 1281 | 1306 |
| 1282 base::Thread t("URLFetcher test thread"); | 1307 base::Thread t("URLFetcher test thread"); |
| 1283 ASSERT_TRUE(t.Start()); | 1308 ASSERT_TRUE(t.Start()); |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1471 MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit(). | 1496 MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit(). |
| 1472 | 1497 |
| 1473 MessageLoop::current()->RunUntilIdle(); | 1498 MessageLoop::current()->RunUntilIdle(); |
| 1474 ASSERT_FALSE(file_util::PathExists(file_path_)) | 1499 ASSERT_FALSE(file_util::PathExists(file_path_)) |
| 1475 << file_path_.value() << " not removed."; | 1500 << file_path_.value() << " not removed."; |
| 1476 } | 1501 } |
| 1477 | 1502 |
| 1478 } // namespace | 1503 } // namespace |
| 1479 | 1504 |
| 1480 } // namespace net | 1505 } // namespace net |
| OLD | NEW |