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

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

Issue 10536017: Refactoring CookiesTreeModel to support multiple data sources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Refactoring common code and style fixes. Created 8 years, 6 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/stl_util.h"
13 #include "base/string_util.h" 14 #include "base/string_util.h"
14 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/browsing_data_cookie_helper.h" 16 #include "chrome/browser/browsing_data_cookie_helper.h"
16 #include "chrome/browser/browsing_data_server_bound_cert_helper.h" 17 #include "chrome/browser/browsing_data_server_bound_cert_helper.h"
17 #include "chrome/browser/content_settings/cookie_settings.h" 18 #include "chrome/browser/content_settings/cookie_settings.h"
18 #include "chrome/browser/extensions/extension_service.h" 19 #include "chrome/browser/extensions/extension_service.h"
19 #include "grit/generated_resources.h" 20 #include "grit/generated_resources.h"
20 #include "grit/theme_resources.h" 21 #include "grit/theme_resources.h"
21 #include "grit/ui_resources.h" 22 #include "grit/ui_resources.h"
22 #include "net/base/registry_controlled_domain.h" 23 #include "net/base/registry_controlled_domain.h"
23 #include "net/cookies/cookie_monster.h" 24 #include "net/cookies/cookie_monster.h"
24 #include "net/url_request/url_request_context.h" 25 #include "net/url_request/url_request_context.h"
25 #include "ui/base/l10n/l10n_util.h" 26 #include "ui/base/l10n/l10n_util.h"
26 #include "ui/base/resource/resource_bundle.h" 27 #include "ui/base/resource/resource_bundle.h"
27 #include "ui/gfx/image/image_skia.h" 28 #include "ui/gfx/image/image_skia.h"
28 29
29 static const char kFileOriginNodeName[] = "file://"; 30 static const char kFileOriginNodeName[] = "file://";
30 31
32 namespace {
33
34 LocalDataContainer* GetLocalDataContainerForNode(const CookieTreeNode* node) {
35 DCHECK(node);
36 const CookieTreeAppNode* app = static_cast<const CookieTreeAppNode*>(
37 node->parent()->parent()->parent());
38 return node->GetModel()->GetLocalDataContainer(app->app_id());
39 }
40
41 }
42
31 /////////////////////////////////////////////////////////////////////////////// 43 ///////////////////////////////////////////////////////////////////////////////
32 // CookieTreeNode, public: 44 // CookieTreeNode, public:
33 45
34 void CookieTreeNode::DeleteStoredObjects() { 46 void CookieTreeNode::DeleteStoredObjects() {
35 std::for_each(children().begin(), 47 std::for_each(children().begin(),
36 children().end(), 48 children().end(),
37 std::mem_fun(&CookieTreeNode::DeleteStoredObjects)); 49 std::mem_fun(&CookieTreeNode::DeleteStoredObjects));
38 } 50 }
39 51
40 CookiesTreeModel* CookieTreeNode::GetModel() const { 52 CookiesTreeModel* CookieTreeNode::GetModel() const {
41 if (parent()) 53 if (parent()) {
42 return parent()->GetModel(); 54 if (parent()->parent()) {
43 else 55 return parent()->parent()->GetModel();
56 } else {
57 return parent()->GetModel();
58 }
59 } else {
44 return NULL; 60 return NULL;
61 }
45 } 62 }
46 63
47 /////////////////////////////////////////////////////////////////////////////// 64 ///////////////////////////////////////////////////////////////////////////////
48 // CookieTreeCookieNode, public: 65 // CookieTreeCookieNode, public:
49 66
50 CookieTreeCookieNode::CookieTreeCookieNode( 67 CookieTreeCookieNode::CookieTreeCookieNode(
51 std::list<net::CookieMonster::CanonicalCookie>::iterator cookie) 68 std::list<net::CookieMonster::CanonicalCookie>::iterator cookie)
52 : CookieTreeNode(UTF8ToUTF16(cookie->Name())), 69 : CookieTreeNode(UTF8ToUTF16(cookie->Name())),
53 cookie_(cookie) { 70 cookie_(cookie) {
54 } 71 }
55 72
56 CookieTreeCookieNode::~CookieTreeCookieNode() {} 73 CookieTreeCookieNode::~CookieTreeCookieNode() {}
57 74
58 void CookieTreeCookieNode::DeleteStoredObjects() { 75 void CookieTreeCookieNode::DeleteStoredObjects() {
59 // notify CookieMonster that we should delete this cookie 76 // notify CookieMonster that we should delete this cookie
60 GetModel()->cookie_helper_->DeleteCookie(*cookie_); 77 LocalDataContainer* container = GetLocalDataContainerForNode(this);
61 GetModel()->cookie_list_.erase(cookie_); 78
79 if (container) {
80 container->cookie_helper_->DeleteCookie(*cookie_);
81 container->cookie_list_.erase(cookie_);
82 }
62 } 83 }
63 84
64 CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const { 85 CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const {
65 return DetailedInfo(parent()->parent()->GetTitle()).InitCookie(&*cookie_); 86 return DetailedInfo(parent()->parent()->GetTitle()).InitCookie(&*cookie_);
66 } 87 }
67 88
68 namespace { 89 namespace {
69 // comparison functor, for use in CookieTreeRootNode 90 // comparison functor, for use in CookieTreeRootNode
70 class OriginNodeComparator { 91 class OriginNodeComparator {
71 public: 92 public:
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 std::list<appcache::AppCacheInfo>::iterator appcache_info) 153 std::list<appcache::AppCacheInfo>::iterator appcache_info)
133 : CookieTreeNode(UTF8ToUTF16(appcache_info->manifest_url.spec())), 154 : CookieTreeNode(UTF8ToUTF16(appcache_info->manifest_url.spec())),
134 origin_url_(origin_url), 155 origin_url_(origin_url),
135 appcache_info_(appcache_info) { 156 appcache_info_(appcache_info) {
136 } 157 }
137 158
138 CookieTreeAppCacheNode::~CookieTreeAppCacheNode() { 159 CookieTreeAppCacheNode::~CookieTreeAppCacheNode() {
139 } 160 }
140 161
141 void CookieTreeAppCacheNode::DeleteStoredObjects() { 162 void CookieTreeAppCacheNode::DeleteStoredObjects() {
142 DCHECK(GetModel()->appcache_helper_); 163 LocalDataContainer* container = GetLocalDataContainerForNode(this);
143 GetModel()->appcache_helper_->DeleteAppCacheGroup( 164
144 appcache_info_->manifest_url); 165 if (container) {
145 GetModel()->appcache_info_[origin_url_].erase(appcache_info_); 166 DCHECK(container->appcache_helper_);
167 container->appcache_helper_->DeleteAppCacheGroup(
168 appcache_info_->manifest_url);
169 container->appcache_info_[origin_url_].erase(appcache_info_);
170 }
146 } 171 }
147 172
148 CookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const { 173 CookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const {
149 return DetailedInfo(parent()->parent()->GetTitle()).InitAppCache( 174 return DetailedInfo(parent()->parent()->GetTitle()).InitAppCache(
150 &*appcache_info_); 175 &*appcache_info_);
151 } 176 }
152 177
153 /////////////////////////////////////////////////////////////////////////////// 178 ///////////////////////////////////////////////////////////////////////////////
154 // CookieTreeDatabaseNode, public: 179 // CookieTreeDatabaseNode, public:
155 180
156 CookieTreeDatabaseNode::CookieTreeDatabaseNode( 181 CookieTreeDatabaseNode::CookieTreeDatabaseNode(
157 std::list<BrowsingDataDatabaseHelper::DatabaseInfo>::iterator database_info) 182 std::list<BrowsingDataDatabaseHelper::DatabaseInfo>::iterator database_info)
158 : CookieTreeNode(database_info->database_name.empty() ? 183 : CookieTreeNode(database_info->database_name.empty() ?
159 l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME) : 184 l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME) :
160 UTF8ToUTF16(database_info->database_name)), 185 UTF8ToUTF16(database_info->database_name)),
161 database_info_(database_info) { 186 database_info_(database_info) {
162 } 187 }
163 188
164 CookieTreeDatabaseNode::~CookieTreeDatabaseNode() {} 189 CookieTreeDatabaseNode::~CookieTreeDatabaseNode() {}
165 190
166 void CookieTreeDatabaseNode::DeleteStoredObjects() { 191 void CookieTreeDatabaseNode::DeleteStoredObjects() {
167 GetModel()->database_helper_->DeleteDatabase( 192 LocalDataContainer* container = GetLocalDataContainerForNode(this);
168 database_info_->origin_identifier, database_info_->database_name); 193
169 GetModel()->database_info_list_.erase(database_info_); 194 if (container) {
195 container->database_helper_->DeleteDatabase(
196 database_info_->origin_identifier, database_info_->database_name);
197 container->database_info_list_.erase(database_info_);
198 }
170 } 199 }
171 200
172 CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const { 201 CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const {
173 return DetailedInfo(parent()->parent()->GetTitle()).InitDatabase( 202 return DetailedInfo(parent()->parent()->GetTitle()).InitDatabase(
174 &*database_info_); 203 &*database_info_);
175 } 204 }
176 205
177 /////////////////////////////////////////////////////////////////////////////// 206 ///////////////////////////////////////////////////////////////////////////////
178 // CookieTreeLocalStorageNode, public: 207 // CookieTreeLocalStorageNode, public:
179 208
180 CookieTreeLocalStorageNode::CookieTreeLocalStorageNode( 209 CookieTreeLocalStorageNode::CookieTreeLocalStorageNode(
181 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 210 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator
182 local_storage_info) 211 local_storage_info)
183 : CookieTreeNode(UTF8ToUTF16(local_storage_info->origin_url.spec())), 212 : CookieTreeNode(UTF8ToUTF16(local_storage_info->origin_url.spec())),
184 local_storage_info_(local_storage_info) { 213 local_storage_info_(local_storage_info) {
185 } 214 }
186 215
187 CookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {} 216 CookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {}
188 217
189 void CookieTreeLocalStorageNode::DeleteStoredObjects() { 218 void CookieTreeLocalStorageNode::DeleteStoredObjects() {
190 GetModel()->local_storage_helper_->DeleteOrigin( 219 LocalDataContainer* container = GetLocalDataContainerForNode(this);
191 local_storage_info_->origin_url); 220
192 GetModel()->local_storage_info_list_.erase(local_storage_info_); 221 if (container) {
222 container->local_storage_helper_->DeleteOrigin(
223 local_storage_info_->origin_url);
224 container->local_storage_info_list_.erase(local_storage_info_);
225 }
193 } 226 }
194 227
195 CookieTreeNode::DetailedInfo 228 CookieTreeNode::DetailedInfo
196 CookieTreeLocalStorageNode::GetDetailedInfo() const { 229 CookieTreeLocalStorageNode::GetDetailedInfo() const {
197 return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage( 230 return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage(
198 &*local_storage_info_); 231 &*local_storage_info_);
199 } 232 }
200 233
201 /////////////////////////////////////////////////////////////////////////////// 234 ///////////////////////////////////////////////////////////////////////////////
202 // CookieTreeSessionStorageNode, public: 235 // CookieTreeSessionStorageNode, public:
203 236
204 CookieTreeSessionStorageNode::CookieTreeSessionStorageNode( 237 CookieTreeSessionStorageNode::CookieTreeSessionStorageNode(
205 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 238 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator
206 session_storage_info) 239 session_storage_info)
207 : CookieTreeNode(UTF8ToUTF16(session_storage_info->origin_url.spec())), 240 : CookieTreeNode(UTF8ToUTF16(session_storage_info->origin_url.spec())),
208 session_storage_info_(session_storage_info) { 241 session_storage_info_(session_storage_info) {
209 } 242 }
210 243
211 CookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {} 244 CookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {}
212 245
213 void CookieTreeSessionStorageNode::DeleteStoredObjects() { 246 void CookieTreeSessionStorageNode::DeleteStoredObjects() {
214 GetModel()->session_storage_info_list_.erase(session_storage_info_); 247 LocalDataContainer* container = GetLocalDataContainerForNode(this);
248
249 if (container) {
250 container->session_storage_info_list_.erase(session_storage_info_);
251 }
215 } 252 }
216 253
217 CookieTreeNode::DetailedInfo 254 CookieTreeNode::DetailedInfo
218 CookieTreeSessionStorageNode::GetDetailedInfo() const { 255 CookieTreeSessionStorageNode::GetDetailedInfo() const {
219 return DetailedInfo(parent()->parent()->GetTitle()).InitSessionStorage( 256 return DetailedInfo(parent()->parent()->GetTitle()).InitSessionStorage(
220 &*session_storage_info_); 257 &*session_storage_info_);
221 } 258 }
222 259
223 /////////////////////////////////////////////////////////////////////////////// 260 ///////////////////////////////////////////////////////////////////////////////
224 // CookieTreeIndexedDBNode, public: 261 // CookieTreeIndexedDBNode, public:
225 262
226 CookieTreeIndexedDBNode::CookieTreeIndexedDBNode( 263 CookieTreeIndexedDBNode::CookieTreeIndexedDBNode(
227 std::list<BrowsingDataIndexedDBHelper::IndexedDBInfo>::iterator 264 std::list<BrowsingDataIndexedDBHelper::IndexedDBInfo>::iterator
228 indexed_db_info) 265 indexed_db_info)
229 : CookieTreeNode(UTF8ToUTF16( 266 : CookieTreeNode(UTF8ToUTF16(
230 indexed_db_info->origin.spec())), 267 indexed_db_info->origin.spec())),
231 indexed_db_info_(indexed_db_info) { 268 indexed_db_info_(indexed_db_info) {
232 } 269 }
233 270
234 CookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {} 271 CookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {}
235 272
236 void CookieTreeIndexedDBNode::DeleteStoredObjects() { 273 void CookieTreeIndexedDBNode::DeleteStoredObjects() {
237 GetModel()->indexed_db_helper_->DeleteIndexedDB( 274 LocalDataContainer* container = GetLocalDataContainerForNode(this);
238 indexed_db_info_->origin); 275
239 GetModel()->indexed_db_info_list_.erase(indexed_db_info_); 276 if (container) {
277 container->indexed_db_helper_->DeleteIndexedDB(
278 indexed_db_info_->origin);
279 container->indexed_db_info_list_.erase(indexed_db_info_);
280 }
240 } 281 }
241 282
242 CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const { 283 CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const {
243 return DetailedInfo(parent()->parent()->GetTitle()).InitIndexedDB( 284 return DetailedInfo(parent()->parent()->GetTitle()).InitIndexedDB(
244 &*indexed_db_info_); 285 &*indexed_db_info_);
245 } 286 }
246 287
247 /////////////////////////////////////////////////////////////////////////////// 288 ///////////////////////////////////////////////////////////////////////////////
248 // CookieTreeFileSystemNode, public: 289 // CookieTreeFileSystemNode, public:
249 290
250 CookieTreeFileSystemNode::CookieTreeFileSystemNode( 291 CookieTreeFileSystemNode::CookieTreeFileSystemNode(
251 std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator 292 std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator
252 file_system_info) 293 file_system_info)
253 : CookieTreeNode(UTF8ToUTF16( 294 : CookieTreeNode(UTF8ToUTF16(
254 file_system_info->origin.spec())), 295 file_system_info->origin.spec())),
255 file_system_info_(file_system_info) { 296 file_system_info_(file_system_info) {
256 } 297 }
257 298
258 CookieTreeFileSystemNode::~CookieTreeFileSystemNode() {} 299 CookieTreeFileSystemNode::~CookieTreeFileSystemNode() {}
259 300
260 void CookieTreeFileSystemNode::DeleteStoredObjects() { 301 void CookieTreeFileSystemNode::DeleteStoredObjects() {
261 GetModel()->file_system_helper_->DeleteFileSystemOrigin( 302 LocalDataContainer* container = GetLocalDataContainerForNode(this);
262 file_system_info_->origin); 303
263 GetModel()->file_system_info_list_.erase(file_system_info_); 304 if (container) {
305 container->file_system_helper_->DeleteFileSystemOrigin(
306 file_system_info_->origin);
307 container->file_system_info_list_.erase(file_system_info_);
308 }
264 } 309 }
265 310
266 CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const { 311 CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const {
267 return DetailedInfo(parent()->parent()->GetTitle()).InitFileSystem( 312 return DetailedInfo(parent()->parent()->GetTitle()).InitFileSystem(
268 &*file_system_info_); 313 &*file_system_info_);
269 } 314 }
270 315
271 /////////////////////////////////////////////////////////////////////////////// 316 ///////////////////////////////////////////////////////////////////////////////
272 // CookieTreeQuotaNode, public: 317 // CookieTreeQuotaNode, public:
273 318
274 CookieTreeQuotaNode::CookieTreeQuotaNode( 319 CookieTreeQuotaNode::CookieTreeQuotaNode(
275 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) 320 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info)
276 : CookieTreeNode(UTF8ToUTF16(quota_info->host)), 321 : CookieTreeNode(UTF8ToUTF16(quota_info->host)),
277 quota_info_(quota_info) { 322 quota_info_(quota_info) {
278 } 323 }
279 324
280 CookieTreeQuotaNode::~CookieTreeQuotaNode() {} 325 CookieTreeQuotaNode::~CookieTreeQuotaNode() {}
281 326
282 void CookieTreeQuotaNode::DeleteStoredObjects() { 327 void CookieTreeQuotaNode::DeleteStoredObjects() {
283 // Calling this function may cause unexpected over-quota state of origin. 328 // Calling this function may cause unexpected over-quota state of origin.
284 // However, it'll caused no problem, just prevent usage growth of the origin. 329 // However, it'll caused no problem, just prevent usage growth of the origin.
285 GetModel()->quota_helper_->RevokeHostQuota(quota_info_->host); 330 CookieTreeAppNode* app = static_cast<CookieTreeAppNode*>(
286 GetModel()->quota_info_list_.erase(quota_info_); 331 parent()->parent());
332 LocalDataContainer* container = GetModel()->GetLocalDataContainer(
333 app->app_id());
334
335 if (container) {
336 container->quota_helper_->RevokeHostQuota(quota_info_->host);
337 container->quota_info_list_.erase(quota_info_);
338 }
287 } 339 }
288 340
289 CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const { 341 CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const {
290 return DetailedInfo(parent()->parent()->GetTitle()).InitQuota( 342 return DetailedInfo(parent()->parent()->GetTitle()).InitQuota(
291 &*quota_info_); 343 &*quota_info_);
292 } 344 }
293 345
294 /////////////////////////////////////////////////////////////////////////////// 346 ///////////////////////////////////////////////////////////////////////////////
295 // CookieTreeServerBoundCertNode, public: 347 // CookieTreeServerBoundCertNode, public:
296 348
297 CookieTreeServerBoundCertNode::CookieTreeServerBoundCertNode( 349 CookieTreeServerBoundCertNode::CookieTreeServerBoundCertNode(
298 net::ServerBoundCertStore::ServerBoundCertList::iterator cert) 350 net::ServerBoundCertStore::ServerBoundCertList::iterator cert)
299 : CookieTreeNode(ASCIIToUTF16(cert->server_identifier())), 351 : CookieTreeNode(ASCIIToUTF16(cert->server_identifier())),
300 server_bound_cert_(cert) { 352 server_bound_cert_(cert) {
301 } 353 }
302 354
303 CookieTreeServerBoundCertNode::~CookieTreeServerBoundCertNode() {} 355 CookieTreeServerBoundCertNode::~CookieTreeServerBoundCertNode() {}
304 356
305 void CookieTreeServerBoundCertNode::DeleteStoredObjects() { 357 void CookieTreeServerBoundCertNode::DeleteStoredObjects() {
306 GetModel()->server_bound_cert_helper_->DeleteServerBoundCert( 358 LocalDataContainer* container = GetLocalDataContainerForNode(this);
307 server_bound_cert_->server_identifier()); 359
308 GetModel()->server_bound_cert_list_.erase(server_bound_cert_); 360 if (container) {
361 container->server_bound_cert_helper_->DeleteServerBoundCert(
362 server_bound_cert_->server_identifier());
363 container->server_bound_cert_list_.erase(server_bound_cert_);
364 }
309 } 365 }
310 366
311 CookieTreeNode::DetailedInfo 367 CookieTreeNode::DetailedInfo
312 CookieTreeServerBoundCertNode::GetDetailedInfo() const { 368 CookieTreeServerBoundCertNode::GetDetailedInfo() const {
313 return DetailedInfo(parent()->parent()->GetTitle()).InitServerBoundCert( 369 return DetailedInfo(parent()->parent()->GetTitle()).InitServerBoundCert(
314 &*server_bound_cert_); 370 &*server_bound_cert_);
315 } 371 }
316 372
317 /////////////////////////////////////////////////////////////////////////////// 373 ///////////////////////////////////////////////////////////////////////////////
318 // CookieTreeRootNode, public: 374 // CookieTreeRootNode, public:
319 375
320 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model) 376 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model)
321 : model_(model) { 377 : model_(model) {
322 } 378 }
323 379
324 CookieTreeRootNode::~CookieTreeRootNode() {} 380 CookieTreeRootNode::~CookieTreeRootNode() {}
325 381
326 CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode( 382 CookieTreeAppNode* CookieTreeRootNode::GetOrCreateAppNode(
383 const string16& app_name,
384 const string16& app_id) {
385 CookieTreeAppNode app_node(app_name, app_id);
386
387 // First see if there is an existing match.
388 std::vector<CookieTreeNode*>::iterator app_node_iterator =
389 std::lower_bound(children().begin(),
390 children().end(),
391 &app_node,
392 AppNodeComparator());
393
394 if (app_node_iterator != children().end())
395 return static_cast<CookieTreeAppNode*>(*app_node_iterator);
396
397 // Node doesn't exist, create a new one and insert it into the (ordered)
398 // children.
399 CookieTreeAppNode* retval = new CookieTreeAppNode(app_name, app_id);
400 DCHECK(model_);
401 model_->Add(this, retval, (app_node_iterator - children().begin()));
402 return retval;
403 }
404
405 CookiesTreeModel* CookieTreeRootNode::GetModel() const {
406 return model_;
407 }
408
409 CookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const {
410 return DetailedInfo(string16()).Init(DetailedInfo::TYPE_ROOT);
411 }
412
413 ///////////////////////////////////////////////////////////////////////////////
414 // CookieTreeAppNode, public:
415
416 CookieTreeAppNode::CookieTreeAppNode(const string16& app_name,
417 const string16& app_id)
418 : CookieTreeNode(app_name),
419 app_name_(app_name),
420 app_id_(app_id) {}
421
422 CookieTreeAppNode::~CookieTreeAppNode() {}
423
424 CookieTreeOriginNode* CookieTreeAppNode::GetOrCreateOriginNode(
327 const GURL& url) { 425 const GURL& url) {
328 CookieTreeOriginNode origin_node(url); 426 CookieTreeOriginNode origin_node(url);
329 427
330 // First see if there is an existing match. 428 // First see if there is an existing match.
331 std::vector<CookieTreeNode*>::iterator origin_node_iterator = 429 std::vector<CookieTreeNode*>::iterator origin_node_iterator =
332 std::lower_bound(children().begin(), 430 std::lower_bound(children().begin(),
333 children().end(), 431 children().end(),
334 &origin_node, 432 &origin_node,
335 OriginNodeComparator()); 433 OriginNodeComparator());
336 434
337 if (origin_node_iterator != children().end() && 435 if (origin_node_iterator != children().end() &&
338 WideToUTF16Hack(CookieTreeOriginNode::TitleForUrl(url)) == 436 CookieTreeOriginNode::TitleForUrl(url) ==
339 (*origin_node_iterator)->GetTitle()) 437 (*origin_node_iterator)->GetTitle())
340 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator); 438 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator);
341 // Node doesn't exist, create a new one and insert it into the (ordered) 439 // Node doesn't exist, create a new one and insert it into the (ordered)
342 // children. 440 // children.
343 CookieTreeOriginNode* retval = new CookieTreeOriginNode(url); 441 CookieTreeOriginNode* retval = new CookieTreeOriginNode(url);
344 DCHECK(model_); 442 GetModel()->Add(this, retval, (origin_node_iterator - children().begin()));
345 model_->Add(this, retval, (origin_node_iterator - children().begin()));
346 return retval; 443 return retval;
347 } 444 }
348 445
349 CookiesTreeModel* CookieTreeRootNode::GetModel() const { 446 CookieTreeNode::DetailedInfo CookieTreeAppNode::GetDetailedInfo() const {
350 return model_; 447 return DetailedInfo(GetTitle()).InitApp(app_name_, app_id_);
351 }
352
353 CookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const {
354 return DetailedInfo(string16()).Init(DetailedInfo::TYPE_ROOT);
355 } 448 }
356 449
357 /////////////////////////////////////////////////////////////////////////////// 450 ///////////////////////////////////////////////////////////////////////////////
358 // CookieTreeOriginNode, public: 451 // CookieTreeOriginNode, public:
359 452
360 // static 453 // static
361 std::wstring CookieTreeOriginNode::TitleForUrl( 454 string16 CookieTreeOriginNode::TitleForUrl(
362 const GURL& url) { 455 const GURL& url) {
363 return UTF8ToWide(url.SchemeIsFile() ? kFileOriginNodeName : url.host()); 456 return UTF8ToUTF16(url.SchemeIsFile() ? kFileOriginNodeName : url.host());
364 } 457 }
365 458
366 CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url) 459 CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url)
367 : CookieTreeNode(WideToUTF16Hack(TitleForUrl(url))), 460 : CookieTreeNode(TitleForUrl(url)),
368 cookies_child_(NULL), 461 cookies_child_(NULL),
369 databases_child_(NULL), 462 databases_child_(NULL),
370 local_storages_child_(NULL), 463 local_storages_child_(NULL),
371 session_storages_child_(NULL), 464 session_storages_child_(NULL),
372 appcaches_child_(NULL), 465 appcaches_child_(NULL),
373 indexed_dbs_child_(NULL), 466 indexed_dbs_child_(NULL),
374 file_systems_child_(NULL), 467 file_systems_child_(NULL),
375 quota_child_(NULL), 468 quota_child_(NULL),
376 server_bound_certs_child_(NULL), 469 server_bound_certs_child_(NULL),
377 url_(url) {} 470 url_(url) {}
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 692
600 bool CookieTreeNode::NodeTitleComparator::operator() ( 693 bool CookieTreeNode::NodeTitleComparator::operator() (
601 const CookieTreeNode* lhs, const CookieTreeNode* rhs) { 694 const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
602 const CookieTreeNode* left = 695 const CookieTreeNode* left =
603 static_cast<const CookieTreeNode*>(lhs); 696 static_cast<const CookieTreeNode*>(lhs);
604 const CookieTreeNode* right = 697 const CookieTreeNode* right =
605 static_cast<const CookieTreeNode*>(rhs); 698 static_cast<const CookieTreeNode*>(rhs);
606 return (left->GetTitle() < right->GetTitle()); 699 return (left->GetTitle() < right->GetTitle());
607 } 700 }
608 701
702 bool CookieTreeNode::AppNodeComparator::operator() (
703 const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
704 const CookieTreeAppNode* left =
705 static_cast<const CookieTreeAppNode*>(lhs);
706 const CookieTreeAppNode* right =
707 static_cast<const CookieTreeAppNode*>(rhs);
708 return (left->app_id() < right->app_id());
709 }
710
609 void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) { 711 void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) {
610 DCHECK(new_child); 712 DCHECK(new_child);
611 std::vector<CookieTreeNode*>::iterator iter = 713 std::vector<CookieTreeNode*>::iterator iter =
612 std::lower_bound(children().begin(), 714 std::lower_bound(children().begin(),
613 children().end(), 715 children().end(),
614 new_child, 716 new_child,
615 NodeTitleComparator()); 717 NodeTitleComparator());
616 GetModel()->Add(this, new_child, iter - children().begin()); 718 GetModel()->Add(this, new_child, iter - children().begin());
617 } 719 }
618 720
619 /////////////////////////////////////////////////////////////////////////////// 721 ///////////////////////////////////////////////////////////////////////////////
620 // CookiesTreeModel, public: 722 // CookiesTreeModel, public:
621 723 CookiesTreeModel::CookiesTreeModel(const ContainerMap& apps_map,
622 CookiesTreeModel::CookiesTreeModel( 724 bool use_cookie_source)
623 BrowsingDataCookieHelper* cookie_helper,
624 BrowsingDataDatabaseHelper* database_helper,
625 BrowsingDataLocalStorageHelper* local_storage_helper,
626 BrowsingDataLocalStorageHelper* session_storage_helper,
627 BrowsingDataAppCacheHelper* appcache_helper,
628 BrowsingDataIndexedDBHelper* indexed_db_helper,
629 BrowsingDataFileSystemHelper* file_system_helper,
630 BrowsingDataQuotaHelper* quota_helper,
631 BrowsingDataServerBoundCertHelper* server_bound_cert_helper,
632 bool use_cookie_source)
633 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>( 725 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>(
634 new CookieTreeRootNode(this))), 726 new CookieTreeRootNode(this))),
635 appcache_helper_(appcache_helper),
636 cookie_helper_(cookie_helper),
637 database_helper_(database_helper),
638 local_storage_helper_(local_storage_helper),
639 session_storage_helper_(session_storage_helper),
640 indexed_db_helper_(indexed_db_helper),
641 file_system_helper_(file_system_helper),
642 quota_helper_(quota_helper),
643 server_bound_cert_helper_(server_bound_cert_helper),
644 batch_update_(0),
645 use_cookie_source_(use_cookie_source), 727 use_cookie_source_(use_cookie_source),
646 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { 728 batch_update_(0) {
647 DCHECK(cookie_helper_); 729 for (ContainerMap::const_iterator it = apps_map.begin();
648 cookie_helper_->StartFetching( 730 it != apps_map.end(); ++it) {
649 base::Bind(&CookiesTreeModel::OnCookiesModelInfoLoaded, 731 app_data_map_[it->first] = it->second;
650 weak_ptr_factory_.GetWeakPtr())); 732 it->second->Init(this);
651 DCHECK(database_helper_);
652 database_helper_->StartFetching(
653 base::Bind(&CookiesTreeModel::OnDatabaseModelInfoLoaded,
654 weak_ptr_factory_.GetWeakPtr()));
655 DCHECK(local_storage_helper_);
656 local_storage_helper_->StartFetching(
657 base::Bind(&CookiesTreeModel::OnLocalStorageModelInfoLoaded,
658 weak_ptr_factory_.GetWeakPtr()));
659 if (session_storage_helper_) {
660 session_storage_helper_->StartFetching(
661 base::Bind(&CookiesTreeModel::OnSessionStorageModelInfoLoaded,
662 weak_ptr_factory_.GetWeakPtr()));
663 }
664
665 // TODO(michaeln): When all of the UI implementations have been updated, make
666 // this a required parameter.
667 if (appcache_helper_) {
668 appcache_helper_->StartFetching(
669 base::Bind(&CookiesTreeModel::OnAppCacheModelInfoLoaded,
670 weak_ptr_factory_.GetWeakPtr()));
671 }
672
673 if (indexed_db_helper_) {
674 indexed_db_helper_->StartFetching(
675 base::Bind(&CookiesTreeModel::OnIndexedDBModelInfoLoaded,
676 weak_ptr_factory_.GetWeakPtr()));
677 }
678
679 if (file_system_helper_) {
680 file_system_helper_->StartFetching(
681 base::Bind(&CookiesTreeModel::OnFileSystemModelInfoLoaded,
682 weak_ptr_factory_.GetWeakPtr()));
683 }
684
685 if (quota_helper_) {
686 quota_helper_->StartFetching(
687 base::Bind(&CookiesTreeModel::OnQuotaModelInfoLoaded,
688 weak_ptr_factory_.GetWeakPtr()));
689 }
690
691 if (server_bound_cert_helper_) {
692 server_bound_cert_helper_->StartFetching(
693 base::Bind(&CookiesTreeModel::OnServerBoundCertModelInfoLoaded,
694 weak_ptr_factory_.GetWeakPtr()));
695 } 733 }
696 } 734 }
697 735
698 CookiesTreeModel::~CookiesTreeModel() {} 736 CookiesTreeModel::~CookiesTreeModel() {
737 STLDeleteValues(&app_data_map_);
738 }
699 739
700 /////////////////////////////////////////////////////////////////////////////// 740 ///////////////////////////////////////////////////////////////////////////////
701 // CookiesTreeModel, TreeModel methods (public): 741 // CookiesTreeModel, TreeModel methods (public):
702 742
703 // TreeModel methods: 743 // TreeModel methods:
704 // Returns the set of icons for the nodes in the tree. You only need override 744 // Returns the set of icons for the nodes in the tree. You only need override
705 // this if you don't want to use the default folder icons. 745 // this if you don't want to use the default folder icons.
706 void CookiesTreeModel::GetIcons(std::vector<gfx::ImageSkia>* icons) { 746 void CookiesTreeModel::GetIcons(std::vector<gfx::ImageSkia>* icons) {
707 icons->push_back(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 747 icons->push_back(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
708 IDR_OMNIBOX_HTTP)); 748 IDR_OMNIBOX_HTTP));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 NotifyObserverBeginBatch(); 788 NotifyObserverBeginBatch();
749 CookieTreeNode* root = GetRoot(); 789 CookieTreeNode* root = GetRoot();
750 root->DeleteStoredObjects(); 790 root->DeleteStoredObjects();
751 int num_children = root->child_count(); 791 int num_children = root->child_count();
752 for (int i = num_children - 1; i >= 0; --i) 792 for (int i = num_children - 1; i >= 0; --i)
753 delete Remove(root, root->GetChild(i)); 793 delete Remove(root, root->GetChild(i));
754 NotifyObserverTreeNodeChanged(root); 794 NotifyObserverTreeNodeChanged(root);
755 NotifyObserverEndBatch(); 795 NotifyObserverEndBatch();
756 } 796 }
757 797
798 void CookiesTreeModel::DeleteStoredObjectsForApp(const string16& app_id) {
799 NotifyObserverBeginBatch();
800 CookieTreeAppNode* app_node;
801 CookieTreeNode* root = GetRoot();
802 for (int i = 0; i < root->child_count(); ++i) {
803 app_node = static_cast<CookieTreeAppNode*>(root->GetChild(i));
804 app_node->DeleteStoredObjects();
805 if (app_node->GetDetailedInfo().app_id == app_id) {
806 // We need to loop over and delete the child nodes, as we can't just
807 // delete the app node. The reason for this is that the app node doesn't
808 // really get deleted, unless the app is uninstalled, which doesn't happen
809 // in this case.
810 int num_children = app_node->child_count();
811 for (int j = num_children - 1; j >= 0; --j) {
812 delete Remove(app_node, app_node->GetChild(j));
813 }
814 break;
815 }
816 }
817 NotifyObserverTreeNodeChanged(root);
818 NotifyObserverEndBatch();
819 }
820
758 void CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) { 821 void CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) {
759 if (cookie_node == GetRoot()) 822 if (cookie_node == GetRoot())
760 return; 823 return;
761 cookie_node->DeleteStoredObjects(); 824 cookie_node->DeleteStoredObjects();
762 CookieTreeNode* parent_node = cookie_node->parent(); 825 CookieTreeNode* parent_node = cookie_node->parent();
763 delete Remove(parent_node, cookie_node); 826 delete Remove(parent_node, cookie_node);
764 if (parent_node->empty()) 827 if (parent_node->empty())
765 DeleteCookieNode(parent_node); 828 DeleteCookieNode(parent_node);
766 } 829 }
767 830
768 void CookiesTreeModel::UpdateSearchResults(const std::wstring& filter) { 831 void CookiesTreeModel::UpdateSearchResults(const string16& filter) {
769 CookieTreeNode* root = GetRoot(); 832 CookieTreeNode* root = GetRoot();
770 int num_children = root->child_count(); 833 int num_children = root->child_count();
771 NotifyObserverBeginBatch(); 834 NotifyObserverBeginBatch();
772 for (int i = num_children - 1; i >= 0; --i) 835 for (int i = num_children - 1; i >= 0; --i)
773 delete Remove(root, root->GetChild(i)); 836 delete Remove(root, root->GetChild(i));
774 PopulateCookieInfoWithFilter(filter); 837 PopulateCookieInfoWithFilter(NULL, filter);
775 PopulateDatabaseInfoWithFilter(filter); 838 PopulateDatabaseInfoWithFilter(NULL, filter);
776 PopulateLocalStorageInfoWithFilter(filter); 839 PopulateLocalStorageInfoWithFilter(NULL, filter);
777 PopulateSessionStorageInfoWithFilter(filter); 840 PopulateSessionStorageInfoWithFilter(NULL, filter);
778 PopulateAppCacheInfoWithFilter(filter); 841 PopulateAppCacheInfoWithFilter(NULL, filter);
779 PopulateIndexedDBInfoWithFilter(filter); 842 PopulateIndexedDBInfoWithFilter(NULL, filter);
780 PopulateFileSystemInfoWithFilter(filter); 843 PopulateFileSystemInfoWithFilter(NULL, filter);
781 PopulateQuotaInfoWithFilter(filter); 844 PopulateQuotaInfoWithFilter(NULL, filter);
782 PopulateServerBoundCertInfoWithFilter(filter); 845 PopulateServerBoundCertInfoWithFilter(NULL, filter);
783 NotifyObserverTreeNodeChanged(root); 846 NotifyObserverTreeNodeChanged(root);
784 NotifyObserverEndBatch(); 847 NotifyObserverEndBatch();
785 } 848 }
786 849
787 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) { 850 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) {
788 cookies_observer_list_.AddObserver(observer); 851 cookies_observer_list_.AddObserver(observer);
789 // Call super so that TreeNodeModel can notify, too. 852 // Call super so that TreeNodeModel can notify, too.
790 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer); 853 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer);
791 } 854 }
792 855
793 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) { 856 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) {
794 cookies_observer_list_.RemoveObserver(observer); 857 cookies_observer_list_.RemoveObserver(observer);
795 // Call super so that TreeNodeModel doesn't have dead pointers. 858 // Call super so that TreeNodeModel doesn't have dead pointers.
796 ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer); 859 ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer);
797 } 860 }
798 861
799 void CookiesTreeModel::OnAppCacheModelInfoLoaded() {
800 using appcache::AppCacheInfo;
801 using appcache::AppCacheInfoCollection;
802 using appcache::AppCacheInfoVector;
803 typedef std::map<GURL, AppCacheInfoVector> InfoByOrigin;
804
805 scoped_refptr<AppCacheInfoCollection> appcache_info =
806 appcache_helper_->info_collection();
807 if (!appcache_info || appcache_info->infos_by_origin.empty())
808 return;
809
810 for (InfoByOrigin::const_iterator origin =
811 appcache_info->infos_by_origin.begin();
812 origin != appcache_info->infos_by_origin.end(); ++origin) {
813 std::list<AppCacheInfo>& info_list = appcache_info_[origin->first];
814 info_list.insert(
815 info_list.begin(), origin->second.begin(), origin->second.end());
816 }
817
818 PopulateAppCacheInfoWithFilter(std::wstring());
819 }
820
821 void CookiesTreeModel::PopulateAppCacheInfoWithFilter( 862 void CookiesTreeModel::PopulateAppCacheInfoWithFilter(
822 const std::wstring& filter) { 863 const string16* app_id,
864 const string16& filter) {
865
823 using appcache::AppCacheInfo; 866 using appcache::AppCacheInfo;
824 typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin; 867 typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin;
825 868 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
826 if (appcache_info_.empty()) 869 bool begin_batch = false;
827 return; 870
871 for (ContainerMap::iterator ait = app_data_map_.begin();
872 ait != app_data_map_.end(); ++ait ) {
873 LocalDataContainer* container = ait->second;
874
875 if (container->appcache_info_.empty())
876 continue;
877
878 if (app_id && *app_id != container->app_id())
879 continue;
880
881 if (!begin_batch) {
882 NotifyObserverBeginBatch();
883 begin_batch = true;
884 }
885
886 CookieTreeAppNode* app_node =
887 root->GetOrCreateAppNode(container->app_name(), container->app_id());
888
889 for (InfoByOrigin::iterator origin = container->appcache_info_.begin();
890 origin != container->appcache_info_.end(); ++origin) {
891 string16 origin_node_name = UTF8ToUTF16(origin->first.host());
892 if (filter.empty() ||
893 (origin_node_name.find(filter) != string16::npos)) {
894 CookieTreeOriginNode* origin_node =
895 app_node->GetOrCreateOriginNode(origin->first);
896 CookieTreeAppCachesNode* appcaches_node =
897 origin_node->GetOrCreateAppCachesNode();
898
899 for (std::list<AppCacheInfo>::iterator info = origin->second.begin();
900 info != origin->second.end(); ++info) {
901 appcaches_node->AddAppCacheNode(
902 new CookieTreeAppCacheNode(origin->first, info));
903 }
904 }
905 }
906 }
907
908 if (begin_batch) {
909 NotifyObserverTreeNodeChanged(root);
910 NotifyObserverEndBatch();
911 }
912 }
913
914 void CookiesTreeModel::PopulateCookieInfoWithFilter(
915 const string16* app_id,
916 const string16& filter) {
917 // mmargh mmargh mmargh! delicious!
828 918
829 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 919 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
830 NotifyObserverBeginBatch(); 920 NotifyObserverBeginBatch();
831 for (InfoByOrigin::iterator origin = appcache_info_.begin(); 921 for (ContainerMap::iterator ait = app_data_map_.begin();
832 origin != appcache_info_.end(); ++origin) { 922 ait != app_data_map_.end(); ++ait ) {
833 std::wstring origin_node_name = UTF8ToWide(origin->first.host()); 923 LocalDataContainer* container = ait->second;
834 if (filter.empty() || 924
835 (origin_node_name.find(filter) != std::wstring::npos)) { 925 if (app_id && *app_id != container->app_id())
836 CookieTreeOriginNode* origin_node = 926 continue;
837 root->GetOrCreateOriginNode(origin->first); 927
838 CookieTreeAppCachesNode* appcaches_node = 928 CookieTreeAppNode* app_node =
839 origin_node->GetOrCreateAppCachesNode(); 929 root->GetOrCreateAppNode(container->app_name(), container->app_id());
840 930
841 for (std::list<AppCacheInfo>::iterator info = origin->second.begin(); 931 for (CookieList::iterator it = container->cookie_list_.begin();
842 info != origin->second.end(); ++info) { 932 it != container->cookie_list_.end(); ++it) {
843 appcaches_node->AddAppCacheNode( 933 std::string source_string = it->Source();
844 new CookieTreeAppCacheNode(origin->first, info)); 934 if (source_string.empty() || !use_cookie_source_) {
935 std::string domain = it->Domain();
936 if (domain.length() > 1 && domain[0] == '.')
937 domain = domain.substr(1);
938
939 // We treat secure cookies just the same as normal ones.
940 source_string = std::string(chrome::kHttpScheme) +
941 content::kStandardSchemeSeparator + domain + "/";
942 }
943
944 GURL source(source_string);
945 if (!filter.size() ||
946 (CookieTreeOriginNode::TitleForUrl(source).find(filter) !=
947 std::string::npos)) {
948 CookieTreeOriginNode* origin_node =
949 app_node->GetOrCreateOriginNode(source);
950 CookieTreeCookiesNode* cookies_node =
951 origin_node->GetOrCreateCookiesNode();
952 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(it);
953 cookies_node->AddCookieNode(new_cookie);
845 } 954 }
846 } 955 }
847 } 956 }
848 NotifyObserverTreeNodeChanged(root); 957 NotifyObserverTreeNodeChanged(root);
849 NotifyObserverEndBatch(); 958 NotifyObserverEndBatch();
850 } 959 }
851 960
852 void CookiesTreeModel::OnCookiesModelInfoLoaded(
853 const net::CookieList& cookie_list) {
854 cookie_list_.insert(cookie_list_.begin(),
855 cookie_list.begin(),
856 cookie_list.end());
857 PopulateCookieInfoWithFilter(std::wstring());
858 }
859
860 void CookiesTreeModel::PopulateCookieInfoWithFilter(
861 const std::wstring& filter) {
862 // mmargh mmargh mmargh! delicious!
863
864 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
865 NotifyObserverBeginBatch();
866 for (CookieList::iterator it = cookie_list_.begin();
867 it != cookie_list_.end(); ++it) {
868 std::string source_string = it->Source();
869 if (source_string.empty() || !use_cookie_source_) {
870 std::string domain = it->Domain();
871 if (domain.length() > 1 && domain[0] == '.')
872 domain = domain.substr(1);
873
874 // We treat secure cookies just the same as normal ones.
875 source_string = std::string(chrome::kHttpScheme) +
876 content::kStandardSchemeSeparator + domain + "/";
877 }
878
879 GURL source(source_string);
880 if (!filter.size() ||
881 (CookieTreeOriginNode::TitleForUrl(source).find(filter) !=
882 std::string::npos)) {
883 CookieTreeOriginNode* origin_node =
884 root->GetOrCreateOriginNode(source);
885 CookieTreeCookiesNode* cookies_node =
886 origin_node->GetOrCreateCookiesNode();
887 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(it);
888 cookies_node->AddCookieNode(new_cookie);
889 }
890 }
891 NotifyObserverTreeNodeChanged(root);
892 NotifyObserverEndBatch();
893 }
894
895 void CookiesTreeModel::OnDatabaseModelInfoLoaded(
896 const DatabaseInfoList& database_info) {
897 database_info_list_ = database_info;
898 PopulateDatabaseInfoWithFilter(std::wstring());
899 }
900
901 void CookiesTreeModel::PopulateDatabaseInfoWithFilter( 961 void CookiesTreeModel::PopulateDatabaseInfoWithFilter(
902 const std::wstring& filter) { 962 const string16* app_id,
903 if (database_info_list_.empty()) 963 const string16& filter) {
904 return; 964
905 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 965 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
906 NotifyObserverBeginBatch(); 966 bool begin_batch = false;
907 for (DatabaseInfoList::iterator database_info = database_info_list_.begin(); 967
908 database_info != database_info_list_.end(); 968 for (ContainerMap::iterator ait = app_data_map_.begin();
909 ++database_info) { 969 ait != app_data_map_.end(); ++ait ) {
910 GURL origin(database_info->origin); 970 LocalDataContainer* container = ait->second;
911 971
912 if (!filter.size() || 972 if (container->database_info_list_.empty())
913 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 973 continue;
914 std::wstring::npos)) { 974
915 CookieTreeOriginNode* origin_node = 975 if (app_id && *app_id != container->app_id())
916 root->GetOrCreateOriginNode(origin); 976 continue;
917 CookieTreeDatabasesNode* databases_node = 977
918 origin_node->GetOrCreateDatabasesNode(); 978 if (!begin_batch) {
919 databases_node->AddDatabaseNode( 979 NotifyObserverBeginBatch();
920 new CookieTreeDatabaseNode(database_info)); 980 begin_batch = true;
921 } 981 }
922 } 982
923 NotifyObserverTreeNodeChanged(root); 983 CookieTreeAppNode* app_node =
924 NotifyObserverEndBatch(); 984 root->GetOrCreateAppNode(container->app_name(), container->app_id());
925 } 985
926 986 for (DatabaseInfoList::iterator database_info =
927 void CookiesTreeModel::OnLocalStorageModelInfoLoaded( 987 container->database_info_list_.begin();
928 const LocalStorageInfoList& local_storage_info) { 988 database_info != container->database_info_list_.end();
929 local_storage_info_list_ = local_storage_info; 989 ++database_info) {
930 PopulateLocalStorageInfoWithFilter(std::wstring()); 990 GURL origin(database_info->origin);
991
992 if (!filter.size() ||
993 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
994 string16::npos)) {
995 CookieTreeOriginNode* origin_node =
996 app_node->GetOrCreateOriginNode(origin);
997 CookieTreeDatabasesNode* databases_node =
998 origin_node->GetOrCreateDatabasesNode();
999 databases_node->AddDatabaseNode(
1000 new CookieTreeDatabaseNode(database_info));
1001 }
1002 }
1003 }
1004
1005 if (begin_batch) {
1006 NotifyObserverTreeNodeChanged(root);
1007 NotifyObserverEndBatch();
1008 }
931 } 1009 }
932 1010
933 void CookiesTreeModel::PopulateLocalStorageInfoWithFilter( 1011 void CookiesTreeModel::PopulateLocalStorageInfoWithFilter(
934 const std::wstring& filter) { 1012 const string16* app_id,
935 if (local_storage_info_list_.empty()) 1013 const string16& filter) {
936 return; 1014
937 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1015 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
938 NotifyObserverBeginBatch(); 1016 bool begin_batch = false;
939 for (LocalStorageInfoList::iterator local_storage_info = 1017
940 local_storage_info_list_.begin(); 1018 for (ContainerMap::iterator ait = app_data_map_.begin();
941 local_storage_info != local_storage_info_list_.end(); 1019 ait != app_data_map_.end(); ++ait ) {
942 ++local_storage_info) { 1020 LocalDataContainer* container = ait->second;
943 const GURL& origin(local_storage_info->origin_url); 1021
944 1022 if (container->local_storage_info_list_.empty())
945 if (!filter.size() || 1023 continue;
946 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1024
947 std::wstring::npos)) { 1025 if (app_id && *app_id != container->app_id())
948 CookieTreeOriginNode* origin_node = 1026 continue;
949 root->GetOrCreateOriginNode(origin); 1027
950 CookieTreeLocalStoragesNode* local_storages_node = 1028 if (!begin_batch) {
951 origin_node->GetOrCreateLocalStoragesNode(); 1029 NotifyObserverBeginBatch();
952 local_storages_node->AddLocalStorageNode( 1030 begin_batch = true;
953 new CookieTreeLocalStorageNode(local_storage_info)); 1031 }
954 } 1032
955 } 1033 CookieTreeAppNode* app_node =
956 NotifyObserverTreeNodeChanged(root); 1034 root->GetOrCreateAppNode(container->app_name(), container->app_id());
957 NotifyObserverEndBatch(); 1035
958 } 1036 for (LocalStorageInfoList::iterator local_storage_info =
959 1037 container->local_storage_info_list_.begin();
960 void CookiesTreeModel::OnSessionStorageModelInfoLoaded( 1038 local_storage_info != container->local_storage_info_list_.end();
961 const LocalStorageInfoList& session_storage_info) { 1039 ++local_storage_info) {
962 session_storage_info_list_ = session_storage_info; 1040 const GURL& origin(local_storage_info->origin_url);
963 PopulateSessionStorageInfoWithFilter(std::wstring()); 1041
1042 if (!filter.size() ||
1043 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
1044 string16::npos)) {
1045 CookieTreeOriginNode* origin_node =
1046 app_node->GetOrCreateOriginNode(origin);
1047 CookieTreeLocalStoragesNode* local_storages_node =
1048 origin_node->GetOrCreateLocalStoragesNode();
1049 local_storages_node->AddLocalStorageNode(
1050 new CookieTreeLocalStorageNode(local_storage_info));
1051 }
1052 }
1053 }
1054 if (begin_batch) {
1055 NotifyObserverTreeNodeChanged(root);
1056 NotifyObserverEndBatch();
1057 }
964 } 1058 }
965 1059
966 void CookiesTreeModel::PopulateSessionStorageInfoWithFilter( 1060 void CookiesTreeModel::PopulateSessionStorageInfoWithFilter(
967 const std::wstring& filter) { 1061 const string16* app_id,
968 if (session_storage_info_list_.empty()) 1062 const string16& filter) {
969 return; 1063 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
970 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1064 bool begin_batch = false;
971 NotifyObserverBeginBatch(); 1065
972 for (LocalStorageInfoList::iterator session_storage_info = 1066 for (ContainerMap::iterator ait = app_data_map_.begin();
973 session_storage_info_list_.begin(); 1067 ait != app_data_map_.end(); ++ait ) {
974 session_storage_info != session_storage_info_list_.end(); 1068 LocalDataContainer* container = ait->second;
975 ++session_storage_info) { 1069
976 const GURL& origin = session_storage_info->origin_url; 1070 if (container->session_storage_info_list_.empty())
977 if (!filter.size() || 1071 continue;
978 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1072
979 std::wstring::npos)) { 1073 if (app_id && *app_id != container->app_id())
980 CookieTreeOriginNode* origin_node = 1074 continue;
981 root->GetOrCreateOriginNode(origin); 1075
982 CookieTreeSessionStoragesNode* session_storages_node = 1076 if (!begin_batch) {
983 origin_node->GetOrCreateSessionStoragesNode(); 1077 NotifyObserverBeginBatch();
984 session_storages_node->AddSessionStorageNode( 1078 begin_batch = true;
985 new CookieTreeSessionStorageNode(session_storage_info)); 1079 }
986 } 1080
987 } 1081 CookieTreeAppNode* app_node =
988 NotifyObserverTreeNodeChanged(root); 1082 root->GetOrCreateAppNode(container->app_name(), container->app_id());
989 NotifyObserverEndBatch(); 1083
990 } 1084 for (LocalStorageInfoList::iterator session_storage_info =
991 1085 container->session_storage_info_list_.begin();
992 void CookiesTreeModel::OnIndexedDBModelInfoLoaded( 1086 session_storage_info != container->session_storage_info_list_.end();
993 const IndexedDBInfoList& indexed_db_info) { 1087 ++session_storage_info) {
994 indexed_db_info_list_ = indexed_db_info; 1088 const GURL& origin = session_storage_info->origin_url;
995 PopulateIndexedDBInfoWithFilter(std::wstring()); 1089
1090 if (!filter.size() ||
1091 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
1092 string16::npos)) {
1093 CookieTreeOriginNode* origin_node =
1094 app_node->GetOrCreateOriginNode(origin);
1095 CookieTreeSessionStoragesNode* session_storages_node =
1096 origin_node->GetOrCreateSessionStoragesNode();
1097 session_storages_node->AddSessionStorageNode(
1098 new CookieTreeSessionStorageNode(session_storage_info));
1099 }
1100 }
1101 }
1102 if (begin_batch) {
1103 NotifyObserverTreeNodeChanged(root);
1104 NotifyObserverEndBatch();
1105 }
996 } 1106 }
997 1107
998 void CookiesTreeModel::PopulateIndexedDBInfoWithFilter( 1108 void CookiesTreeModel::PopulateIndexedDBInfoWithFilter(
999 const std::wstring& filter) { 1109 const string16* app_id,
1000 if (indexed_db_info_list_.empty()) 1110 const string16& filter) {
1001 return; 1111
1002 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1112 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1003 NotifyObserverBeginBatch(); 1113 bool begin_batch = false;
1004 for (IndexedDBInfoList::iterator indexed_db_info = 1114
1005 indexed_db_info_list_.begin(); 1115 for (ContainerMap::iterator ait = app_data_map_.begin();
1006 indexed_db_info != indexed_db_info_list_.end(); 1116 ait != app_data_map_.end(); ++ait ) {
1007 ++indexed_db_info) { 1117 LocalDataContainer* container = ait->second;
1008 const GURL& origin = indexed_db_info->origin; 1118
1009 1119 if (container->indexed_db_info_list_.empty())
1010 if (!filter.size() || 1120 continue;
1011 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1121
1012 std::wstring::npos)) { 1122 if (app_id && *app_id != container->app_id())
1013 CookieTreeOriginNode* origin_node = 1123 continue;
1014 root->GetOrCreateOriginNode(origin); 1124
1015 CookieTreeIndexedDBsNode* indexed_dbs_node = 1125 if (!begin_batch) {
1016 origin_node->GetOrCreateIndexedDBsNode(); 1126 NotifyObserverBeginBatch();
1017 indexed_dbs_node->AddIndexedDBNode( 1127 begin_batch = true;
1018 new CookieTreeIndexedDBNode(indexed_db_info)); 1128 }
1019 } 1129
1020 } 1130 CookieTreeAppNode* app_node =
1021 NotifyObserverTreeNodeChanged(root); 1131 root->GetOrCreateAppNode(container->app_name(), container->app_id());
1022 NotifyObserverEndBatch(); 1132
1023 } 1133 for (IndexedDBInfoList::iterator indexed_db_info =
1024 1134 container->indexed_db_info_list_.begin();
1025 void CookiesTreeModel::OnFileSystemModelInfoLoaded( 1135 indexed_db_info != container->indexed_db_info_list_.end();
1026 const FileSystemInfoList& file_system_info) { 1136 ++indexed_db_info) {
1027 file_system_info_list_ = file_system_info; 1137 const GURL& origin = indexed_db_info->origin;
1028 PopulateFileSystemInfoWithFilter(std::wstring()); 1138
1139 if (!filter.size() ||
1140 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
1141 string16::npos)) {
1142 CookieTreeOriginNode* origin_node =
1143 app_node->GetOrCreateOriginNode(origin);
1144 CookieTreeIndexedDBsNode* indexed_dbs_node =
1145 origin_node->GetOrCreateIndexedDBsNode();
1146 indexed_dbs_node->AddIndexedDBNode(
1147 new CookieTreeIndexedDBNode(indexed_db_info));
1148 }
1149 }
1150 }
1151 if (begin_batch) {
1152 NotifyObserverTreeNodeChanged(root);
1153 NotifyObserverEndBatch();
1154 }
1155 }
1156
1157 void CookiesTreeModel::PopulateServerBoundCertInfoWithFilter(
1158 const string16* app_id,
1159 const string16& filter) {
1160 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1161 bool begin_batch = false;
1162
1163 for (ContainerMap::iterator ait = app_data_map_.begin();
1164 ait != app_data_map_.end(); ++ait ) {
1165 LocalDataContainer* container = ait->second;
1166
1167 if (container->server_bound_cert_list_.empty())
1168 continue;
1169
1170 if (app_id && *app_id != container->app_id())
1171 continue;
1172
1173 if (!begin_batch) {
1174 NotifyObserverBeginBatch();
1175 begin_batch = true;
1176 }
1177
1178 CookieTreeAppNode* app_node =
1179 root->GetOrCreateAppNode(container->app_name(), container->app_id());
1180
1181 for (ServerBoundCertList::iterator cert_info =
1182 container->server_bound_cert_list_.begin();
1183 cert_info != container->server_bound_cert_list_.end();
1184 ++cert_info) {
1185 GURL origin(cert_info->server_identifier());
1186 if (!origin.is_valid()) {
1187 // Domain Bound Cert. Make a valid URL to satisfy the
1188 // CookieTreeRootNode::GetOrCreateOriginNode interface.
1189 origin = GURL(std::string(chrome::kHttpsScheme) +
1190 content::kStandardSchemeSeparator +
1191 cert_info->server_identifier() + "/");
1192 }
1193 string16 title = CookieTreeOriginNode::TitleForUrl(origin);
1194
1195 if (!filter.size() || title.find(filter) != string16::npos) {
1196 CookieTreeOriginNode* origin_node =
1197 app_node->GetOrCreateOriginNode(origin);
1198 CookieTreeServerBoundCertsNode* server_bound_certs_node =
1199 origin_node->GetOrCreateServerBoundCertsNode();
1200 server_bound_certs_node->AddServerBoundCertNode(
1201 new CookieTreeServerBoundCertNode(cert_info));
1202 }
1203 }
1204 }
1205 if (begin_batch) {
1206 NotifyObserverTreeNodeChanged(root);
1207 NotifyObserverEndBatch();
1208 }
1029 } 1209 }
1030 1210
1031 void CookiesTreeModel::PopulateFileSystemInfoWithFilter( 1211 void CookiesTreeModel::PopulateFileSystemInfoWithFilter(
1032 const std::wstring& filter) { 1212 const string16* app_id,
1033 if (file_system_info_list_.empty()) 1213 const string16& filter) {
1034 return; 1214 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1035 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1215 bool begin_batch = false;
1036 NotifyObserverBeginBatch(); 1216
1037 for (FileSystemInfoList::iterator file_system_info = 1217 for (ContainerMap::iterator ait = app_data_map_.begin();
1038 file_system_info_list_.begin(); 1218 ait != app_data_map_.end(); ++ait ) {
1039 file_system_info != file_system_info_list_.end(); 1219 LocalDataContainer* container = ait->second;
1040 ++file_system_info) { 1220
1041 GURL origin(file_system_info->origin); 1221 if (container->file_system_info_list_.empty())
1042 1222 continue;
1043 if (!filter.size() || 1223
1044 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1224 if (app_id && *app_id != container->app_id())
1045 std::wstring::npos)) { 1225 continue;
1046 CookieTreeOriginNode* origin_node = 1226
1047 root->GetOrCreateOriginNode(origin); 1227 if (!begin_batch) {
1048 CookieTreeFileSystemsNode* file_systems_node = 1228 NotifyObserverBeginBatch();
1049 origin_node->GetOrCreateFileSystemsNode(); 1229 begin_batch = true;
1050 file_systems_node->AddFileSystemNode( 1230 }
1051 new CookieTreeFileSystemNode(file_system_info)); 1231
1052 } 1232 CookieTreeAppNode* app_node =
1053 } 1233 root->GetOrCreateAppNode(container->app_name(), container->app_id());
1054 NotifyObserverTreeNodeChanged(root); 1234
1055 NotifyObserverEndBatch(); 1235 for (FileSystemInfoList::iterator file_system_info =
1056 } 1236 container->file_system_info_list_.begin();
1057 1237 file_system_info != container->file_system_info_list_.end();
1058 void CookiesTreeModel::OnQuotaModelInfoLoaded( 1238 ++file_system_info) {
1059 const QuotaInfoArray& quota_info) { 1239 GURL origin(file_system_info->origin);
1060 quota_info_list_ = quota_info; 1240
1061 PopulateQuotaInfoWithFilter(std::wstring()); 1241 if (!filter.size() ||
1242 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
1243 string16::npos)) {
1244 CookieTreeOriginNode* origin_node =
1245 app_node->GetOrCreateOriginNode(origin);
1246 CookieTreeFileSystemsNode* file_systems_node =
1247 origin_node->GetOrCreateFileSystemsNode();
1248 file_systems_node->AddFileSystemNode(
1249 new CookieTreeFileSystemNode(file_system_info));
1250 }
1251 }
1252 }
1253 if (begin_batch) {
1254 NotifyObserverTreeNodeChanged(root);
1255 NotifyObserverEndBatch();
1256 }
1062 } 1257 }
1063 1258
1064 void CookiesTreeModel::PopulateQuotaInfoWithFilter( 1259 void CookiesTreeModel::PopulateQuotaInfoWithFilter(
1065 const std::wstring& filter) { 1260 const string16* app_id,
1066 if (quota_info_list_.empty()) 1261 const string16& filter) {
1067 return; 1262 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1068 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1263 bool begin_batch = false;
1069 NotifyObserverBeginBatch(); 1264
1070 for (QuotaInfoArray::iterator quota_info = quota_info_list_.begin(); 1265 for (ContainerMap::iterator ait = app_data_map_.begin();
1071 quota_info != quota_info_list_.end(); 1266 ait != app_data_map_.end(); ++ait ) {
1072 ++quota_info) { 1267 LocalDataContainer* container = ait->second;
1073 if (!filter.size() || 1268
1074 (UTF8ToWide(quota_info->host).find(filter) != std::wstring::npos)) { 1269 if (container->quota_info_list_.empty())
1075 CookieTreeOriginNode* origin_node = 1270 continue;
1076 root->GetOrCreateOriginNode(GURL("http://" + quota_info->host)); 1271
1077 origin_node->UpdateOrCreateQuotaNode(quota_info); 1272 if (app_id && *app_id != container->app_id())
1078 } 1273 continue;
1079 } 1274
1080 NotifyObserverTreeNodeChanged(root); 1275 if (!begin_batch) {
1081 NotifyObserverEndBatch(); 1276 NotifyObserverBeginBatch();
1082 } 1277 begin_batch = true;
1083 1278 }
1084 void CookiesTreeModel::OnServerBoundCertModelInfoLoaded( 1279
1085 const ServerBoundCertList& cert_list) { 1280 CookieTreeAppNode* app_node =
1086 server_bound_cert_list_ = cert_list; 1281 root->GetOrCreateAppNode(container->app_name(), container->app_id());
1087 PopulateServerBoundCertInfoWithFilter(std::wstring()); 1282
1088 } 1283 for (QuotaInfoList::iterator quota_info =
1089 1284 container->quota_info_list_.begin();
1090 void CookiesTreeModel::PopulateServerBoundCertInfoWithFilter( 1285 quota_info != container->quota_info_list_.end();
1091 const std::wstring& filter) { 1286 ++quota_info) {
1092 if (server_bound_cert_list_.empty()) 1287 if (!filter.size() ||
1093 return; 1288 (UTF8ToUTF16(quota_info->host).find(filter) != string16::npos)) {
1094 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1289 CookieTreeOriginNode* origin_node =
1095 NotifyObserverBeginBatch(); 1290 app_node->GetOrCreateOriginNode(GURL("http://" + quota_info->host));
1096 for (ServerBoundCertList::iterator cert_info = 1291 origin_node->UpdateOrCreateQuotaNode(quota_info);
1097 server_bound_cert_list_.begin(); 1292 }
1098 cert_info != server_bound_cert_list_.end(); 1293 }
1099 ++cert_info) { 1294 }
1100 GURL origin(cert_info->server_identifier()); 1295 if (begin_batch) {
1101 if (!origin.is_valid()) { 1296 NotifyObserverTreeNodeChanged(root);
1102 // Domain Bound Cert. Make a valid URL to satisfy the 1297 NotifyObserverEndBatch();
1103 // CookieTreeRootNode::GetOrCreateOriginNode interface. 1298 }
1104 origin = GURL(std::string(chrome::kHttpsScheme) +
1105 content::kStandardSchemeSeparator +
1106 cert_info->server_identifier() + "/");
1107 }
1108 std::wstring title = CookieTreeOriginNode::TitleForUrl(origin);
1109
1110 if (!filter.size() || title.find(filter) != std::wstring::npos) {
1111 CookieTreeOriginNode* origin_node =
1112 root->GetOrCreateOriginNode(origin);
1113 CookieTreeServerBoundCertsNode* server_bound_certs_node =
1114 origin_node->GetOrCreateServerBoundCertsNode();
1115 server_bound_certs_node->AddServerBoundCertNode(
1116 new CookieTreeServerBoundCertNode(cert_info));
1117 }
1118 }
1119 NotifyObserverTreeNodeChanged(root);
1120 NotifyObserverEndBatch();
1121 } 1299 }
1122 1300
1123 void CookiesTreeModel::NotifyObserverBeginBatch() { 1301 void CookiesTreeModel::NotifyObserverBeginBatch() {
1124 // Only notify the model once if we're batching in a nested manner. 1302 // Only notify the model once if we're batching in a nested manner.
1125 if (batch_update_++ == 0) { 1303 if (batch_update_++ == 0) {
1126 FOR_EACH_OBSERVER(Observer, 1304 FOR_EACH_OBSERVER(Observer,
1127 cookies_observer_list_, 1305 cookies_observer_list_,
1128 TreeModelBeginBatch(this)); 1306 TreeModelBeginBatch(this));
1129 } 1307 }
1130 } 1308 }
1131 1309
1132 void CookiesTreeModel::NotifyObserverEndBatch() { 1310 void CookiesTreeModel::NotifyObserverEndBatch() {
1133 // Only notify the observers if this is the outermost call to EndBatch() if 1311 // Only notify the observers if this is the outermost call to EndBatch() if
1134 // called in a nested manner. 1312 // called in a nested manner.
1135 if (--batch_update_ == 0) { 1313 if (--batch_update_ == 0) {
1136 FOR_EACH_OBSERVER(Observer, 1314 FOR_EACH_OBSERVER(Observer,
1137 cookies_observer_list_, 1315 cookies_observer_list_,
1138 TreeModelEndBatch(this)); 1316 TreeModelEndBatch(this));
1139 } 1317 }
1140 } 1318 }
1319
1320 LocalDataContainer* CookiesTreeModel::GetLocalDataContainer(
1321 const string16& app_id) {
1322 LocalDataContainer* container = app_data_map_[app_id];
1323 return container;
1324 }
1325
1326 ///////////////////////////////////////////////////////////////////////////////
1327 // LocalDataContainer, public:
1328
1329 LocalDataContainer::LocalDataContainer(
1330 const string16& app_name,
1331 const string16& app_id,
1332 BrowsingDataCookieHelper* cookie_helper,
1333 BrowsingDataDatabaseHelper* database_helper,
1334 BrowsingDataLocalStorageHelper* local_storage_helper,
1335 BrowsingDataLocalStorageHelper* session_storage_helper,
1336 BrowsingDataAppCacheHelper* appcache_helper,
1337 BrowsingDataIndexedDBHelper* indexed_db_helper,
1338 BrowsingDataFileSystemHelper* file_system_helper,
1339 BrowsingDataQuotaHelper* quota_helper,
1340 BrowsingDataServerBoundCertHelper* server_bound_cert_helper)
1341 : app_name_(app_name),
1342 app_id_(app_id),
1343 appcache_helper_(appcache_helper),
1344 cookie_helper_(cookie_helper),
1345 database_helper_(database_helper),
1346 local_storage_helper_(local_storage_helper),
1347 session_storage_helper_(session_storage_helper),
1348 indexed_db_helper_(indexed_db_helper),
1349 file_system_helper_(file_system_helper),
1350 quota_helper_(quota_helper),
1351 server_bound_cert_helper_(server_bound_cert_helper),
1352 delegate_(NULL),
1353 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {}
1354
1355 LocalDataContainer::~LocalDataContainer() {}
1356
1357 void LocalDataContainer::Init(CookiesTreeModelDelegate* delegate) {
1358 DCHECK(!delegate_);
1359 delegate_ = delegate;
1360
1361 DCHECK(cookie_helper_);
1362 cookie_helper_->StartFetching(
1363 base::Bind(&LocalDataContainer::OnCookiesModelInfoLoaded,
1364 weak_ptr_factory_.GetWeakPtr()));
1365 DCHECK(database_helper_);
1366 database_helper_->StartFetching(
1367 base::Bind(&LocalDataContainer::OnDatabaseModelInfoLoaded,
1368 weak_ptr_factory_.GetWeakPtr()));
1369 DCHECK(local_storage_helper_);
1370 local_storage_helper_->StartFetching(
1371 base::Bind(&LocalDataContainer::OnLocalStorageModelInfoLoaded,
1372 weak_ptr_factory_.GetWeakPtr()));
1373 if (session_storage_helper_) {
1374 session_storage_helper_->StartFetching(
1375 base::Bind(&LocalDataContainer::OnSessionStorageModelInfoLoaded,
1376 weak_ptr_factory_.GetWeakPtr()));
1377 }
1378
1379 // TODO(michaeln): When all of the UI implementations have been updated, make
1380 // this a required parameter.
1381 if (appcache_helper_) {
1382 appcache_helper_->StartFetching(
1383 base::Bind(&LocalDataContainer::OnAppCacheModelInfoLoaded,
1384 weak_ptr_factory_.GetWeakPtr()));
1385 }
1386
1387 if (indexed_db_helper_) {
1388 indexed_db_helper_->StartFetching(
1389 base::Bind(&LocalDataContainer::OnIndexedDBModelInfoLoaded,
1390 weak_ptr_factory_.GetWeakPtr()));
1391 }
1392
1393 if (file_system_helper_) {
1394 file_system_helper_->StartFetching(
1395 base::Bind(&LocalDataContainer::OnFileSystemModelInfoLoaded,
1396 weak_ptr_factory_.GetWeakPtr()));
1397 }
1398
1399 if (quota_helper_) {
1400 quota_helper_->StartFetching(
1401 base::Bind(&LocalDataContainer::OnQuotaModelInfoLoaded,
1402 weak_ptr_factory_.GetWeakPtr()));
1403 }
1404
1405 if (server_bound_cert_helper_) {
1406 server_bound_cert_helper_->StartFetching(
1407 base::Bind(&LocalDataContainer::OnServerBoundCertModelInfoLoaded,
1408 weak_ptr_factory_.GetWeakPtr()));
1409 }
1410 }
1411
1412 void LocalDataContainer::OnAppCacheModelInfoLoaded() {
1413 using appcache::AppCacheInfo;
1414 using appcache::AppCacheInfoCollection;
1415 using appcache::AppCacheInfoVector;
1416 typedef std::map<GURL, AppCacheInfoVector> InfoByOrigin;
1417
1418 scoped_refptr<AppCacheInfoCollection> appcache_info =
1419 appcache_helper_->info_collection();
1420 if (!appcache_info || appcache_info->infos_by_origin.empty())
1421 return;
1422
1423 for (InfoByOrigin::const_iterator origin =
1424 appcache_info->infos_by_origin.begin();
1425 origin != appcache_info->infos_by_origin.end(); ++origin) {
1426 std::list<AppCacheInfo>& info_list = appcache_info_[origin->first];
1427 info_list.insert(
1428 info_list.begin(), origin->second.begin(), origin->second.end());
1429 }
1430
1431 delegate_->PopulateAppCacheInfoWithFilter(&app_name_, string16());
1432 }
1433
1434 void LocalDataContainer::OnCookiesModelInfoLoaded(
1435 const net::CookieList& cookie_list) {
1436 cookie_list_.insert(cookie_list_.begin(),
1437 cookie_list.begin(),
1438 cookie_list.end());
1439 DCHECK(delegate_);
1440 delegate_->PopulateCookieInfoWithFilter(&app_id_, string16());
1441 }
1442
1443 void LocalDataContainer::OnDatabaseModelInfoLoaded(
1444 const DatabaseInfoList& database_info) {
1445 database_info_list_ = database_info;
1446 DCHECK(delegate_);
1447 delegate_->PopulateDatabaseInfoWithFilter(&app_id_, string16());
1448 }
1449
1450 void LocalDataContainer::OnLocalStorageModelInfoLoaded(
1451 const LocalStorageInfoList& local_storage_info) {
1452 local_storage_info_list_ = local_storage_info;
1453 DCHECK(delegate_);
1454 delegate_->PopulateLocalStorageInfoWithFilter(&app_id_, string16());
1455 }
1456
1457 void LocalDataContainer::OnSessionStorageModelInfoLoaded(
1458 const LocalStorageInfoList& session_storage_info) {
1459 session_storage_info_list_ = session_storage_info;
1460 DCHECK(delegate_);
1461 delegate_->PopulateSessionStorageInfoWithFilter(&app_id_, string16());
1462 }
1463
1464 void LocalDataContainer::OnIndexedDBModelInfoLoaded(
1465 const IndexedDBInfoList& indexed_db_info) {
1466 indexed_db_info_list_ = indexed_db_info;
1467 DCHECK(delegate_);
1468 delegate_->PopulateIndexedDBInfoWithFilter(&app_id_, string16());
1469 }
1470
1471 void LocalDataContainer::OnFileSystemModelInfoLoaded(
1472 const FileSystemInfoList& file_system_info) {
1473 file_system_info_list_ = file_system_info;
1474 DCHECK(delegate_);
1475 delegate_->PopulateFileSystemInfoWithFilter(&app_id_, string16());
1476 }
1477
1478 void LocalDataContainer::OnQuotaModelInfoLoaded(
1479 const QuotaInfoList& quota_info) {
1480 quota_info_list_ = quota_info;
1481 DCHECK(delegate_);
1482 delegate_->PopulateQuotaInfoWithFilter(&app_id_, string16());
1483 }
1484
1485 void LocalDataContainer::OnServerBoundCertModelInfoLoaded(
1486 const ServerBoundCertList& cert_list) {
1487 server_bound_cert_list_ = cert_list;
1488 DCHECK(delegate_);
1489 delegate_->PopulateServerBoundCertInfoWithFilter(&app_id_, string16());
1490 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698