Index: content/browser/cache_storage/cache_storage_manager.cc |
diff --git a/content/browser/cache_storage/cache_storage_manager.cc b/content/browser/cache_storage/cache_storage_manager.cc |
index 6c0a1a74b9c9fca65d06c6fa5938af0f419fa214..d9749a18bb8a3f17fd5421cde1b53f0b466f68f5 100644 |
--- a/content/browser/cache_storage/cache_storage_manager.cc |
+++ b/content/browser/cache_storage/cache_storage_manager.cc |
@@ -14,6 +14,7 @@ |
#include "base/sha1.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
+#include "base/time/time.h" |
#include "content/browser/cache_storage/cache_storage.h" |
#include "content/browser/cache_storage/cache_storage.pb.h" |
#include "content/browser/cache_storage/cache_storage_quota_client.h" |
@@ -41,9 +42,9 @@ void DeleteOriginDidDeleteDir( |
callback.Run(rv ? storage::kQuotaStatusOk : storage::kQuotaErrorAbort); |
} |
-std::set<GURL> ListOriginsOnDisk(base::FilePath root_path_) { |
+std::set<GURL> ListOriginsOnDisk(base::FilePath root_path) { |
std::set<GURL> origins; |
- base::FileEnumerator file_enum(root_path_, false /* recursive */, |
+ base::FileEnumerator file_enum(root_path, false /* recursive */, |
base::FileEnumerator::DIRECTORIES); |
base::FilePath path; |
@@ -74,6 +75,8 @@ void GetOriginsForHostDidListOrigins( |
callback.Run(out_origins); |
} |
+void EmptyQuotaStatusCallback(storage::QuotaStatusCode code) {} |
+ |
} // namespace |
// static |
@@ -184,6 +187,50 @@ void CacheStorageManager::SetBlobParametersForCache( |
blob_context_ = blob_storage_context; |
} |
+void CacheStorageManager::GetAllOriginsUsage( |
+ const CacheStorageContext::GetUsageInfoCallback& callback) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ |
+ if (IsMemoryBacked()) { |
+ std::vector<CacheStorageUsageInfo> entries; |
+ entries.reserve(cache_storage_map_.size()); |
+ for (const auto& origin_details : cache_storage_map_) { |
+ entries.push_back(CacheStorageUsageInfo( |
+ origin_details.first, origin_details.second->MemoryBackedSize(), |
+ base::Time())); |
+ } |
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
+ base::Bind(callback, entries)); |
+ return; |
+ } |
+ |
+ PostTaskAndReplyWithResult( |
+ cache_task_runner_.get(), FROM_HERE, |
+ base::Bind(&CacheStorageManager::GetAllOriginsUsageOnTaskRunner, |
+ root_path_), |
+ base::Bind(callback)); |
+} |
+ |
+// static |
+std::vector<CacheStorageUsageInfo> |
+CacheStorageManager::GetAllOriginsUsageOnTaskRunner( |
+ const base::FilePath root_path) { |
+ std::vector<CacheStorageUsageInfo> entries; |
+ const std::set<GURL> origins = ListOriginsOnDisk(root_path); |
+ entries.reserve(origins.size()); |
+ for (const GURL& origin : origins) { |
+ base::FilePath path = |
+ CacheStorageManager::ConstructOriginPath(root_path, origin); |
+ int64 size = base::ComputeDirectorySize(path); |
+ base::File::Info file_info; |
+ base::Time last_modified; |
+ if (base::GetFileInfo(path, &file_info)) |
+ last_modified = file_info.last_modified; |
+ entries.push_back(CacheStorageUsageInfo(origin, size, last_modified)); |
+ } |
+ return entries; |
+} |
+ |
void CacheStorageManager::GetOriginUsage( |
const GURL& origin_url, |
const storage::QuotaClient::GetUsageCallback& callback) { |
@@ -191,6 +238,7 @@ void CacheStorageManager::GetOriginUsage( |
if (IsMemoryBacked()) { |
int64 sum = 0; |
+ // TODO(jsbell): Should this be filtering by origin? |
jkarlin
2015/08/18 13:22:35
Eek, yes!
jsbell
2015/08/18 18:42:43
Done, and added unit tests.
|
for (const auto& key_value : cache_storage_map_) |
sum += key_value.second->MemoryBackedSize(); |
callback.Run(sum); |
@@ -257,6 +305,11 @@ void CacheStorageManager::DeleteOriginData( |
weak_ptr_factory_.GetWeakPtr())); |
} |
+void CacheStorageManager::DeleteOriginData(const GURL& origin) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ DeleteOriginData(origin, base::Bind(&EmptyQuotaStatusCallback)); |
+} |
+ |
// static |
void CacheStorageManager::DeleteOriginDidClose( |
const GURL& origin, |