Index: components/safe_browsing_db/v4_protocol_manager_util.cc |
diff --git a/components/safe_browsing_db/v4_protocol_manager_util.cc b/components/safe_browsing_db/v4_protocol_manager_util.cc |
index 64905a4bac9ece7dac719b696798d85fd58d8fdd..36e3064a8d5b34b4eb2311a52b3ac1c5329d85ef 100644 |
--- a/components/safe_browsing_db/v4_protocol_manager_util.cc |
+++ b/components/safe_browsing_db/v4_protocol_manager_util.cc |
@@ -68,32 +68,60 @@ std::ostream& operator<<(std::ostream& os, const UpdateListIdentifier& id) { |
return os; |
} |
+PlatformType GetCurrentPlatformType() { |
#if defined(OS_WIN) |
-#define PLATFORM_TYPE WINDOWS_PLATFORM |
+ return WINDOWS_PLATFORM; |
#elif defined(OS_LINUX) |
-#define PLATFORM_TYPE LINUX_PLATFORM |
+ return LINUX_PLATFORM; |
#elif defined(OS_MACOSX) |
-#define PLATFORM_TYPE OSX_PLATFORM |
+ return OSX_PLATFORM; |
#else |
// This should ideally never compile but it is getting compiled on Android. |
// See: https://bugs.chromium.org/p/chromium/issues/detail?id=621647 |
// TODO(vakh): Once that bug is fixed, this should be removed. If we leave |
// the platform_type empty, the server won't recognize the request and |
// return an error response which will pollute our UMA metrics. |
-#define PLATFORM_TYPE LINUX_PLATFORM |
+return LINUX_PLATFORM; |
#endif |
+} |
const UpdateListIdentifier GetUrlMalwareId() { |
- return UpdateListIdentifier(PLATFORM_TYPE, URL, MALWARE_THREAT); |
+ return UpdateListIdentifier(GetCurrentPlatformType(), URL, MALWARE_THREAT); |
} |
const UpdateListIdentifier GetUrlSocEngId() { |
- return UpdateListIdentifier(PLATFORM_TYPE, URL, SOCIAL_ENGINEERING_PUBLIC); |
+ return UpdateListIdentifier(GetCurrentPlatformType(), URL, |
+ SOCIAL_ENGINEERING_PUBLIC); |
+} |
+ |
+const UpdateListIdentifier GetChromeUrlApiId() { |
+ return UpdateListIdentifier(CHROME_PLATFORM, URL, API_ABUSE); |
} |
// The Safe Browsing V4 server URL prefix. |
const char kSbV4UrlPrefix[] = "https://safebrowsing.googleapis.com/v4"; |
+StoreAndHashPrefix::StoreAndHashPrefix(UpdateListIdentifier list_id, |
+ HashPrefix hash_prefix) |
+ : list_id(list_id), hash_prefix(hash_prefix) {} |
+ |
+StoreAndHashPrefix::~StoreAndHashPrefix() {} |
+ |
+bool StoreAndHashPrefix::operator==(const StoreAndHashPrefix& other) const { |
+ return list_id == other.list_id && hash_prefix == other.hash_prefix; |
+} |
+ |
+bool StoreAndHashPrefix::operator!=(const StoreAndHashPrefix& other) const { |
+ return !operator==(other); |
+} |
+ |
+size_t StoreAndHashPrefix::hash() const { |
+ std::size_t first = list_id.hash(); |
+ std::size_t second = std::hash<std::string>()(hash_prefix); |
+ |
+ return base::HashInts(first, second); |
+} |
+ |
bool UpdateListIdentifier::operator==(const UpdateListIdentifier& other) const { |
return platform_type == other.platform_type && |
threat_entry_type == other.threat_entry_type && |
@@ -230,6 +258,31 @@ void V4ProtocolManagerUtil::UrlToFullHashes( |
} |
// static |
+bool V4ProtocolManagerUtil::FullHashToHashPrefix(const FullHash& full_hash, |
+ PrefixSize prefix_size, |
+ HashPrefix* hash_prefix) { |
+ if (full_hash.size() < prefix_size) { |
+ return false; |
+ } |
+ *hash_prefix = full_hash.substr(prefix_size); |
+ return true; |
+} |
+ |
+// static |
+bool V4ProtocolManagerUtil::FullHashToSmallestHashPrefix( |
+ const FullHash& full_hash, |
+ HashPrefix* hash_prefix) { |
+ return FullHashToHashPrefix(full_hash, kMinHashPrefixLength, hash_prefix); |
+} |
+ |
+// static |
+bool V4ProtocolManagerUtil::FullHashMatchesHashPrefix( |
+ const FullHash& full_hash, |
+ const HashPrefix& hash_prefix) { |
+ return full_hash.compare(0, hash_prefix.length(), hash_prefix) == 0; |
+} |
+ |
+// static |
void V4ProtocolManagerUtil::GenerateHostsToCheck( |
const GURL& url, |
std::vector<std::string>* hosts) { |