Index: chrome/browser/safe_browsing/safe_browsing_database.cc |
diff --git a/chrome/browser/safe_browsing/safe_browsing_database.cc b/chrome/browser/safe_browsing/safe_browsing_database.cc |
index d42be776372ba112b07aacb996661ce92e064e45..8b391fd9f5d4c88d91c881e99a6baf48c68291f4 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_database.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_database.cc |
@@ -264,6 +264,9 @@ void GetChunkRanges(const std::vector<int>& chunks, |
void UpdateChunkRanges(SafeBrowsingStore* store, |
const std::vector<std::string>& listnames, |
std::vector<SBListChunkRanges>* lists) { |
+ if (!store) |
+ return; |
+ |
DCHECK_GT(listnames.size(), 0U); |
DCHECK_LE(listnames.size(), 2U); |
std::vector<int> add_chunks; |
@@ -291,33 +294,20 @@ void UpdateChunkRanges(SafeBrowsingStore* store, |
} |
} |
-// Helper for deleting chunks left over from obsolete lists. |
-void DeleteChunksFromStore(SafeBrowsingStore* store, int listid){ |
- std::vector<int> add_chunks; |
- size_t adds_deleted = 0; |
- store->GetAddChunks(&add_chunks); |
- for (std::vector<int>::const_iterator iter = add_chunks.begin(); |
- iter != add_chunks.end(); ++iter) { |
- if (GetListIdBit(*iter) == GetListIdBit(listid)) { |
- adds_deleted++; |
- store->DeleteAddChunk(*iter); |
- } |
- } |
- if (adds_deleted > 0) |
- UMA_HISTOGRAM_COUNTS("SB2.DownloadBinhashAddsDeleted", adds_deleted); |
+void UpdateChunkRangesForLists(SafeBrowsingStore* store, |
+ const std::string& listname0, |
+ const std::string& listname1, |
+ std::vector<SBListChunkRanges>* lists) { |
+ std::vector<std::string> listnames; |
+ listnames.push_back(listname0); |
+ listnames.push_back(listname1); |
+ UpdateChunkRanges(store, listnames, lists); |
+} |
- std::vector<int> sub_chunks; |
- size_t subs_deleted = 0; |
- store->GetSubChunks(&sub_chunks); |
- for (std::vector<int>::const_iterator iter = sub_chunks.begin(); |
- iter != sub_chunks.end(); ++iter) { |
- if (GetListIdBit(*iter) == GetListIdBit(listid)) { |
- subs_deleted++; |
- store->DeleteSubChunk(*iter); |
- } |
- } |
- if (subs_deleted > 0) |
- UMA_HISTOGRAM_COUNTS("SB2.DownloadBinhashSubsDeleted", subs_deleted); |
+void UpdateChunkRangesForList(SafeBrowsingStore* store, |
+ const std::string& listname, |
+ std::vector<SBListChunkRanges>* lists) { |
+ UpdateChunkRanges(store, std::vector<std::string>(1, listname), lists); |
} |
// Order |SBAddFullHash| on the prefix part. |SBAddPrefixLess()| from |
@@ -450,8 +440,7 @@ SafeBrowsingStore* SafeBrowsingDatabaseNew::GetStore(const int list_id) { |
if (list_id == safe_browsing_util::PHISH || |
list_id == safe_browsing_util::MALWARE) { |
return browse_store_.get(); |
- } else if (list_id == safe_browsing_util::BINURL || |
- list_id == safe_browsing_util::BINHASH) { |
+ } else if (list_id == safe_browsing_util::BINURL) { |
return download_store_.get(); |
} else if (list_id == safe_browsing_util::CSDWHITELIST) { |
return csd_whitelist_store_.get(); |
@@ -747,21 +736,6 @@ bool SafeBrowsingDatabaseNew::ContainsDownloadUrl( |
prefix_hits); |
} |
-bool SafeBrowsingDatabaseNew::ContainsDownloadHashPrefix( |
- const SBPrefix& prefix) { |
- DCHECK_EQ(creation_loop_, base::MessageLoop::current()); |
- |
- // Ignore this check when download store is not available. |
- if (!download_store_.get()) |
- return false; |
- |
- std::vector<SBPrefix> prefix_hits; |
- return MatchAddPrefixes(download_store_.get(), |
- safe_browsing_util::BINHASH % 2, |
- std::vector<SBPrefix>(1, prefix), |
- &prefix_hits); |
-} |
- |
bool SafeBrowsingDatabaseNew::ContainsCsdWhitelistedUrl(const GURL& url) { |
// This method is theoretically thread-safe but we expect all calls to |
// originate from the IO thread. |
@@ -1163,75 +1137,32 @@ bool SafeBrowsingDatabaseNew::UpdateStarted( |
return false; |
} |
- std::vector<std::string> browse_listnames; |
- browse_listnames.push_back(safe_browsing_util::kMalwareList); |
- browse_listnames.push_back(safe_browsing_util::kPhishingList); |
- UpdateChunkRanges(browse_store_.get(), browse_listnames, lists); |
+ UpdateChunkRangesForLists(browse_store_.get(), |
+ safe_browsing_util::kMalwareList, |
+ safe_browsing_util::kPhishingList, |
+ lists); |
- if (download_store_.get()) { |
- // This store used to contain kBinHashList in addition to |
- // kBinUrlList. Strip the stale data before generating the chunk |
- // ranges to request. UpdateChunkRanges() will traverse the chunk |
- // list, so this is very cheap if there are no kBinHashList chunks. |
- const int listid = |
- safe_browsing_util::GetListId(safe_browsing_util::kBinHashList); |
- DeleteChunksFromStore(download_store_.get(), listid); |
- |
- // The above marks the chunks for deletion, but they are not |
- // actually deleted until the database is rewritten. The |
- // following code removes the kBinHashList part of the request |
- // before continuing so that UpdateChunkRanges() doesn't break. |
- std::vector<std::string> download_listnames; |
- download_listnames.push_back(safe_browsing_util::kBinUrlList); |
- download_listnames.push_back(safe_browsing_util::kBinHashList); |
- UpdateChunkRanges(download_store_.get(), download_listnames, lists); |
- DCHECK_EQ(lists->back().name, |
- std::string(safe_browsing_util::kBinHashList)); |
- lists->pop_back(); |
- |
- // TODO(shess): This problem could also be handled in |
- // BeginUpdate() by detecting the chunks to delete and rewriting |
- // the database before it's used. When I implemented that, it |
- // felt brittle, it might be easier to just wait for some future |
- // format change. |
- } |
+ // NOTE(shess): |download_store_| used to contain kBinHashList, which has been |
+ // deprecated. Code to delete the list from the store shows ~15k hits/day as |
+ // of Feb 2014, so it has been removed. Everything _should_ be resilient to |
+ // extra data of that sort. |
+ UpdateChunkRangesForList(download_store_.get(), |
+ safe_browsing_util::kBinUrlList, lists); |
- if (csd_whitelist_store_.get()) { |
- std::vector<std::string> csd_whitelist_listnames; |
- csd_whitelist_listnames.push_back(safe_browsing_util::kCsdWhiteList); |
- UpdateChunkRanges(csd_whitelist_store_.get(), |
- csd_whitelist_listnames, lists); |
- } |
+ UpdateChunkRangesForList(csd_whitelist_store_.get(), |
+ safe_browsing_util::kCsdWhiteList, lists); |
- if (download_whitelist_store_.get()) { |
- std::vector<std::string> download_whitelist_listnames; |
- download_whitelist_listnames.push_back( |
- safe_browsing_util::kDownloadWhiteList); |
- UpdateChunkRanges(download_whitelist_store_.get(), |
- download_whitelist_listnames, lists); |
- } |
+ UpdateChunkRangesForList(download_whitelist_store_.get(), |
+ safe_browsing_util::kDownloadWhiteList, lists); |
- if (extension_blacklist_store_) { |
- UpdateChunkRanges( |
- extension_blacklist_store_.get(), |
- std::vector<std::string>(1, safe_browsing_util::kExtensionBlacklist), |
- lists); |
- } |
+ UpdateChunkRangesForList(extension_blacklist_store_.get(), |
+ safe_browsing_util::kExtensionBlacklist, lists); |
- if (side_effect_free_whitelist_store_) { |
- UpdateChunkRanges( |
- side_effect_free_whitelist_store_.get(), |
- std::vector<std::string>( |
- 1, safe_browsing_util::kSideEffectFreeWhitelist), |
- lists); |
- } |
+ UpdateChunkRangesForList(side_effect_free_whitelist_store_.get(), |
+ safe_browsing_util::kSideEffectFreeWhitelist, lists); |
- if (ip_blacklist_store_) { |
- UpdateChunkRanges( |
- ip_blacklist_store_.get(), |
- std::vector<std::string>(1, safe_browsing_util::kIPBlacklist), |
- lists); |
- } |
+ UpdateChunkRangesForList(ip_blacklist_store_.get(), |
+ safe_browsing_util::kIPBlacklist, lists); |
corruption_detected_ = false; |
change_detected_ = false; |