Index: chrome/browser/browsing_data/cookies_tree_model.cc |
diff --git a/chrome/browser/browsing_data/cookies_tree_model.cc b/chrome/browser/browsing_data/cookies_tree_model.cc |
index 40f2a28fd52f21b96ba504b902bbc5f2e6914b6e..39a6f5e74504d94be2d6e1e63993cd50e3538b22 100644 |
--- a/chrome/browser/browsing_data/cookies_tree_model.cc |
+++ b/chrome/browser/browsing_data/cookies_tree_model.cc |
@@ -153,6 +153,8 @@ bool TypeIsProtected(CookieTreeNode::DetailedInfo::NodeType type) { |
return false; |
case CookieTreeNode::DetailedInfo::TYPE_SERVICE_WORKER: |
return true; |
+ case CookieTreeNode::DetailedInfo::TYPE_CACHE_STORAGE: |
+ return true; |
case CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO: |
return false; |
default: |
@@ -272,6 +274,14 @@ CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitServiceWorker( |
return *this; |
} |
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitCacheStorage( |
+ const content::CacheStorageUsageInfo* cache_storage_info) { |
+ Init(TYPE_CACHE_STORAGE); |
+ this->cache_storage_info = cache_storage_info; |
+ this->origin = cache_storage_info->origin; |
+ return *this; |
+} |
+ |
CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitFlashLSO( |
const std::string& flash_lso_domain) { |
Init(TYPE_FLASH_LSO); |
@@ -564,6 +574,31 @@ CookieTreeNode::DetailedInfo CookieTreeServiceWorkerNode::GetDetailedInfo() |
} |
/////////////////////////////////////////////////////////////////////////////// |
+// CookieTreeCacheStorageNode, public: |
+ |
+CookieTreeCacheStorageNode::CookieTreeCacheStorageNode( |
+ std::list<content::CacheStorageUsageInfo>::iterator cache_storage_info) |
+ : CookieTreeNode(base::UTF8ToUTF16(cache_storage_info->origin.spec())), |
+ cache_storage_info_(cache_storage_info) {} |
+ |
+CookieTreeCacheStorageNode::~CookieTreeCacheStorageNode() {} |
+ |
+void CookieTreeCacheStorageNode::DeleteStoredObjects() { |
+ LocalDataContainer* container = GetLocalDataContainerForNode(this); |
+ |
+ if (container) { |
+ container->cache_storage_helper_->DeleteCacheStorage( |
+ cache_storage_info_->origin); |
+ container->cache_storage_info_list_.erase(cache_storage_info_); |
+ } |
+} |
+ |
+CookieTreeNode::DetailedInfo CookieTreeCacheStorageNode::GetDetailedInfo() |
+ const { |
+ return DetailedInfo().InitCacheStorage(&*cache_storage_info_); |
+} |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
// CookieTreeRootNode, public: |
CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model) |
@@ -713,6 +748,15 @@ CookieTreeHostNode::GetOrCreateServiceWorkersNode() { |
return service_workers_child_; |
} |
+CookieTreeCacheStoragesNode* |
+CookieTreeHostNode::GetOrCreateCacheStoragesNode() { |
+ if (cache_storages_child_) |
+ return cache_storages_child_; |
+ cache_storages_child_ = new CookieTreeCacheStoragesNode; |
+ AddChildSortedByTitle(cache_storages_child_); |
+ return cache_storages_child_; |
+} |
+ |
CookieTreeFlashLSONode* CookieTreeHostNode::GetOrCreateFlashLSONode( |
const std::string& domain) { |
DCHECK_EQ(GetHost(), domain); |
@@ -879,6 +923,19 @@ CookieTreeNode::DetailedInfo CookieTreeServiceWorkersNode::GetDetailedInfo() |
} |
/////////////////////////////////////////////////////////////////////////////// |
+// CookieTreeCacheStoragesNode, public: |
+ |
+CookieTreeCacheStoragesNode::CookieTreeCacheStoragesNode() |
+ : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_CACHE_STORAGE)) {} |
+ |
+CookieTreeCacheStoragesNode::~CookieTreeCacheStoragesNode() {} |
+ |
+CookieTreeNode::DetailedInfo CookieTreeCacheStoragesNode::GetDetailedInfo() |
+ const { |
+ return DetailedInfo().Init(DetailedInfo::TYPE_CACHE_STORAGES); |
+} |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
// CookieTreeFlashLSONode |
CookieTreeFlashLSONode::CookieTreeFlashLSONode( |
const std::string& domain) |
@@ -998,6 +1055,8 @@ int CookiesTreeModel::GetIconIndex(ui::TreeModelNode* node) { |
return COOKIE; // It's kinda like a cookie? |
case CookieTreeNode::DetailedInfo::TYPE_SERVICE_WORKER: |
return DATABASE; // Just like appcache |
+ case CookieTreeNode::DetailedInfo::TYPE_CACHE_STORAGE: |
+ return DATABASE; // ditto |
default: |
break; |
} |
@@ -1044,6 +1103,7 @@ void CookiesTreeModel::UpdateSearchResults(const base::string16& filter) { |
PopulateQuotaInfoWithFilter(data_container(), ¬ifier, filter); |
PopulateChannelIDInfoWithFilter(data_container(), ¬ifier, filter); |
PopulateServiceWorkerUsageInfoWithFilter(data_container(), ¬ifier, filter); |
+ PopulateCacheStorageUsageInfoWithFilter(data_container(), ¬ifier, filter); |
} |
#if defined(ENABLE_EXTENSIONS) |
@@ -1128,6 +1188,13 @@ void CookiesTreeModel::PopulateServiceWorkerUsageInfo( |
container, ¬ifier, base::string16()); |
} |
+void CookiesTreeModel::PopulateCacheStorageUsageInfo( |
+ LocalDataContainer* container) { |
+ ScopedBatchUpdateNotifier notifier(this, GetRoot()); |
+ PopulateCacheStorageUsageInfoWithFilter(container, ¬ifier, |
+ base::string16()); |
+} |
+ |
void CookiesTreeModel::PopulateFlashLSOInfo( |
LocalDataContainer* container) { |
ScopedBatchUpdateNotifier notifier(this, GetRoot()); |
@@ -1361,6 +1428,33 @@ void CookiesTreeModel::PopulateServiceWorkerUsageInfoWithFilter( |
} |
} |
+void CookiesTreeModel::PopulateCacheStorageUsageInfoWithFilter( |
+ LocalDataContainer* container, |
+ ScopedBatchUpdateNotifier* notifier, |
+ const base::string16& filter) { |
+ CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); |
+ |
+ if (container->cache_storage_info_list_.empty()) |
+ return; |
+ |
+ notifier->StartBatchUpdate(); |
+ for (CacheStorageUsageInfoList::iterator cache_storage_info = |
+ container->cache_storage_info_list_.begin(); |
+ cache_storage_info != container->cache_storage_info_list_.end(); |
+ ++cache_storage_info) { |
+ const GURL& origin = cache_storage_info->origin; |
+ |
+ if (filter.empty() || (CookieTreeHostNode::TitleForUrl(origin) |
+ .find(filter) != base::string16::npos)) { |
+ CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); |
+ CookieTreeCacheStoragesNode* cache_storages_node = |
+ host_node->GetOrCreateCacheStoragesNode(); |
+ cache_storages_node->AddCacheStorageNode( |
+ new CookieTreeCacheStorageNode(cache_storage_info)); |
+ } |
+ } |
+} |
+ |
void CookiesTreeModel::PopulateFileSystemInfoWithFilter( |
LocalDataContainer* container, |
ScopedBatchUpdateNotifier* notifier, |