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

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