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

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

Powered by Google App Engine
This is Rietveld 408576698