Index: components/safe_browsing_db/v4_local_database_manager.cc |
diff --git a/components/safe_browsing_db/v4_local_database_manager.cc b/components/safe_browsing_db/v4_local_database_manager.cc |
index eaa1883b5412bfa47a80521e28e28f204ed9af6e..ffef84ef0258cb080a409c3a88921a642e87d6c6 100644 |
--- a/components/safe_browsing_db/v4_local_database_manager.cc |
+++ b/components/safe_browsing_db/v4_local_database_manager.cc |
@@ -490,9 +490,11 @@ bool V4LocalDatabaseManager::GetPrefixMatches( |
void V4LocalDatabaseManager::GetSeverestThreatTypeAndMetadata( |
SBThreatType* result_threat_type, |
ThreatMetadata* metadata, |
+ FullHash* matching_full_hash, |
const std::vector<FullHashInfo>& full_hash_infos) { |
DCHECK(result_threat_type); |
DCHECK(metadata); |
+ DCHECK(matching_full_hash); |
ThreatSeverity most_severe_yet = kLeastSeverity; |
for (const FullHashInfo& fhi : full_hash_infos) { |
@@ -501,6 +503,7 @@ void V4LocalDatabaseManager::GetSeverestThreatTypeAndMetadata( |
most_severe_yet = severity; |
*result_threat_type = GetSBThreatTypeForList(fhi.list_id); |
*metadata = fhi.metadata; |
+ *matching_full_hash = fhi.full_hash; |
} |
} |
} |
@@ -595,7 +598,8 @@ void V4LocalDatabaseManager::OnFullHashResponse( |
// Find out the most severe threat, if any, to report to the client. |
GetSeverestThreatTypeAndMetadata(&check->result_threat_type, |
- &check->url_metadata, full_hash_infos); |
+ &check->url_metadata, |
+ &check->matching_full_hash, full_hash_infos); |
pending_checks_.erase(it); |
RespondToClient(std::move(check)); |
} |
@@ -649,21 +653,33 @@ void V4LocalDatabaseManager::RespondToClient( |
std::unique_ptr<PendingCheck> check) { |
DCHECK(check.get()); |
- if (check->client_callback_type == ClientCallbackType::CHECK_BROWSE_URL) { |
- DCHECK_EQ(1u, check->urls.size()); |
- check->client->OnCheckBrowseUrlResult( |
- check->urls[0], check->result_threat_type, check->url_metadata); |
- } else if (check->client_callback_type == |
- ClientCallbackType::CHECK_DOWNLOAD_URLS) { |
- check->client->OnCheckDownloadUrlResult(check->urls, |
- check->result_threat_type); |
- } else if (check->client_callback_type == |
- ClientCallbackType::CHECK_EXTENSION_IDS) { |
- const std::set<FullHash> extension_ids(check->full_hashes.begin(), |
- check->full_hashes.end()); |
- check->client->OnCheckExtensionsResult(extension_ids); |
- } else { |
- NOTREACHED() << "Unexpected client_callback_type encountered"; |
+ switch (check->client_callback_type) { |
+ case ClientCallbackType::CHECK_BROWSE_URL: |
+ DCHECK_EQ(1u, check->urls.size()); |
+ check->client->OnCheckBrowseUrlResult( |
+ check->urls[0], check->result_threat_type, check->url_metadata); |
+ break; |
+ |
+ case ClientCallbackType::CHECK_DOWNLOAD_URLS: |
+ check->client->OnCheckDownloadUrlResult(check->urls, |
+ check->result_threat_type); |
+ break; |
+ |
+ case ClientCallbackType::CHECK_RESOURCE_URL: |
+ DCHECK_EQ(1u, check->urls.size()); |
+ check->client->OnCheckResourceUrlResult( |
+ check->urls[0], check->result_threat_type, check->matching_full_hash); |
+ break; |
+ |
+ case ClientCallbackType::CHECK_EXTENSION_IDS: { |
+ const std::set<FullHash> extension_ids(check->full_hashes.begin(), |
+ check->full_hashes.end()); |
+ check->client->OnCheckExtensionsResult(extension_ids); |
+ break; |
+ } |
+ |
+ case ClientCallbackType::CHECK_OTHER: |
+ NOTREACHED() << "Unexpected client_callback_type encountered"; |
} |
} |