Index: chrome/browser/safe_browsing/safe_browsing_database_unittest.cc |
diff --git a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc |
index 634797e579637a5660f34ae8d22dbdefec080f88..088701b461eb7453803bac1d1d88418cacc5a226 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc |
@@ -366,9 +366,11 @@ TEST_F(SafeBrowsingDatabaseTest, ListNameForBrowseAndDownload) { |
SafeBrowsingStoreFile* browse_store = new SafeBrowsingStoreFile(); |
SafeBrowsingStoreFile* download_store = new SafeBrowsingStoreFile(); |
SafeBrowsingStoreFile* csd_whitelist_store = new SafeBrowsingStoreFile(); |
+ SafeBrowsingStoreFile* download_whitelist_store = new SafeBrowsingStoreFile(); |
database_.reset(new SafeBrowsingDatabaseNew(browse_store, |
download_store, |
- csd_whitelist_store)); |
+ csd_whitelist_store, |
+ download_whitelist_store)); |
database_->Init(database_filename_); |
SBChunkList chunks; |
@@ -410,10 +412,18 @@ TEST_F(SafeBrowsingDatabaseTest, ListNameForBrowseAndDownload) { |
chunks.push_back(chunk); |
database_->InsertChunks(safe_browsing_util::kCsdWhiteList, chunks); |
+ chunk.hosts.clear(); |
+ InsertAddChunkHostFullHashes(&chunk, 6, "www.download.com/", |
+ "www.download.com/"); |
+ |
+ chunks.clear(); |
+ chunks.push_back(chunk); |
+ database_->InsertChunks(safe_browsing_util::kDownloadWhiteList, chunks); |
+ |
database_->UpdateFinished(true); |
GetListsInfo(&lists); |
- EXPECT_EQ(5U, lists.size()); |
+ EXPECT_EQ(6U, lists.size()); |
EXPECT_TRUE(lists[0].name == safe_browsing_util::kMalwareList); |
EXPECT_EQ(lists[0].adds, "1"); |
EXPECT_TRUE(lists[0].subs.empty()); |
@@ -429,6 +439,9 @@ TEST_F(SafeBrowsingDatabaseTest, ListNameForBrowseAndDownload) { |
EXPECT_TRUE(lists[4].name == safe_browsing_util::kCsdWhiteList); |
EXPECT_EQ(lists[4].adds, "5"); |
EXPECT_TRUE(lists[4].subs.empty()); |
+ EXPECT_TRUE(lists[5].name == safe_browsing_util::kDownloadWhiteList); |
+ EXPECT_EQ(lists[5].adds, "6"); |
+ EXPECT_TRUE(lists[5].subs.empty()); |
database_.reset(); |
} |
@@ -1052,7 +1065,7 @@ TEST_F(SafeBrowsingDatabaseTest, DISABLED_FileCorruptionHandling) { |
database_.reset(); |
MessageLoop loop(MessageLoop::TYPE_DEFAULT); |
SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile(); |
- database_.reset(new SafeBrowsingDatabaseNew(store, NULL, NULL)); |
+ database_.reset(new SafeBrowsingDatabaseNew(store, NULL, NULL, NULL)); |
database_->Init(database_filename_); |
// This will cause an empty database to be created. |
@@ -1124,7 +1137,8 @@ TEST_F(SafeBrowsingDatabaseTest, ContainsDownloadUrl) { |
SafeBrowsingStoreFile* csd_whitelist_store = new SafeBrowsingStoreFile(); |
database_.reset(new SafeBrowsingDatabaseNew(browse_store, |
download_store, |
- csd_whitelist_store)); |
+ csd_whitelist_store, |
+ NULL)); |
database_->Init(database_filename_); |
const char kEvil1Host[] = "www.evil1.com/"; |
@@ -1216,25 +1230,30 @@ TEST_F(SafeBrowsingDatabaseTest, ContainsDownloadUrl) { |
database_.reset(); |
} |
-// Checks that the csd-whitelist is handled properly. |
-TEST_F(SafeBrowsingDatabaseTest, CsdWhitelist) { |
+// Checks that the whitelists are handled properly. |
+TEST_F(SafeBrowsingDatabaseTest, Whitelists) { |
database_.reset(); |
MessageLoop loop(MessageLoop::TYPE_DEFAULT); |
- // We expect all calls to ContainsCsdWhitelistedUrl to be made from the IO |
- // thread. |
+ // We expect all calls to ContainsCsdWhitelistedUrl in particular to be made |
+ // from the IO thread. In general the whitelist lookups are thread-safe. |
BrowserThread io_thread(BrowserThread::IO, &loop); |
// If the whitelist is disabled everything should match the whitelist. |
database_.reset(new SafeBrowsingDatabaseNew(new SafeBrowsingStoreFile(), |
- NULL, NULL)); |
+ NULL, NULL, NULL)); |
database_->Init(database_filename_); |
- EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( |
- GURL(std::string("http://www.phishig.com/")))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://www.phishing.com/")))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://www.phishing.com/")))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedString("asdf")); |
SafeBrowsingStoreFile* browse_store = new SafeBrowsingStoreFile(); |
SafeBrowsingStoreFile* csd_whitelist_store = new SafeBrowsingStoreFile(); |
+ SafeBrowsingStoreFile* download_whitelist_store = new SafeBrowsingStoreFile(); |
database_.reset(new SafeBrowsingDatabaseNew(browse_store, NULL, |
- csd_whitelist_store)); |
+ csd_whitelist_store, |
+ download_whitelist_store)); |
database_->Init(database_filename_); |
const char kGood1Host[] = "www.good1.com/"; |
@@ -1244,20 +1263,41 @@ TEST_F(SafeBrowsingDatabaseTest, CsdWhitelist) { |
const char kGood2Host[] = "www.good2.com/"; |
const char kGood2Url1[] = "www.good2.com/c"; // Should match '/c/bla'. |
- SBChunkList chunks; |
+ // good3.com/a/b/c/d/e/f/g/ should match because it's a whitelist. |
+ const char kGood3Host[] = "good3.com/"; |
+ const char kGood3Url1[] = "good3.com/"; |
+ |
+ const char kGoodString[] = "good_string"; |
+ |
+ SBChunkList download_chunks, csd_chunks; |
SBChunk chunk; |
// Add two simple chunks to the csd whitelist. |
InsertAddChunkHost2FullHashes(&chunk, 1, kGood1Host, |
kGood1Url1, kGood1Url2); |
- chunks.push_back(chunk); |
+ csd_chunks.push_back(chunk); |
chunk.hosts.clear(); |
InsertAddChunkHostFullHashes(&chunk, 2, kGood2Host, kGood2Url1); |
- chunks.push_back(chunk); |
+ csd_chunks.push_back(chunk); |
+ |
+ chunk.hosts.clear(); |
+ InsertAddChunkHostFullHashes(&chunk, 2, kGood2Host, kGood2Url1); |
+ download_chunks.push_back(chunk); |
+ |
+ chunk.hosts.clear(); |
+ InsertAddChunkHostFullHashes(&chunk, 3, kGoodString, kGoodString); |
+ download_chunks.push_back(chunk); |
+ |
+ chunk.hosts.clear(); |
+ InsertAddChunkHostFullHashes(&chunk, 4, kGood3Host, kGood3Url1); |
+ download_chunks.push_back(chunk); |
std::vector<SBListChunkRanges> lists; |
EXPECT_TRUE(database_->UpdateStarted(&lists)); |
- database_->InsertChunks(safe_browsing_util::kCsdWhiteList, chunks); |
+ database_->InsertChunks(safe_browsing_util::kCsdWhiteList, |
+ csd_chunks); |
+ database_->InsertChunks(safe_browsing_util::kDownloadWhiteList, |
+ download_chunks); |
database_->UpdateFinished(true); |
EXPECT_FALSE(database_->ContainsCsdWhitelistedUrl( |
@@ -1286,16 +1326,42 @@ TEST_F(SafeBrowsingDatabaseTest, CsdWhitelist) { |
EXPECT_FALSE(database_->ContainsCsdWhitelistedUrl( |
GURL(std::string("http://www.google.com/")))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://") + kGood2Url1 + "/c"))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://") + kGood2Url1 + "/c?bla"))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://") + kGood2Url1 + "/c/bla"))); |
+ |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://good3.com/a/b/c/d/e/f/g/")))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://a.b.good3.com/")))); |
+ |
+ EXPECT_FALSE(database_->ContainsDownloadWhitelistedString("asdf")); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedString(kGoodString)); |
+ |
+ EXPECT_FALSE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://www.google.com/")))); |
+ |
// Test that the kill-switch works as intended. |
- chunks.clear(); |
+ csd_chunks.clear(); |
+ download_chunks.clear(); |
lists.clear(); |
- SBChunk chunk2; |
- InsertAddChunkHostFullHashes(&chunk2, 3, "sb-ssl.google.com/", |
+ chunk.hosts.clear(); |
+ InsertAddChunkHostFullHashes(&chunk, 5, "sb-ssl.google.com/", |
"sb-ssl.google.com/safebrowsing/csd/killswitch"); |
- chunks.push_back(chunk2); |
+ csd_chunks.push_back(chunk); |
+ |
+ chunk.hosts.clear(); |
+ InsertAddChunkHostFullHashes(&chunk, 5, "sb-ssl.google.com/", |
+ "sb-ssl.google.com/safebrowsing/csd/killswitch"); |
+ download_chunks.push_back(chunk); |
EXPECT_TRUE(database_->UpdateStarted(&lists)); |
- database_->InsertChunks(safe_browsing_util::kCsdWhiteList, chunks); |
+ database_->InsertChunks(safe_browsing_util::kCsdWhiteList, csd_chunks); |
+ database_->InsertChunks(safe_browsing_util::kDownloadWhiteList, |
+ download_chunks); |
database_->UpdateFinished(true); |
EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( |
@@ -1305,17 +1371,36 @@ TEST_F(SafeBrowsingDatabaseTest, CsdWhitelist) { |
EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( |
GURL(std::string("http://www.phishing_url.com/")))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("https://") + kGood1Url2 + "/c.html"))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://www.google.com/")))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://www.phishing_url.com/")))); |
+ |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedString("asdf")); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedString(kGoodString)); |
+ |
// Remove the kill-switch and verify that we can recover. |
- chunks.clear(); |
+ csd_chunks.clear(); |
+ download_chunks.clear(); |
lists.clear(); |
SBChunk sub_chunk; |
- InsertSubChunkHostFullHash(&sub_chunk, 1, 3, |
+ InsertSubChunkHostFullHash(&sub_chunk, 1, 5, |
+ "sb-ssl.google.com/", |
+ "sb-ssl.google.com/safebrowsing/csd/killswitch"); |
+ csd_chunks.push_back(sub_chunk); |
+ |
+ sub_chunk.hosts.clear(); |
+ InsertSubChunkHostFullHash(&sub_chunk, 1, 5, |
"sb-ssl.google.com/", |
"sb-ssl.google.com/safebrowsing/csd/killswitch"); |
- chunks.push_back(sub_chunk); |
+ download_chunks.push_back(sub_chunk); |
EXPECT_TRUE(database_->UpdateStarted(&lists)); |
- database_->InsertChunks(safe_browsing_util::kCsdWhiteList, chunks); |
+ database_->InsertChunks(safe_browsing_util::kCsdWhiteList, csd_chunks); |
+ database_->InsertChunks(safe_browsing_util::kDownloadWhiteList, |
+ download_chunks); |
database_->UpdateFinished(true); |
EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( |
@@ -1327,6 +1412,17 @@ TEST_F(SafeBrowsingDatabaseTest, CsdWhitelist) { |
EXPECT_FALSE(database_->ContainsCsdWhitelistedUrl( |
GURL(std::string("http://www.phishing_url.com/")))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("https://") + kGood2Url1 + "/c/bla"))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("https://good3.com/")))); |
+ EXPECT_TRUE(database_->ContainsDownloadWhitelistedString(kGoodString)); |
+ EXPECT_FALSE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://www.google.com/")))); |
+ EXPECT_FALSE(database_->ContainsDownloadWhitelistedUrl( |
+ GURL(std::string("http://www.phishing_url.com/")))); |
+ EXPECT_FALSE(database_->ContainsDownloadWhitelistedString("asdf")); |
+ |
database_.reset(); |
} |
@@ -1439,7 +1535,7 @@ TEST_F(SafeBrowsingDatabaseTest, BinHashInsertLookup) { |
SafeBrowsingStoreFile* download_store = new SafeBrowsingStoreFile(); |
database_.reset(new SafeBrowsingDatabaseNew(browse_store, |
download_store, |
- NULL)); |
+ NULL, NULL)); |
database_->Init(database_filename_); |
SBChunkList chunks; |