| Index: content/browser/service_worker/service_worker_cache_storage.cc
|
| diff --git a/content/browser/service_worker/service_worker_cache_storage.cc b/content/browser/service_worker/service_worker_cache_storage.cc
|
| index 1fd5b76ceca04b7ee1a795c2e60eb1efcabab6cb..9ce5ce1a50ef8118889785dfe609f8562edadfbd 100644
|
| --- a/content/browser/service_worker/service_worker_cache_storage.cc
|
| +++ b/content/browser/service_worker/service_worker_cache_storage.cc
|
| @@ -22,6 +22,7 @@
|
|
|
| namespace content {
|
|
|
| +const char ServiceWorkerCacheStorage::kIndexFileName[] = "index.txt";
|
|
|
| // Handles the loading and clean up of ServiceWorkerCache objects. The
|
| // callback of every public method is guaranteed to be called.
|
| @@ -35,10 +36,14 @@ class ServiceWorkerCacheStorage::CacheLoader {
|
|
|
| CacheLoader(base::SequencedTaskRunner* cache_task_runner,
|
| net::URLRequestContext* request_context,
|
| - base::WeakPtr<storage::BlobStorageContext> blob_context)
|
| + base::WeakPtr<storage::BlobStorageContext> blob_context,
|
| + const GURL& origin)
|
| : cache_task_runner_(cache_task_runner),
|
| request_context_(request_context),
|
| - blob_context_(blob_context) {}
|
| + blob_context_(blob_context),
|
| + origin_(origin) {
|
| + DCHECK(!origin_.is_empty());
|
| + }
|
|
|
| virtual ~CacheLoader() {}
|
|
|
| @@ -68,6 +73,7 @@ class ServiceWorkerCacheStorage::CacheLoader {
|
| scoped_refptr<base::SequencedTaskRunner> cache_task_runner_;
|
| net::URLRequestContext* request_context_;
|
| base::WeakPtr<storage::BlobStorageContext> blob_context_;
|
| + GURL origin_;
|
| };
|
|
|
| // Creates memory-only ServiceWorkerCaches. Because these caches have no
|
| @@ -79,8 +85,9 @@ class ServiceWorkerCacheStorage::MemoryLoader
|
| public:
|
| MemoryLoader(base::SequencedTaskRunner* cache_task_runner,
|
| net::URLRequestContext* request_context,
|
| - base::WeakPtr<storage::BlobStorageContext> blob_context)
|
| - : CacheLoader(cache_task_runner, request_context, blob_context) {}
|
| + base::WeakPtr<storage::BlobStorageContext> blob_context,
|
| + const GURL& origin)
|
| + : CacheLoader(cache_task_runner, request_context, blob_context, origin) {}
|
|
|
| virtual scoped_refptr<ServiceWorkerCache> CreateServiceWorkerCache(
|
| const std::string& cache_name) override {
|
| @@ -130,8 +137,9 @@ class ServiceWorkerCacheStorage::SimpleCacheLoader
|
| SimpleCacheLoader(const base::FilePath& origin_path,
|
| base::SequencedTaskRunner* cache_task_runner,
|
| net::URLRequestContext* request_context,
|
| - base::WeakPtr<storage::BlobStorageContext> blob_context)
|
| - : CacheLoader(cache_task_runner, request_context, blob_context),
|
| + base::WeakPtr<storage::BlobStorageContext> blob_context,
|
| + const GURL& origin)
|
| + : CacheLoader(cache_task_runner, request_context, blob_context, origin),
|
| origin_path_(origin_path),
|
| weak_ptr_factory_(this) {}
|
|
|
| @@ -216,6 +224,7 @@ class ServiceWorkerCacheStorage::SimpleCacheLoader
|
| // 2. Write the file to disk. (WriteIndexWriteToFileInPool)
|
|
|
| ServiceWorkerCacheStorageIndex index;
|
| + index.set_origin(origin_.spec());
|
|
|
| for (size_t i = 0u, max = cache_names.size(); i < max; ++i) {
|
| ServiceWorkerCacheStorageIndex::Cache* index_cache = index.add_cache();
|
| @@ -228,7 +237,8 @@ class ServiceWorkerCacheStorage::SimpleCacheLoader
|
| DCHECK(success);
|
|
|
| base::FilePath tmp_path = origin_path_.AppendASCII("index.txt.tmp");
|
| - base::FilePath index_path = origin_path_.AppendASCII("index.txt");
|
| + base::FilePath index_path =
|
| + origin_path_.AppendASCII(ServiceWorkerCacheStorage::kIndexFileName);
|
|
|
| cache_task_runner_->PostTask(
|
| FROM_HERE,
|
| @@ -264,7 +274,8 @@ class ServiceWorkerCacheStorage::SimpleCacheLoader
|
| // 1. Read the file from disk. (LoadIndexReadFileInPool)
|
| // 2. Parse file and return the names of the caches (LoadIndexDidReadFile)
|
|
|
| - base::FilePath index_path = origin_path_.AppendASCII("index.txt");
|
| + base::FilePath index_path =
|
| + origin_path_.AppendASCII(ServiceWorkerCacheStorage::kIndexFileName);
|
|
|
| cache_task_runner_->PostTask(
|
| FROM_HERE,
|
| @@ -334,7 +345,8 @@ ServiceWorkerCacheStorage::ServiceWorkerCacheStorage(
|
| bool memory_only,
|
| base::SequencedTaskRunner* cache_task_runner,
|
| net::URLRequestContext* request_context,
|
| - base::WeakPtr<storage::BlobStorageContext> blob_context)
|
| + base::WeakPtr<storage::BlobStorageContext> blob_context,
|
| + const GURL& origin)
|
| : initialized_(false),
|
| origin_path_(path),
|
| cache_task_runner_(cache_task_runner),
|
| @@ -342,10 +354,13 @@ ServiceWorkerCacheStorage::ServiceWorkerCacheStorage(
|
| weak_factory_(this) {
|
| if (memory_only)
|
| cache_loader_.reset(new MemoryLoader(
|
| - cache_task_runner_.get(), request_context, blob_context));
|
| + cache_task_runner_.get(), request_context, blob_context, origin));
|
| else
|
| - cache_loader_.reset(new SimpleCacheLoader(
|
| - origin_path_, cache_task_runner_.get(), request_context, blob_context));
|
| + cache_loader_.reset(new SimpleCacheLoader(origin_path_,
|
| + cache_task_runner_.get(),
|
| + request_context,
|
| + blob_context,
|
| + origin));
|
| }
|
|
|
| ServiceWorkerCacheStorage::~ServiceWorkerCacheStorage() {
|
| @@ -497,6 +512,18 @@ void ServiceWorkerCacheStorage::EnumerateCaches(
|
| callback.Run(ordered_cache_names_, CACHE_STORAGE_ERROR_NO_ERROR);
|
| }
|
|
|
| +void ServiceWorkerCacheStorage::CloseAllCaches() {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| +
|
| + if (!initialized_)
|
| + return;
|
| +
|
| + for (auto& key_value : cache_map_) {
|
| + if (key_value.second)
|
| + key_value.second->Close();
|
| + }
|
| +}
|
| +
|
| // Init is run lazily so that it is called on the proper MessageLoop.
|
| void ServiceWorkerCacheStorage::LazyInit(const base::Closure& callback) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
|
|