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 #include "chrome/browser/safe_browsing/safe_browsing_database.h" | 5 #include "chrome/browser/safe_browsing/safe_browsing_database.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <iterator> | 8 #include <iterator> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 1329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1340 const base::FilePath& store_filename, | 1340 const base::FilePath& store_filename, |
1341 SafeBrowsingStore* store, | 1341 SafeBrowsingStore* store, |
1342 SBWhitelist* whitelist) { | 1342 SBWhitelist* whitelist) { |
1343 if (!store) | 1343 if (!store) |
1344 return; | 1344 return; |
1345 | 1345 |
1346 // For the whitelists, we don't cache and save full hashes since all | 1346 // For the whitelists, we don't cache and save full hashes since all |
1347 // hashes are already full. | 1347 // hashes are already full. |
1348 std::vector<SBAddFullHash> empty_add_hashes; | 1348 std::vector<SBAddFullHash> empty_add_hashes; |
1349 | 1349 |
1350 // Not needed for the whitelists. | |
1351 std::set<SBPrefix> empty_miss_cache; | |
1352 | |
1353 // Note: prefixes will not be empty. The current data store implementation | 1350 // Note: prefixes will not be empty. The current data store implementation |
1354 // stores all full-length hashes as both full and prefix hashes. | 1351 // stores all full-length hashes as both full and prefix hashes. |
1355 SBAddPrefixes prefixes; | 1352 SBAddPrefixes prefixes; |
1356 std::vector<SBAddFullHash> full_hashes; | 1353 std::vector<SBAddFullHash> full_hashes; |
1357 if (!store->FinishUpdate(empty_add_hashes, empty_miss_cache, &prefixes, | 1354 if (!store->FinishUpdate(empty_add_hashes, &prefixes, &full_hashes)) { |
1358 &full_hashes)) { | |
1359 RecordFailure(FAILURE_WHITELIST_DATABASE_UPDATE_FINISH); | 1355 RecordFailure(FAILURE_WHITELIST_DATABASE_UPDATE_FINISH); |
1360 WhitelistEverything(whitelist); | 1356 WhitelistEverything(whitelist); |
1361 return; | 1357 return; |
1362 } | 1358 } |
1363 | 1359 |
1364 #if defined(OS_MACOSX) | 1360 #if defined(OS_MACOSX) |
1365 base::mac::SetFileBackupExclusion(store_filename); | 1361 base::mac::SetFileBackupExclusion(store_filename); |
1366 #endif | 1362 #endif |
1367 | 1363 |
1368 LoadWhitelist(full_hashes, whitelist); | 1364 LoadWhitelist(full_hashes, whitelist); |
1369 } | 1365 } |
1370 | 1366 |
1371 int64 SafeBrowsingDatabaseNew::UpdateHashPrefixStore( | 1367 int64 SafeBrowsingDatabaseNew::UpdateHashPrefixStore( |
1372 const base::FilePath& store_filename, | 1368 const base::FilePath& store_filename, |
1373 SafeBrowsingStore* store, | 1369 SafeBrowsingStore* store, |
1374 FailureType failure_type) { | 1370 FailureType failure_type) { |
1375 // We don't cache and save full hashes. | 1371 // We don't cache and save full hashes. |
1376 std::vector<SBAddFullHash> empty_add_hashes; | 1372 std::vector<SBAddFullHash> empty_add_hashes; |
1377 | 1373 |
1378 // Backend lookup happens only if a prefix is in add list. | |
1379 std::set<SBPrefix> empty_miss_cache; | |
1380 | |
1381 // These results are not used after this call. Simply ignore the | 1374 // These results are not used after this call. Simply ignore the |
1382 // returned value after FinishUpdate(...). | 1375 // returned value after FinishUpdate(...). |
1383 SBAddPrefixes add_prefixes_result; | 1376 SBAddPrefixes add_prefixes_result; |
1384 std::vector<SBAddFullHash> add_full_hashes_result; | 1377 std::vector<SBAddFullHash> add_full_hashes_result; |
1385 | 1378 |
1386 if (!store->FinishUpdate(empty_add_hashes, | 1379 if (!store->FinishUpdate(empty_add_hashes, |
1387 empty_miss_cache, | |
1388 &add_prefixes_result, | 1380 &add_prefixes_result, |
1389 &add_full_hashes_result)) { | 1381 &add_full_hashes_result)) { |
1390 RecordFailure(failure_type); | 1382 RecordFailure(failure_type); |
1391 } | 1383 } |
1392 | 1384 |
1393 #if defined(OS_MACOSX) | 1385 #if defined(OS_MACOSX) |
1394 base::mac::SetFileBackupExclusion(store_filename); | 1386 base::mac::SetFileBackupExclusion(store_filename); |
1395 #endif | 1387 #endif |
1396 | 1388 |
1397 return GetFileSizeOrZero(store_filename); | 1389 return GetFileSizeOrZero(store_filename); |
(...skipping 24 matching lines...) Expand all Loading... |
1422 | 1414 |
1423 // IoCounters are currently not supported on Mac, and may not be | 1415 // IoCounters are currently not supported on Mac, and may not be |
1424 // available for Linux, so we check the result and only show IO | 1416 // available for Linux, so we check the result and only show IO |
1425 // stats if they are available. | 1417 // stats if they are available. |
1426 const bool got_counters = metric->GetIOCounters(&io_before); | 1418 const bool got_counters = metric->GetIOCounters(&io_before); |
1427 | 1419 |
1428 const base::TimeTicks before = base::TimeTicks::Now(); | 1420 const base::TimeTicks before = base::TimeTicks::Now(); |
1429 | 1421 |
1430 SBAddPrefixes add_prefixes; | 1422 SBAddPrefixes add_prefixes; |
1431 std::vector<SBAddFullHash> add_full_hashes; | 1423 std::vector<SBAddFullHash> add_full_hashes; |
1432 if (!browse_store_->FinishUpdate(pending_add_hashes, prefix_miss_cache_, | 1424 if (!browse_store_->FinishUpdate(pending_add_hashes, |
1433 &add_prefixes, &add_full_hashes)) { | 1425 &add_prefixes, &add_full_hashes)) { |
1434 RecordFailure(FAILURE_BROWSE_DATABASE_UPDATE_FINISH); | 1426 RecordFailure(FAILURE_BROWSE_DATABASE_UPDATE_FINISH); |
1435 return; | 1427 return; |
1436 } | 1428 } |
1437 | 1429 |
1438 // TODO(shess): If |add_prefixes| were sorted by the prefix, it | 1430 // TODO(shess): If |add_prefixes| were sorted by the prefix, it |
1439 // could be passed directly to |PrefixSet()|, removing the need for | 1431 // could be passed directly to |PrefixSet()|, removing the need for |
1440 // |prefixes|. For now, |prefixes| is useful while debugging | 1432 // |prefixes|. For now, |prefixes| is useful while debugging |
1441 // things. | 1433 // things. |
1442 std::vector<SBPrefix> prefixes; | 1434 std::vector<SBPrefix> prefixes; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1501 UMA_HISTOGRAM_COUNTS("SB2.BrowseDatabaseKilobytes", | 1493 UMA_HISTOGRAM_COUNTS("SB2.BrowseDatabaseKilobytes", |
1502 static_cast<int>(file_size / 1024)); | 1494 static_cast<int>(file_size / 1024)); |
1503 | 1495 |
1504 #if defined(OS_MACOSX) | 1496 #if defined(OS_MACOSX) |
1505 base::mac::SetFileBackupExclusion(browse_filename_); | 1497 base::mac::SetFileBackupExclusion(browse_filename_); |
1506 #endif | 1498 #endif |
1507 } | 1499 } |
1508 | 1500 |
1509 void SafeBrowsingDatabaseNew::UpdateSideEffectFreeWhitelistStore() { | 1501 void SafeBrowsingDatabaseNew::UpdateSideEffectFreeWhitelistStore() { |
1510 std::vector<SBAddFullHash> empty_add_hashes; | 1502 std::vector<SBAddFullHash> empty_add_hashes; |
1511 std::set<SBPrefix> empty_miss_cache; | |
1512 SBAddPrefixes add_prefixes; | 1503 SBAddPrefixes add_prefixes; |
1513 std::vector<SBAddFullHash> add_full_hashes_result; | 1504 std::vector<SBAddFullHash> add_full_hashes_result; |
1514 | 1505 |
1515 if (!side_effect_free_whitelist_store_->FinishUpdate( | 1506 if (!side_effect_free_whitelist_store_->FinishUpdate( |
1516 empty_add_hashes, | 1507 empty_add_hashes, |
1517 empty_miss_cache, | |
1518 &add_prefixes, | 1508 &add_prefixes, |
1519 &add_full_hashes_result)) { | 1509 &add_full_hashes_result)) { |
1520 RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_FINISH); | 1510 RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_FINISH); |
1521 return; | 1511 return; |
1522 } | 1512 } |
1523 | 1513 |
1524 // TODO(shess): If |add_prefixes| were sorted by the prefix, it | 1514 // TODO(shess): If |add_prefixes| were sorted by the prefix, it |
1525 // could be passed directly to |PrefixSet()|, removing the need for | 1515 // could be passed directly to |PrefixSet()|, removing the need for |
1526 // |prefixes|. For now, |prefixes| is useful while debugging | 1516 // |prefixes|. For now, |prefixes| is useful while debugging |
1527 // things. | 1517 // things. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1568 base::mac::SetFileBackupExclusion( | 1558 base::mac::SetFileBackupExclusion( |
1569 side_effect_free_whitelist_prefix_set_filename_); | 1559 side_effect_free_whitelist_prefix_set_filename_); |
1570 #endif | 1560 #endif |
1571 } | 1561 } |
1572 | 1562 |
1573 void SafeBrowsingDatabaseNew::UpdateIpBlacklistStore() { | 1563 void SafeBrowsingDatabaseNew::UpdateIpBlacklistStore() { |
1574 // For the IP blacklist, we don't cache and save full hashes since all | 1564 // For the IP blacklist, we don't cache and save full hashes since all |
1575 // hashes are already full. | 1565 // hashes are already full. |
1576 std::vector<SBAddFullHash> empty_add_hashes; | 1566 std::vector<SBAddFullHash> empty_add_hashes; |
1577 | 1567 |
1578 // Not needed for the IP blacklist. | |
1579 std::set<SBPrefix> empty_miss_cache; | |
1580 | |
1581 // Note: prefixes will not be empty. The current data store implementation | 1568 // Note: prefixes will not be empty. The current data store implementation |
1582 // stores all full-length hashes as both full and prefix hashes. | 1569 // stores all full-length hashes as both full and prefix hashes. |
1583 SBAddPrefixes prefixes; | 1570 SBAddPrefixes prefixes; |
1584 std::vector<SBAddFullHash> full_hashes; | 1571 std::vector<SBAddFullHash> full_hashes; |
1585 if (!ip_blacklist_store_->FinishUpdate(empty_add_hashes, empty_miss_cache, | 1572 if (!ip_blacklist_store_->FinishUpdate(empty_add_hashes, |
1586 &prefixes, &full_hashes)) { | 1573 &prefixes, &full_hashes)) { |
1587 RecordFailure(FAILURE_IP_BLACKLIST_UPDATE_FINISH); | 1574 RecordFailure(FAILURE_IP_BLACKLIST_UPDATE_FINISH); |
1588 LoadIpBlacklist(std::vector<SBAddFullHash>()); // Clear the list. | 1575 LoadIpBlacklist(std::vector<SBAddFullHash>()); // Clear the list. |
1589 return; | 1576 return; |
1590 } | 1577 } |
1591 | 1578 |
1592 #if defined(OS_MACOSX) | 1579 #if defined(OS_MACOSX) |
1593 base::mac::SetFileBackupExclusion(ip_blacklist_filename_); | 1580 base::mac::SetFileBackupExclusion(ip_blacklist_filename_); |
1594 #endif | 1581 #endif |
1595 | 1582 |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1796 } | 1783 } |
1797 | 1784 |
1798 bool SafeBrowsingDatabaseNew::IsMalwareIPMatchKillSwitchOn() { | 1785 bool SafeBrowsingDatabaseNew::IsMalwareIPMatchKillSwitchOn() { |
1799 SBFullHash malware_kill_switch; | 1786 SBFullHash malware_kill_switch; |
1800 crypto::SHA256HashString(kMalwareIPKillSwitchUrl, &malware_kill_switch, | 1787 crypto::SHA256HashString(kMalwareIPKillSwitchUrl, &malware_kill_switch, |
1801 sizeof(malware_kill_switch)); | 1788 sizeof(malware_kill_switch)); |
1802 std::vector<SBFullHash> full_hashes; | 1789 std::vector<SBFullHash> full_hashes; |
1803 full_hashes.push_back(malware_kill_switch); | 1790 full_hashes.push_back(malware_kill_switch); |
1804 return ContainsWhitelistedHashes(csd_whitelist_, full_hashes); | 1791 return ContainsWhitelistedHashes(csd_whitelist_, full_hashes); |
1805 } | 1792 } |
OLD | NEW |