Index: chrome/browser/safe_browsing/local_database_manager.cc |
diff --git a/chrome/browser/safe_browsing/local_database_manager.cc b/chrome/browser/safe_browsing/local_database_manager.cc |
index 19e52ca72ff171f624cafd0184990a556e785391..dd7cbd9baf939a822fd50c6bda1aa644ae582682 100644 |
--- a/chrome/browser/safe_browsing/local_database_manager.cc |
+++ b/chrome/browser/safe_browsing/local_database_manager.cc |
@@ -106,6 +106,14 @@ ListType GetHashSeverestThreatListType( |
if (index) |
*index = i; |
break; |
+ case RESOURCEBLACKLIST: |
+ // RESOURCEBLACKLIST is even less severe than UNWANTEDURL. |
+ if (pending_threat == INVALID) { |
+ pending_threat = threat; |
+ if (index) |
+ *index = i; |
+ } |
+ break; |
} |
} |
} |
@@ -147,6 +155,12 @@ ListType GetUrlSeverestThreatListType( |
// looking. |
pending_threat = threat; |
break; |
+ case RESOURCEBLACKLIST: |
+ // RESOURCEBLACKLIST is even less severe than UNWANTEDURL. |
+ if (pending_threat == INVALID) { |
+ pending_threat = threat; |
+ } |
+ break; |
} |
} |
return pending_threat; |
@@ -164,6 +178,8 @@ SBThreatType GetThreatTypeFromListType(ListType list_type) { |
return SB_THREAT_TYPE_BINARY_MALWARE_URL; |
case EXTENSIONBLACKLIST: |
return SB_THREAT_TYPE_EXTENSION; |
+ case RESOURCEBLACKLIST: |
+ return SB_THREAT_TYPE_BLACKLISTED_RESOURCE; |
default: |
DVLOG(1) << "Unknown safe browsing list id " << list_type; |
return SB_THREAT_TYPE_SAFE; |
@@ -198,6 +214,7 @@ LocalSafeBrowsingDatabaseManager::SafeBrowsingCheck::SafeBrowsingCheck( |
: urls(urls), |
url_results(urls.size(), SB_THREAT_TYPE_SAFE), |
url_metadata(urls.size()), |
+ url_hit_hash(urls.size()), |
full_hashes(full_hashes), |
full_hash_results(full_hashes.size(), SB_THREAT_TYPE_SAFE), |
client(client), |
@@ -233,6 +250,11 @@ void LocalSafeBrowsingDatabaseManager::SafeBrowsingCheck:: |
client->OnCheckDownloadUrlResult( |
urls, *std::max_element(url_results.begin(), url_results.end())); |
break; |
+ case RESOURCEBLACKLIST: |
+ DCHECK_EQ(1u, urls.size()); |
+ client->OnCheckResourceUrlResult(urls[0], url_results[0], |
+ url_hit_hash[0]); |
+ break; |
default: |
NOTREACHED(); |
} |
@@ -268,6 +290,7 @@ LocalSafeBrowsingDatabaseManager::LocalSafeBrowsingDatabaseManager( |
enable_extension_blacklist_(false), |
enable_ip_blacklist_(false), |
enable_unwanted_software_blacklist_(true), |
+ enable_resource_blacklist_(true), |
update_in_progress_(false), |
database_update_in_progress_(false), |
closing_database_(false), |
@@ -386,6 +409,26 @@ bool LocalSafeBrowsingDatabaseManager::CheckExtensionIDs( |
return false; |
} |
+bool LocalSafeBrowsingDatabaseManager::CheckResourceUrl( |
+ const GURL& url, Client* client) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ |
+ if (!enabled_ || !enable_resource_blacklist_ || !CanCheckUrl(url)) |
+ return true; |
Nathan Parker
2016/02/16 21:42:00
Do you need to check that the DB is available, lik
veranika
2016/02/17 15:37:54
Done.
|
+ |
+ SafeBrowsingCheck* check = |
+ new SafeBrowsingCheck({url}, std::vector<SBFullHash>(), client, |
+ RESOURCEBLACKLIST, |
+ {SB_THREAT_TYPE_BLACKLISTED_RESOURCE}); |
+ std::vector<SBPrefix> prefixes; |
+ SafeBrowsingDatabase::GetDownloadUrlPrefixes(check->urls, &prefixes); |
+ StartSafeBrowsingCheck( |
+ check, |
+ base::Bind(&LocalSafeBrowsingDatabaseManager::CheckResourceUrlOnSBThread, |
+ this, prefixes)); |
+ return false; |
+} |
+ |
bool LocalSafeBrowsingDatabaseManager::MatchMalwareIP( |
const std::string& ip_address) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
@@ -780,7 +823,8 @@ SafeBrowsingDatabase* LocalSafeBrowsingDatabaseManager::GetDatabase() { |
safe_browsing_task_runner_, enable_download_protection_, |
enable_csd_whitelist_, enable_download_whitelist_, |
enable_extension_blacklist_, enable_ip_blacklist_, |
- enable_unwanted_software_blacklist_); |
+ enable_unwanted_software_blacklist_, |
+ enable_resource_blacklist_); |
database->Init(SafeBrowsingService::GetBaseFilename()); |
{ |
@@ -1098,6 +1142,9 @@ bool LocalSafeBrowsingDatabaseManager::HandleOneCheck( |
if (threat != SB_THREAT_TYPE_SAFE) { |
check->url_results[i] = threat; |
check->url_metadata[i] = expected_full_hashes[threat_index].metadata; |
+ const SBFullHash& hash = expected_full_hashes[threat_index].hash; |
+ check->url_hit_hash[i] = std::string(hash.full_hash, |
+ arraysize(hash.full_hash)); |
is_threat = true; |
} |
} |
@@ -1155,6 +1202,18 @@ LocalSafeBrowsingDatabaseManager::CheckExtensionIDsOnSBThread( |
return prefix_hits; |
} |
+std::vector<SBPrefix> |
+LocalSafeBrowsingDatabaseManager::CheckResourceUrlOnSBThread( |
+ const std::vector<SBPrefix>& prefixes) { |
+ DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); |
+ |
+ std::vector<SBPrefix> prefix_hits; |
+ const bool result = |
+ database_->ContainsResourceUrlPrefixes(prefixes, &prefix_hits); |
+ DCHECK_EQ(result, !prefix_hits.empty()); |
+ return prefix_hits; |
+} |
+ |
void LocalSafeBrowsingDatabaseManager::TimeoutCallback( |
SafeBrowsingCheck* check) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |