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

Side by Side Diff: chrome/browser/safe_browsing/database_manager.cc

Issue 14113053: chrome: Use base::MessageLoop. (Part 3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase again Created 7 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/safe_browsing/database_manager.h" 5 #include "chrome/browser/safe_browsing/database_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 return; 590 return;
591 591
592 closing_database_ = true; 592 closing_database_ = true;
593 if (safe_browsing_thread_.get()) { 593 if (safe_browsing_thread_.get()) {
594 safe_browsing_thread_->message_loop()->PostTask(FROM_HERE, 594 safe_browsing_thread_->message_loop()->PostTask(FROM_HERE,
595 base::Bind(&SafeBrowsingDatabaseManager::OnCloseDatabase, this)); 595 base::Bind(&SafeBrowsingDatabaseManager::OnCloseDatabase, this));
596 } 596 }
597 } 597 }
598 598
599 SafeBrowsingDatabase* SafeBrowsingDatabaseManager::GetDatabase() { 599 SafeBrowsingDatabase* SafeBrowsingDatabaseManager::GetDatabase() {
600 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 600 DCHECK_EQ(base::MessageLoop::current(),
601 safe_browsing_thread_->message_loop());
601 if (database_) 602 if (database_)
602 return database_; 603 return database_;
603 startup_metric_utils::ScopedSlowStartupUMA 604 startup_metric_utils::ScopedSlowStartupUMA
604 scoped_timer("Startup.SlowStartupSafeBrowsingGetDatabase"); 605 scoped_timer("Startup.SlowStartupSafeBrowsingGetDatabase");
605 const base::TimeTicks before = base::TimeTicks::Now(); 606 const base::TimeTicks before = base::TimeTicks::Now();
606 607
607 SafeBrowsingDatabase* database = 608 SafeBrowsingDatabase* database =
608 SafeBrowsingDatabase::Create(enable_download_protection_, 609 SafeBrowsingDatabase::Create(enable_download_protection_,
609 enable_csd_whitelist_, 610 enable_csd_whitelist_,
610 enable_download_whitelist_, 611 enable_download_whitelist_,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 is_download); 676 is_download);
676 } else { 677 } else {
677 // We may have cached results for previous GetHash queries. Since 678 // We may have cached results for previous GetHash queries. Since
678 // this data comes from cache, don't histogram hits. 679 // this data comes from cache, don't histogram hits.
679 HandleOneCheck(check, check->full_hits); 680 HandleOneCheck(check, check->full_hits);
680 } 681 }
681 } 682 }
682 683
683 void SafeBrowsingDatabaseManager::GetAllChunksFromDatabase( 684 void SafeBrowsingDatabaseManager::GetAllChunksFromDatabase(
684 GetChunksCallback callback) { 685 GetChunksCallback callback) {
685 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 686 DCHECK_EQ(base::MessageLoop::current(),
687 safe_browsing_thread_->message_loop());
686 688
687 bool database_error = true; 689 bool database_error = true;
688 std::vector<SBListChunkRanges> lists; 690 std::vector<SBListChunkRanges> lists;
689 DCHECK(!database_update_in_progress_); 691 DCHECK(!database_update_in_progress_);
690 database_update_in_progress_ = true; 692 database_update_in_progress_ = true;
691 GetDatabase(); // This guarantees that |database_| is non-NULL. 693 GetDatabase(); // This guarantees that |database_| is non-NULL.
692 if (database_->UpdateStarted(&lists)) { 694 if (database_->UpdateStarted(&lists)) {
693 database_error = false; 695 database_error = false;
694 } else { 696 } else {
695 database_->UpdateFinished(false); 697 database_->UpdateFinished(false);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 check.check_type); 744 check.check_type);
743 check.client->OnSafeBrowsingResult(sb_check); 745 check.client->OnSafeBrowsingResult(sb_check);
744 } 746 }
745 queued_checks_.pop_front(); 747 queued_checks_.pop_front();
746 } 748 }
747 } 749 }
748 750
749 void SafeBrowsingDatabaseManager::AddDatabaseChunks( 751 void SafeBrowsingDatabaseManager::AddDatabaseChunks(
750 const std::string& list_name, SBChunkList* chunks, 752 const std::string& list_name, SBChunkList* chunks,
751 AddChunksCallback callback) { 753 AddChunksCallback callback) {
752 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 754 DCHECK_EQ(base::MessageLoop::current(),
755 safe_browsing_thread_->message_loop());
753 if (chunks) { 756 if (chunks) {
754 GetDatabase()->InsertChunks(list_name, *chunks); 757 GetDatabase()->InsertChunks(list_name, *chunks);
755 delete chunks; 758 delete chunks;
756 } 759 }
757 BrowserThread::PostTask( 760 BrowserThread::PostTask(
758 BrowserThread::IO, FROM_HERE, 761 BrowserThread::IO, FROM_HERE,
759 base::Bind(&SafeBrowsingDatabaseManager::OnAddChunksComplete, this, 762 base::Bind(&SafeBrowsingDatabaseManager::OnAddChunksComplete, this,
760 callback)); 763 callback));
761 } 764 }
762 765
763 void SafeBrowsingDatabaseManager::DeleteDatabaseChunks( 766 void SafeBrowsingDatabaseManager::DeleteDatabaseChunks(
764 std::vector<SBChunkDelete>* chunk_deletes) { 767 std::vector<SBChunkDelete>* chunk_deletes) {
765 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 768 DCHECK_EQ(base::MessageLoop::current(),
769 safe_browsing_thread_->message_loop());
766 if (chunk_deletes) { 770 if (chunk_deletes) {
767 GetDatabase()->DeleteChunks(*chunk_deletes); 771 GetDatabase()->DeleteChunks(*chunk_deletes);
768 delete chunk_deletes; 772 delete chunk_deletes;
769 } 773 }
770 } 774 }
771 775
772 SBThreatType SafeBrowsingDatabaseManager::GetThreatTypeFromListname( 776 SBThreatType SafeBrowsingDatabaseManager::GetThreatTypeFromListname(
773 const std::string& list_name) { 777 const std::string& list_name) {
774 if (safe_browsing_util::IsPhishingList(list_name)) { 778 if (safe_browsing_util::IsPhishingList(list_name)) {
775 return SB_THREAT_TYPE_URL_PHISHING; 779 return SB_THREAT_TYPE_URL_PHISHING;
(...skipping 14 matching lines...) Expand all
790 if (safe_browsing_util::IsExtensionList(list_name)) { 794 if (safe_browsing_util::IsExtensionList(list_name)) {
791 return SB_THREAT_TYPE_EXTENSION; 795 return SB_THREAT_TYPE_EXTENSION;
792 } 796 }
793 797
794 DVLOG(1) << "Unknown safe browsing list " << list_name; 798 DVLOG(1) << "Unknown safe browsing list " << list_name;
795 return SB_THREAT_TYPE_SAFE; 799 return SB_THREAT_TYPE_SAFE;
796 } 800 }
797 801
798 void SafeBrowsingDatabaseManager::DatabaseUpdateFinished( 802 void SafeBrowsingDatabaseManager::DatabaseUpdateFinished(
799 bool update_succeeded) { 803 bool update_succeeded) {
800 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 804 DCHECK_EQ(base::MessageLoop::current(),
805 safe_browsing_thread_->message_loop());
801 GetDatabase()->UpdateFinished(update_succeeded); 806 GetDatabase()->UpdateFinished(update_succeeded);
802 DCHECK(database_update_in_progress_); 807 DCHECK(database_update_in_progress_);
803 database_update_in_progress_ = false; 808 database_update_in_progress_ = false;
804 BrowserThread::PostTask( 809 BrowserThread::PostTask(
805 BrowserThread::UI, FROM_HERE, 810 BrowserThread::UI, FROM_HERE,
806 base::Bind(&SafeBrowsingDatabaseManager::NotifyDatabaseUpdateFinished, 811 base::Bind(&SafeBrowsingDatabaseManager::NotifyDatabaseUpdateFinished,
807 this, update_succeeded)); 812 this, update_succeeded));
808 } 813 }
809 814
810 void SafeBrowsingDatabaseManager::NotifyDatabaseUpdateFinished( 815 void SafeBrowsingDatabaseManager::NotifyDatabaseUpdateFinished(
811 bool update_succeeded) { 816 bool update_succeeded) {
812 content::NotificationService::current()->Notify( 817 content::NotificationService::current()->Notify(
813 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, 818 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE,
814 content::Source<SafeBrowsingDatabaseManager>(this), 819 content::Source<SafeBrowsingDatabaseManager>(this),
815 content::Details<bool>(&update_succeeded)); 820 content::Details<bool>(&update_succeeded));
816 } 821 }
817 822
818 void SafeBrowsingDatabaseManager::OnCloseDatabase() { 823 void SafeBrowsingDatabaseManager::OnCloseDatabase() {
819 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 824 DCHECK_EQ(base::MessageLoop::current(),
825 safe_browsing_thread_->message_loop());
820 DCHECK(closing_database_); 826 DCHECK(closing_database_);
821 827
822 // Because |closing_database_| is true, nothing on the IO thread will be 828 // Because |closing_database_| is true, nothing on the IO thread will be
823 // accessing the database, so it's safe to delete and then NULL the pointer. 829 // accessing the database, so it's safe to delete and then NULL the pointer.
824 delete database_; 830 delete database_;
825 database_ = NULL; 831 database_ = NULL;
826 832
827 // Acquiring the lock here guarantees correct ordering between the resetting 833 // Acquiring the lock here guarantees correct ordering between the resetting
828 // of |database_| above and of |closing_database_| below, which ensures there 834 // of |database_| above and of |closing_database_| below, which ensures there
829 // won't be a window during which the IO thread falsely believes the database 835 // won't be a window during which the IO thread falsely believes the database
830 // is available. 836 // is available.
831 base::AutoLock lock(database_lock_); 837 base::AutoLock lock(database_lock_);
832 closing_database_ = false; 838 closing_database_ = false;
833 } 839 }
834 840
835 void SafeBrowsingDatabaseManager::OnResetDatabase() { 841 void SafeBrowsingDatabaseManager::OnResetDatabase() {
836 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 842 DCHECK_EQ(base::MessageLoop::current(),
843 safe_browsing_thread_->message_loop());
837 GetDatabase()->ResetDatabase(); 844 GetDatabase()->ResetDatabase();
838 } 845 }
839 846
840 void SafeBrowsingDatabaseManager::CacheHashResults( 847 void SafeBrowsingDatabaseManager::CacheHashResults(
841 const std::vector<SBPrefix>& prefixes, 848 const std::vector<SBPrefix>& prefixes,
842 const std::vector<SBFullHashResult>& full_hashes) { 849 const std::vector<SBFullHashResult>& full_hashes) {
843 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 850 DCHECK_EQ(base::MessageLoop::current(),
851 safe_browsing_thread_->message_loop());
844 GetDatabase()->CacheHashResults(prefixes, full_hashes); 852 GetDatabase()->CacheHashResults(prefixes, full_hashes);
845 } 853 }
846 854
847 void SafeBrowsingDatabaseManager::OnHandleGetHashResults( 855 void SafeBrowsingDatabaseManager::OnHandleGetHashResults(
848 SafeBrowsingCheck* check, 856 SafeBrowsingCheck* check,
849 const std::vector<SBFullHashResult>& full_hashes) { 857 const std::vector<SBFullHashResult>& full_hashes) {
850 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 858 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
851 safe_browsing_util::ListType check_type = check->check_type; 859 safe_browsing_util::ListType check_type = check->check_type;
852 SBPrefix prefix = check->prefix_hits[0]; 860 SBPrefix prefix = check->prefix_hits[0];
853 GetHashRequests::iterator it = gethash_requests_.find(prefix); 861 GetHashRequests::iterator it = gethash_requests_.find(prefix);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
907 NOTREACHED(); 915 NOTREACHED();
908 } 916 }
909 } 917 }
910 918
911 SafeBrowsingCheckDone(check); 919 SafeBrowsingCheckDone(check);
912 return is_threat; 920 return is_threat;
913 } 921 }
914 922
915 void SafeBrowsingDatabaseManager::CheckDownloadHashOnSBThread( 923 void SafeBrowsingDatabaseManager::CheckDownloadHashOnSBThread(
916 SafeBrowsingCheck* check) { 924 SafeBrowsingCheck* check) {
917 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 925 DCHECK_EQ(base::MessageLoop::current(),
926 safe_browsing_thread_->message_loop());
918 DCHECK(enable_download_protection_); 927 DCHECK(enable_download_protection_);
919 928
920 DCHECK_EQ(1u, check->full_hashes.size()); 929 DCHECK_EQ(1u, check->full_hashes.size());
921 SBFullHash full_hash = check->full_hashes[0]; 930 SBFullHash full_hash = check->full_hashes[0];
922 931
923 if (!database_->ContainsDownloadHashPrefix(full_hash.prefix)) { 932 if (!database_->ContainsDownloadHashPrefix(full_hash.prefix)) {
924 // Good, we don't have hash for this url prefix. 933 // Good, we don't have hash for this url prefix.
925 BrowserThread::PostTask( 934 BrowserThread::PostTask(
926 BrowserThread::IO, FROM_HERE, 935 BrowserThread::IO, FROM_HERE,
927 base::Bind(&SafeBrowsingDatabaseManager::CheckDownloadHashDone, this, 936 base::Bind(&SafeBrowsingDatabaseManager::CheckDownloadHashDone, this,
928 check)); 937 check));
929 return; 938 return;
930 } 939 }
931 940
932 check->need_get_hash = true; 941 check->need_get_hash = true;
933 check->prefix_hits.push_back(full_hash.prefix); 942 check->prefix_hits.push_back(full_hash.prefix);
934 BrowserThread::PostTask( 943 BrowserThread::PostTask(
935 BrowserThread::IO, FROM_HERE, 944 BrowserThread::IO, FROM_HERE,
936 base::Bind(&SafeBrowsingDatabaseManager::OnCheckDone, this, check)); 945 base::Bind(&SafeBrowsingDatabaseManager::OnCheckDone, this, check));
937 } 946 }
938 947
939 void SafeBrowsingDatabaseManager::CheckDownloadUrlOnSBThread( 948 void SafeBrowsingDatabaseManager::CheckDownloadUrlOnSBThread(
940 SafeBrowsingCheck* check) { 949 SafeBrowsingCheck* check) {
941 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 950 DCHECK_EQ(base::MessageLoop::current(),
951 safe_browsing_thread_->message_loop());
942 DCHECK(enable_download_protection_); 952 DCHECK(enable_download_protection_);
943 953
944 std::vector<SBPrefix> prefix_hits; 954 std::vector<SBPrefix> prefix_hits;
945 955
946 if (!database_->ContainsDownloadUrl(check->urls, &prefix_hits)) { 956 if (!database_->ContainsDownloadUrl(check->urls, &prefix_hits)) {
947 // Good, we don't have hash for this url prefix. 957 // Good, we don't have hash for this url prefix.
948 BrowserThread::PostTask( 958 BrowserThread::PostTask(
949 BrowserThread::IO, FROM_HERE, 959 BrowserThread::IO, FROM_HERE,
950 base::Bind(&SafeBrowsingDatabaseManager::CheckDownloadUrlDone, this, 960 base::Bind(&SafeBrowsingDatabaseManager::CheckDownloadUrlDone, this,
951 check)); 961 check));
952 return; 962 return;
953 } 963 }
954 964
955 check->need_get_hash = true; 965 check->need_get_hash = true;
956 check->prefix_hits.clear(); 966 check->prefix_hits.clear();
957 check->prefix_hits = prefix_hits; 967 check->prefix_hits = prefix_hits;
958 BrowserThread::PostTask( 968 BrowserThread::PostTask(
959 BrowserThread::IO, FROM_HERE, 969 BrowserThread::IO, FROM_HERE,
960 base::Bind(&SafeBrowsingDatabaseManager::OnCheckDone, this, check)); 970 base::Bind(&SafeBrowsingDatabaseManager::OnCheckDone, this, check));
961 } 971 }
962 972
963 void SafeBrowsingDatabaseManager::CheckExtensionIDsOnSBThread( 973 void SafeBrowsingDatabaseManager::CheckExtensionIDsOnSBThread(
964 SafeBrowsingCheck* check) { 974 SafeBrowsingCheck* check) {
965 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 975 DCHECK_EQ(base::MessageLoop::current(),
976 safe_browsing_thread_->message_loop());
966 977
967 std::vector<SBPrefix> prefixes; 978 std::vector<SBPrefix> prefixes;
968 for (std::vector<SBFullHash>::iterator it = check->full_hashes.begin(); 979 for (std::vector<SBFullHash>::iterator it = check->full_hashes.begin();
969 it != check->full_hashes.end(); ++it) { 980 it != check->full_hashes.end(); ++it) {
970 prefixes.push_back((*it).prefix); 981 prefixes.push_back((*it).prefix);
971 } 982 }
972 database_->ContainsExtensionPrefixes(prefixes, &check->prefix_hits); 983 database_->ContainsExtensionPrefixes(prefixes, &check->prefix_hits);
973 984
974 if (check->prefix_hits.empty()) { 985 if (check->prefix_hits.empty()) {
975 // No matches for any extensions. 986 // No matches for any extensions.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 void SafeBrowsingDatabaseManager::StartSafeBrowsingCheck( 1044 void SafeBrowsingDatabaseManager::StartSafeBrowsingCheck(
1034 SafeBrowsingCheck* check, 1045 SafeBrowsingCheck* check,
1035 const base::Closure& task) { 1046 const base::Closure& task) {
1036 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1047 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
1037 check->timeout_factory_.reset( 1048 check->timeout_factory_.reset(
1038 new base::WeakPtrFactory<SafeBrowsingDatabaseManager>(this)); 1049 new base::WeakPtrFactory<SafeBrowsingDatabaseManager>(this));
1039 checks_.insert(check); 1050 checks_.insert(check);
1040 1051
1041 safe_browsing_thread_->message_loop()->PostTask(FROM_HERE, task); 1052 safe_browsing_thread_->message_loop()->PostTask(FROM_HERE, task);
1042 1053
1043 MessageLoop::current()->PostDelayedTask(FROM_HERE, 1054 base::MessageLoop::current()->PostDelayedTask(FROM_HERE,
1044 base::Bind(&SafeBrowsingDatabaseManager::TimeoutCallback, 1055 base::Bind(&SafeBrowsingDatabaseManager::TimeoutCallback,
1045 check->timeout_factory_->GetWeakPtr(), check), 1056 check->timeout_factory_->GetWeakPtr(), check),
1046 check_timeout_); 1057 check_timeout_);
1047 } 1058 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698