Index: chrome/browser/browsing_data/browsing_data_cache_storage_helper.cc |
diff --git a/chrome/browser/browsing_data/browsing_data_cache_storage_helper.cc b/chrome/browser/browsing_data/browsing_data_cache_storage_helper.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b5bde4d809a254fb34e697277ded620397800da2 |
--- /dev/null |
+++ b/chrome/browser/browsing_data/browsing_data_cache_storage_helper.cc |
@@ -0,0 +1,152 @@ |
+// Copyright 2015 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 "chrome/browser/browsing_data/browsing_data_cache_storage_helper.h" |
+ |
+#include <vector> |
+ |
+#include "base/bind.h" |
+#include "chrome/browser/browsing_data/browsing_data_helper.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/cache_storage_context.h" |
+ |
+using content::BrowserThread; |
+using content::CacheStorageContext; |
+using content::CacheStorageUsageInfo; |
+ |
+BrowsingDataCacheStorageHelper::BrowsingDataCacheStorageHelper( |
+ CacheStorageContext* cache_storage_context) |
+ : cache_storage_context_(cache_storage_context) { |
+ DCHECK(cache_storage_context_); |
+} |
+ |
+BrowsingDataCacheStorageHelper::~BrowsingDataCacheStorageHelper() {} |
+ |
+void BrowsingDataCacheStorageHelper::StartFetching( |
+ const FetchCallback& callback) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind( |
+ &BrowsingDataCacheStorageHelper::FetchCacheStorageUsageInfoOnIOThread, |
+ this, callback)); |
+} |
+ |
+void BrowsingDataCacheStorageHelper::DeleteCacheStorage(const GURL& origin) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&BrowsingDataCacheStorageHelper::DeleteCacheStorageOnIOThread, |
+ this, origin)); |
+} |
+ |
+void BrowsingDataCacheStorageHelper::FetchCacheStorageUsageInfoOnIOThread( |
+ const FetchCallback& callback) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ cache_storage_context_->GetAllOriginsInfo( |
+ base::Bind(&BrowsingDataCacheStorageHelper::GetAllOriginsInfoCallback, |
+ this, callback)); |
+} |
+ |
+void BrowsingDataCacheStorageHelper::GetAllOriginsInfoCallback( |
+ const FetchCallback& callback, |
+ const std::vector<CacheStorageUsageInfo>& origins) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ |
+ std::list<content::CacheStorageUsageInfo> result; |
+ for (const CacheStorageUsageInfo& origin : origins) { |
+ if (!BrowsingDataHelper::HasWebScheme(origin.origin)) |
+ continue; // Non-websafe state is not considered browsing data. |
+ result.push_back(origin); |
+ } |
+ |
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
+ base::Bind(callback, result)); |
+} |
+ |
+void BrowsingDataCacheStorageHelper::DeleteCacheStorageOnIOThread( |
+ const GURL& origin) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ cache_storage_context_->DeleteForOrigin(origin); |
+} |
+ |
+CannedBrowsingDataCacheStorageHelper::PendingCacheStorageUsageInfo:: |
+ PendingCacheStorageUsageInfo(const GURL& origin, |
+ int64 total_size_bytes, |
+ const base::Time& last_modified) |
+ : origin(origin), |
+ total_size_bytes(total_size_bytes), |
+ last_modified(last_modified) {} |
+ |
+CannedBrowsingDataCacheStorageHelper::PendingCacheStorageUsageInfo:: |
+ ~PendingCacheStorageUsageInfo() {} |
+ |
+bool CannedBrowsingDataCacheStorageHelper::PendingCacheStorageUsageInfo:: |
+operator<(const PendingCacheStorageUsageInfo& other) const { |
+ return origin < other.origin; |
+} |
+ |
+CannedBrowsingDataCacheStorageHelper::CannedBrowsingDataCacheStorageHelper( |
+ content::CacheStorageContext* context) |
+ : BrowsingDataCacheStorageHelper(context) {} |
+ |
+CannedBrowsingDataCacheStorageHelper::~CannedBrowsingDataCacheStorageHelper() {} |
+ |
+void CannedBrowsingDataCacheStorageHelper::AddCacheStorage(const GURL& origin) { |
+ if (!BrowsingDataHelper::HasWebScheme(origin)) |
+ return; // Non-websafe state is not considered browsing data. |
+ |
+ pending_cache_storage_info_.insert( |
+ PendingCacheStorageUsageInfo(origin, 0, base::Time())); |
+} |
+ |
+void CannedBrowsingDataCacheStorageHelper::Reset() { |
+ pending_cache_storage_info_.clear(); |
+} |
+ |
+bool CannedBrowsingDataCacheStorageHelper::empty() const { |
+ return pending_cache_storage_info_.empty(); |
+} |
+ |
+size_t CannedBrowsingDataCacheStorageHelper::GetCacheStorageCount() const { |
+ return pending_cache_storage_info_.size(); |
+} |
+ |
+const std::set< |
+ CannedBrowsingDataCacheStorageHelper::PendingCacheStorageUsageInfo>& |
+CannedBrowsingDataCacheStorageHelper::GetCacheStorageUsageInfo() const { |
+ return pending_cache_storage_info_; |
+} |
+ |
+void CannedBrowsingDataCacheStorageHelper::StartFetching( |
+ const base::Callback<void(const std::list<CacheStorageUsageInfo>&)>& |
+ callback) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ DCHECK(!callback.is_null()); |
+ |
+ std::list<CacheStorageUsageInfo> result; |
+ for (const PendingCacheStorageUsageInfo& pending_info : |
+ pending_cache_storage_info_) { |
+ CacheStorageUsageInfo info(pending_info.origin, |
+ pending_info.total_size_bytes, |
+ pending_info.last_modified); |
+ result.push_back(info); |
+ } |
+ |
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
+ base::Bind(callback, result)); |
+} |
+ |
+void CannedBrowsingDataCacheStorageHelper::DeleteCacheStorage( |
+ const GURL& origin) { |
+ for (std::set<PendingCacheStorageUsageInfo>::iterator it = |
+ pending_cache_storage_info_.begin(); |
+ it != pending_cache_storage_info_.end();) { |
+ if (it->origin == origin) |
+ pending_cache_storage_info_.erase(it++); |
+ else |
+ ++it; |
+ } |
+ BrowsingDataCacheStorageHelper::DeleteCacheStorage(origin); |
+} |