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

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

Issue 3048002: Store creating url in origin nodes and use it for content settings. (Closed)
Patch Set: compilefix Created 10 years, 5 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
« 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 local_storage_info_(local_storage_info) { 167 local_storage_info_(local_storage_info) {
168 } 168 }
169 169
170 void CookieTreeLocalStorageNode::DeleteStoredObjects() { 170 void CookieTreeLocalStorageNode::DeleteStoredObjects() {
171 GetModel()->local_storage_helper_->DeleteLocalStorageFile( 171 GetModel()->local_storage_helper_->DeleteLocalStorageFile(
172 local_storage_info_->file_path); 172 local_storage_info_->file_path);
173 } 173 }
174 174
175 /////////////////////////////////////////////////////////////////////////////// 175 ///////////////////////////////////////////////////////////////////////////////
176 // CookieTreeRootNode, public: 176 // CookieTreeRootNode, public:
177
177 CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode( 178 CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode(
178 const std::wstring& origin) { 179 const GURL& url) {
179 // Strip the leading dot if it exists. 180 CookieTreeOriginNode origin_node(url);
180 std::wstring rewritten_origin = origin;
181 if (origin.length() >= 1 && origin[0] == '.')
182 rewritten_origin = origin.substr(1);
183
184 CookieTreeOriginNode rewritten_origin_node(rewritten_origin);
185 181
186 // First see if there is an existing match. 182 // First see if there is an existing match.
187 std::vector<CookieTreeNode*>::iterator origin_node_iterator = 183 std::vector<CookieTreeNode*>::iterator origin_node_iterator =
188 lower_bound(children().begin(), 184 lower_bound(children().begin(),
189 children().end(), 185 children().end(),
190 &rewritten_origin_node, 186 &origin_node,
191 OriginNodeComparator()); 187 OriginNodeComparator());
192 188
193 if (origin_node_iterator != children().end() && rewritten_origin == 189 if (origin_node_iterator != children().end() &&
190 CookieTreeOriginNode::TitleForUrl(url) ==
194 (*origin_node_iterator)->GetTitle()) 191 (*origin_node_iterator)->GetTitle())
195 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator); 192 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator);
196 // Node doesn't exist, create a new one and insert it into the (ordered) 193 // Node doesn't exist, create a new one and insert it into the (ordered)
197 // children. 194 // children.
198 CookieTreeOriginNode* retval = new CookieTreeOriginNode(rewritten_origin); 195 CookieTreeOriginNode* retval = new CookieTreeOriginNode(url);
199 DCHECK(model_); 196 DCHECK(model_);
200 model_->Add(this, (origin_node_iterator - children().begin()), retval); 197 model_->Add(this, (origin_node_iterator - children().begin()), retval);
201 return retval; 198 return retval;
202 } 199 }
203 200
204 /////////////////////////////////////////////////////////////////////////////// 201 ///////////////////////////////////////////////////////////////////////////////
205 // CookieTreeOriginNode, public: 202 // CookieTreeOriginNode, public:
206 203
204 // static
205 std::wstring CookieTreeOriginNode::TitleForUrl(
206 const GURL& url) {
207 return UTF8ToWide(url.SchemeIsFile() ? kFileOriginNodeName : url.host());
208 }
209
210 CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url)
211 : CookieTreeNode(TitleForUrl(url)),
212 cookies_child_(NULL),
213 databases_child_(NULL),
214 local_storages_child_(NULL),
215 appcaches_child_(NULL),
216 url_(url) {}
217
218
207 CookieTreeCookiesNode* CookieTreeOriginNode::GetOrCreateCookiesNode() { 219 CookieTreeCookiesNode* CookieTreeOriginNode::GetOrCreateCookiesNode() {
208 if (cookies_child_) 220 if (cookies_child_)
209 return cookies_child_; 221 return cookies_child_;
210 cookies_child_ = new CookieTreeCookiesNode; 222 cookies_child_ = new CookieTreeCookiesNode;
211 AddChildSortedByTitle(cookies_child_); 223 AddChildSortedByTitle(cookies_child_);
212 return cookies_child_; 224 return cookies_child_;
213 } 225 }
214 226
215 CookieTreeDatabasesNode* CookieTreeOriginNode::GetOrCreateDatabasesNode() { 227 CookieTreeDatabasesNode* CookieTreeOriginNode::GetOrCreateDatabasesNode() {
216 if (databases_child_) 228 if (databases_child_)
(...skipping 14 matching lines...) Expand all
231 243
232 CookieTreeAppCachesNode* CookieTreeOriginNode::GetOrCreateAppCachesNode() { 244 CookieTreeAppCachesNode* CookieTreeOriginNode::GetOrCreateAppCachesNode() {
233 if (appcaches_child_) 245 if (appcaches_child_)
234 return appcaches_child_; 246 return appcaches_child_;
235 appcaches_child_ = new CookieTreeAppCachesNode; 247 appcaches_child_ = new CookieTreeAppCachesNode;
236 AddChildSortedByTitle(appcaches_child_); 248 AddChildSortedByTitle(appcaches_child_);
237 return appcaches_child_; 249 return appcaches_child_;
238 } 250 }
239 251
240 void CookieTreeOriginNode::CreateContentException( 252 void CookieTreeOriginNode::CreateContentException(
241 HostContentSettingsMap* content_settings, ContentSetting setting) { 253 HostContentSettingsMap* content_settings, ContentSetting setting) const {
242 std::wstring title(GetTitle()); 254 if (CanCreateContentException()) {
243 content_settings->AddExceptionForURL(GURL(WideToUTF16(title)), 255 content_settings->AddExceptionForURL(url_,
244 CONTENT_SETTINGS_TYPE_COOKIES, 256 CONTENT_SETTINGS_TYPE_COOKIES,
245 setting); 257 setting);
258 }
259 }
260
261 bool CookieTreeOriginNode::CanCreateContentException() const {
262 return !url_.SchemeIsFile();
246 } 263 }
247 264
248 /////////////////////////////////////////////////////////////////////////////// 265 ///////////////////////////////////////////////////////////////////////////////
249 // CookieTreeCookiesNode, public: 266 // CookieTreeCookiesNode, public:
250 267
251 CookieTreeCookiesNode::CookieTreeCookiesNode() 268 CookieTreeCookiesNode::CookieTreeCookiesNode()
252 : CookieTreeNode(l10n_util::GetString(IDS_COOKIES_COOKIES)) { 269 : CookieTreeNode(l10n_util::GetString(IDS_COOKIES_COOKIES)) {
253 } 270 }
254 271
255 /////////////////////////////////////////////////////////////////////////////// 272 ///////////////////////////////////////////////////////////////////////////////
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 LoadCookiesWithFilter(std::wstring()); 394 LoadCookiesWithFilter(std::wstring());
378 } 395 }
379 396
380 void CookiesTreeModel::LoadCookiesWithFilter(const std::wstring& filter) { 397 void CookiesTreeModel::LoadCookiesWithFilter(const std::wstring& filter) {
381 // mmargh mmargh mmargh! 398 // mmargh mmargh mmargh!
382 399
383 all_cookies_ = cookie_monster_->GetAllCookies(); 400 all_cookies_ = cookie_monster_->GetAllCookies();
384 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 401 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
385 for (CookieList::iterator it = all_cookies_.begin(); 402 for (CookieList::iterator it = all_cookies_.begin();
386 it != all_cookies_.end(); ++it) { 403 it != all_cookies_.end(); ++it) {
387 std::wstring origin_node_name = UTF8ToWide(it->first); 404 std::string origin_host = it->first;
405 if (origin_host.length() > 1 && origin_host[0] == '.')
406 origin_host = it->first.substr(1);
407 // We treat secure cookies just the same as normal ones.
408 GURL origin(std::string(chrome::kHttpScheme) +
409 chrome::kStandardSchemeSeparator + origin_host + "/");
388 if (!filter.size() || 410 if (!filter.size() ||
389 (origin_node_name.find(filter) != std::wstring::npos)) { 411 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
412 std::string::npos)) {
390 CookieTreeOriginNode* origin_node = 413 CookieTreeOriginNode* origin_node =
391 root->GetOrCreateOriginNode(origin_node_name); 414 root->GetOrCreateOriginNode(origin);
392 CookieTreeCookiesNode* cookies_node = 415 CookieTreeCookiesNode* cookies_node =
393 origin_node->GetOrCreateCookiesNode(); 416 origin_node->GetOrCreateCookiesNode();
394 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(&*it); 417 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(&*it);
395 cookies_node->AddCookieNode(new_cookie); 418 cookies_node->AddCookieNode(new_cookie);
396 } 419 }
397 } 420 }
398 } 421 }
399 422
400 void CookiesTreeModel::DeleteAllStoredObjects() { 423 void CookiesTreeModel::DeleteAllStoredObjects() {
401 NotifyObserverBeginBatch(); 424 NotifyObserverBeginBatch();
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 485
463 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 486 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
464 NotifyObserverBeginBatch(); 487 NotifyObserverBeginBatch();
465 for (InfoByOrigin::const_iterator origin = 488 for (InfoByOrigin::const_iterator origin =
466 appcache_info_->infos_by_origin.begin(); 489 appcache_info_->infos_by_origin.begin();
467 origin != appcache_info_->infos_by_origin.end(); ++origin) { 490 origin != appcache_info_->infos_by_origin.end(); ++origin) {
468 std::wstring origin_node_name = UTF8ToWide(origin->first.host()); 491 std::wstring origin_node_name = UTF8ToWide(origin->first.host());
469 if (filter.empty() || 492 if (filter.empty() ||
470 (origin_node_name.find(filter) != std::wstring::npos)) { 493 (origin_node_name.find(filter) != std::wstring::npos)) {
471 CookieTreeOriginNode* origin_node = 494 CookieTreeOriginNode* origin_node =
472 root->GetOrCreateOriginNode(origin_node_name); 495 root->GetOrCreateOriginNode(origin->first);
473 CookieTreeAppCachesNode* appcaches_node = 496 CookieTreeAppCachesNode* appcaches_node =
474 origin_node->GetOrCreateAppCachesNode(); 497 origin_node->GetOrCreateAppCachesNode();
475 498
476 for (AppCacheInfoVector::const_iterator info = origin->second.begin(); 499 for (AppCacheInfoVector::const_iterator info = origin->second.begin();
477 info != origin->second.end(); ++info) { 500 info != origin->second.end(); ++info) {
478 appcaches_node->AddAppCacheNode( 501 appcaches_node->AddAppCacheNode(
479 new CookieTreeAppCacheNode(&(*info))); 502 new CookieTreeAppCacheNode(&(*info)));
480 } 503 }
481 } 504 }
482 } 505 }
483 NotifyObserverTreeNodeChanged(root); 506 NotifyObserverTreeNodeChanged(root);
484 NotifyObserverEndBatch(); 507 NotifyObserverEndBatch();
485 } 508 }
486 509
487 void CookiesTreeModel::OnDatabaseModelInfoLoaded( 510 void CookiesTreeModel::OnDatabaseModelInfoLoaded(
488 const DatabaseInfoList& database_info) { 511 const DatabaseInfoList& database_info) {
489 database_info_list_ = database_info; 512 database_info_list_ = database_info;
490 PopulateDatabaseInfoWithFilter(std::wstring()); 513 PopulateDatabaseInfoWithFilter(std::wstring());
491 } 514 }
492 515
493 void CookiesTreeModel::PopulateDatabaseInfoWithFilter( 516 void CookiesTreeModel::PopulateDatabaseInfoWithFilter(
494 const std::wstring& filter) { 517 const std::wstring& filter) {
495 if (database_info_list_.empty()) 518 if (database_info_list_.empty())
496 return; 519 return;
497 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 520 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
498 NotifyObserverBeginBatch(); 521 NotifyObserverBeginBatch();
499 for (DatabaseInfoList::iterator database_info = database_info_list_.begin(); 522 for (DatabaseInfoList::iterator database_info = database_info_list_.begin();
500 database_info != database_info_list_.end(); 523 database_info != database_info_list_.end();
501 ++database_info) { 524 ++database_info) {
502 // Determine which 'origin' node to place each 'info' in. 525 GURL origin(database_info->origin);
503 std::wstring origin_node_name;
504 if (database_info->IsFileSchemeData())
505 origin_node_name = UTF8ToWide(kFileOriginNodeName);
506 else
507 origin_node_name = UTF8ToWide(database_info->host);
508 526
509 if (!filter.size() || 527 if (!filter.size() ||
510 (origin_node_name.find(filter) != std::wstring::npos)) { 528 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
529 std::wstring::npos)) {
511 CookieTreeOriginNode* origin_node = 530 CookieTreeOriginNode* origin_node =
512 root->GetOrCreateOriginNode(origin_node_name); 531 root->GetOrCreateOriginNode(origin);
513 CookieTreeDatabasesNode* databases_node = 532 CookieTreeDatabasesNode* databases_node =
514 origin_node->GetOrCreateDatabasesNode(); 533 origin_node->GetOrCreateDatabasesNode();
515 databases_node->AddDatabaseNode( 534 databases_node->AddDatabaseNode(
516 new CookieTreeDatabaseNode(&(*database_info))); 535 new CookieTreeDatabaseNode(&(*database_info)));
517 } 536 }
518 } 537 }
519 NotifyObserverTreeNodeChanged(root); 538 NotifyObserverTreeNodeChanged(root);
520 NotifyObserverEndBatch(); 539 NotifyObserverEndBatch();
521 } 540 }
522 541
523 void CookiesTreeModel::OnStorageModelInfoLoaded( 542 void CookiesTreeModel::OnStorageModelInfoLoaded(
524 const LocalStorageInfoList& local_storage_info) { 543 const LocalStorageInfoList& local_storage_info) {
525 local_storage_info_list_ = local_storage_info; 544 local_storage_info_list_ = local_storage_info;
526 PopulateLocalStorageInfoWithFilter(std::wstring()); 545 PopulateLocalStorageInfoWithFilter(std::wstring());
527 } 546 }
528 547
529 void CookiesTreeModel::PopulateLocalStorageInfoWithFilter( 548 void CookiesTreeModel::PopulateLocalStorageInfoWithFilter(
530 const std::wstring& filter) { 549 const std::wstring& filter) {
531 if (local_storage_info_list_.empty()) 550 if (local_storage_info_list_.empty())
532 return; 551 return;
533 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 552 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
534 NotifyObserverBeginBatch(); 553 NotifyObserverBeginBatch();
535 for (LocalStorageInfoList::iterator local_storage_info = 554 for (LocalStorageInfoList::iterator local_storage_info =
536 local_storage_info_list_.begin(); 555 local_storage_info_list_.begin();
537 local_storage_info != local_storage_info_list_.end(); 556 local_storage_info != local_storage_info_list_.end();
538 ++local_storage_info) { 557 ++local_storage_info) {
539 // Determine which 'origin' node to place each 'info' in. 558 GURL origin(local_storage_info->origin);
540 std::wstring origin_node_name;
541 if (local_storage_info->IsFileSchemeData())
542 origin_node_name = UTF8ToWide(kFileOriginNodeName);
543 else
544 origin_node_name = UTF8ToWide(local_storage_info->host);
545 559
546 if (!filter.size() || 560 if (!filter.size() ||
547 (origin_node_name.find(filter) != std::wstring::npos)) { 561 (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
562 std::wstring::npos)) {
548 CookieTreeOriginNode* origin_node = 563 CookieTreeOriginNode* origin_node =
549 root->GetOrCreateOriginNode(origin_node_name); 564 root->GetOrCreateOriginNode(origin);
550 CookieTreeLocalStoragesNode* local_storages_node = 565 CookieTreeLocalStoragesNode* local_storages_node =
551 origin_node->GetOrCreateLocalStoragesNode(); 566 origin_node->GetOrCreateLocalStoragesNode();
552 local_storages_node->AddLocalStorageNode( 567 local_storages_node->AddLocalStorageNode(
553 new CookieTreeLocalStorageNode(&(*local_storage_info))); 568 new CookieTreeLocalStorageNode(&(*local_storage_info)));
554 } 569 }
555 } 570 }
556 NotifyObserverTreeNodeChanged(root); 571 NotifyObserverTreeNodeChanged(root);
557 NotifyObserverEndBatch(); 572 NotifyObserverEndBatch();
558 } 573 }
559 574
560 void CookiesTreeModel::NotifyObserverBeginBatch() { 575 void CookiesTreeModel::NotifyObserverBeginBatch() {
561 // Only notify the model once if we're batching in a nested manner. 576 // Only notify the model once if we're batching in a nested manner.
562 if (batch_update_++ == 0) { 577 if (batch_update_++ == 0) {
563 FOR_EACH_OBSERVER(Observer, 578 FOR_EACH_OBSERVER(Observer,
564 cookies_observer_list_, 579 cookies_observer_list_,
565 TreeModelBeginBatch(this)); 580 TreeModelBeginBatch(this));
566 } 581 }
567 } 582 }
568 583
569 void CookiesTreeModel::NotifyObserverEndBatch() { 584 void CookiesTreeModel::NotifyObserverEndBatch() {
570 // Only notify the observers if this is the outermost call to EndBatch() if 585 // Only notify the observers if this is the outermost call to EndBatch() if
571 // called in a nested manner. 586 // called in a nested manner.
572 if (--batch_update_ == 0) { 587 if (--batch_update_ == 0) {
573 FOR_EACH_OBSERVER(Observer, 588 FOR_EACH_OBSERVER(Observer,
574 cookies_observer_list_, 589 cookies_observer_list_,
575 TreeModelEndBatch(this)); 590 TreeModelEndBatch(this));
576 } 591 }
577 } 592 }
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