| 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 |