| 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/local_database_manager.h" | 5 #include "chrome/browser/safe_browsing/local_database_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 SafeBrowsingCheck* check = new SafeBrowsingCheck( | 546 SafeBrowsingCheck* check = new SafeBrowsingCheck( |
| 547 std::vector<GURL>(1, url), std::vector<SBFullHash>(), client, MALWARE, | 547 std::vector<GURL>(1, url), std::vector<SBFullHash>(), client, MALWARE, |
| 548 expected_threats); | 548 expected_threats); |
| 549 check->need_get_hash = cache_hits.empty(); | 549 check->need_get_hash = cache_hits.empty(); |
| 550 check->prefix_hits.swap(prefix_hits); | 550 check->prefix_hits.swap(prefix_hits); |
| 551 check->cache_hits.swap(cache_hits); | 551 check->cache_hits.swap(cache_hits); |
| 552 checks_[check] = base::WrapUnique(check); | 552 checks_[check] = base::WrapUnique(check); |
| 553 | 553 |
| 554 BrowserThread::PostTask( | 554 BrowserThread::PostTask( |
| 555 BrowserThread::IO, FROM_HERE, | 555 BrowserThread::IO, FROM_HERE, |
| 556 base::Bind(&LocalSafeBrowsingDatabaseManager::OnCheckDone, this, check)); | 556 base::BindOnce(&LocalSafeBrowsingDatabaseManager::OnCheckDone, this, |
| 557 check)); |
| 557 | 558 |
| 558 return false; | 559 return false; |
| 559 } | 560 } |
| 560 | 561 |
| 561 bool LocalSafeBrowsingDatabaseManager::CheckUrlForSubresourceFilter( | 562 bool LocalSafeBrowsingDatabaseManager::CheckUrlForSubresourceFilter( |
| 562 const GURL& url, | 563 const GURL& url, |
| 563 Client* client) { | 564 Client* client) { |
| 564 // TODO(melandory): implement Android support. | 565 // TODO(melandory): implement Android support. |
| 565 NOTREACHED(); | 566 NOTREACHED(); |
| 566 return true; | 567 return true; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 613 if (!cache_lifetime.is_zero() && MakeDatabaseAvailable()) | 614 if (!cache_lifetime.is_zero() && MakeDatabaseAvailable()) |
| 614 database_->CacheHashResults(prefixes, full_hashes, cache_lifetime); | 615 database_->CacheHashResults(prefixes, full_hashes, cache_lifetime); |
| 615 } | 616 } |
| 616 | 617 |
| 617 void LocalSafeBrowsingDatabaseManager::GetChunks(GetChunksCallback callback) { | 618 void LocalSafeBrowsingDatabaseManager::GetChunks(GetChunksCallback callback) { |
| 618 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 619 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 619 DCHECK(enabled_); | 620 DCHECK(enabled_); |
| 620 DCHECK(!callback.is_null()); | 621 DCHECK(!callback.is_null()); |
| 621 safe_browsing_task_runner_->PostTask( | 622 safe_browsing_task_runner_->PostTask( |
| 622 FROM_HERE, | 623 FROM_HERE, |
| 623 base::Bind(&LocalSafeBrowsingDatabaseManager::GetAllChunksFromDatabase, | 624 base::BindOnce( |
| 624 this, callback)); | 625 &LocalSafeBrowsingDatabaseManager::GetAllChunksFromDatabase, this, |
| 626 callback)); |
| 625 } | 627 } |
| 626 | 628 |
| 627 void LocalSafeBrowsingDatabaseManager::AddChunks( | 629 void LocalSafeBrowsingDatabaseManager::AddChunks( |
| 628 const std::string& list, | 630 const std::string& list, |
| 629 std::unique_ptr<std::vector<std::unique_ptr<SBChunkData>>> chunks, | 631 std::unique_ptr<std::vector<std::unique_ptr<SBChunkData>>> chunks, |
| 630 AddChunksCallback callback) { | 632 AddChunksCallback callback) { |
| 631 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 633 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 632 DCHECK(enabled_); | 634 DCHECK(enabled_); |
| 633 DCHECK(!callback.is_null()); | 635 DCHECK(!callback.is_null()); |
| 634 safe_browsing_task_runner_->PostTask( | 636 safe_browsing_task_runner_->PostTask( |
| 635 FROM_HERE, | 637 FROM_HERE, |
| 636 base::Bind(&LocalSafeBrowsingDatabaseManager::AddDatabaseChunks, this, | 638 base::BindOnce(&LocalSafeBrowsingDatabaseManager::AddDatabaseChunks, this, |
| 637 list, base::Passed(&chunks), callback)); | 639 list, base::Passed(&chunks), callback)); |
| 638 } | 640 } |
| 639 | 641 |
| 640 void LocalSafeBrowsingDatabaseManager::DeleteChunks( | 642 void LocalSafeBrowsingDatabaseManager::DeleteChunks( |
| 641 std::unique_ptr<std::vector<SBChunkDelete>> chunk_deletes) { | 643 std::unique_ptr<std::vector<SBChunkDelete>> chunk_deletes) { |
| 642 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 644 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 643 DCHECK(enabled_); | 645 DCHECK(enabled_); |
| 644 safe_browsing_task_runner_->PostTask( | 646 safe_browsing_task_runner_->PostTask( |
| 645 FROM_HERE, | 647 FROM_HERE, |
| 646 base::Bind(&LocalSafeBrowsingDatabaseManager::DeleteDatabaseChunks, this, | 648 base::BindOnce(&LocalSafeBrowsingDatabaseManager::DeleteDatabaseChunks, |
| 647 base::Passed(&chunk_deletes))); | 649 this, base::Passed(&chunk_deletes))); |
| 648 } | 650 } |
| 649 | 651 |
| 650 void LocalSafeBrowsingDatabaseManager::UpdateStarted() { | 652 void LocalSafeBrowsingDatabaseManager::UpdateStarted() { |
| 651 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 653 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 652 DCHECK(enabled_); | 654 DCHECK(enabled_); |
| 653 DCHECK(!update_in_progress_); | 655 DCHECK(!update_in_progress_); |
| 654 update_in_progress_ = true; | 656 update_in_progress_ = true; |
| 655 } | 657 } |
| 656 | 658 |
| 657 void LocalSafeBrowsingDatabaseManager::UpdateFinished(bool update_succeeded) { | 659 void LocalSafeBrowsingDatabaseManager::UpdateFinished(bool update_succeeded) { |
| 658 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 660 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 659 DCHECK(enabled_); | 661 DCHECK(enabled_); |
| 660 if (update_in_progress_) { | 662 if (update_in_progress_) { |
| 661 update_in_progress_ = false; | 663 update_in_progress_ = false; |
| 662 safe_browsing_task_runner_->PostTask( | 664 safe_browsing_task_runner_->PostTask( |
| 663 FROM_HERE, | 665 FROM_HERE, |
| 664 base::Bind(&LocalSafeBrowsingDatabaseManager::DatabaseUpdateFinished, | 666 base::BindOnce( |
| 665 this, update_succeeded)); | 667 &LocalSafeBrowsingDatabaseManager::DatabaseUpdateFinished, this, |
| 668 update_succeeded)); |
| 666 } | 669 } |
| 667 } | 670 } |
| 668 | 671 |
| 669 void LocalSafeBrowsingDatabaseManager::ResetDatabase() { | 672 void LocalSafeBrowsingDatabaseManager::ResetDatabase() { |
| 670 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 673 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 671 DCHECK(enabled_); | 674 DCHECK(enabled_); |
| 672 safe_browsing_task_runner_->PostTask( | 675 safe_browsing_task_runner_->PostTask( |
| 673 FROM_HERE, | 676 FROM_HERE, |
| 674 base::Bind(&LocalSafeBrowsingDatabaseManager::OnResetDatabase, this)); | 677 base::BindOnce(&LocalSafeBrowsingDatabaseManager::OnResetDatabase, this)); |
| 675 } | 678 } |
| 676 | 679 |
| 677 void LocalSafeBrowsingDatabaseManager::StartOnIOThread( | 680 void LocalSafeBrowsingDatabaseManager::StartOnIOThread( |
| 678 net::URLRequestContextGetter* request_context_getter, | 681 net::URLRequestContextGetter* request_context_getter, |
| 679 const V4ProtocolConfig& config) { | 682 const V4ProtocolConfig& config) { |
| 680 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 683 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 681 SafeBrowsingDatabaseManager::StartOnIOThread(request_context_getter, config); | 684 SafeBrowsingDatabaseManager::StartOnIOThread(request_context_getter, config); |
| 682 | 685 |
| 683 if (enabled_) | 686 if (enabled_) |
| 684 return; | 687 return; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 // * If |database_| is NULL, then either no creation request is in flight, in | 767 // * If |database_| is NULL, then either no creation request is in flight, in |
| 765 // which case we don't need to do anything, or one is in flight, in which | 768 // which case we don't need to do anything, or one is in flight, in which |
| 766 // case the database will be recreated before our deletion request is | 769 // case the database will be recreated before our deletion request is |
| 767 // handled, and could be used on the IO thread in that time period, leading | 770 // handled, and could be used on the IO thread in that time period, leading |
| 768 // to the same problem as above. | 771 // to the same problem as above. |
| 769 // Checking DatabaseAvailable() avoids both of these. | 772 // Checking DatabaseAvailable() avoids both of these. |
| 770 if (DatabaseAvailable()) { | 773 if (DatabaseAvailable()) { |
| 771 closing_database_ = true; | 774 closing_database_ = true; |
| 772 safe_browsing_task_runner_->PostTask( | 775 safe_browsing_task_runner_->PostTask( |
| 773 FROM_HERE, | 776 FROM_HERE, |
| 774 base::Bind(&LocalSafeBrowsingDatabaseManager::OnCloseDatabase, this)); | 777 base::BindOnce(&LocalSafeBrowsingDatabaseManager::OnCloseDatabase, |
| 778 this)); |
| 775 } | 779 } |
| 776 | 780 |
| 777 // Delete pending checks, calling back any clients with 'SB_THREAT_TYPE_SAFE'. | 781 // Delete pending checks, calling back any clients with 'SB_THREAT_TYPE_SAFE'. |
| 778 // We have to do this after the db thread returns because methods on it can | 782 // We have to do this after the db thread returns because methods on it can |
| 779 // have copies of these pointers, so deleting them might lead to accessing | 783 // have copies of these pointers, so deleting them might lead to accessing |
| 780 // garbage. | 784 // garbage. |
| 781 for (const auto& check : checks_) { | 785 for (const auto& check : checks_) { |
| 782 if (check.first->client) | 786 if (check.first->client) |
| 783 check.first->OnSafeBrowsingResult(); | 787 check.first->OnSafeBrowsingResult(); |
| 784 } | 788 } |
| 785 | 789 |
| 786 checks_.clear(); | 790 checks_.clear(); |
| 787 gethash_requests_.clear(); | 791 gethash_requests_.clear(); |
| 788 } | 792 } |
| 789 | 793 |
| 790 bool LocalSafeBrowsingDatabaseManager::DatabaseAvailable() const { | 794 bool LocalSafeBrowsingDatabaseManager::DatabaseAvailable() const { |
| 791 base::AutoLock lock(database_lock_); | 795 base::AutoLock lock(database_lock_); |
| 792 return !closing_database_ && (database_ != NULL); | 796 return !closing_database_ && (database_ != NULL); |
| 793 } | 797 } |
| 794 | 798 |
| 795 bool LocalSafeBrowsingDatabaseManager::MakeDatabaseAvailable() { | 799 bool LocalSafeBrowsingDatabaseManager::MakeDatabaseAvailable() { |
| 796 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 800 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 797 DCHECK(enabled_); | 801 DCHECK(enabled_); |
| 798 if (DatabaseAvailable()) | 802 if (DatabaseAvailable()) |
| 799 return true; | 803 return true; |
| 800 safe_browsing_task_runner_->PostTask( | 804 safe_browsing_task_runner_->PostTask( |
| 801 FROM_HERE, base::Bind(base::IgnoreResult( | 805 FROM_HERE, |
| 802 &LocalSafeBrowsingDatabaseManager::GetDatabase), | 806 base::BindOnce( |
| 803 this)); | 807 base::IgnoreResult(&LocalSafeBrowsingDatabaseManager::GetDatabase), |
| 808 this)); |
| 804 return false; | 809 return false; |
| 805 } | 810 } |
| 806 | 811 |
| 807 SafeBrowsingDatabase* LocalSafeBrowsingDatabaseManager::GetDatabase() { | 812 SafeBrowsingDatabase* LocalSafeBrowsingDatabaseManager::GetDatabase() { |
| 808 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 813 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); |
| 809 | 814 |
| 810 if (database_) | 815 if (database_) |
| 811 return database_; | 816 return database_; |
| 812 | 817 |
| 813 const base::TimeTicks before = base::TimeTicks::Now(); | 818 const base::TimeTicks before = base::TimeTicks::Now(); |
| 814 std::unique_ptr<SafeBrowsingDatabase> database = SafeBrowsingDatabase::Create( | 819 std::unique_ptr<SafeBrowsingDatabase> database = SafeBrowsingDatabase::Create( |
| 815 safe_browsing_task_runner_, enable_download_protection_, | 820 safe_browsing_task_runner_, enable_download_protection_, |
| 816 enable_csd_whitelist_, enable_download_whitelist_, | 821 enable_csd_whitelist_, enable_download_whitelist_, |
| 817 enable_extension_blacklist_, enable_ip_blacklist_, | 822 enable_extension_blacklist_, enable_ip_blacklist_, |
| 818 enable_unwanted_software_blacklist_, enable_module_whitelist_); | 823 enable_unwanted_software_blacklist_, enable_module_whitelist_); |
| 819 | 824 |
| 820 database->Init(SafeBrowsingService::GetBaseFilename()); | 825 database->Init(SafeBrowsingService::GetBaseFilename()); |
| 821 { | 826 { |
| 822 // Acquiring the lock here guarantees correct ordering between the writes to | 827 // Acquiring the lock here guarantees correct ordering between the writes to |
| 823 // the new database object above, and the setting of |database_| below. | 828 // the new database object above, and the setting of |database_| below. |
| 824 base::AutoLock lock(database_lock_); | 829 base::AutoLock lock(database_lock_); |
| 825 database_ = database.release(); | 830 database_ = database.release(); |
| 826 } | 831 } |
| 827 | 832 |
| 828 BrowserThread::PostTask( | 833 BrowserThread::PostTask( |
| 829 BrowserThread::IO, FROM_HERE, | 834 BrowserThread::IO, FROM_HERE, |
| 830 base::Bind(&LocalSafeBrowsingDatabaseManager::DatabaseLoadComplete, | 835 base::BindOnce(&LocalSafeBrowsingDatabaseManager::DatabaseLoadComplete, |
| 831 this)); | 836 this)); |
| 832 | 837 |
| 833 UMA_HISTOGRAM_TIMES("SB2.DatabaseOpen", base::TimeTicks::Now() - before); | 838 UMA_HISTOGRAM_TIMES("SB2.DatabaseOpen", base::TimeTicks::Now() - before); |
| 834 return database_; | 839 return database_; |
| 835 } | 840 } |
| 836 | 841 |
| 837 void LocalSafeBrowsingDatabaseManager::OnCheckDone(SafeBrowsingCheck* check) { | 842 void LocalSafeBrowsingDatabaseManager::OnCheckDone(SafeBrowsingCheck* check) { |
| 838 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 843 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 839 | 844 |
| 840 if (!enabled_) | 845 if (!enabled_) |
| 841 return; | 846 return; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 866 requestors.push_back(check); | 871 requestors.push_back(check); |
| 867 gethash_requests_[prefix] = requestors; | 872 gethash_requests_[prefix] = requestors; |
| 868 } | 873 } |
| 869 | 874 |
| 870 // Reset the start time so that we can measure the network time without the | 875 // Reset the start time so that we can measure the network time without the |
| 871 // database time. | 876 // database time. |
| 872 check->start = base::TimeTicks::Now(); | 877 check->start = base::TimeTicks::Now(); |
| 873 | 878 |
| 874 BrowserThread::PostTask( | 879 BrowserThread::PostTask( |
| 875 BrowserThread::UI, FROM_HERE, | 880 BrowserThread::UI, FROM_HERE, |
| 876 base::Bind(&LocalSafeBrowsingDatabaseManager::OnRequestFullHash, this, | 881 base::BindOnce(&LocalSafeBrowsingDatabaseManager::OnRequestFullHash, |
| 877 check)); | 882 this, check)); |
| 878 } else { | 883 } else { |
| 879 // We may have cached results for previous GetHash queries. Since | 884 // We may have cached results for previous GetHash queries. Since |
| 880 // this data comes from cache, don't histogram hits. | 885 // this data comes from cache, don't histogram hits. |
| 881 HandleOneCheck(check, check->cache_hits); | 886 HandleOneCheck(check, check->cache_hits); |
| 882 } | 887 } |
| 883 } | 888 } |
| 884 | 889 |
| 885 void LocalSafeBrowsingDatabaseManager::OnRequestFullHash( | 890 void LocalSafeBrowsingDatabaseManager::OnRequestFullHash( |
| 886 SafeBrowsingCheck* check) { | 891 SafeBrowsingCheck* check) { |
| 887 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 892 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 888 check->extended_reporting_level = GetExtendedReporting(); | 893 check->extended_reporting_level = GetExtendedReporting(); |
| 889 BrowserThread::PostTask( | 894 BrowserThread::PostTask( |
| 890 BrowserThread::IO, FROM_HERE, | 895 BrowserThread::IO, FROM_HERE, |
| 891 base::Bind(&LocalSafeBrowsingDatabaseManager::RequestFullHash, this, | 896 base::BindOnce(&LocalSafeBrowsingDatabaseManager::RequestFullHash, this, |
| 892 check)); | 897 check)); |
| 893 } | 898 } |
| 894 | 899 |
| 895 ExtendedReportingLevel | 900 ExtendedReportingLevel |
| 896 LocalSafeBrowsingDatabaseManager::GetExtendedReporting() { | 901 LocalSafeBrowsingDatabaseManager::GetExtendedReporting() { |
| 897 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 902 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 898 | 903 |
| 899 // Determine if the last used profile is opted into extended reporting. | 904 // Determine if the last used profile is opted into extended reporting. |
| 900 // Note: It is possible that the last used profile is not the one triggers | 905 // Note: It is possible that the last used profile is not the one triggers |
| 901 // the hash request, but not very likely. | 906 // the hash request, but not very likely. |
| 902 ExtendedReportingLevel extended_reporting_level = SBER_LEVEL_OFF; | 907 ExtendedReportingLevel extended_reporting_level = SBER_LEVEL_OFF; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 935 database_update_in_progress_ = true; | 940 database_update_in_progress_ = true; |
| 936 GetDatabase(); // This guarantees that |database_| is non-NULL. | 941 GetDatabase(); // This guarantees that |database_| is non-NULL. |
| 937 if (database_->UpdateStarted(&lists)) { | 942 if (database_->UpdateStarted(&lists)) { |
| 938 database_error = false; | 943 database_error = false; |
| 939 } else { | 944 } else { |
| 940 database_->UpdateFinished(false); | 945 database_->UpdateFinished(false); |
| 941 } | 946 } |
| 942 | 947 |
| 943 BrowserThread::PostTask( | 948 BrowserThread::PostTask( |
| 944 BrowserThread::UI, FROM_HERE, | 949 BrowserThread::UI, FROM_HERE, |
| 945 base::Bind( | 950 base::BindOnce( |
| 946 &LocalSafeBrowsingDatabaseManager::BeforeGetAllChunksFromDatabase, | 951 &LocalSafeBrowsingDatabaseManager::BeforeGetAllChunksFromDatabase, |
| 947 this, lists, database_error, callback)); | 952 this, lists, database_error, callback)); |
| 948 } | 953 } |
| 949 | 954 |
| 950 void LocalSafeBrowsingDatabaseManager::BeforeGetAllChunksFromDatabase( | 955 void LocalSafeBrowsingDatabaseManager::BeforeGetAllChunksFromDatabase( |
| 951 const std::vector<SBListChunkRanges>& lists, | 956 const std::vector<SBListChunkRanges>& lists, |
| 952 bool database_error, | 957 bool database_error, |
| 953 GetChunksCallback callback) { | 958 GetChunksCallback callback) { |
| 954 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 959 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 955 | 960 |
| 956 ExtendedReportingLevel extended_reporting_level = GetExtendedReporting(); | 961 ExtendedReportingLevel extended_reporting_level = GetExtendedReporting(); |
| 957 | 962 |
| 958 BrowserThread::PostTask( | 963 BrowserThread::PostTask( |
| 959 BrowserThread::IO, FROM_HERE, | 964 BrowserThread::IO, FROM_HERE, |
| 960 base::Bind(&LocalSafeBrowsingDatabaseManager::OnGetAllChunksFromDatabase, | 965 base::BindOnce( |
| 961 this, lists, database_error, extended_reporting_level, | 966 &LocalSafeBrowsingDatabaseManager::OnGetAllChunksFromDatabase, this, |
| 962 callback)); | 967 lists, database_error, extended_reporting_level, callback)); |
| 963 } | 968 } |
| 964 | 969 |
| 965 void LocalSafeBrowsingDatabaseManager::OnGetAllChunksFromDatabase( | 970 void LocalSafeBrowsingDatabaseManager::OnGetAllChunksFromDatabase( |
| 966 const std::vector<SBListChunkRanges>& lists, | 971 const std::vector<SBListChunkRanges>& lists, |
| 967 bool database_error, | 972 bool database_error, |
| 968 ExtendedReportingLevel reporting_level, | 973 ExtendedReportingLevel reporting_level, |
| 969 GetChunksCallback callback) { | 974 GetChunksCallback callback) { |
| 970 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 975 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 971 if (enabled_) | 976 if (enabled_) |
| 972 callback.Run(lists, database_error, reporting_level); | 977 callback.Run(lists, database_error, reporting_level); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1011 | 1016 |
| 1012 void LocalSafeBrowsingDatabaseManager::AddDatabaseChunks( | 1017 void LocalSafeBrowsingDatabaseManager::AddDatabaseChunks( |
| 1013 const std::string& list_name, | 1018 const std::string& list_name, |
| 1014 std::unique_ptr<std::vector<std::unique_ptr<SBChunkData>>> chunks, | 1019 std::unique_ptr<std::vector<std::unique_ptr<SBChunkData>>> chunks, |
| 1015 AddChunksCallback callback) { | 1020 AddChunksCallback callback) { |
| 1016 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1021 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); |
| 1017 if (chunks) | 1022 if (chunks) |
| 1018 GetDatabase()->InsertChunks(list_name, *chunks); | 1023 GetDatabase()->InsertChunks(list_name, *chunks); |
| 1019 BrowserThread::PostTask( | 1024 BrowserThread::PostTask( |
| 1020 BrowserThread::IO, FROM_HERE, | 1025 BrowserThread::IO, FROM_HERE, |
| 1021 base::Bind(&LocalSafeBrowsingDatabaseManager::OnAddChunksComplete, this, | 1026 base::BindOnce(&LocalSafeBrowsingDatabaseManager::OnAddChunksComplete, |
| 1022 callback)); | 1027 this, callback)); |
| 1023 } | 1028 } |
| 1024 | 1029 |
| 1025 void LocalSafeBrowsingDatabaseManager::DeleteDatabaseChunks( | 1030 void LocalSafeBrowsingDatabaseManager::DeleteDatabaseChunks( |
| 1026 std::unique_ptr<std::vector<SBChunkDelete>> chunk_deletes) { | 1031 std::unique_ptr<std::vector<SBChunkDelete>> chunk_deletes) { |
| 1027 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1032 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); |
| 1028 if (chunk_deletes) | 1033 if (chunk_deletes) |
| 1029 GetDatabase()->DeleteChunks(*chunk_deletes); | 1034 GetDatabase()->DeleteChunks(*chunk_deletes); |
| 1030 } | 1035 } |
| 1031 | 1036 |
| 1032 void LocalSafeBrowsingDatabaseManager::DatabaseUpdateFinished( | 1037 void LocalSafeBrowsingDatabaseManager::DatabaseUpdateFinished( |
| 1033 bool update_succeeded) { | 1038 bool update_succeeded) { |
| 1034 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1039 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); |
| 1035 GetDatabase()->UpdateFinished(update_succeeded); | 1040 GetDatabase()->UpdateFinished(update_succeeded); |
| 1036 DCHECK(database_update_in_progress_); | 1041 DCHECK(database_update_in_progress_); |
| 1037 database_update_in_progress_ = false; | 1042 database_update_in_progress_ = false; |
| 1038 BrowserThread::PostTask( | 1043 BrowserThread::PostTask( |
| 1039 BrowserThread::UI, FROM_HERE, | 1044 BrowserThread::UI, FROM_HERE, |
| 1040 base::Bind( | 1045 base::BindOnce( |
| 1041 &LocalSafeBrowsingDatabaseManager::NotifyDatabaseUpdateFinished, this, | 1046 &LocalSafeBrowsingDatabaseManager::NotifyDatabaseUpdateFinished, this, |
| 1042 update_succeeded)); | 1047 update_succeeded)); |
| 1043 } | 1048 } |
| 1044 | 1049 |
| 1045 void LocalSafeBrowsingDatabaseManager::OnCloseDatabase() { | 1050 void LocalSafeBrowsingDatabaseManager::OnCloseDatabase() { |
| 1046 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); | 1051 DCHECK(safe_browsing_task_runner_->RunsTasksOnCurrentThread()); |
| 1047 DCHECK(closing_database_); | 1052 DCHECK(closing_database_); |
| 1048 | 1053 |
| 1049 // Because |closing_database_| is true, nothing on the IO thread will be | 1054 // Because |closing_database_| is true, nothing on the IO thread will be |
| 1050 // accessing the database, so it's safe to delete and then NULL the pointer. | 1055 // accessing the database, so it's safe to delete and then NULL the pointer. |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1241 new base::WeakPtrFactory<LocalSafeBrowsingDatabaseManager>(this)); | 1246 new base::WeakPtrFactory<LocalSafeBrowsingDatabaseManager>(this)); |
| 1242 SafeBrowsingCheck* check_ptr = check.get(); | 1247 SafeBrowsingCheck* check_ptr = check.get(); |
| 1243 checks_[check_ptr] = std::move(check); | 1248 checks_[check_ptr] = std::move(check); |
| 1244 | 1249 |
| 1245 base::PostTaskAndReplyWithResult( | 1250 base::PostTaskAndReplyWithResult( |
| 1246 safe_browsing_task_runner_.get(), FROM_HERE, task, | 1251 safe_browsing_task_runner_.get(), FROM_HERE, task, |
| 1247 base::Bind(&LocalSafeBrowsingDatabaseManager::OnAsyncCheckDone, | 1252 base::Bind(&LocalSafeBrowsingDatabaseManager::OnAsyncCheckDone, |
| 1248 check_ptr->weak_ptr_factory_->GetWeakPtr(), check_ptr)); | 1253 check_ptr->weak_ptr_factory_->GetWeakPtr(), check_ptr)); |
| 1249 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 1254 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 1250 FROM_HERE, | 1255 FROM_HERE, |
| 1251 base::Bind(&LocalSafeBrowsingDatabaseManager::TimeoutCallback, | 1256 base::BindOnce(&LocalSafeBrowsingDatabaseManager::TimeoutCallback, |
| 1252 check_ptr->weak_ptr_factory_->GetWeakPtr(), check_ptr), | 1257 check_ptr->weak_ptr_factory_->GetWeakPtr(), check_ptr), |
| 1253 check_timeout_); | 1258 check_timeout_); |
| 1254 } | 1259 } |
| 1255 | 1260 |
| 1256 bool LocalSafeBrowsingDatabaseManager::IsDownloadProtectionEnabled() const { | 1261 bool LocalSafeBrowsingDatabaseManager::IsDownloadProtectionEnabled() const { |
| 1257 return enable_download_protection_; | 1262 return enable_download_protection_; |
| 1258 } | 1263 } |
| 1259 | 1264 |
| 1260 } // namespace safe_browsing | 1265 } // namespace safe_browsing |
| OLD | NEW |