Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Unified Diff: components/safe_browsing_db/v4_protocol_manager_util.h

Issue 2233103002: Move full hash caching logic to v4_get_hash_protocol_manager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove more tests from db_manager. Simplify another test. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/safe_browsing_db/v4_protocol_manager_util.h
diff --git a/components/safe_browsing_db/v4_protocol_manager_util.h b/components/safe_browsing_db/v4_protocol_manager_util.h
index 467f60418d58946d4d484ecb5d542f2cca6a91a2..67943cc0eb737f91627815fbb38736810ca2f307 100644
--- a/components/safe_browsing_db/v4_protocol_manager_util.h
+++ b/components/safe_browsing_db/v4_protocol_manager_util.h
@@ -24,6 +24,17 @@ class HttpRequestHeaders;
namespace safe_browsing {
+// The size of the hash prefix, in bytes. It should be between 4 to 32 (full
+// hash).
+typedef size_t PrefixSize;
+
+// The minimum expected size (in bytes) of a hash-prefix.
+const PrefixSize kMinHashPrefixLength = 4;
+
+// The maximum expected size (in bytes) of a hash-prefix. This represents the
+// length of a SHA256 hash.
+const PrefixSize kMaxHashPrefixLength = 32;
+
// A hash prefix sent by the SafeBrowsing PVer4 service.
typedef std::string HashPrefix;
@@ -77,17 +88,10 @@ struct UpdateListIdentifier {
std::ostream& operator<<(std::ostream& os, const UpdateListIdentifier& id);
+PlatformType GetCurrentPlatformType();
const UpdateListIdentifier GetUrlMalwareId();
const UpdateListIdentifier GetUrlSocEngId();
-
-// The set of interesting lists and ASCII filenames for their hash prefix
-// stores. The stores are created inside the user-data directory.
-// For instance, the UpdateListIdentifier could be for URL expressions for UwS
-// on Windows platform, and the corresponding file on disk could be named:
-// "uws_win_url.store"
-// TODO(vakh): Find the canonical place where these are defined and update the
-// comment to point to that place.
-typedef base::hash_map<UpdateListIdentifier, std::string> StoreFileNameMap;
+const UpdateListIdentifier GetChromeUrlApiId();
// Represents the state of each store.
typedef base::hash_map<UpdateListIdentifier, std::string> StoreStateMap;
@@ -95,6 +99,28 @@ typedef base::hash_map<UpdateListIdentifier, std::string> StoreStateMap;
// Sever response, parsed in vector form.
typedef std::vector<std::unique_ptr<ListUpdateResponse>> ParsedServerResponse;
+// TODO(vakh): Consider using a std::pair for this.
+// Holds the hash prefix and the store that it matched in.
+struct StoreAndHashPrefix {
+ public:
+ UpdateListIdentifier list_id;
+ HashPrefix hash_prefix;
+
+ explicit StoreAndHashPrefix(UpdateListIdentifier, HashPrefix);
+ ~StoreAndHashPrefix();
+
+ bool operator==(const StoreAndHashPrefix& other) const;
+ bool operator!=(const StoreAndHashPrefix& other) const;
+ size_t hash() const;
+
+ private:
+ StoreAndHashPrefix();
+};
+
+// Used to track the hash prefix and the store in which a full hash's prefix
+// matched.
+typedef std::vector<StoreAndHashPrefix> StoreAndHashPrefixes;
+
// Enumerate failures for histogramming purposes. DO NOT CHANGE THE
// ORDERING OF THESE VALUES.
enum V4OperationResult {
@@ -183,6 +209,16 @@ class V4ProtocolManagerUtil {
static void UrlToFullHashes(const GURL& url,
base::hash_set<FullHash>* full_hashes);
+ static bool FullHashToHashPrefix(const FullHash& full_hash,
+ PrefixSize prefix_size,
+ HashPrefix* hash_prefix);
+
+ static bool FullHashToSmallestHashPrefix(const FullHash& full_hash,
+ HashPrefix* hash_prefix);
+
+ static bool FullHashMatchesHashPrefix(const FullHash& full_hash,
+ const HashPrefix& hash_prefix);
+
private:
V4ProtocolManagerUtil(){};
FRIEND_TEST_ALL_PREFIXES(V4ProtocolManagerUtilTest, TestBackOffLogic);
@@ -221,9 +257,30 @@ class V4ProtocolManagerUtil {
namespace std {
template <>
+struct hash<safe_browsing::PlatformType> {
+ std::size_t operator()(const safe_browsing::PlatformType& p) const {
+ return std::hash<unsigned int>()(p);
+ }
+};
+
+template <>
+struct hash<safe_browsing::ThreatEntryType> {
+ std::size_t operator()(const safe_browsing::ThreatEntryType& tet) const {
+ return std::hash<unsigned int>()(tet);
+ }
+};
+
+template <>
+struct hash<safe_browsing::ThreatType> {
+ std::size_t operator()(const safe_browsing::ThreatType& tt) const {
+ return std::hash<unsigned int>()(tt);
+ }
+};
+
+template <>
struct hash<safe_browsing::UpdateListIdentifier> {
- std::size_t operator()(const safe_browsing::UpdateListIdentifier& s) const {
- return s.hash();
+ std::size_t operator()(const safe_browsing::UpdateListIdentifier& id) const {
+ return id.hash();
}
};
}

Powered by Google App Engine
This is Rietveld 408576698