diff --git a/chrome/browser/safe_browsing/database_manager.cc b/chrome/browser/safe_browsing/database_manager.cc index 4e1592f90eebdc..28c0916a4787f6 100644 --- a/chrome/browser/safe_browsing/database_manager.cc +++ b/chrome/browser/safe_browsing/database_manager.cc @@ -334,6 +334,14 @@ bool SafeBrowsingDatabaseManager::IsMalwareKillSwitchOn() { return database_->IsMalwareIPMatchKillSwitchOn(); } +bool SafeBrowsingDatabaseManager::IsCsdWhitelistKillSwitchOn() { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); + if (!enabled_ || !MakeDatabaseAvailable()) { + return true; + } + return database_->IsCsdWhitelistKillSwitchOn(); +} + bool SafeBrowsingDatabaseManager::CheckBrowseUrl(const GURL& url, Client* client) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); diff --git a/chrome/browser/safe_browsing/database_manager.h b/chrome/browser/safe_browsing/database_manager.h index 0ca1c8f5d4cb70..02105f607a26ad 100644 --- a/chrome/browser/safe_browsing/database_manager.h +++ b/chrome/browser/safe_browsing/database_manager.h @@ -173,6 +173,9 @@ class SafeBrowsingDatabaseManager // Check if the CSD malware IP matching kill switch is turned on. virtual bool IsMalwareKillSwitchOn(); + // Check if the CSD whitelist kill switch is turned on. + virtual bool IsCsdWhitelistKillSwitchOn(); + // Called on the IO thread to cancel a pending check if the result is no // longer needed. void CancelCheck(Client* client); diff --git a/chrome/browser/safe_browsing/safe_browsing_database.cc b/chrome/browser/safe_browsing/safe_browsing_database.cc index 2f51dae940d93a..268d9705907cac 100644 --- a/chrome/browser/safe_browsing/safe_browsing_database.cc +++ b/chrome/browser/safe_browsing/safe_browsing_database.cc @@ -1633,3 +1633,7 @@ bool SafeBrowsingDatabaseNew::IsMalwareIPMatchKillSwitchOn() { full_hashes.push_back(malware_kill_switch); return ContainsWhitelistedHashes(csd_whitelist_, full_hashes); } + +bool SafeBrowsingDatabaseNew::IsCsdWhitelistKillSwitchOn() { + return csd_whitelist_.second; +} diff --git a/chrome/browser/safe_browsing/safe_browsing_database.h b/chrome/browser/safe_browsing/safe_browsing_database.h index c6fbad557bf39f..73b6564921c0c3 100644 --- a/chrome/browser/safe_browsing/safe_browsing_database.h +++ b/chrome/browser/safe_browsing/safe_browsing_database.h @@ -189,6 +189,10 @@ class SafeBrowsingDatabase { // in the csd whitelist. virtual bool IsMalwareIPMatchKillSwitchOn() = 0; + // Returns true if the whitelist killswitch URL is present in the csd + // whitelist. + virtual bool IsCsdWhitelistKillSwitchOn() = 0; + // The name of the bloom-filter file for the given database file. // NOTE(shess): OBSOLETE. Present for deleting stale files. static base::FilePath BloomFilterForFilename( @@ -328,6 +332,9 @@ class SafeBrowsingDatabaseNew : public SafeBrowsingDatabase { // Returns the value of malware_kill_switch_; virtual bool IsMalwareIPMatchKillSwitchOn() OVERRIDE; + // Returns true if the CSD whitelist has everything whitelisted. + virtual bool IsCsdWhitelistKillSwitchOn() OVERRIDE; + private: friend class SafeBrowsingDatabaseTest; FRIEND_TEST_ALL_PREFIXES(SafeBrowsingDatabaseTest, HashCaching); diff --git a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc index d5327f63c573ec..6656f2c6360ee8 100644 --- a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc +++ b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc @@ -1422,6 +1422,9 @@ TEST_F(SafeBrowsingDatabaseTest, Whitelists) { EXPECT_FALSE(database_->ContainsDownloadWhitelistedUrl( GURL(std::string("http://www.google.com/")))); + // The CSD whitelist killswitch is not present. + EXPECT_FALSE(database_->IsCsdWhitelistKillSwitchOn()); + // Test only add the malware IP killswitch csd_chunks.clear(); chunk.hosts.clear(); @@ -1434,6 +1437,8 @@ TEST_F(SafeBrowsingDatabaseTest, Whitelists) { database_->UpdateFinished(true); EXPECT_TRUE(database_->IsMalwareIPMatchKillSwitchOn()); + // The CSD whitelist killswitch is not present. + EXPECT_FALSE(database_->IsCsdWhitelistKillSwitchOn()); // Test that the kill-switch works as intended. csd_chunks.clear(); @@ -1454,6 +1459,8 @@ TEST_F(SafeBrowsingDatabaseTest, Whitelists) { download_chunks); database_->UpdateFinished(true); + // The CSD whitelist killswitch is present. + EXPECT_TRUE(database_->IsCsdWhitelistKillSwitchOn()); EXPECT_TRUE(database_->IsMalwareIPMatchKillSwitchOn()); EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( GURL(std::string("https://") + kGood1Url2 + "/c.html"))); @@ -1501,6 +1508,7 @@ TEST_F(SafeBrowsingDatabaseTest, Whitelists) { database_->UpdateFinished(true); EXPECT_FALSE(database_->IsMalwareIPMatchKillSwitchOn()); + EXPECT_FALSE(database_->IsCsdWhitelistKillSwitchOn()); EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( GURL(std::string("https://") + kGood1Url2 + "/c.html"))); EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( diff --git a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc index b6ff5692feea40..61c672ef052c7d 100644 --- a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc +++ b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc @@ -181,6 +181,9 @@ class TestSafeBrowsingDatabase : public SafeBrowsingDatabase { virtual bool IsMalwareIPMatchKillSwitchOn() OVERRIDE { return false; } + virtual bool IsCsdWhitelistKillSwitchOn() OVERRIDE { + return false; + } // Fill up the database with test URL. void AddUrl(const GURL& url,