| Index: content/browser/service_worker/service_worker_cache_storage.cc
|
| diff --git a/content/browser/service_worker/service_worker_fetch_stores.cc b/content/browser/service_worker/service_worker_cache_storage.cc
|
| similarity index 39%
|
| rename from content/browser/service_worker/service_worker_fetch_stores.cc
|
| rename to content/browser/service_worker/service_worker_cache_storage.cc
|
| index 7f818398ca37083195d4a5ab6096f63ea773dad4..d679d3e6242b235f2bc67eab5e4251d334ef72ba 100644
|
| --- a/content/browser/service_worker/service_worker_fetch_stores.cc
|
| +++ b/content/browser/service_worker/service_worker_cache_storage.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "content/browser/service_worker/service_worker_fetch_stores.h"
|
| +#include "content/browser/service_worker/service_worker_cache_storage.h"
|
|
|
| #include <string>
|
|
|
| @@ -11,82 +11,86 @@
|
| #include "base/sha1.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/string_util.h"
|
| +#include "content/browser/service_worker/service_worker_cache.h"
|
| #include "content/browser/service_worker/service_worker_cache.pb.h"
|
| -#include "content/browser/service_worker/service_worker_fetch_store.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "net/base/directory_lister.h"
|
|
|
| namespace content {
|
|
|
| -// Handles the loading of ServiceWorkerFetchStore and any extra clean up other
|
| -// than deleting the ServiceWorkerFetchStore object.
|
| -class ServiceWorkerFetchStores::StoresLoader {
|
| +// Handles the loading and clean up of ServiceWorkerCache objects.
|
| +class ServiceWorkerCacheStorage::CacheLoader {
|
| public:
|
| - virtual ~StoresLoader() {};
|
| - virtual ServiceWorkerFetchStore* LoadStore(const std::string& key) = 0;
|
| - // Creates a new store, deleting any pre-existing store of the same name.
|
| - virtual ServiceWorkerFetchStore* CreateStore(const std::string& key) = 0;
|
| - virtual bool CleanUpDeletedStore(const std::string& key) = 0;
|
| - virtual bool WriteIndex(StoreMap* stores) = 0;
|
| - virtual void LoadIndex(std::vector<std::string>* names) = 0;
|
| + virtual ~CacheLoader() {};
|
| + virtual ServiceWorkerCache* LoadCache(const std::string& cache_name) = 0;
|
| + // Creates a new cache, deleting any pre-existing cache of the same name.
|
| + virtual ServiceWorkerCache* CreateCache(const std::string& cache_name) = 0;
|
| + virtual bool CleanUpDeletedCache(const std::string& key) = 0;
|
| + virtual bool WriteIndex(CacheMap* caches) = 0;
|
| + virtual void LoadIndex(std::vector<std::string>* cache_names) = 0;
|
| };
|
|
|
| -class ServiceWorkerFetchStores::MemoryLoader
|
| - : public ServiceWorkerFetchStores::StoresLoader {
|
| +class ServiceWorkerCacheStorage::MemoryLoader
|
| + : public ServiceWorkerCacheStorage::CacheLoader {
|
| public:
|
| - virtual content::ServiceWorkerFetchStore* LoadStore(
|
| - const std::string& key) OVERRIDE {
|
| + virtual content::ServiceWorkerCache* LoadCache(
|
| + const std::string& cache_name) OVERRIDE {
|
| NOTREACHED();
|
| return NULL;
|
| }
|
|
|
| - virtual ServiceWorkerFetchStore* CreateStore(
|
| - const std::string& key) OVERRIDE {
|
| - return ServiceWorkerFetchStore::CreateMemoryStore(key);
|
| + virtual ServiceWorkerCache* CreateCache(
|
| + const std::string& cache_name) OVERRIDE {
|
| + return ServiceWorkerCache::CreateMemoryCache(cache_name);
|
| }
|
|
|
| - virtual bool CleanUpDeletedStore(const std::string& key) OVERRIDE {
|
| + virtual bool CleanUpDeletedCache(const std::string& cache_name) OVERRIDE {
|
| return true;
|
| }
|
|
|
| - virtual bool WriteIndex(StoreMap* stores) OVERRIDE { return false; }
|
| + virtual bool WriteIndex(CacheMap* caches) OVERRIDE { return false; }
|
|
|
| - virtual void LoadIndex(std::vector<std::string>* names) OVERRIDE { return; }
|
| + virtual void LoadIndex(std::vector<std::string>* cache_names) OVERRIDE {
|
| + return;
|
| + }
|
| };
|
|
|
| -class ServiceWorkerFetchStores::SimpleCacheLoader
|
| - : public ServiceWorkerFetchStores::StoresLoader {
|
| +class ServiceWorkerCacheStorage::SimpleCacheLoader
|
| + : public ServiceWorkerCacheStorage::CacheLoader {
|
| public:
|
| explicit SimpleCacheLoader(const base::FilePath& origin_path)
|
| : origin_path_(origin_path) {}
|
|
|
| - virtual ServiceWorkerFetchStore* LoadStore(const std::string& key) OVERRIDE {
|
| - base::CreateDirectory(CreatePersistentStorePath(origin_path_, key));
|
| - return ServiceWorkerFetchStore::CreatePersistentStore(
|
| - CreatePersistentStorePath(origin_path_, key), key);
|
| + virtual ServiceWorkerCache* LoadCache(
|
| + const std::string& cache_name) OVERRIDE {
|
| + base::CreateDirectory(CreatePersistentCachePath(origin_path_, cache_name));
|
| + return ServiceWorkerCache::CreatePersistentCache(
|
| + CreatePersistentCachePath(origin_path_, cache_name), cache_name);
|
| }
|
|
|
| - virtual ServiceWorkerFetchStore* CreateStore(
|
| - const std::string& key) OVERRIDE {
|
| - base::FilePath store_path = CreatePersistentStorePath(origin_path_, key);
|
| - if (base::PathExists(store_path))
|
| - base::DeleteFile(store_path, /* recursive */ true);
|
| - return LoadStore(key);
|
| + virtual ServiceWorkerCache* CreateCache(
|
| + const std::string& cache_name) OVERRIDE {
|
| + base::FilePath cache_path =
|
| + CreatePersistentCachePath(origin_path_, cache_name);
|
| + if (base::PathExists(cache_path))
|
| + base::DeleteFile(cache_path, /* recursive */ true);
|
| + return LoadCache(cache_name);
|
| }
|
|
|
| - virtual bool CleanUpDeletedStore(const std::string& key) OVERRIDE {
|
| - return base::DeleteFile(CreatePersistentStorePath(origin_path_, key), true);
|
| + virtual bool CleanUpDeletedCache(const std::string& cache_name) OVERRIDE {
|
| + return base::DeleteFile(CreatePersistentCachePath(origin_path_, cache_name),
|
| + true);
|
| }
|
|
|
| - virtual bool WriteIndex(StoreMap* stores) OVERRIDE {
|
| + virtual bool WriteIndex(CacheMap* caches) OVERRIDE {
|
| ServiceWorkerCacheStorageIndex index;
|
|
|
| - for (StoreMap::const_iterator iter(stores); !iter.IsAtEnd();
|
| + for (CacheMap::const_iterator iter(caches); !iter.IsAtEnd();
|
| iter.Advance()) {
|
| - const ServiceWorkerFetchStore* store = iter.GetCurrentValue();
|
| - ServiceWorkerCacheStorageIndex::Cache* cache = index.add_cache();
|
| - cache->set_name(store->name());
|
| - cache->set_size(0); // TODO(jkarlin): Make this real.
|
| + const ServiceWorkerCache* cache = iter.GetCurrentValue();
|
| + ServiceWorkerCacheStorageIndex::Cache* index_cache = index.add_cache();
|
| + index_cache->set_name(cache->name());
|
| + index_cache->set_size(0); // TODO(jkarlin): Make this real.
|
| }
|
|
|
| std::string serialized;
|
| @@ -122,7 +126,7 @@ class ServiceWorkerFetchStores::SimpleCacheLoader
|
| names->push_back(cache.name());
|
| }
|
|
|
| - // TODO(jkarlin): Delete stores that are in the directory and not returned
|
| + // TODO(jkarlin): Delete caches that are in the directory and not returned
|
| // in LoadIndex.
|
| return;
|
| }
|
| @@ -135,136 +139,137 @@ class ServiceWorkerFetchStores::SimpleCacheLoader
|
| return valued_hexed_hash;
|
| }
|
|
|
| - base::FilePath CreatePersistentStorePath(const base::FilePath& origin_path,
|
| - const std::string& store_name) {
|
| - return origin_path.AppendASCII(HexedHash(store_name));
|
| + base::FilePath CreatePersistentCachePath(const base::FilePath& origin_path,
|
| + const std::string& cache_name) {
|
| + return origin_path.AppendASCII(HexedHash(cache_name));
|
| }
|
|
|
| const base::FilePath origin_path_;
|
| };
|
|
|
| -ServiceWorkerFetchStores::ServiceWorkerFetchStores(
|
| +ServiceWorkerCacheStorage::ServiceWorkerCacheStorage(
|
| const base::FilePath& path,
|
| bool memory_only,
|
| const scoped_refptr<base::MessageLoopProxy>& callback_loop)
|
| : initialized_(false), origin_path_(path), callback_loop_(callback_loop) {
|
| if (memory_only)
|
| - stores_loader_.reset(new MemoryLoader());
|
| + cache_loader_.reset(new MemoryLoader());
|
| else
|
| - stores_loader_.reset(new SimpleCacheLoader(origin_path_));
|
| + cache_loader_.reset(new SimpleCacheLoader(origin_path_));
|
| }
|
|
|
| -ServiceWorkerFetchStores::~ServiceWorkerFetchStores() {
|
| +ServiceWorkerCacheStorage::~ServiceWorkerCacheStorage() {
|
| }
|
|
|
| -void ServiceWorkerFetchStores::CreateStore(
|
| - const std::string& store_name,
|
| - const StoreAndErrorCallback& callback) {
|
| +void ServiceWorkerCacheStorage::CreateCache(
|
| + const std::string& cache_name,
|
| + const CacheAndErrorCallback& callback) {
|
| LazyInit();
|
|
|
| - if (store_name.empty()) {
|
| + if (cache_name.empty()) {
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, 0, FETCH_STORES_ERROR_EMPTY_KEY));
|
| + FROM_HERE, base::Bind(callback, 0, CACHE_STORAGE_ERROR_EMPTY_KEY));
|
| return;
|
| }
|
|
|
| - if (GetLoadedStore(store_name)) {
|
| + if (GetLoadedCache(cache_name)) {
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, 0, FETCH_STORES_ERROR_EXISTS));
|
| + FROM_HERE, base::Bind(callback, 0, CACHE_STORAGE_ERROR_EXISTS));
|
| return;
|
| }
|
|
|
| - ServiceWorkerFetchStore* store = stores_loader_->CreateStore(store_name);
|
| + ServiceWorkerCache* cache = cache_loader_->CreateCache(cache_name);
|
|
|
| - if (!store) {
|
| + if (!cache) {
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, 0, FETCH_STORES_ERROR_STORAGE));
|
| + FROM_HERE, base::Bind(callback, 0, CACHE_STORAGE_ERROR_STORAGE));
|
| return;
|
| }
|
|
|
| - InitStore(store);
|
| + InitCache(cache);
|
|
|
| - stores_loader_->WriteIndex(&store_map_);
|
| + cache_loader_->WriteIndex(&cache_map_);
|
|
|
| - store->CreateBackend(
|
| - base::Bind(&ServiceWorkerFetchStores::InitializeStoreCallback,
|
| + cache->CreateBackend(
|
| + base::Bind(&ServiceWorkerCacheStorage::InitializeCacheCallback,
|
| base::Unretained(this),
|
| - store,
|
| + cache,
|
| callback));
|
| }
|
|
|
| -void ServiceWorkerFetchStores::GetStore(const std::string& store_name,
|
| - const StoreAndErrorCallback& callback) {
|
| +void ServiceWorkerCacheStorage::GetCache(
|
| + const std::string& cache_name,
|
| + const CacheAndErrorCallback& callback) {
|
| LazyInit();
|
|
|
| - if (store_name.empty()) {
|
| + if (cache_name.empty()) {
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, 0, FETCH_STORES_ERROR_EMPTY_KEY));
|
| + FROM_HERE, base::Bind(callback, 0, CACHE_STORAGE_ERROR_EMPTY_KEY));
|
| return;
|
| }
|
|
|
| - ServiceWorkerFetchStore* store = GetLoadedStore(store_name);
|
| - if (!store) {
|
| + ServiceWorkerCache* cache = GetLoadedCache(cache_name);
|
| + if (!cache) {
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, 0, FETCH_STORES_ERROR_NOT_FOUND));
|
| + FROM_HERE, base::Bind(callback, 0, CACHE_STORAGE_ERROR_NOT_FOUND));
|
| return;
|
| }
|
|
|
| - store->CreateBackend(
|
| - base::Bind(&ServiceWorkerFetchStores::InitializeStoreCallback,
|
| + cache->CreateBackend(
|
| + base::Bind(&ServiceWorkerCacheStorage::InitializeCacheCallback,
|
| base::Unretained(this),
|
| - store,
|
| + cache,
|
| callback));
|
| }
|
|
|
| -void ServiceWorkerFetchStores::HasStore(const std::string& store_name,
|
| - const BoolAndErrorCallback& callback) {
|
| +void ServiceWorkerCacheStorage::HasCache(const std::string& cache_name,
|
| + const BoolAndErrorCallback& callback) {
|
| LazyInit();
|
|
|
| - if (store_name.empty()) {
|
| + if (cache_name.empty()) {
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, false, FETCH_STORES_ERROR_EMPTY_KEY));
|
| + FROM_HERE, base::Bind(callback, false, CACHE_STORAGE_ERROR_EMPTY_KEY));
|
| return;
|
| }
|
|
|
| - bool has_store = GetLoadedStore(store_name) != NULL;
|
| + bool has_cache = GetLoadedCache(cache_name) != NULL;
|
|
|
| callback_loop_->PostTask(
|
| FROM_HERE,
|
| base::Bind(
|
| - callback, has_store, FETCH_STORES_ERROR_NO_ERROR));
|
| + callback, has_cache, CACHE_STORAGE_ERROR_NO_ERROR));
|
| }
|
|
|
| -void ServiceWorkerFetchStores::DeleteStore(
|
| - const std::string& store_name,
|
| +void ServiceWorkerCacheStorage::DeleteCache(
|
| + const std::string& cache_name,
|
| const BoolAndErrorCallback& callback) {
|
| LazyInit();
|
|
|
| - if (store_name.empty()) {
|
| + if (cache_name.empty()) {
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, false, FETCH_STORES_ERROR_EMPTY_KEY));
|
| + FROM_HERE, base::Bind(callback, false, CACHE_STORAGE_ERROR_EMPTY_KEY));
|
| return;
|
| }
|
|
|
| - ServiceWorkerFetchStore* store = GetLoadedStore(store_name);
|
| - if (!store) {
|
| + ServiceWorkerCache* cache = GetLoadedCache(cache_name);
|
| + if (!cache) {
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, false, FETCH_STORES_ERROR_NOT_FOUND));
|
| + FROM_HERE, base::Bind(callback, false, CACHE_STORAGE_ERROR_NOT_FOUND));
|
| return;
|
| }
|
|
|
| - name_map_.erase(store_name);
|
| - store_map_.Remove(store->id()); // deletes store
|
| + name_map_.erase(cache_name);
|
| + cache_map_.Remove(cache->id()); // deletes cache
|
|
|
| - stores_loader_->WriteIndex(&store_map_); // Update the index.
|
| + cache_loader_->WriteIndex(&cache_map_); // Update the index.
|
|
|
| - stores_loader_->CleanUpDeletedStore(store_name);
|
| + cache_loader_->CleanUpDeletedCache(cache_name);
|
|
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, true, FETCH_STORES_ERROR_NO_ERROR));
|
| + FROM_HERE, base::Bind(callback, true, CACHE_STORAGE_ERROR_NO_ERROR));
|
| }
|
|
|
| -void ServiceWorkerFetchStores::EnumerateStores(
|
| +void ServiceWorkerCacheStorage::EnumerateCaches(
|
| const StringsAndErrorCallback& callback) {
|
| LazyInit();
|
|
|
| @@ -275,60 +280,60 @@ void ServiceWorkerFetchStores::EnumerateStores(
|
| }
|
|
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, names, FETCH_STORES_ERROR_NO_ERROR));
|
| + FROM_HERE, base::Bind(callback, names, CACHE_STORAGE_ERROR_NO_ERROR));
|
| }
|
|
|
| -void ServiceWorkerFetchStores::InitializeStoreCallback(
|
| - const ServiceWorkerFetchStore* store,
|
| - const StoreAndErrorCallback& callback,
|
| +void ServiceWorkerCacheStorage::InitializeCacheCallback(
|
| + const ServiceWorkerCache* cache,
|
| + const CacheAndErrorCallback& callback,
|
| bool success) {
|
| if (!success) {
|
| // TODO(jkarlin): This should delete the directory and try again in case
|
| // the cache is simply corrupt.
|
| callback_loop_->PostTask(
|
| - FROM_HERE, base::Bind(callback, 0, FETCH_STORES_ERROR_STORAGE));
|
| + FROM_HERE, base::Bind(callback, 0, CACHE_STORAGE_ERROR_STORAGE));
|
| return;
|
| }
|
| callback_loop_->PostTask(
|
| FROM_HERE,
|
| - base::Bind(callback, store->id(), FETCH_STORES_ERROR_NO_ERROR));
|
| + base::Bind(callback, cache->id(), CACHE_STORAGE_ERROR_NO_ERROR));
|
| }
|
|
|
| // Init is run lazily so that it is called on the proper MessageLoop.
|
| -void ServiceWorkerFetchStores::LazyInit() {
|
| +void ServiceWorkerCacheStorage::LazyInit() {
|
| if (initialized_)
|
| return;
|
|
|
| - std::vector<std::string> indexed_store_names;
|
| - stores_loader_->LoadIndex(&indexed_store_names);
|
| + std::vector<std::string> indexed_cache_names;
|
| + cache_loader_->LoadIndex(&indexed_cache_names);
|
|
|
| for (std::vector<std::string>::const_iterator it =
|
| - indexed_store_names.begin();
|
| - it != indexed_store_names.end();
|
| + indexed_cache_names.begin();
|
| + it != indexed_cache_names.end();
|
| ++it) {
|
| - ServiceWorkerFetchStore* store = stores_loader_->LoadStore(*it);
|
| - InitStore(store);
|
| + ServiceWorkerCache* cache = cache_loader_->LoadCache(*it);
|
| + InitCache(cache);
|
| }
|
| initialized_ = true;
|
| }
|
|
|
| -void ServiceWorkerFetchStores::InitStore(ServiceWorkerFetchStore* store) {
|
| - StoreID id = store_map_.Add(store);
|
| - name_map_.insert(std::make_pair(store->name(), id));
|
| - store->set_id(id);
|
| +void ServiceWorkerCacheStorage::InitCache(ServiceWorkerCache* cache) {
|
| + CacheID id = cache_map_.Add(cache);
|
| + name_map_.insert(std::make_pair(cache->name(), id));
|
| + cache->set_id(id);
|
| }
|
|
|
| -ServiceWorkerFetchStore* ServiceWorkerFetchStores::GetLoadedStore(
|
| - const std::string& key) const {
|
| +ServiceWorkerCache* ServiceWorkerCacheStorage::GetLoadedCache(
|
| + const std::string& cache_name) const {
|
| DCHECK(initialized_);
|
|
|
| - NameMap::const_iterator it = name_map_.find(key);
|
| + NameMap::const_iterator it = name_map_.find(cache_name);
|
| if (it == name_map_.end())
|
| return NULL;
|
|
|
| - ServiceWorkerFetchStore* store = store_map_.Lookup(it->second);
|
| - DCHECK(store);
|
| - return store;
|
| + ServiceWorkerCache* cache = cache_map_.Lookup(it->second);
|
| + DCHECK(cache);
|
| + return cache;
|
| }
|
|
|
| } // namespace content
|
|
|