Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: chrome/browser/cookies_tree_model.cc

Issue 10709006: Show apps protecting local data in chrome://settings/cookies. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: jochen Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/cookies_tree_model.h" 5 #include "chrome/browser/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/string_util.h" 13 #include "base/string_util.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/browsing_data_cookie_helper.h" 15 #include "chrome/browser/browsing_data_cookie_helper.h"
16 #include "chrome/browser/browsing_data_server_bound_cert_helper.h" 16 #include "chrome/browser/browsing_data_server_bound_cert_helper.h"
17 #include "chrome/browser/content_settings/cookie_settings.h" 17 #include "chrome/browser/content_settings/cookie_settings.h"
18 #include "chrome/browser/extensions/extension_service.h" 18 #include "chrome/browser/extensions/extension_service.h"
19 #include "chrome/browser/extensions/extension_special_storage_policy.h"
19 #include "content/public/common/url_constants.h" 20 #include "content/public/common/url_constants.h"
20 #include "grit/generated_resources.h" 21 #include "grit/generated_resources.h"
21 #include "grit/theme_resources.h" 22 #include "grit/theme_resources.h"
22 #include "grit/theme_resources_standard.h" 23 #include "grit/theme_resources_standard.h"
23 #include "grit/ui_resources.h" 24 #include "grit/ui_resources.h"
24 #include "net/base/registry_controlled_domain.h" 25 #include "net/base/registry_controlled_domain.h"
25 #include "net/cookies/cookie_monster.h" 26 #include "net/cookies/cookie_monster.h"
26 #include "net/url_request/url_request_context.h" 27 #include "net/url_request/url_request_context.h"
27 #include "ui/base/l10n/l10n_util.h" 28 #include "ui/base/l10n/l10n_util.h"
28 #include "ui/base/resource/resource_bundle.h" 29 #include "ui/base/resource/resource_bundle.h"
29 #include "ui/gfx/image/image_skia.h" 30 #include "ui/gfx/image/image_skia.h"
30 31
31 namespace { 32 namespace {
32 33
33 struct NodeTitleComparator { 34 struct NodeTitleComparator {
34 bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) { 35 bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
35 return lhs->GetTitle() < rhs->GetTitle(); 36 return lhs->GetTitle() < rhs->GetTitle();
36 } 37 }
37 }; 38 };
38 39
39 // Comparison functor, for use in CookieTreeRootNode. 40 // Comparison functor, for use in CookieTreeRootNode.
40 struct OriginNodeComparator { 41 struct HostNodeComparator {
41 bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) { 42 bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
42 // We want to order by registry controlled domain, so we would get 43 // We want to order by registry controlled domain, so we would get
43 // google.com, ad.google.com, www.google.com, 44 // google.com, ad.google.com, www.google.com,
44 // microsoft.com, ad.microsoft.com. CanonicalizeHost transforms the origins 45 // microsoft.com, ad.microsoft.com. CanonicalizeHost transforms the origins
45 // into a form like google.com.www so that string comparisons work. 46 // into a form like google.com.www so that string comparisons work.
46 return (CanonicalizeHost(lhs->GetTitle()) <
47 CanonicalizeHost(rhs->GetTitle()));
48 }
49 47
50 static std::string CanonicalizeHost(const string16& host16) { 48 CHECK_EQ(CookieTreeNode::DetailedInfo::TYPE_HOST,
51 // The canonicalized representation makes the registry controlled domain 49 lhs->GetDetailedInfo().node_type);
52 // come first, and then adds subdomains in reverse order, e.g. 50 const CookieTreeHostNode* left_host =
53 // 1.mail.google.com would become google.com.mail.1, and then a standard 51 static_cast<const CookieTreeHostNode*>(lhs);
54 // string comparison works to order hosts by registry controlled domain 52 CHECK_EQ(CookieTreeNode::DetailedInfo::TYPE_HOST,
55 // first. Leading dots are ignored, ".google.com" is the same as 53 rhs->GetDetailedInfo().node_type);
56 // "google.com". 54 const CookieTreeHostNode* right_host =
57 55 static_cast<const CookieTreeHostNode*>(rhs);
58 std::string host = UTF16ToUTF8(host16); 56 return (left_host->canonicalized_host() <
59 std::string retval = net::RegistryControlledDomainService:: 57 right_host->canonicalized_host());
60 GetDomainAndRegistry(host);
61 if (!retval.length()) // Is an IP address or other special origin.
62 return host;
63
64 std::string::size_type position = host.rfind(retval);
65
66 // The host may be the registry controlled domain, in which case fail fast.
67 if (position == 0 || position == std::string::npos)
68 return host;
69
70 // If host is www.google.com, retval will contain google.com at this point.
71 // Start operating to the left of the registry controlled domain, e.g. in
72 // the www.google.com example, start at index 3.
73 --position;
74
75 // If position == 0, that means it's a dot; this will be ignored to treat
76 // ".google.com" the same as "google.com".
77 while (position > 0) {
78 retval += std::string(".");
79 // Copy up to the next dot. host[position] is a dot so start after it.
80 std::string::size_type next_dot = host.rfind(".", position - 1);
81 if (next_dot == std::string::npos) {
82 retval += host.substr(0, position);
83 break;
84 }
85 retval += host.substr(next_dot + 1, position - (next_dot + 1));
86 position = next_dot;
87 }
88 return retval;
89 } 58 }
90 }; 59 };
91 60
61 bool TypeIsProtected(CookieTreeNode::DetailedInfo::NodeType type) {
62 switch (type) {
63 case CookieTreeNode::DetailedInfo::TYPE_COOKIE:
64 return false;
65 case CookieTreeNode::DetailedInfo::TYPE_DATABASE:
66 return true;
67 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE:
68 return true;
69 case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE:
70 return true;
71 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE:
72 return true;
73 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB:
74 return true;
75 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM:
76 return true;
77 case CookieTreeNode::DetailedInfo::TYPE_QUOTA:
78 return true;
79 case CookieTreeNode::DetailedInfo::TYPE_SERVER_BOUND_CERT:
80 return false;
81 default:
82 break;
83 }
84 return false;
85 }
86
92 } // namespace 87 } // namespace
93 88
89 CookieTreeNode::DetailedInfo::DetailedInfo()
90 : node_type(TYPE_NONE),
91 cookie(NULL),
92 database_info(NULL),
93 local_storage_info(NULL),
94 session_storage_info(NULL),
95 appcache_info(NULL),
96 indexed_db_info(NULL),
97 file_system_info(NULL),
98 quota_info(NULL),
99 server_bound_cert(NULL) {}
100
101 CookieTreeNode::DetailedInfo::~DetailedInfo() {}
102
103 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::Init(
104 NodeType type) {
105 DCHECK_EQ(TYPE_NONE, node_type);
106 node_type = type;
107 return *this;
108 }
109
110 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitCookie(
111 const net::CookieMonster::CanonicalCookie* cookie) {
112 Init(TYPE_COOKIE);
113 this->cookie = cookie;
114 return *this;
115 }
116
117 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitDatabase(
118 const BrowsingDataDatabaseHelper::DatabaseInfo* database_info) {
119 Init(TYPE_DATABASE);
120 this->database_info = database_info;
121 origin = GURL(database_info->origin);
122 return *this;
123 }
124
125 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitLocalStorage(
126 const BrowsingDataLocalStorageHelper::LocalStorageInfo*
127 local_storage_info) {
128 Init(TYPE_LOCAL_STORAGE);
129 this->local_storage_info = local_storage_info;
130 origin = local_storage_info->origin_url;
131 return *this;
132 }
133
134 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitSessionStorage(
135 const BrowsingDataLocalStorageHelper::LocalStorageInfo*
136 session_storage_info) {
137 Init(TYPE_SESSION_STORAGE);
138 this->session_storage_info = session_storage_info;
139 origin = session_storage_info->origin_url;
140 return *this;
141 }
142
143 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitAppCache(
144 const GURL& origin,
145 const appcache::AppCacheInfo* appcache_info) {
146 Init(TYPE_APPCACHE);
147 this->appcache_info = appcache_info;
148 this->origin = origin;
149 return *this;
150 }
151
152 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitIndexedDB(
153 const BrowsingDataIndexedDBHelper::IndexedDBInfo* indexed_db_info) {
154 Init(TYPE_INDEXED_DB);
155 this->indexed_db_info = indexed_db_info;
156 this->origin = indexed_db_info->origin;
157 return *this;
158 }
159
160 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitFileSystem(
161 const BrowsingDataFileSystemHelper::FileSystemInfo* file_system_info) {
162 Init(TYPE_FILE_SYSTEM);
163 this->file_system_info = file_system_info;
164 this->origin = file_system_info->origin;
165 return *this;
166 }
167
168 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitQuota(
169 const BrowsingDataQuotaHelper::QuotaInfo* quota_info) {
170 Init(TYPE_QUOTA);
171 this->quota_info = quota_info;
172 return *this;
173 }
174
175 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitServerBoundCert(
176 const net::ServerBoundCertStore::ServerBoundCert* server_bound_cert) {
177 Init(TYPE_SERVER_BOUND_CERT);
178 this->server_bound_cert = server_bound_cert;
179 return *this;
180 }
181
94 /////////////////////////////////////////////////////////////////////////////// 182 ///////////////////////////////////////////////////////////////////////////////
95 // CookieTreeNode, public: 183 // CookieTreeNode, public:
96 184
97 void CookieTreeNode::DeleteStoredObjects() { 185 void CookieTreeNode::DeleteStoredObjects() {
98 std::for_each(children().begin(), 186 std::for_each(children().begin(),
99 children().end(), 187 children().end(),
100 std::mem_fun(&CookieTreeNode::DeleteStoredObjects)); 188 std::mem_fun(&CookieTreeNode::DeleteStoredObjects));
101 } 189 }
102 190
103 CookiesTreeModel* CookieTreeNode::GetModel() const { 191 CookiesTreeModel* CookieTreeNode::GetModel() const {
(...skipping 14 matching lines...) Expand all
118 206
119 CookieTreeCookieNode::~CookieTreeCookieNode() {} 207 CookieTreeCookieNode::~CookieTreeCookieNode() {}
120 208
121 void CookieTreeCookieNode::DeleteStoredObjects() { 209 void CookieTreeCookieNode::DeleteStoredObjects() {
122 // notify CookieMonster that we should delete this cookie 210 // notify CookieMonster that we should delete this cookie
123 GetModel()->cookie_helper_->DeleteCookie(*cookie_); 211 GetModel()->cookie_helper_->DeleteCookie(*cookie_);
124 GetModel()->cookie_list_.erase(cookie_); 212 GetModel()->cookie_list_.erase(cookie_);
125 } 213 }
126 214
127 CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const { 215 CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const {
128 return DetailedInfo(parent()->parent()->GetTitle()).InitCookie(&*cookie_); 216 return DetailedInfo().InitCookie(&*cookie_);
129 } 217 }
130 218
131 /////////////////////////////////////////////////////////////////////////////// 219 ///////////////////////////////////////////////////////////////////////////////
132 // CookieTreeAppCacheNode, public: 220 // CookieTreeAppCacheNode, public:
133 221
134 CookieTreeAppCacheNode::CookieTreeAppCacheNode( 222 CookieTreeAppCacheNode::CookieTreeAppCacheNode(
135 const GURL& origin_url, 223 const GURL& origin_url,
136 std::list<appcache::AppCacheInfo>::iterator appcache_info) 224 std::list<appcache::AppCacheInfo>::iterator appcache_info)
137 : CookieTreeNode(UTF8ToUTF16(appcache_info->manifest_url.spec())), 225 : CookieTreeNode(UTF8ToUTF16(appcache_info->manifest_url.spec())),
138 origin_url_(origin_url), 226 origin_url_(origin_url),
139 appcache_info_(appcache_info) { 227 appcache_info_(appcache_info) {
140 } 228 }
141 229
142 CookieTreeAppCacheNode::~CookieTreeAppCacheNode() { 230 CookieTreeAppCacheNode::~CookieTreeAppCacheNode() {
143 } 231 }
144 232
145 void CookieTreeAppCacheNode::DeleteStoredObjects() { 233 void CookieTreeAppCacheNode::DeleteStoredObjects() {
146 DCHECK(GetModel()->appcache_helper_); 234 DCHECK(GetModel()->appcache_helper_);
147 GetModel()->appcache_helper_->DeleteAppCacheGroup( 235 GetModel()->appcache_helper_->DeleteAppCacheGroup(
148 appcache_info_->manifest_url); 236 appcache_info_->manifest_url);
149 GetModel()->appcache_info_[origin_url_].erase(appcache_info_); 237 GetModel()->appcache_info_[origin_url_].erase(appcache_info_);
150 } 238 }
151 239
152 CookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const { 240 CookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const {
153 return DetailedInfo(parent()->parent()->GetTitle()).InitAppCache( 241 return DetailedInfo().InitAppCache(origin_url_, &*appcache_info_);
154 &*appcache_info_);
155 } 242 }
156 243
157 /////////////////////////////////////////////////////////////////////////////// 244 ///////////////////////////////////////////////////////////////////////////////
158 // CookieTreeDatabaseNode, public: 245 // CookieTreeDatabaseNode, public:
159 246
160 CookieTreeDatabaseNode::CookieTreeDatabaseNode( 247 CookieTreeDatabaseNode::CookieTreeDatabaseNode(
161 std::list<BrowsingDataDatabaseHelper::DatabaseInfo>::iterator database_info) 248 std::list<BrowsingDataDatabaseHelper::DatabaseInfo>::iterator database_info)
162 : CookieTreeNode(database_info->database_name.empty() ? 249 : CookieTreeNode(database_info->database_name.empty() ?
163 l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME) : 250 l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME) :
164 UTF8ToUTF16(database_info->database_name)), 251 UTF8ToUTF16(database_info->database_name)),
165 database_info_(database_info) { 252 database_info_(database_info) {
166 } 253 }
167 254
168 CookieTreeDatabaseNode::~CookieTreeDatabaseNode() {} 255 CookieTreeDatabaseNode::~CookieTreeDatabaseNode() {}
169 256
170 void CookieTreeDatabaseNode::DeleteStoredObjects() { 257 void CookieTreeDatabaseNode::DeleteStoredObjects() {
171 GetModel()->database_helper_->DeleteDatabase( 258 GetModel()->database_helper_->DeleteDatabase(
172 database_info_->origin_identifier, database_info_->database_name); 259 database_info_->origin_identifier, database_info_->database_name);
173 GetModel()->database_info_list_.erase(database_info_); 260 GetModel()->database_info_list_.erase(database_info_);
174 } 261 }
175 262
176 CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const { 263 CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const {
177 return DetailedInfo(parent()->parent()->GetTitle()).InitDatabase( 264 return DetailedInfo().InitDatabase(&*database_info_);
178 &*database_info_);
179 } 265 }
180 266
181 /////////////////////////////////////////////////////////////////////////////// 267 ///////////////////////////////////////////////////////////////////////////////
182 // CookieTreeLocalStorageNode, public: 268 // CookieTreeLocalStorageNode, public:
183 269
184 CookieTreeLocalStorageNode::CookieTreeLocalStorageNode( 270 CookieTreeLocalStorageNode::CookieTreeLocalStorageNode(
185 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 271 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator
186 local_storage_info) 272 local_storage_info)
187 : CookieTreeNode(UTF8ToUTF16(local_storage_info->origin_url.spec())), 273 : CookieTreeNode(UTF8ToUTF16(local_storage_info->origin_url.spec())),
188 local_storage_info_(local_storage_info) { 274 local_storage_info_(local_storage_info) {
189 } 275 }
190 276
191 CookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {} 277 CookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {}
192 278
193 void CookieTreeLocalStorageNode::DeleteStoredObjects() { 279 void CookieTreeLocalStorageNode::DeleteStoredObjects() {
194 GetModel()->local_storage_helper_->DeleteOrigin( 280 GetModel()->local_storage_helper_->DeleteOrigin(
195 local_storage_info_->origin_url); 281 local_storage_info_->origin_url);
196 GetModel()->local_storage_info_list_.erase(local_storage_info_); 282 GetModel()->local_storage_info_list_.erase(local_storage_info_);
197 } 283 }
198 284
199 CookieTreeNode::DetailedInfo 285 CookieTreeNode::DetailedInfo
200 CookieTreeLocalStorageNode::GetDetailedInfo() const { 286 CookieTreeLocalStorageNode::GetDetailedInfo() const {
201 return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage( 287 return DetailedInfo().InitLocalStorage(
202 &*local_storage_info_); 288 &*local_storage_info_);
203 } 289 }
204 290
205 /////////////////////////////////////////////////////////////////////////////// 291 ///////////////////////////////////////////////////////////////////////////////
206 // CookieTreeSessionStorageNode, public: 292 // CookieTreeSessionStorageNode, public:
207 293
208 CookieTreeSessionStorageNode::CookieTreeSessionStorageNode( 294 CookieTreeSessionStorageNode::CookieTreeSessionStorageNode(
209 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 295 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator
210 session_storage_info) 296 session_storage_info)
211 : CookieTreeNode(UTF8ToUTF16(session_storage_info->origin_url.spec())), 297 : CookieTreeNode(UTF8ToUTF16(session_storage_info->origin_url.spec())),
212 session_storage_info_(session_storage_info) { 298 session_storage_info_(session_storage_info) {
213 } 299 }
214 300
215 CookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {} 301 CookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {}
216 302
217 void CookieTreeSessionStorageNode::DeleteStoredObjects() { 303 void CookieTreeSessionStorageNode::DeleteStoredObjects() {
218 GetModel()->session_storage_info_list_.erase(session_storage_info_); 304 GetModel()->session_storage_info_list_.erase(session_storage_info_);
219 } 305 }
220 306
221 CookieTreeNode::DetailedInfo 307 CookieTreeNode::DetailedInfo
222 CookieTreeSessionStorageNode::GetDetailedInfo() const { 308 CookieTreeSessionStorageNode::GetDetailedInfo() const {
223 return DetailedInfo(parent()->parent()->GetTitle()).InitSessionStorage( 309 return DetailedInfo().InitSessionStorage(&*session_storage_info_);
224 &*session_storage_info_);
225 } 310 }
226 311
227 /////////////////////////////////////////////////////////////////////////////// 312 ///////////////////////////////////////////////////////////////////////////////
228 // CookieTreeIndexedDBNode, public: 313 // CookieTreeIndexedDBNode, public:
229 314
230 CookieTreeIndexedDBNode::CookieTreeIndexedDBNode( 315 CookieTreeIndexedDBNode::CookieTreeIndexedDBNode(
231 std::list<BrowsingDataIndexedDBHelper::IndexedDBInfo>::iterator 316 std::list<BrowsingDataIndexedDBHelper::IndexedDBInfo>::iterator
232 indexed_db_info) 317 indexed_db_info)
233 : CookieTreeNode(UTF8ToUTF16( 318 : CookieTreeNode(UTF8ToUTF16(
234 indexed_db_info->origin.spec())), 319 indexed_db_info->origin.spec())),
235 indexed_db_info_(indexed_db_info) { 320 indexed_db_info_(indexed_db_info) {
236 } 321 }
237 322
238 CookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {} 323 CookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {}
239 324
240 void CookieTreeIndexedDBNode::DeleteStoredObjects() { 325 void CookieTreeIndexedDBNode::DeleteStoredObjects() {
241 GetModel()->indexed_db_helper_->DeleteIndexedDB( 326 GetModel()->indexed_db_helper_->DeleteIndexedDB(
242 indexed_db_info_->origin); 327 indexed_db_info_->origin);
243 GetModel()->indexed_db_info_list_.erase(indexed_db_info_); 328 GetModel()->indexed_db_info_list_.erase(indexed_db_info_);
244 } 329 }
245 330
246 CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const { 331 CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const {
247 return DetailedInfo(parent()->parent()->GetTitle()).InitIndexedDB( 332 return DetailedInfo().InitIndexedDB(&*indexed_db_info_);
248 &*indexed_db_info_);
249 } 333 }
250 334
251 /////////////////////////////////////////////////////////////////////////////// 335 ///////////////////////////////////////////////////////////////////////////////
252 // CookieTreeFileSystemNode, public: 336 // CookieTreeFileSystemNode, public:
253 337
254 CookieTreeFileSystemNode::CookieTreeFileSystemNode( 338 CookieTreeFileSystemNode::CookieTreeFileSystemNode(
255 std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator 339 std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator
256 file_system_info) 340 file_system_info)
257 : CookieTreeNode(UTF8ToUTF16( 341 : CookieTreeNode(UTF8ToUTF16(
258 file_system_info->origin.spec())), 342 file_system_info->origin.spec())),
259 file_system_info_(file_system_info) { 343 file_system_info_(file_system_info) {
260 } 344 }
261 345
262 CookieTreeFileSystemNode::~CookieTreeFileSystemNode() {} 346 CookieTreeFileSystemNode::~CookieTreeFileSystemNode() {}
263 347
264 void CookieTreeFileSystemNode::DeleteStoredObjects() { 348 void CookieTreeFileSystemNode::DeleteStoredObjects() {
265 GetModel()->file_system_helper_->DeleteFileSystemOrigin( 349 GetModel()->file_system_helper_->DeleteFileSystemOrigin(
266 file_system_info_->origin); 350 file_system_info_->origin);
267 GetModel()->file_system_info_list_.erase(file_system_info_); 351 GetModel()->file_system_info_list_.erase(file_system_info_);
268 } 352 }
269 353
270 CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const { 354 CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const {
271 return DetailedInfo(parent()->parent()->GetTitle()).InitFileSystem( 355 return DetailedInfo().InitFileSystem(&*file_system_info_);
272 &*file_system_info_);
273 } 356 }
274 357
275 /////////////////////////////////////////////////////////////////////////////// 358 ///////////////////////////////////////////////////////////////////////////////
276 // CookieTreeQuotaNode, public: 359 // CookieTreeQuotaNode, public:
277 360
278 CookieTreeQuotaNode::CookieTreeQuotaNode( 361 CookieTreeQuotaNode::CookieTreeQuotaNode(
279 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) 362 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info)
280 : CookieTreeNode(UTF8ToUTF16(quota_info->host)), 363 : CookieTreeNode(UTF8ToUTF16(quota_info->host)),
281 quota_info_(quota_info) { 364 quota_info_(quota_info) {
282 } 365 }
283 366
284 CookieTreeQuotaNode::~CookieTreeQuotaNode() {} 367 CookieTreeQuotaNode::~CookieTreeQuotaNode() {}
285 368
286 void CookieTreeQuotaNode::DeleteStoredObjects() { 369 void CookieTreeQuotaNode::DeleteStoredObjects() {
287 // Calling this function may cause unexpected over-quota state of origin. 370 // Calling this function may cause unexpected over-quota state of origin.
288 // However, it'll caused no problem, just prevent usage growth of the origin. 371 // However, it'll caused no problem, just prevent usage growth of the origin.
289 GetModel()->quota_helper_->RevokeHostQuota(quota_info_->host); 372 GetModel()->quota_helper_->RevokeHostQuota(quota_info_->host);
290 GetModel()->quota_info_list_.erase(quota_info_); 373 GetModel()->quota_info_list_.erase(quota_info_);
291 } 374 }
292 375
293 CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const { 376 CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const {
294 return DetailedInfo(parent()->parent()->GetTitle()).InitQuota( 377 return DetailedInfo().InitQuota(&*quota_info_);
295 &*quota_info_);
296 } 378 }
297 379
298 /////////////////////////////////////////////////////////////////////////////// 380 ///////////////////////////////////////////////////////////////////////////////
299 // CookieTreeServerBoundCertNode, public: 381 // CookieTreeServerBoundCertNode, public:
300 382
301 CookieTreeServerBoundCertNode::CookieTreeServerBoundCertNode( 383 CookieTreeServerBoundCertNode::CookieTreeServerBoundCertNode(
302 net::ServerBoundCertStore::ServerBoundCertList::iterator cert) 384 net::ServerBoundCertStore::ServerBoundCertList::iterator cert)
303 : CookieTreeNode(ASCIIToUTF16(cert->server_identifier())), 385 : CookieTreeNode(ASCIIToUTF16(cert->server_identifier())),
304 server_bound_cert_(cert) { 386 server_bound_cert_(cert) {
305 } 387 }
306 388
307 CookieTreeServerBoundCertNode::~CookieTreeServerBoundCertNode() {} 389 CookieTreeServerBoundCertNode::~CookieTreeServerBoundCertNode() {}
308 390
309 void CookieTreeServerBoundCertNode::DeleteStoredObjects() { 391 void CookieTreeServerBoundCertNode::DeleteStoredObjects() {
310 GetModel()->server_bound_cert_helper_->DeleteServerBoundCert( 392 GetModel()->server_bound_cert_helper_->DeleteServerBoundCert(
311 server_bound_cert_->server_identifier()); 393 server_bound_cert_->server_identifier());
312 GetModel()->server_bound_cert_list_.erase(server_bound_cert_); 394 GetModel()->server_bound_cert_list_.erase(server_bound_cert_);
313 } 395 }
314 396
315 CookieTreeNode::DetailedInfo 397 CookieTreeNode::DetailedInfo
316 CookieTreeServerBoundCertNode::GetDetailedInfo() const { 398 CookieTreeServerBoundCertNode::GetDetailedInfo() const {
317 return DetailedInfo(parent()->parent()->GetTitle()).InitServerBoundCert( 399 return DetailedInfo().InitServerBoundCert(&*server_bound_cert_);
318 &*server_bound_cert_);
319 } 400 }
320 401
321 /////////////////////////////////////////////////////////////////////////////// 402 ///////////////////////////////////////////////////////////////////////////////
322 // CookieTreeRootNode, public: 403 // CookieTreeRootNode, public:
323 404
324 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model) 405 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model)
325 : model_(model) { 406 : model_(model) {
326 } 407 }
327 408
328 CookieTreeRootNode::~CookieTreeRootNode() {} 409 CookieTreeRootNode::~CookieTreeRootNode() {}
329 410
330 CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode( 411 CookieTreeHostNode* CookieTreeRootNode::GetOrCreateHostNode(
331 const GURL& url) { 412 const GURL& url) {
332 CookieTreeOriginNode origin_node(url); 413 scoped_ptr<CookieTreeHostNode> host_node(new CookieTreeHostNode(url));
333 414
334 // First see if there is an existing match. 415 // First see if there is an existing match.
335 std::vector<CookieTreeNode*>::iterator origin_node_iterator = 416 std::vector<CookieTreeNode*>::iterator host_node_iterator =
336 std::lower_bound(children().begin(), children().end(), &origin_node, 417 std::lower_bound(children().begin(), children().end(), host_node.get(),
337 OriginNodeComparator()); 418 HostNodeComparator());
338 419
339 if (origin_node_iterator != children().end() && 420 if (host_node_iterator != children().end() &&
340 WideToUTF16Hack(CookieTreeOriginNode::TitleForUrl(url)) == 421 host_node->GetTitle() == (*host_node_iterator)->GetTitle()) {
341 (*origin_node_iterator)->GetTitle()) 422 return static_cast<CookieTreeHostNode*>(*host_node_iterator);
342 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator); 423 }
343 // Node doesn't exist, create a new one and insert it into the (ordered) 424 // Node doesn't exist, create a new one and insert it into the (ordered)
344 // children. 425 // children.
345 CookieTreeOriginNode* retval = new CookieTreeOriginNode(url);
346 DCHECK(model_); 426 DCHECK(model_);
347 model_->Add(this, retval, (origin_node_iterator - children().begin())); 427 model_->Add(this, host_node.get(),
348 return retval; 428 (host_node_iterator - children().begin()));
429 return host_node.release();
349 } 430 }
350 431
351 CookiesTreeModel* CookieTreeRootNode::GetModel() const { 432 CookiesTreeModel* CookieTreeRootNode::GetModel() const {
352 return model_; 433 return model_;
353 } 434 }
354 435
355 CookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const { 436 CookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const {
356 return DetailedInfo(string16()).Init(DetailedInfo::TYPE_ROOT); 437 return DetailedInfo().Init(DetailedInfo::TYPE_ROOT);
357 } 438 }
358 439
359 /////////////////////////////////////////////////////////////////////////////// 440 ///////////////////////////////////////////////////////////////////////////////
360 // CookieTreeOriginNode, public: 441 // CookieTreeHostNode, public:
361 442
362 // static 443 // static
363 std::wstring CookieTreeOriginNode::TitleForUrl(const GURL& url) { 444 string16 CookieTreeHostNode::TitleForUrl(
445 const GURL& url) {
364 const std::string file_origin_node_name( 446 const std::string file_origin_node_name(
365 std::string(chrome::kFileScheme) + content::kStandardSchemeSeparator); 447 std::string(chrome::kFileScheme) + content::kStandardSchemeSeparator);
366 return UTF8ToWide(url.SchemeIsFile() ? file_origin_node_name : url.host()); 448 return UTF8ToUTF16(url.SchemeIsFile() ? file_origin_node_name : url.host());
367 } 449 }
368 450
369 CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url) 451 CookieTreeHostNode::CookieTreeHostNode(const GURL& url)
370 : CookieTreeNode(WideToUTF16Hack(TitleForUrl(url))), 452 : CookieTreeNode(TitleForUrl(url)),
371 cookies_child_(NULL), 453 cookies_child_(NULL),
372 databases_child_(NULL), 454 databases_child_(NULL),
373 local_storages_child_(NULL), 455 local_storages_child_(NULL),
374 session_storages_child_(NULL), 456 session_storages_child_(NULL),
375 appcaches_child_(NULL), 457 appcaches_child_(NULL),
376 indexed_dbs_child_(NULL), 458 indexed_dbs_child_(NULL),
377 file_systems_child_(NULL), 459 file_systems_child_(NULL),
378 quota_child_(NULL), 460 quota_child_(NULL),
379 server_bound_certs_child_(NULL), 461 server_bound_certs_child_(NULL),
380 url_(url) {} 462 url_(url),
463 canonicalized_host_(CanonicalizeHost(url)) {}
381 464
382 CookieTreeOriginNode::~CookieTreeOriginNode() {} 465 CookieTreeHostNode::~CookieTreeHostNode() {}
383 466
384 CookieTreeNode::DetailedInfo CookieTreeOriginNode::GetDetailedInfo() const { 467 CookieTreeNode::DetailedInfo CookieTreeHostNode::GetDetailedInfo() const {
385 return DetailedInfo(GetTitle()).Init(DetailedInfo::TYPE_ORIGIN); 468 return DetailedInfo().Init(DetailedInfo::TYPE_HOST);
386 } 469 }
387 470
388 CookieTreeCookiesNode* CookieTreeOriginNode::GetOrCreateCookiesNode() { 471 CookieTreeCookiesNode* CookieTreeHostNode::GetOrCreateCookiesNode() {
389 if (cookies_child_) 472 if (cookies_child_)
390 return cookies_child_; 473 return cookies_child_;
391 cookies_child_ = new CookieTreeCookiesNode; 474 cookies_child_ = new CookieTreeCookiesNode;
392 AddChildSortedByTitle(cookies_child_); 475 AddChildSortedByTitle(cookies_child_);
393 return cookies_child_; 476 return cookies_child_;
394 } 477 }
395 478
396 CookieTreeDatabasesNode* CookieTreeOriginNode::GetOrCreateDatabasesNode() { 479 CookieTreeDatabasesNode* CookieTreeHostNode::GetOrCreateDatabasesNode() {
397 if (databases_child_) 480 if (databases_child_)
398 return databases_child_; 481 return databases_child_;
399 databases_child_ = new CookieTreeDatabasesNode; 482 databases_child_ = new CookieTreeDatabasesNode;
400 AddChildSortedByTitle(databases_child_); 483 AddChildSortedByTitle(databases_child_);
401 return databases_child_; 484 return databases_child_;
402 } 485 }
403 486
404 CookieTreeLocalStoragesNode* 487 CookieTreeLocalStoragesNode*
405 CookieTreeOriginNode::GetOrCreateLocalStoragesNode() { 488 CookieTreeHostNode::GetOrCreateLocalStoragesNode() {
406 if (local_storages_child_) 489 if (local_storages_child_)
407 return local_storages_child_; 490 return local_storages_child_;
408 local_storages_child_ = new CookieTreeLocalStoragesNode; 491 local_storages_child_ = new CookieTreeLocalStoragesNode;
409 AddChildSortedByTitle(local_storages_child_); 492 AddChildSortedByTitle(local_storages_child_);
410 return local_storages_child_; 493 return local_storages_child_;
411 } 494 }
412 495
413 CookieTreeSessionStoragesNode* 496 CookieTreeSessionStoragesNode*
414 CookieTreeOriginNode::GetOrCreateSessionStoragesNode() { 497 CookieTreeHostNode::GetOrCreateSessionStoragesNode() {
415 if (session_storages_child_) 498 if (session_storages_child_)
416 return session_storages_child_; 499 return session_storages_child_;
417 session_storages_child_ = new CookieTreeSessionStoragesNode; 500 session_storages_child_ = new CookieTreeSessionStoragesNode;
418 AddChildSortedByTitle(session_storages_child_); 501 AddChildSortedByTitle(session_storages_child_);
419 return session_storages_child_; 502 return session_storages_child_;
420 } 503 }
421 504
422 CookieTreeAppCachesNode* CookieTreeOriginNode::GetOrCreateAppCachesNode() { 505 CookieTreeAppCachesNode* CookieTreeHostNode::GetOrCreateAppCachesNode() {
423 if (appcaches_child_) 506 if (appcaches_child_)
424 return appcaches_child_; 507 return appcaches_child_;
425 appcaches_child_ = new CookieTreeAppCachesNode; 508 appcaches_child_ = new CookieTreeAppCachesNode;
426 AddChildSortedByTitle(appcaches_child_); 509 AddChildSortedByTitle(appcaches_child_);
427 return appcaches_child_; 510 return appcaches_child_;
428 } 511 }
429 512
430 CookieTreeIndexedDBsNode* CookieTreeOriginNode::GetOrCreateIndexedDBsNode() { 513 CookieTreeIndexedDBsNode* CookieTreeHostNode::GetOrCreateIndexedDBsNode() {
431 if (indexed_dbs_child_) 514 if (indexed_dbs_child_)
432 return indexed_dbs_child_; 515 return indexed_dbs_child_;
433 indexed_dbs_child_ = new CookieTreeIndexedDBsNode; 516 indexed_dbs_child_ = new CookieTreeIndexedDBsNode;
434 AddChildSortedByTitle(indexed_dbs_child_); 517 AddChildSortedByTitle(indexed_dbs_child_);
435 return indexed_dbs_child_; 518 return indexed_dbs_child_;
436 } 519 }
437 520
438 CookieTreeFileSystemsNode* CookieTreeOriginNode::GetOrCreateFileSystemsNode() { 521 CookieTreeFileSystemsNode* CookieTreeHostNode::GetOrCreateFileSystemsNode() {
439 if (file_systems_child_) 522 if (file_systems_child_)
440 return file_systems_child_; 523 return file_systems_child_;
441 file_systems_child_ = new CookieTreeFileSystemsNode; 524 file_systems_child_ = new CookieTreeFileSystemsNode;
442 AddChildSortedByTitle(file_systems_child_); 525 AddChildSortedByTitle(file_systems_child_);
443 return file_systems_child_; 526 return file_systems_child_;
444 } 527 }
445 528
446 CookieTreeQuotaNode* CookieTreeOriginNode::UpdateOrCreateQuotaNode( 529 CookieTreeQuotaNode* CookieTreeHostNode::UpdateOrCreateQuotaNode(
447 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) { 530 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) {
448 if (quota_child_) 531 if (quota_child_)
449 return quota_child_; 532 return quota_child_;
450 quota_child_ = new CookieTreeQuotaNode(quota_info); 533 quota_child_ = new CookieTreeQuotaNode(quota_info);
451 AddChildSortedByTitle(quota_child_); 534 AddChildSortedByTitle(quota_child_);
452 return quota_child_; 535 return quota_child_;
453 } 536 }
454 537
455 CookieTreeServerBoundCertsNode* 538 CookieTreeServerBoundCertsNode*
456 CookieTreeOriginNode::GetOrCreateServerBoundCertsNode() { 539 CookieTreeHostNode::GetOrCreateServerBoundCertsNode() {
457 if (server_bound_certs_child_) 540 if (server_bound_certs_child_)
458 return server_bound_certs_child_; 541 return server_bound_certs_child_;
459 server_bound_certs_child_ = new CookieTreeServerBoundCertsNode; 542 server_bound_certs_child_ = new CookieTreeServerBoundCertsNode;
460 AddChildSortedByTitle(server_bound_certs_child_); 543 AddChildSortedByTitle(server_bound_certs_child_);
461 return server_bound_certs_child_; 544 return server_bound_certs_child_;
462 } 545 }
463 546
464 void CookieTreeOriginNode::CreateContentException( 547 void CookieTreeHostNode::CreateContentException(
465 CookieSettings* cookie_settings, ContentSetting setting) const { 548 CookieSettings* cookie_settings, ContentSetting setting) const {
466 DCHECK(setting == CONTENT_SETTING_ALLOW || 549 DCHECK(setting == CONTENT_SETTING_ALLOW ||
467 setting == CONTENT_SETTING_BLOCK || 550 setting == CONTENT_SETTING_BLOCK ||
468 setting == CONTENT_SETTING_SESSION_ONLY); 551 setting == CONTENT_SETTING_SESSION_ONLY);
469 if (CanCreateContentException()) { 552 if (CanCreateContentException()) {
470 cookie_settings->ResetCookieSetting( 553 cookie_settings->ResetCookieSetting(
471 ContentSettingsPattern::FromURLNoWildcard(url_), 554 ContentSettingsPattern::FromURLNoWildcard(url_),
472 ContentSettingsPattern::Wildcard()); 555 ContentSettingsPattern::Wildcard());
473 cookie_settings->SetCookieSetting( 556 cookie_settings->SetCookieSetting(
474 ContentSettingsPattern::FromURL(url_), 557 ContentSettingsPattern::FromURL(url_),
475 ContentSettingsPattern::Wildcard(), setting); 558 ContentSettingsPattern::Wildcard(), setting);
476 } 559 }
477 } 560 }
478 561
479 bool CookieTreeOriginNode::CanCreateContentException() const { 562 bool CookieTreeHostNode::CanCreateContentException() const {
480 return !url_.SchemeIsFile(); 563 return !url_.SchemeIsFile();
481 } 564 }
482 565
566 // static
567 std::string CookieTreeHostNode::CanonicalizeHost(const GURL& url) {
568 // The canonicalized representation makes the registry controlled domain
569 // come first, and then adds subdomains in reverse order, e.g.
570 // 1.mail.google.com would become google.com.mail.1, and then a standard
571 // string comparison works to order hosts by registry controlled domain
572 // first. Leading dots are ignored, ".google.com" is the same as
573 // "google.com".
574
575 if (url.SchemeIsFile()) {
576 return std::string(chrome::kFileScheme) +
577 content::kStandardSchemeSeparator;
578 }
579
580 std::string host = url.host();
581 std::string retval = net::RegistryControlledDomainService::
582 GetDomainAndRegistry(host);
583 if (!retval.length()) // Is an IP address or other special origin.
584 return host;
585
586 std::string::size_type position = host.rfind(retval);
587
588 // The host may be the registry controlled domain, in which case fail fast.
589 if (position == 0 || position == std::string::npos)
590 return host;
591
592 // If host is www.google.com, retval will contain google.com at this point.
593 // Start operating to the left of the registry controlled domain, e.g. in
594 // the www.google.com example, start at index 3.
595 --position;
596
597 // If position == 0, that means it's a dot; this will be ignored to treat
598 // ".google.com" the same as "google.com".
599 while (position > 0) {
600 retval += std::string(".");
601 // Copy up to the next dot. host[position] is a dot so start after it.
602 std::string::size_type next_dot = host.rfind(".", position - 1);
603 if (next_dot == std::string::npos) {
604 retval += host.substr(0, position);
605 break;
606 }
607 retval += host.substr(next_dot + 1, position - (next_dot + 1));
608 position = next_dot;
609 }
610 return retval;
611 }
612
483 /////////////////////////////////////////////////////////////////////////////// 613 ///////////////////////////////////////////////////////////////////////////////
484 // CookieTreeCookiesNode, public: 614 // CookieTreeCookiesNode, public:
485 615
486 CookieTreeCookiesNode::CookieTreeCookiesNode() 616 CookieTreeCookiesNode::CookieTreeCookiesNode()
487 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_COOKIES)) { 617 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_COOKIES)) {
488 } 618 }
489 619
490 CookieTreeCookiesNode::~CookieTreeCookiesNode() { 620 CookieTreeCookiesNode::~CookieTreeCookiesNode() {
491 } 621 }
492 622
493 CookieTreeNode::DetailedInfo CookieTreeCookiesNode::GetDetailedInfo() const { 623 CookieTreeNode::DetailedInfo CookieTreeCookiesNode::GetDetailedInfo() const {
494 return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_COOKIES); 624 return DetailedInfo().Init(DetailedInfo::TYPE_COOKIES);
495 } 625 }
496 626
497 /////////////////////////////////////////////////////////////////////////////// 627 ///////////////////////////////////////////////////////////////////////////////
498 // CookieTreeAppCachesNode, public: 628 // CookieTreeAppCachesNode, public:
499 629
500 CookieTreeAppCachesNode::CookieTreeAppCachesNode() 630 CookieTreeAppCachesNode::CookieTreeAppCachesNode()
501 : CookieTreeNode(l10n_util::GetStringUTF16( 631 : CookieTreeNode(l10n_util::GetStringUTF16(
502 IDS_COOKIES_APPLICATION_CACHES)) { 632 IDS_COOKIES_APPLICATION_CACHES)) {
503 } 633 }
504 634
505 CookieTreeAppCachesNode::~CookieTreeAppCachesNode() {} 635 CookieTreeAppCachesNode::~CookieTreeAppCachesNode() {}
506 636
507 CookieTreeNode::DetailedInfo CookieTreeAppCachesNode::GetDetailedInfo() const { 637 CookieTreeNode::DetailedInfo CookieTreeAppCachesNode::GetDetailedInfo() const {
508 return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_APPCACHES); 638 return DetailedInfo().Init(DetailedInfo::TYPE_APPCACHES);
509 } 639 }
510 640
511 /////////////////////////////////////////////////////////////////////////////// 641 ///////////////////////////////////////////////////////////////////////////////
512 // CookieTreeDatabasesNode, public: 642 // CookieTreeDatabasesNode, public:
513 643
514 CookieTreeDatabasesNode::CookieTreeDatabasesNode() 644 CookieTreeDatabasesNode::CookieTreeDatabasesNode()
515 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASES)) { 645 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASES)) {
516 } 646 }
517 647
518 CookieTreeDatabasesNode::~CookieTreeDatabasesNode() {} 648 CookieTreeDatabasesNode::~CookieTreeDatabasesNode() {}
519 649
520 CookieTreeNode::DetailedInfo CookieTreeDatabasesNode::GetDetailedInfo() const { 650 CookieTreeNode::DetailedInfo CookieTreeDatabasesNode::GetDetailedInfo() const {
521 return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_DATABASES); 651 return DetailedInfo().Init(DetailedInfo::TYPE_DATABASES);
522 } 652 }
523 653
524 /////////////////////////////////////////////////////////////////////////////// 654 ///////////////////////////////////////////////////////////////////////////////
525 // CookieTreeLocalStoragesNode, public: 655 // CookieTreeLocalStoragesNode, public:
526 656
527 CookieTreeLocalStoragesNode::CookieTreeLocalStoragesNode() 657 CookieTreeLocalStoragesNode::CookieTreeLocalStoragesNode()
528 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_LOCAL_STORAGE)) { 658 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_LOCAL_STORAGE)) {
529 } 659 }
530 660
531 CookieTreeLocalStoragesNode::~CookieTreeLocalStoragesNode() {} 661 CookieTreeLocalStoragesNode::~CookieTreeLocalStoragesNode() {}
532 662
533 CookieTreeNode::DetailedInfo 663 CookieTreeNode::DetailedInfo
534 CookieTreeLocalStoragesNode::GetDetailedInfo() const { 664 CookieTreeLocalStoragesNode::GetDetailedInfo() const {
535 return DetailedInfo(parent()->GetTitle()).Init( 665 return DetailedInfo().Init(DetailedInfo::TYPE_LOCAL_STORAGES);
536 DetailedInfo::TYPE_LOCAL_STORAGES);
537 } 666 }
538 667
539 /////////////////////////////////////////////////////////////////////////////// 668 ///////////////////////////////////////////////////////////////////////////////
540 // CookieTreeSessionStoragesNode, public: 669 // CookieTreeSessionStoragesNode, public:
541 670
542 CookieTreeSessionStoragesNode::CookieTreeSessionStoragesNode() 671 CookieTreeSessionStoragesNode::CookieTreeSessionStoragesNode()
543 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_SESSION_STORAGE)) { 672 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_SESSION_STORAGE)) {
544 } 673 }
545 674
546 CookieTreeSessionStoragesNode::~CookieTreeSessionStoragesNode() {} 675 CookieTreeSessionStoragesNode::~CookieTreeSessionStoragesNode() {}
547 676
548 CookieTreeNode::DetailedInfo 677 CookieTreeNode::DetailedInfo
549 CookieTreeSessionStoragesNode::GetDetailedInfo() const { 678 CookieTreeSessionStoragesNode::GetDetailedInfo() const {
550 return DetailedInfo(parent()->GetTitle()).Init( 679 return DetailedInfo().Init(DetailedInfo::TYPE_SESSION_STORAGES);
551 DetailedInfo::TYPE_SESSION_STORAGES);
552 } 680 }
553 681
554 /////////////////////////////////////////////////////////////////////////////// 682 ///////////////////////////////////////////////////////////////////////////////
555 // CookieTreeIndexedDBsNode, public: 683 // CookieTreeIndexedDBsNode, public:
556 684
557 CookieTreeIndexedDBsNode::CookieTreeIndexedDBsNode() 685 CookieTreeIndexedDBsNode::CookieTreeIndexedDBsNode()
558 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_INDEXED_DBS)) { 686 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_INDEXED_DBS)) {
559 } 687 }
560 688
561 CookieTreeIndexedDBsNode::~CookieTreeIndexedDBsNode() {} 689 CookieTreeIndexedDBsNode::~CookieTreeIndexedDBsNode() {}
562 690
563 CookieTreeNode::DetailedInfo 691 CookieTreeNode::DetailedInfo
564 CookieTreeIndexedDBsNode::GetDetailedInfo() const { 692 CookieTreeIndexedDBsNode::GetDetailedInfo() const {
565 return DetailedInfo(parent()->GetTitle()).Init( 693 return DetailedInfo().Init(DetailedInfo::TYPE_INDEXED_DBS);
566 DetailedInfo::TYPE_INDEXED_DBS);
567 } 694 }
568 695
569 /////////////////////////////////////////////////////////////////////////////// 696 ///////////////////////////////////////////////////////////////////////////////
570 // CookieTreeFileSystemsNode, public: 697 // CookieTreeFileSystemsNode, public:
571 698
572 CookieTreeFileSystemsNode::CookieTreeFileSystemsNode() 699 CookieTreeFileSystemsNode::CookieTreeFileSystemsNode()
573 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_FILE_SYSTEMS)) { 700 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_FILE_SYSTEMS)) {
574 } 701 }
575 702
576 CookieTreeFileSystemsNode::~CookieTreeFileSystemsNode() {} 703 CookieTreeFileSystemsNode::~CookieTreeFileSystemsNode() {}
577 704
578 CookieTreeNode::DetailedInfo 705 CookieTreeNode::DetailedInfo
579 CookieTreeFileSystemsNode::GetDetailedInfo() const { 706 CookieTreeFileSystemsNode::GetDetailedInfo() const {
580 return DetailedInfo(parent()->GetTitle()).Init( 707 return DetailedInfo().Init(DetailedInfo::TYPE_FILE_SYSTEMS);
581 DetailedInfo::TYPE_FILE_SYSTEMS);
582 } 708 }
583 709
584 /////////////////////////////////////////////////////////////////////////////// 710 ///////////////////////////////////////////////////////////////////////////////
585 // CookieTreeServerBoundCertsNode, public: 711 // CookieTreeServerBoundCertsNode, public:
586 712
587 CookieTreeServerBoundCertsNode::CookieTreeServerBoundCertsNode() 713 CookieTreeServerBoundCertsNode::CookieTreeServerBoundCertsNode()
588 : CookieTreeNode( 714 : CookieTreeNode(
589 l10n_util::GetStringUTF16(IDS_COOKIES_SERVER_BOUND_CERTS)) { 715 l10n_util::GetStringUTF16(IDS_COOKIES_SERVER_BOUND_CERTS)) {
590 } 716 }
591 717
592 CookieTreeServerBoundCertsNode::~CookieTreeServerBoundCertsNode() {} 718 CookieTreeServerBoundCertsNode::~CookieTreeServerBoundCertsNode() {}
593 719
594 CookieTreeNode::DetailedInfo 720 CookieTreeNode::DetailedInfo
595 CookieTreeServerBoundCertsNode::GetDetailedInfo() const { 721 CookieTreeServerBoundCertsNode::GetDetailedInfo() const {
596 return DetailedInfo(parent()->GetTitle()).Init( 722 return DetailedInfo().Init(DetailedInfo::TYPE_SERVER_BOUND_CERTS);
597 DetailedInfo::TYPE_SERVER_BOUND_CERTS);
598 } 723 }
599 724
600 void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) { 725 void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) {
601 DCHECK(new_child); 726 DCHECK(new_child);
602 std::vector<CookieTreeNode*>::iterator iter = 727 std::vector<CookieTreeNode*>::iterator iter =
603 std::lower_bound(children().begin(), children().end(), new_child, 728 std::lower_bound(children().begin(), children().end(), new_child,
604 NodeTitleComparator()); 729 NodeTitleComparator());
605 GetModel()->Add(this, new_child, iter - children().begin()); 730 GetModel()->Add(this, new_child, iter - children().begin());
606 } 731 }
607 732
608 /////////////////////////////////////////////////////////////////////////////// 733 ///////////////////////////////////////////////////////////////////////////////
609 // CookiesTreeModel, public: 734 // CookiesTreeModel, public:
610 735
611 CookiesTreeModel::CookiesTreeModel( 736 CookiesTreeModel::CookiesTreeModel(
612 BrowsingDataCookieHelper* cookie_helper, 737 BrowsingDataCookieHelper* cookie_helper,
613 BrowsingDataDatabaseHelper* database_helper, 738 BrowsingDataDatabaseHelper* database_helper,
614 BrowsingDataLocalStorageHelper* local_storage_helper, 739 BrowsingDataLocalStorageHelper* local_storage_helper,
615 BrowsingDataLocalStorageHelper* session_storage_helper, 740 BrowsingDataLocalStorageHelper* session_storage_helper,
616 BrowsingDataAppCacheHelper* appcache_helper, 741 BrowsingDataAppCacheHelper* appcache_helper,
617 BrowsingDataIndexedDBHelper* indexed_db_helper, 742 BrowsingDataIndexedDBHelper* indexed_db_helper,
618 BrowsingDataFileSystemHelper* file_system_helper, 743 BrowsingDataFileSystemHelper* file_system_helper,
619 BrowsingDataQuotaHelper* quota_helper, 744 BrowsingDataQuotaHelper* quota_helper,
620 BrowsingDataServerBoundCertHelper* server_bound_cert_helper, 745 BrowsingDataServerBoundCertHelper* server_bound_cert_helper,
746 ExtensionSpecialStoragePolicy* special_storage_policy,
621 bool use_cookie_source) 747 bool use_cookie_source)
622 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>( 748 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>(
623 new CookieTreeRootNode(this))), 749 new CookieTreeRootNode(this))),
624 appcache_helper_(appcache_helper), 750 appcache_helper_(appcache_helper),
625 cookie_helper_(cookie_helper), 751 cookie_helper_(cookie_helper),
626 database_helper_(database_helper), 752 database_helper_(database_helper),
627 local_storage_helper_(local_storage_helper), 753 local_storage_helper_(local_storage_helper),
628 session_storage_helper_(session_storage_helper), 754 session_storage_helper_(session_storage_helper),
629 indexed_db_helper_(indexed_db_helper), 755 indexed_db_helper_(indexed_db_helper),
630 file_system_helper_(file_system_helper), 756 file_system_helper_(file_system_helper),
631 quota_helper_(quota_helper), 757 quota_helper_(quota_helper),
632 server_bound_cert_helper_(server_bound_cert_helper), 758 server_bound_cert_helper_(server_bound_cert_helper),
759 special_storage_policy_(special_storage_policy),
633 batch_update_(0), 760 batch_update_(0),
634 use_cookie_source_(use_cookie_source), 761 use_cookie_source_(use_cookie_source),
635 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { 762 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
636 DCHECK(cookie_helper_); 763 DCHECK(cookie_helper_);
637 cookie_helper_->StartFetching( 764 cookie_helper_->StartFetching(
638 base::Bind(&CookiesTreeModel::OnCookiesModelInfoLoaded, 765 base::Bind(&CookiesTreeModel::OnCookiesModelInfoLoaded,
639 weak_ptr_factory_.GetWeakPtr())); 766 weak_ptr_factory_.GetWeakPtr()));
640 DCHECK(database_helper_); 767 DCHECK(database_helper_);
641 database_helper_->StartFetching( 768 database_helper_->StartFetching(
642 base::Bind(&CookiesTreeModel::OnDatabaseModelInfoLoaded, 769 base::Bind(&CookiesTreeModel::OnDatabaseModelInfoLoaded,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 icons->push_back(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 827 icons->push_back(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
701 IDR_COOKIE_STORAGE_ICON)); 828 IDR_COOKIE_STORAGE_ICON));
702 } 829 }
703 830
704 // Returns the index of the icon to use for |node|. Return -1 to use the 831 // Returns the index of the icon to use for |node|. Return -1 to use the
705 // default icon. The index is relative to the list of icons returned from 832 // default icon. The index is relative to the list of icons returned from
706 // GetIcons. 833 // GetIcons.
707 int CookiesTreeModel::GetIconIndex(ui::TreeModelNode* node) { 834 int CookiesTreeModel::GetIconIndex(ui::TreeModelNode* node) {
708 CookieTreeNode* ct_node = static_cast<CookieTreeNode*>(node); 835 CookieTreeNode* ct_node = static_cast<CookieTreeNode*>(node);
709 switch (ct_node->GetDetailedInfo().node_type) { 836 switch (ct_node->GetDetailedInfo().node_type) {
710 case CookieTreeNode::DetailedInfo::TYPE_ORIGIN: 837 case CookieTreeNode::DetailedInfo::TYPE_HOST:
711 return ORIGIN; 838 return ORIGIN;
712 case CookieTreeNode::DetailedInfo::TYPE_COOKIE: 839 case CookieTreeNode::DetailedInfo::TYPE_COOKIE:
713 return COOKIE; 840 return COOKIE;
714 case CookieTreeNode::DetailedInfo::TYPE_DATABASE: 841 case CookieTreeNode::DetailedInfo::TYPE_DATABASE:
715 return DATABASE; 842 return DATABASE;
716 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE: 843 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE:
717 return DATABASE; // close enough 844 return DATABASE; // close enough
718 case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE: 845 case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE:
719 return DATABASE; // ditto 846 return DATABASE; // ditto
720 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE: 847 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE:
(...skipping 26 matching lines...) Expand all
747 void CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) { 874 void CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) {
748 if (cookie_node == GetRoot()) 875 if (cookie_node == GetRoot())
749 return; 876 return;
750 cookie_node->DeleteStoredObjects(); 877 cookie_node->DeleteStoredObjects();
751 CookieTreeNode* parent_node = cookie_node->parent(); 878 CookieTreeNode* parent_node = cookie_node->parent();
752 delete Remove(parent_node, cookie_node); 879 delete Remove(parent_node, cookie_node);
753 if (parent_node->empty()) 880 if (parent_node->empty())
754 DeleteCookieNode(parent_node); 881 DeleteCookieNode(parent_node);
755 } 882 }
756 883
757 void CookiesTreeModel::UpdateSearchResults(const std::wstring& filter) { 884 void CookiesTreeModel::UpdateSearchResults(const string16& filter) {
758 CookieTreeNode* root = GetRoot(); 885 CookieTreeNode* root = GetRoot();
759 int num_children = root->child_count(); 886 int num_children = root->child_count();
760 NotifyObserverBeginBatch(); 887 NotifyObserverBeginBatch();
761 for (int i = num_children - 1; i >= 0; --i) 888 for (int i = num_children - 1; i >= 0; --i)
762 delete Remove(root, root->GetChild(i)); 889 delete Remove(root, root->GetChild(i));
763 PopulateCookieInfoWithFilter(filter); 890 PopulateCookieInfoWithFilter(filter);
764 PopulateDatabaseInfoWithFilter(filter); 891 PopulateDatabaseInfoWithFilter(filter);
765 PopulateLocalStorageInfoWithFilter(filter); 892 PopulateLocalStorageInfoWithFilter(filter);
766 PopulateSessionStorageInfoWithFilter(filter); 893 PopulateSessionStorageInfoWithFilter(filter);
767 PopulateAppCacheInfoWithFilter(filter); 894 PopulateAppCacheInfoWithFilter(filter);
768 PopulateIndexedDBInfoWithFilter(filter); 895 PopulateIndexedDBInfoWithFilter(filter);
769 PopulateFileSystemInfoWithFilter(filter); 896 PopulateFileSystemInfoWithFilter(filter);
770 PopulateQuotaInfoWithFilter(filter); 897 PopulateQuotaInfoWithFilter(filter);
771 PopulateServerBoundCertInfoWithFilter(filter); 898 PopulateServerBoundCertInfoWithFilter(filter);
772 NotifyObserverTreeNodeChanged(root); 899 NotifyObserverTreeNodeChanged(root);
773 NotifyObserverEndBatch(); 900 NotifyObserverEndBatch();
774 } 901 }
775 902
903 const ExtensionSet* CookiesTreeModel::ExtensionsProtectingNode(
904 const CookieTreeNode& cookie_node) {
905 if (!special_storage_policy_)
906 return NULL;
907
908 CookieTreeNode::DetailedInfo info = cookie_node.GetDetailedInfo();
909
910 if (!TypeIsProtected(info.node_type))
911 return NULL;
912
913 DCHECK(!info.origin.is_empty());
914 return special_storage_policy_->ExtensionsProtectingOrigin(info.origin);
915 }
916
776 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) { 917 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) {
777 cookies_observer_list_.AddObserver(observer); 918 cookies_observer_list_.AddObserver(observer);
778 // Call super so that TreeNodeModel can notify, too. 919 // Call super so that TreeNodeModel can notify, too.
779 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer); 920 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer);
780 } 921 }
781 922
782 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) { 923 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) {
783 cookies_observer_list_.RemoveObserver(observer); 924 cookies_observer_list_.RemoveObserver(observer);
784 // Call super so that TreeNodeModel doesn't have dead pointers. 925 // Call super so that TreeNodeModel doesn't have dead pointers.
785 ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer); 926 ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer);
(...skipping 11 matching lines...) Expand all
797 return; 938 return;
798 939
799 for (InfoByOrigin::const_iterator origin = 940 for (InfoByOrigin::const_iterator origin =
800 appcache_info->infos_by_origin.begin(); 941 appcache_info->infos_by_origin.begin();
801 origin != appcache_info->infos_by_origin.end(); ++origin) { 942 origin != appcache_info->infos_by_origin.end(); ++origin) {
802 std::list<AppCacheInfo>& info_list = appcache_info_[origin->first]; 943 std::list<AppCacheInfo>& info_list = appcache_info_[origin->first];
803 info_list.insert( 944 info_list.insert(
804 info_list.begin(), origin->second.begin(), origin->second.end()); 945 info_list.begin(), origin->second.begin(), origin->second.end());
805 } 946 }
806 947
807 PopulateAppCacheInfoWithFilter(std::wstring()); 948 PopulateAppCacheInfoWithFilter(string16());
808 } 949 }
809 950
810 void CookiesTreeModel::PopulateAppCacheInfoWithFilter( 951 void CookiesTreeModel::PopulateAppCacheInfoWithFilter(
811 const std::wstring& filter) { 952 const string16& filter) {
812 using appcache::AppCacheInfo; 953 using appcache::AppCacheInfo;
813 typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin; 954 typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin;
814 955
815 if (appcache_info_.empty()) 956 if (appcache_info_.empty())
816 return; 957 return;
817 958
818 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 959 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
819 NotifyObserverBeginBatch(); 960 NotifyObserverBeginBatch();
820 for (InfoByOrigin::iterator origin = appcache_info_.begin(); 961 for (InfoByOrigin::iterator origin = appcache_info_.begin();
821 origin != appcache_info_.end(); ++origin) { 962 origin != appcache_info_.end(); ++origin) {
822 std::wstring origin_node_name = UTF8ToWide(origin->first.host()); 963 string16 host_node_name = UTF8ToUTF16(origin->first.host());
823 if (filter.empty() || 964 if (filter.empty() ||
824 (origin_node_name.find(filter) != std::wstring::npos)) { 965 (host_node_name.find(filter) != std::string::npos)) {
825 CookieTreeOriginNode* origin_node = 966 CookieTreeHostNode* host_node =
826 root->GetOrCreateOriginNode(origin->first); 967 root->GetOrCreateHostNode(origin->first);
827 CookieTreeAppCachesNode* appcaches_node = 968 CookieTreeAppCachesNode* appcaches_node =
828 origin_node->GetOrCreateAppCachesNode(); 969 host_node->GetOrCreateAppCachesNode();
829 970
830 for (std::list<AppCacheInfo>::iterator info = origin->second.begin(); 971 for (std::list<AppCacheInfo>::iterator info = origin->second.begin();
831 info != origin->second.end(); ++info) { 972 info != origin->second.end(); ++info) {
832 appcaches_node->AddAppCacheNode( 973 appcaches_node->AddAppCacheNode(
833 new CookieTreeAppCacheNode(origin->first, info)); 974 new CookieTreeAppCacheNode(origin->first, info));
834 } 975 }
835 } 976 }
836 } 977 }
837 NotifyObserverTreeNodeChanged(root); 978 NotifyObserverTreeNodeChanged(root);
838 NotifyObserverEndBatch(); 979 NotifyObserverEndBatch();
839 } 980 }
840 981
841 void CookiesTreeModel::OnCookiesModelInfoLoaded( 982 void CookiesTreeModel::OnCookiesModelInfoLoaded(
842 const net::CookieList& cookie_list) { 983 const net::CookieList& cookie_list) {
843 cookie_list_.insert(cookie_list_.begin(), 984 cookie_list_.insert(cookie_list_.begin(),
844 cookie_list.begin(), 985 cookie_list.begin(),
845 cookie_list.end()); 986 cookie_list.end());
846 PopulateCookieInfoWithFilter(std::wstring()); 987 PopulateCookieInfoWithFilter(string16());
847 } 988 }
848 989
849 void CookiesTreeModel::PopulateCookieInfoWithFilter( 990 void CookiesTreeModel::PopulateCookieInfoWithFilter(
850 const std::wstring& filter) { 991 const string16& filter) {
851 // mmargh mmargh mmargh! delicious! 992 // mmargh mmargh mmargh! delicious!
852 993
853 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 994 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
854 NotifyObserverBeginBatch(); 995 NotifyObserverBeginBatch();
855 for (CookieList::iterator it = cookie_list_.begin(); 996 for (CookieList::iterator it = cookie_list_.begin();
856 it != cookie_list_.end(); ++it) { 997 it != cookie_list_.end(); ++it) {
857 std::string source_string = it->Source(); 998 std::string source_string = it->Source();
858 if (source_string.empty() || !use_cookie_source_) { 999 if (source_string.empty() || !use_cookie_source_) {
859 std::string domain = it->Domain(); 1000 std::string domain = it->Domain();
860 if (domain.length() > 1 && domain[0] == '.') 1001 if (domain.length() > 1 && domain[0] == '.')
861 domain = domain.substr(1); 1002 domain = domain.substr(1);
862 1003
863 // We treat secure cookies just the same as normal ones. 1004 // We treat secure cookies just the same as normal ones.
864 source_string = std::string(chrome::kHttpScheme) + 1005 source_string = std::string(chrome::kHttpScheme) +
865 content::kStandardSchemeSeparator + domain + "/"; 1006 content::kStandardSchemeSeparator + domain + "/";
866 } 1007 }
867 1008
868 GURL source(source_string); 1009 GURL source(source_string);
869 if (!filter.size() || 1010 if (!filter.size() ||
870 (CookieTreeOriginNode::TitleForUrl(source).find(filter) != 1011 (CookieTreeHostNode::TitleForUrl(source).find(filter) !=
871 std::string::npos)) { 1012 std::string::npos)) {
872 CookieTreeOriginNode* origin_node = 1013 CookieTreeHostNode* host_node =
873 root->GetOrCreateOriginNode(source); 1014 root->GetOrCreateHostNode(source);
874 CookieTreeCookiesNode* cookies_node = 1015 CookieTreeCookiesNode* cookies_node =
875 origin_node->GetOrCreateCookiesNode(); 1016 host_node->GetOrCreateCookiesNode();
876 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(it); 1017 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(it);
877 cookies_node->AddCookieNode(new_cookie); 1018 cookies_node->AddCookieNode(new_cookie);
878 } 1019 }
879 } 1020 }
880 NotifyObserverTreeNodeChanged(root); 1021 NotifyObserverTreeNodeChanged(root);
881 NotifyObserverEndBatch(); 1022 NotifyObserverEndBatch();
882 } 1023 }
883 1024
884 void CookiesTreeModel::OnDatabaseModelInfoLoaded( 1025 void CookiesTreeModel::OnDatabaseModelInfoLoaded(
885 const DatabaseInfoList& database_info) { 1026 const DatabaseInfoList& database_info) {
886 database_info_list_ = database_info; 1027 database_info_list_ = database_info;
887 PopulateDatabaseInfoWithFilter(std::wstring()); 1028 PopulateDatabaseInfoWithFilter(string16());
888 } 1029 }
889 1030
890 void CookiesTreeModel::PopulateDatabaseInfoWithFilter( 1031 void CookiesTreeModel::PopulateDatabaseInfoWithFilter(
891 const std::wstring& filter) { 1032 const string16& filter) {
892 if (database_info_list_.empty()) 1033 if (database_info_list_.empty())
893 return; 1034 return;
894 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1035 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
895 NotifyObserverBeginBatch(); 1036 NotifyObserverBeginBatch();
896 for (DatabaseInfoList::iterator database_info = database_info_list_.begin(); 1037 for (DatabaseInfoList::iterator database_info = database_info_list_.begin();
897 database_info != database_info_list_.end(); 1038 database_info != database_info_list_.end();
898 ++database_info) { 1039 ++database_info) {
899 GURL origin(database_info->origin); 1040 GURL origin(database_info->origin);
900 1041
901 if (!filter.size() || 1042 if (!filter.size() ||
902 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1043 (CookieTreeHostNode::TitleForUrl(origin).find(filter) !=
903 std::wstring::npos)) { 1044 std::string::npos)) {
904 CookieTreeOriginNode* origin_node = 1045 CookieTreeHostNode* host_node =
905 root->GetOrCreateOriginNode(origin); 1046 root->GetOrCreateHostNode(origin);
906 CookieTreeDatabasesNode* databases_node = 1047 CookieTreeDatabasesNode* databases_node =
907 origin_node->GetOrCreateDatabasesNode(); 1048 host_node->GetOrCreateDatabasesNode();
908 databases_node->AddDatabaseNode( 1049 databases_node->AddDatabaseNode(
909 new CookieTreeDatabaseNode(database_info)); 1050 new CookieTreeDatabaseNode(database_info));
910 } 1051 }
911 } 1052 }
912 NotifyObserverTreeNodeChanged(root); 1053 NotifyObserverTreeNodeChanged(root);
913 NotifyObserverEndBatch(); 1054 NotifyObserverEndBatch();
914 } 1055 }
915 1056
916 void CookiesTreeModel::OnLocalStorageModelInfoLoaded( 1057 void CookiesTreeModel::OnLocalStorageModelInfoLoaded(
917 const LocalStorageInfoList& local_storage_info) { 1058 const LocalStorageInfoList& local_storage_info) {
918 local_storage_info_list_ = local_storage_info; 1059 local_storage_info_list_ = local_storage_info;
919 PopulateLocalStorageInfoWithFilter(std::wstring()); 1060 PopulateLocalStorageInfoWithFilter(string16());
920 } 1061 }
921 1062
922 void CookiesTreeModel::PopulateLocalStorageInfoWithFilter( 1063 void CookiesTreeModel::PopulateLocalStorageInfoWithFilter(
923 const std::wstring& filter) { 1064 const string16& filter) {
924 if (local_storage_info_list_.empty()) 1065 if (local_storage_info_list_.empty())
925 return; 1066 return;
926 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1067 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
927 NotifyObserverBeginBatch(); 1068 NotifyObserverBeginBatch();
928 for (LocalStorageInfoList::iterator local_storage_info = 1069 for (LocalStorageInfoList::iterator local_storage_info =
929 local_storage_info_list_.begin(); 1070 local_storage_info_list_.begin();
930 local_storage_info != local_storage_info_list_.end(); 1071 local_storage_info != local_storage_info_list_.end();
931 ++local_storage_info) { 1072 ++local_storage_info) {
932 const GURL& origin(local_storage_info->origin_url); 1073 const GURL& origin(local_storage_info->origin_url);
933 1074
934 if (!filter.size() || 1075 if (!filter.size() ||
935 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1076 (CookieTreeHostNode::TitleForUrl(origin).find(filter) !=
936 std::wstring::npos)) { 1077 std::string::npos)) {
937 CookieTreeOriginNode* origin_node = 1078 CookieTreeHostNode* host_node =
938 root->GetOrCreateOriginNode(origin); 1079 root->GetOrCreateHostNode(origin);
939 CookieTreeLocalStoragesNode* local_storages_node = 1080 CookieTreeLocalStoragesNode* local_storages_node =
940 origin_node->GetOrCreateLocalStoragesNode(); 1081 host_node->GetOrCreateLocalStoragesNode();
941 local_storages_node->AddLocalStorageNode( 1082 local_storages_node->AddLocalStorageNode(
942 new CookieTreeLocalStorageNode(local_storage_info)); 1083 new CookieTreeLocalStorageNode(local_storage_info));
943 } 1084 }
944 } 1085 }
945 NotifyObserverTreeNodeChanged(root); 1086 NotifyObserverTreeNodeChanged(root);
946 NotifyObserverEndBatch(); 1087 NotifyObserverEndBatch();
947 } 1088 }
948 1089
949 void CookiesTreeModel::OnSessionStorageModelInfoLoaded( 1090 void CookiesTreeModel::OnSessionStorageModelInfoLoaded(
950 const LocalStorageInfoList& session_storage_info) { 1091 const LocalStorageInfoList& session_storage_info) {
951 session_storage_info_list_ = session_storage_info; 1092 session_storage_info_list_ = session_storage_info;
952 PopulateSessionStorageInfoWithFilter(std::wstring()); 1093 PopulateSessionStorageInfoWithFilter(string16());
953 } 1094 }
954 1095
955 void CookiesTreeModel::PopulateSessionStorageInfoWithFilter( 1096 void CookiesTreeModel::PopulateSessionStorageInfoWithFilter(
956 const std::wstring& filter) { 1097 const string16& filter) {
957 if (session_storage_info_list_.empty()) 1098 if (session_storage_info_list_.empty())
958 return; 1099 return;
959 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1100 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
960 NotifyObserverBeginBatch(); 1101 NotifyObserverBeginBatch();
961 for (LocalStorageInfoList::iterator session_storage_info = 1102 for (LocalStorageInfoList::iterator session_storage_info =
962 session_storage_info_list_.begin(); 1103 session_storage_info_list_.begin();
963 session_storage_info != session_storage_info_list_.end(); 1104 session_storage_info != session_storage_info_list_.end();
964 ++session_storage_info) { 1105 ++session_storage_info) {
965 const GURL& origin = session_storage_info->origin_url; 1106 const GURL& origin = session_storage_info->origin_url;
966 if (!filter.size() || 1107 if (!filter.size() ||
967 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1108 (CookieTreeHostNode::TitleForUrl(origin).find(filter) !=
968 std::wstring::npos)) { 1109 std::string::npos)) {
969 CookieTreeOriginNode* origin_node = 1110 CookieTreeHostNode* host_node =
970 root->GetOrCreateOriginNode(origin); 1111 root->GetOrCreateHostNode(origin);
971 CookieTreeSessionStoragesNode* session_storages_node = 1112 CookieTreeSessionStoragesNode* session_storages_node =
972 origin_node->GetOrCreateSessionStoragesNode(); 1113 host_node->GetOrCreateSessionStoragesNode();
973 session_storages_node->AddSessionStorageNode( 1114 session_storages_node->AddSessionStorageNode(
974 new CookieTreeSessionStorageNode(session_storage_info)); 1115 new CookieTreeSessionStorageNode(session_storage_info));
975 } 1116 }
976 } 1117 }
977 NotifyObserverTreeNodeChanged(root); 1118 NotifyObserverTreeNodeChanged(root);
978 NotifyObserverEndBatch(); 1119 NotifyObserverEndBatch();
979 } 1120 }
980 1121
981 void CookiesTreeModel::OnIndexedDBModelInfoLoaded( 1122 void CookiesTreeModel::OnIndexedDBModelInfoLoaded(
982 const IndexedDBInfoList& indexed_db_info) { 1123 const IndexedDBInfoList& indexed_db_info) {
983 indexed_db_info_list_ = indexed_db_info; 1124 indexed_db_info_list_ = indexed_db_info;
984 PopulateIndexedDBInfoWithFilter(std::wstring()); 1125 PopulateIndexedDBInfoWithFilter(string16());
985 } 1126 }
986 1127
987 void CookiesTreeModel::PopulateIndexedDBInfoWithFilter( 1128 void CookiesTreeModel::PopulateIndexedDBInfoWithFilter(
988 const std::wstring& filter) { 1129 const string16& filter) {
989 if (indexed_db_info_list_.empty()) 1130 if (indexed_db_info_list_.empty())
990 return; 1131 return;
991 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1132 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
992 NotifyObserverBeginBatch(); 1133 NotifyObserverBeginBatch();
993 for (IndexedDBInfoList::iterator indexed_db_info = 1134 for (IndexedDBInfoList::iterator indexed_db_info =
994 indexed_db_info_list_.begin(); 1135 indexed_db_info_list_.begin();
995 indexed_db_info != indexed_db_info_list_.end(); 1136 indexed_db_info != indexed_db_info_list_.end();
996 ++indexed_db_info) { 1137 ++indexed_db_info) {
997 const GURL& origin = indexed_db_info->origin; 1138 const GURL& origin = indexed_db_info->origin;
998 1139
999 if (!filter.size() || 1140 if (!filter.size() ||
1000 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1141 (CookieTreeHostNode::TitleForUrl(origin).find(filter) !=
1001 std::wstring::npos)) { 1142 std::string::npos)) {
1002 CookieTreeOriginNode* origin_node = 1143 CookieTreeHostNode* host_node =
1003 root->GetOrCreateOriginNode(origin); 1144 root->GetOrCreateHostNode(origin);
1004 CookieTreeIndexedDBsNode* indexed_dbs_node = 1145 CookieTreeIndexedDBsNode* indexed_dbs_node =
1005 origin_node->GetOrCreateIndexedDBsNode(); 1146 host_node->GetOrCreateIndexedDBsNode();
1006 indexed_dbs_node->AddIndexedDBNode( 1147 indexed_dbs_node->AddIndexedDBNode(
1007 new CookieTreeIndexedDBNode(indexed_db_info)); 1148 new CookieTreeIndexedDBNode(indexed_db_info));
1008 } 1149 }
1009 } 1150 }
1010 NotifyObserverTreeNodeChanged(root); 1151 NotifyObserverTreeNodeChanged(root);
1011 NotifyObserverEndBatch(); 1152 NotifyObserverEndBatch();
1012 } 1153 }
1013 1154
1014 void CookiesTreeModel::OnFileSystemModelInfoLoaded( 1155 void CookiesTreeModel::OnFileSystemModelInfoLoaded(
1015 const FileSystemInfoList& file_system_info) { 1156 const FileSystemInfoList& file_system_info) {
1016 file_system_info_list_ = file_system_info; 1157 file_system_info_list_ = file_system_info;
1017 PopulateFileSystemInfoWithFilter(std::wstring()); 1158 PopulateFileSystemInfoWithFilter(string16());
1018 } 1159 }
1019 1160
1020 void CookiesTreeModel::PopulateFileSystemInfoWithFilter( 1161 void CookiesTreeModel::PopulateFileSystemInfoWithFilter(
1021 const std::wstring& filter) { 1162 const string16& filter) {
1022 if (file_system_info_list_.empty()) 1163 if (file_system_info_list_.empty())
1023 return; 1164 return;
1024 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1165 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1025 NotifyObserverBeginBatch(); 1166 NotifyObserverBeginBatch();
1026 for (FileSystemInfoList::iterator file_system_info = 1167 for (FileSystemInfoList::iterator file_system_info =
1027 file_system_info_list_.begin(); 1168 file_system_info_list_.begin();
1028 file_system_info != file_system_info_list_.end(); 1169 file_system_info != file_system_info_list_.end();
1029 ++file_system_info) { 1170 ++file_system_info) {
1030 GURL origin(file_system_info->origin); 1171 GURL origin(file_system_info->origin);
1031 1172
1032 if (!filter.size() || 1173 if (!filter.size() ||
1033 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1174 (CookieTreeHostNode::TitleForUrl(origin).find(filter) !=
1034 std::wstring::npos)) { 1175 std::string::npos)) {
1035 CookieTreeOriginNode* origin_node = 1176 CookieTreeHostNode* host_node =
1036 root->GetOrCreateOriginNode(origin); 1177 root->GetOrCreateHostNode(origin);
1037 CookieTreeFileSystemsNode* file_systems_node = 1178 CookieTreeFileSystemsNode* file_systems_node =
1038 origin_node->GetOrCreateFileSystemsNode(); 1179 host_node->GetOrCreateFileSystemsNode();
1039 file_systems_node->AddFileSystemNode( 1180 file_systems_node->AddFileSystemNode(
1040 new CookieTreeFileSystemNode(file_system_info)); 1181 new CookieTreeFileSystemNode(file_system_info));
1041 } 1182 }
1042 } 1183 }
1043 NotifyObserverTreeNodeChanged(root); 1184 NotifyObserverTreeNodeChanged(root);
1044 NotifyObserverEndBatch(); 1185 NotifyObserverEndBatch();
1045 } 1186 }
1046 1187
1047 void CookiesTreeModel::OnQuotaModelInfoLoaded( 1188 void CookiesTreeModel::OnQuotaModelInfoLoaded(
1048 const QuotaInfoArray& quota_info) { 1189 const QuotaInfoArray& quota_info) {
1049 quota_info_list_ = quota_info; 1190 quota_info_list_ = quota_info;
1050 PopulateQuotaInfoWithFilter(std::wstring()); 1191 PopulateQuotaInfoWithFilter(string16());
1051 } 1192 }
1052 1193
1053 void CookiesTreeModel::PopulateQuotaInfoWithFilter( 1194 void CookiesTreeModel::PopulateQuotaInfoWithFilter(
1054 const std::wstring& filter) { 1195 const string16& filter) {
1055 if (quota_info_list_.empty()) 1196 if (quota_info_list_.empty())
1056 return; 1197 return;
1057 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1198 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1058 NotifyObserverBeginBatch(); 1199 NotifyObserverBeginBatch();
1059 for (QuotaInfoArray::iterator quota_info = quota_info_list_.begin(); 1200 for (QuotaInfoArray::iterator quota_info = quota_info_list_.begin();
1060 quota_info != quota_info_list_.end(); 1201 quota_info != quota_info_list_.end();
1061 ++quota_info) { 1202 ++quota_info) {
1062 if (!filter.size() || 1203 if (!filter.size() ||
1063 (UTF8ToWide(quota_info->host).find(filter) != std::wstring::npos)) { 1204 (UTF8ToUTF16(quota_info->host).find(filter) != std::string::npos)) {
1064 CookieTreeOriginNode* origin_node = 1205 CookieTreeHostNode* host_node =
1065 root->GetOrCreateOriginNode(GURL("http://" + quota_info->host)); 1206 root->GetOrCreateHostNode(GURL("http://" + quota_info->host));
1066 origin_node->UpdateOrCreateQuotaNode(quota_info); 1207 host_node->UpdateOrCreateQuotaNode(quota_info);
1067 } 1208 }
1068 } 1209 }
1069 NotifyObserverTreeNodeChanged(root); 1210 NotifyObserverTreeNodeChanged(root);
1070 NotifyObserverEndBatch(); 1211 NotifyObserverEndBatch();
1071 } 1212 }
1072 1213
1073 void CookiesTreeModel::OnServerBoundCertModelInfoLoaded( 1214 void CookiesTreeModel::OnServerBoundCertModelInfoLoaded(
1074 const ServerBoundCertList& cert_list) { 1215 const ServerBoundCertList& cert_list) {
1075 server_bound_cert_list_ = cert_list; 1216 server_bound_cert_list_ = cert_list;
1076 PopulateServerBoundCertInfoWithFilter(std::wstring()); 1217 PopulateServerBoundCertInfoWithFilter(string16());
1077 } 1218 }
1078 1219
1079 void CookiesTreeModel::PopulateServerBoundCertInfoWithFilter( 1220 void CookiesTreeModel::PopulateServerBoundCertInfoWithFilter(
1080 const std::wstring& filter) { 1221 const string16& filter) {
1081 if (server_bound_cert_list_.empty()) 1222 if (server_bound_cert_list_.empty())
1082 return; 1223 return;
1083 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1224 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1084 NotifyObserverBeginBatch(); 1225 NotifyObserverBeginBatch();
1085 for (ServerBoundCertList::iterator cert_info = 1226 for (ServerBoundCertList::iterator cert_info =
1086 server_bound_cert_list_.begin(); 1227 server_bound_cert_list_.begin();
1087 cert_info != server_bound_cert_list_.end(); 1228 cert_info != server_bound_cert_list_.end();
1088 ++cert_info) { 1229 ++cert_info) {
1089 GURL origin(cert_info->server_identifier()); 1230 GURL origin(cert_info->server_identifier());
1090 if (!origin.is_valid()) { 1231 if (!origin.is_valid()) {
1091 // Domain Bound Cert. Make a valid URL to satisfy the 1232 // Domain Bound Cert. Make a valid URL to satisfy the
1092 // CookieTreeRootNode::GetOrCreateOriginNode interface. 1233 // CookieTreeRootNode::GetOrCreateHostNode interface.
1093 origin = GURL(std::string(chrome::kHttpsScheme) + 1234 origin = GURL(std::string(chrome::kHttpsScheme) +
1094 content::kStandardSchemeSeparator + 1235 content::kStandardSchemeSeparator +
1095 cert_info->server_identifier() + "/"); 1236 cert_info->server_identifier() + "/");
1096 } 1237 }
1097 std::wstring title = CookieTreeOriginNode::TitleForUrl(origin); 1238 string16 title = CookieTreeHostNode::TitleForUrl(origin);
1098 1239
1099 if (!filter.size() || title.find(filter) != std::wstring::npos) { 1240 if (!filter.size() || title.find(filter) != std::string::npos) {
1100 CookieTreeOriginNode* origin_node = 1241 CookieTreeHostNode* host_node =
1101 root->GetOrCreateOriginNode(origin); 1242 root->GetOrCreateHostNode(origin);
1102 CookieTreeServerBoundCertsNode* server_bound_certs_node = 1243 CookieTreeServerBoundCertsNode* server_bound_certs_node =
1103 origin_node->GetOrCreateServerBoundCertsNode(); 1244 host_node->GetOrCreateServerBoundCertsNode();
1104 server_bound_certs_node->AddServerBoundCertNode( 1245 server_bound_certs_node->AddServerBoundCertNode(
1105 new CookieTreeServerBoundCertNode(cert_info)); 1246 new CookieTreeServerBoundCertNode(cert_info));
1106 } 1247 }
1107 } 1248 }
1108 NotifyObserverTreeNodeChanged(root); 1249 NotifyObserverTreeNodeChanged(root);
1109 NotifyObserverEndBatch(); 1250 NotifyObserverEndBatch();
1110 } 1251 }
1111 1252
1112 void CookiesTreeModel::NotifyObserverBeginBatch() { 1253 void CookiesTreeModel::NotifyObserverBeginBatch() {
1113 // Only notify the model once if we're batching in a nested manner. 1254 // Only notify the model once if we're batching in a nested manner.
1114 if (batch_update_++ == 0) { 1255 if (batch_update_++ == 0) {
1115 FOR_EACH_OBSERVER(Observer, 1256 FOR_EACH_OBSERVER(Observer,
1116 cookies_observer_list_, 1257 cookies_observer_list_,
1117 TreeModelBeginBatch(this)); 1258 TreeModelBeginBatch(this));
1118 } 1259 }
1119 } 1260 }
1120 1261
1121 void CookiesTreeModel::NotifyObserverEndBatch() { 1262 void CookiesTreeModel::NotifyObserverEndBatch() {
1122 // Only notify the observers if this is the outermost call to EndBatch() if 1263 // Only notify the observers if this is the outermost call to EndBatch() if
1123 // called in a nested manner. 1264 // called in a nested manner.
1124 if (--batch_update_ == 0) { 1265 if (--batch_update_ == 0) {
1125 FOR_EACH_OBSERVER(Observer, 1266 FOR_EACH_OBSERVER(Observer,
1126 cookies_observer_list_, 1267 cookies_observer_list_,
1127 TreeModelEndBatch(this)); 1268 TreeModelEndBatch(this));
1128 } 1269 }
1129 } 1270 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698