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

Unified Diff: content/browser/service_worker/service_worker_cache_unittest.cc

Issue 863263003: [ServiceWorkerCache] Make the cache operations run serially. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: TODO Created 5 years, 11 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/service_worker/service_worker_cache_unittest.cc
diff --git a/content/browser/service_worker/service_worker_cache_unittest.cc b/content/browser/service_worker/service_worker_cache_unittest.cc
index e7dbb07ef8c9752b7c32e4def98c99c666eb9a0d..c313228e98a60bfff9524f0d838cf2bc65b66eef 100644
--- a/content/browser/service_worker/service_worker_cache_unittest.cc
+++ b/content/browser/service_worker/service_worker_cache_unittest.cc
@@ -908,6 +908,45 @@ TEST_P(ServiceWorkerCacheTestP, ClosedDuringPutOpenEntry) {
VerifyAllOpsFail();
}
+TEST_P(ServiceWorkerCacheTestP, VerifySerialScheduling) {
+ // Start two operations, the first one is delayed but the second isn't. The
+ // second should wait for the first.
+ EXPECT_TRUE(Keys()); // Opens the backend.
+ DelayableBackend* delayable_backend = cache_->UseDelayableBackend();
+ delayable_backend->set_delay_open(true);
+
+ scoped_ptr<ServiceWorkerResponse> response1 =
+ CopyFetchResponse(body_response_);
+ response1->status_code = 1;
+
+ scoped_ptr<base::RunLoop> close_loop1(new base::RunLoop());
+ cache_->Put(CopyFetchRequest(body_request_), response1.Pass(),
+ base::Bind(&ServiceWorkerCacheTest::ResponseAndErrorCallback,
+ base::Unretained(this), close_loop1.get()));
+
+ // Blocks on opening the cache entry.
+ base::RunLoop().RunUntilIdle();
+
+ delayable_backend->set_delay_open(false);
+ scoped_ptr<ServiceWorkerResponse> response2 =
+ CopyFetchResponse(body_response_);
+ response2->status_code = 2;
+ scoped_ptr<base::RunLoop> close_loop2(new base::RunLoop());
+ cache_->Put(CopyFetchRequest(body_request_), response2.Pass(),
+ base::Bind(&ServiceWorkerCacheTest::ResponseAndErrorCallback,
+ base::Unretained(this), close_loop2.get()));
+
+ // The second put operation should wait for the first to complete.
+ base::RunLoop().RunUntilIdle();
+ EXPECT_FALSE(callback_response_);
+
+ delayable_backend->OpenEntryContinue();
+ close_loop1->Run();
+ EXPECT_EQ(1, callback_response_->status_code);
+ close_loop2->Run();
+ EXPECT_EQ(2, callback_response_->status_code);
+}
+
INSTANTIATE_TEST_CASE_P(ServiceWorkerCacheTest,
ServiceWorkerCacheTestP,
::testing::Values(false, true));

Powered by Google App Engine
This is Rietveld 408576698