| 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));
|
|
|