| 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 <stddef.h> | 9 #include <stddef.h> |
| 10 | 10 |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 // stores enabled. | 269 // stores enabled. |
| 270 void ResetAndReloadFullDatabase() { | 270 void ResetAndReloadFullDatabase() { |
| 271 SafeBrowsingStoreFile* browse_store = | 271 SafeBrowsingStoreFile* browse_store = |
| 272 new SafeBrowsingStoreFile(task_runner_); | 272 new SafeBrowsingStoreFile(task_runner_); |
| 273 SafeBrowsingStoreFile* download_store = | 273 SafeBrowsingStoreFile* download_store = |
| 274 new SafeBrowsingStoreFile(task_runner_); | 274 new SafeBrowsingStoreFile(task_runner_); |
| 275 SafeBrowsingStoreFile* csd_whitelist_store = | 275 SafeBrowsingStoreFile* csd_whitelist_store = |
| 276 new SafeBrowsingStoreFile(task_runner_); | 276 new SafeBrowsingStoreFile(task_runner_); |
| 277 SafeBrowsingStoreFile* download_whitelist_store = | 277 SafeBrowsingStoreFile* download_whitelist_store = |
| 278 new SafeBrowsingStoreFile(task_runner_); | 278 new SafeBrowsingStoreFile(task_runner_); |
| 279 SafeBrowsingStoreFile* inclusion_whitelist_store = | |
| 280 new SafeBrowsingStoreFile(task_runner_); | |
| 281 SafeBrowsingStoreFile* extension_blacklist_store = | 279 SafeBrowsingStoreFile* extension_blacklist_store = |
| 282 new SafeBrowsingStoreFile(task_runner_); | 280 new SafeBrowsingStoreFile(task_runner_); |
| 283 SafeBrowsingStoreFile* ip_blacklist_store = | 281 SafeBrowsingStoreFile* ip_blacklist_store = |
| 284 new SafeBrowsingStoreFile(task_runner_); | 282 new SafeBrowsingStoreFile(task_runner_); |
| 285 SafeBrowsingStoreFile* unwanted_software_store = | 283 SafeBrowsingStoreFile* unwanted_software_store = |
| 286 new SafeBrowsingStoreFile(task_runner_); | 284 new SafeBrowsingStoreFile(task_runner_); |
| 287 SafeBrowsingStoreFile* module_whitelist_store = | 285 SafeBrowsingStoreFile* module_whitelist_store = |
| 288 new SafeBrowsingStoreFile(task_runner_); | 286 new SafeBrowsingStoreFile(task_runner_); |
| 289 SafeBrowsingStoreFile* resource_blacklist_store = | 287 SafeBrowsingStoreFile* resource_blacklist_store = |
| 290 new SafeBrowsingStoreFile(task_runner_); | 288 new SafeBrowsingStoreFile(task_runner_); |
| 291 database_.reset(new SafeBrowsingDatabaseNew( | 289 database_.reset(new SafeBrowsingDatabaseNew( |
| 292 task_runner_, browse_store, download_store, csd_whitelist_store, | 290 task_runner_, |
| 293 download_whitelist_store, inclusion_whitelist_store, | 291 browse_store, |
| 294 extension_blacklist_store, ip_blacklist_store, unwanted_software_store, | 292 download_store, |
| 295 module_whitelist_store, resource_blacklist_store)); | 293 csd_whitelist_store, |
| 294 download_whitelist_store, |
| 295 extension_blacklist_store, |
| 296 ip_blacklist_store, |
| 297 unwanted_software_store, |
| 298 module_whitelist_store, |
| 299 resource_blacklist_store)); |
| 296 database_->Init(database_filename_); | 300 database_->Init(database_filename_); |
| 297 } | 301 } |
| 298 | 302 |
| 299 bool ContainsDownloadUrl(const std::vector<GURL>& urls, | 303 bool ContainsDownloadUrl(const std::vector<GURL>& urls, |
| 300 std::vector<SBPrefix>* prefix_hits) { | 304 std::vector<SBPrefix>* prefix_hits) { |
| 301 std::vector<SBPrefix> prefixes; | 305 std::vector<SBPrefix> prefixes; |
| 302 SafeBrowsingDatabase::GetDownloadUrlPrefixes(urls, &prefixes); | 306 SafeBrowsingDatabase::GetDownloadUrlPrefixes(urls, &prefixes); |
| 303 return database_->ContainsDownloadUrlPrefixes(prefixes, prefix_hits); | 307 return database_->ContainsDownloadUrlPrefixes(prefixes, prefix_hits); |
| 304 } | 308 } |
| 305 | 309 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 | 428 |
| 425 chunks.clear(); | 429 chunks.clear(); |
| 426 chunks.push_back(AddChunkPrefixValue(2, "www.foo.com/malware.html")); | 430 chunks.push_back(AddChunkPrefixValue(2, "www.foo.com/malware.html")); |
| 427 database_->InsertChunks(kPhishingList, chunks); | 431 database_->InsertChunks(kPhishingList, chunks); |
| 428 | 432 |
| 429 chunks.clear(); | 433 chunks.clear(); |
| 430 chunks.push_back(AddChunkPrefixValue(3, "www.whatever.com/download.html")); | 434 chunks.push_back(AddChunkPrefixValue(3, "www.whatever.com/download.html")); |
| 431 database_->InsertChunks(kBinUrlList, chunks); | 435 database_->InsertChunks(kBinUrlList, chunks); |
| 432 | 436 |
| 433 chunks.clear(); | 437 chunks.clear(); |
| 434 chunks.push_back(AddChunkFullHashValue(5, "www.forwhitelist.com/a.html")); | 438 chunks.push_back(AddChunkFullHashValue(4, "www.forwhitelist.com/a.html")); |
| 435 database_->InsertChunks(kCsdWhiteList, chunks); | 439 database_->InsertChunks(kCsdWhiteList, chunks); |
| 436 | 440 |
| 437 chunks.clear(); | 441 chunks.clear(); |
| 438 chunks.push_back(AddChunkFullHashValue(6, "www.download.com/")); | 442 chunks.push_back(AddChunkFullHashValue(5, "www.download.com/")); |
| 439 database_->InsertChunks(kDownloadWhiteList, chunks); | 443 database_->InsertChunks(kDownloadWhiteList, chunks); |
| 440 | 444 |
| 441 chunks.clear(); | 445 chunks.clear(); |
| 442 chunks.push_back(AddChunkFullHashValue(7, "www.inclusion.com/")); | 446 chunks.push_back(AddChunkFullHashValue(6, |
| 443 database_->InsertChunks(kInclusionWhitelist, | |
| 444 chunks); | |
| 445 | |
| 446 chunks.clear(); | |
| 447 chunks.push_back(AddChunkFullHashValue(8, | |
| 448 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | 447 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 449 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); | 448 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); |
| 450 database_->InsertChunks(kExtensionBlacklist, | 449 database_->InsertChunks(kExtensionBlacklist, |
| 451 chunks); | 450 chunks); |
| 452 | 451 |
| 453 chunks.clear(); | 452 chunks.clear(); |
| 454 chunks.push_back(AddChunkHashedIpValue(10, "::ffff:192.168.1.0", 120)); | 453 chunks.push_back(AddChunkHashedIpValue(7, "::ffff:192.168.1.0", 120)); |
| 455 database_->InsertChunks(kIPBlacklist, chunks); | 454 database_->InsertChunks(kIPBlacklist, chunks); |
| 456 | 455 |
| 457 chunks.clear(); | 456 chunks.clear(); |
| 458 chunks.push_back(AddChunkPrefixValue(11, "www.unwanted.com/software.html")); | 457 chunks.push_back(AddChunkPrefixValue(8, "www.unwanted.com/software.html")); |
| 459 database_->InsertChunks(kUnwantedUrlList, chunks); | 458 database_->InsertChunks(kUnwantedUrlList, chunks); |
| 460 | 459 |
| 461 chunks.clear(); | 460 chunks.clear(); |
| 462 chunks.push_back(AddChunkPrefixValue(12, "chrome.dll")); | 461 chunks.push_back(AddChunkPrefixValue(9, "chrome.dll")); |
| 463 database_->InsertChunks(kModuleWhitelist, chunks); | 462 database_->InsertChunks(kModuleWhitelist, chunks); |
| 464 | 463 |
| 465 chunks.clear(); | 464 chunks.clear(); |
| 466 chunks.push_back(AddChunkPrefixValue(13, "foo.com/script.js")); | 465 chunks.push_back(AddChunkPrefixValue(10, "foo.com/script.js")); |
| 467 database_->InsertChunks(kResourceBlacklist, chunks); | 466 database_->InsertChunks(kResourceBlacklist, chunks); |
| 468 | 467 |
| 469 database_->UpdateFinished(true); | 468 database_->UpdateFinished(true); |
| 470 | 469 |
| 471 GetListsInfo(&lists); | 470 GetListsInfo(&lists); |
| 472 ASSERT_EQ(11U, lists.size()); | 471 ASSERT_EQ(10U, lists.size()); |
| 473 EXPECT_EQ(kMalwareList, lists[0].name); | 472 EXPECT_EQ(kMalwareList, lists[0].name); |
| 474 EXPECT_EQ("1", lists[0].adds); | 473 EXPECT_EQ("1", lists[0].adds); |
| 475 EXPECT_TRUE(lists[0].subs.empty()); | 474 EXPECT_TRUE(lists[0].subs.empty()); |
| 476 EXPECT_EQ(kPhishingList, lists[1].name); | 475 EXPECT_EQ(kPhishingList, lists[1].name); |
| 477 EXPECT_EQ("2", lists[1].adds); | 476 EXPECT_EQ("2", lists[1].adds); |
| 478 EXPECT_TRUE(lists[1].subs.empty()); | 477 EXPECT_TRUE(lists[1].subs.empty()); |
| 479 EXPECT_EQ(kBinUrlList, lists[2].name); | 478 EXPECT_EQ(kBinUrlList, lists[2].name); |
| 480 EXPECT_EQ("3", lists[2].adds); | 479 EXPECT_EQ("3", lists[2].adds); |
| 481 EXPECT_TRUE(lists[2].subs.empty()); | 480 EXPECT_TRUE(lists[2].subs.empty()); |
| 482 EXPECT_EQ(kCsdWhiteList, lists[3].name); | 481 EXPECT_EQ(kCsdWhiteList, lists[3].name); |
| 483 EXPECT_EQ("5", lists[3].adds); | 482 EXPECT_EQ("4", lists[3].adds); |
| 484 EXPECT_TRUE(lists[3].subs.empty()); | 483 EXPECT_TRUE(lists[3].subs.empty()); |
| 485 EXPECT_EQ(kDownloadWhiteList, lists[4].name); | 484 EXPECT_EQ(kDownloadWhiteList, lists[4].name); |
| 486 EXPECT_EQ("6", lists[4].adds); | 485 EXPECT_EQ("5", lists[4].adds); |
| 487 EXPECT_TRUE(lists[4].subs.empty()); | 486 EXPECT_TRUE(lists[4].subs.empty()); |
| 488 EXPECT_EQ(kInclusionWhitelist, lists[5].name); | 487 EXPECT_EQ(kExtensionBlacklist, lists[5].name); |
| 489 EXPECT_EQ("7", lists[5].adds); | 488 EXPECT_EQ("6", lists[5].adds); |
| 490 EXPECT_TRUE(lists[5].subs.empty()); | 489 EXPECT_TRUE(lists[5].subs.empty()); |
| 491 EXPECT_EQ(kExtensionBlacklist, lists[6].name); | 490 EXPECT_EQ(kIPBlacklist, lists[6].name); |
| 492 EXPECT_EQ("8", lists[6].adds); | 491 EXPECT_EQ("7", lists[6].adds); |
| 493 EXPECT_TRUE(lists[6].subs.empty()); | 492 EXPECT_TRUE(lists[6].subs.empty()); |
| 494 EXPECT_EQ(kIPBlacklist, lists[7].name); | 493 EXPECT_EQ(kUnwantedUrlList, lists[7].name); |
| 495 EXPECT_EQ("10", lists[7].adds); | 494 EXPECT_EQ("8", lists[7].adds); |
| 496 EXPECT_TRUE(lists[7].subs.empty()); | 495 EXPECT_TRUE(lists[7].subs.empty()); |
| 497 EXPECT_EQ(kUnwantedUrlList, lists[8].name); | 496 EXPECT_EQ(kModuleWhitelist, lists[8].name); |
| 498 EXPECT_EQ("11", lists[8].adds); | 497 EXPECT_EQ("9", lists[8].adds); |
| 499 EXPECT_TRUE(lists[8].subs.empty()); | 498 EXPECT_TRUE(lists[8].subs.empty()); |
| 500 EXPECT_EQ(kModuleWhitelist, lists[9].name); | 499 EXPECT_EQ(kResourceBlacklist, lists[9].name); |
| 501 EXPECT_EQ("12", lists[9].adds); | 500 EXPECT_EQ("10", lists[9].adds); |
| 502 EXPECT_TRUE(lists[9].subs.empty()); | 501 EXPECT_TRUE(lists[9].subs.empty()); |
| 503 EXPECT_EQ(kResourceBlacklist, lists[10].name); | |
| 504 EXPECT_EQ("13", lists[10].adds); | |
| 505 EXPECT_TRUE(lists[10].subs.empty()); | |
| 506 | 502 |
| 507 database_.reset(); | 503 database_.reset(); |
| 508 } | 504 } |
| 509 | 505 |
| 510 // Checks database reading and writing for browse and unwanted PrefixSets. | 506 // Checks database reading and writing for browse and unwanted PrefixSets. |
| 511 TEST_F(SafeBrowsingDatabaseTest, BrowseAndUnwantedDatabasesAndPrefixSets) { | 507 TEST_F(SafeBrowsingDatabaseTest, BrowseAndUnwantedDatabasesAndPrefixSets) { |
| 512 | 508 |
| 513 struct TestCase { | 509 struct TestCase { |
| 514 using TestListContainsBadUrl = bool (SafeBrowsingDatabase::*)( | 510 using TestListContainsBadUrl = bool (SafeBrowsingDatabase::*)( |
| 515 const GURL& url, | 511 const GURL& url, |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 560 &SafeBrowsingDatabase::ContainsBrowseHashes | 556 &SafeBrowsingDatabase::ContainsBrowseHashes |
| 561 }, | 557 }, |
| 562 { | 558 { |
| 563 kPhishingList, | 559 kPhishingList, |
| 564 1U, | 560 1U, |
| 565 &SafeBrowsingDatabase::ContainsBrowseUrl, | 561 &SafeBrowsingDatabase::ContainsBrowseUrl, |
| 566 &SafeBrowsingDatabase::ContainsBrowseHashes | 562 &SafeBrowsingDatabase::ContainsBrowseHashes |
| 567 }, | 563 }, |
| 568 { | 564 { |
| 569 kUnwantedUrlList, | 565 kUnwantedUrlList, |
| 570 8U, | 566 7U, |
| 571 &SafeBrowsingDatabase::ContainsUnwantedSoftwareUrl, | 567 &SafeBrowsingDatabase::ContainsUnwantedSoftwareUrl, |
| 572 &SafeBrowsingDatabase::ContainsUnwantedSoftwareHashes | 568 &SafeBrowsingDatabase::ContainsUnwantedSoftwareHashes |
| 573 }, | 569 }, |
| 574 }; | 570 }; |
| 575 | 571 |
| 576 for (const auto& test_case : kTestCases) { | 572 for (const auto& test_case : kTestCases) { |
| 577 SCOPED_TRACE(std::string("Tested list at fault => ") + | 573 SCOPED_TRACE(std::string("Tested list at fault => ") + |
| 578 test_case.test_list_name); | 574 test_case.test_list_name); |
| 579 | 575 |
| 580 std::vector<SBListChunkRanges> lists; | 576 std::vector<SBListChunkRanges> lists; |
| (...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1178 // TODO(shess): Disabled until ScopedLogMessageIgnorer resolved. | 1174 // TODO(shess): Disabled until ScopedLogMessageIgnorer resolved. |
| 1179 // http://crbug.com/56448 | 1175 // http://crbug.com/56448 |
| 1180 TEST_F(SafeBrowsingDatabaseTest, DISABLED_FileCorruptionHandling) { | 1176 TEST_F(SafeBrowsingDatabaseTest, DISABLED_FileCorruptionHandling) { |
| 1181 // Re-create the database in a captive message loop so that we can | 1177 // Re-create the database in a captive message loop so that we can |
| 1182 // influence task-posting. Database specifically needs to the | 1178 // influence task-posting. Database specifically needs to the |
| 1183 // file-backed. | 1179 // file-backed. |
| 1184 database_.reset(); | 1180 database_.reset(); |
| 1185 base::MessageLoop loop; | 1181 base::MessageLoop loop; |
| 1186 SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile(task_runner_); | 1182 SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile(task_runner_); |
| 1187 database_.reset(new SafeBrowsingDatabaseNew( | 1183 database_.reset(new SafeBrowsingDatabaseNew( |
| 1188 task_runner_, store, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 1184 task_runner_, store, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)); |
| 1189 NULL)); | |
| 1190 database_->Init(database_filename_); | 1185 database_->Init(database_filename_); |
| 1191 | 1186 |
| 1192 // This will cause an empty database to be created. | 1187 // This will cause an empty database to be created. |
| 1193 std::vector<SBListChunkRanges> lists; | 1188 std::vector<SBListChunkRanges> lists; |
| 1194 ASSERT_TRUE(database_->UpdateStarted(&lists)); | 1189 ASSERT_TRUE(database_->UpdateStarted(&lists)); |
| 1195 database_->UpdateFinished(true); | 1190 database_->UpdateFinished(true); |
| 1196 | 1191 |
| 1197 // Create a sub chunk to insert. | 1192 // Create a sub chunk to insert. |
| 1198 std::vector<std::unique_ptr<SBChunkData>> chunks; | 1193 std::vector<std::unique_ptr<SBChunkData>> chunks; |
| 1199 chunks.push_back(SubChunkPrefixValue(7, | 1194 chunks.push_back(SubChunkPrefixValue(7, |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1390 TestListContainsWhitelistedUrl test_list_contains_whitelisted_url; | 1385 TestListContainsWhitelistedUrl test_list_contains_whitelisted_url; |
| 1391 // Optional test case field, if set the tested whitelist will also be tested | 1386 // Optional test case field, if set the tested whitelist will also be tested |
| 1392 // for strings. | 1387 // for strings. |
| 1393 TestListContainsWhitelistedString test_list_contains_whitelisted_string; | 1388 TestListContainsWhitelistedString test_list_contains_whitelisted_string; |
| 1394 } const kTestCases[]{ | 1389 } const kTestCases[]{ |
| 1395 {kCsdWhiteList, &SafeBrowsingDatabase::ContainsCsdWhitelistedUrl, | 1390 {kCsdWhiteList, &SafeBrowsingDatabase::ContainsCsdWhitelistedUrl, |
| 1396 nullptr}, | 1391 nullptr}, |
| 1397 {kDownloadWhiteList, | 1392 {kDownloadWhiteList, |
| 1398 &SafeBrowsingDatabase::ContainsDownloadWhitelistedUrl, | 1393 &SafeBrowsingDatabase::ContainsDownloadWhitelistedUrl, |
| 1399 &SafeBrowsingDatabase::ContainsDownloadWhitelistedString}, | 1394 &SafeBrowsingDatabase::ContainsDownloadWhitelistedString}, |
| 1400 {kInclusionWhitelist, | |
| 1401 &SafeBrowsingDatabase::ContainsInclusionWhitelistedUrl, nullptr}, | |
| 1402 {kModuleWhitelist, nullptr, | 1395 {kModuleWhitelist, nullptr, |
| 1403 &SafeBrowsingDatabase::ContainsModuleWhitelistedString}, | 1396 &SafeBrowsingDatabase::ContainsModuleWhitelistedString}, |
| 1404 }; | 1397 }; |
| 1405 | 1398 |
| 1406 // If the whitelist is disabled everything should match the whitelist. | 1399 // If the whitelist is disabled everything should match the whitelist. |
| 1407 database_.reset(new SafeBrowsingDatabaseNew( | 1400 database_.reset(new SafeBrowsingDatabaseNew( |
| 1408 task_runner_, new SafeBrowsingStoreFile(task_runner_), NULL, NULL, NULL, | 1401 task_runner_, new SafeBrowsingStoreFile(task_runner_), NULL, NULL, NULL, |
| 1409 NULL, NULL, NULL, NULL, NULL, NULL)); | 1402 NULL, NULL, NULL, NULL, NULL)); |
| 1410 database_->Init(database_filename_); | 1403 database_->Init(database_filename_); |
| 1411 for (const auto& test_case : kTestCases) { | 1404 for (const auto& test_case : kTestCases) { |
| 1412 SCOPED_TRACE(std::string("Tested list at fault => ") + | 1405 SCOPED_TRACE(std::string("Tested list at fault => ") + |
| 1413 test_case.test_list_name); | 1406 test_case.test_list_name); |
| 1414 | 1407 |
| 1415 if (test_case.TestUrls()) { | 1408 if (test_case.TestUrls()) { |
| 1416 EXPECT_TRUE( | 1409 EXPECT_TRUE( |
| 1417 (database_.get()->*test_case.test_list_contains_whitelisted_url)( | 1410 (database_.get()->*test_case.test_list_contains_whitelisted_url)( |
| 1418 GURL(std::string("http://www.phishing.com/")))); | 1411 GURL(std::string("http://www.phishing.com/")))); |
| 1419 } | 1412 } |
| (...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2374 ASSERT_EQ(1U, prefix_hits.size()); | 2367 ASSERT_EQ(1U, prefix_hits.size()); |
| 2375 EXPECT_EQ(SBPrefixForString(kExampleCollision), prefix_hits[0]); | 2368 EXPECT_EQ(SBPrefixForString(kExampleCollision), prefix_hits[0]); |
| 2376 EXPECT_TRUE(cache_hits.empty()); | 2369 EXPECT_TRUE(cache_hits.empty()); |
| 2377 | 2370 |
| 2378 // This prefix collides, but no full hash match. | 2371 // This prefix collides, but no full hash match. |
| 2379 EXPECT_FALSE(database_->ContainsBrowseUrl( | 2372 EXPECT_FALSE(database_->ContainsBrowseUrl( |
| 2380 GURL(std::string("http://") + kExampleFine), &prefix_hits, &cache_hits)); | 2373 GURL(std::string("http://") + kExampleFine), &prefix_hits, &cache_hits)); |
| 2381 } | 2374 } |
| 2382 | 2375 |
| 2383 } // namespace safe_browsing | 2376 } // namespace safe_browsing |
| OLD | NEW |