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

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

Issue 1039763002: Cache Storage: Move files to content/*/cache_storage, rename classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: GN fix Created 5 years, 9 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_storage_manager.cc
diff --git a/content/browser/service_worker/service_worker_cache_storage_manager.cc b/content/browser/service_worker/service_worker_cache_storage_manager.cc
deleted file mode 100644
index 93d5b6af6ac7b3ee694ad7cfd52d8fc458721a77..0000000000000000000000000000000000000000
--- a/content/browser/service_worker/service_worker_cache_storage_manager.cc
+++ /dev/null
@@ -1,385 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// 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_cache_storage_manager.h"
-
-#include <map>
-#include <string>
-
-#include "base/bind.h"
-#include "base/files/file_enumerator.h"
-#include "base/files/file_util.h"
-#include "base/id_map.h"
-#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.pb.h"
-#include "content/browser/service_worker/service_worker_cache_quota_client.h"
-#include "content/browser/service_worker/service_worker_cache_storage.h"
-#include "content/browser/service_worker/service_worker_context_core.h"
-#include "content/public/browser/browser_thread.h"
-#include "net/base/net_util.h"
-#include "storage/browser/quota/quota_manager_proxy.h"
-#include "storage/common/database/database_identifier.h"
-#include "storage/common/quota/quota_status_code.h"
-#include "url/gurl.h"
-
-namespace content {
-
-namespace {
-
-bool DeleteDir(const base::FilePath& path) {
- return base::DeleteFile(path, true /* recursive */);
-}
-
-void DeleteOriginDidDeleteDir(
- const storage::QuotaClient::DeletionCallback& callback,
- bool rv) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- callback.Run(rv ? storage::kQuotaStatusOk : storage::kQuotaErrorAbort);
-}
-
-std::set<GURL> ListOriginsOnDisk(base::FilePath root_path_) {
- std::set<GURL> origins;
- base::FileEnumerator file_enum(
- root_path_, false /* recursive */, base::FileEnumerator::DIRECTORIES);
-
- base::FilePath path;
- while (!(path = file_enum.Next()).empty()) {
- std::string protobuf;
- base::ReadFileToString(
- path.AppendASCII(ServiceWorkerCacheStorage::kIndexFileName), &protobuf);
-
- ServiceWorkerCacheStorageIndex index;
- if (index.ParseFromString(protobuf)) {
- if (index.has_origin())
- origins.insert(GURL(index.origin()));
- }
- }
-
- return origins;
-}
-
-void GetOriginsForHostDidListOrigins(
- const std::string& host,
- const storage::QuotaClient::GetOriginsCallback& callback,
- const std::set<GURL>& origins) {
- std::set<GURL> out_origins;
- for (const GURL& origin : origins) {
- if (host == net::GetHostOrSpecFromURL(origin))
- out_origins.insert(origin);
- }
- callback.Run(out_origins);
-}
-
-} // namespace
-
-// static
-scoped_ptr<ServiceWorkerCacheStorageManager>
-ServiceWorkerCacheStorageManager::Create(
- const base::FilePath& path,
- const scoped_refptr<base::SequencedTaskRunner>& cache_task_runner,
- const scoped_refptr<storage::QuotaManagerProxy>& quota_manager_proxy) {
- base::FilePath root_path = path;
- if (!path.empty()) {
- root_path = path.Append(ServiceWorkerContextCore::kServiceWorkerDirectory)
- .AppendASCII("CacheStorage");
- }
-
- return make_scoped_ptr(new ServiceWorkerCacheStorageManager(
- root_path, cache_task_runner, quota_manager_proxy));
-}
-
-// static
-scoped_ptr<ServiceWorkerCacheStorageManager>
-ServiceWorkerCacheStorageManager::Create(
- ServiceWorkerCacheStorageManager* old_manager) {
- scoped_ptr<ServiceWorkerCacheStorageManager> manager(
- new ServiceWorkerCacheStorageManager(
- old_manager->root_path(),
- old_manager->cache_task_runner(),
- old_manager->quota_manager_proxy_.get()));
- // These values may be NULL, in which case this will be called again later by
- // the dispatcher host per usual.
- manager->SetBlobParametersForCache(old_manager->url_request_context(),
- old_manager->blob_storage_context());
- return manager.Pass();
-}
-
-ServiceWorkerCacheStorageManager::~ServiceWorkerCacheStorageManager() {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- for (ServiceWorkerCacheStorageMap::iterator it = cache_storage_map_.begin();
- it != cache_storage_map_.end();
- ++it) {
- delete it->second;
- }
-}
-
-void ServiceWorkerCacheStorageManager::OpenCache(
- const GURL& origin,
- const std::string& cache_name,
- const ServiceWorkerCacheStorage::CacheAndErrorCallback& callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- ServiceWorkerCacheStorage* cache_storage =
- FindOrCreateServiceWorkerCacheManager(origin);
-
- cache_storage->OpenCache(cache_name, callback);
-}
-
-void ServiceWorkerCacheStorageManager::HasCache(
- const GURL& origin,
- const std::string& cache_name,
- const ServiceWorkerCacheStorage::BoolAndErrorCallback& callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- ServiceWorkerCacheStorage* cache_storage =
- FindOrCreateServiceWorkerCacheManager(origin);
- cache_storage->HasCache(cache_name, callback);
-}
-
-void ServiceWorkerCacheStorageManager::DeleteCache(
- const GURL& origin,
- const std::string& cache_name,
- const ServiceWorkerCacheStorage::BoolAndErrorCallback& callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- ServiceWorkerCacheStorage* cache_storage =
- FindOrCreateServiceWorkerCacheManager(origin);
- cache_storage->DeleteCache(cache_name, callback);
-}
-
-void ServiceWorkerCacheStorageManager::EnumerateCaches(
- const GURL& origin,
- const ServiceWorkerCacheStorage::StringsAndErrorCallback& callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- ServiceWorkerCacheStorage* cache_storage =
- FindOrCreateServiceWorkerCacheManager(origin);
-
- cache_storage->EnumerateCaches(callback);
-}
-
-void ServiceWorkerCacheStorageManager::MatchCache(
- const GURL& origin,
- const std::string& cache_name,
- scoped_ptr<ServiceWorkerFetchRequest> request,
- const ServiceWorkerCache::ResponseCallback& callback) {
- ServiceWorkerCacheStorage* cache_storage =
- FindOrCreateServiceWorkerCacheManager(origin);
-
- cache_storage->MatchCache(cache_name, request.Pass(), callback);
-}
-
-void ServiceWorkerCacheStorageManager::MatchAllCaches(
- const GURL& origin,
- scoped_ptr<ServiceWorkerFetchRequest> request,
- const ServiceWorkerCache::ResponseCallback& callback) {
- ServiceWorkerCacheStorage* cache_storage =
- FindOrCreateServiceWorkerCacheManager(origin);
-
- cache_storage->MatchAllCaches(request.Pass(), callback);
-}
-
-void ServiceWorkerCacheStorageManager::SetBlobParametersForCache(
- net::URLRequestContext* request_context,
- base::WeakPtr<storage::BlobStorageContext> blob_storage_context) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(cache_storage_map_.empty());
- DCHECK(!request_context_ || request_context_ == request_context);
- DCHECK(!blob_context_ || blob_context_.get() == blob_storage_context.get());
- request_context_ = request_context;
- blob_context_ = blob_storage_context;
-}
-
-void ServiceWorkerCacheStorageManager::GetOriginUsage(
- const GURL& origin_url,
- const storage::QuotaClient::GetUsageCallback& callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- if (IsMemoryBacked()) {
- int64 sum = 0;
- for (const auto& key_value : cache_storage_map_)
- sum += key_value.second->MemoryBackedSize();
- callback.Run(sum);
- return;
- }
-
- MigrateOrigin(origin_url);
- PostTaskAndReplyWithResult(
- cache_task_runner_.get(),
- FROM_HERE,
- base::Bind(base::ComputeDirectorySize,
- ConstructOriginPath(root_path_, origin_url)),
- base::Bind(callback));
-}
-
-void ServiceWorkerCacheStorageManager::GetOrigins(
- const storage::QuotaClient::GetOriginsCallback& callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- if (IsMemoryBacked()) {
- std::set<GURL> origins;
- for (const auto& key_value : cache_storage_map_)
- origins.insert(key_value.first);
-
- callback.Run(origins);
- return;
- }
-
- PostTaskAndReplyWithResult(cache_task_runner_.get(),
- FROM_HERE,
- base::Bind(&ListOriginsOnDisk, root_path_),
- base::Bind(callback));
-}
-
-void ServiceWorkerCacheStorageManager::GetOriginsForHost(
- const std::string& host,
- const storage::QuotaClient::GetOriginsCallback& callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- if (IsMemoryBacked()) {
- std::set<GURL> origins;
- for (const auto& key_value : cache_storage_map_) {
- if (host == net::GetHostOrSpecFromURL(key_value.first))
- origins.insert(key_value.first);
- }
- callback.Run(origins);
- return;
- }
-
- PostTaskAndReplyWithResult(
- cache_task_runner_.get(),
- FROM_HERE,
- base::Bind(&ListOriginsOnDisk, root_path_),
- base::Bind(&GetOriginsForHostDidListOrigins, host, callback));
-}
-
-void ServiceWorkerCacheStorageManager::DeleteOriginData(
- const GURL& origin,
- const storage::QuotaClient::DeletionCallback& callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- ServiceWorkerCacheStorage* cache_storage =
- FindOrCreateServiceWorkerCacheManager(origin);
- cache_storage_map_.erase(origin);
- cache_storage->CloseAllCaches(
- base::Bind(&ServiceWorkerCacheStorageManager::DeleteOriginDidClose,
- origin, callback, base::Passed(make_scoped_ptr(cache_storage)),
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-// static
-void ServiceWorkerCacheStorageManager::DeleteOriginDidClose(
- const GURL& origin,
- const storage::QuotaClient::DeletionCallback& callback,
- scoped_ptr<ServiceWorkerCacheStorage> cache_storage,
- base::WeakPtr<ServiceWorkerCacheStorageManager> cache_manager) {
- // TODO(jkarlin): Deleting the storage leaves any unfinished operations
- // hanging, resulting in unresolved promises. Fix this by guaranteeing that
- // callbacks are called in ServiceWorkerStorage.
- cache_storage.reset();
-
- if (!cache_manager) {
- callback.Run(storage::kQuotaErrorAbort);
- return;
- }
-
- if (cache_manager->IsMemoryBacked()) {
- callback.Run(storage::kQuotaStatusOk);
- return;
- }
-
- cache_manager->MigrateOrigin(origin);
- PostTaskAndReplyWithResult(
- cache_manager->cache_task_runner_.get(), FROM_HERE,
- base::Bind(&DeleteDir,
- ConstructOriginPath(cache_manager->root_path_, origin)),
- base::Bind(&DeleteOriginDidDeleteDir, callback));
-}
-
-ServiceWorkerCacheStorageManager::ServiceWorkerCacheStorageManager(
- const base::FilePath& path,
- const scoped_refptr<base::SequencedTaskRunner>& cache_task_runner,
- const scoped_refptr<storage::QuotaManagerProxy>& quota_manager_proxy)
- : root_path_(path),
- cache_task_runner_(cache_task_runner),
- quota_manager_proxy_(quota_manager_proxy),
- request_context_(NULL),
- weak_ptr_factory_(this) {
- if (quota_manager_proxy_.get()) {
- quota_manager_proxy_->RegisterClient(
- new ServiceWorkerCacheQuotaClient(weak_ptr_factory_.GetWeakPtr()));
- }
-}
-
-ServiceWorkerCacheStorage*
-ServiceWorkerCacheStorageManager::FindOrCreateServiceWorkerCacheManager(
- const GURL& origin) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(request_context_);
- ServiceWorkerCacheStorageMap::const_iterator it =
- cache_storage_map_.find(origin);
- if (it == cache_storage_map_.end()) {
- MigrateOrigin(origin);
- ServiceWorkerCacheStorage* cache_storage =
- new ServiceWorkerCacheStorage(ConstructOriginPath(root_path_, origin),
- IsMemoryBacked(),
- cache_task_runner_.get(),
- request_context_,
- quota_manager_proxy_,
- blob_context_,
- origin);
- // The map owns fetch_stores.
- cache_storage_map_.insert(std::make_pair(origin, cache_storage));
- return cache_storage;
- }
- return it->second;
-}
-
-// static
-base::FilePath ServiceWorkerCacheStorageManager::ConstructLegacyOriginPath(
- const base::FilePath& root_path,
- const GURL& origin) {
- const std::string origin_hash = base::SHA1HashString(origin.spec());
- const std::string origin_hash_hex = base::StringToLowerASCII(
- base::HexEncode(origin_hash.c_str(), origin_hash.length()));
- return root_path.AppendASCII(origin_hash_hex);
-}
-
-// static
-base::FilePath ServiceWorkerCacheStorageManager::ConstructOriginPath(
- const base::FilePath& root_path,
- const GURL& origin) {
- const std::string identifier = storage::GetIdentifierFromOrigin(origin);
- const std::string origin_hash = base::SHA1HashString(identifier);
- const std::string origin_hash_hex = base::StringToLowerASCII(
- base::HexEncode(origin_hash.c_str(), origin_hash.length()));
- return root_path.AppendASCII(origin_hash_hex);
-}
-
-// Migrate from old origin-based path to storage identifier-based path.
-// TODO(jsbell); Remove after a few releases.
-void ServiceWorkerCacheStorageManager::MigrateOrigin(const GURL& origin) {
- if (IsMemoryBacked())
- return;
- base::FilePath old_path = ConstructLegacyOriginPath(root_path_, origin);
- base::FilePath new_path = ConstructOriginPath(root_path_, origin);
- cache_task_runner_->PostTask(
- FROM_HERE, base::Bind(&MigrateOriginOnTaskRunner, old_path, new_path));
-}
-
-// static
-void ServiceWorkerCacheStorageManager::MigrateOriginOnTaskRunner(
- const base::FilePath& old_path,
- const base::FilePath& new_path) {
- if (base::PathExists(old_path)) {
- if (!base::PathExists(new_path))
- base::Move(old_path, new_path);
- base::DeleteFile(old_path, /*recursive*/ true);
- }
-}
-
-} // namespace content

Powered by Google App Engine
This is Rietveld 408576698