| 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 5160c654fca8f5618ba01ce208b4ddfee1ea0d8a..d1b403b3cb7ae512a2711f7c53c7827e43db091e 100644
|
| --- a/chrome/browser/safe_browsing/safe_browsing_database.cc
|
| +++ b/chrome/browser/safe_browsing/safe_browsing_database.cc
|
| @@ -603,24 +603,14 @@ void SafeBrowsingDatabaseNew::Init(const base::FilePath& filename_base) {
|
| if (side_effect_free_whitelist_store_.get()) {
|
| const base::FilePath side_effect_free_whitelist_filename =
|
| SideEffectFreeWhitelistDBFilename(filename_base_);
|
| - const base::FilePath side_effect_free_whitelist_prefix_set_filename =
|
| - PrefixSetForFilename(side_effect_free_whitelist_filename);
|
| side_effect_free_whitelist_store_->Init(
|
| side_effect_free_whitelist_filename,
|
| base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase,
|
| base::Unretained(this)));
|
|
|
| - // Only use the prefix set if database is present and non-empty.
|
| - if (GetFileSizeOrZero(side_effect_free_whitelist_filename)) {
|
| - const base::TimeTicks before = base::TimeTicks::Now();
|
| - side_effect_free_whitelist_prefix_set_ =
|
| - safe_browsing::PrefixSet::LoadFile(
|
| - side_effect_free_whitelist_prefix_set_filename);
|
| - UMA_HISTOGRAM_TIMES("SB2.SideEffectFreeWhitelistPrefixSetLoad",
|
| - base::TimeTicks::Now() - before);
|
| - if (!side_effect_free_whitelist_prefix_set_.get())
|
| - RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_READ);
|
| - }
|
| + LoadPrefixSet(side_effect_free_whitelist_filename,
|
| + &side_effect_free_whitelist_prefix_set_,
|
| + FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_READ);
|
| } else {
|
| // Delete any files of the side-effect free sidelist that may be around
|
| // from when it was previously enabled.
|
| @@ -1212,7 +1202,8 @@ void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) {
|
| browse_store_.get(),
|
| &browse_prefix_set_,
|
| FAILURE_BROWSE_DATABASE_UPDATE_FINISH,
|
| - FAILURE_BROWSE_PREFIX_SET_WRITE);
|
| + FAILURE_BROWSE_PREFIX_SET_WRITE,
|
| + true);
|
|
|
| UpdateWhitelistStore(CsdWhitelistDBFilename(filename_base_),
|
| csd_whitelist_store_.get(),
|
| @@ -1230,8 +1221,14 @@ void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) {
|
| static_cast<int>(size_bytes / 1024));
|
| }
|
|
|
| - if (side_effect_free_whitelist_store_)
|
| - UpdateSideEffectFreeWhitelistStore();
|
| + if (side_effect_free_whitelist_store_) {
|
| + UpdatePrefixSetUrlStore(SideEffectFreeWhitelistDBFilename(filename_base_),
|
| + side_effect_free_whitelist_store_.get(),
|
| + &side_effect_free_whitelist_prefix_set_,
|
| + FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_FINISH,
|
| + FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_WRITE,
|
| + false);
|
| + }
|
|
|
| if (ip_blacklist_store_)
|
| UpdateIpBlacklistStore();
|
| @@ -1241,7 +1238,8 @@ void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) {
|
| unwanted_software_store_.get(),
|
| &unwanted_software_prefix_set_,
|
| FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_FINISH,
|
| - FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE);
|
| + FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE,
|
| + true);
|
| }
|
| }
|
|
|
| @@ -1297,8 +1295,11 @@ void SafeBrowsingDatabaseNew::UpdatePrefixSetUrlStore(
|
| SafeBrowsingStore* url_store,
|
| scoped_ptr<const safe_browsing::PrefixSet>* prefix_set,
|
| FailureType finish_failure_type,
|
| - FailureType write_failure_type) {
|
| + FailureType write_failure_type,
|
| + bool store_full_hashes_in_prefix_set) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| + DCHECK(url_store);
|
| + DCHECK(prefix_set);
|
|
|
| // Measure the amount of IO during the filter build.
|
| base::IoCounters io_before, io_after;
|
| @@ -1329,13 +1330,21 @@ void SafeBrowsingDatabaseNew::UpdatePrefixSetUrlStore(
|
| return;
|
| }
|
|
|
| - std::vector<SBFullHash> full_hash_results;
|
| - for (size_t i = 0; i < add_full_hashes.size(); ++i) {
|
| - full_hash_results.push_back(add_full_hashes[i].full_hash);
|
| - }
|
| + scoped_ptr<const safe_browsing::PrefixSet> new_prefix_set;
|
| + if (store_full_hashes_in_prefix_set) {
|
| + std::vector<SBFullHash> full_hash_results;
|
| + for (size_t i = 0; i < add_full_hashes.size(); ++i) {
|
| + full_hash_results.push_back(add_full_hashes[i].full_hash);
|
| + }
|
|
|
| - scoped_ptr<const safe_browsing::PrefixSet> new_prefix_set(
|
| - builder.GetPrefixSet(full_hash_results));
|
| + new_prefix_set = builder.GetPrefixSet(full_hash_results);
|
| + } else {
|
| + // TODO(gab): Ensure that stores which do not want full hashes just don't
|
| + // have full hashes in the first place and remove
|
| + // |store_full_hashes_in_prefix_set| and the code specialization incurred
|
| + // here.
|
| + new_prefix_set = builder.GetPrefixSetNoHashes();
|
| + }
|
|
|
| // Swap in the newly built filter.
|
| {
|
| @@ -1366,7 +1375,7 @@ void SafeBrowsingDatabaseNew::UpdatePrefixSetUrlStore(
|
| }
|
|
|
| const int64 file_size = GetFileSizeOrZero(db_filename);
|
| - UMA_HISTOGRAM_COUNTS("SB2.BrowseDatabaseKilobytes",
|
| + UMA_HISTOGRAM_COUNTS("SB2.DatabaseKilobytes",
|
| static_cast<int>(file_size / 1024));
|
|
|
| #if defined(OS_MACOSX)
|
| @@ -1374,55 +1383,6 @@ void SafeBrowsingDatabaseNew::UpdatePrefixSetUrlStore(
|
| #endif
|
| }
|
|
|
| -void SafeBrowsingDatabaseNew::UpdateSideEffectFreeWhitelistStore() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - safe_browsing::PrefixSetBuilder builder;
|
| - std::vector<SBAddFullHash> add_full_hashes_result;
|
| -
|
| - if (!side_effect_free_whitelist_store_->FinishUpdate(
|
| - &builder, &add_full_hashes_result)) {
|
| - RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_FINISH);
|
| - return;
|
| - }
|
| - scoped_ptr<const safe_browsing::PrefixSet> new_prefix_set(
|
| - builder.GetPrefixSetNoHashes());
|
| -
|
| - // Swap in the newly built prefix set.
|
| - {
|
| - base::AutoLock locked(lookup_lock_);
|
| - side_effect_free_whitelist_prefix_set_.swap(new_prefix_set);
|
| - }
|
| -
|
| - const base::FilePath side_effect_free_whitelist_filename =
|
| - SideEffectFreeWhitelistDBFilename(filename_base_);
|
| - const base::FilePath side_effect_free_whitelist_prefix_set_filename =
|
| - PrefixSetForFilename(side_effect_free_whitelist_filename);
|
| - const base::TimeTicks before = base::TimeTicks::Now();
|
| - const bool write_ok = side_effect_free_whitelist_prefix_set_->WriteFile(
|
| - side_effect_free_whitelist_prefix_set_filename);
|
| - UMA_HISTOGRAM_TIMES("SB2.SideEffectFreePrefixSetWrite",
|
| - base::TimeTicks::Now() - before);
|
| -
|
| - if (!write_ok)
|
| - RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_WRITE);
|
| -
|
| - // Gather statistics.
|
| - int64 file_size = GetFileSizeOrZero(
|
| - side_effect_free_whitelist_prefix_set_filename);
|
| - UMA_HISTOGRAM_COUNTS("SB2.SideEffectFreeWhitelistPrefixSetKilobytes",
|
| - static_cast<int>(file_size / 1024));
|
| - file_size = GetFileSizeOrZero(side_effect_free_whitelist_filename);
|
| - UMA_HISTOGRAM_COUNTS("SB2.SideEffectFreeWhitelistDatabaseKilobytes",
|
| - static_cast<int>(file_size / 1024));
|
| -
|
| -#if defined(OS_MACOSX)
|
| - base::mac::SetFileBackupExclusion(side_effect_free_whitelist_filename);
|
| - base::mac::SetFileBackupExclusion(
|
| - side_effect_free_whitelist_prefix_set_filename);
|
| -#endif
|
| -}
|
| -
|
| void SafeBrowsingDatabaseNew::UpdateIpBlacklistStore() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
|
|