| 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 7b72de14a37b03cad171cfb0f60d8810e48a62b8..30c623e51866dc65b75a78ce3800476e2d152d40 100644
|
| --- a/chrome/browser/safe_browsing/safe_browsing_database.cc
|
| +++ b/chrome/browser/safe_browsing/safe_browsing_database.cc
|
| @@ -70,6 +70,9 @@ const base::FilePath::CharType kIPBlacklistDBFile[] =
|
| // Filename suffix for the unwanted software blacklist store.
|
| const base::FilePath::CharType kUnwantedSoftwareDBFile[] =
|
| FILE_PATH_LITERAL(" UwS List");
|
| +// Filename suffix for the resource blacklist store.
|
| +const base::FilePath::CharType kResourceBlacklistDBFile[] =
|
| + FILE_PATH_LITERAL(" Resource Blacklist");
|
|
|
| // Filename suffix for browse store.
|
| // TODO(shess): "Safe Browsing Bloom Prefix Set" is full of win.
|
| @@ -279,7 +282,8 @@ class SafeBrowsingDatabaseFactoryImpl : public SafeBrowsingDatabaseFactory {
|
| bool enable_download_whitelist,
|
| bool enable_extension_blacklist,
|
| bool enable_ip_blacklist,
|
| - bool enable_unwanted_software_list) override {
|
| + bool enable_unwanted_software_list,
|
| + bool enable_resource_blacklist) override {
|
| return new SafeBrowsingDatabaseNew(
|
| db_task_runner, CreateStore(true, db_task_runner), // browse_store
|
| CreateStore(enable_download_protection, db_task_runner),
|
| @@ -288,7 +292,8 @@ class SafeBrowsingDatabaseFactoryImpl : public SafeBrowsingDatabaseFactory {
|
| CreateStore(true, db_task_runner), // inclusion_whitelist_store
|
| CreateStore(enable_extension_blacklist, db_task_runner),
|
| CreateStore(enable_ip_blacklist, db_task_runner),
|
| - CreateStore(enable_unwanted_software_list, db_task_runner));
|
| + CreateStore(enable_unwanted_software_list, db_task_runner),
|
| + CreateStore(enable_resource_blacklist, db_task_runner));
|
| }
|
|
|
| SafeBrowsingDatabaseFactoryImpl() {}
|
| @@ -312,7 +317,8 @@ SafeBrowsingDatabase* SafeBrowsingDatabase::Create(
|
| bool enable_download_whitelist,
|
| bool enable_extension_blacklist,
|
| bool enable_ip_blacklist,
|
| - bool enable_unwanted_software_list) {
|
| + bool enable_unwanted_software_list,
|
| + bool enable_resource_blacklist) {
|
| DCHECK(current_task_runner->RunsTasksOnCurrentThread());
|
| if (!factory_)
|
| factory_ = new SafeBrowsingDatabaseFactoryImpl();
|
| @@ -320,7 +326,8 @@ SafeBrowsingDatabase* SafeBrowsingDatabase::Create(
|
| current_task_runner, enable_download_protection,
|
| enable_client_side_whitelist, enable_download_whitelist,
|
| enable_extension_blacklist, enable_ip_blacklist,
|
| - enable_unwanted_software_list);
|
| + enable_unwanted_software_list,
|
| + enable_resource_blacklist);
|
| }
|
|
|
| SafeBrowsingDatabase::~SafeBrowsingDatabase() {}
|
| @@ -392,6 +399,12 @@ base::FilePath SafeBrowsingDatabase::UnwantedSoftwareDBFilename(
|
| }
|
|
|
| // static
|
| +base::FilePath SafeBrowsingDatabase::ResourceBlacklistDBFilename(
|
| + const base::FilePath& db_filename) {
|
| + return base::FilePath(db_filename.value() + kResourceBlacklistDBFile);
|
| +}
|
| +
|
| +// static
|
| void SafeBrowsingDatabase::GetDownloadUrlPrefixes(
|
| const std::vector<GURL>& urls,
|
| std::vector<SBPrefix>* prefixes) {
|
| @@ -423,6 +436,8 @@ SafeBrowsingStore* SafeBrowsingDatabaseNew::GetStore(const int list_id) {
|
| return ip_blacklist_store_.get();
|
| } else if (list_id == UNWANTEDURL) {
|
| return unwanted_software_store_.get();
|
| + } else if (list_id == RESOURCEBLACKLIST) {
|
| + return resource_blacklist_store_.get();
|
| }
|
| return NULL;
|
| }
|
| @@ -605,7 +620,8 @@ SafeBrowsingDatabaseNew::SafeBrowsingDatabaseNew(
|
| SafeBrowsingStore* inclusion_whitelist_store,
|
| SafeBrowsingStore* extension_blacklist_store,
|
| SafeBrowsingStore* ip_blacklist_store,
|
| - SafeBrowsingStore* unwanted_software_store)
|
| + SafeBrowsingStore* unwanted_software_store,
|
| + SafeBrowsingStore* resource_blacklist_store)
|
| : db_task_runner_(db_task_runner),
|
| state_manager_(db_task_runner_),
|
| db_state_manager_(db_task_runner_),
|
| @@ -617,6 +633,7 @@ SafeBrowsingDatabaseNew::SafeBrowsingDatabaseNew(
|
| extension_blacklist_store_(extension_blacklist_store),
|
| ip_blacklist_store_(ip_blacklist_store),
|
| unwanted_software_store_(unwanted_software_store),
|
| + resource_blacklist_store_(resource_blacklist_store),
|
| reset_factory_(this) {
|
| DCHECK(browse_store_.get());
|
| }
|
| @@ -763,6 +780,13 @@ void SafeBrowsingDatabaseNew::Init(const base::FilePath& filename_base) {
|
| LoadIpBlacklist(std::vector<SBAddFullHash>()); // Clear the list.
|
| }
|
| }
|
| +
|
| + if (resource_blacklist_store_.get()) {
|
| + resource_blacklist_store_->Init(
|
| + ResourceBlacklistDBFilename(db_state_manager_.filename_base()),
|
| + base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase,
|
| + base::Unretained(this)));
|
| + }
|
| }
|
|
|
| bool SafeBrowsingDatabaseNew::ResetDatabase() {
|
| @@ -945,6 +969,18 @@ bool SafeBrowsingDatabaseNew::ContainsMalwareIP(const std::string& ip_address) {
|
| return false;
|
| }
|
|
|
| +bool SafeBrowsingDatabaseNew::ContainsResourceUrlPrefixes(
|
| + const std::vector<SBPrefix>& prefixes,
|
| + std::vector<SBPrefix>* prefix_hits) {
|
| + DCHECK(db_task_runner_->RunsTasksOnCurrentThread());
|
| +
|
| + if (!resource_blacklist_store_)
|
| + return false;
|
| +
|
| + return MatchAddPrefixes(resource_blacklist_store_.get(),
|
| + RESOURCEBLACKLIST % 2, prefixes, prefix_hits);
|
| +}
|
| +
|
| bool SafeBrowsingDatabaseNew::ContainsDownloadWhitelistedString(
|
| const std::string& str) {
|
| std::vector<SBFullHash> hashes;
|
| @@ -1175,6 +1211,12 @@ bool SafeBrowsingDatabaseNew::UpdateStarted(
|
| return false;
|
| }
|
|
|
| + if (resource_blacklist_store_ && !resource_blacklist_store_->BeginUpdate()) {
|
| + RecordFailure(FAILURE_RESOURCE_BLACKLIST_UPDATE_BEGIN);
|
| + HandleCorruptDatabase();
|
| + return false;
|
| + }
|
| +
|
| // Cached fullhash results must be cleared on every database update (whether
|
| // successful or not).
|
| state_manager_.BeginWriteTransaction()->clear_prefix_gethash_cache();
|
| @@ -1204,6 +1246,9 @@ bool SafeBrowsingDatabaseNew::UpdateStarted(
|
| UpdateChunkRangesForList(unwanted_software_store_.get(), kUnwantedUrlList,
|
| lists);
|
|
|
| + UpdateChunkRangesForList(resource_blacklist_store_.get(), kResourceBlacklist,
|
| + lists);
|
| +
|
| db_state_manager_.reset_corruption_detected();
|
| db_state_manager_.reset_change_detected();
|
| return true;
|
| @@ -1251,6 +1296,11 @@ void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) {
|
| !unwanted_software_store_->CheckValidity()) {
|
| DLOG(ERROR) << "Unwanted software url list database corrupt.";
|
| }
|
| +
|
| + if (resource_blacklist_store_ &&
|
| + !resource_blacklist_store_->CheckValidity()) {
|
| + DLOG(ERROR) << "Resources blacklist url list database corrupt.";
|
| + }
|
| }
|
|
|
| if (db_state_manager_.corruption_detected())
|
| @@ -1278,6 +1328,8 @@ void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) {
|
| ip_blacklist_store_->CancelUpdate();
|
| if (unwanted_software_store_)
|
| unwanted_software_store_->CancelUpdate();
|
| + if (resource_blacklist_store_)
|
| + resource_blacklist_store_->CancelUpdate();
|
| return;
|
| }
|
|
|
| @@ -1319,6 +1371,13 @@ void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) {
|
| FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_FINISH,
|
| FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE, true);
|
| }
|
| +
|
| + if (resource_blacklist_store_) {
|
| + UpdateHashPrefixStore(
|
| + ResourceBlacklistDBFilename(db_state_manager_.filename_base()),
|
| + resource_blacklist_store_.get(),
|
| + FAILURE_RESOURCE_BLACKLIST_UPDATE_FINISH);
|
| + }
|
| }
|
|
|
| void SafeBrowsingDatabaseNew::UpdateWhitelistStore(
|
| @@ -1602,7 +1661,12 @@ bool SafeBrowsingDatabaseNew::Delete() {
|
| if (!r10)
|
| RecordFailure(FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_DELETE);
|
|
|
| - return r1 && r2 && r3 && r4 && r5 && r6 && r7 && r8 && r9 && r10;
|
| + const bool r11 = base::DeleteFile(
|
| + ResourceBlacklistDBFilename(db_state_manager_.filename_base()), false);
|
| + if (!r11)
|
| + RecordFailure(FAILURE_RESOURCE_BLACKLIST_DELETE);
|
| +
|
| + return r1 && r2 && r3 && r4 && r5 && r6 && r7 && r8 && r9 && r10 && r11;
|
| }
|
|
|
| void SafeBrowsingDatabaseNew::WritePrefixSet(const base::FilePath& db_filename,
|
| @@ -1768,6 +1832,9 @@ void SafeBrowsingDatabaseNew::RecordFileSizeHistogram(
|
| else if (base::EndsWith(filename, kUnwantedSoftwareDBFile,
|
| base::CompareCase::SENSITIVE))
|
| histogram_name.append(".UnwantedSoftware");
|
| + else if (base::EndsWith(filename, kResourceBlacklistDBFile,
|
| + base::CompareCase::SENSITIVE))
|
| + histogram_name.append(".ResourceBlacklist");
|
| else
|
| NOTREACHED(); // Add support for new lists above.
|
|
|
|
|