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

Unified Diff: chrome/browser/safe_browsing/safe_browsing_database.cc

Issue 6711044: Remove std::set from PrefixSet checking code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 918644073cf3e689e34be7ea557edabe9245bdc7..c54d38fa62353d3ecdf3eebb32ce695f2cebdace 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_database.cc
@@ -228,27 +228,42 @@ void RecordPrefixSetInfo(PrefixSetEvent event_type) {
PREFIX_SET_EVENT_MAX);
}
-// Verify that |GetPrefixes()| returns the same set of prefixes as
-// |prefixes|. This is necessary so that the
+// Generate a |PrefixSet| instance from the contents of
+// |add_prefixes|. Additionally performs various checks to make sure
+// that the resulting prefix set is valid, so that the
// PREFIX_SET_EVENT_BLOOM_MISS_PREFIX_HIT_INVALID histogram in
// ContainsBrowseUrl() can be trustworthy.
-void CheckPrefixSet(const safe_browsing::PrefixSet& prefix_set,
- const std::vector<SBPrefix>& prefixes) {
- std::vector<SBPrefix> restored;
- prefix_set.GetPrefixes(&restored);
+safe_browsing::PrefixSet* PrefixSetFromAddPrefixes(
+ const std::vector<SBAddPrefix>& add_prefixes) {
+ // TODO(shess): If |add_prefixes| were sorted by the prefix, it
+ // could be passed directly to |PrefixSet()|, removing the need for
+ // |prefixes|. For now, |prefixes| is useful while debugging
+ // things.
+ std::vector<SBPrefix> prefixes;
+ for (size_t i = 0; i < add_prefixes.size(); ++i) {
+ prefixes.push_back(add_prefixes[i].prefix);
+ }
- const std::set<SBPrefix> unique(prefixes.begin(), prefixes.end());
+ std::sort(prefixes.begin(), prefixes.end());
+ prefixes.erase(std::unique(prefixes.begin(), prefixes.end()),
+ prefixes.end());
+
+ scoped_ptr<safe_browsing::PrefixSet>
+ prefix_set(new safe_browsing::PrefixSet(prefixes));
+
+ std::vector<SBPrefix> restored;
+ prefix_set->GetPrefixes(&restored);
// Expect them to be equal.
- if (restored.size() == unique.size() &&
- std::equal(unique.begin(), unique.end(), restored.begin()))
- return;
+ if (restored.size() == prefixes.size() &&
+ std::equal(prefixes.begin(), prefixes.end(), restored.begin()))
+ return prefix_set.release();
// Log BROKEN for continuity with previous release, and SIZE to
// distinguish which test failed.
NOTREACHED();
RecordPrefixSetInfo(PREFIX_SET_GETPREFIXES_BROKEN);
- if (restored.size() != unique.size())
+ if (restored.size() != prefixes.size())
RecordPrefixSetInfo(PREFIX_SET_GETPREFIXES_BROKEN_SIZE);
// Try to distinguish between updates from one broken user and a
@@ -263,6 +278,8 @@ void CheckPrefixSet(const safe_browsing::PrefixSet& prefix_set,
// it could explain why GetPrefixes() seemed broken.
if (sizeof(int) != sizeof(int32))
RecordPrefixSetInfo(PREFIX_SET_SBPREFIX_WAS_BROKEN);
+
+ return prefix_set.release();
}
} // namespace
@@ -1005,15 +1022,8 @@ void SafeBrowsingDatabaseNew::UpdateBrowseStore() {
filter->Insert(add_prefixes[i].prefix);
}
- std::vector<SBPrefix> prefixes;
- for (size_t i = 0; i < add_prefixes.size(); ++i) {
- prefixes.push_back(add_prefixes[i].prefix);
- }
- std::sort(prefixes.begin(), prefixes.end());
scoped_ptr<safe_browsing::PrefixSet>
- prefix_set(new safe_browsing::PrefixSet(prefixes));
-
- CheckPrefixSet(*(prefix_set.get()), prefixes);
+ prefix_set(PrefixSetFromAddPrefixes(add_prefixes));
// This needs to be in sorted order by prefix for efficient access.
std::sort(add_full_hashes.begin(), add_full_hashes.end(),
@@ -1121,13 +1131,7 @@ void SafeBrowsingDatabaseNew::LoadBloomFilter() {
// TODO(shess): Write/read for prefix set.
std::vector<SBAddPrefix> add_prefixes;
browse_store_->GetAddPrefixes(&add_prefixes);
- std::vector<SBPrefix> prefixes;
- for (size_t i = 0; i < add_prefixes.size(); ++i) {
- prefixes.push_back(add_prefixes[i].prefix);
- }
- std::sort(prefixes.begin(), prefixes.end());
- prefix_set_.reset(new safe_browsing::PrefixSet(prefixes));
- CheckPrefixSet(*(prefix_set_.get()), prefixes);
+ prefix_set_.reset(PrefixSetFromAddPrefixes(add_prefixes));
}
bool SafeBrowsingDatabaseNew::Delete() {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698