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 4263dc9f81a6686849c8bd831f159d730bc52eeb..ecf3820056e340d3016b3161546914f9d54fda2c 100644 |
--- a/chrome/browser/browsing_data/cookies_tree_model.cc |
+++ b/chrome/browser/browsing_data/cookies_tree_model.cc |
@@ -138,6 +138,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: |
@@ -257,6 +259,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); |
@@ -549,6 +559,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_); |
michaeln
2015/08/18 22:25:51
does this invalidate our cache_storage_info_ data
jsbell
2015/08/19 01:06:19
Yes, but this is called just before this node itse
|
+ } |
+} |
+ |
+CookieTreeNode::DetailedInfo CookieTreeCacheStorageNode::GetDetailedInfo() |
+ const { |
+ return DetailedInfo().InitCacheStorage(&*cache_storage_info_); |
+} |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
// CookieTreeRootNode, public: |
CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model) |
@@ -698,6 +733,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); |
@@ -864,6 +908,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) |
@@ -983,6 +1040,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; |
} |
@@ -1029,6 +1088,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) |
@@ -1113,6 +1173,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()); |
@@ -1347,6 +1414,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, |