OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/browsing_data/cookies_tree_model.h" | 5 #include "chrome/browser/browsing_data/cookies_tree_model.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <map> | 9 #include <map> |
10 #include <vector> | 10 #include <vector> |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: | 146 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: |
147 return true; | 147 return true; |
148 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM: | 148 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM: |
149 return true; | 149 return true; |
150 case CookieTreeNode::DetailedInfo::TYPE_QUOTA: | 150 case CookieTreeNode::DetailedInfo::TYPE_QUOTA: |
151 return false; | 151 return false; |
152 case CookieTreeNode::DetailedInfo::TYPE_CHANNEL_ID: | 152 case CookieTreeNode::DetailedInfo::TYPE_CHANNEL_ID: |
153 return false; | 153 return false; |
154 case CookieTreeNode::DetailedInfo::TYPE_SERVICE_WORKER: | 154 case CookieTreeNode::DetailedInfo::TYPE_SERVICE_WORKER: |
155 return true; | 155 return true; |
| 156 case CookieTreeNode::DetailedInfo::TYPE_CACHE_STORAGE: |
| 157 return true; |
156 case CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO: | 158 case CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO: |
157 return false; | 159 return false; |
158 default: | 160 default: |
159 break; | 161 break; |
160 } | 162 } |
161 return false; | 163 return false; |
162 } | 164 } |
163 #endif | 165 #endif |
164 | 166 |
165 // This function returns the local data container associated with a leaf tree | 167 // This function returns the local data container associated with a leaf tree |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 } | 267 } |
266 | 268 |
267 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitServiceWorker( | 269 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitServiceWorker( |
268 const content::ServiceWorkerUsageInfo* service_worker_info) { | 270 const content::ServiceWorkerUsageInfo* service_worker_info) { |
269 Init(TYPE_SERVICE_WORKER); | 271 Init(TYPE_SERVICE_WORKER); |
270 this->service_worker_info = service_worker_info; | 272 this->service_worker_info = service_worker_info; |
271 this->origin = service_worker_info->origin; | 273 this->origin = service_worker_info->origin; |
272 return *this; | 274 return *this; |
273 } | 275 } |
274 | 276 |
| 277 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitCacheStorage( |
| 278 const content::CacheStorageUsageInfo* cache_storage_info) { |
| 279 Init(TYPE_CACHE_STORAGE); |
| 280 this->cache_storage_info = cache_storage_info; |
| 281 this->origin = cache_storage_info->origin; |
| 282 return *this; |
| 283 } |
| 284 |
275 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitFlashLSO( | 285 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitFlashLSO( |
276 const std::string& flash_lso_domain) { | 286 const std::string& flash_lso_domain) { |
277 Init(TYPE_FLASH_LSO); | 287 Init(TYPE_FLASH_LSO); |
278 this->flash_lso_domain = flash_lso_domain; | 288 this->flash_lso_domain = flash_lso_domain; |
279 return *this; | 289 return *this; |
280 } | 290 } |
281 | 291 |
282 /////////////////////////////////////////////////////////////////////////////// | 292 /////////////////////////////////////////////////////////////////////////////// |
283 // CookieTreeNode, public: | 293 // CookieTreeNode, public: |
284 | 294 |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 container->service_worker_info_list_.erase(service_worker_info_); | 567 container->service_worker_info_list_.erase(service_worker_info_); |
558 } | 568 } |
559 } | 569 } |
560 | 570 |
561 CookieTreeNode::DetailedInfo CookieTreeServiceWorkerNode::GetDetailedInfo() | 571 CookieTreeNode::DetailedInfo CookieTreeServiceWorkerNode::GetDetailedInfo() |
562 const { | 572 const { |
563 return DetailedInfo().InitServiceWorker(&*service_worker_info_); | 573 return DetailedInfo().InitServiceWorker(&*service_worker_info_); |
564 } | 574 } |
565 | 575 |
566 /////////////////////////////////////////////////////////////////////////////// | 576 /////////////////////////////////////////////////////////////////////////////// |
| 577 // CookieTreeCacheStorageNode, public: |
| 578 |
| 579 CookieTreeCacheStorageNode::CookieTreeCacheStorageNode( |
| 580 std::list<content::CacheStorageUsageInfo>::iterator cache_storage_info) |
| 581 : CookieTreeNode(base::UTF8ToUTF16(cache_storage_info->origin.spec())), |
| 582 cache_storage_info_(cache_storage_info) {} |
| 583 |
| 584 CookieTreeCacheStorageNode::~CookieTreeCacheStorageNode() {} |
| 585 |
| 586 void CookieTreeCacheStorageNode::DeleteStoredObjects() { |
| 587 LocalDataContainer* container = GetLocalDataContainerForNode(this); |
| 588 |
| 589 if (container) { |
| 590 container->cache_storage_helper_->DeleteCacheStorage( |
| 591 cache_storage_info_->origin); |
| 592 container->cache_storage_info_list_.erase(cache_storage_info_); |
| 593 } |
| 594 } |
| 595 |
| 596 CookieTreeNode::DetailedInfo CookieTreeCacheStorageNode::GetDetailedInfo() |
| 597 const { |
| 598 return DetailedInfo().InitCacheStorage(&*cache_storage_info_); |
| 599 } |
| 600 |
| 601 /////////////////////////////////////////////////////////////////////////////// |
567 // CookieTreeRootNode, public: | 602 // CookieTreeRootNode, public: |
568 | 603 |
569 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model) | 604 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model) |
570 : model_(model) { | 605 : model_(model) { |
571 } | 606 } |
572 | 607 |
573 CookieTreeRootNode::~CookieTreeRootNode() {} | 608 CookieTreeRootNode::~CookieTreeRootNode() {} |
574 | 609 |
575 CookieTreeHostNode* CookieTreeRootNode::GetOrCreateHostNode( | 610 CookieTreeHostNode* CookieTreeRootNode::GetOrCreateHostNode( |
576 const GURL& url) { | 611 const GURL& url) { |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
706 | 741 |
707 CookieTreeServiceWorkersNode* | 742 CookieTreeServiceWorkersNode* |
708 CookieTreeHostNode::GetOrCreateServiceWorkersNode() { | 743 CookieTreeHostNode::GetOrCreateServiceWorkersNode() { |
709 if (service_workers_child_) | 744 if (service_workers_child_) |
710 return service_workers_child_; | 745 return service_workers_child_; |
711 service_workers_child_ = new CookieTreeServiceWorkersNode; | 746 service_workers_child_ = new CookieTreeServiceWorkersNode; |
712 AddChildSortedByTitle(service_workers_child_); | 747 AddChildSortedByTitle(service_workers_child_); |
713 return service_workers_child_; | 748 return service_workers_child_; |
714 } | 749 } |
715 | 750 |
| 751 CookieTreeCacheStoragesNode* |
| 752 CookieTreeHostNode::GetOrCreateCacheStoragesNode() { |
| 753 if (cache_storages_child_) |
| 754 return cache_storages_child_; |
| 755 cache_storages_child_ = new CookieTreeCacheStoragesNode; |
| 756 AddChildSortedByTitle(cache_storages_child_); |
| 757 return cache_storages_child_; |
| 758 } |
| 759 |
716 CookieTreeFlashLSONode* CookieTreeHostNode::GetOrCreateFlashLSONode( | 760 CookieTreeFlashLSONode* CookieTreeHostNode::GetOrCreateFlashLSONode( |
717 const std::string& domain) { | 761 const std::string& domain) { |
718 DCHECK_EQ(GetHost(), domain); | 762 DCHECK_EQ(GetHost(), domain); |
719 if (flash_lso_child_) | 763 if (flash_lso_child_) |
720 return flash_lso_child_; | 764 return flash_lso_child_; |
721 flash_lso_child_ = new CookieTreeFlashLSONode(domain); | 765 flash_lso_child_ = new CookieTreeFlashLSONode(domain); |
722 AddChildSortedByTitle(flash_lso_child_); | 766 AddChildSortedByTitle(flash_lso_child_); |
723 return flash_lso_child_; | 767 return flash_lso_child_; |
724 } | 768 } |
725 | 769 |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
872 | 916 |
873 CookieTreeServiceWorkersNode::~CookieTreeServiceWorkersNode() { | 917 CookieTreeServiceWorkersNode::~CookieTreeServiceWorkersNode() { |
874 } | 918 } |
875 | 919 |
876 CookieTreeNode::DetailedInfo CookieTreeServiceWorkersNode::GetDetailedInfo() | 920 CookieTreeNode::DetailedInfo CookieTreeServiceWorkersNode::GetDetailedInfo() |
877 const { | 921 const { |
878 return DetailedInfo().Init(DetailedInfo::TYPE_SERVICE_WORKERS); | 922 return DetailedInfo().Init(DetailedInfo::TYPE_SERVICE_WORKERS); |
879 } | 923 } |
880 | 924 |
881 /////////////////////////////////////////////////////////////////////////////// | 925 /////////////////////////////////////////////////////////////////////////////// |
| 926 // CookieTreeCacheStoragesNode, public: |
| 927 |
| 928 CookieTreeCacheStoragesNode::CookieTreeCacheStoragesNode() |
| 929 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_CACHE_STORAGE)) {} |
| 930 |
| 931 CookieTreeCacheStoragesNode::~CookieTreeCacheStoragesNode() {} |
| 932 |
| 933 CookieTreeNode::DetailedInfo CookieTreeCacheStoragesNode::GetDetailedInfo() |
| 934 const { |
| 935 return DetailedInfo().Init(DetailedInfo::TYPE_CACHE_STORAGES); |
| 936 } |
| 937 |
| 938 /////////////////////////////////////////////////////////////////////////////// |
882 // CookieTreeFlashLSONode | 939 // CookieTreeFlashLSONode |
883 CookieTreeFlashLSONode::CookieTreeFlashLSONode( | 940 CookieTreeFlashLSONode::CookieTreeFlashLSONode( |
884 const std::string& domain) | 941 const std::string& domain) |
885 : domain_(domain) {} | 942 : domain_(domain) {} |
886 CookieTreeFlashLSONode::~CookieTreeFlashLSONode() {} | 943 CookieTreeFlashLSONode::~CookieTreeFlashLSONode() {} |
887 | 944 |
888 void CookieTreeFlashLSONode::DeleteStoredObjects() { | 945 void CookieTreeFlashLSONode::DeleteStoredObjects() { |
889 // We are one level below the host node. | 946 // We are one level below the host node. |
890 CookieTreeHostNode* host = static_cast<CookieTreeHostNode*>(parent()); | 947 CookieTreeHostNode* host = static_cast<CookieTreeHostNode*>(parent()); |
891 CHECK_EQ(host->GetDetailedInfo().node_type, | 948 CHECK_EQ(host->GetDetailedInfo().node_type, |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
991 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: | 1048 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: |
992 return DATABASE; // ditto | 1049 return DATABASE; // ditto |
993 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM: | 1050 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM: |
994 return DATABASE; // ditto | 1051 return DATABASE; // ditto |
995 case CookieTreeNode::DetailedInfo::TYPE_QUOTA: | 1052 case CookieTreeNode::DetailedInfo::TYPE_QUOTA: |
996 return -1; | 1053 return -1; |
997 case CookieTreeNode::DetailedInfo::TYPE_CHANNEL_ID: | 1054 case CookieTreeNode::DetailedInfo::TYPE_CHANNEL_ID: |
998 return COOKIE; // It's kinda like a cookie? | 1055 return COOKIE; // It's kinda like a cookie? |
999 case CookieTreeNode::DetailedInfo::TYPE_SERVICE_WORKER: | 1056 case CookieTreeNode::DetailedInfo::TYPE_SERVICE_WORKER: |
1000 return DATABASE; // Just like appcache | 1057 return DATABASE; // Just like appcache |
| 1058 case CookieTreeNode::DetailedInfo::TYPE_CACHE_STORAGE: |
| 1059 return DATABASE; // ditto |
1001 default: | 1060 default: |
1002 break; | 1061 break; |
1003 } | 1062 } |
1004 return -1; | 1063 return -1; |
1005 } | 1064 } |
1006 | 1065 |
1007 void CookiesTreeModel::DeleteAllStoredObjects() { | 1066 void CookiesTreeModel::DeleteAllStoredObjects() { |
1008 NotifyObserverBeginBatch(); | 1067 NotifyObserverBeginBatch(); |
1009 CookieTreeNode* root = GetRoot(); | 1068 CookieTreeNode* root = GetRoot(); |
1010 root->DeleteStoredObjects(); | 1069 root->DeleteStoredObjects(); |
(...skipping 26 matching lines...) Expand all Loading... |
1037 PopulateCookieInfoWithFilter(data_container(), ¬ifier, filter); | 1096 PopulateCookieInfoWithFilter(data_container(), ¬ifier, filter); |
1038 PopulateDatabaseInfoWithFilter(data_container(), ¬ifier, filter); | 1097 PopulateDatabaseInfoWithFilter(data_container(), ¬ifier, filter); |
1039 PopulateLocalStorageInfoWithFilter(data_container(), ¬ifier, filter); | 1098 PopulateLocalStorageInfoWithFilter(data_container(), ¬ifier, filter); |
1040 PopulateSessionStorageInfoWithFilter(data_container(), ¬ifier, filter); | 1099 PopulateSessionStorageInfoWithFilter(data_container(), ¬ifier, filter); |
1041 PopulateAppCacheInfoWithFilter(data_container(), ¬ifier, filter); | 1100 PopulateAppCacheInfoWithFilter(data_container(), ¬ifier, filter); |
1042 PopulateIndexedDBInfoWithFilter(data_container(), ¬ifier, filter); | 1101 PopulateIndexedDBInfoWithFilter(data_container(), ¬ifier, filter); |
1043 PopulateFileSystemInfoWithFilter(data_container(), ¬ifier, filter); | 1102 PopulateFileSystemInfoWithFilter(data_container(), ¬ifier, filter); |
1044 PopulateQuotaInfoWithFilter(data_container(), ¬ifier, filter); | 1103 PopulateQuotaInfoWithFilter(data_container(), ¬ifier, filter); |
1045 PopulateChannelIDInfoWithFilter(data_container(), ¬ifier, filter); | 1104 PopulateChannelIDInfoWithFilter(data_container(), ¬ifier, filter); |
1046 PopulateServiceWorkerUsageInfoWithFilter(data_container(), ¬ifier, filter); | 1105 PopulateServiceWorkerUsageInfoWithFilter(data_container(), ¬ifier, filter); |
| 1106 PopulateCacheStorageUsageInfoWithFilter(data_container(), ¬ifier, filter); |
1047 } | 1107 } |
1048 | 1108 |
1049 #if defined(ENABLE_EXTENSIONS) | 1109 #if defined(ENABLE_EXTENSIONS) |
1050 const extensions::ExtensionSet* CookiesTreeModel::ExtensionsProtectingNode( | 1110 const extensions::ExtensionSet* CookiesTreeModel::ExtensionsProtectingNode( |
1051 const CookieTreeNode& cookie_node) { | 1111 const CookieTreeNode& cookie_node) { |
1052 if (!special_storage_policy_.get()) | 1112 if (!special_storage_policy_.get()) |
1053 return nullptr; | 1113 return nullptr; |
1054 | 1114 |
1055 CookieTreeNode::DetailedInfo info = cookie_node.GetDetailedInfo(); | 1115 CookieTreeNode::DetailedInfo info = cookie_node.GetDetailedInfo(); |
1056 | 1116 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1121 PopulateChannelIDInfoWithFilter(container, ¬ifier, base::string16()); | 1181 PopulateChannelIDInfoWithFilter(container, ¬ifier, base::string16()); |
1122 } | 1182 } |
1123 | 1183 |
1124 void CookiesTreeModel::PopulateServiceWorkerUsageInfo( | 1184 void CookiesTreeModel::PopulateServiceWorkerUsageInfo( |
1125 LocalDataContainer* container) { | 1185 LocalDataContainer* container) { |
1126 ScopedBatchUpdateNotifier notifier(this, GetRoot()); | 1186 ScopedBatchUpdateNotifier notifier(this, GetRoot()); |
1127 PopulateServiceWorkerUsageInfoWithFilter( | 1187 PopulateServiceWorkerUsageInfoWithFilter( |
1128 container, ¬ifier, base::string16()); | 1188 container, ¬ifier, base::string16()); |
1129 } | 1189 } |
1130 | 1190 |
| 1191 void CookiesTreeModel::PopulateCacheStorageUsageInfo( |
| 1192 LocalDataContainer* container) { |
| 1193 ScopedBatchUpdateNotifier notifier(this, GetRoot()); |
| 1194 PopulateCacheStorageUsageInfoWithFilter(container, ¬ifier, |
| 1195 base::string16()); |
| 1196 } |
| 1197 |
1131 void CookiesTreeModel::PopulateFlashLSOInfo( | 1198 void CookiesTreeModel::PopulateFlashLSOInfo( |
1132 LocalDataContainer* container) { | 1199 LocalDataContainer* container) { |
1133 ScopedBatchUpdateNotifier notifier(this, GetRoot()); | 1200 ScopedBatchUpdateNotifier notifier(this, GetRoot()); |
1134 PopulateFlashLSOInfoWithFilter(container, ¬ifier, base::string16()); | 1201 PopulateFlashLSOInfoWithFilter(container, ¬ifier, base::string16()); |
1135 } | 1202 } |
1136 | 1203 |
1137 void CookiesTreeModel::PopulateAppCacheInfoWithFilter( | 1204 void CookiesTreeModel::PopulateAppCacheInfoWithFilter( |
1138 LocalDataContainer* container, | 1205 LocalDataContainer* container, |
1139 ScopedBatchUpdateNotifier* notifier, | 1206 ScopedBatchUpdateNotifier* notifier, |
1140 const base::string16& filter) { | 1207 const base::string16& filter) { |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1354 .find(filter) != base::string16::npos)) { | 1421 .find(filter) != base::string16::npos)) { |
1355 CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); | 1422 CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); |
1356 CookieTreeServiceWorkersNode* service_workers_node = | 1423 CookieTreeServiceWorkersNode* service_workers_node = |
1357 host_node->GetOrCreateServiceWorkersNode(); | 1424 host_node->GetOrCreateServiceWorkersNode(); |
1358 service_workers_node->AddServiceWorkerNode( | 1425 service_workers_node->AddServiceWorkerNode( |
1359 new CookieTreeServiceWorkerNode(service_worker_info)); | 1426 new CookieTreeServiceWorkerNode(service_worker_info)); |
1360 } | 1427 } |
1361 } | 1428 } |
1362 } | 1429 } |
1363 | 1430 |
| 1431 void CookiesTreeModel::PopulateCacheStorageUsageInfoWithFilter( |
| 1432 LocalDataContainer* container, |
| 1433 ScopedBatchUpdateNotifier* notifier, |
| 1434 const base::string16& filter) { |
| 1435 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); |
| 1436 |
| 1437 if (container->cache_storage_info_list_.empty()) |
| 1438 return; |
| 1439 |
| 1440 notifier->StartBatchUpdate(); |
| 1441 for (CacheStorageUsageInfoList::iterator cache_storage_info = |
| 1442 container->cache_storage_info_list_.begin(); |
| 1443 cache_storage_info != container->cache_storage_info_list_.end(); |
| 1444 ++cache_storage_info) { |
| 1445 const GURL& origin = cache_storage_info->origin; |
| 1446 |
| 1447 if (filter.empty() || (CookieTreeHostNode::TitleForUrl(origin) |
| 1448 .find(filter) != base::string16::npos)) { |
| 1449 CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); |
| 1450 CookieTreeCacheStoragesNode* cache_storages_node = |
| 1451 host_node->GetOrCreateCacheStoragesNode(); |
| 1452 cache_storages_node->AddCacheStorageNode( |
| 1453 new CookieTreeCacheStorageNode(cache_storage_info)); |
| 1454 } |
| 1455 } |
| 1456 } |
| 1457 |
1364 void CookiesTreeModel::PopulateFileSystemInfoWithFilter( | 1458 void CookiesTreeModel::PopulateFileSystemInfoWithFilter( |
1365 LocalDataContainer* container, | 1459 LocalDataContainer* container, |
1366 ScopedBatchUpdateNotifier* notifier, | 1460 ScopedBatchUpdateNotifier* notifier, |
1367 const base::string16& filter) { | 1461 const base::string16& filter) { |
1368 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); | 1462 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); |
1369 | 1463 |
1370 if (container->file_system_info_list_.empty()) | 1464 if (container->file_system_info_list_.empty()) |
1371 return; | 1465 return; |
1372 | 1466 |
1373 notifier->StartBatchUpdate(); | 1467 notifier->StartBatchUpdate(); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1465 void CookiesTreeModel::MaybeNotifyBatchesEnded() { | 1559 void CookiesTreeModel::MaybeNotifyBatchesEnded() { |
1466 // Only notify the observers if this is the outermost call to EndBatch() if | 1560 // Only notify the observers if this is the outermost call to EndBatch() if |
1467 // called in a nested manner. | 1561 // called in a nested manner. |
1468 if (batches_ended_ == batches_started_ && | 1562 if (batches_ended_ == batches_started_ && |
1469 batches_seen_ == batches_expected_) { | 1563 batches_seen_ == batches_expected_) { |
1470 FOR_EACH_OBSERVER(Observer, | 1564 FOR_EACH_OBSERVER(Observer, |
1471 cookies_observer_list_, | 1565 cookies_observer_list_, |
1472 TreeModelEndBatch(this)); | 1566 TreeModelEndBatch(this)); |
1473 } | 1567 } |
1474 } | 1568 } |
OLD | NEW |