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

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: Mostly working, just need to refresh properly on Remove All 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
« no previous file with comments | « chrome/browser/cookies_tree_model.h ('k') | chrome/browser/cookies_tree_model_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ////DCHECK(GetModel()->appcache_helper_);
143 GetModel()->appcache_helper_->DeleteAppCacheGroup( 155
144 appcache_info_->manifest_url); 156 CookieTreeAppNode* app = static_cast<CookieTreeAppNode*>(
145 GetModel()->appcache_info_[origin_url_].erase(appcache_info_); 157 parent()->parent()->parent());
158 LocalDataContainer* container = GetModel()->GetLocalDataContainer(
159 app->app_id());
160
161 if (container) {
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( 210 : CookieTreeNode(UTF8ToUTF16(
184 local_storage_info->origin.empty() ? 211 local_storage_info->origin.empty() ?
185 local_storage_info->database_identifier : 212 local_storage_info->database_identifier :
186 local_storage_info->origin)), 213 local_storage_info->origin)),
187 local_storage_info_(local_storage_info) { 214 local_storage_info_(local_storage_info) {
188 } 215 }
189 216
190 CookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {} 217 CookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {}
191 218
192 void CookieTreeLocalStorageNode::DeleteStoredObjects() { 219 void CookieTreeLocalStorageNode::DeleteStoredObjects() {
193 GetModel()->local_storage_helper_->DeleteLocalStorageFile( 220 CookieTreeAppNode* app = static_cast<CookieTreeAppNode*>(
194 local_storage_info_->file_path); 221 parent()->parent()->parent());
195 GetModel()->local_storage_info_list_.erase(local_storage_info_); 222 LocalDataContainer* container = GetModel()->GetLocalDataContainer(
223 app->app_id());
224
225 if (container) {
226 container->local_storage_helper_->DeleteLocalStorageFile(
227 local_storage_info_->file_path);
228 container->local_storage_info_list_.erase(local_storage_info_);
229 }
196 } 230 }
197 231
198 CookieTreeNode::DetailedInfo 232 CookieTreeNode::DetailedInfo
199 CookieTreeLocalStorageNode::GetDetailedInfo() const { 233 CookieTreeLocalStorageNode::GetDetailedInfo() const {
200 return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage( 234 return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage(
201 &*local_storage_info_); 235 &*local_storage_info_);
202 } 236 }
203 237
204 /////////////////////////////////////////////////////////////////////////////// 238 ///////////////////////////////////////////////////////////////////////////////
205 // CookieTreeSessionStorageNode, public: 239 // CookieTreeSessionStorageNode, public:
206 240
207 CookieTreeSessionStorageNode::CookieTreeSessionStorageNode( 241 CookieTreeSessionStorageNode::CookieTreeSessionStorageNode(
208 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 242 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator
209 session_storage_info) 243 session_storage_info)
210 : CookieTreeNode(UTF8ToUTF16( 244 : CookieTreeNode(UTF8ToUTF16(
211 session_storage_info->origin.empty() ? 245 session_storage_info->origin.empty() ?
212 session_storage_info->database_identifier : 246 session_storage_info->database_identifier :
213 session_storage_info->origin)), 247 session_storage_info->origin)),
214 session_storage_info_(session_storage_info) { 248 session_storage_info_(session_storage_info) {
215 } 249 }
216 250
217 CookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {} 251 CookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {}
218 252
219 void CookieTreeSessionStorageNode::DeleteStoredObjects() { 253 void CookieTreeSessionStorageNode::DeleteStoredObjects() {
220 GetModel()->session_storage_info_list_.erase(session_storage_info_); 254 CookieTreeAppNode* app = static_cast<CookieTreeAppNode*>(
255 parent()->parent()->parent());
256 LocalDataContainer* container = GetModel()->GetLocalDataContainer(
257 app->app_id());
258
259 if (container) {
260 container->session_storage_info_list_.erase(session_storage_info_);
261 }
221 } 262 }
222 263
223 CookieTreeNode::DetailedInfo 264 CookieTreeNode::DetailedInfo
224 CookieTreeSessionStorageNode::GetDetailedInfo() const { 265 CookieTreeSessionStorageNode::GetDetailedInfo() const {
225 return DetailedInfo(parent()->parent()->GetTitle()).InitSessionStorage( 266 return DetailedInfo(parent()->parent()->GetTitle()).InitSessionStorage(
226 &*session_storage_info_); 267 &*session_storage_info_);
227 } 268 }
228 269
229 /////////////////////////////////////////////////////////////////////////////// 270 ///////////////////////////////////////////////////////////////////////////////
230 // CookieTreeIndexedDBNode, public: 271 // CookieTreeIndexedDBNode, public:
231 272
232 CookieTreeIndexedDBNode::CookieTreeIndexedDBNode( 273 CookieTreeIndexedDBNode::CookieTreeIndexedDBNode(
233 std::list<BrowsingDataIndexedDBHelper::IndexedDBInfo>::iterator 274 std::list<BrowsingDataIndexedDBHelper::IndexedDBInfo>::iterator
234 indexed_db_info) 275 indexed_db_info)
235 : CookieTreeNode(UTF8ToUTF16( 276 : CookieTreeNode(UTF8ToUTF16(
236 indexed_db_info->origin.spec())), 277 indexed_db_info->origin.spec())),
237 indexed_db_info_(indexed_db_info) { 278 indexed_db_info_(indexed_db_info) {
238 } 279 }
239 280
240 CookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {} 281 CookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {}
241 282
242 void CookieTreeIndexedDBNode::DeleteStoredObjects() { 283 void CookieTreeIndexedDBNode::DeleteStoredObjects() {
243 GetModel()->indexed_db_helper_->DeleteIndexedDB( 284 CookieTreeAppNode* app = static_cast<CookieTreeAppNode*>(
244 indexed_db_info_->origin); 285 parent()->parent()->parent());
245 GetModel()->indexed_db_info_list_.erase(indexed_db_info_); 286 LocalDataContainer* container = GetModel()->GetLocalDataContainer(
287 app->app_id());
288
289 if (container) {
290 container->indexed_db_helper_->DeleteIndexedDB(
291 indexed_db_info_->origin);
292 container->indexed_db_info_list_.erase(indexed_db_info_);
293 }
246 } 294 }
247 295
248 CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const { 296 CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const {
249 return DetailedInfo(parent()->parent()->GetTitle()).InitIndexedDB( 297 return DetailedInfo(parent()->parent()->GetTitle()).InitIndexedDB(
250 &*indexed_db_info_); 298 &*indexed_db_info_);
251 } 299 }
252 300
253 /////////////////////////////////////////////////////////////////////////////// 301 ///////////////////////////////////////////////////////////////////////////////
254 // CookieTreeFileSystemNode, public: 302 // CookieTreeFileSystemNode, public:
255 303
256 CookieTreeFileSystemNode::CookieTreeFileSystemNode( 304 CookieTreeFileSystemNode::CookieTreeFileSystemNode(
257 std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator 305 std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator
258 file_system_info) 306 file_system_info)
259 : CookieTreeNode(UTF8ToUTF16( 307 : CookieTreeNode(UTF8ToUTF16(
260 file_system_info->origin.spec())), 308 file_system_info->origin.spec())),
261 file_system_info_(file_system_info) { 309 file_system_info_(file_system_info) {
262 } 310 }
263 311
264 CookieTreeFileSystemNode::~CookieTreeFileSystemNode() {} 312 CookieTreeFileSystemNode::~CookieTreeFileSystemNode() {}
265 313
266 void CookieTreeFileSystemNode::DeleteStoredObjects() { 314 void CookieTreeFileSystemNode::DeleteStoredObjects() {
267 GetModel()->file_system_helper_->DeleteFileSystemOrigin( 315 CookieTreeAppNode* app = static_cast<CookieTreeAppNode*>(
268 file_system_info_->origin); 316 parent()->parent()->parent());
269 GetModel()->file_system_info_list_.erase(file_system_info_); 317 LocalDataContainer* container = GetModel()->GetLocalDataContainer(
318 app->app_id());
319
320 if (container) {
321 container->file_system_helper_->DeleteFileSystemOrigin(
322 file_system_info_->origin);
323 container->file_system_info_list_.erase(file_system_info_);
324 }
270 } 325 }
271 326
272 CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const { 327 CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const {
273 return DetailedInfo(parent()->parent()->GetTitle()).InitFileSystem( 328 return DetailedInfo(parent()->parent()->GetTitle()).InitFileSystem(
274 &*file_system_info_); 329 &*file_system_info_);
275 } 330 }
276 331
277 /////////////////////////////////////////////////////////////////////////////// 332 ///////////////////////////////////////////////////////////////////////////////
278 // CookieTreeQuotaNode, public: 333 // CookieTreeQuotaNode, public:
279 334
280 CookieTreeQuotaNode::CookieTreeQuotaNode( 335 CookieTreeQuotaNode::CookieTreeQuotaNode(
281 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) 336 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info)
282 : CookieTreeNode(UTF8ToUTF16(quota_info->host)), 337 : CookieTreeNode(UTF8ToUTF16(quota_info->host)),
283 quota_info_(quota_info) { 338 quota_info_(quota_info) {
284 } 339 }
285 340
286 CookieTreeQuotaNode::~CookieTreeQuotaNode() {} 341 CookieTreeQuotaNode::~CookieTreeQuotaNode() {}
287 342
288 void CookieTreeQuotaNode::DeleteStoredObjects() { 343 void CookieTreeQuotaNode::DeleteStoredObjects() {
289 // Calling this function may cause unexpected over-quota state of origin. 344 // Calling this function may cause unexpected over-quota state of origin.
290 // However, it'll caused no problem, just prevent usage growth of the origin. 345 // However, it'll caused no problem, just prevent usage growth of the origin.
291 GetModel()->quota_helper_->RevokeHostQuota(quota_info_->host); 346 CookieTreeAppNode* app = static_cast<CookieTreeAppNode*>(
292 GetModel()->quota_info_list_.erase(quota_info_); 347 parent()->parent());
348 LocalDataContainer* container = GetModel()->GetLocalDataContainer(
349 app->app_id());
350
351 if (container) {
352 container->quota_helper_->RevokeHostQuota(quota_info_->host);
353 container->quota_info_list_.erase(quota_info_);
354 }
293 } 355 }
294 356
295 CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const { 357 CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const {
296 return DetailedInfo(parent()->parent()->GetTitle()).InitQuota( 358 return DetailedInfo(parent()->parent()->GetTitle()).InitQuota(
297 &*quota_info_); 359 &*quota_info_);
298 } 360 }
299 361
300 /////////////////////////////////////////////////////////////////////////////// 362 ///////////////////////////////////////////////////////////////////////////////
301 // CookieTreeServerBoundCertNode, public: 363 // CookieTreeServerBoundCertNode, public:
302 364
303 CookieTreeServerBoundCertNode::CookieTreeServerBoundCertNode( 365 CookieTreeServerBoundCertNode::CookieTreeServerBoundCertNode(
304 net::ServerBoundCertStore::ServerBoundCertList::iterator cert) 366 net::ServerBoundCertStore::ServerBoundCertList::iterator cert)
305 : CookieTreeNode(ASCIIToUTF16(cert->server_identifier())), 367 : CookieTreeNode(ASCIIToUTF16(cert->server_identifier())),
306 server_bound_cert_(cert) { 368 server_bound_cert_(cert) {
307 } 369 }
308 370
309 CookieTreeServerBoundCertNode::~CookieTreeServerBoundCertNode() {} 371 CookieTreeServerBoundCertNode::~CookieTreeServerBoundCertNode() {}
310 372
311 void CookieTreeServerBoundCertNode::DeleteStoredObjects() { 373 void CookieTreeServerBoundCertNode::DeleteStoredObjects() {
312 GetModel()->server_bound_cert_helper_->DeleteServerBoundCert( 374 CookieTreeAppNode* app = static_cast<CookieTreeAppNode*>(
313 server_bound_cert_->server_identifier()); 375 parent()->parent()->parent());
314 GetModel()->server_bound_cert_list_.erase(server_bound_cert_); 376 LocalDataContainer* container = GetModel()->GetLocalDataContainer(
377 app->app_id());
378
379 if (container) {
380 container->server_bound_cert_helper_->DeleteServerBoundCert(
381 server_bound_cert_->server_identifier());
382 container->server_bound_cert_list_.erase(server_bound_cert_);
383 }
315 } 384 }
316 385
317 CookieTreeNode::DetailedInfo 386 CookieTreeNode::DetailedInfo
318 CookieTreeServerBoundCertNode::GetDetailedInfo() const { 387 CookieTreeServerBoundCertNode::GetDetailedInfo() const {
319 return DetailedInfo(parent()->parent()->GetTitle()).InitServerBoundCert( 388 return DetailedInfo(parent()->parent()->GetTitle()).InitServerBoundCert(
320 &*server_bound_cert_); 389 &*server_bound_cert_);
321 } 390 }
322 391
323 /////////////////////////////////////////////////////////////////////////////// 392 ///////////////////////////////////////////////////////////////////////////////
324 // CookieTreeRootNode, public: 393 // CookieTreeRootNode, public:
325 394
326 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model) 395 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model)
327 : model_(model) { 396 : model_(model) {
328 } 397 }
329 398
330 CookieTreeRootNode::~CookieTreeRootNode() {} 399 CookieTreeRootNode::~CookieTreeRootNode() {}
331 400
401 /*
markusheintz_ 2012/06/13 23:40:39 Please remove commented code.
332 CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode( 402 CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode(
333 const GURL& url) { 403 const GURL& url) {
334 CookieTreeOriginNode origin_node(url); 404 CookieTreeOriginNode origin_node(url);
335 405
336 // First see if there is an existing match. 406 // First see if there is an existing match.
337 std::vector<CookieTreeNode*>::iterator origin_node_iterator = 407 std::vector<CookieTreeNode*>::iterator origin_node_iterator =
338 std::lower_bound(children().begin(), 408 std::lower_bound(children().begin(),
339 children().end(), 409 children().end(),
340 &origin_node, 410 &origin_node,
341 OriginNodeComparator()); 411 OriginNodeComparator());
342 412
343 if (origin_node_iterator != children().end() && 413 if (origin_node_iterator != children().end() &&
344 WideToUTF16Hack(CookieTreeOriginNode::TitleForUrl(url)) == 414 WideToUTF16Hack(CookieTreeOriginNode::TitleForUrl(url)) ==
345 (*origin_node_iterator)->GetTitle()) 415 (*origin_node_iterator)->GetTitle())
346 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator); 416 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator);
347 // Node doesn't exist, create a new one and insert it into the (ordered) 417 // Node doesn't exist, create a new one and insert it into the (ordered)
348 // children. 418 // children.
349 CookieTreeOriginNode* retval = new CookieTreeOriginNode(url); 419 CookieTreeOriginNode* retval = new CookieTreeOriginNode(url);
350 DCHECK(model_); 420 DCHECK(model_);
351 model_->Add(this, retval, (origin_node_iterator - children().begin())); 421 model_->Add(this, retval, (origin_node_iterator - children().begin()));
352 return retval; 422 return retval;
353 } 423 }
424 */
425 CookieTreeAppNode* CookieTreeRootNode::GetOrCreateAppNode(
426 const string16& app_name,
427 const string16& app_id) {
428 CookieTreeAppNode app_node(app_name, app_id);
429
430 // First see if there is an existing match.
431 std::vector<CookieTreeNode*>::iterator app_node_iterator =
432 std::lower_bound(children().begin(),
433 children().end(),
434 &app_node,
435 AppNodeComparator());
436
437 if (app_node_iterator != children().end())
438 return static_cast<CookieTreeAppNode*>(*app_node_iterator);
439
440 // Node doesn't exist, create a new one and insert it into the (ordered)
441 // children.
442 CookieTreeAppNode* retval = new CookieTreeAppNode(app_name, app_id);
443 DCHECK(model_);
444 model_->Add(this, retval, (app_node_iterator - children().begin()));
445 return retval;
446 }
354 447
355 CookiesTreeModel* CookieTreeRootNode::GetModel() const { 448 CookiesTreeModel* CookieTreeRootNode::GetModel() const {
356 return model_; 449 return model_;
357 } 450 }
358 451
359 CookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const { 452 CookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const {
360 return DetailedInfo(string16()).Init(DetailedInfo::TYPE_ROOT); 453 return DetailedInfo(string16()).Init(DetailedInfo::TYPE_ROOT);
361 } 454 }
362 455
363 /////////////////////////////////////////////////////////////////////////////// 456 ///////////////////////////////////////////////////////////////////////////////
457 // CookieTreeAppNode, public:
458
459 CookieTreeAppNode::CookieTreeAppNode(const string16& app_name,
460 const string16& app_id)
461 : CookieTreeNode(app_name),
462 app_name_(app_name),
463 app_id_(app_id) {}
464
465 CookieTreeAppNode::~CookieTreeAppNode() {}
466
467 CookieTreeOriginNode* CookieTreeAppNode::GetOrCreateOriginNode(
468 const GURL& url) {
469 CookieTreeOriginNode origin_node(app_id_, url);
470
471 // First see if there is an existing match.
472 std::vector<CookieTreeNode*>::iterator origin_node_iterator =
473 std::lower_bound(children().begin(),
474 children().end(),
475 &origin_node,
476 OriginNodeComparator());
477
478 if (origin_node_iterator != children().end() &&
479 WideToUTF16Hack(CookieTreeOriginNode::TitleForUrl(url)) ==
480 (*origin_node_iterator)->GetTitle())
481 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator);
482 // Node doesn't exist, create a new one and insert it into the (ordered)
483 // children.
484 CookieTreeOriginNode* retval = new CookieTreeOriginNode(app_id_, url);
485 GetModel()->Add(this, retval, (origin_node_iterator - children().begin()));
486 return retval;
487 }
488
489 CookieTreeNode::DetailedInfo CookieTreeAppNode::GetDetailedInfo() const {
490 // TODO(nasko): Fix the proper string to be passed instead of GetTitle if
491 // need be.
492 return DetailedInfo(GetTitle()).InitApp(app_name_, app_id_);
493 }
494
495 ///////////////////////////////////////////////////////////////////////////////
364 // CookieTreeOriginNode, public: 496 // CookieTreeOriginNode, public:
365 497
366 // static 498 // static
367 std::wstring CookieTreeOriginNode::TitleForUrl( 499 std::wstring CookieTreeOriginNode::TitleForUrl(
368 const GURL& url) { 500 const GURL& url) {
369 return UTF8ToWide(url.SchemeIsFile() ? kFileOriginNodeName : url.host()); 501 return UTF8ToWide(url.SchemeIsFile() ? kFileOriginNodeName : url.host());
370 } 502 }
371 503
372 CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url) 504 CookieTreeOriginNode::CookieTreeOriginNode(const string16& app, const GURL& url)
373 : CookieTreeNode(WideToUTF16Hack(TitleForUrl(url))), 505 : CookieTreeNode(WideToUTF16Hack(TitleForUrl(url))),
374 cookies_child_(NULL), 506 cookies_child_(NULL),
375 databases_child_(NULL), 507 databases_child_(NULL),
376 local_storages_child_(NULL), 508 local_storages_child_(NULL),
377 session_storages_child_(NULL), 509 session_storages_child_(NULL),
378 appcaches_child_(NULL), 510 appcaches_child_(NULL),
379 indexed_dbs_child_(NULL), 511 indexed_dbs_child_(NULL),
380 file_systems_child_(NULL), 512 file_systems_child_(NULL),
381 quota_child_(NULL), 513 quota_child_(NULL),
382 server_bound_certs_child_(NULL), 514 server_bound_certs_child_(NULL),
383 url_(url) {} 515 url_(url),
516 app_id_(app) {}
384 517
385 CookieTreeOriginNode::~CookieTreeOriginNode() {} 518 CookieTreeOriginNode::~CookieTreeOriginNode() {}
386 519
387 CookieTreeNode::DetailedInfo CookieTreeOriginNode::GetDetailedInfo() const { 520 CookieTreeNode::DetailedInfo CookieTreeOriginNode::GetDetailedInfo() const {
388 return DetailedInfo(GetTitle()).Init(DetailedInfo::TYPE_ORIGIN); 521 return DetailedInfo(GetTitle()).Init(DetailedInfo::TYPE_ORIGIN);
389 } 522 }
390 523
391 CookieTreeCookiesNode* CookieTreeOriginNode::GetOrCreateCookiesNode() { 524 CookieTreeCookiesNode* CookieTreeOriginNode::GetOrCreateCookiesNode() {
392 if (cookies_child_) 525 if (cookies_child_)
393 return cookies_child_; 526 return cookies_child_;
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 738
606 bool CookieTreeNode::NodeTitleComparator::operator() ( 739 bool CookieTreeNode::NodeTitleComparator::operator() (
607 const CookieTreeNode* lhs, const CookieTreeNode* rhs) { 740 const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
608 const CookieTreeNode* left = 741 const CookieTreeNode* left =
609 static_cast<const CookieTreeNode*>(lhs); 742 static_cast<const CookieTreeNode*>(lhs);
610 const CookieTreeNode* right = 743 const CookieTreeNode* right =
611 static_cast<const CookieTreeNode*>(rhs); 744 static_cast<const CookieTreeNode*>(rhs);
612 return (left->GetTitle() < right->GetTitle()); 745 return (left->GetTitle() < right->GetTitle());
613 } 746 }
614 747
748 bool CookieTreeNode::AppNodeComparator::operator() (
749 const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
750 const CookieTreeAppNode* left =
751 static_cast<const CookieTreeAppNode*>(lhs);
752 const CookieTreeAppNode* right =
753 static_cast<const CookieTreeAppNode*>(rhs);
754 return (left->app_id() < right->app_id());
755 }
756
615 void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) { 757 void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) {
616 DCHECK(new_child); 758 DCHECK(new_child);
617 std::vector<CookieTreeNode*>::iterator iter = 759 std::vector<CookieTreeNode*>::iterator iter =
618 std::lower_bound(children().begin(), 760 std::lower_bound(children().begin(),
619 children().end(), 761 children().end(),
620 new_child, 762 new_child,
621 NodeTitleComparator()); 763 NodeTitleComparator());
622 GetModel()->Add(this, new_child, iter - children().begin()); 764 GetModel()->Add(this, new_child, iter - children().begin());
623 } 765 }
624 766
625 /////////////////////////////////////////////////////////////////////////////// 767 ///////////////////////////////////////////////////////////////////////////////
626 // CookiesTreeModel, public: 768 // CookiesTreeModel, public:
627 769 CookiesTreeModel::CookiesTreeModel(ContainerMap& apps_map)
628 CookiesTreeModel::CookiesTreeModel(
629 BrowsingDataCookieHelper* cookie_helper,
630 BrowsingDataDatabaseHelper* database_helper,
631 BrowsingDataLocalStorageHelper* local_storage_helper,
632 BrowsingDataLocalStorageHelper* session_storage_helper,
633 BrowsingDataAppCacheHelper* appcache_helper,
634 BrowsingDataIndexedDBHelper* indexed_db_helper,
635 BrowsingDataFileSystemHelper* file_system_helper,
636 BrowsingDataQuotaHelper* quota_helper,
637 BrowsingDataServerBoundCertHelper* server_bound_cert_helper,
638 bool use_cookie_source)
639 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>( 770 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>(
640 new CookieTreeRootNode(this))), 771 new CookieTreeRootNode(this))),
641 appcache_helper_(appcache_helper), 772 batch_update_(0) {
642 cookie_helper_(cookie_helper), 773 for (ContainerMap::iterator it = apps_map.begin();
643 database_helper_(database_helper), 774 it != apps_map.end(); ++it) {
644 local_storage_helper_(local_storage_helper), 775 app_data_map_[it->first] = it->second;
645 session_storage_helper_(session_storage_helper), 776 it->second->Init(this);
646 indexed_db_helper_(indexed_db_helper),
647 file_system_helper_(file_system_helper),
648 quota_helper_(quota_helper),
649 server_bound_cert_helper_(server_bound_cert_helper),
650 batch_update_(0),
651 use_cookie_source_(use_cookie_source),
652 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
653 DCHECK(cookie_helper_);
654 cookie_helper_->StartFetching(
655 base::Bind(&CookiesTreeModel::OnCookiesModelInfoLoaded,
656 weak_ptr_factory_.GetWeakPtr()));
657 DCHECK(database_helper_);
658 database_helper_->StartFetching(
659 base::Bind(&CookiesTreeModel::OnDatabaseModelInfoLoaded,
660 weak_ptr_factory_.GetWeakPtr()));
661 DCHECK(local_storage_helper_);
662 local_storage_helper_->StartFetching(
663 base::Bind(&CookiesTreeModel::OnLocalStorageModelInfoLoaded,
664 weak_ptr_factory_.GetWeakPtr()));
665 if (session_storage_helper_) {
666 session_storage_helper_->StartFetching(
667 base::Bind(&CookiesTreeModel::OnSessionStorageModelInfoLoaded,
668 weak_ptr_factory_.GetWeakPtr()));
669 }
670
671 // TODO(michaeln): When all of the UI implementations have been updated, make
672 // this a required parameter.
673 if (appcache_helper_) {
674 appcache_helper_->StartFetching(
675 base::Bind(&CookiesTreeModel::OnAppCacheModelInfoLoaded,
676 weak_ptr_factory_.GetWeakPtr()));
677 }
678
679 if (indexed_db_helper_) {
680 indexed_db_helper_->StartFetching(
681 base::Bind(&CookiesTreeModel::OnIndexedDBModelInfoLoaded,
682 weak_ptr_factory_.GetWeakPtr()));
683 }
684
685 if (file_system_helper_) {
686 file_system_helper_->StartFetching(
687 base::Bind(&CookiesTreeModel::OnFileSystemModelInfoLoaded,
688 weak_ptr_factory_.GetWeakPtr()));
689 }
690
691 if (quota_helper_) {
692 quota_helper_->StartFetching(
693 base::Bind(&CookiesTreeModel::OnQuotaModelInfoLoaded,
694 weak_ptr_factory_.GetWeakPtr()));
695 }
696
697 if (server_bound_cert_helper_) {
698 server_bound_cert_helper_->StartFetching(
699 base::Bind(&CookiesTreeModel::OnServerBoundCertModelInfoLoaded,
700 weak_ptr_factory_.GetWeakPtr()));
701 } 777 }
702 } 778 }
703 779
704 CookiesTreeModel::~CookiesTreeModel() {} 780 CookiesTreeModel::~CookiesTreeModel() {}
705 781
706 /////////////////////////////////////////////////////////////////////////////// 782 ///////////////////////////////////////////////////////////////////////////////
707 // CookiesTreeModel, TreeModel methods (public): 783 // CookiesTreeModel, TreeModel methods (public):
708 784
709 // TreeModel methods: 785 // TreeModel methods:
710 // Returns the set of icons for the nodes in the tree. You only need override 786 // Returns the set of icons for the nodes in the tree. You only need override
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 if (parent_node->empty()) 846 if (parent_node->empty())
771 DeleteCookieNode(parent_node); 847 DeleteCookieNode(parent_node);
772 } 848 }
773 849
774 void CookiesTreeModel::UpdateSearchResults(const std::wstring& filter) { 850 void CookiesTreeModel::UpdateSearchResults(const std::wstring& filter) {
775 CookieTreeNode* root = GetRoot(); 851 CookieTreeNode* root = GetRoot();
776 int num_children = root->child_count(); 852 int num_children = root->child_count();
777 NotifyObserverBeginBatch(); 853 NotifyObserverBeginBatch();
778 for (int i = num_children - 1; i >= 0; --i) 854 for (int i = num_children - 1; i >= 0; --i)
779 delete Remove(root, root->GetChild(i)); 855 delete Remove(root, root->GetChild(i));
780 PopulateCookieInfoWithFilter(filter); 856 PopulateCookieInfoWithFilter(NULL, filter);
781 PopulateDatabaseInfoWithFilter(filter); 857 PopulateDatabaseInfoWithFilter(NULL, filter);
782 PopulateLocalStorageInfoWithFilter(filter); 858 PopulateLocalStorageInfoWithFilter(NULL, filter);
783 PopulateSessionStorageInfoWithFilter(filter); 859 PopulateSessionStorageInfoWithFilter(NULL, filter);
784 PopulateAppCacheInfoWithFilter(filter); 860 PopulateAppCacheInfoWithFilter(NULL, filter);
785 PopulateIndexedDBInfoWithFilter(filter); 861 PopulateIndexedDBInfoWithFilter(NULL, filter);
786 PopulateFileSystemInfoWithFilter(filter); 862 PopulateFileSystemInfoWithFilter(NULL, filter);
787 PopulateQuotaInfoWithFilter(filter); 863 PopulateQuotaInfoWithFilter(NULL, filter);
788 PopulateServerBoundCertInfoWithFilter(filter); 864 PopulateServerBoundCertInfoWithFilter(NULL, filter);
789 NotifyObserverTreeNodeChanged(root); 865 NotifyObserverTreeNodeChanged(root);
790 NotifyObserverEndBatch(); 866 NotifyObserverEndBatch();
791 } 867 }
792 868
793 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) { 869 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) {
794 cookies_observer_list_.AddObserver(observer); 870 cookies_observer_list_.AddObserver(observer);
795 // Call super so that TreeNodeModel can notify, too. 871 // Call super so that TreeNodeModel can notify, too.
796 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer); 872 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer);
797 } 873 }
798 874
799 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) { 875 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) {
800 cookies_observer_list_.RemoveObserver(observer); 876 cookies_observer_list_.RemoveObserver(observer);
801 // Call super so that TreeNodeModel doesn't have dead pointers. 877 // Call super so that TreeNodeModel doesn't have dead pointers.
802 ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer); 878 ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer);
803 } 879 }
804 880
805 void CookiesTreeModel::OnAppCacheModelInfoLoaded() {
806 using appcache::AppCacheInfo;
807 using appcache::AppCacheInfoCollection;
808 using appcache::AppCacheInfoVector;
809 typedef std::map<GURL, AppCacheInfoVector> InfoByOrigin;
810
811 scoped_refptr<AppCacheInfoCollection> appcache_info =
812 appcache_helper_->info_collection();
813 if (!appcache_info || appcache_info->infos_by_origin.empty())
814 return;
815
816 for (InfoByOrigin::const_iterator origin =
817 appcache_info->infos_by_origin.begin();
818 origin != appcache_info->infos_by_origin.end(); ++origin) {
819 std::list<AppCacheInfo>& info_list = appcache_info_[origin->first];
820 info_list.insert(
821 info_list.begin(), origin->second.begin(), origin->second.end());
822 }
823
824 PopulateAppCacheInfoWithFilter(std::wstring());
825 }
826
827 void CookiesTreeModel::PopulateAppCacheInfoWithFilter( 881 void CookiesTreeModel::PopulateAppCacheInfoWithFilter(
828 const std::wstring& filter) { 882 string16* app,
883 const std::wstring& filter) {
884
829 using appcache::AppCacheInfo; 885 using appcache::AppCacheInfo;
830 typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin; 886 typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin;
831 887 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
832 if (appcache_info_.empty()) 888 bool begin_batch = false;
833 return; 889
890 for (ContainerMap::iterator ait = app_data_map_.begin();
891 ait != app_data_map_.end(); ++ait ) {
892 LocalDataContainer* container = ait->second;
893
894 if (container->appcache_info_.empty())
895 continue;
896
897 if (app && *app != container->app_id())
898 continue;
899
900 if (!begin_batch) {
901 NotifyObserverBeginBatch();
902 begin_batch = true;
903 }
904
905 CookieTreeAppNode* app_node =
906 root->GetOrCreateAppNode(container->app_name(), container->app_id());
907
908 for (InfoByOrigin::iterator origin = container->appcache_info_.begin();
909 origin != container->appcache_info_.end(); ++origin) {
910 std::wstring origin_node_name = UTF8ToWide(origin->first.host());
911 if (filter.empty() ||
912 (origin_node_name.find(filter) != std::wstring::npos)) {
913 CookieTreeOriginNode* origin_node =
914 app_node->GetOrCreateOriginNode(origin->first);
915 CookieTreeAppCachesNode* appcaches_node =
916 origin_node->GetOrCreateAppCachesNode();
917
918 for (std::list<AppCacheInfo>::iterator info = origin->second.begin();
919 info != origin->second.end(); ++info) {
920 appcaches_node->AddAppCacheNode(
921 new CookieTreeAppCacheNode(origin->first, info));
922 }
923 }
924 }
925 }
926
927 if (begin_batch) {
928 NotifyObserverTreeNodeChanged(root);
929 NotifyObserverEndBatch();
930 }
931 }
932
933 void CookiesTreeModel::PopulateCookieInfoWithFilter(
934 string16* app,
935 const std::wstring& filter) {
936 // mmargh mmargh mmargh! delicious!
834 937
835 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 938 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
836 NotifyObserverBeginBatch(); 939 NotifyObserverBeginBatch();
837 for (InfoByOrigin::iterator origin = appcache_info_.begin(); 940 for (ContainerMap::iterator ait = app_data_map_.begin();
markusheintz_ 2012/06/13 23:40:39 Please replace "ait" with a better name.
838 origin != appcache_info_.end(); ++origin) { 941 ait != app_data_map_.end(); ++ait ) {
839 std::wstring origin_node_name = UTF8ToWide(origin->first.host()); 942 LocalDataContainer* container = ait->second;
840 if (filter.empty() || 943
841 (origin_node_name.find(filter) != std::wstring::npos)) { 944 if (app && *app != container->app_id())
842 CookieTreeOriginNode* origin_node = 945 continue;
843 root->GetOrCreateOriginNode(origin->first); 946
844 CookieTreeAppCachesNode* appcaches_node = 947 CookieTreeAppNode* app_node =
845 origin_node->GetOrCreateAppCachesNode(); 948 root->GetOrCreateAppNode(container->app_name(), container->app_id());
846 949
847 for (std::list<AppCacheInfo>::iterator info = origin->second.begin(); 950 for (CookieList::iterator it = container->cookie_list_.begin();
848 info != origin->second.end(); ++info) { 951 it != container->cookie_list_.end(); ++it) {
849 appcaches_node->AddAppCacheNode( 952 std::string source_string = it->Source();
850 new CookieTreeAppCacheNode(origin->first, info)); 953 if (source_string.empty() || !use_cookie_source_) {
954 std::string domain = it->Domain();
955 if (domain.length() > 1 && domain[0] == '.')
956 domain = domain.substr(1);
957
958 // We treat secure cookies just the same as normal ones.
959 source_string = std::string(chrome::kHttpScheme) +
960 content::kStandardSchemeSeparator + domain + "/";
961 }
962
963 GURL source(source_string);
964 if (!filter.size() ||
965 (CookieTreeOriginNode::TitleForUrl(source).find(filter) !=
966 std::string::npos)) {
967 CookieTreeOriginNode* origin_node =
968 app_node->GetOrCreateOriginNode(source);
969 CookieTreeCookiesNode* cookies_node =
970 origin_node->GetOrCreateCookiesNode();
971 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(it);
972 cookies_node->AddCookieNode(new_cookie);
851 } 973 }
852 } 974 }
853 } 975 }
854 NotifyObserverTreeNodeChanged(root); 976 NotifyObserverTreeNodeChanged(root);
855 NotifyObserverEndBatch(); 977 NotifyObserverEndBatch();
856 } 978 }
857 979
858 void CookiesTreeModel::OnCookiesModelInfoLoaded(
859 const net::CookieList& cookie_list) {
860 cookie_list_.insert(cookie_list_.begin(),
861 cookie_list.begin(),
862 cookie_list.end());
863 PopulateCookieInfoWithFilter(std::wstring());
864 }
865
866 void CookiesTreeModel::PopulateCookieInfoWithFilter(
867 const std::wstring& filter) {
868 // mmargh mmargh mmargh! delicious!
869
870 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
871 NotifyObserverBeginBatch();
872 for (CookieList::iterator it = cookie_list_.begin();
873 it != cookie_list_.end(); ++it) {
874 std::string source_string = it->Source();
875 if (source_string.empty() || !use_cookie_source_) {
876 std::string domain = it->Domain();
877 if (domain.length() > 1 && domain[0] == '.')
878 domain = domain.substr(1);
879
880 // We treat secure cookies just the same as normal ones.
881 source_string = std::string(chrome::kHttpScheme) +
882 content::kStandardSchemeSeparator + domain + "/";
883 }
884
885 GURL source(source_string);
886 if (!filter.size() ||
887 (CookieTreeOriginNode::TitleForUrl(source).find(filter) !=
888 std::string::npos)) {
889 CookieTreeOriginNode* origin_node =
890 root->GetOrCreateOriginNode(source);
891 CookieTreeCookiesNode* cookies_node =
892 origin_node->GetOrCreateCookiesNode();
893 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(it);
894 cookies_node->AddCookieNode(new_cookie);
895 }
896 }
897 NotifyObserverTreeNodeChanged(root);
898 NotifyObserverEndBatch();
899 }
900
901 void CookiesTreeModel::OnDatabaseModelInfoLoaded(
902 const DatabaseInfoList& database_info) {
903 database_info_list_ = database_info;
904 PopulateDatabaseInfoWithFilter(std::wstring());
905 }
906
907 void CookiesTreeModel::PopulateDatabaseInfoWithFilter( 980 void CookiesTreeModel::PopulateDatabaseInfoWithFilter(
908 const std::wstring& filter) { 981 string16* app,
909 if (database_info_list_.empty()) 982 const std::wstring& filter) {
910 return; 983
911 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 984 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
912 NotifyObserverBeginBatch(); 985 bool begin_batch = false;
913 for (DatabaseInfoList::iterator database_info = database_info_list_.begin(); 986
914 database_info != database_info_list_.end(); 987 for (ContainerMap::iterator ait = app_data_map_.begin();
915 ++database_info) { 988 ait != app_data_map_.end(); ++ait ) {
916 GURL origin(database_info->origin); 989 LocalDataContainer* container = ait->second;
917 990
918 if (!filter.size() || 991 if (container->database_info_list_.empty())
919 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 992 continue;
920 std::wstring::npos)) { 993
921 CookieTreeOriginNode* origin_node = 994 if (app && *app != container->app_id())
922 root->GetOrCreateOriginNode(origin); 995 continue;
923 CookieTreeDatabasesNode* databases_node = 996
924 origin_node->GetOrCreateDatabasesNode(); 997 if (!begin_batch) {
925 databases_node->AddDatabaseNode( 998 NotifyObserverBeginBatch();
926 new CookieTreeDatabaseNode(database_info)); 999 begin_batch = true;
927 } 1000 }
928 } 1001
929 NotifyObserverTreeNodeChanged(root); 1002 CookieTreeAppNode* app_node =
930 NotifyObserverEndBatch(); 1003 root->GetOrCreateAppNode(container->app_name(), container->app_id());
931 } 1004
932 1005 for (DatabaseInfoList::iterator database_info =
933 void CookiesTreeModel::OnLocalStorageModelInfoLoaded( 1006 container->database_info_list_.begin();
934 const LocalStorageInfoList& local_storage_info) { 1007 database_info != container->database_info_list_.end();
935 local_storage_info_list_ = local_storage_info; 1008 ++database_info) {
936 PopulateLocalStorageInfoWithFilter(std::wstring()); 1009 GURL origin(database_info->origin);
1010
1011 if (!filter.size() ||
1012 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
1013 std::wstring::npos)) {
1014 CookieTreeOriginNode* origin_node =
1015 app_node->GetOrCreateOriginNode(origin);
1016 CookieTreeDatabasesNode* databases_node =
1017 origin_node->GetOrCreateDatabasesNode();
1018 databases_node->AddDatabaseNode(
1019 new CookieTreeDatabaseNode(database_info));
1020 }
1021 }
1022 }
1023
1024 if (begin_batch) {
1025 NotifyObserverTreeNodeChanged(root);
1026 NotifyObserverEndBatch();
1027 }
937 } 1028 }
938 1029
939 void CookiesTreeModel::PopulateLocalStorageInfoWithFilter( 1030 void CookiesTreeModel::PopulateLocalStorageInfoWithFilter(
940 const std::wstring& filter) { 1031 string16* app,
941 if (local_storage_info_list_.empty()) 1032 const std::wstring& filter) {
942 return; 1033
943 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1034 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
944 NotifyObserverBeginBatch(); 1035 bool begin_batch = false;
945 for (LocalStorageInfoList::iterator local_storage_info = 1036
946 local_storage_info_list_.begin(); 1037 for (ContainerMap::iterator ait = app_data_map_.begin();
947 local_storage_info != local_storage_info_list_.end(); 1038 ait != app_data_map_.end(); ++ait ) {
948 ++local_storage_info) { 1039 LocalDataContainer* container = ait->second;
949 GURL origin(local_storage_info->origin); 1040
950 1041 if (container->local_storage_info_list_.empty())
951 if (!filter.size() || 1042 continue;
952 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1043
953 std::wstring::npos)) { 1044 if (app && *app != container->app_id())
954 CookieTreeOriginNode* origin_node = 1045 continue;
955 root->GetOrCreateOriginNode(origin); 1046
956 CookieTreeLocalStoragesNode* local_storages_node = 1047 if (!begin_batch) {
957 origin_node->GetOrCreateLocalStoragesNode(); 1048 NotifyObserverBeginBatch();
958 local_storages_node->AddLocalStorageNode( 1049 begin_batch = true;
959 new CookieTreeLocalStorageNode(local_storage_info)); 1050 }
960 } 1051
961 } 1052 CookieTreeAppNode* app_node =
962 NotifyObserverTreeNodeChanged(root); 1053 root->GetOrCreateAppNode(container->app_name(), container->app_id());
963 NotifyObserverEndBatch(); 1054
964 } 1055 for (LocalStorageInfoList::iterator local_storage_info =
965 1056 container->local_storage_info_list_.begin();
966 void CookiesTreeModel::OnSessionStorageModelInfoLoaded( 1057 local_storage_info != container->local_storage_info_list_.end();
967 const LocalStorageInfoList& session_storage_info) { 1058 ++local_storage_info) {
968 session_storage_info_list_ = session_storage_info; 1059 GURL origin(local_storage_info->origin);
969 PopulateSessionStorageInfoWithFilter(std::wstring()); 1060
1061 if (!filter.size() ||
1062 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
1063 std::wstring::npos)) {
1064 CookieTreeOriginNode* origin_node =
1065 app_node->GetOrCreateOriginNode(origin);
1066 CookieTreeLocalStoragesNode* local_storages_node =
1067 origin_node->GetOrCreateLocalStoragesNode();
1068 local_storages_node->AddLocalStorageNode(
1069 new CookieTreeLocalStorageNode(local_storage_info));
1070 }
1071 }
1072 }
1073 if (begin_batch) {
1074 NotifyObserverTreeNodeChanged(root);
1075 NotifyObserverEndBatch();
1076 }
970 } 1077 }
971 1078
972 void CookiesTreeModel::PopulateSessionStorageInfoWithFilter( 1079 void CookiesTreeModel::PopulateSessionStorageInfoWithFilter(
973 const std::wstring& filter) { 1080 string16* app,
974 if (session_storage_info_list_.empty()) 1081 const std::wstring& filter) {
975 return; 1082 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
976 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1083 bool begin_batch = false;
977 NotifyObserverBeginBatch(); 1084
978 for (LocalStorageInfoList::iterator session_storage_info = 1085 for (ContainerMap::iterator ait = app_data_map_.begin();
979 session_storage_info_list_.begin(); 1086 ait != app_data_map_.end(); ++ait ) {
980 session_storage_info != session_storage_info_list_.end(); 1087 LocalDataContainer* container = ait->second;
981 ++session_storage_info) { 1088
982 GURL origin(session_storage_info->origin); 1089 if (container->session_storage_info_list_.empty())
983 1090 continue;
984 if (!filter.size() || 1091
985 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1092 if (app && *app != container->app_id())
986 std::wstring::npos)) { 1093 continue;
987 CookieTreeOriginNode* origin_node = 1094
988 root->GetOrCreateOriginNode(origin); 1095 if (!begin_batch) {
989 CookieTreeSessionStoragesNode* session_storages_node = 1096 NotifyObserverBeginBatch();
990 origin_node->GetOrCreateSessionStoragesNode(); 1097 begin_batch = true;
991 session_storages_node->AddSessionStorageNode( 1098 }
992 new CookieTreeSessionStorageNode(session_storage_info)); 1099
993 } 1100 CookieTreeAppNode* app_node =
994 } 1101 root->GetOrCreateAppNode(container->app_name(), container->app_id());
995 NotifyObserverTreeNodeChanged(root); 1102
996 NotifyObserverEndBatch(); 1103 for (LocalStorageInfoList::iterator session_storage_info =
997 } 1104 container->session_storage_info_list_.begin();
998 1105 session_storage_info != container->session_storage_info_list_.end();
999 void CookiesTreeModel::OnIndexedDBModelInfoLoaded( 1106 ++session_storage_info) {
1000 const IndexedDBInfoList& indexed_db_info) { 1107 GURL origin(session_storage_info->origin);
1001 indexed_db_info_list_ = indexed_db_info; 1108
1002 PopulateIndexedDBInfoWithFilter(std::wstring()); 1109 if (!filter.size() ||
1110 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
1111 std::wstring::npos)) {
1112 CookieTreeOriginNode* origin_node =
1113 app_node->GetOrCreateOriginNode(origin);
1114 CookieTreeSessionStoragesNode* session_storages_node =
1115 origin_node->GetOrCreateSessionStoragesNode();
1116 session_storages_node->AddSessionStorageNode(
1117 new CookieTreeSessionStorageNode(session_storage_info));
1118 }
1119 }
1120 }
1121 if (begin_batch) {
1122 NotifyObserverTreeNodeChanged(root);
1123 NotifyObserverEndBatch();
1124 }
1003 } 1125 }
1004 1126
1005 void CookiesTreeModel::PopulateIndexedDBInfoWithFilter( 1127 void CookiesTreeModel::PopulateIndexedDBInfoWithFilter(
1006 const std::wstring& filter) { 1128 string16* app,
1007 if (indexed_db_info_list_.empty()) 1129 const std::wstring& filter) {
1008 return; 1130
1009 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1131 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1010 NotifyObserverBeginBatch(); 1132 bool begin_batch = false;
1011 for (IndexedDBInfoList::iterator indexed_db_info = 1133
1012 indexed_db_info_list_.begin(); 1134 for (ContainerMap::iterator ait = app_data_map_.begin();
1013 indexed_db_info != indexed_db_info_list_.end(); 1135 ait != app_data_map_.end(); ++ait ) {
1014 ++indexed_db_info) { 1136 LocalDataContainer* container = ait->second;
1015 const GURL& origin = indexed_db_info->origin; 1137
1016 1138 if (container->indexed_db_info_list_.empty())
1017 if (!filter.size() || 1139 continue;
1018 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1140
1019 std::wstring::npos)) { 1141 if (app && *app != container->app_id())
1020 CookieTreeOriginNode* origin_node = 1142 continue;
1021 root->GetOrCreateOriginNode(origin); 1143
1022 CookieTreeIndexedDBsNode* indexed_dbs_node = 1144 if (!begin_batch) {
1023 origin_node->GetOrCreateIndexedDBsNode(); 1145 NotifyObserverBeginBatch();
1024 indexed_dbs_node->AddIndexedDBNode( 1146 begin_batch = true;
1025 new CookieTreeIndexedDBNode(indexed_db_info)); 1147 }
1026 } 1148
1027 } 1149 CookieTreeAppNode* app_node =
1028 NotifyObserverTreeNodeChanged(root); 1150 root->GetOrCreateAppNode(container->app_name(), container->app_id());
1029 NotifyObserverEndBatch(); 1151
1030 } 1152 for (IndexedDBInfoList::iterator indexed_db_info =
1031 1153 container->indexed_db_info_list_.begin();
1032 void CookiesTreeModel::OnFileSystemModelInfoLoaded( 1154 indexed_db_info != container->indexed_db_info_list_.end();
1033 const FileSystemInfoList& file_system_info) { 1155 ++indexed_db_info) {
1034 file_system_info_list_ = file_system_info; 1156 const GURL& origin = indexed_db_info->origin;
1035 PopulateFileSystemInfoWithFilter(std::wstring()); 1157
1158 if (!filter.size() ||
1159 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
1160 std::wstring::npos)) {
1161 CookieTreeOriginNode* origin_node =
1162 app_node->GetOrCreateOriginNode(origin);
1163 CookieTreeIndexedDBsNode* indexed_dbs_node =
1164 origin_node->GetOrCreateIndexedDBsNode();
1165 indexed_dbs_node->AddIndexedDBNode(
1166 new CookieTreeIndexedDBNode(indexed_db_info));
1167 }
1168 }
1169 }
1170 if (begin_batch) {
1171 NotifyObserverTreeNodeChanged(root);
1172 NotifyObserverEndBatch();
1173 }
1174 }
1175
1176 void CookiesTreeModel::PopulateServerBoundCertInfoWithFilter(
1177 string16* app,
1178 const std::wstring& filter) {
1179 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1180 bool begin_batch = false;
1181
1182 for (ContainerMap::iterator ait = app_data_map_.begin();
1183 ait != app_data_map_.end(); ++ait ) {
1184 LocalDataContainer* container = ait->second;
1185
1186 if (container->server_bound_cert_list_.empty())
1187 continue;
1188
1189 if (app && *app != container->app_id())
1190 continue;
1191
1192 if (!begin_batch) {
1193 NotifyObserverBeginBatch();
1194 begin_batch = true;
1195 }
1196
1197 CookieTreeAppNode* app_node =
1198 root->GetOrCreateAppNode(container->app_name(), container->app_id());
1199
1200 for (ServerBoundCertList::iterator cert_info =
1201 container->server_bound_cert_list_.begin();
1202 cert_info != container->server_bound_cert_list_.end();
1203 ++cert_info) {
1204 GURL origin(cert_info->server_identifier());
1205 if (!origin.is_valid()) {
1206 // Domain Bound Cert. Make a valid URL to satisfy the
1207 // CookieTreeRootNode::GetOrCreateOriginNode interface.
1208 origin = GURL(std::string(chrome::kHttpsScheme) +
1209 content::kStandardSchemeSeparator +
1210 cert_info->server_identifier() + "/");
1211 }
1212 std::wstring title = CookieTreeOriginNode::TitleForUrl(origin);
1213
1214 if (!filter.size() || title.find(filter) != std::wstring::npos) {
1215 CookieTreeOriginNode* origin_node =
1216 app_node->GetOrCreateOriginNode(origin);
1217 CookieTreeServerBoundCertsNode* server_bound_certs_node =
1218 origin_node->GetOrCreateServerBoundCertsNode();
1219 server_bound_certs_node->AddServerBoundCertNode(
1220 new CookieTreeServerBoundCertNode(cert_info));
1221 }
1222 }
1223 }
1224 if (begin_batch) {
1225 NotifyObserverTreeNodeChanged(root);
1226 NotifyObserverEndBatch();
1227 }
1036 } 1228 }
1037 1229
1038 void CookiesTreeModel::PopulateFileSystemInfoWithFilter( 1230 void CookiesTreeModel::PopulateFileSystemInfoWithFilter(
1039 const std::wstring& filter) { 1231 string16* app,
1040 if (file_system_info_list_.empty()) 1232 const std::wstring& filter) {
1041 return; 1233 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1042 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1234 bool begin_batch = false;
1043 NotifyObserverBeginBatch(); 1235
1044 for (FileSystemInfoList::iterator file_system_info = 1236 for (ContainerMap::iterator ait = app_data_map_.begin();
1045 file_system_info_list_.begin(); 1237 ait != app_data_map_.end(); ++ait ) {
1046 file_system_info != file_system_info_list_.end(); 1238 LocalDataContainer* container = ait->second;
1047 ++file_system_info) { 1239
1048 GURL origin(file_system_info->origin); 1240 if (container->file_system_info_list_.empty())
1049 1241 continue;
1050 if (!filter.size() || 1242
1051 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) != 1243 if (app && *app != container->app_id())
1052 std::wstring::npos)) { 1244 continue;
1053 CookieTreeOriginNode* origin_node = 1245
1054 root->GetOrCreateOriginNode(origin); 1246 if (!begin_batch) {
1055 CookieTreeFileSystemsNode* file_systems_node = 1247 NotifyObserverBeginBatch();
1056 origin_node->GetOrCreateFileSystemsNode(); 1248 begin_batch = true;
1057 file_systems_node->AddFileSystemNode( 1249 }
1058 new CookieTreeFileSystemNode(file_system_info)); 1250
1059 } 1251 CookieTreeAppNode* app_node =
1060 } 1252 root->GetOrCreateAppNode(container->app_name(), container->app_id());
1061 NotifyObserverTreeNodeChanged(root); 1253
1062 NotifyObserverEndBatch(); 1254 for (FileSystemInfoList::iterator file_system_info =
1063 } 1255 container->file_system_info_list_.begin();
1064 1256 file_system_info != container->file_system_info_list_.end();
1065 void CookiesTreeModel::OnQuotaModelInfoLoaded( 1257 ++file_system_info) {
1066 const QuotaInfoArray& quota_info) { 1258 GURL origin(file_system_info->origin);
1067 quota_info_list_ = quota_info; 1259
1068 PopulateQuotaInfoWithFilter(std::wstring()); 1260 if (!filter.size() ||
1261 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
1262 std::wstring::npos)) {
1263 CookieTreeOriginNode* origin_node =
1264 app_node->GetOrCreateOriginNode(origin);
1265 CookieTreeFileSystemsNode* file_systems_node =
1266 origin_node->GetOrCreateFileSystemsNode();
1267 file_systems_node->AddFileSystemNode(
1268 new CookieTreeFileSystemNode(file_system_info));
1269 }
1270 }
1271 }
1272 if (begin_batch) {
1273 NotifyObserverTreeNodeChanged(root);
1274 NotifyObserverEndBatch();
1275 }
1069 } 1276 }
1070 1277
1071 void CookiesTreeModel::PopulateQuotaInfoWithFilter( 1278 void CookiesTreeModel::PopulateQuotaInfoWithFilter(
1072 const std::wstring& filter) { 1279 string16* app,
1073 if (quota_info_list_.empty()) 1280 const std::wstring& filter) {
1074 return; 1281 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1075 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1282 bool begin_batch = false;
1076 NotifyObserverBeginBatch(); 1283
1077 for (QuotaInfoArray::iterator quota_info = quota_info_list_.begin(); 1284 for (ContainerMap::iterator ait = app_data_map_.begin();
1078 quota_info != quota_info_list_.end(); 1285 ait != app_data_map_.end(); ++ait ) {
1079 ++quota_info) { 1286 LocalDataContainer* container = ait->second;
1080 if (!filter.size() || 1287
1081 (UTF8ToWide(quota_info->host).find(filter) != std::wstring::npos)) { 1288 if (container->quota_info_list_.empty())
1082 CookieTreeOriginNode* origin_node = 1289 continue;
1083 root->GetOrCreateOriginNode(GURL("http://" + quota_info->host)); 1290
1084 origin_node->UpdateOrCreateQuotaNode(quota_info); 1291 if (app && *app != container->app_id())
1085 } 1292 continue;
1086 } 1293
1087 NotifyObserverTreeNodeChanged(root); 1294 if (!begin_batch) {
1088 NotifyObserverEndBatch(); 1295 NotifyObserverBeginBatch();
1089 } 1296 begin_batch = true;
1090 1297 }
1091 void CookiesTreeModel::OnServerBoundCertModelInfoLoaded( 1298
1092 const ServerBoundCertList& cert_list) { 1299 CookieTreeAppNode* app_node =
1093 server_bound_cert_list_ = cert_list; 1300 root->GetOrCreateAppNode(container->app_name(), container->app_id());
1094 PopulateServerBoundCertInfoWithFilter(std::wstring()); 1301
1095 } 1302 for (QuotaInfoArray::iterator quota_info =
1096 1303 container->quota_info_list_.begin();
1097 void CookiesTreeModel::PopulateServerBoundCertInfoWithFilter( 1304 quota_info != container->quota_info_list_.end();
1098 const std::wstring& filter) { 1305 ++quota_info) {
1099 if (server_bound_cert_list_.empty()) 1306 if (!filter.size() ||
1100 return; 1307 (UTF8ToWide(quota_info->host).find(filter) != std::wstring::npos)) {
1101 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1308 CookieTreeOriginNode* origin_node =
1102 NotifyObserverBeginBatch(); 1309 app_node->GetOrCreateOriginNode(GURL("http://" + quota_info->host));
1103 for (ServerBoundCertList::iterator cert_info = 1310 origin_node->UpdateOrCreateQuotaNode(quota_info);
1104 server_bound_cert_list_.begin(); 1311 }
1105 cert_info != server_bound_cert_list_.end(); 1312 }
1106 ++cert_info) { 1313 }
1107 GURL origin(cert_info->server_identifier()); 1314 if (begin_batch) {
1108 if (!origin.is_valid()) { 1315 NotifyObserverTreeNodeChanged(root);
1109 // Domain Bound Cert. Make a valid URL to satisfy the 1316 NotifyObserverEndBatch();
1110 // CookieTreeRootNode::GetOrCreateOriginNode interface. 1317 }
1111 origin = GURL(std::string(chrome::kHttpsScheme) +
1112 content::kStandardSchemeSeparator +
1113 cert_info->server_identifier() + "/");
1114 }
1115 std::wstring title = CookieTreeOriginNode::TitleForUrl(origin);
1116
1117 if (!filter.size() || title.find(filter) != std::wstring::npos) {
1118 CookieTreeOriginNode* origin_node =
1119 root->GetOrCreateOriginNode(origin);
1120 CookieTreeServerBoundCertsNode* server_bound_certs_node =
1121 origin_node->GetOrCreateServerBoundCertsNode();
1122 server_bound_certs_node->AddServerBoundCertNode(
1123 new CookieTreeServerBoundCertNode(cert_info));
1124 }
1125 }
1126 NotifyObserverTreeNodeChanged(root);
1127 NotifyObserverEndBatch();
1128 } 1318 }
1129 1319
1130 void CookiesTreeModel::NotifyObserverBeginBatch() { 1320 void CookiesTreeModel::NotifyObserverBeginBatch() {
1131 // Only notify the model once if we're batching in a nested manner. 1321 // Only notify the model once if we're batching in a nested manner.
1132 if (batch_update_++ == 0) { 1322 if (batch_update_++ == 0) {
1133 FOR_EACH_OBSERVER(Observer, 1323 FOR_EACH_OBSERVER(Observer,
1134 cookies_observer_list_, 1324 cookies_observer_list_,
1135 TreeModelBeginBatch(this)); 1325 TreeModelBeginBatch(this));
1136 } 1326 }
1137 } 1327 }
1138 1328
1139 void CookiesTreeModel::NotifyObserverEndBatch() { 1329 void CookiesTreeModel::NotifyObserverEndBatch() {
1140 // Only notify the observers if this is the outermost call to EndBatch() if 1330 // Only notify the observers if this is the outermost call to EndBatch() if
1141 // called in a nested manner. 1331 // called in a nested manner.
1142 if (--batch_update_ == 0) { 1332 if (--batch_update_ == 0) {
1143 FOR_EACH_OBSERVER(Observer, 1333 FOR_EACH_OBSERVER(Observer,
1144 cookies_observer_list_, 1334 cookies_observer_list_,
1145 TreeModelEndBatch(this)); 1335 TreeModelEndBatch(this));
1146 } 1336 }
1147 } 1337 }
1338
1339 BrowsingDataCookieHelper* CookiesTreeModel::GetCookieHelper(
1340 const string16& app_id) {
1341 LocalDataContainer* container = app_data_map_[app_id];
1342 if (container != NULL) {
1343 return container->cookie_helper();
1344 }
1345 return NULL;
1346 }
1347
1348 LocalDataContainer* CookiesTreeModel::GetLocalDataContainer(
1349 const string16& app_id) {
1350 LocalDataContainer* container = app_data_map_[app_id];
1351 return container;
1352 }
1353
1354 ///////////////////////////////////////////////////////////////////////////////
1355 // LocalDataContainer, public:
1356
1357 LocalDataContainer::LocalDataContainer(
1358 const string16& app_name,
1359 const string16& app_id,
1360 BrowsingDataCookieHelper* cookie_helper,
1361 BrowsingDataDatabaseHelper* database_helper,
1362 BrowsingDataLocalStorageHelper* local_storage_helper,
1363 BrowsingDataLocalStorageHelper* session_storage_helper,
1364 BrowsingDataAppCacheHelper* appcache_helper,
1365 BrowsingDataIndexedDBHelper* indexed_db_helper,
1366 BrowsingDataFileSystemHelper* file_system_helper,
1367 BrowsingDataQuotaHelper* quota_helper,
1368 BrowsingDataServerBoundCertHelper* server_bound_cert_helper,
1369 bool use_cookie_source)
1370 : //app_name_(app_name),
markusheintz_ 2012/06/13 23:40:39 Uncomment these to lines please.
1371 //app_id_(app_id_),
1372 appcache_helper_(appcache_helper),
markusheintz_ 2012/06/13 23:40:39 s/(app_id_)/(app_id)
1373 cookie_helper_(cookie_helper),
1374 database_helper_(database_helper),
1375 local_storage_helper_(local_storage_helper),
1376 session_storage_helper_(session_storage_helper),
1377 indexed_db_helper_(indexed_db_helper),
1378 file_system_helper_(file_system_helper),
1379 quota_helper_(quota_helper),
1380 server_bound_cert_helper_(server_bound_cert_helper),
1381 delegate_(NULL),
markusheintz_ 2012/06/13 23:40:39 Please indent.
1382 //use_cookie_source_(use_cookie_source),
markusheintz_ 2012/06/13 23:40:39 Same as above. Please remove or uncomment.
1383 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
1384 app_name_ = app_name;
markusheintz_ 2012/06/13 23:40:39 I think it is preferred to initialize these two fi
1385 app_id_ = app_id;
1386
1387 }
1388
1389 LocalDataContainer::~LocalDataContainer() {}
1390
1391 void LocalDataContainer::Init(CookiesTreeModelDelegate* d) {
markusheintz_ 2012/06/13 23:40:39 s/d/delegate
1392 DCHECK(!delegate_);
1393 delegate_ = d;
1394
1395 DCHECK(cookie_helper_);
1396 cookie_helper_->StartFetching(
1397 base::Bind(&LocalDataContainer::OnCookiesModelInfoLoaded,
1398 weak_ptr_factory_.GetWeakPtr()));
1399 DCHECK(database_helper_);
1400 database_helper_->StartFetching(
1401 base::Bind(&LocalDataContainer::OnDatabaseModelInfoLoaded,
1402 weak_ptr_factory_.GetWeakPtr()));
1403 DCHECK(local_storage_helper_);
1404 local_storage_helper_->StartFetching(
1405 base::Bind(&LocalDataContainer::OnLocalStorageModelInfoLoaded,
1406 weak_ptr_factory_.GetWeakPtr()));
1407 if (session_storage_helper_) {
1408 session_storage_helper_->StartFetching(
1409 base::Bind(&LocalDataContainer::OnSessionStorageModelInfoLoaded,
1410 weak_ptr_factory_.GetWeakPtr()));
1411 }
1412
1413 // TODO(michaeln): When all of the UI implementations have been updated, make
1414 // this a required parameter.
1415 if (appcache_helper_) {
1416 appcache_helper_->StartFetching(
1417 base::Bind(&LocalDataContainer::OnAppCacheModelInfoLoaded,
1418 weak_ptr_factory_.GetWeakPtr()));
1419 }
1420
1421 if (indexed_db_helper_) {
1422 indexed_db_helper_->StartFetching(
1423 base::Bind(&LocalDataContainer::OnIndexedDBModelInfoLoaded,
1424 weak_ptr_factory_.GetWeakPtr()));
1425 }
1426
1427 if (file_system_helper_) {
1428 file_system_helper_->StartFetching(
1429 base::Bind(&LocalDataContainer::OnFileSystemModelInfoLoaded,
1430 weak_ptr_factory_.GetWeakPtr()));
1431 }
1432
1433 if (quota_helper_) {
1434 quota_helper_->StartFetching(
1435 base::Bind(&LocalDataContainer::OnQuotaModelInfoLoaded,
1436 weak_ptr_factory_.GetWeakPtr()));
1437 }
1438
1439 if (server_bound_cert_helper_) {
1440 server_bound_cert_helper_->StartFetching(
1441 base::Bind(&LocalDataContainer::OnServerBoundCertModelInfoLoaded,
1442 weak_ptr_factory_.GetWeakPtr()));
1443 }
1444 }
1445
1446 void LocalDataContainer::OnAppCacheModelInfoLoaded() {
1447 using appcache::AppCacheInfo;
1448 using appcache::AppCacheInfoCollection;
1449 using appcache::AppCacheInfoVector;
1450 typedef std::map<GURL, AppCacheInfoVector> InfoByOrigin;
1451
1452 scoped_refptr<AppCacheInfoCollection> appcache_info =
1453 appcache_helper_->info_collection();
1454 if (!appcache_info || appcache_info->infos_by_origin.empty())
1455 return;
1456
1457 for (InfoByOrigin::const_iterator origin =
1458 appcache_info->infos_by_origin.begin();
1459 origin != appcache_info->infos_by_origin.end(); ++origin) {
1460 std::list<AppCacheInfo>& info_list = appcache_info_[origin->first];
1461 info_list.insert(
1462 info_list.begin(), origin->second.begin(), origin->second.end());
1463 }
1464
1465 delegate_->PopulateAppCacheInfoWithFilter(&app_name_, std::wstring());
1466 }
1467
1468 void LocalDataContainer::OnCookiesModelInfoLoaded(
1469 const net::CookieList& cookie_list) {
1470 cookie_list_.insert(cookie_list_.begin(),
1471 cookie_list.begin(),
1472 cookie_list.end());
1473 DCHECK(delegate_);
1474 delegate_->PopulateCookieInfoWithFilter(&app_id_, std::wstring());
1475 }
1476
1477 void LocalDataContainer::OnDatabaseModelInfoLoaded(
1478 const DatabaseInfoList& database_info) {
1479 database_info_list_ = database_info;
1480 DCHECK(delegate_);
1481 delegate_->PopulateDatabaseInfoWithFilter(&app_id_, std::wstring());
1482 }
1483
1484 void LocalDataContainer::OnLocalStorageModelInfoLoaded(
1485 const LocalStorageInfoList& local_storage_info) {
1486 local_storage_info_list_ = local_storage_info;
1487 DCHECK(delegate_);
1488 delegate_->PopulateLocalStorageInfoWithFilter(&app_id_, std::wstring());
1489 }
1490
1491 void LocalDataContainer::OnSessionStorageModelInfoLoaded(
1492 const LocalStorageInfoList& session_storage_info) {
1493 session_storage_info_list_ = session_storage_info;
1494 DCHECK(delegate_);
1495 delegate_->PopulateSessionStorageInfoWithFilter(&app_id_, std::wstring());
1496 }
1497
1498 void LocalDataContainer::OnIndexedDBModelInfoLoaded(
1499 const IndexedDBInfoList& indexed_db_info) {
1500 indexed_db_info_list_ = indexed_db_info;
1501 DCHECK(delegate_);
1502 delegate_->PopulateIndexedDBInfoWithFilter(&app_id_, std::wstring());
1503 }
1504 void LocalDataContainer::OnFileSystemModelInfoLoaded(
1505 const FileSystemInfoList& file_system_info) {
1506 file_system_info_list_ = file_system_info;
1507 DCHECK(delegate_);
1508 delegate_->PopulateFileSystemInfoWithFilter(&app_id_, std::wstring());
1509 }
1510
1511 void LocalDataContainer::OnQuotaModelInfoLoaded(
1512 const QuotaInfoArray& quota_info) {
1513 quota_info_list_ = quota_info;
1514 DCHECK(delegate_);
1515 delegate_->PopulateQuotaInfoWithFilter(&app_id_, std::wstring());
1516 }
1517
1518 void LocalDataContainer::OnServerBoundCertModelInfoLoaded(
1519 const ServerBoundCertList& cert_list) {
1520 server_bound_cert_list_ = cert_list;
1521 DCHECK(delegate_);
1522 delegate_->PopulateServerBoundCertInfoWithFilter(&app_id_, std::wstring());
1523 }
OLDNEW
« no previous file with comments | « chrome/browser/cookies_tree_model.h ('k') | chrome/browser/cookies_tree_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698