Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Unified Diff: content/browser/loader/resource_scheduler_unittest.cc

Issue 1192673002: Ensure ResourceScheduler starts requests even if the tab is closed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/loader/resource_scheduler_unittest.cc
diff --git a/content/browser/loader/resource_scheduler_unittest.cc b/content/browser/loader/resource_scheduler_unittest.cc
index 8c194a9bba83bdcdfd637c5110780a406c4fa2aa..734a20d6c38b817cbf5db6476d72ffc3c1d746f9 100644
--- a/content/browser/loader/resource_scheduler_unittest.cc
+++ b/content/browser/loader/resource_scheduler_unittest.cc
@@ -2213,6 +2213,47 @@ TEST_F(ResourceSchedulerTest, GetVisualSignalFromRenderViewHost) {
render_process_host_factory.reset();
}
+// Async revalidations which are not started when the tab is closed must be
+// started at some point, or they will hang around forever and prevent other
+// async revalidations to the same URL from being issued.
+TEST_F(ResourceSchedulerTest, RequestStartedAfterClientDeleted) {
+ scheduler_.OnClientCreated(kChildId2, kRouteId2, false, false);
+ scoped_ptr<TestRequest> high(NewRequestWithChildAndRoute(
+ "http://host/high", net::HIGHEST, kChildId2, kRouteId2));
+ scoped_ptr<TestRequest> lowest1(NewRequestWithChildAndRoute(
+ "http://host/lowest", net::LOWEST, kChildId2, kRouteId2));
+ scoped_ptr<TestRequest> lowest2(NewRequestWithChildAndRoute(
+ "http://host/lowest", net::LOWEST, kChildId2, kRouteId2));
+ EXPECT_FALSE(lowest2->started());
+ scheduler_.OnClientDeleted(kChildId2, kRouteId2);
+ high.reset();
+ lowest1.reset();
+ EXPECT_TRUE(lowest2->started());
+}
+
+// The ResourceScheduler::Client destructor calls
+// LoadAnyStartablePendingRequests(), which may start some pending requests.
+// This test is to verify that requests will be started at some point
+// even if they were not started by the destructor.
+TEST_F(ResourceSchedulerTest, RequestStartedAfterClientDeletedManyDelayable) {
+ scheduler_.OnClientCreated(kChildId2, kRouteId2, false, false);
+ scoped_ptr<TestRequest> high(NewRequestWithChildAndRoute(
+ "http://host/high", net::HIGHEST, kChildId2, kRouteId2));
+ const int kMaxNumDelayableRequestsPerClient = 10;
+ ScopedVector<TestRequest> delayable_requests;
+ for (int i = 0; i < kMaxNumDelayableRequestsPerClient + 1; ++i) {
+ delayable_requests.push_back(NewRequestWithChildAndRoute(
+ "http://host/lowest", net::LOWEST, kChildId2, kRouteId2));
+ }
+ scoped_ptr<TestRequest> lowest(NewRequestWithChildAndRoute(
+ "http://host/lowest", net::LOWEST, kChildId2, kRouteId2));
+ EXPECT_FALSE(lowest->started());
+ scheduler_.OnClientDeleted(kChildId2, kRouteId2);
+ high.reset();
+ delayable_requests.clear();
+ EXPECT_TRUE(lowest->started());
+}
+
} // unnamed namespace
} // namespace content
« content/browser/loader/resource_scheduler.cc ('K') | « content/browser/loader/resource_scheduler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698