Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // Unit tests for the SafeBrowsing storage system. | 5 // Unit tests for the SafeBrowsing storage system. |
| 6 | 6 |
| 7 #include "chrome/browser/safe_browsing/safe_browsing_database.h" | 7 #include "chrome/browser/safe_browsing/safe_browsing_database.h" |
| 8 | 8 |
| 9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
| 10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 281 SafeBrowsingStoreFile* download_store = | 281 SafeBrowsingStoreFile* download_store = |
| 282 new SafeBrowsingStoreFile(task_runner_); | 282 new SafeBrowsingStoreFile(task_runner_); |
| 283 SafeBrowsingStoreFile* csd_whitelist_store = | 283 SafeBrowsingStoreFile* csd_whitelist_store = |
| 284 new SafeBrowsingStoreFile(task_runner_); | 284 new SafeBrowsingStoreFile(task_runner_); |
| 285 SafeBrowsingStoreFile* download_whitelist_store = | 285 SafeBrowsingStoreFile* download_whitelist_store = |
| 286 new SafeBrowsingStoreFile(task_runner_); | 286 new SafeBrowsingStoreFile(task_runner_); |
| 287 SafeBrowsingStoreFile* inclusion_whitelist_store = | 287 SafeBrowsingStoreFile* inclusion_whitelist_store = |
| 288 new SafeBrowsingStoreFile(task_runner_); | 288 new SafeBrowsingStoreFile(task_runner_); |
| 289 SafeBrowsingStoreFile* extension_blacklist_store = | 289 SafeBrowsingStoreFile* extension_blacklist_store = |
| 290 new SafeBrowsingStoreFile(task_runner_); | 290 new SafeBrowsingStoreFile(task_runner_); |
| 291 SafeBrowsingStoreFile* side_effect_free_whitelist_store = | |
| 292 new SafeBrowsingStoreFile(task_runner_); | |
| 293 SafeBrowsingStoreFile* ip_blacklist_store = | 291 SafeBrowsingStoreFile* ip_blacklist_store = |
| 294 new SafeBrowsingStoreFile(task_runner_); | 292 new SafeBrowsingStoreFile(task_runner_); |
| 295 SafeBrowsingStoreFile* unwanted_software_store = | 293 SafeBrowsingStoreFile* unwanted_software_store = |
| 296 new SafeBrowsingStoreFile(task_runner_); | 294 new SafeBrowsingStoreFile(task_runner_); |
| 297 database_.reset(new SafeBrowsingDatabaseNew( | 295 database_.reset(new SafeBrowsingDatabaseNew( |
| 298 task_runner_, browse_store, download_store, csd_whitelist_store, | 296 task_runner_, browse_store, download_store, csd_whitelist_store, |
| 299 download_whitelist_store, inclusion_whitelist_store, | 297 download_whitelist_store, inclusion_whitelist_store, |
| 300 extension_blacklist_store, side_effect_free_whitelist_store, | 298 extension_blacklist_store, ip_blacklist_store, |
| 301 ip_blacklist_store, unwanted_software_store)); | 299 unwanted_software_store)); |
| 302 database_->Init(database_filename_); | 300 database_->Init(database_filename_); |
| 303 } | 301 } |
| 304 | 302 |
| 305 bool ContainsDownloadUrl(const std::vector<GURL>& urls, | 303 bool ContainsDownloadUrl(const std::vector<GURL>& urls, |
| 306 std::vector<SBPrefix>* prefix_hits) { | 304 std::vector<SBPrefix>* prefix_hits) { |
| 307 std::vector<SBPrefix> prefixes; | 305 std::vector<SBPrefix> prefixes; |
| 308 SafeBrowsingDatabase::GetDownloadUrlPrefixes(urls, &prefixes); | 306 SafeBrowsingDatabase::GetDownloadUrlPrefixes(urls, &prefixes); |
| 309 return database_->ContainsDownloadUrlPrefixes(prefixes, prefix_hits); | 307 return database_->ContainsDownloadUrlPrefixes(prefixes, prefix_hits); |
| 310 } | 308 } |
| 311 | 309 |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 440 chunks.get()); | 438 chunks.get()); |
| 441 | 439 |
| 442 chunks.clear(); | 440 chunks.clear(); |
| 443 chunks.push_back(AddChunkFullHashValue(8, | 441 chunks.push_back(AddChunkFullHashValue(8, |
| 444 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | 442 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 445 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); | 443 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); |
| 446 database_->InsertChunks(safe_browsing_util::kExtensionBlacklist, | 444 database_->InsertChunks(safe_browsing_util::kExtensionBlacklist, |
| 447 chunks.get()); | 445 chunks.get()); |
| 448 | 446 |
| 449 chunks.clear(); | 447 chunks.clear(); |
| 450 chunks.push_back(AddChunkFullHashValue(9, "www.sideeffectfree.com")); | 448 chunks.push_back(AddChunkHashedIpValue(9, "::ffff:192.168.1.0", 120)); |
|
Scott Hess - ex-Googler
2015/04/08 22:32:26
I don't think you need to renumber these. Unless
davidben
2015/04/09 21:54:38
Done. (The index into lists has to change, but I k
| |
| 451 database_->InsertChunks(safe_browsing_util::kSideEffectFreeWhitelist, | |
| 452 chunks.get()); | |
| 453 | |
| 454 chunks.clear(); | |
| 455 chunks.push_back(AddChunkHashedIpValue(10, "::ffff:192.168.1.0", 120)); | |
| 456 database_->InsertChunks(safe_browsing_util::kIPBlacklist, chunks.get()); | 449 database_->InsertChunks(safe_browsing_util::kIPBlacklist, chunks.get()); |
| 457 | 450 |
| 458 chunks.clear(); | 451 chunks.clear(); |
| 459 chunks.push_back(AddChunkPrefixValue(11, "www.unwanted.com/software.html")); | 452 chunks.push_back(AddChunkPrefixValue(10, "www.unwanted.com/software.html")); |
| 460 database_->InsertChunks(safe_browsing_util::kUnwantedUrlList, chunks.get()); | 453 database_->InsertChunks(safe_browsing_util::kUnwantedUrlList, chunks.get()); |
| 461 | 454 |
| 462 database_->UpdateFinished(true); | 455 database_->UpdateFinished(true); |
| 463 | 456 |
| 464 GetListsInfo(&lists); | 457 GetListsInfo(&lists); |
| 465 ASSERT_EQ(10U, lists.size()); | 458 ASSERT_EQ(9U, lists.size()); |
| 466 EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name); | 459 EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name); |
| 467 EXPECT_EQ("1", lists[0].adds); | 460 EXPECT_EQ("1", lists[0].adds); |
| 468 EXPECT_TRUE(lists[0].subs.empty()); | 461 EXPECT_TRUE(lists[0].subs.empty()); |
| 469 EXPECT_EQ(safe_browsing_util::kPhishingList, lists[1].name); | 462 EXPECT_EQ(safe_browsing_util::kPhishingList, lists[1].name); |
| 470 EXPECT_EQ("2", lists[1].adds); | 463 EXPECT_EQ("2", lists[1].adds); |
| 471 EXPECT_TRUE(lists[1].subs.empty()); | 464 EXPECT_TRUE(lists[1].subs.empty()); |
| 472 EXPECT_EQ(safe_browsing_util::kBinUrlList, lists[2].name); | 465 EXPECT_EQ(safe_browsing_util::kBinUrlList, lists[2].name); |
| 473 EXPECT_EQ("3", lists[2].adds); | 466 EXPECT_EQ("3", lists[2].adds); |
| 474 EXPECT_TRUE(lists[2].subs.empty()); | 467 EXPECT_TRUE(lists[2].subs.empty()); |
| 475 EXPECT_EQ(safe_browsing_util::kCsdWhiteList, lists[3].name); | 468 EXPECT_EQ(safe_browsing_util::kCsdWhiteList, lists[3].name); |
| 476 EXPECT_EQ("5", lists[3].adds); | 469 EXPECT_EQ("5", lists[3].adds); |
| 477 EXPECT_TRUE(lists[3].subs.empty()); | 470 EXPECT_TRUE(lists[3].subs.empty()); |
| 478 EXPECT_EQ(safe_browsing_util::kDownloadWhiteList, lists[4].name); | 471 EXPECT_EQ(safe_browsing_util::kDownloadWhiteList, lists[4].name); |
| 479 EXPECT_EQ("6", lists[4].adds); | 472 EXPECT_EQ("6", lists[4].adds); |
| 480 EXPECT_TRUE(lists[4].subs.empty()); | 473 EXPECT_TRUE(lists[4].subs.empty()); |
| 481 EXPECT_EQ(safe_browsing_util::kInclusionWhitelist, lists[5].name); | 474 EXPECT_EQ(safe_browsing_util::kInclusionWhitelist, lists[5].name); |
| 482 EXPECT_EQ("7", lists[5].adds); | 475 EXPECT_EQ("7", lists[5].adds); |
| 483 EXPECT_TRUE(lists[5].subs.empty()); | 476 EXPECT_TRUE(lists[5].subs.empty()); |
| 484 EXPECT_EQ(safe_browsing_util::kExtensionBlacklist, lists[6].name); | 477 EXPECT_EQ(safe_browsing_util::kExtensionBlacklist, lists[6].name); |
| 485 EXPECT_EQ("8", lists[6].adds); | 478 EXPECT_EQ("8", lists[6].adds); |
| 486 EXPECT_TRUE(lists[6].subs.empty()); | 479 EXPECT_TRUE(lists[6].subs.empty()); |
| 487 EXPECT_EQ(safe_browsing_util::kSideEffectFreeWhitelist, lists[7].name); | 480 EXPECT_EQ(safe_browsing_util::kIPBlacklist, lists[7].name); |
| 488 EXPECT_EQ("9", lists[7].adds); | 481 EXPECT_EQ("9", lists[7].adds); |
| 489 EXPECT_TRUE(lists[7].subs.empty()); | 482 EXPECT_TRUE(lists[7].subs.empty()); |
| 490 EXPECT_EQ(safe_browsing_util::kIPBlacklist, lists[8].name); | 483 EXPECT_EQ(safe_browsing_util::kUnwantedUrlList, lists[8].name); |
| 491 EXPECT_EQ("10", lists[8].adds); | 484 EXPECT_EQ("10", lists[8].adds); |
| 492 EXPECT_TRUE(lists[8].subs.empty()); | 485 EXPECT_TRUE(lists[8].subs.empty()); |
| 493 EXPECT_EQ(safe_browsing_util::kUnwantedUrlList, lists[9].name); | |
| 494 EXPECT_EQ("11", lists[9].adds); | |
| 495 EXPECT_TRUE(lists[9].subs.empty()); | |
| 496 | 486 |
| 497 database_.reset(); | 487 database_.reset(); |
| 498 } | 488 } |
| 499 | 489 |
| 500 // Checks database reading and writing for browse and unwanted PrefixSets. | 490 // Checks database reading and writing for browse and unwanted PrefixSets. |
| 501 TEST_F(SafeBrowsingDatabaseTest, BrowseAndUnwantedDatabasesAndPrefixSets) { | 491 TEST_F(SafeBrowsingDatabaseTest, BrowseAndUnwantedDatabasesAndPrefixSets) { |
| 502 struct TestCase { | 492 struct TestCase { |
| 503 using TestListContainsBadUrl = bool (SafeBrowsingDatabase::*)( | 493 using TestListContainsBadUrl = bool (SafeBrowsingDatabase::*)( |
| 504 const GURL& url, | 494 const GURL& url, |
| 505 std::vector<SBPrefix>* prefix_hits, | 495 std::vector<SBPrefix>* prefix_hits, |
| 506 std::vector<SBFullHashResult>* cache_hits); | 496 std::vector<SBFullHashResult>* cache_hits); |
| 507 | 497 |
| 508 const char* test_list_name; | 498 const char* test_list_name; |
| 509 size_t expected_list_index; | 499 size_t expected_list_index; |
| 510 TestListContainsBadUrl test_list_contains_bad_url; | 500 TestListContainsBadUrl test_list_contains_bad_url; |
| 511 } const kTestCases[] { | 501 } const kTestCases[] { |
| 512 { safe_browsing_util::kMalwareList, 0U, | 502 { safe_browsing_util::kMalwareList, 0U, |
| 513 &SafeBrowsingDatabase::ContainsBrowseUrl }, | 503 &SafeBrowsingDatabase::ContainsBrowseUrl }, |
| 514 { safe_browsing_util::kPhishingList, 1U, | 504 { safe_browsing_util::kPhishingList, 1U, |
| 515 &SafeBrowsingDatabase::ContainsBrowseUrl }, | 505 &SafeBrowsingDatabase::ContainsBrowseUrl }, |
| 516 { safe_browsing_util::kUnwantedUrlList, 9U, | 506 { safe_browsing_util::kUnwantedUrlList, 8U, |
| 517 &SafeBrowsingDatabase::ContainsUnwantedSoftwareUrl }, | 507 &SafeBrowsingDatabase::ContainsUnwantedSoftwareUrl }, |
| 518 }; | 508 }; |
| 519 | 509 |
| 520 for (const auto& test_case : kTestCases) { | 510 for (const auto& test_case : kTestCases) { |
| 521 SCOPED_TRACE(std::string("Tested list at fault => ") + | 511 SCOPED_TRACE(std::string("Tested list at fault => ") + |
| 522 test_case.test_list_name); | 512 test_case.test_list_name); |
| 523 | 513 |
| 524 std::vector<SBListChunkRanges> lists; | 514 std::vector<SBListChunkRanges> lists; |
| 525 ScopedVector<SBChunkData> chunks; | 515 ScopedVector<SBChunkData> chunks; |
| 526 | 516 |
| (...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1120 // TODO(shess): Disabled until ScopedLogMessageIgnorer resolved. | 1110 // TODO(shess): Disabled until ScopedLogMessageIgnorer resolved. |
| 1121 // http://crbug.com/56448 | 1111 // http://crbug.com/56448 |
| 1122 TEST_F(SafeBrowsingDatabaseTest, DISABLED_FileCorruptionHandling) { | 1112 TEST_F(SafeBrowsingDatabaseTest, DISABLED_FileCorruptionHandling) { |
| 1123 // Re-create the database in a captive message loop so that we can | 1113 // Re-create the database in a captive message loop so that we can |
| 1124 // influence task-posting. Database specifically needs to the | 1114 // influence task-posting. Database specifically needs to the |
| 1125 // file-backed. | 1115 // file-backed. |
| 1126 database_.reset(); | 1116 database_.reset(); |
| 1127 base::MessageLoop loop; | 1117 base::MessageLoop loop; |
| 1128 SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile(task_runner_); | 1118 SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile(task_runner_); |
| 1129 database_.reset(new SafeBrowsingDatabaseNew( | 1119 database_.reset(new SafeBrowsingDatabaseNew( |
| 1130 task_runner_, store, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)); | 1120 task_runner_, store, NULL, NULL, NULL, NULL, NULL, NULL, NULL)); |
| 1131 database_->Init(database_filename_); | 1121 database_->Init(database_filename_); |
| 1132 | 1122 |
| 1133 // This will cause an empty database to be created. | 1123 // This will cause an empty database to be created. |
| 1134 std::vector<SBListChunkRanges> lists; | 1124 std::vector<SBListChunkRanges> lists; |
| 1135 ASSERT_TRUE(database_->UpdateStarted(&lists)); | 1125 ASSERT_TRUE(database_->UpdateStarted(&lists)); |
| 1136 database_->UpdateFinished(true); | 1126 database_->UpdateFinished(true); |
| 1137 | 1127 |
| 1138 // Create a sub chunk to insert. | 1128 // Create a sub chunk to insert. |
| 1139 ScopedVector<SBChunkData> chunks; | 1129 ScopedVector<SBChunkData> chunks; |
| 1140 chunks.push_back(SubChunkPrefixValue(7, | 1130 chunks.push_back(SubChunkPrefixValue(7, |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1295 &SafeBrowsingDatabase::ContainsDownloadWhitelistedUrl, | 1285 &SafeBrowsingDatabase::ContainsDownloadWhitelistedUrl, |
| 1296 &SafeBrowsingDatabase::ContainsDownloadWhitelistedString}, | 1286 &SafeBrowsingDatabase::ContainsDownloadWhitelistedString}, |
| 1297 {safe_browsing_util::kInclusionWhitelist, | 1287 {safe_browsing_util::kInclusionWhitelist, |
| 1298 &SafeBrowsingDatabase::ContainsInclusionWhitelistedUrl, | 1288 &SafeBrowsingDatabase::ContainsInclusionWhitelistedUrl, |
| 1299 nullptr}, | 1289 nullptr}, |
| 1300 }; | 1290 }; |
| 1301 | 1291 |
| 1302 // If the whitelist is disabled everything should match the whitelist. | 1292 // If the whitelist is disabled everything should match the whitelist. |
| 1303 database_.reset(new SafeBrowsingDatabaseNew( | 1293 database_.reset(new SafeBrowsingDatabaseNew( |
| 1304 task_runner_, new SafeBrowsingStoreFile(task_runner_), NULL, NULL, NULL, | 1294 task_runner_, new SafeBrowsingStoreFile(task_runner_), NULL, NULL, NULL, |
| 1305 NULL, NULL, NULL, NULL, NULL)); | 1295 NULL, NULL, NULL, NULL)); |
| 1306 database_->Init(database_filename_); | 1296 database_->Init(database_filename_); |
| 1307 for (const auto& test_case : kTestCases) { | 1297 for (const auto& test_case : kTestCases) { |
| 1308 SCOPED_TRACE(std::string("Tested list at fault => ") + | 1298 SCOPED_TRACE(std::string("Tested list at fault => ") + |
| 1309 test_case.test_list_name); | 1299 test_case.test_list_name); |
| 1310 | 1300 |
| 1311 EXPECT_TRUE( | 1301 EXPECT_TRUE( |
| 1312 (database_.get()->*test_case.test_list_contains_whitelisted_url)( | 1302 (database_.get()->*test_case.test_list_contains_whitelisted_url)( |
| 1313 GURL(std::string("http://www.phishing.com/")))); | 1303 GURL(std::string("http://www.phishing.com/")))); |
| 1314 if (test_case.TestStrings()) { | 1304 if (test_case.TestStrings()) { |
| 1315 EXPECT_TRUE( | 1305 EXPECT_TRUE( |
| (...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2243 GURL(std::string("http://") + kExampleCollision), | 2233 GURL(std::string("http://") + kExampleCollision), |
| 2244 &prefix_hits, &cache_hits)); | 2234 &prefix_hits, &cache_hits)); |
| 2245 ASSERT_EQ(1U, prefix_hits.size()); | 2235 ASSERT_EQ(1U, prefix_hits.size()); |
| 2246 EXPECT_EQ(SBPrefixForString(kExampleCollision), prefix_hits[0]); | 2236 EXPECT_EQ(SBPrefixForString(kExampleCollision), prefix_hits[0]); |
| 2247 EXPECT_TRUE(cache_hits.empty()); | 2237 EXPECT_TRUE(cache_hits.empty()); |
| 2248 | 2238 |
| 2249 // This prefix collides, but no full hash match. | 2239 // This prefix collides, but no full hash match. |
| 2250 EXPECT_FALSE(database_->ContainsBrowseUrl( | 2240 EXPECT_FALSE(database_->ContainsBrowseUrl( |
| 2251 GURL(std::string("http://") + kExampleFine), &prefix_hits, &cache_hits)); | 2241 GURL(std::string("http://") + kExampleFine), &prefix_hits, &cache_hits)); |
| 2252 } | 2242 } |
| OLD | NEW |