OLD | NEW |
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/local_database_manager.h" | 5 #include "chrome/browser/safe_browsing/local_database_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
803 return true; | 803 return true; |
804 safe_browsing_task_runner_->PostTask( | 804 safe_browsing_task_runner_->PostTask( |
805 FROM_HERE, | 805 FROM_HERE, |
806 base::BindOnce( | 806 base::BindOnce( |
807 base::IgnoreResult(&LocalSafeBrowsingDatabaseManager::GetDatabase), | 807 base::IgnoreResult(&LocalSafeBrowsingDatabaseManager::GetDatabase), |
808 this)); | 808 this)); |
809 return false; | 809 return false; |
810 } | 810 } |
811 | 811 |
812 SafeBrowsingDatabase* LocalSafeBrowsingDatabaseManager::GetDatabase() { | 812 SafeBrowsingDatabase* LocalSafeBrowsingDatabaseManager::GetDatabase() { |
813 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 813 DCHECK(safe_browsing_task_runner_->RunsTasksInCurrentSequence()); |
814 | 814 |
815 if (database_) | 815 if (database_) |
816 return database_; | 816 return database_; |
817 | 817 |
818 const base::TimeTicks before = base::TimeTicks::Now(); | 818 const base::TimeTicks before = base::TimeTicks::Now(); |
819 std::unique_ptr<SafeBrowsingDatabase> database = SafeBrowsingDatabase::Create( | 819 std::unique_ptr<SafeBrowsingDatabase> database = SafeBrowsingDatabase::Create( |
820 safe_browsing_task_runner_, enable_download_protection_, | 820 safe_browsing_task_runner_, enable_download_protection_, |
821 enable_csd_whitelist_, enable_download_whitelist_, | 821 enable_csd_whitelist_, enable_download_whitelist_, |
822 enable_extension_blacklist_, enable_ip_blacklist_, | 822 enable_extension_blacklist_, enable_ip_blacklist_, |
823 enable_unwanted_software_blacklist_, enable_module_whitelist_); | 823 enable_unwanted_software_blacklist_, enable_module_whitelist_); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
925 bool is_download = check->check_type == BINURL; | 925 bool is_download = check->check_type == BINURL; |
926 sb_service_->protocol_manager()->GetFullHash( | 926 sb_service_->protocol_manager()->GetFullHash( |
927 check->prefix_hits, | 927 check->prefix_hits, |
928 base::Bind(&LocalSafeBrowsingDatabaseManager::HandleGetHashResults, | 928 base::Bind(&LocalSafeBrowsingDatabaseManager::HandleGetHashResults, |
929 base::Unretained(this), check), | 929 base::Unretained(this), check), |
930 is_download, check->extended_reporting_level); | 930 is_download, check->extended_reporting_level); |
931 } | 931 } |
932 | 932 |
933 void LocalSafeBrowsingDatabaseManager::GetAllChunksFromDatabase( | 933 void LocalSafeBrowsingDatabaseManager::GetAllChunksFromDatabase( |
934 GetChunksCallback callback) { | 934 GetChunksCallback callback) { |
935 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 935 DCHECK(safe_browsing_task_runner_->RunsTasksInCurrentSequence()); |
936 | 936 |
937 bool database_error = true; | 937 bool database_error = true; |
938 std::vector<SBListChunkRanges> lists; | 938 std::vector<SBListChunkRanges> lists; |
939 DCHECK(!database_update_in_progress_); | 939 DCHECK(!database_update_in_progress_); |
940 database_update_in_progress_ = true; | 940 database_update_in_progress_ = true; |
941 GetDatabase(); // This guarantees that |database_| is non-NULL. | 941 GetDatabase(); // This guarantees that |database_| is non-NULL. |
942 if (database_->UpdateStarted(&lists)) { | 942 if (database_->UpdateStarted(&lists)) { |
943 database_error = false; | 943 database_error = false; |
944 } else { | 944 } else { |
945 database_->UpdateFinished(false); | 945 database_->UpdateFinished(false); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1011 sb_check.OnSafeBrowsingResult(); | 1011 sb_check.OnSafeBrowsingResult(); |
1012 } | 1012 } |
1013 queued_checks_.pop_front(); | 1013 queued_checks_.pop_front(); |
1014 } | 1014 } |
1015 } | 1015 } |
1016 | 1016 |
1017 void LocalSafeBrowsingDatabaseManager::AddDatabaseChunks( | 1017 void LocalSafeBrowsingDatabaseManager::AddDatabaseChunks( |
1018 const std::string& list_name, | 1018 const std::string& list_name, |
1019 std::unique_ptr<std::vector<std::unique_ptr<SBChunkData>>> chunks, | 1019 std::unique_ptr<std::vector<std::unique_ptr<SBChunkData>>> chunks, |
1020 AddChunksCallback callback) { | 1020 AddChunksCallback callback) { |
1021 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1021 DCHECK(safe_browsing_task_runner_->RunsTasksInCurrentSequence()); |
1022 if (chunks) | 1022 if (chunks) |
1023 GetDatabase()->InsertChunks(list_name, *chunks); | 1023 GetDatabase()->InsertChunks(list_name, *chunks); |
1024 BrowserThread::PostTask( | 1024 BrowserThread::PostTask( |
1025 BrowserThread::IO, FROM_HERE, | 1025 BrowserThread::IO, FROM_HERE, |
1026 base::BindOnce(&LocalSafeBrowsingDatabaseManager::OnAddChunksComplete, | 1026 base::BindOnce(&LocalSafeBrowsingDatabaseManager::OnAddChunksComplete, |
1027 this, callback)); | 1027 this, callback)); |
1028 } | 1028 } |
1029 | 1029 |
1030 void LocalSafeBrowsingDatabaseManager::DeleteDatabaseChunks( | 1030 void LocalSafeBrowsingDatabaseManager::DeleteDatabaseChunks( |
1031 std::unique_ptr<std::vector<SBChunkDelete>> chunk_deletes) { | 1031 std::unique_ptr<std::vector<SBChunkDelete>> chunk_deletes) { |
1032 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1032 DCHECK(safe_browsing_task_runner_->RunsTasksInCurrentSequence()); |
1033 if (chunk_deletes) | 1033 if (chunk_deletes) |
1034 GetDatabase()->DeleteChunks(*chunk_deletes); | 1034 GetDatabase()->DeleteChunks(*chunk_deletes); |
1035 } | 1035 } |
1036 | 1036 |
1037 void LocalSafeBrowsingDatabaseManager::DatabaseUpdateFinished( | 1037 void LocalSafeBrowsingDatabaseManager::DatabaseUpdateFinished( |
1038 bool update_succeeded) { | 1038 bool update_succeeded) { |
1039 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1039 DCHECK(safe_browsing_task_runner_->RunsTasksInCurrentSequence()); |
1040 GetDatabase()->UpdateFinished(update_succeeded); | 1040 GetDatabase()->UpdateFinished(update_succeeded); |
1041 DCHECK(database_update_in_progress_); | 1041 DCHECK(database_update_in_progress_); |
1042 database_update_in_progress_ = false; | 1042 database_update_in_progress_ = false; |
1043 BrowserThread::PostTask( | 1043 BrowserThread::PostTask( |
1044 BrowserThread::UI, FROM_HERE, | 1044 BrowserThread::UI, FROM_HERE, |
1045 base::BindOnce( | 1045 base::BindOnce( |
1046 &LocalSafeBrowsingDatabaseManager::NotifyDatabaseUpdateFinished, this, | 1046 &LocalSafeBrowsingDatabaseManager::NotifyDatabaseUpdateFinished, this, |
1047 update_succeeded)); | 1047 update_succeeded)); |
1048 } | 1048 } |
1049 | 1049 |
1050 void LocalSafeBrowsingDatabaseManager::OnCloseDatabase() { | 1050 void LocalSafeBrowsingDatabaseManager::OnCloseDatabase() { |
1051 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1051 DCHECK(safe_browsing_task_runner_->RunsTasksInCurrentSequence()); |
1052 DCHECK(closing_database_); | 1052 DCHECK(closing_database_); |
1053 | 1053 |
1054 // Because |closing_database_| is true, nothing on the IO thread will be | 1054 // Because |closing_database_| is true, nothing on the IO thread will be |
1055 // accessing the database, so it's safe to delete and then NULL the pointer. | 1055 // accessing the database, so it's safe to delete and then NULL the pointer. |
1056 delete database_; | 1056 delete database_; |
1057 database_ = NULL; | 1057 database_ = NULL; |
1058 | 1058 |
1059 // Acquiring the lock here guarantees correct ordering between the resetting | 1059 // Acquiring the lock here guarantees correct ordering between the resetting |
1060 // of |database_| above and of |closing_database_| below, which ensures there | 1060 // of |database_| above and of |closing_database_| below, which ensures there |
1061 // won't be a window during which the IO thread falsely believes the database | 1061 // won't be a window during which the IO thread falsely believes the database |
1062 // is available. | 1062 // is available. |
1063 base::AutoLock lock(database_lock_); | 1063 base::AutoLock lock(database_lock_); |
1064 closing_database_ = false; | 1064 closing_database_ = false; |
1065 } | 1065 } |
1066 | 1066 |
1067 void LocalSafeBrowsingDatabaseManager::OnResetDatabase() { | 1067 void LocalSafeBrowsingDatabaseManager::OnResetDatabase() { |
1068 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1068 DCHECK(safe_browsing_task_runner_->RunsTasksInCurrentSequence()); |
1069 | 1069 |
1070 GetDatabase()->ResetDatabase(); | 1070 GetDatabase()->ResetDatabase(); |
1071 } | 1071 } |
1072 | 1072 |
1073 void LocalSafeBrowsingDatabaseManager::OnHandleGetHashResults( | 1073 void LocalSafeBrowsingDatabaseManager::OnHandleGetHashResults( |
1074 SafeBrowsingCheck* check, | 1074 SafeBrowsingCheck* check, |
1075 const std::vector<SBFullHashResult>& full_hashes) { | 1075 const std::vector<SBFullHashResult>& full_hashes) { |
1076 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 1076 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
1077 ListType check_type = check->check_type; | 1077 ListType check_type = check->check_type; |
1078 SBPrefix prefix = check->prefix_hits[0]; | 1078 SBPrefix prefix = check->prefix_hits[0]; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1168 SafeBrowsingCheckDone(check); | 1168 SafeBrowsingCheckDone(check); |
1169 } else { | 1169 } else { |
1170 check->need_get_hash = true; | 1170 check->need_get_hash = true; |
1171 OnCheckDone(check); | 1171 OnCheckDone(check); |
1172 } | 1172 } |
1173 } | 1173 } |
1174 | 1174 |
1175 std::vector<SBPrefix> | 1175 std::vector<SBPrefix> |
1176 LocalSafeBrowsingDatabaseManager::CheckDownloadUrlOnSBThread( | 1176 LocalSafeBrowsingDatabaseManager::CheckDownloadUrlOnSBThread( |
1177 const std::vector<SBPrefix>& prefixes) { | 1177 const std::vector<SBPrefix>& prefixes) { |
1178 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1178 DCHECK(safe_browsing_task_runner_->RunsTasksInCurrentSequence()); |
1179 DCHECK(enable_download_protection_); | 1179 DCHECK(enable_download_protection_); |
1180 | 1180 |
1181 std::vector<SBPrefix> prefix_hits; | 1181 std::vector<SBPrefix> prefix_hits; |
1182 const bool result = | 1182 const bool result = |
1183 database_->ContainsDownloadUrlPrefixes(prefixes, &prefix_hits); | 1183 database_->ContainsDownloadUrlPrefixes(prefixes, &prefix_hits); |
1184 DCHECK_EQ(result, !prefix_hits.empty()); | 1184 DCHECK_EQ(result, !prefix_hits.empty()); |
1185 return prefix_hits; | 1185 return prefix_hits; |
1186 } | 1186 } |
1187 | 1187 |
1188 std::vector<SBPrefix> | 1188 std::vector<SBPrefix> |
1189 LocalSafeBrowsingDatabaseManager::CheckExtensionIDsOnSBThread( | 1189 LocalSafeBrowsingDatabaseManager::CheckExtensionIDsOnSBThread( |
1190 const std::vector<SBPrefix>& prefixes) { | 1190 const std::vector<SBPrefix>& prefixes) { |
1191 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1191 DCHECK(safe_browsing_task_runner_->RunsTasksInCurrentSequence()); |
1192 | 1192 |
1193 std::vector<SBPrefix> prefix_hits; | 1193 std::vector<SBPrefix> prefix_hits; |
1194 const bool result = | 1194 const bool result = |
1195 database_->ContainsExtensionPrefixes(prefixes, &prefix_hits); | 1195 database_->ContainsExtensionPrefixes(prefixes, &prefix_hits); |
1196 DCHECK_EQ(result, !prefix_hits.empty()); | 1196 DCHECK_EQ(result, !prefix_hits.empty()); |
1197 return prefix_hits; | 1197 return prefix_hits; |
1198 } | 1198 } |
1199 | 1199 |
1200 std::vector<SBPrefix> | 1200 std::vector<SBPrefix> |
1201 LocalSafeBrowsingDatabaseManager::CheckResourceUrlOnSBThread( | 1201 LocalSafeBrowsingDatabaseManager::CheckResourceUrlOnSBThread( |
1202 const std::vector<SBPrefix>& prefixes) { | 1202 const std::vector<SBPrefix>& prefixes) { |
1203 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1203 DCHECK(safe_browsing_task_runner_->RunsTasksInCurrentSequence()); |
1204 | 1204 |
1205 std::vector<SBPrefix> prefix_hits; | 1205 std::vector<SBPrefix> prefix_hits; |
1206 const bool result = | 1206 const bool result = |
1207 database_->ContainsResourceUrlPrefixes(prefixes, &prefix_hits); | 1207 database_->ContainsResourceUrlPrefixes(prefixes, &prefix_hits); |
1208 DCHECK_EQ(result, !prefix_hits.empty()); | 1208 DCHECK_EQ(result, !prefix_hits.empty()); |
1209 return prefix_hits; | 1209 return prefix_hits; |
1210 } | 1210 } |
1211 | 1211 |
1212 void LocalSafeBrowsingDatabaseManager::TimeoutCallback( | 1212 void LocalSafeBrowsingDatabaseManager::TimeoutCallback( |
1213 SafeBrowsingCheck* check) { | 1213 SafeBrowsingCheck* check) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1256 base::BindOnce(&LocalSafeBrowsingDatabaseManager::TimeoutCallback, | 1256 base::BindOnce(&LocalSafeBrowsingDatabaseManager::TimeoutCallback, |
1257 check_ptr->weak_ptr_factory_->GetWeakPtr(), check_ptr), | 1257 check_ptr->weak_ptr_factory_->GetWeakPtr(), check_ptr), |
1258 check_timeout_); | 1258 check_timeout_); |
1259 } | 1259 } |
1260 | 1260 |
1261 bool LocalSafeBrowsingDatabaseManager::IsDownloadProtectionEnabled() const { | 1261 bool LocalSafeBrowsingDatabaseManager::IsDownloadProtectionEnabled() const { |
1262 return enable_download_protection_; | 1262 return enable_download_protection_; |
1263 } | 1263 } |
1264 | 1264 |
1265 } // namespace safe_browsing | 1265 } // namespace safe_browsing |
OLD | NEW |