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

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: Fixed all comments by 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
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 LocalDataContainer* GetLocalDataContainerForNode(const CookieTreeNode* node) {
James Hawkins 2012/06/21 00:04:12 nit: Document function.
nasko 2012/06/21 16:22:12 Done.
34 DCHECK(node);
James Hawkins 2012/06/21 00:04:12 nit: Internal methods should not DCHECK parameters
nasko 2012/06/21 16:22:12 Done.
35 const CookieTreeAppNode* app = static_cast<const CookieTreeAppNode*>(
36 node->parent()->parent()->parent());
37 return node->GetModel()->GetLocalDataContainer(app->app_id());
38 }
39
40 }
James Hawkins 2012/06/21 00:04:12 nit: } // namespace
nasko 2012/06/21 16:22:12 Done.
41
31 /////////////////////////////////////////////////////////////////////////////// 42 ///////////////////////////////////////////////////////////////////////////////
32 // CookieTreeNode, public: 43 // CookieTreeNode, public:
33 44
34 void CookieTreeNode::DeleteStoredObjects() { 45 void CookieTreeNode::DeleteStoredObjects() {
35 std::for_each(children().begin(), 46 std::for_each(children().begin(),
36 children().end(), 47 children().end(),
37 std::mem_fun(&CookieTreeNode::DeleteStoredObjects)); 48 std::mem_fun(&CookieTreeNode::DeleteStoredObjects));
38 } 49 }
39 50
40 CookiesTreeModel* CookieTreeNode::GetModel() const { 51 CookiesTreeModel* CookieTreeNode::GetModel() const {
41 if (parent()) 52 if (parent()) {
James Hawkins 2012/06/21 00:04:12 Optional nit: Save a level of indentation by rever
nasko 2012/06/21 16:22:12 Done.
42 return parent()->GetModel(); 53 if (parent()->parent()) {
43 else 54 return parent()->parent()->GetModel();
55 } else {
56 return parent()->GetModel();
57 }
58 } else {
44 return NULL; 59 return NULL;
60 }
45 } 61 }
46 62
47 /////////////////////////////////////////////////////////////////////////////// 63 ///////////////////////////////////////////////////////////////////////////////
48 // CookieTreeCookieNode, public: 64 // CookieTreeCookieNode, public:
49 65
50 CookieTreeCookieNode::CookieTreeCookieNode( 66 CookieTreeCookieNode::CookieTreeCookieNode(
51 std::list<net::CookieMonster::CanonicalCookie>::iterator cookie) 67 std::list<net::CookieMonster::CanonicalCookie>::iterator cookie)
52 : CookieTreeNode(UTF8ToUTF16(cookie->Name())), 68 : CookieTreeNode(UTF8ToUTF16(cookie->Name())),
53 cookie_(cookie) { 69 cookie_(cookie) {
54 } 70 }
55 71
56 CookieTreeCookieNode::~CookieTreeCookieNode() {} 72 CookieTreeCookieNode::~CookieTreeCookieNode() {}
57 73
58 void CookieTreeCookieNode::DeleteStoredObjects() { 74 void CookieTreeCookieNode::DeleteStoredObjects() {
59 // notify CookieMonster that we should delete this cookie 75 // notify CookieMonster that we should delete this cookie
60 GetModel()->cookie_helper_->DeleteCookie(*cookie_); 76 LocalDataContainer* container = GetLocalDataContainerForNode(this);
61 GetModel()->cookie_list_.erase(cookie_); 77
78 if (container) {
79 container->cookie_helper_->DeleteCookie(*cookie_);
80 container->cookie_list_.erase(cookie_);
81 }
62 } 82 }
63 83
64 CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const { 84 CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const {
65 return DetailedInfo(parent()->parent()->GetTitle()).InitCookie(&*cookie_); 85 return DetailedInfo(parent()->parent()->GetTitle()).InitCookie(&*cookie_);
66 } 86 }
67 87
68 namespace { 88 namespace {
69 // comparison functor, for use in CookieTreeRootNode 89 // comparison functor, for use in CookieTreeRootNode
70 class OriginNodeComparator { 90 class OriginNodeComparator {
71 public: 91 public:
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 std::list<appcache::AppCacheInfo>::iterator appcache_info) 152 std::list<appcache::AppCacheInfo>::iterator appcache_info)
133 : CookieTreeNode(UTF8ToUTF16(appcache_info->manifest_url.spec())), 153 : CookieTreeNode(UTF8ToUTF16(appcache_info->manifest_url.spec())),
134 origin_url_(origin_url), 154 origin_url_(origin_url),
135 appcache_info_(appcache_info) { 155 appcache_info_(appcache_info) {
136 } 156 }
137 157
138 CookieTreeAppCacheNode::~CookieTreeAppCacheNode() { 158 CookieTreeAppCacheNode::~CookieTreeAppCacheNode() {
139 } 159 }
140 160
141 void CookieTreeAppCacheNode::DeleteStoredObjects() { 161 void CookieTreeAppCacheNode::DeleteStoredObjects() {
142 DCHECK(GetModel()->appcache_helper_); 162 LocalDataContainer* container = GetLocalDataContainerForNode(this);
143 GetModel()->appcache_helper_->DeleteAppCacheGroup( 163
144 appcache_info_->manifest_url); 164 if (container) {
145 GetModel()->appcache_info_[origin_url_].erase(appcache_info_); 165 DCHECK(container->appcache_helper_);
166 container->appcache_helper_->DeleteAppCacheGroup(
167 appcache_info_->manifest_url);
168 container->appcache_info_[origin_url_].erase(appcache_info_);
169 }
146 } 170 }
147 171
148 CookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const { 172 CookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const {
149 return DetailedInfo(parent()->parent()->GetTitle()).InitAppCache( 173 return DetailedInfo(parent()->parent()->GetTitle()).InitAppCache(
150 &*appcache_info_); 174 &*appcache_info_);
151 } 175 }
152 176
153 /////////////////////////////////////////////////////////////////////////////// 177 ///////////////////////////////////////////////////////////////////////////////
154 // CookieTreeDatabaseNode, public: 178 // CookieTreeDatabaseNode, public:
155 179
156 CookieTreeDatabaseNode::CookieTreeDatabaseNode( 180 CookieTreeDatabaseNode::CookieTreeDatabaseNode(
157 std::list<BrowsingDataDatabaseHelper::DatabaseInfo>::iterator database_info) 181 std::list<BrowsingDataDatabaseHelper::DatabaseInfo>::iterator database_info)
158 : CookieTreeNode(database_info->database_name.empty() ? 182 : CookieTreeNode(database_info->database_name.empty() ?
159 l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME) : 183 l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME) :
160 UTF8ToUTF16(database_info->database_name)), 184 UTF8ToUTF16(database_info->database_name)),
161 database_info_(database_info) { 185 database_info_(database_info) {
162 } 186 }
163 187
164 CookieTreeDatabaseNode::~CookieTreeDatabaseNode() {} 188 CookieTreeDatabaseNode::~CookieTreeDatabaseNode() {}
165 189
166 void CookieTreeDatabaseNode::DeleteStoredObjects() { 190 void CookieTreeDatabaseNode::DeleteStoredObjects() {
167 GetModel()->database_helper_->DeleteDatabase( 191 LocalDataContainer* container = GetLocalDataContainerForNode(this);
168 database_info_->origin_identifier, database_info_->database_name); 192
169 GetModel()->database_info_list_.erase(database_info_); 193 if (container) {
194 container->database_helper_->DeleteDatabase(
195 database_info_->origin_identifier, database_info_->database_name);
196 container->database_info_list_.erase(database_info_);
197 }
170 } 198 }
171 199
172 CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const { 200 CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const {
173 return DetailedInfo(parent()->parent()->GetTitle()).InitDatabase( 201 return DetailedInfo(parent()->parent()->GetTitle()).InitDatabase(
174 &*database_info_); 202 &*database_info_);
175 } 203 }
176 204
177 /////////////////////////////////////////////////////////////////////////////// 205 ///////////////////////////////////////////////////////////////////////////////
178 // CookieTreeLocalStorageNode, public: 206 // CookieTreeLocalStorageNode, public:
179 207
180 CookieTreeLocalStorageNode::CookieTreeLocalStorageNode( 208 CookieTreeLocalStorageNode::CookieTreeLocalStorageNode(
181 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 209 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator
182 local_storage_info) 210 local_storage_info)
183 : CookieTreeNode(UTF8ToUTF16(local_storage_info->origin_url.spec())), 211 : CookieTreeNode(UTF8ToUTF16(local_storage_info->origin_url.spec())),
184 local_storage_info_(local_storage_info) { 212 local_storage_info_(local_storage_info) {
185 } 213 }
186 214
187 CookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {} 215 CookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {}
188 216
189 void CookieTreeLocalStorageNode::DeleteStoredObjects() { 217 void CookieTreeLocalStorageNode::DeleteStoredObjects() {
190 GetModel()->local_storage_helper_->DeleteOrigin( 218 LocalDataContainer* container = GetLocalDataContainerForNode(this);
191 local_storage_info_->origin_url); 219
192 GetModel()->local_storage_info_list_.erase(local_storage_info_); 220 if (container) {
221 container->local_storage_helper_->DeleteOrigin(
222 local_storage_info_->origin_url);
223 container->local_storage_info_list_.erase(local_storage_info_);
224 }
193 } 225 }
194 226
195 CookieTreeNode::DetailedInfo 227 CookieTreeNode::DetailedInfo
196 CookieTreeLocalStorageNode::GetDetailedInfo() const { 228 CookieTreeLocalStorageNode::GetDetailedInfo() const {
197 return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage( 229 return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage(
198 &*local_storage_info_); 230 &*local_storage_info_);
199 } 231 }
200 232
201 /////////////////////////////////////////////////////////////////////////////// 233 ///////////////////////////////////////////////////////////////////////////////
202 // CookieTreeSessionStorageNode, public: 234 // CookieTreeSessionStorageNode, public:
203 235
204 CookieTreeSessionStorageNode::CookieTreeSessionStorageNode( 236 CookieTreeSessionStorageNode::CookieTreeSessionStorageNode(
205 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 237 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator
206 session_storage_info) 238 session_storage_info)
207 : CookieTreeNode(UTF8ToUTF16(session_storage_info->origin_url.spec())), 239 : CookieTreeNode(UTF8ToUTF16(session_storage_info->origin_url.spec())),
208 session_storage_info_(session_storage_info) { 240 session_storage_info_(session_storage_info) {
209 } 241 }
210 242
211 CookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {} 243 CookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {}
212 244
213 void CookieTreeSessionStorageNode::DeleteStoredObjects() { 245 void CookieTreeSessionStorageNode::DeleteStoredObjects() {
214 GetModel()->session_storage_info_list_.erase(session_storage_info_); 246 LocalDataContainer* container = GetLocalDataContainerForNode(this);
247
248 if (container) {
249 container->session_storage_info_list_.erase(session_storage_info_);
250 }
215 } 251 }
216 252
217 CookieTreeNode::DetailedInfo 253 CookieTreeNode::DetailedInfo
218 CookieTreeSessionStorageNode::GetDetailedInfo() const { 254 CookieTreeSessionStorageNode::GetDetailedInfo() const {
219 return DetailedInfo(parent()->parent()->GetTitle()).InitSessionStorage( 255 return DetailedInfo(parent()->parent()->GetTitle()).InitSessionStorage(
220 &*session_storage_info_); 256 &*session_storage_info_);
221 } 257 }
222 258
223 /////////////////////////////////////////////////////////////////////////////// 259 ///////////////////////////////////////////////////////////////////////////////
224 // CookieTreeIndexedDBNode, public: 260 // CookieTreeIndexedDBNode, public:
225 261
226 CookieTreeIndexedDBNode::CookieTreeIndexedDBNode( 262 CookieTreeIndexedDBNode::CookieTreeIndexedDBNode(
227 std::list<BrowsingDataIndexedDBHelper::IndexedDBInfo>::iterator 263 std::list<BrowsingDataIndexedDBHelper::IndexedDBInfo>::iterator
228 indexed_db_info) 264 indexed_db_info)
229 : CookieTreeNode(UTF8ToUTF16( 265 : CookieTreeNode(UTF8ToUTF16(
230 indexed_db_info->origin.spec())), 266 indexed_db_info->origin.spec())),
231 indexed_db_info_(indexed_db_info) { 267 indexed_db_info_(indexed_db_info) {
232 } 268 }
233 269
234 CookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {} 270 CookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {}
235 271
236 void CookieTreeIndexedDBNode::DeleteStoredObjects() { 272 void CookieTreeIndexedDBNode::DeleteStoredObjects() {
237 GetModel()->indexed_db_helper_->DeleteIndexedDB( 273 LocalDataContainer* container = GetLocalDataContainerForNode(this);
238 indexed_db_info_->origin); 274
239 GetModel()->indexed_db_info_list_.erase(indexed_db_info_); 275 if (container) {
276 container->indexed_db_helper_->DeleteIndexedDB(
277 indexed_db_info_->origin);
278 container->indexed_db_info_list_.erase(indexed_db_info_);
279 }
240 } 280 }
241 281
242 CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const { 282 CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const {
243 return DetailedInfo(parent()->parent()->GetTitle()).InitIndexedDB( 283 return DetailedInfo(parent()->parent()->GetTitle()).InitIndexedDB(
244 &*indexed_db_info_); 284 &*indexed_db_info_);
245 } 285 }
246 286
247 /////////////////////////////////////////////////////////////////////////////// 287 ///////////////////////////////////////////////////////////////////////////////
248 // CookieTreeFileSystemNode, public: 288 // CookieTreeFileSystemNode, public:
249 289
250 CookieTreeFileSystemNode::CookieTreeFileSystemNode( 290 CookieTreeFileSystemNode::CookieTreeFileSystemNode(
251 std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator 291 std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator
252 file_system_info) 292 file_system_info)
253 : CookieTreeNode(UTF8ToUTF16( 293 : CookieTreeNode(UTF8ToUTF16(
254 file_system_info->origin.spec())), 294 file_system_info->origin.spec())),
255 file_system_info_(file_system_info) { 295 file_system_info_(file_system_info) {
256 } 296 }
257 297
258 CookieTreeFileSystemNode::~CookieTreeFileSystemNode() {} 298 CookieTreeFileSystemNode::~CookieTreeFileSystemNode() {}
259 299
260 void CookieTreeFileSystemNode::DeleteStoredObjects() { 300 void CookieTreeFileSystemNode::DeleteStoredObjects() {
261 GetModel()->file_system_helper_->DeleteFileSystemOrigin( 301 LocalDataContainer* container = GetLocalDataContainerForNode(this);
262 file_system_info_->origin); 302
263 GetModel()->file_system_info_list_.erase(file_system_info_); 303 if (container) {
304 container->file_system_helper_->DeleteFileSystemOrigin(
305 file_system_info_->origin);
306 container->file_system_info_list_.erase(file_system_info_);
307 }
264 } 308 }
265 309
266 CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const { 310 CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const {
267 return DetailedInfo(parent()->parent()->GetTitle()).InitFileSystem( 311 return DetailedInfo(parent()->parent()->GetTitle()).InitFileSystem(
268 &*file_system_info_); 312 &*file_system_info_);
269 } 313 }
270 314
271 /////////////////////////////////////////////////////////////////////////////// 315 ///////////////////////////////////////////////////////////////////////////////
272 // CookieTreeQuotaNode, public: 316 // CookieTreeQuotaNode, public:
273 317
274 CookieTreeQuotaNode::CookieTreeQuotaNode( 318 CookieTreeQuotaNode::CookieTreeQuotaNode(
275 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) 319 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info)
276 : CookieTreeNode(UTF8ToUTF16(quota_info->host)), 320 : CookieTreeNode(UTF8ToUTF16(quota_info->host)),
277 quota_info_(quota_info) { 321 quota_info_(quota_info) {
278 } 322 }
279 323
280 CookieTreeQuotaNode::~CookieTreeQuotaNode() {} 324 CookieTreeQuotaNode::~CookieTreeQuotaNode() {}
281 325
282 void CookieTreeQuotaNode::DeleteStoredObjects() { 326 void CookieTreeQuotaNode::DeleteStoredObjects() {
283 // Calling this function may cause unexpected over-quota state of origin. 327 // 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. 328 // However, it'll caused no problem, just prevent usage growth of the origin.
285 GetModel()->quota_helper_->RevokeHostQuota(quota_info_->host); 329 CookieTreeAppNode* app = static_cast<CookieTreeAppNode*>(
286 GetModel()->quota_info_list_.erase(quota_info_); 330 parent()->parent());
331 LocalDataContainer* container = GetModel()->GetLocalDataContainer(
332 app->app_id());
333
334 if (container) {
335 container->quota_helper_->RevokeHostQuota(quota_info_->host);
336 container->quota_info_list_.erase(quota_info_);
337 }
287 } 338 }
288 339
289 CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const { 340 CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const {
290 return DetailedInfo(parent()->parent()->GetTitle()).InitQuota( 341 return DetailedInfo(parent()->parent()->GetTitle()).InitQuota(
291 &*quota_info_); 342 &*quota_info_);
292 } 343 }
293 344
294 /////////////////////////////////////////////////////////////////////////////// 345 ///////////////////////////////////////////////////////////////////////////////
295 // CookieTreeServerBoundCertNode, public: 346 // CookieTreeServerBoundCertNode, public:
296 347
297 CookieTreeServerBoundCertNode::CookieTreeServerBoundCertNode( 348 CookieTreeServerBoundCertNode::CookieTreeServerBoundCertNode(
298 net::ServerBoundCertStore::ServerBoundCertList::iterator cert) 349 net::ServerBoundCertStore::ServerBoundCertList::iterator cert)
299 : CookieTreeNode(ASCIIToUTF16(cert->server_identifier())), 350 : CookieTreeNode(ASCIIToUTF16(cert->server_identifier())),
300 server_bound_cert_(cert) { 351 server_bound_cert_(cert) {
301 } 352 }
302 353
303 CookieTreeServerBoundCertNode::~CookieTreeServerBoundCertNode() {} 354 CookieTreeServerBoundCertNode::~CookieTreeServerBoundCertNode() {}
304 355
305 void CookieTreeServerBoundCertNode::DeleteStoredObjects() { 356 void CookieTreeServerBoundCertNode::DeleteStoredObjects() {
306 GetModel()->server_bound_cert_helper_->DeleteServerBoundCert( 357 LocalDataContainer* container = GetLocalDataContainerForNode(this);
307 server_bound_cert_->server_identifier()); 358
308 GetModel()->server_bound_cert_list_.erase(server_bound_cert_); 359 if (container) {
360 container->server_bound_cert_helper_->DeleteServerBoundCert(
361 server_bound_cert_->server_identifier());
362 container->server_bound_cert_list_.erase(server_bound_cert_);
363 }
309 } 364 }
310 365
311 CookieTreeNode::DetailedInfo 366 CookieTreeNode::DetailedInfo
312 CookieTreeServerBoundCertNode::GetDetailedInfo() const { 367 CookieTreeServerBoundCertNode::GetDetailedInfo() const {
313 return DetailedInfo(parent()->parent()->GetTitle()).InitServerBoundCert( 368 return DetailedInfo(parent()->parent()->GetTitle()).InitServerBoundCert(
314 &*server_bound_cert_); 369 &*server_bound_cert_);
315 } 370 }
316 371
317 /////////////////////////////////////////////////////////////////////////////// 372 ///////////////////////////////////////////////////////////////////////////////
318 // CookieTreeRootNode, public: 373 // CookieTreeRootNode, public:
319 374
320 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model) 375 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model)
321 : model_(model) { 376 : model_(model) {
322 } 377 }
323 378
324 CookieTreeRootNode::~CookieTreeRootNode() {} 379 CookieTreeRootNode::~CookieTreeRootNode() {}
325 380
326 CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode( 381 CookieTreeAppNode* CookieTreeRootNode::GetOrCreateAppNode(
382 const std::string& app_name,
383 const std::string& app_id) {
384 CookieTreeAppNode app_node(app_name, app_id);
385
386 // First see if there is an existing match.
387 std::vector<CookieTreeNode*>::iterator app_node_iterator =
388 std::lower_bound(children().begin(),
389 children().end(),
390 &app_node,
391 AppNodeComparator());
392
393 if (app_node_iterator != children().end())
394 return static_cast<CookieTreeAppNode*>(*app_node_iterator);
395
396 // Node doesn't exist, create a new one and insert it into the (ordered)
397 // children.
398 CookieTreeAppNode* retval = new CookieTreeAppNode(app_name, app_id);
399 DCHECK(model_);
400 model_->Add(this, retval, (app_node_iterator - children().begin()));
401 return retval;
402 }
403
404 CookiesTreeModel* CookieTreeRootNode::GetModel() const {
405 return model_;
406 }
407
408 CookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const {
409 return DetailedInfo(string16()).Init(DetailedInfo::TYPE_ROOT);
410 }
411
412 ///////////////////////////////////////////////////////////////////////////////
413 // CookieTreeAppNode, public:
414
415 CookieTreeAppNode::CookieTreeAppNode(const std::string& app_name,
416 const std::string& app_id)
417 : CookieTreeNode(UTF8ToUTF16(app_name)),
418 app_name_(app_name),
419 app_id_(app_id) {}
420
421 CookieTreeAppNode::~CookieTreeAppNode() {}
422
423 CookieTreeOriginNode* CookieTreeAppNode::GetOrCreateOriginNode(
327 const GURL& url) { 424 const GURL& url) {
328 CookieTreeOriginNode origin_node(url); 425 CookieTreeOriginNode origin_node(url);
329 426
330 // First see if there is an existing match. 427 // First see if there is an existing match.
331 std::vector<CookieTreeNode*>::iterator origin_node_iterator = 428 std::vector<CookieTreeNode*>::iterator origin_node_iterator =
332 std::lower_bound(children().begin(), 429 std::lower_bound(children().begin(),
333 children().end(), 430 children().end(),
334 &origin_node, 431 &origin_node,
335 OriginNodeComparator()); 432 OriginNodeComparator());
336 433
337 if (origin_node_iterator != children().end() && 434 if (origin_node_iterator != children().end() &&
338 WideToUTF16Hack(CookieTreeOriginNode::TitleForUrl(url)) == 435 CookieTreeOriginNode::TitleForUrl(url) ==
339 (*origin_node_iterator)->GetTitle()) 436 (*origin_node_iterator)->GetTitle())
340 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator); 437 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator);
341 // Node doesn't exist, create a new one and insert it into the (ordered) 438 // Node doesn't exist, create a new one and insert it into the (ordered)
342 // children. 439 // children.
343 CookieTreeOriginNode* retval = new CookieTreeOriginNode(url); 440 CookieTreeOriginNode* retval = new CookieTreeOriginNode(url);
344 DCHECK(model_); 441 GetModel()->Add(this, retval, (origin_node_iterator - children().begin()));
345 model_->Add(this, retval, (origin_node_iterator - children().begin()));
346 return retval; 442 return retval;
347 } 443 }
348 444
349 CookiesTreeModel* CookieTreeRootNode::GetModel() const { 445 CookieTreeNode::DetailedInfo CookieTreeAppNode::GetDetailedInfo() const {
350 return model_; 446 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 } 447 }
356 448
357 /////////////////////////////////////////////////////////////////////////////// 449 ///////////////////////////////////////////////////////////////////////////////
358 // CookieTreeOriginNode, public: 450 // CookieTreeOriginNode, public:
359 451
360 // static 452 // static
361 std::wstring CookieTreeOriginNode::TitleForUrl( 453 string16 CookieTreeOriginNode::TitleForUrl(
362 const GURL& url) { 454 const GURL& url) {
363 return UTF8ToWide(url.SchemeIsFile() ? kFileOriginNodeName : url.host()); 455 return UTF8ToUTF16(url.SchemeIsFile() ? kFileOriginNodeName : url.host());
364 } 456 }
365 457
366 CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url) 458 CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url)
367 : CookieTreeNode(WideToUTF16Hack(TitleForUrl(url))), 459 : CookieTreeNode(TitleForUrl(url)),
368 cookies_child_(NULL), 460 cookies_child_(NULL),
369 databases_child_(NULL), 461 databases_child_(NULL),
370 local_storages_child_(NULL), 462 local_storages_child_(NULL),
371 session_storages_child_(NULL), 463 session_storages_child_(NULL),
372 appcaches_child_(NULL), 464 appcaches_child_(NULL),
373 indexed_dbs_child_(NULL), 465 indexed_dbs_child_(NULL),
374 file_systems_child_(NULL), 466 file_systems_child_(NULL),
375 quota_child_(NULL), 467 quota_child_(NULL),
376 server_bound_certs_child_(NULL), 468 server_bound_certs_child_(NULL),
377 url_(url) {} 469 url_(url) {}
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 691
600 bool CookieTreeNode::NodeTitleComparator::operator() ( 692 bool CookieTreeNode::NodeTitleComparator::operator() (
601 const CookieTreeNode* lhs, const CookieTreeNode* rhs) { 693 const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
602 const CookieTreeNode* left = 694 const CookieTreeNode* left =
603 static_cast<const CookieTreeNode*>(lhs); 695 static_cast<const CookieTreeNode*>(lhs);
604 const CookieTreeNode* right = 696 const CookieTreeNode* right =
605 static_cast<const CookieTreeNode*>(rhs); 697 static_cast<const CookieTreeNode*>(rhs);
606 return (left->GetTitle() < right->GetTitle()); 698 return (left->GetTitle() < right->GetTitle());
607 } 699 }
608 700
701 bool CookieTreeNode::AppNodeComparator::operator() (
702 const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
703 const CookieTreeAppNode* left =
704 static_cast<const CookieTreeAppNode*>(lhs);
705 const CookieTreeAppNode* right =
706 static_cast<const CookieTreeAppNode*>(rhs);
707 return (left->app_id() < right->app_id());
708 }
709
609 void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) { 710 void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) {
610 DCHECK(new_child); 711 DCHECK(new_child);
611 std::vector<CookieTreeNode*>::iterator iter = 712 std::vector<CookieTreeNode*>::iterator iter =
612 std::lower_bound(children().begin(), 713 std::lower_bound(children().begin(),
613 children().end(), 714 children().end(),
614 new_child, 715 new_child,
615 NodeTitleComparator()); 716 NodeTitleComparator());
616 GetModel()->Add(this, new_child, iter - children().begin()); 717 GetModel()->Add(this, new_child, iter - children().begin());
617 } 718 }
618 719
619 /////////////////////////////////////////////////////////////////////////////// 720 ///////////////////////////////////////////////////////////////////////////////
620 // CookiesTreeModel, public: 721 // CookiesTreeModel, public:
621 722 CookiesTreeModel::CookiesTreeModel(const ContainerMap& apps_map,
622 CookiesTreeModel::CookiesTreeModel( 723 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>( 724 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>(
634 new CookieTreeRootNode(this))), 725 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), 726 use_cookie_source_(use_cookie_source),
646 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { 727 batch_update_(0) {
647 DCHECK(cookie_helper_); 728 for (ContainerMap::const_iterator it = apps_map.begin();
648 cookie_helper_->StartFetching( 729 it != apps_map.end(); ++it) {
649 base::Bind(&CookiesTreeModel::OnCookiesModelInfoLoaded, 730 app_data_map_[it->first] = it->second;
650 weak_ptr_factory_.GetWeakPtr())); 731 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 } 732 }
696 } 733 }
697 734
698 CookiesTreeModel::~CookiesTreeModel() {} 735 CookiesTreeModel::~CookiesTreeModel() {
736 STLDeleteValues(&app_data_map_);
737 }
699 738
700 /////////////////////////////////////////////////////////////////////////////// 739 ///////////////////////////////////////////////////////////////////////////////
701 // CookiesTreeModel, TreeModel methods (public): 740 // CookiesTreeModel, TreeModel methods (public):
702 741
703 // TreeModel methods: 742 // TreeModel methods:
704 // Returns the set of icons for the nodes in the tree. You only need override 743 // 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. 744 // this if you don't want to use the default folder icons.
706 void CookiesTreeModel::GetIcons(std::vector<gfx::ImageSkia>* icons) { 745 void CookiesTreeModel::GetIcons(std::vector<gfx::ImageSkia>* icons) {
707 icons->push_back(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 746 icons->push_back(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
708 IDR_OMNIBOX_HTTP)); 747 IDR_OMNIBOX_HTTP));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 NotifyObserverBeginBatch(); 787 NotifyObserverBeginBatch();
749 CookieTreeNode* root = GetRoot(); 788 CookieTreeNode* root = GetRoot();
750 root->DeleteStoredObjects(); 789 root->DeleteStoredObjects();
751 int num_children = root->child_count(); 790 int num_children = root->child_count();
752 for (int i = num_children - 1; i >= 0; --i) 791 for (int i = num_children - 1; i >= 0; --i)
753 delete Remove(root, root->GetChild(i)); 792 delete Remove(root, root->GetChild(i));
754 NotifyObserverTreeNodeChanged(root); 793 NotifyObserverTreeNodeChanged(root);
755 NotifyObserverEndBatch(); 794 NotifyObserverEndBatch();
756 } 795 }
757 796
797 void CookiesTreeModel::DeleteStoredObjectsForApp(const std::string& app_id) {
798 NotifyObserverBeginBatch();
799 CookieTreeAppNode* app_node;
800 CookieTreeNode* root = GetRoot();
801 for (int i = 0; i < root->child_count(); ++i) {
802 app_node = static_cast<CookieTreeAppNode*>(root->GetChild(i));
803 app_node->DeleteStoredObjects();
804 if (app_node->GetDetailedInfo().app_id == app_id) {
805 // We need to loop over and delete the child nodes, as we can't just
806 // delete the app node. The reason for this is that the app node doesn't
807 // really get deleted, unless the app is uninstalled, which doesn't happen
808 // in this case.
809 int num_children = app_node->child_count();
810 for (int j = num_children - 1; j >= 0; --j) {
811 delete Remove(app_node, app_node->GetChild(j));
812 }
813 break;
814 }
815 }
816 NotifyObserverTreeNodeChanged(root);
817 NotifyObserverEndBatch();
818 }
819
758 void CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) { 820 void CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) {
759 if (cookie_node == GetRoot()) 821 if (cookie_node == GetRoot())
760 return; 822 return;
761 cookie_node->DeleteStoredObjects(); 823 cookie_node->DeleteStoredObjects();
762 CookieTreeNode* parent_node = cookie_node->parent(); 824 CookieTreeNode* parent_node = cookie_node->parent();
763 delete Remove(parent_node, cookie_node); 825 delete Remove(parent_node, cookie_node);
764 if (parent_node->empty()) 826 if (parent_node->empty())
765 DeleteCookieNode(parent_node); 827 DeleteCookieNode(parent_node);
766 } 828 }
767 829
768 void CookiesTreeModel::UpdateSearchResults(const std::wstring& filter) { 830 void CookiesTreeModel::UpdateSearchResults(const string16& filter) {
769 CookieTreeNode* root = GetRoot(); 831 CookieTreeNode* root = GetRoot();
770 int num_children = root->child_count(); 832 int num_children = root->child_count();
771 NotifyObserverBeginBatch(); 833 NotifyObserverBeginBatch();
772 for (int i = num_children - 1; i >= 0; --i) 834 for (int i = num_children - 1; i >= 0; --i)
773 delete Remove(root, root->GetChild(i)); 835 delete Remove(root, root->GetChild(i));
774 PopulateCookieInfoWithFilter(filter); 836 PopulateCookieInfoWithFilter(NULL, filter);
775 PopulateDatabaseInfoWithFilter(filter); 837 PopulateDatabaseInfoWithFilter(NULL, filter);
776 PopulateLocalStorageInfoWithFilter(filter); 838 PopulateLocalStorageInfoWithFilter(NULL, filter);
777 PopulateSessionStorageInfoWithFilter(filter); 839 PopulateSessionStorageInfoWithFilter(NULL, filter);
778 PopulateAppCacheInfoWithFilter(filter); 840 PopulateAppCacheInfoWithFilter(NULL, filter);
779 PopulateIndexedDBInfoWithFilter(filter); 841 PopulateIndexedDBInfoWithFilter(NULL, filter);
780 PopulateFileSystemInfoWithFilter(filter); 842 PopulateFileSystemInfoWithFilter(NULL, filter);
781 PopulateQuotaInfoWithFilter(filter); 843 PopulateQuotaInfoWithFilter(NULL, filter);
782 PopulateServerBoundCertInfoWithFilter(filter); 844 PopulateServerBoundCertInfoWithFilter(NULL, filter);
783 NotifyObserverTreeNodeChanged(root); 845 NotifyObserverTreeNodeChanged(root);
784 NotifyObserverEndBatch(); 846 NotifyObserverEndBatch();
785 } 847 }
786 848
787 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) { 849 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) {
788 cookies_observer_list_.AddObserver(observer); 850 cookies_observer_list_.AddObserver(observer);
789 // Call super so that TreeNodeModel can notify, too. 851 // Call super so that TreeNodeModel can notify, too.
790 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer); 852 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer);
791 } 853 }
792 854
793 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) { 855 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) {
794 cookies_observer_list_.RemoveObserver(observer); 856 cookies_observer_list_.RemoveObserver(observer);
795 // Call super so that TreeNodeModel doesn't have dead pointers. 857 // Call super so that TreeNodeModel doesn't have dead pointers.
796 ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer); 858 ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer);
797 } 859 }
798 860
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( 861 void CookiesTreeModel::PopulateAppCacheInfoWithFilter(
822 const std::wstring& filter) { 862 const std::string* app_id,
863 const string16& filter) {
864
823 using appcache::AppCacheInfo; 865 using appcache::AppCacheInfo;
824 typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin; 866 typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin;
825 867 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
826 if (appcache_info_.empty()) 868 bool begin_batch = false;
827 return; 869
870 for (ContainerMap::iterator ait = app_data_map_.begin();
James Hawkins 2012/06/21 00:04:12 nit: |ait| is not a good variable name.
nasko 2012/06/21 16:22:12 Done.
871 ait != app_data_map_.end(); ++ait ) {
872 LocalDataContainer* container = ait->second;
873
874 if (container->appcache_info_.empty())
875 continue;
876
877 if (app_id && *app_id != container->app_id())
878 continue;
879
880 if (!begin_batch) {
881 NotifyObserverBeginBatch();
882 begin_batch = true;
883 }
884
885 CookieTreeAppNode* app_node =
886 root->GetOrCreateAppNode(container->app_name(), container->app_id());
887
888 for (InfoByOrigin::iterator origin = container->appcache_info_.begin();
889 origin != container->appcache_info_.end(); ++origin) {
890 string16 origin_node_name = UTF8ToUTF16(origin->first.host());
891 if (filter.empty() ||
James Hawkins 2012/06/21 00:04:12 Optional nit: Save indentation by reversing the lo
nasko 2012/06/21 16:22:12 I will leave it as is, since Markus has planned co
892 (origin_node_name.find(filter) != string16::npos)) {
893 CookieTreeOriginNode* origin_node =
894 app_node->GetOrCreateOriginNode(origin->first);
895 CookieTreeAppCachesNode* appcaches_node =
896 origin_node->GetOrCreateAppCachesNode();
897
898 for (std::list<AppCacheInfo>::iterator info = origin->second.begin();
899 info != origin->second.end(); ++info) {
900 appcaches_node->AddAppCacheNode(
901 new CookieTreeAppCacheNode(origin->first, info));
902 }
903 }
904 }
905 }
906
907 if (begin_batch) {
908 NotifyObserverTreeNodeChanged(root);
909 NotifyObserverEndBatch();
910 }
911 }
912
913 void CookiesTreeModel::PopulateCookieInfoWithFilter(
914 const std::string* app_id,
915 const string16& filter) {
916 // mmargh mmargh mmargh! delicious!
James Hawkins 2012/06/21 00:04:12 nit: Remove comment?
nasko 2012/06/21 16:22:12 Done.
828 917
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 ait = app_data_map_.begin();
832 origin != appcache_info_.end(); ++origin) { 921 ait != app_data_map_.end(); ++ait ) {
833 std::wstring origin_node_name = UTF8ToWide(origin->first.host()); 922 LocalDataContainer* container = ait->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 ait = app_data_map_.begin();
909 ++database_info) { 968 ait != app_data_map_.end(); ++ait ) {
910 GURL origin(database_info->origin); 969 LocalDataContainer* container = ait->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 ait = app_data_map_.begin();
941 local_storage_info != local_storage_info_list_.end(); 1018 ait != app_data_map_.end(); ++ait ) {
942 ++local_storage_info) { 1019 LocalDataContainer* container = ait->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 ait = app_data_map_.begin();
973 session_storage_info_list_.begin(); 1066 ait != app_data_map_.end(); ++ait ) {
974 session_storage_info != session_storage_info_list_.end(); 1067 LocalDataContainer* container = ait->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 ait = app_data_map_.begin();
1006 indexed_db_info != indexed_db_info_list_.end(); 1115 ait != app_data_map_.end(); ++ait ) {
1007 ++indexed_db_info) { 1116 LocalDataContainer* container = ait->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 ait = app_data_map_.begin();
1163 ait != app_data_map_.end(); ++ait ) {
1164 LocalDataContainer* container = ait->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 ait = app_data_map_.begin();
1038 file_system_info_list_.begin(); 1217 ait != app_data_map_.end(); ++ait ) {
1039 file_system_info != file_system_info_list_.end(); 1218 LocalDataContainer* container = ait->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 ait = app_data_map_.begin();
1071 quota_info != quota_info_list_.end(); 1265 ait != app_data_map_.end(); ++ait ) {
1072 ++quota_info) { 1266 LocalDataContainer* container = ait->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

Powered by Google App Engine
This is Rietveld 408576698