Chromium Code Reviews| Index: components/safe_browsing_db/database_manager.cc |
| diff --git a/components/safe_browsing_db/database_manager.cc b/components/safe_browsing_db/database_manager.cc |
| index b3bb2a6d24aa846bb91c2df250021a5991e60edd..d8f8512ed4f1b337d2928d63753d3af8cdcc8f1f 100644 |
| --- a/components/safe_browsing_db/database_manager.cc |
| +++ b/components/safe_browsing_db/database_manager.cc |
| @@ -14,23 +14,6 @@ using content::BrowserThread; |
| namespace { |
| -// Enumerate full hash cache hits/misses for histogramming purposes. |
| -// DO NOT CHANGE THE ORDERING OF THESE VALUES. |
| -enum V4FullHashCacheResultType { |
| - // Full hashes for which there is no cache hit. |
| - FULL_HASH_CACHE_MISS = 0, |
| - |
| - // Full hashes with a cache hit. |
| - FULL_HASH_CACHE_HIT = 1, |
| - |
| - // Full hashes with a negative cache hit. |
| - FULL_HASH_NEGATIVE_CACHE_HIT = 2, |
| - |
| - // Memory space for histograms is determined by the max. ALWAYS |
| - // ADD NEW VALUES BEFORE THIS ONE. |
| - FULL_HASH_CACHE_RESULT_MAX |
| -}; |
| - |
| // Enumerate GetHash hits/misses for histogramming purposes. DO NOT CHANGE THE |
| // ORDERING OF THESE VALUES. |
| enum V4GetHashCheckResultType { |
| @@ -48,13 +31,6 @@ enum V4GetHashCheckResultType { |
| GET_HASH_CHECK_RESULT_MAX |
| }; |
| -// Record a full hash cache hit result. |
| -void RecordV4FullHashCacheResult( |
| - V4FullHashCacheResultType result_type) { |
| - UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.V4FullHashCacheResult", result_type, |
| - FULL_HASH_CACHE_RESULT_MAX); |
| -} |
| - |
| // Record a GetHash hit result. |
| void RecordV4GetHashCheckResult( |
| V4GetHashCheckResultType result_type) { |
| @@ -154,7 +130,7 @@ bool SafeBrowsingDatabaseManager::CheckApiBlacklistUrl(const GURL& url, |
| std::vector<SBFullHashResult> cached_results; |
| std::vector<SBPrefix> prefixes_needing_reqs; |
| - GetFullHashCachedResults(SB_THREAT_TYPE_API_ABUSE, |
| + v4_get_hash_protocol_manager_->GetFullHashCachedResults(SB_THREAT_TYPE_API_ABUSE, |
|
Nathan Parker
2016/08/15 19:54:47
How about moving all of this code into v4_get_hash
|
| full_hashes, now, &prefixes_needing_reqs, &cached_results); |
| if (prefixes_needing_reqs.empty() && cached_results.empty()) |
| @@ -182,107 +158,6 @@ bool SafeBrowsingDatabaseManager::CheckApiBlacklistUrl(const GURL& url, |
| return false; |
| } |
| -void SafeBrowsingDatabaseManager::GetFullHashCachedResults( |
| - const SBThreatType& threat_type, |
| - const std::vector<SBFullHash>& full_hashes, |
| - base::Time now, |
| - std::vector<SBPrefix>* prefixes_needing_reqs, |
| - std::vector<SBFullHashResult>* cached_results) { |
| - DCHECK(prefixes_needing_reqs); |
| - prefixes_needing_reqs->clear(); |
| - DCHECK(cached_results); |
| - cached_results->clear(); |
| - |
| - // Caching behavior is documented here: |
| - // https://developers.google.com/safe-browsing/v4/caching#about-caching |
| - // |
| - // The cache operates as follows: |
| - // Lookup: |
| - // Case 1: The prefix is in the cache. |
| - // Case a: The full hash is in the cache. |
| - // Case i : The positive full hash result has not expired. |
| - // The result is unsafe and we do not need to send a new |
| - // request. |
| - // Case ii: The positive full hash result has expired. |
| - // We need to send a request for full hashes. |
| - // Case b: The full hash is not in the cache. |
| - // Case i : The negative cache entry has not expired. |
| - // The result is still safe and we do not need to send a |
| - // new request. |
| - // Case ii: The negative cache entry has expired. |
| - // We need to send a request for full hashes. |
| - // Case 2: The prefix is not in the cache. |
| - // We need to send a request for full hashes. |
| - // |
| - // Eviction: |
| - // SBCachedFullHashResult entries can be removed from the cache only when |
| - // the negative cache expire time and the cache expire time of all full |
| - // hash results for that prefix have expired. |
| - // Individual full hash results can be removed from the prefix's |
| - // cache entry if they expire AND their expire time is after the negative |
| - // cache expire time. |
| - for (const SBFullHash& full_hash : full_hashes) { |
| - auto entry = v4_full_hash_cache_[threat_type].find(full_hash.prefix); |
| - if (entry != v4_full_hash_cache_[threat_type].end()) { |
| - // Case 1. |
| - SBCachedFullHashResult& cache_result = entry->second; |
| - |
| - const SBFullHashResult* found_full_hash = nullptr; |
| - size_t matched_idx = 0; |
| - for (const SBFullHashResult& hash_result : cache_result.full_hashes) { |
| - if (SBFullHashEqual(full_hash, hash_result.hash)) { |
| - found_full_hash = &hash_result; |
| - break; |
| - } |
| - ++matched_idx; |
| - } |
| - |
| - if (found_full_hash) { |
| - // Case a. |
| - if (found_full_hash->cache_expire_after > now) { |
| - // Case i. |
| - cached_results->push_back(*found_full_hash); |
| - RecordV4FullHashCacheResult(FULL_HASH_CACHE_HIT); |
| - } else { |
| - // Case ii. |
| - prefixes_needing_reqs->push_back(full_hash.prefix); |
| - RecordV4FullHashCacheResult(FULL_HASH_CACHE_MISS); |
| - // If the negative cache expire time has passed, evict this full hash |
| - // result from the cache. |
| - if (cache_result.expire_after <= now) { |
| - cache_result.full_hashes.erase( |
| - cache_result.full_hashes.begin() + matched_idx); |
| - // If there are no more full hashes, we can evict the entire entry. |
| - if (cache_result.full_hashes.empty()) { |
| - v4_full_hash_cache_[threat_type].erase(entry); |
| - } |
| - } |
| - } |
| - } else { |
| - // Case b. |
| - if (cache_result.expire_after > now) { |
| - // Case i. |
| - RecordV4FullHashCacheResult(FULL_HASH_NEGATIVE_CACHE_HIT); |
| - } else { |
| - // Case ii. |
| - prefixes_needing_reqs->push_back(full_hash.prefix); |
| - RecordV4FullHashCacheResult(FULL_HASH_CACHE_MISS); |
| - } |
| - } |
| - } else { |
| - // Case 2. |
| - prefixes_needing_reqs->push_back(full_hash.prefix); |
| - RecordV4FullHashCacheResult(FULL_HASH_CACHE_MISS); |
| - } |
| - } |
| - |
| - // Multiple full hashes could share a prefix, remove duplicates. |
| - // TODO(kcarattini): Make |prefixes_needing_reqs| a set. |
| - std::sort(prefixes_needing_reqs->begin(), prefixes_needing_reqs->end()); |
| - prefixes_needing_reqs->erase(std::unique(prefixes_needing_reqs->begin(), |
| - prefixes_needing_reqs->end()), prefixes_needing_reqs->end()); |
| -} |
| - |
| void SafeBrowsingDatabaseManager::HandleGetHashesWithApisResults( |
| SafeBrowsingApiCheck* check, |
| const std::vector<SBFullHashResult>& full_hash_results, |
| @@ -296,22 +171,6 @@ void SafeBrowsingDatabaseManager::HandleGetHashesWithApisResults( |
| base::TimeTicks::Now() - check->start_time()); |
| } |
| - // If the time is uninitialized, don't cache the results. |
| - if (!negative_cache_expire.is_null()) { |
| - // Cache the results. |
| - // Create or reset all cached results for this prefix. |
| - for (const SBPrefix& prefix : check->prefixes()) { |
| - v4_full_hash_cache_[SB_THREAT_TYPE_API_ABUSE][prefix] = |
| - SBCachedFullHashResult(negative_cache_expire); |
| - } |
| - // Insert any full hash hits. Note that there may be one, multiple, or no |
| - // full hashes for any given prefix. |
| - for (const SBFullHashResult& result : full_hash_results) { |
| - v4_full_hash_cache_[SB_THREAT_TYPE_API_ABUSE][result.hash.prefix]. |
| - full_hashes.push_back(result); |
| - } |
| - } |
| - |
| // If the check is not in |api_checks_| then the request was cancelled by the |
| // client. |
| ApiCheckSet::iterator it = api_checks_.find(check); |