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 <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/memory/linked_ptr.h" | 12 #include "base/memory/linked_ptr.h" |
13 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
15 #include "chrome/browser/browsing_data/browsing_data_channel_id_helper.h" | 15 #include "chrome/browser/browsing_data/browsing_data_channel_id_helper.h" |
16 #include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" | 16 #include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" |
17 #include "chrome/browser/browsing_data/browsing_data_flash_lso_helper.h" | 17 #include "chrome/browser/browsing_data/browsing_data_flash_lso_helper.h" |
18 #include "chrome/browser/content_settings/cookie_settings.h" | 18 #include "chrome/browser/content_settings/cookie_settings.h" |
19 #include "chrome/browser/extensions/extension_service.h" | |
20 #include "chrome/browser/extensions/extension_special_storage_policy.h" | |
21 #include "content/public/common/url_constants.h" | 19 #include "content/public/common/url_constants.h" |
22 #include "extensions/common/extension_set.h" | |
23 #include "grit/generated_resources.h" | 20 #include "grit/generated_resources.h" |
24 #include "grit/theme_resources.h" | 21 #include "grit/theme_resources.h" |
25 #include "grit/ui_resources.h" | 22 #include "grit/ui_resources.h" |
26 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 23 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
27 #include "net/cookies/canonical_cookie.h" | 24 #include "net/cookies/canonical_cookie.h" |
28 #include "net/url_request/url_request_context.h" | 25 #include "net/url_request/url_request_context.h" |
29 #include "ui/base/l10n/l10n_util.h" | 26 #include "ui/base/l10n/l10n_util.h" |
30 #include "ui/base/resource/resource_bundle.h" | 27 #include "ui/base/resource/resource_bundle.h" |
31 #include "ui/gfx/image/image_skia.h" | 28 #include "ui/gfx/image/image_skia.h" |
32 | 29 |
| 30 #if defined(ENABLE_EXTENSIONS) |
| 31 #include "chrome/browser/extensions/extension_special_storage_policy.h" |
| 32 #include "extensions/common/extension_set.h" |
| 33 #endif |
| 34 |
33 namespace { | 35 namespace { |
34 | 36 |
35 struct NodeTitleComparator { | 37 struct NodeTitleComparator { |
36 bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) { | 38 bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) { |
37 return lhs->GetTitle() < rhs->GetTitle(); | 39 return lhs->GetTitle() < rhs->GetTitle(); |
38 } | 40 } |
39 }; | 41 }; |
40 | 42 |
41 // Comparison functor, for use in CookieTreeRootNode. | 43 // Comparison functor, for use in CookieTreeRootNode. |
42 struct HostNodeComparator { | 44 struct HostNodeComparator { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 if (next_dot == std::string::npos) { | 106 if (next_dot == std::string::npos) { |
105 retval += host.substr(0, position); | 107 retval += host.substr(0, position); |
106 break; | 108 break; |
107 } | 109 } |
108 retval += host.substr(next_dot + 1, position - (next_dot + 1)); | 110 retval += host.substr(next_dot + 1, position - (next_dot + 1)); |
109 position = next_dot; | 111 position = next_dot; |
110 } | 112 } |
111 return retval; | 113 return retval; |
112 } | 114 } |
113 | 115 |
| 116 #if defined(ENABLE_EXTENSIONS) |
114 bool TypeIsProtected(CookieTreeNode::DetailedInfo::NodeType type) { | 117 bool TypeIsProtected(CookieTreeNode::DetailedInfo::NodeType type) { |
115 switch (type) { | 118 switch (type) { |
116 case CookieTreeNode::DetailedInfo::TYPE_COOKIE: | 119 case CookieTreeNode::DetailedInfo::TYPE_COOKIE: |
117 return false; | 120 return false; |
118 case CookieTreeNode::DetailedInfo::TYPE_DATABASE: | 121 case CookieTreeNode::DetailedInfo::TYPE_DATABASE: |
119 return true; | 122 return true; |
120 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE: | 123 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE: |
121 return true; | 124 return true; |
122 case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE: | 125 case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE: |
123 return true; | 126 return true; |
124 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE: | 127 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE: |
125 return true; | 128 return true; |
126 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: | 129 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: |
127 return true; | 130 return true; |
128 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM: | 131 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM: |
129 return true; | 132 return true; |
130 case CookieTreeNode::DetailedInfo::TYPE_QUOTA: | 133 case CookieTreeNode::DetailedInfo::TYPE_QUOTA: |
131 return false; | 134 return false; |
132 case CookieTreeNode::DetailedInfo::TYPE_CHANNEL_ID: | 135 case CookieTreeNode::DetailedInfo::TYPE_CHANNEL_ID: |
133 return false; | 136 return false; |
134 case CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO: | 137 case CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO: |
135 return false; | 138 return false; |
136 default: | 139 default: |
137 break; | 140 break; |
138 } | 141 } |
139 return false; | 142 return false; |
140 } | 143 } |
| 144 #endif |
141 | 145 |
142 // This function returns the local data container associated with a leaf tree | 146 // This function returns the local data container associated with a leaf tree |
143 // node. The app node is assumed to be 3 levels above the leaf because of the | 147 // node. The app node is assumed to be 3 levels above the leaf because of the |
144 // following structure: | 148 // following structure: |
145 // root -> origin -> storage type -> leaf node | 149 // root -> origin -> storage type -> leaf node |
146 LocalDataContainer* GetLocalDataContainerForNode(CookieTreeNode* node) { | 150 LocalDataContainer* GetLocalDataContainerForNode(CookieTreeNode* node) { |
147 CookieTreeHostNode* host = static_cast<CookieTreeHostNode*>( | 151 CookieTreeHostNode* host = static_cast<CookieTreeHostNode*>( |
148 node->parent()->parent()); | 152 node->parent()->parent()); |
149 CHECK_EQ(host->GetDetailedInfo().node_type, | 153 CHECK_EQ(host->GetDetailedInfo().node_type, |
150 CookieTreeNode::DetailedInfo::TYPE_HOST); | 154 CookieTreeNode::DetailedInfo::TYPE_HOST); |
(...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
860 } | 864 } |
861 | 865 |
862 /////////////////////////////////////////////////////////////////////////////// | 866 /////////////////////////////////////////////////////////////////////////////// |
863 // CookiesTreeModel, public: | 867 // CookiesTreeModel, public: |
864 CookiesTreeModel::CookiesTreeModel( | 868 CookiesTreeModel::CookiesTreeModel( |
865 LocalDataContainer* data_container, | 869 LocalDataContainer* data_container, |
866 ExtensionSpecialStoragePolicy* special_storage_policy, | 870 ExtensionSpecialStoragePolicy* special_storage_policy, |
867 bool group_by_cookie_source) | 871 bool group_by_cookie_source) |
868 : ui::TreeNodeModel<CookieTreeNode>(new CookieTreeRootNode(this)), | 872 : ui::TreeNodeModel<CookieTreeNode>(new CookieTreeRootNode(this)), |
869 data_container_(data_container), | 873 data_container_(data_container), |
| 874 #if defined(ENABLE_EXTENSIONS) |
870 special_storage_policy_(special_storage_policy), | 875 special_storage_policy_(special_storage_policy), |
| 876 #endif |
871 group_by_cookie_source_(group_by_cookie_source), | 877 group_by_cookie_source_(group_by_cookie_source), |
872 batch_update_(0) { | 878 batch_update_(0) { |
873 data_container_->Init(this); | 879 data_container_->Init(this); |
874 } | 880 } |
875 | 881 |
876 CookiesTreeModel::~CookiesTreeModel() { | 882 CookiesTreeModel::~CookiesTreeModel() { |
877 } | 883 } |
878 | 884 |
879 /////////////////////////////////////////////////////////////////////////////// | 885 /////////////////////////////////////////////////////////////////////////////// |
880 // CookiesTreeModel, TreeModel methods (public): | 886 // CookiesTreeModel, TreeModel methods (public): |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 PopulateDatabaseInfoWithFilter(data_container(), ¬ifier, filter); | 962 PopulateDatabaseInfoWithFilter(data_container(), ¬ifier, filter); |
957 PopulateLocalStorageInfoWithFilter(data_container(), ¬ifier, filter); | 963 PopulateLocalStorageInfoWithFilter(data_container(), ¬ifier, filter); |
958 PopulateSessionStorageInfoWithFilter(data_container(), ¬ifier, filter); | 964 PopulateSessionStorageInfoWithFilter(data_container(), ¬ifier, filter); |
959 PopulateAppCacheInfoWithFilter(data_container(), ¬ifier, filter); | 965 PopulateAppCacheInfoWithFilter(data_container(), ¬ifier, filter); |
960 PopulateIndexedDBInfoWithFilter(data_container(), ¬ifier, filter); | 966 PopulateIndexedDBInfoWithFilter(data_container(), ¬ifier, filter); |
961 PopulateFileSystemInfoWithFilter(data_container(), ¬ifier, filter); | 967 PopulateFileSystemInfoWithFilter(data_container(), ¬ifier, filter); |
962 PopulateQuotaInfoWithFilter(data_container(), ¬ifier, filter); | 968 PopulateQuotaInfoWithFilter(data_container(), ¬ifier, filter); |
963 PopulateChannelIDInfoWithFilter(data_container(), ¬ifier, filter); | 969 PopulateChannelIDInfoWithFilter(data_container(), ¬ifier, filter); |
964 } | 970 } |
965 | 971 |
| 972 #if defined(ENABLE_EXTENSIONS) |
966 const extensions::ExtensionSet* CookiesTreeModel::ExtensionsProtectingNode( | 973 const extensions::ExtensionSet* CookiesTreeModel::ExtensionsProtectingNode( |
967 const CookieTreeNode& cookie_node) { | 974 const CookieTreeNode& cookie_node) { |
968 if (!special_storage_policy_.get()) | 975 if (!special_storage_policy_) |
969 return NULL; | 976 return NULL; |
970 | 977 |
971 CookieTreeNode::DetailedInfo info = cookie_node.GetDetailedInfo(); | 978 CookieTreeNode::DetailedInfo info = cookie_node.GetDetailedInfo(); |
972 | 979 |
973 if (!TypeIsProtected(info.node_type)) | 980 if (!TypeIsProtected(info.node_type)) |
974 return NULL; | 981 return NULL; |
975 | 982 |
976 DCHECK(!info.origin.is_empty()); | 983 DCHECK(!info.origin.is_empty()); |
977 return special_storage_policy_->ExtensionsProtectingOrigin(info.origin); | 984 return special_storage_policy_->ExtensionsProtectingOrigin(info.origin); |
978 } | 985 } |
| 986 #endif |
979 | 987 |
980 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) { | 988 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) { |
981 cookies_observer_list_.AddObserver(observer); | 989 cookies_observer_list_.AddObserver(observer); |
982 // Call super so that TreeNodeModel can notify, too. | 990 // Call super so that TreeNodeModel can notify, too. |
983 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer); | 991 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer); |
984 } | 992 } |
985 | 993 |
986 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) { | 994 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) { |
987 cookies_observer_list_.RemoveObserver(observer); | 995 cookies_observer_list_.RemoveObserver(observer); |
988 // Call super so that TreeNodeModel doesn't have dead pointers. | 996 // Call super so that TreeNodeModel doesn't have dead pointers. |
(...skipping 19 matching lines...) Expand all Loading... |
1008 ScopedBatchUpdateNotifier notifier(this, GetRoot()); | 1016 ScopedBatchUpdateNotifier notifier(this, GetRoot()); |
1009 PopulateLocalStorageInfoWithFilter(container, ¬ifier, base::string16()); | 1017 PopulateLocalStorageInfoWithFilter(container, ¬ifier, base::string16()); |
1010 } | 1018 } |
1011 | 1019 |
1012 void CookiesTreeModel::PopulateSessionStorageInfo( | 1020 void CookiesTreeModel::PopulateSessionStorageInfo( |
1013 LocalDataContainer* container) { | 1021 LocalDataContainer* container) { |
1014 ScopedBatchUpdateNotifier notifier(this, GetRoot()); | 1022 ScopedBatchUpdateNotifier notifier(this, GetRoot()); |
1015 PopulateSessionStorageInfoWithFilter(container, ¬ifier, base::string16()); | 1023 PopulateSessionStorageInfoWithFilter(container, ¬ifier, base::string16()); |
1016 } | 1024 } |
1017 | 1025 |
1018 void CookiesTreeModel::PopulateIndexedDBInfo(LocalDataContainer* container){ | 1026 void CookiesTreeModel::PopulateIndexedDBInfo(LocalDataContainer* container) { |
1019 ScopedBatchUpdateNotifier notifier(this, GetRoot()); | 1027 ScopedBatchUpdateNotifier notifier(this, GetRoot()); |
1020 PopulateIndexedDBInfoWithFilter(container, ¬ifier, base::string16()); | 1028 PopulateIndexedDBInfoWithFilter(container, ¬ifier, base::string16()); |
1021 } | 1029 } |
1022 | 1030 |
1023 void CookiesTreeModel::PopulateFileSystemInfo(LocalDataContainer* container) { | 1031 void CookiesTreeModel::PopulateFileSystemInfo(LocalDataContainer* container) { |
1024 ScopedBatchUpdateNotifier notifier(this, GetRoot()); | 1032 ScopedBatchUpdateNotifier notifier(this, GetRoot()); |
1025 PopulateFileSystemInfoWithFilter(container, ¬ifier, base::string16()); | 1033 PopulateFileSystemInfoWithFilter(container, ¬ifier, base::string16()); |
1026 } | 1034 } |
1027 | 1035 |
1028 void CookiesTreeModel::PopulateQuotaInfo(LocalDataContainer* container) { | 1036 void CookiesTreeModel::PopulateQuotaInfo(LocalDataContainer* container) { |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1335 | 1343 |
1336 void CookiesTreeModel::NotifyObserverEndBatch() { | 1344 void CookiesTreeModel::NotifyObserverEndBatch() { |
1337 // Only notify the observers if this is the outermost call to EndBatch() if | 1345 // Only notify the observers if this is the outermost call to EndBatch() if |
1338 // called in a nested manner. | 1346 // called in a nested manner. |
1339 if (--batch_update_ == 0) { | 1347 if (--batch_update_ == 0) { |
1340 FOR_EACH_OBSERVER(Observer, | 1348 FOR_EACH_OBSERVER(Observer, |
1341 cookies_observer_list_, | 1349 cookies_observer_list_, |
1342 TreeModelEndBatch(this)); | 1350 TreeModelEndBatch(this)); |
1343 } | 1351 } |
1344 } | 1352 } |
OLD | NEW |