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

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

Issue 11196036: Finish conversion from bloom filter to prefix set in safe browsing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Delete the unnecessary unit test. Created 8 years, 2 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: 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 723743804413d7e4f602d87d8ee2e50c502ae1ff..c9ab8bddb9d33af149f061ef57666ef1429bc3a5 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_database.cc
@@ -14,7 +14,6 @@
#include "base/metrics/stats_counters.h"
#include "base/process_util.h"
#include "base/time.h"
-#include "chrome/browser/safe_browsing/bloom_filter.h"
#include "chrome/browser/safe_browsing/prefix_set.h"
#include "chrome/browser/safe_browsing/safe_browsing_store_file.h"
#include "content/public/browser/browser_thread.h"
@@ -264,22 +263,6 @@ bool SBAddFullHashPrefixLess(const SBAddFullHash& a, const SBAddFullHash& b) {
return a.full_hash.prefix < b.full_hash.prefix;
}
-// Track what LoadBloomFilterOrPrefixSet() loaded.
-enum FilterLoad {
- FILTER_LOAD, // All calls.
- FILTER_LOADED_PREFIX_SET, // Cases loaded from prefix set.
- FILTER_LOADED_BLOOM_FILTER, // Cases loaded from bloom filter.
-
- // Memory space for histograms is determined by the max. ALWAYS ADD
- // NEW VALUES BEFORE THIS ONE.
- FILTER_LOAD_MAX
-};
-
-void RecordFilterLoad(FilterLoad event_type) {
- UMA_HISTOGRAM_ENUMERATION("SB2.FilterLoad", event_type,
- FILTER_LOAD_MAX);
-}
-
// This code always checks for non-zero file size. This helper makes
// that less verbose.
int64 GetFileSizeOrZero(const FilePath& file_path) {
@@ -431,7 +414,6 @@ void SafeBrowsingDatabaseNew::Init(const FilePath& filename_base) {
DCHECK(download_whitelist_filename_.empty());
browse_filename_ = BrowseDBFilename(filename_base);
- bloom_filter_filename_ = BloomFilterForFilename(browse_filename_);
prefix_set_filename_ = PrefixSetForFilename(browse_filename_);
browse_store_->Init(
@@ -448,7 +430,7 @@ void SafeBrowsingDatabaseNew::Init(const FilePath& filename_base) {
base::AutoLock locked(lookup_lock_);
full_browse_hashes_.clear();
pending_browse_hashes_.clear();
- LoadBloomFilterOrPrefixSet();
+ LoadPrefixSet();
}
if (download_store_.get()) {
@@ -511,7 +493,6 @@ bool SafeBrowsingDatabaseNew::ResetDatabase() {
full_browse_hashes_.clear();
pending_browse_hashes_.clear();
prefix_miss_cache_.clear();
- browse_bloom_filter_ = NULL;
prefix_set_.reset();
}
// Wants to acquire the lock itself.
@@ -542,18 +523,16 @@ bool SafeBrowsingDatabaseNew::ContainsBrowseUrl(
// filter and caches.
base::AutoLock locked(lookup_lock_);
- // TODO(shess): During transition, users will have a bloom filter
- // but no prefix set until first update, after which they'll have a
- // prefix set but no bloom filter.
- const bool use_prefix_set = prefix_set_.get() != NULL;
- if (!use_prefix_set && !browse_bloom_filter_.get())
+ // |prefix_set_| is empty until it is either read from disk, or the
+ // first update populates it. Bail out without a hit if not yet
+ // available.
+ if (!prefix_set_.get())
return false;
size_t miss_count = 0;
for (size_t i = 0; i < full_hashes.size(); ++i) {
const SBPrefix prefix = full_hashes[i].prefix;
- if ((use_prefix_set && prefix_set_->Exists(prefix)) ||
- (!use_prefix_set && browse_bloom_filter_->Exists(prefix))) {
+ if (prefix_set_->Exists(prefix)) {
prefix_hits->push_back(prefix);
if (prefix_miss_cache_.count(prefix) > 0)
++miss_count;
@@ -1012,7 +991,7 @@ void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) {
return;
// Unroll the transaction if there was a protocol error or if the
- // transaction was empty. This will leave the bloom filter, the
+ // transaction was empty. This will leave the prefix set, the
// pending hashes, and the prefix miss cache in place.
if (!update_succeeded || !change_detected_) {
// Track empty updates to answer questions at http://crbug.com/72216 .
@@ -1172,7 +1151,6 @@ void SafeBrowsingDatabaseNew::UpdateBrowseStore() {
// hash will be fetched again).
pending_browse_hashes_.clear();
prefix_miss_cache_.clear();
- browse_bloom_filter_ = NULL; // Stop using the bloom filter.
prefix_set_.swap(prefix_set);
}
@@ -1233,11 +1211,8 @@ void SafeBrowsingDatabaseNew::OnHandleCorruptDatabase() {
// TODO(shess): I'm not clear why this code doesn't have any
// real error-handling.
-// TODO(shess): After a transition period, this can convert to just
-// giving up if the prefix set is not on disk.
-void SafeBrowsingDatabaseNew::LoadBloomFilterOrPrefixSet() {
+void SafeBrowsingDatabaseNew::LoadPrefixSet() {
DCHECK_EQ(creation_loop_, MessageLoop::current());
- DCHECK(!bloom_filter_filename_.empty());
DCHECK(!prefix_set_filename_.empty());
// If there is no database, the filter cannot be used.
@@ -1245,47 +1220,10 @@ void SafeBrowsingDatabaseNew::LoadBloomFilterOrPrefixSet() {
if (!file_util::GetFileInfo(browse_filename_, &db_info) || db_info.size == 0)
return;
- RecordFilterLoad(FILTER_LOAD);
-
- // If there is no prefix set, or if the file is too old, check for a
- // bloom filter.
- // TODO(shess): The time check is in case this code gets reverted
- // and re-landed. It might be good to keep as a sanity check.
- // Better would be to put the db's checksum in the filter file.
- base::PlatformFileInfo prefix_set_info;
- if (!file_util::GetFileInfo(prefix_set_filename_, &prefix_set_info) ||
- prefix_set_info.size == 0 ||
- prefix_set_info.last_modified < db_info.last_modified) {
- // No prefix set.
- prefix_set_.reset();
-
- int64 file_size = GetFileSizeOrZero(bloom_filter_filename_);
- if (!file_size) {
- RecordFailure(FAILURE_DATABASE_FILTER_MISSING);
- return;
- }
-
- const base::TimeTicks before = base::TimeTicks::Now();
- browse_bloom_filter_ = BloomFilter::LoadFile(bloom_filter_filename_);
- DVLOG(1) << "SafeBrowsingDatabaseNew read bloom filter in "
- << (base::TimeTicks::Now() - before).InMilliseconds() << " ms";
- UMA_HISTOGRAM_TIMES("SB2.BloomFilterLoad", base::TimeTicks::Now() - before);
-
- if (!browse_bloom_filter_.get())
- RecordFailure(FAILURE_DATABASE_FILTER_READ);
- else
- RecordFilterLoad(FILTER_LOADED_BLOOM_FILTER);
-
- return;
- }
-
- // Once there is a prefix set stored, never use the bloom filter.
- browse_bloom_filter_ = NULL;
-
- // TODO(shess): The bloom filter file should have been deleted in
- // WritePrefixSet(), unless this code is reverted and re-landed.
- // Just paranoid.
- file_util::Delete(bloom_filter_filename_, false);
+ // Cleanup any stale bloom filter (no longer used).
+ // TODO(shess): Track failure to delete?
+ FilePath bloom_filter_filename = BloomFilterForFilename(browse_filename_);
+ file_util::Delete(bloom_filter_filename, false);
const base::TimeTicks before = base::TimeTicks::Now();
prefix_set_.reset(safe_browsing::PrefixSet::LoadFile(prefix_set_filename_));
@@ -1295,8 +1233,6 @@ void SafeBrowsingDatabaseNew::LoadBloomFilterOrPrefixSet() {
if (!prefix_set_.get())
RecordFailure(FAILURE_DATABASE_PREFIX_SET_READ);
- else
- RecordFilterLoad(FILTER_LOADED_PREFIX_SET);
}
bool SafeBrowsingDatabaseNew::Delete() {
@@ -1320,7 +1256,8 @@ bool SafeBrowsingDatabaseNew::Delete() {
if (!r4)
RecordFailure(FAILURE_DATABASE_STORE_DELETE);
- const bool r5 = file_util::Delete(bloom_filter_filename_, false);
+ FilePath bloom_filter_filename = BloomFilterForFilename(browse_filename_);
+ const bool r5 = file_util::Delete(bloom_filter_filename, false);
if (!r5)
RecordFailure(FAILURE_DATABASE_FILTER_DELETE);
@@ -1345,10 +1282,6 @@ void SafeBrowsingDatabaseNew::WritePrefixSet() {
if (!write_ok)
RecordFailure(FAILURE_DATABASE_PREFIX_SET_WRITE);
- // Delete any stale bloom filter (checking before deleting is
- // unlikely to be faster).
- file_util::Delete(bloom_filter_filename_, false);
-
#if defined(OS_MACOSX)
base::mac::SetFileBackupExclusion(prefix_set_filename_);
#endif
« no previous file with comments | « chrome/browser/safe_browsing/safe_browsing_database.h ('k') | chrome/browser/safe_browsing/safe_browsing_database_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698