Index: chrome/browser/safe_browsing/database_manager.cc |
diff --git a/chrome/browser/safe_browsing/database_manager.cc b/chrome/browser/safe_browsing/database_manager.cc |
index 92bf351aff0f0d9be52f0c936a4d607b4e79ba8c..712271ba657f0c31e19fc9bbd71aed6ef6fae19d 100644 |
--- a/chrome/browser/safe_browsing/database_manager.cc |
+++ b/chrome/browser/safe_browsing/database_manager.cc |
@@ -72,10 +72,14 @@ bool IsExpectedThreat( |
// |hash|, or INVALID if none match. |
safe_browsing_util::ListType GetHashThreatListType( |
const SBFullHash& hash, |
- const std::vector<SBFullHashResult>& full_hashes) { |
+ const std::vector<SBFullHashResult>& full_hashes, |
+ size_t* index) { |
for (size_t i = 0; i < full_hashes.size(); ++i) { |
- if (SBFullHashEqual(hash, full_hashes[i].hash)) |
+ if (SBFullHashEqual(hash, full_hashes[i].hash)) { |
+ if (index) |
+ *index = i; |
return static_cast<safe_browsing_util::ListType>(full_hashes[i].list_id); |
+ } |
} |
return safe_browsing_util::INVALID; |
} |
@@ -85,7 +89,8 @@ safe_browsing_util::ListType GetHashThreatListType( |
// |full_hashes|, or INVALID if none match. |
safe_browsing_util::ListType GetUrlThreatListType( |
const GURL& url, |
- const std::vector<SBFullHashResult>& full_hashes) { |
+ const std::vector<SBFullHashResult>& full_hashes, |
+ size_t* index) { |
if (full_hashes.empty()) |
return safe_browsing_util::INVALID; |
@@ -93,8 +98,8 @@ safe_browsing_util::ListType GetUrlThreatListType( |
safe_browsing_util::GeneratePatternsToCheck(url, &patterns); |
for (size_t i = 0; i < patterns.size(); ++i) { |
- safe_browsing_util::ListType threat = |
- GetHashThreatListType(SBFullHashForString(patterns[i]), full_hashes); |
+ safe_browsing_util::ListType threat = GetHashThreatListType( |
+ SBFullHashForString(patterns[i]), full_hashes, index); |
if (threat != safe_browsing_util::INVALID) |
return threat; |
} |
@@ -123,14 +128,17 @@ SBThreatType GetThreatTypeFromListType(safe_browsing_util::ListType list_type) { |
SBThreatType SafeBrowsingDatabaseManager::GetHashThreatType( |
const SBFullHash& hash, |
const std::vector<SBFullHashResult>& full_hashes) { |
- return GetThreatTypeFromListType(GetHashThreatListType(hash, full_hashes)); |
+ return GetThreatTypeFromListType( |
+ GetHashThreatListType(hash, full_hashes, NULL)); |
} |
// static |
SBThreatType SafeBrowsingDatabaseManager::GetUrlThreatType( |
const GURL& url, |
- const std::vector<SBFullHashResult>& full_hashes) { |
- return GetThreatTypeFromListType(GetUrlThreatListType(url, full_hashes)); |
+ const std::vector<SBFullHashResult>& full_hashes, |
+ size_t* index) { |
+ return GetThreatTypeFromListType( |
+ GetUrlThreatListType(url, full_hashes, index)); |
} |
SafeBrowsingDatabaseManager::SafeBrowsingCheck::SafeBrowsingCheck( |
@@ -141,6 +149,7 @@ SafeBrowsingDatabaseManager::SafeBrowsingCheck::SafeBrowsingCheck( |
const std::vector<SBThreatType>& expected_threats) |
: urls(urls), |
url_results(urls.size(), SB_THREAT_TYPE_SAFE), |
+ url_metadata(urls.size()), |
full_hashes(full_hashes), |
full_hash_results(full_hashes.size(), SB_THREAT_TYPE_SAFE), |
client(client), |
@@ -163,7 +172,8 @@ void SafeBrowsingDatabaseManager::Client::OnSafeBrowsingResult( |
case safe_browsing_util::MALWARE: |
case safe_browsing_util::PHISH: |
DCHECK_EQ(1u, check.urls.size()); |
- OnCheckBrowseUrlResult(check.urls[0], check.url_results[0]); |
+ OnCheckBrowseUrlResult( |
+ check.urls[0], check.url_results[0], check.url_metadata[0]); |
break; |
case safe_browsing_util::BINURL: |
DCHECK_EQ(check.urls.size(), check.url_results.size()); |
@@ -942,10 +952,13 @@ bool SafeBrowsingDatabaseManager::HandleOneCheck( |
// interact well with batching the checks here. |
for (size_t i = 0; i < check->urls.size(); ++i) { |
- SBThreatType threat = GetUrlThreatType(check->urls[i], full_hashes); |
+ size_t threat_index; |
+ SBThreatType threat = |
+ GetUrlThreatType(check->urls[i], full_hashes, &threat_index); |
if (threat != SB_THREAT_TYPE_SAFE && |
IsExpectedThreat(threat, check->expected_threats)) { |
check->url_results[i] = threat; |
+ check->url_metadata[i] = full_hashes[threat_index].metadata; |
is_threat = true; |
} |
} |