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

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

Issue 1020413002: Use "database identifier" rather than raw origin as directory hash input (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make sure we're not keeping an object reference around 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
index 2af5c44158e9241aa744da414d40686dd3d0b06d..93d5b6af6ac7b3ee694ad7cfd52d8fc458721a77 100644
--- a/content/browser/service_worker/service_worker_cache_storage_manager.cc
+++ b/content/browser/service_worker/service_worker_cache_storage_manager.cc
@@ -21,6 +21,7 @@
#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"
@@ -28,14 +29,6 @@ namespace content {
namespace {
-base::FilePath ConstructOriginPath(const base::FilePath& root_path,
- const GURL& origin) {
- std::string origin_hash = base::SHA1HashString(origin.spec());
- std::string origin_hash_hex = base::StringToLowerASCII(
- base::HexEncode(origin_hash.c_str(), origin_hash.length()));
- return root_path.AppendASCII(origin_hash_hex);
-}
-
bool DeleteDir(const base::FilePath& path) {
return base::DeleteFile(path, true /* recursive */);
}
@@ -214,6 +207,7 @@ void ServiceWorkerCacheStorageManager::GetOriginUsage(
return;
}
+ MigrateOrigin(origin_url);
PostTaskAndReplyWithResult(
cache_task_runner_.get(),
FROM_HERE,
@@ -298,6 +292,7 @@ void ServiceWorkerCacheStorageManager::DeleteOriginDidClose(
return;
}
+ cache_manager->MigrateOrigin(origin);
PostTaskAndReplyWithResult(
cache_manager->cache_task_runner_.get(), FROM_HERE,
base::Bind(&DeleteDir,
@@ -328,6 +323,7 @@ ServiceWorkerCacheStorageManager::FindOrCreateServiceWorkerCacheManager(
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(),
@@ -343,4 +339,47 @@ ServiceWorkerCacheStorageManager::FindOrCreateServiceWorkerCacheManager(
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