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 70187b23f7b1756f63a8c0b6b5e9169cd880c6de..7d216218757425da6cee6ed0260dd9f794f71387 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_database.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_database.cc |
@@ -489,20 +489,21 @@ SafeBrowsingDatabaseNew::~SafeBrowsingDatabaseNew() { |
void SafeBrowsingDatabaseNew::Init(const base::FilePath& filename_base) { |
DCHECK_EQ(creation_loop_, base::MessageLoop::current()); |
- // Ensure we haven't been run before. |
- DCHECK(browse_filename_.empty()); |
- DCHECK(download_filename_.empty()); |
- DCHECK(csd_whitelist_filename_.empty()); |
- DCHECK(download_whitelist_filename_.empty()); |
- DCHECK(extension_blacklist_filename_.empty()); |
- DCHECK(side_effect_free_whitelist_filename_.empty()); |
- DCHECK(ip_blacklist_filename_.empty()); |
- |
- browse_filename_ = BrowseDBFilename(filename_base); |
- browse_prefix_set_filename_ = PrefixSetForFilename(browse_filename_); |
+ |
+ // This should not be run multiple times. |
+ DCHECK(filename_base_.empty()); |
+ |
+ filename_base_ = filename_base; |
+ |
+ // TODO(shess): The various stores are really only necessary while doing |
+ // updates, or when querying a store directly (see |ContainsDownloadUrl()|). |
+ // The store variables are also tested to see if a list is enabled. Perhaps |
+ // the stores could be refactored into an update object so that they are only |
+ // live in memory while being actively used. The sense of enabled probably |
+ // belongs in protocol_manager or database_manager. |
browse_store_->Init( |
- browse_filename_, |
+ BrowseDBFilename(filename_base_), |
base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
base::Unretained(this))); |
@@ -517,17 +518,15 @@ void SafeBrowsingDatabaseNew::Init(const base::FilePath& filename_base) { |
} |
if (download_store_.get()) { |
- download_filename_ = DownloadDBFilename(filename_base); |
download_store_->Init( |
- download_filename_, |
+ DownloadDBFilename(filename_base_), |
base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
base::Unretained(this))); |
} |
if (csd_whitelist_store_.get()) { |
- csd_whitelist_filename_ = CsdWhitelistDBFilename(filename_base); |
csd_whitelist_store_->Init( |
- csd_whitelist_filename_, |
+ CsdWhitelistDBFilename(filename_base_), |
base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
base::Unretained(this))); |
@@ -542,9 +541,8 @@ void SafeBrowsingDatabaseNew::Init(const base::FilePath& filename_base) { |
} |
if (download_whitelist_store_.get()) { |
- download_whitelist_filename_ = DownloadWhitelistDBFilename(filename_base); |
download_whitelist_store_->Init( |
- download_whitelist_filename_, |
+ DownloadWhitelistDBFilename(filename_base_), |
base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
base::Unretained(this))); |
@@ -559,31 +557,28 @@ void SafeBrowsingDatabaseNew::Init(const base::FilePath& filename_base) { |
} |
if (extension_blacklist_store_.get()) { |
- extension_blacklist_filename_ = ExtensionBlacklistDBFilename(filename_base); |
extension_blacklist_store_->Init( |
- extension_blacklist_filename_, |
+ ExtensionBlacklistDBFilename(filename_base_), |
base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
base::Unretained(this))); |
} |
if (side_effect_free_whitelist_store_.get()) { |
- side_effect_free_whitelist_filename_ = |
- SideEffectFreeWhitelistDBFilename(filename_base); |
- side_effect_free_whitelist_prefix_set_filename_ = |
- PrefixSetForFilename(side_effect_free_whitelist_filename_); |
+ 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_, |
+ side_effect_free_whitelist_filename, |
base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
base::Unretained(this))); |
- // If there is no database, the filter cannot be used. |
- base::File::Info db_info; |
- if (base::GetFileInfo(side_effect_free_whitelist_filename_, &db_info) |
- && db_info.size != 0) { |
+ // 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_); |
+ side_effect_free_whitelist_prefix_set_filename); |
UMA_HISTOGRAM_TIMES("SB2.SideEffectFreeWhitelistPrefixSetLoad", |
base::TimeTicks::Now() - before); |
if (!side_effect_free_whitelist_prefix_set_.get()) |
@@ -593,13 +588,15 @@ void SafeBrowsingDatabaseNew::Init(const base::FilePath& filename_base) { |
// Delete any files of the side-effect free sidelist that may be around |
// from when it was previously enabled. |
SafeBrowsingStoreFile::DeleteStore( |
- SideEffectFreeWhitelistDBFilename(filename_base)); |
+ SideEffectFreeWhitelistDBFilename(filename_base_)); |
+ base::DeleteFile( |
+ PrefixSetForFilename(SideEffectFreeWhitelistDBFilename(filename_base_)), |
+ false); |
Scott Hess - ex-Googler
2014/06/18 22:07:17
https://codereview.chromium.org/341553006/ adds th
|
} |
if (ip_blacklist_store_.get()) { |
- ip_blacklist_filename_ = IpBlacklistDBFilename(filename_base); |
ip_blacklist_store_->Init( |
- ip_blacklist_filename_, |
+ IpBlacklistDBFilename(filename_base_), |
base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
base::Unretained(this))); |
@@ -1124,7 +1121,7 @@ void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) { |
if (download_store_) { |
int64 size_bytes = UpdateHashPrefixStore( |
- download_filename_, |
+ DownloadDBFilename(filename_base_), |
download_store_.get(), |
FAILURE_DOWNLOAD_DATABASE_UPDATE_FINISH); |
UMA_HISTOGRAM_COUNTS("SB2.DownloadDatabaseKilobytes", |
@@ -1132,16 +1129,16 @@ void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) { |
} |
UpdateBrowseStore(); |
- UpdateWhitelistStore(csd_whitelist_filename_, |
+ UpdateWhitelistStore(CsdWhitelistDBFilename(filename_base_), |
csd_whitelist_store_.get(), |
&csd_whitelist_); |
- UpdateWhitelistStore(download_whitelist_filename_, |
+ UpdateWhitelistStore(DownloadWhitelistDBFilename(filename_base_), |
download_whitelist_store_.get(), |
&download_whitelist_); |
if (extension_blacklist_store_) { |
int64 size_bytes = UpdateHashPrefixStore( |
- extension_blacklist_filename_, |
+ ExtensionBlacklistDBFilename(filename_base_), |
extension_blacklist_store_.get(), |
FAILURE_EXTENSION_BLACKLIST_UPDATE_FINISH); |
UMA_HISTOGRAM_COUNTS("SB2.ExtensionBlacklistKilobytes", |
@@ -1272,15 +1269,13 @@ void SafeBrowsingDatabaseNew::UpdateBrowseStore() { |
io_before.WriteOperationCount)); |
} |
- int64 file_size = GetFileSizeOrZero(browse_prefix_set_filename_); |
- UMA_HISTOGRAM_COUNTS("SB2.PrefixSetKilobytes", |
- static_cast<int>(file_size / 1024)); |
- file_size = GetFileSizeOrZero(browse_filename_); |
+ const base::FilePath browse_filename = BrowseDBFilename(filename_base_); |
+ const int64 file_size = GetFileSizeOrZero(browse_filename); |
UMA_HISTOGRAM_COUNTS("SB2.BrowseDatabaseKilobytes", |
static_cast<int>(file_size / 1024)); |
#if defined(OS_MACOSX) |
- base::mac::SetFileBackupExclusion(browse_filename_); |
+ base::mac::SetFileBackupExclusion(browse_filename); |
#endif |
} |
@@ -1302,9 +1297,13 @@ void SafeBrowsingDatabaseNew::UpdateSideEffectFreeWhitelistStore() { |
side_effect_free_whitelist_prefix_set_.swap(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_); |
+ side_effect_free_whitelist_prefix_set_filename); |
UMA_HISTOGRAM_TIMES("SB2.SideEffectFreePrefixSetWrite", |
base::TimeTicks::Now() - before); |
@@ -1313,17 +1312,17 @@ void SafeBrowsingDatabaseNew::UpdateSideEffectFreeWhitelistStore() { |
// Gather statistics. |
int64 file_size = GetFileSizeOrZero( |
- side_effect_free_whitelist_prefix_set_filename_); |
+ 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_); |
+ 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_filename); |
base::mac::SetFileBackupExclusion( |
- side_effect_free_whitelist_prefix_set_filename_); |
+ side_effect_free_whitelist_prefix_set_filename); |
#endif |
} |
@@ -1339,7 +1338,7 @@ void SafeBrowsingDatabaseNew::UpdateIpBlacklistStore() { |
} |
#if defined(OS_MACOSX) |
- base::mac::SetFileBackupExclusion(ip_blacklist_filename_); |
+ base::mac::SetFileBackupExclusion(IpBlacklistDBFilename(filename_base_)); |
#endif |
LoadIpBlacklist(full_hashes); |
@@ -1372,22 +1371,25 @@ void SafeBrowsingDatabaseNew::OnHandleCorruptDatabase() { |
// real error-handling. |
void SafeBrowsingDatabaseNew::LoadPrefixSet() { |
DCHECK_EQ(creation_loop_, base::MessageLoop::current()); |
- DCHECK(!browse_prefix_set_filename_.empty()); |
+ DCHECK(!filename_base_.empty()); |
+ |
+ const base::FilePath browse_filename = BrowseDBFilename(filename_base_); |
+ const base::FilePath browse_prefix_set_filename = |
+ PrefixSetForFilename(browse_filename); |
- // If there is no database, the filter cannot be used. |
- base::File::Info db_info; |
- if (!base::GetFileInfo(browse_filename_, &db_info) || db_info.size == 0) |
+ // Only use the prefix set if database is present and non-empty. |
+ if (!GetFileSizeOrZero(browse_filename)) |
return; |
// Cleanup any stale bloom filter (no longer used). |
- // TODO(shess): Track failure to delete? |
- base::FilePath bloom_filter_filename = |
- BloomFilterForFilename(browse_filename_); |
+ // TODO(shess): Track existence to drive removal of this code? |
+ const base::FilePath bloom_filter_filename = |
+ BloomFilterForFilename(browse_filename); |
base::DeleteFile(bloom_filter_filename, false); |
const base::TimeTicks before = base::TimeTicks::Now(); |
browse_prefix_set_ = safe_browsing::PrefixSet::LoadFile( |
- browse_prefix_set_filename_); |
+ browse_prefix_set_filename); |
UMA_HISTOGRAM_TIMES("SB2.PrefixSetLoad", base::TimeTicks::Now() - before); |
if (!browse_prefix_set_.get()) |
@@ -1396,6 +1398,18 @@ void SafeBrowsingDatabaseNew::LoadPrefixSet() { |
bool SafeBrowsingDatabaseNew::Delete() { |
DCHECK_EQ(creation_loop_, base::MessageLoop::current()); |
+ DCHECK(!filename_base_.empty()); |
+ |
+ // TODO(shess): This is a mess. SafeBrowsingFileStore::Delete() closes the |
+ // store before calling DeleteStore(). DeleteStore() deletes transient files |
+ // in addition to the main file. Probably all of these should be converted to |
+ // a helper which calls Delete() if the store exists, else DeleteStore() on |
+ // the generated filename. |
+ |
+ // TODO(shess): Determine if the histograms are useful in any way. I cannot |
+ // recall any action taken as a result of their values, in which case it might |
+ // make more sense to histogram an overall thumbs-up/-down and just dig deeper |
+ // if something looks wrong. |
const bool r1 = browse_store_->Delete(); |
if (!r1) |
@@ -1415,32 +1429,42 @@ bool SafeBrowsingDatabaseNew::Delete() { |
if (!r4) |
RecordFailure(FAILURE_DATABASE_STORE_DELETE); |
- base::FilePath bloom_filter_filename = |
- BloomFilterForFilename(browse_filename_); |
+ const base::FilePath browse_filename = BrowseDBFilename(filename_base_); |
+ const base::FilePath bloom_filter_filename = |
+ BloomFilterForFilename(browse_filename); |
const bool r5 = base::DeleteFile(bloom_filter_filename, false); |
if (!r5) |
RecordFailure(FAILURE_DATABASE_FILTER_DELETE); |
- const bool r6 = base::DeleteFile(browse_prefix_set_filename_, false); |
+ const base::FilePath browse_prefix_set_filename = |
+ PrefixSetForFilename(browse_filename); |
+ const bool r6 = base::DeleteFile(browse_prefix_set_filename, false); |
if (!r6) |
RecordFailure(FAILURE_BROWSE_PREFIX_SET_DELETE); |
- const bool r7 = base::DeleteFile(extension_blacklist_filename_, false); |
+ const base::FilePath extension_blacklist_filename = |
+ ExtensionBlacklistDBFilename(filename_base_); |
+ const bool r7 = base::DeleteFile(extension_blacklist_filename, false); |
if (!r7) |
RecordFailure(FAILURE_EXTENSION_BLACKLIST_DELETE); |
- const bool r8 = base::DeleteFile(side_effect_free_whitelist_filename_, |
+ const base::FilePath side_effect_free_whitelist_filename = |
+ SideEffectFreeWhitelistDBFilename(filename_base_); |
+ const bool r8 = base::DeleteFile(side_effect_free_whitelist_filename, |
false); |
if (!r8) |
RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_DELETE); |
+ const base::FilePath side_effect_free_whitelist_prefix_set_filename = |
+ PrefixSetForFilename(side_effect_free_whitelist_filename); |
const bool r9 = base::DeleteFile( |
- side_effect_free_whitelist_prefix_set_filename_, |
+ side_effect_free_whitelist_prefix_set_filename, |
false); |
if (!r9) |
RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_DELETE); |
- const bool r10 = base::DeleteFile(ip_blacklist_filename_, false); |
+ const bool r10 = base::DeleteFile(IpBlacklistDBFilename(filename_base_), |
+ false); |
if (!r10) |
RecordFailure(FAILURE_IP_BLACKLIST_DELETE); |
@@ -1453,16 +1477,24 @@ void SafeBrowsingDatabaseNew::WritePrefixSet() { |
if (!browse_prefix_set_.get()) |
return; |
+ const base::FilePath browse_filename = BrowseDBFilename(filename_base_); |
+ const base::FilePath browse_prefix_set_filename = |
+ PrefixSetForFilename(browse_filename); |
+ |
const base::TimeTicks before = base::TimeTicks::Now(); |
const bool write_ok = browse_prefix_set_->WriteFile( |
- browse_prefix_set_filename_); |
+ browse_prefix_set_filename); |
UMA_HISTOGRAM_TIMES("SB2.PrefixSetWrite", base::TimeTicks::Now() - before); |
+ const int64 file_size = GetFileSizeOrZero(browse_prefix_set_filename); |
+ UMA_HISTOGRAM_COUNTS("SB2.PrefixSetKilobytes", |
+ static_cast<int>(file_size / 1024)); |
+ |
if (!write_ok) |
RecordFailure(FAILURE_BROWSE_PREFIX_SET_WRITE); |
#if defined(OS_MACOSX) |
- base::mac::SetFileBackupExclusion(browse_prefix_set_filename_); |
+ base::mac::SetFileBackupExclusion(browse_prefix_set_filename); |
#endif |
} |