| 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 f3b094b0b56fa3de1914afeffac0234baff60a85..bc881a1e774089b91d53661a452810d761f03004 100644
|
| --- a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
|
| +++ b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
|
| @@ -22,6 +22,7 @@
|
| #include "chrome/browser/safe_browsing/safe_browsing_store_file.h"
|
| #include "crypto/sha2.h"
|
| #include "net/base/ip_address_number.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "testing/platform_test.h"
|
| #include "url/gurl.h"
|
| @@ -280,11 +281,13 @@ class SafeBrowsingDatabaseTest : public PlatformTest {
|
| new SafeBrowsingStoreFile(task_runner_);
|
| SafeBrowsingStoreFile* unwanted_software_store =
|
| new SafeBrowsingStoreFile(task_runner_);
|
| + SafeBrowsingStoreFile* resource_blacklist_store =
|
| + new SafeBrowsingStoreFile(task_runner_);
|
| database_.reset(new SafeBrowsingDatabaseNew(
|
| task_runner_, browse_store, download_store, csd_whitelist_store,
|
| download_whitelist_store, inclusion_whitelist_store,
|
| extension_blacklist_store, ip_blacklist_store,
|
| - unwanted_software_store));
|
| + unwanted_software_store, resource_blacklist_store));
|
| database_->Init(database_filename_);
|
| }
|
|
|
| @@ -295,6 +298,16 @@ class SafeBrowsingDatabaseTest : public PlatformTest {
|
| return database_->ContainsDownloadUrlPrefixes(prefixes, prefix_hits);
|
| }
|
|
|
| + bool ContainsResourceUrl(const GURL& url,
|
| + std::vector<SBPrefix>* prefix_hits) {
|
| + std::vector<SBFullHash> full_hashes;
|
| + UrlToFullHashes(url, false, &full_hashes);
|
| + std::vector<SBPrefix> prefixes(full_hashes.size());
|
| + for (size_t i = 0; i < full_hashes.size(); ++i)
|
| + prefixes[i] = full_hashes[i].prefix;
|
| + return database_->ContainsResourceUrlPrefixes(prefixes, prefix_hits);
|
| + }
|
| +
|
| void GetListsInfo(std::vector<SBListChunkRanges>* lists) {
|
| lists->clear();
|
| ASSERT_TRUE(database_->UpdateStarted(lists));
|
| @@ -440,10 +453,14 @@ TEST_F(SafeBrowsingDatabaseTest, ListNames) {
|
| chunks.push_back(AddChunkPrefixValue(11, "www.unwanted.com/software.html"));
|
| database_->InsertChunks(kUnwantedUrlList, chunks);
|
|
|
| + chunks.clear();
|
| + chunks.push_back(AddChunkPrefixValue(12, "foo.com/script.js"));
|
| + database_->InsertChunks(kResourceBlacklist, chunks);
|
| +
|
| database_->UpdateFinished(true);
|
|
|
| GetListsInfo(&lists);
|
| - ASSERT_EQ(9U, lists.size());
|
| + ASSERT_EQ(10U, lists.size());
|
| EXPECT_EQ(kMalwareList, lists[0].name);
|
| EXPECT_EQ("1", lists[0].adds);
|
| EXPECT_TRUE(lists[0].subs.empty());
|
| @@ -471,6 +488,9 @@ TEST_F(SafeBrowsingDatabaseTest, ListNames) {
|
| EXPECT_EQ(kUnwantedUrlList, lists[8].name);
|
| EXPECT_EQ("11", lists[8].adds);
|
| EXPECT_TRUE(lists[8].subs.empty());
|
| + EXPECT_EQ(kResourceBlacklist, lists[9].name);
|
| + EXPECT_EQ("12", lists[9].adds);
|
| + EXPECT_TRUE(lists[9].subs.empty());
|
|
|
| database_.reset();
|
| }
|
| @@ -1153,7 +1173,7 @@ TEST_F(SafeBrowsingDatabaseTest, DISABLED_FileCorruptionHandling) {
|
| base::MessageLoop loop;
|
| SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile(task_runner_);
|
| database_.reset(new SafeBrowsingDatabaseNew(
|
| - task_runner_, store, NULL, NULL, NULL, NULL, NULL, NULL, NULL));
|
| + task_runner_, store, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL));
|
| database_->Init(database_filename_);
|
|
|
| // This will cause an empty database to be created.
|
| @@ -1294,6 +1314,45 @@ TEST_F(SafeBrowsingDatabaseTest, ContainsDownloadUrlPrefixes) {
|
| database_.reset();
|
| }
|
|
|
| +TEST_F(SafeBrowsingDatabaseTest, ContainsResourceUrlPrefixes) {
|
| + const char* kBadUrl1 = "bad1.com/";
|
| + const char* kBadUrl2 = "bad2.com/script.js";
|
| + const SBPrefix kBadPrefix1 = SBPrefixForString(kBadUrl1);
|
| + const SBPrefix kBadPrefix2 = SBPrefixForString(kBadUrl2);
|
| +
|
| + // Populate database
|
| + std::vector<scoped_ptr<SBChunkData>> chunks;
|
| + chunks.push_back(AddChunkPrefix2Value(1, kBadUrl1, kBadUrl2));
|
| +
|
| + std::vector<SBListChunkRanges> lists;
|
| + ASSERT_TRUE(database_->UpdateStarted(&lists));
|
| + database_->InsertChunks(kResourceBlacklist, chunks);
|
| + database_->UpdateFinished(true);
|
| +
|
| + struct {
|
| + std::string url;
|
| + bool found_in_db;
|
| + std::vector<SBPrefix> prefix_hits;
|
| + } test_cases[] = {
|
| + {std::string("http://") + kBadUrl1, true, {kBadPrefix1}},
|
| + {std::string("https://") + kBadUrl2, true, {kBadPrefix2}},
|
| + {std::string("ftp://") + kBadUrl1, true, {kBadPrefix1}},
|
| + {std::string("http://") + kBadUrl1 + "a/b/?arg=value", true, {kBadPrefix1}},
|
| + {std::string("http://") + kBadUrl1 + "script.js", true, {kBadPrefix1}},
|
| + {std::string("http://www.domain.") + kBadUrl2, true, {kBadPrefix2}},
|
| + {"http://www.good.org/script.js", false, std::vector<SBPrefix>()},
|
| + };
|
| +
|
| + std::vector<SBPrefix> prefix_hits;
|
| + for (const auto& test_case : test_cases) {
|
| + EXPECT_EQ(test_case.found_in_db,
|
| + ContainsResourceUrl(GURL(test_case.url), &prefix_hits));
|
| + EXPECT_THAT(prefix_hits, testing::ElementsAreArray(test_case.prefix_hits));
|
| + }
|
| +
|
| + database_.reset();
|
| +}
|
| +
|
| // Checks that the whitelists are handled properly.
|
| TEST_F(SafeBrowsingDatabaseTest, Whitelists) {
|
| struct TestCase {
|
| @@ -1328,7 +1387,7 @@ TEST_F(SafeBrowsingDatabaseTest, Whitelists) {
|
| // If the whitelist is disabled everything should match the whitelist.
|
| database_.reset(new SafeBrowsingDatabaseNew(
|
| task_runner_, new SafeBrowsingStoreFile(task_runner_), NULL, NULL, NULL,
|
| - NULL, NULL, NULL, NULL));
|
| + NULL, NULL, NULL, NULL, NULL));
|
| database_->Init(database_filename_);
|
| for (const auto& test_case : kTestCases) {
|
| SCOPED_TRACE(std::string("Tested list at fault => ") +
|
|
|