| Index: content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc
|
| diff --git a/content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc b/content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc
|
| index 9f0cf59025f58a0008c38842abf1597f485f30ca..512ae3f406c91c5efd02d82263fcf4772530f5c1 100644
|
| --- a/content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc
|
| +++ b/content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc
|
| @@ -5,9 +5,11 @@
|
| #include "content/browser/service_worker/service_worker_cache_storage_manager.h"
|
|
|
| #include "base/files/file_path.h"
|
| +#include "base/files/file_util.h"
|
| #include "base/files/scoped_temp_dir.h"
|
| #include "base/message_loop/message_loop_proxy.h"
|
| #include "base/run_loop.h"
|
| +#include "base/stl_util.h"
|
| #include "content/browser/fileapi/chrome_blob_storage_context.h"
|
| #include "content/browser/quota/mock_quota_manager_proxy.h"
|
| #include "content/browser/service_worker/service_worker_cache_quota_client.h"
|
| @@ -567,6 +569,115 @@ TEST_F(ServiceWorkerCacheStorageManagerTest, MemoryBackedSizePersistent) {
|
| EXPECT_EQ(0, cache_storage->MemoryBackedSize());
|
| }
|
|
|
| +class ServiceWorkerCacheStorageMigrationTest
|
| + : public ServiceWorkerCacheStorageManagerTest {
|
| + protected:
|
| + ServiceWorkerCacheStorageMigrationTest() : cache1_("foo"), cache2_("bar") {}
|
| +
|
| + void SetUp() override {
|
| + ServiceWorkerCacheStorageManagerTest::SetUp();
|
| +
|
| + // Populate a cache, then move it to the "legacy" location
|
| + // so that tests can verify the results of migration.
|
| + legacy_path_ = ServiceWorkerCacheStorageManager::ConstructLegacyOriginPath(
|
| + cache_manager_->root_path(), origin1_);
|
| + new_path_ = ServiceWorkerCacheStorageManager::ConstructOriginPath(
|
| + cache_manager_->root_path(), origin1_);
|
| +
|
| + ASSERT_FALSE(base::DirectoryExists(legacy_path_));
|
| + ASSERT_FALSE(base::DirectoryExists(new_path_));
|
| + ASSERT_TRUE(Open(origin1_, cache1_));
|
| + ASSERT_TRUE(Open(origin1_, cache2_));
|
| + callback_cache_ = nullptr;
|
| + ASSERT_FALSE(base::DirectoryExists(legacy_path_));
|
| + ASSERT_TRUE(base::DirectoryExists(new_path_));
|
| +
|
| + quota_manager_proxy_->SimulateQuotaManagerDestroyed();
|
| + cache_manager_ =
|
| + ServiceWorkerCacheStorageManager::Create(cache_manager_.get());
|
| +
|
| + ASSERT_TRUE(base::Move(new_path_, legacy_path_));
|
| + ASSERT_TRUE(base::DirectoryExists(legacy_path_));
|
| + ASSERT_FALSE(base::DirectoryExists(new_path_));
|
| + }
|
| +
|
| + int64 GetOriginUsage(const GURL& origin) {
|
| + scoped_ptr<base::RunLoop> loop(new base::RunLoop());
|
| + cache_manager_->GetOriginUsage(
|
| + origin,
|
| + base::Bind(&ServiceWorkerCacheStorageMigrationTest::UsageCallback,
|
| + base::Unretained(this), base::Unretained(loop.get())));
|
| + loop->Run();
|
| + return callback_usage_;
|
| + }
|
| +
|
| + void UsageCallback(base::RunLoop* run_loop, int64 usage) {
|
| + callback_usage_ = usage;
|
| + run_loop->Quit();
|
| + }
|
| +
|
| + base::FilePath legacy_path_;
|
| + base::FilePath new_path_;
|
| +
|
| + const std::string cache1_;
|
| + const std::string cache2_;
|
| +
|
| + int64 callback_usage_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ServiceWorkerCacheStorageMigrationTest);
|
| +};
|
| +
|
| +TEST_F(ServiceWorkerCacheStorageMigrationTest, OpenCache) {
|
| + EXPECT_TRUE(Open(origin1_, cache1_));
|
| + EXPECT_FALSE(base::DirectoryExists(legacy_path_));
|
| + EXPECT_TRUE(base::DirectoryExists(new_path_));
|
| +
|
| + EXPECT_TRUE(Keys(origin1_));
|
| + std::vector<std::string> expected_keys;
|
| + expected_keys.push_back(cache1_);
|
| + expected_keys.push_back(cache2_);
|
| + EXPECT_EQ(expected_keys, callback_strings_);
|
| +}
|
| +
|
| +TEST_F(ServiceWorkerCacheStorageMigrationTest, DeleteCache) {
|
| + EXPECT_TRUE(Delete(origin1_, cache1_));
|
| + EXPECT_FALSE(base::DirectoryExists(legacy_path_));
|
| + EXPECT_TRUE(base::DirectoryExists(new_path_));
|
| +
|
| + EXPECT_TRUE(Keys(origin1_));
|
| + std::vector<std::string> expected_keys;
|
| + expected_keys.push_back(cache2_);
|
| + EXPECT_EQ(expected_keys, callback_strings_);
|
| +}
|
| +
|
| +TEST_F(ServiceWorkerCacheStorageMigrationTest, GetOriginUsage) {
|
| + EXPECT_GT(GetOriginUsage(origin1_), 0);
|
| + EXPECT_FALSE(base::DirectoryExists(legacy_path_));
|
| + EXPECT_TRUE(base::DirectoryExists(new_path_));
|
| +}
|
| +
|
| +TEST_F(ServiceWorkerCacheStorageMigrationTest, MoveFailure) {
|
| + // Revert the migration.
|
| + ASSERT_TRUE(base::Move(legacy_path_, new_path_));
|
| + ASSERT_FALSE(base::DirectoryExists(legacy_path_));
|
| + ASSERT_TRUE(base::DirectoryExists(new_path_));
|
| +
|
| + // Make a dummy legacy directory.
|
| + ASSERT_TRUE(base::CreateDirectory(legacy_path_));
|
| +
|
| + // Ensure that migration doesn't stomp existing new directory,
|
| + // but does clean up old directory.
|
| + EXPECT_TRUE(Open(origin1_, cache1_));
|
| + EXPECT_FALSE(base::DirectoryExists(legacy_path_));
|
| + EXPECT_TRUE(base::DirectoryExists(new_path_));
|
| +
|
| + EXPECT_TRUE(Keys(origin1_));
|
| + std::vector<std::string> expected_keys;
|
| + expected_keys.push_back(cache1_);
|
| + expected_keys.push_back(cache2_);
|
| + EXPECT_EQ(expected_keys, callback_strings_);
|
| +}
|
| +
|
| class ServiceWorkerCacheQuotaClientTest
|
| : public ServiceWorkerCacheStorageManagerTest {
|
| protected:
|
|
|