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

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

Issue 7355025: Creat BrowsingDataCookieHelper and CannedBrowsingDataCookieHelper for logging cookies at UI thread. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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
11 #include "base/bind.h"
11 #include "base/callback.h" 12 #include "base/callback.h"
12 #include "base/memory/linked_ptr.h" 13 #include "base/memory/linked_ptr.h"
13 #include "base/string_util.h" 14 #include "base/string_util.h"
14 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/content_settings/host_content_settings_map.h" 16 #include "chrome/browser/content_settings/host_content_settings_map.h"
16 #include "chrome/browser/extensions/extension_service.h" 17 #include "chrome/browser/extensions/extension_service.h"
17 #include "content/browser/in_process_webkit/webkit_context.h" 18 #include "content/browser/in_process_webkit/webkit_context.h"
18 #include "grit/generated_resources.h" 19 #include "grit/generated_resources.h"
19 #include "grit/theme_resources.h" 20 #include "grit/theme_resources.h"
20 #include "grit/ui_resources.h" 21 #include "grit/ui_resources.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 CookieTreeCookieNode::~CookieTreeCookieNode() {} 56 CookieTreeCookieNode::~CookieTreeCookieNode() {}
56 57
57 void CookieTreeCookieNode::DeleteStoredObjects() { 58 void CookieTreeCookieNode::DeleteStoredObjects() {
58 // notify CookieMonster that we should delete this cookie 59 // notify CookieMonster that we should delete this cookie
59 // We have stored a copy of all the cookies in the model, and our model is 60 // We have stored a copy of all the cookies in the model, and our model is
60 // never re-calculated. Thus, we just need to delete the nodes from our 61 // never re-calculated. Thus, we just need to delete the nodes from our
61 // model, and tell CookieMonster to delete the cookies. We can keep the 62 // model, and tell CookieMonster to delete the cookies. We can keep the
62 // vector storing the cookies in-tact and not delete from there (that would 63 // vector storing the cookies in-tact and not delete from there (that would
63 // invalidate our pointers), and the fact that it contains semi out-of-date 64 // invalidate our pointers), and the fact that it contains semi out-of-date
64 // data is not problematic as we don't re-build the model based on that. 65 // data is not problematic as we don't re-build the model based on that.
65 GetModel()->cookie_monster_->DeleteCanonicalCookie(*cookie_); 66 GetModel()->cookie_helper_->DeleteCookie(*cookie_);
66 } 67 }
67 68
68 CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const { 69 CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const {
69 return DetailedInfo(parent()->parent()->GetTitle(), 70 return DetailedInfo(parent()->parent()->GetTitle(),
70 DetailedInfo::TYPE_COOKIE, 71 DetailedInfo::TYPE_COOKIE,
71 cookie_, NULL, NULL, NULL, NULL, NULL, NULL); 72 cookie_, NULL, NULL, NULL, NULL, NULL, NULL);
72 } 73 }
73 74
74 namespace { 75 namespace {
75 // comparison functor, for use in CookieTreeRootNode 76 // comparison functor, for use in CookieTreeRootNode
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 children().end(), 545 children().end(),
545 new_child, 546 new_child,
546 NodeTitleComparator()); 547 NodeTitleComparator());
547 GetModel()->Add(this, new_child, iter - children().begin()); 548 GetModel()->Add(this, new_child, iter - children().begin());
548 } 549 }
549 550
550 /////////////////////////////////////////////////////////////////////////////// 551 ///////////////////////////////////////////////////////////////////////////////
551 // CookiesTreeModel, public: 552 // CookiesTreeModel, public:
552 553
553 CookiesTreeModel::CookiesTreeModel( 554 CookiesTreeModel::CookiesTreeModel(
554 net::CookieMonster* cookie_monster, 555 BrowsingDataCookieHelper* cookie_helper,
555 BrowsingDataDatabaseHelper* database_helper, 556 BrowsingDataDatabaseHelper* database_helper,
556 BrowsingDataLocalStorageHelper* local_storage_helper, 557 BrowsingDataLocalStorageHelper* local_storage_helper,
557 BrowsingDataLocalStorageHelper* session_storage_helper, 558 BrowsingDataLocalStorageHelper* session_storage_helper,
558 BrowsingDataAppCacheHelper* appcache_helper, 559 BrowsingDataAppCacheHelper* appcache_helper,
559 BrowsingDataIndexedDBHelper* indexed_db_helper, 560 BrowsingDataIndexedDBHelper* indexed_db_helper,
560 BrowsingDataFileSystemHelper* file_system_helper, 561 BrowsingDataFileSystemHelper* file_system_helper,
561 bool use_cookie_source) 562 bool use_cookie_source)
562 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>( 563 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>(
563 new CookieTreeRootNode(this))), 564 new CookieTreeRootNode(this))),
564 cookie_monster_(cookie_monster),
565 appcache_helper_(appcache_helper), 565 appcache_helper_(appcache_helper),
566 cookie_helper_(cookie_helper),
566 database_helper_(database_helper), 567 database_helper_(database_helper),
567 local_storage_helper_(local_storage_helper), 568 local_storage_helper_(local_storage_helper),
568 session_storage_helper_(session_storage_helper), 569 session_storage_helper_(session_storage_helper),
569 indexed_db_helper_(indexed_db_helper), 570 indexed_db_helper_(indexed_db_helper),
570 file_system_helper_(file_system_helper), 571 file_system_helper_(file_system_helper),
571 batch_update_(0), 572 batch_update_(0),
572 use_cookie_source_(use_cookie_source) { 573 use_cookie_source_(use_cookie_source) {
573 LoadCookies(); 574 DCHECK(cookie_helper_);
575 cookie_helper_->StartFetching(
576 base::Bind(&CookiesTreeModel::OnCookiesModelInfoLoaded,
577 base::Unretained(this)));
574 DCHECK(database_helper_); 578 DCHECK(database_helper_);
575 database_helper_->StartFetching(NewCallback( 579 database_helper_->StartFetching(NewCallback(
576 this, &CookiesTreeModel::OnDatabaseModelInfoLoaded)); 580 this, &CookiesTreeModel::OnDatabaseModelInfoLoaded));
577 DCHECK(local_storage_helper_); 581 DCHECK(local_storage_helper_);
578 local_storage_helper_->StartFetching(NewCallback( 582 local_storage_helper_->StartFetching(NewCallback(
579 this, &CookiesTreeModel::OnLocalStorageModelInfoLoaded)); 583 this, &CookiesTreeModel::OnLocalStorageModelInfoLoaded));
580 if (session_storage_helper_) { 584 if (session_storage_helper_) {
581 session_storage_helper_->StartFetching(NewCallback( 585 session_storage_helper_->StartFetching(NewCallback(
582 this, &CookiesTreeModel::OnSessionStorageModelInfoLoaded)); 586 this, &CookiesTreeModel::OnSessionStorageModelInfoLoaded));
583 } 587 }
(...skipping 10 matching lines...) Expand all
594 this, &CookiesTreeModel::OnIndexedDBModelInfoLoaded)); 598 this, &CookiesTreeModel::OnIndexedDBModelInfoLoaded));
595 } 599 }
596 600
597 if (file_system_helper_) { 601 if (file_system_helper_) {
598 file_system_helper_->StartFetching(NewCallback( 602 file_system_helper_->StartFetching(NewCallback(
599 this, &CookiesTreeModel::OnFileSystemModelInfoLoaded)); 603 this, &CookiesTreeModel::OnFileSystemModelInfoLoaded));
600 } 604 }
601 } 605 }
602 606
603 CookiesTreeModel::~CookiesTreeModel() { 607 CookiesTreeModel::~CookiesTreeModel() {
608 cookie_helper_->CancelNotification();
604 database_helper_->CancelNotification(); 609 database_helper_->CancelNotification();
605 local_storage_helper_->CancelNotification(); 610 local_storage_helper_->CancelNotification();
606 if (session_storage_helper_) 611 if (session_storage_helper_)
607 session_storage_helper_->CancelNotification(); 612 session_storage_helper_->CancelNotification();
608 if (appcache_helper_) 613 if (appcache_helper_)
609 appcache_helper_->CancelNotification(); 614 appcache_helper_->CancelNotification();
610 if (indexed_db_helper_) 615 if (indexed_db_helper_)
611 indexed_db_helper_->CancelNotification(); 616 indexed_db_helper_->CancelNotification();
612 if (file_system_helper_) 617 if (file_system_helper_)
613 file_system_helper_->CancelNotification(); 618 file_system_helper_->CancelNotification();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: 654 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB:
650 return DATABASE; // ditto 655 return DATABASE; // ditto
651 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM: 656 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM:
652 return DATABASE; // ditto 657 return DATABASE; // ditto
653 default: 658 default:
654 break; 659 break;
655 } 660 }
656 return -1; 661 return -1;
657 } 662 }
658 663
659 void CookiesTreeModel::LoadCookies() {
660 LoadCookiesWithFilter(std::wstring());
661 }
662
663 void CookiesTreeModel::LoadCookiesWithFilter(const std::wstring& filter) {
664 // mmargh mmargh mmargh! delicious!
665
666 all_cookies_ = cookie_monster_->GetAllCookies();
667 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
668 for (CookieList::iterator it = all_cookies_.begin();
669 it != all_cookies_.end(); ++it) {
670 std::string source_string = it->Source();
671 if (source_string.empty() || !use_cookie_source_) {
672 std::string domain = it->Domain();
673 if (domain.length() > 1 && domain[0] == '.')
674 domain = domain.substr(1);
675
676 // We treat secure cookies just the same as normal ones.
677 source_string = std::string(chrome::kHttpScheme) +
678 chrome::kStandardSchemeSeparator + domain + "/";
679 }
680
681 GURL source(source_string);
682 if (!filter.size() ||
683 (CookieTreeOriginNode::TitleForUrl(source).find(filter) !=
684 std::string::npos)) {
685 CookieTreeOriginNode* origin_node =
686 root->GetOrCreateOriginNode(source);
687 CookieTreeCookiesNode* cookies_node =
688 origin_node->GetOrCreateCookiesNode();
689 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(&*it);
690 cookies_node->AddCookieNode(new_cookie);
691 }
692 }
693 }
694
695 void CookiesTreeModel::DeleteAllStoredObjects() { 664 void CookiesTreeModel::DeleteAllStoredObjects() {
696 NotifyObserverBeginBatch(); 665 NotifyObserverBeginBatch();
697 CookieTreeNode* root = GetRoot(); 666 CookieTreeNode* root = GetRoot();
698 root->DeleteStoredObjects(); 667 root->DeleteStoredObjects();
699 int num_children = root->child_count(); 668 int num_children = root->child_count();
700 for (int i = num_children - 1; i >= 0; --i) 669 for (int i = num_children - 1; i >= 0; --i)
701 delete Remove(root, root->GetChild(i)); 670 delete Remove(root, root->GetChild(i));
702 NotifyObserverTreeNodeChanged(root); 671 NotifyObserverTreeNodeChanged(root);
703 NotifyObserverEndBatch(); 672 NotifyObserverEndBatch();
704 } 673 }
705 674
706 void CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) { 675 void CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) {
707 if (cookie_node == GetRoot()) 676 if (cookie_node == GetRoot())
708 return; 677 return;
709 cookie_node->DeleteStoredObjects(); 678 cookie_node->DeleteStoredObjects();
710 CookieTreeNode* parent_node = cookie_node->parent(); 679 CookieTreeNode* parent_node = cookie_node->parent();
711 delete Remove(parent_node, cookie_node); 680 delete Remove(parent_node, cookie_node);
712 if (parent_node->empty()) 681 if (parent_node->empty())
713 DeleteCookieNode(parent_node); 682 DeleteCookieNode(parent_node);
714 } 683 }
715 684
716 void CookiesTreeModel::UpdateSearchResults(const std::wstring& filter) { 685 void CookiesTreeModel::UpdateSearchResults(const std::wstring& filter) {
717 CookieTreeNode* root = GetRoot(); 686 CookieTreeNode* root = GetRoot();
718 int num_children = root->child_count(); 687 int num_children = root->child_count();
719 NotifyObserverBeginBatch(); 688 NotifyObserverBeginBatch();
720 for (int i = num_children - 1; i >= 0; --i) 689 for (int i = num_children - 1; i >= 0; --i)
721 delete Remove(root, root->GetChild(i)); 690 delete Remove(root, root->GetChild(i));
722 LoadCookiesWithFilter(filter); 691 PopulateCookieInfoWithFilter(filter);
723 PopulateDatabaseInfoWithFilter(filter); 692 PopulateDatabaseInfoWithFilter(filter);
724 PopulateLocalStorageInfoWithFilter(filter); 693 PopulateLocalStorageInfoWithFilter(filter);
725 PopulateSessionStorageInfoWithFilter(filter); 694 PopulateSessionStorageInfoWithFilter(filter);
726 PopulateAppCacheInfoWithFilter(filter); 695 PopulateAppCacheInfoWithFilter(filter);
727 PopulateIndexedDBInfoWithFilter(filter); 696 PopulateIndexedDBInfoWithFilter(filter);
728 PopulateFileSystemInfoWithFilter(filter); 697 PopulateFileSystemInfoWithFilter(filter);
729 NotifyObserverTreeNodeChanged(root); 698 NotifyObserverTreeNodeChanged(root);
730 NotifyObserverEndBatch(); 699 NotifyObserverEndBatch();
731 } 700 }
732 701
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 info != origin->second.end(); ++info) { 742 info != origin->second.end(); ++info) {
774 appcaches_node->AddAppCacheNode( 743 appcaches_node->AddAppCacheNode(
775 new CookieTreeAppCacheNode(&(*info))); 744 new CookieTreeAppCacheNode(&(*info)));
776 } 745 }
777 } 746 }
778 } 747 }
779 NotifyObserverTreeNodeChanged(root); 748 NotifyObserverTreeNodeChanged(root);
780 NotifyObserverEndBatch(); 749 NotifyObserverEndBatch();
781 } 750 }
782 751
752 void CookiesTreeModel::OnCookiesModelInfoLoaded(
753 const CookieList& cookie_list) {
754 cookie_list_ = cookie_list;
755 PopulateCookieInfoWithFilter(std::wstring());
756 }
757
758 void CookiesTreeModel::PopulateCookieInfoWithFilter(
759 const std::wstring& filter) {
760 // mmargh mmargh mmargh! delicious!
761
762 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
763 for (CookieList::iterator it = cookie_list_.begin();
764 it != cookie_list_.end(); ++it) {
765 std::string source_string = it->Source();
766 if (source_string.empty() || !use_cookie_source_) {
767 std::string domain = it->Domain();
768 if (domain.length() > 1 && domain[0] == '.')
769 domain = domain.substr(1);
770
771 // We treat secure cookies just the same as normal ones.
772 source_string = std::string(chrome::kHttpScheme) +
773 chrome::kStandardSchemeSeparator + domain + "/";
774 }
775
776 GURL source(source_string);
777 if (!filter.size() ||
778 (CookieTreeOriginNode::TitleForUrl(source).find(filter) !=
779 std::string::npos)) {
780 CookieTreeOriginNode* origin_node =
781 root->GetOrCreateOriginNode(source);
782 CookieTreeCookiesNode* cookies_node =
783 origin_node->GetOrCreateCookiesNode();
784 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(&*it);
785 cookies_node->AddCookieNode(new_cookie);
786 }
787 }
788 }
789
783 void CookiesTreeModel::OnDatabaseModelInfoLoaded( 790 void CookiesTreeModel::OnDatabaseModelInfoLoaded(
784 const DatabaseInfoList& database_info) { 791 const DatabaseInfoList& database_info) {
785 database_info_list_ = database_info; 792 database_info_list_ = database_info;
786 PopulateDatabaseInfoWithFilter(std::wstring()); 793 PopulateDatabaseInfoWithFilter(std::wstring());
787 } 794 }
788 795
789 void CookiesTreeModel::PopulateDatabaseInfoWithFilter( 796 void CookiesTreeModel::PopulateDatabaseInfoWithFilter(
790 const std::wstring& filter) { 797 const std::wstring& filter) {
791 if (database_info_list_.empty()) 798 if (database_info_list_.empty())
792 return; 799 return;
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 962
956 void CookiesTreeModel::NotifyObserverEndBatch() { 963 void CookiesTreeModel::NotifyObserverEndBatch() {
957 // Only notify the observers if this is the outermost call to EndBatch() if 964 // Only notify the observers if this is the outermost call to EndBatch() if
958 // called in a nested manner. 965 // called in a nested manner.
959 if (--batch_update_ == 0) { 966 if (--batch_update_ == 0) {
960 FOR_EACH_OBSERVER(Observer, 967 FOR_EACH_OBSERVER(Observer,
961 cookies_observer_list_, 968 cookies_observer_list_,
962 TreeModelEndBatch(this)); 969 TreeModelEndBatch(this));
963 } 970 }
964 } 971 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698