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