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 652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 SafeBrowsingStore* browse_store, | 663 SafeBrowsingStore* browse_store, |
664 SafeBrowsingStore* download_store, | 664 SafeBrowsingStore* download_store, |
665 SafeBrowsingStore* csd_whitelist_store, | 665 SafeBrowsingStore* csd_whitelist_store, |
666 SafeBrowsingStore* download_whitelist_store, | 666 SafeBrowsingStore* download_whitelist_store, |
667 SafeBrowsingStore* inclusion_whitelist_store, | 667 SafeBrowsingStore* inclusion_whitelist_store, |
668 SafeBrowsingStore* extension_blacklist_store, | 668 SafeBrowsingStore* extension_blacklist_store, |
669 SafeBrowsingStore* side_effect_free_whitelist_store, | 669 SafeBrowsingStore* side_effect_free_whitelist_store, |
670 SafeBrowsingStore* ip_blacklist_store, | 670 SafeBrowsingStore* ip_blacklist_store, |
671 SafeBrowsingStore* unwanted_software_store) | 671 SafeBrowsingStore* unwanted_software_store) |
672 : state_manager_(thread_checker_), | 672 : state_manager_(thread_checker_), |
| 673 db_state_manager_(thread_checker_), |
673 browse_store_(browse_store), | 674 browse_store_(browse_store), |
674 download_store_(download_store), | 675 download_store_(download_store), |
675 csd_whitelist_store_(csd_whitelist_store), | 676 csd_whitelist_store_(csd_whitelist_store), |
676 download_whitelist_store_(download_whitelist_store), | 677 download_whitelist_store_(download_whitelist_store), |
677 inclusion_whitelist_store_(inclusion_whitelist_store), | 678 inclusion_whitelist_store_(inclusion_whitelist_store), |
678 extension_blacklist_store_(extension_blacklist_store), | 679 extension_blacklist_store_(extension_blacklist_store), |
679 side_effect_free_whitelist_store_(side_effect_free_whitelist_store), | 680 side_effect_free_whitelist_store_(side_effect_free_whitelist_store), |
680 ip_blacklist_store_(ip_blacklist_store), | 681 ip_blacklist_store_(ip_blacklist_store), |
681 unwanted_software_store_(unwanted_software_store), | 682 unwanted_software_store_(unwanted_software_store), |
682 corruption_detected_(false), | |
683 change_detected_(false), | |
684 reset_factory_(this) { | 683 reset_factory_(this) { |
685 DCHECK(browse_store_.get()); | 684 DCHECK(browse_store_.get()); |
686 } | 685 } |
687 | 686 |
688 SafeBrowsingDatabaseNew::~SafeBrowsingDatabaseNew() { | 687 SafeBrowsingDatabaseNew::~SafeBrowsingDatabaseNew() { |
689 // The DCHECK is disabled due to crbug.com/338486 . | 688 // The DCHECK is disabled due to crbug.com/338486 . |
690 // DCHECK(thread_checker_.CalledOnValidThread()); | 689 // DCHECK(thread_checker_.CalledOnValidThread()); |
691 } | 690 } |
692 | 691 |
693 void SafeBrowsingDatabaseNew::Init(const base::FilePath& filename_base) { | 692 void SafeBrowsingDatabaseNew::Init(const base::FilePath& filename_base) { |
694 DCHECK(thread_checker_.CalledOnValidThread()); | 693 DCHECK(thread_checker_.CalledOnValidThread()); |
695 | 694 |
696 // This should not be run multiple times. | 695 db_state_manager_.init_filename_base(filename_base); |
697 DCHECK(filename_base_.empty()); | |
698 | |
699 filename_base_ = filename_base; | |
700 | 696 |
701 // TODO(shess): The various stores are really only necessary while doing | 697 // TODO(shess): The various stores are really only necessary while doing |
702 // updates (see |UpdateFinished()|) or when querying a store directly (see | 698 // updates (see |UpdateFinished()|) or when querying a store directly (see |
703 // |ContainsDownloadUrl()|). | 699 // |ContainsDownloadUrl()|). |
704 // The store variables are also tested to see if a list is enabled. Perhaps | 700 // The store variables are also tested to see if a list is enabled. Perhaps |
705 // the stores could be refactored into an update object so that they are only | 701 // the stores could be refactored into an update object so that they are only |
706 // live in memory while being actively used. The sense of enabled probably | 702 // live in memory while being actively used. The sense of enabled probably |
707 // belongs in protocol_manager or database_manager. | 703 // belongs in protocol_manager or database_manager. |
708 | 704 |
709 { | 705 { |
710 // NOTE: A transaction here is overkill as there are no pointers to this | 706 // NOTE: A transaction here is overkill as there are no pointers to this |
711 // class on other threads until this function returns, but it's also | 707 // class on other threads until this function returns, but it's also |
712 // harmless as that also means there is no possibility of contention on the | 708 // harmless as that also means there is no possibility of contention on the |
713 // lock. | 709 // lock. |
714 scoped_ptr<WriteTransaction> txn = state_manager_.BeginWriteTransaction(); | 710 scoped_ptr<WriteTransaction> txn = state_manager_.BeginWriteTransaction(); |
715 | 711 |
716 txn->clear_prefix_gethash_cache(); | 712 txn->clear_prefix_gethash_cache(); |
717 | 713 |
718 browse_store_->Init( | 714 browse_store_->Init( |
719 BrowseDBFilename(filename_base_), | 715 BrowseDBFilename(db_state_manager_.filename_base()), |
720 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, | 716 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
721 base::Unretained(this))); | 717 base::Unretained(this))); |
722 | 718 |
723 if (unwanted_software_store_.get()) { | 719 if (unwanted_software_store_.get()) { |
724 unwanted_software_store_->Init( | 720 unwanted_software_store_->Init( |
725 UnwantedSoftwareDBFilename(filename_base_), | 721 UnwantedSoftwareDBFilename(db_state_manager_.filename_base()), |
726 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, | 722 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
727 base::Unretained(this))); | 723 base::Unretained(this))); |
728 } | 724 } |
729 LoadPrefixSet(BrowseDBFilename(filename_base_), txn.get(), | 725 LoadPrefixSet(BrowseDBFilename(db_state_manager_.filename_base()), |
730 PrefixSetId::BROWSE, FAILURE_BROWSE_PREFIX_SET_READ); | 726 txn.get(), PrefixSetId::BROWSE, |
| 727 FAILURE_BROWSE_PREFIX_SET_READ); |
731 if (unwanted_software_store_.get()) { | 728 if (unwanted_software_store_.get()) { |
732 LoadPrefixSet(UnwantedSoftwareDBFilename(filename_base_), txn.get(), | 729 LoadPrefixSet( |
733 PrefixSetId::UNWANTED_SOFTWARE, | 730 UnwantedSoftwareDBFilename(db_state_manager_.filename_base()), |
734 FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_READ); | 731 txn.get(), PrefixSetId::UNWANTED_SOFTWARE, |
| 732 FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_READ); |
735 } | 733 } |
736 | 734 |
737 if (side_effect_free_whitelist_store_.get()) { | 735 if (side_effect_free_whitelist_store_.get()) { |
738 const base::FilePath side_effect_free_whitelist_filename = | 736 const base::FilePath side_effect_free_whitelist_filename = |
739 SideEffectFreeWhitelistDBFilename(filename_base_); | 737 SideEffectFreeWhitelistDBFilename(db_state_manager_.filename_base()); |
740 side_effect_free_whitelist_store_->Init( | 738 side_effect_free_whitelist_store_->Init( |
741 side_effect_free_whitelist_filename, | 739 side_effect_free_whitelist_filename, |
742 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, | 740 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
743 base::Unretained(this))); | 741 base::Unretained(this))); |
744 | 742 |
745 LoadPrefixSet(side_effect_free_whitelist_filename, txn.get(), | 743 LoadPrefixSet(side_effect_free_whitelist_filename, txn.get(), |
746 PrefixSetId::SIDE_EFFECT_FREE_WHITELIST, | 744 PrefixSetId::SIDE_EFFECT_FREE_WHITELIST, |
747 FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_READ); | 745 FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_READ); |
748 } else { | 746 } else { |
749 // Delete any files of the side-effect free sidelist that may be around | 747 // Delete any files of the side-effect free sidelist that may be around |
750 // from when it was previously enabled. | 748 // from when it was previously enabled. |
751 SafeBrowsingStoreFile::DeleteStore( | 749 SafeBrowsingStoreFile::DeleteStore( |
752 SideEffectFreeWhitelistDBFilename(filename_base_)); | 750 SideEffectFreeWhitelistDBFilename(db_state_manager_.filename_base())); |
753 base::DeleteFile(PrefixSetForFilename( | 751 base::DeleteFile(PrefixSetForFilename(SideEffectFreeWhitelistDBFilename( |
754 SideEffectFreeWhitelistDBFilename(filename_base_)), | 752 db_state_manager_.filename_base())), |
755 false); | 753 false); |
756 } | 754 } |
757 } | 755 } |
758 // Note: End the transaction early because LoadWhiteList() and | 756 // Note: End the transaction early because LoadWhiteList() and |
759 // WhitelistEverything() manage their own transactions. | 757 // WhitelistEverything() manage their own transactions. |
760 | 758 |
761 if (download_store_.get()) { | 759 if (download_store_.get()) { |
762 download_store_->Init( | 760 download_store_->Init( |
763 DownloadDBFilename(filename_base_), | 761 DownloadDBFilename(db_state_manager_.filename_base()), |
764 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, | 762 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
765 base::Unretained(this))); | 763 base::Unretained(this))); |
766 } | 764 } |
767 | 765 |
768 if (csd_whitelist_store_.get()) { | 766 if (csd_whitelist_store_.get()) { |
769 csd_whitelist_store_->Init( | 767 csd_whitelist_store_->Init( |
770 CsdWhitelistDBFilename(filename_base_), | 768 CsdWhitelistDBFilename(db_state_manager_.filename_base()), |
771 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, | 769 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
772 base::Unretained(this))); | 770 base::Unretained(this))); |
773 | 771 |
774 std::vector<SBAddFullHash> full_hashes; | 772 std::vector<SBAddFullHash> full_hashes; |
775 if (csd_whitelist_store_->GetAddFullHashes(&full_hashes)) { | 773 if (csd_whitelist_store_->GetAddFullHashes(&full_hashes)) { |
776 LoadWhitelist(full_hashes, SBWhitelistId::CSD); | 774 LoadWhitelist(full_hashes, SBWhitelistId::CSD); |
777 } else { | 775 } else { |
778 state_manager_.BeginWriteTransaction()->WhitelistEverything( | 776 state_manager_.BeginWriteTransaction()->WhitelistEverything( |
779 SBWhitelistId::CSD); | 777 SBWhitelistId::CSD); |
780 } | 778 } |
781 } else { | 779 } else { |
782 state_manager_.BeginWriteTransaction()->WhitelistEverything( | 780 state_manager_.BeginWriteTransaction()->WhitelistEverything( |
783 SBWhitelistId::CSD); // Just to be safe. | 781 SBWhitelistId::CSD); // Just to be safe. |
784 } | 782 } |
785 | 783 |
786 if (download_whitelist_store_.get()) { | 784 if (download_whitelist_store_.get()) { |
787 download_whitelist_store_->Init( | 785 download_whitelist_store_->Init( |
788 DownloadWhitelistDBFilename(filename_base_), | 786 DownloadWhitelistDBFilename(db_state_manager_.filename_base()), |
789 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, | 787 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
790 base::Unretained(this))); | 788 base::Unretained(this))); |
791 | 789 |
792 std::vector<SBAddFullHash> full_hashes; | 790 std::vector<SBAddFullHash> full_hashes; |
793 if (download_whitelist_store_->GetAddFullHashes(&full_hashes)) { | 791 if (download_whitelist_store_->GetAddFullHashes(&full_hashes)) { |
794 LoadWhitelist(full_hashes, SBWhitelistId::DOWNLOAD); | 792 LoadWhitelist(full_hashes, SBWhitelistId::DOWNLOAD); |
795 } else { | 793 } else { |
796 state_manager_.BeginWriteTransaction()->WhitelistEverything( | 794 state_manager_.BeginWriteTransaction()->WhitelistEverything( |
797 SBWhitelistId::DOWNLOAD); | 795 SBWhitelistId::DOWNLOAD); |
798 } | 796 } |
799 } else { | 797 } else { |
800 state_manager_.BeginWriteTransaction()->WhitelistEverything( | 798 state_manager_.BeginWriteTransaction()->WhitelistEverything( |
801 SBWhitelistId::DOWNLOAD); // Just to be safe. | 799 SBWhitelistId::DOWNLOAD); // Just to be safe. |
802 } | 800 } |
803 | 801 |
804 if (inclusion_whitelist_store_.get()) { | 802 if (inclusion_whitelist_store_.get()) { |
805 inclusion_whitelist_store_->Init( | 803 inclusion_whitelist_store_->Init( |
806 InclusionWhitelistDBFilename(filename_base_), | 804 InclusionWhitelistDBFilename(db_state_manager_.filename_base()), |
807 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, | 805 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
808 base::Unretained(this))); | 806 base::Unretained(this))); |
809 | 807 |
810 std::vector<SBAddFullHash> full_hashes; | 808 std::vector<SBAddFullHash> full_hashes; |
811 if (inclusion_whitelist_store_->GetAddFullHashes(&full_hashes)) { | 809 if (inclusion_whitelist_store_->GetAddFullHashes(&full_hashes)) { |
812 LoadWhitelist(full_hashes, SBWhitelistId::INCLUSION); | 810 LoadWhitelist(full_hashes, SBWhitelistId::INCLUSION); |
813 } else { | 811 } else { |
814 state_manager_.BeginWriteTransaction()->WhitelistEverything( | 812 state_manager_.BeginWriteTransaction()->WhitelistEverything( |
815 SBWhitelistId::INCLUSION); | 813 SBWhitelistId::INCLUSION); |
816 } | 814 } |
817 } else { | 815 } else { |
818 state_manager_.BeginWriteTransaction()->WhitelistEverything( | 816 state_manager_.BeginWriteTransaction()->WhitelistEverything( |
819 SBWhitelistId::INCLUSION); // Just to be safe. | 817 SBWhitelistId::INCLUSION); // Just to be safe. |
820 } | 818 } |
821 | 819 |
822 if (extension_blacklist_store_.get()) { | 820 if (extension_blacklist_store_.get()) { |
823 extension_blacklist_store_->Init( | 821 extension_blacklist_store_->Init( |
824 ExtensionBlacklistDBFilename(filename_base_), | 822 ExtensionBlacklistDBFilename(db_state_manager_.filename_base()), |
825 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, | 823 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
826 base::Unretained(this))); | 824 base::Unretained(this))); |
827 } | 825 } |
828 | 826 |
829 if (ip_blacklist_store_.get()) { | 827 if (ip_blacklist_store_.get()) { |
830 ip_blacklist_store_->Init( | 828 ip_blacklist_store_->Init( |
831 IpBlacklistDBFilename(filename_base_), | 829 IpBlacklistDBFilename(db_state_manager_.filename_base()), |
832 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, | 830 base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase, |
833 base::Unretained(this))); | 831 base::Unretained(this))); |
834 | 832 |
835 std::vector<SBAddFullHash> full_hashes; | 833 std::vector<SBAddFullHash> full_hashes; |
836 if (ip_blacklist_store_->GetAddFullHashes(&full_hashes)) { | 834 if (ip_blacklist_store_->GetAddFullHashes(&full_hashes)) { |
837 LoadIpBlacklist(full_hashes); | 835 LoadIpBlacklist(full_hashes); |
838 } else { | 836 } else { |
839 LoadIpBlacklist(std::vector<SBAddFullHash>()); // Clear the list. | 837 LoadIpBlacklist(std::vector<SBAddFullHash>()); // Clear the list. |
840 } | 838 } |
841 } | 839 } |
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1131 chunk_data.FullHashAt(i)); | 1129 chunk_data.FullHashAt(i)); |
1132 } | 1130 } |
1133 } | 1131 } |
1134 } | 1132 } |
1135 | 1133 |
1136 void SafeBrowsingDatabaseNew::InsertChunks( | 1134 void SafeBrowsingDatabaseNew::InsertChunks( |
1137 const std::string& list_name, | 1135 const std::string& list_name, |
1138 const std::vector<SBChunkData*>& chunks) { | 1136 const std::vector<SBChunkData*>& chunks) { |
1139 DCHECK(thread_checker_.CalledOnValidThread()); | 1137 DCHECK(thread_checker_.CalledOnValidThread()); |
1140 | 1138 |
1141 if (corruption_detected_ || chunks.empty()) | 1139 if (db_state_manager_.corruption_detected() || chunks.empty()) |
1142 return; | 1140 return; |
1143 | 1141 |
1144 const base::TimeTicks before = base::TimeTicks::Now(); | 1142 const base::TimeTicks before = base::TimeTicks::Now(); |
1145 | 1143 |
1146 // TODO(shess): The caller should just pass list_id. | 1144 // TODO(shess): The caller should just pass list_id. |
1147 const safe_browsing_util::ListType list_id = | 1145 const safe_browsing_util::ListType list_id = |
1148 safe_browsing_util::GetListId(list_name); | 1146 safe_browsing_util::GetListId(list_name); |
1149 | 1147 |
1150 SafeBrowsingStore* store = GetStore(list_id); | 1148 SafeBrowsingStore* store = GetStore(list_id); |
1151 if (!store) return; | 1149 if (!store) return; |
1152 | 1150 |
1153 change_detected_ = true; | 1151 db_state_manager_.set_change_detected(); |
1154 | 1152 |
1155 // TODO(shess): I believe that the list is always add or sub. Can this use | 1153 // TODO(shess): I believe that the list is always add or sub. Can this use |
1156 // that productively? | 1154 // that productively? |
1157 store->BeginChunk(); | 1155 store->BeginChunk(); |
1158 for (size_t i = 0; i < chunks.size(); ++i) { | 1156 for (size_t i = 0; i < chunks.size(); ++i) { |
1159 if (chunks[i]->IsAdd()) { | 1157 if (chunks[i]->IsAdd()) { |
1160 InsertAddChunk(store, list_id, *chunks[i]); | 1158 InsertAddChunk(store, list_id, *chunks[i]); |
1161 } else if (chunks[i]->IsSub()) { | 1159 } else if (chunks[i]->IsSub()) { |
1162 InsertSubChunk(store, list_id, *chunks[i]); | 1160 InsertSubChunk(store, list_id, *chunks[i]); |
1163 } else { | 1161 } else { |
1164 NOTREACHED(); | 1162 NOTREACHED(); |
1165 } | 1163 } |
1166 } | 1164 } |
1167 store->FinishChunk(); | 1165 store->FinishChunk(); |
1168 | 1166 |
1169 UMA_HISTOGRAM_TIMES("SB2.ChunkInsert", base::TimeTicks::Now() - before); | 1167 UMA_HISTOGRAM_TIMES("SB2.ChunkInsert", base::TimeTicks::Now() - before); |
1170 } | 1168 } |
1171 | 1169 |
1172 void SafeBrowsingDatabaseNew::DeleteChunks( | 1170 void SafeBrowsingDatabaseNew::DeleteChunks( |
1173 const std::vector<SBChunkDelete>& chunk_deletes) { | 1171 const std::vector<SBChunkDelete>& chunk_deletes) { |
1174 DCHECK(thread_checker_.CalledOnValidThread()); | 1172 DCHECK(thread_checker_.CalledOnValidThread()); |
1175 | 1173 |
1176 if (corruption_detected_ || chunk_deletes.empty()) | 1174 if (db_state_manager_.corruption_detected() || chunk_deletes.empty()) |
1177 return; | 1175 return; |
1178 | 1176 |
1179 const std::string& list_name = chunk_deletes.front().list_name; | 1177 const std::string& list_name = chunk_deletes.front().list_name; |
1180 const safe_browsing_util::ListType list_id = | 1178 const safe_browsing_util::ListType list_id = |
1181 safe_browsing_util::GetListId(list_name); | 1179 safe_browsing_util::GetListId(list_name); |
1182 | 1180 |
1183 SafeBrowsingStore* store = GetStore(list_id); | 1181 SafeBrowsingStore* store = GetStore(list_id); |
1184 if (!store) return; | 1182 if (!store) return; |
1185 | 1183 |
1186 change_detected_ = true; | 1184 db_state_manager_.set_change_detected(); |
1187 | 1185 |
1188 for (size_t i = 0; i < chunk_deletes.size(); ++i) { | 1186 for (size_t i = 0; i < chunk_deletes.size(); ++i) { |
1189 std::vector<int> chunk_numbers; | 1187 std::vector<int> chunk_numbers; |
1190 RangesToChunks(chunk_deletes[i].chunk_del, &chunk_numbers); | 1188 RangesToChunks(chunk_deletes[i].chunk_del, &chunk_numbers); |
1191 for (size_t j = 0; j < chunk_numbers.size(); ++j) { | 1189 for (size_t j = 0; j < chunk_numbers.size(); ++j) { |
1192 const int encoded_chunk_id = EncodeChunkId(chunk_numbers[j], list_id); | 1190 const int encoded_chunk_id = EncodeChunkId(chunk_numbers[j], list_id); |
1193 if (chunk_deletes[i].is_sub_del) | 1191 if (chunk_deletes[i].is_sub_del) |
1194 store->DeleteSubChunk(encoded_chunk_id); | 1192 store->DeleteSubChunk(encoded_chunk_id); |
1195 else | 1193 else |
1196 store->DeleteAddChunk(encoded_chunk_id); | 1194 store->DeleteAddChunk(encoded_chunk_id); |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1315 UpdateChunkRangesForList(side_effect_free_whitelist_store_.get(), | 1313 UpdateChunkRangesForList(side_effect_free_whitelist_store_.get(), |
1316 safe_browsing_util::kSideEffectFreeWhitelist, lists); | 1314 safe_browsing_util::kSideEffectFreeWhitelist, lists); |
1317 | 1315 |
1318 UpdateChunkRangesForList(ip_blacklist_store_.get(), | 1316 UpdateChunkRangesForList(ip_blacklist_store_.get(), |
1319 safe_browsing_util::kIPBlacklist, lists); | 1317 safe_browsing_util::kIPBlacklist, lists); |
1320 | 1318 |
1321 UpdateChunkRangesForList(unwanted_software_store_.get(), | 1319 UpdateChunkRangesForList(unwanted_software_store_.get(), |
1322 safe_browsing_util::kUnwantedUrlList, | 1320 safe_browsing_util::kUnwantedUrlList, |
1323 lists); | 1321 lists); |
1324 | 1322 |
1325 corruption_detected_ = false; | 1323 db_state_manager_.reset_corruption_detected(); |
1326 change_detected_ = false; | 1324 db_state_manager_.reset_change_detected(); |
1327 return true; | 1325 return true; |
1328 } | 1326 } |
1329 | 1327 |
1330 void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) { | 1328 void SafeBrowsingDatabaseNew::UpdateFinished(bool update_succeeded) { |
1331 DCHECK(thread_checker_.CalledOnValidThread()); | 1329 DCHECK(thread_checker_.CalledOnValidThread()); |
1332 | 1330 |
1333 // The update may have failed due to corrupt storage (for instance, | 1331 // The update may have failed due to corrupt storage (for instance, |
1334 // an excessive number of invalid add_chunks and sub_chunks). | 1332 // an excessive number of invalid add_chunks and sub_chunks). |
1335 // Double-check that the databases are valid. | 1333 // Double-check that the databases are valid. |
1336 // TODO(shess): Providing a checksum for the add_chunk and sub_chunk | 1334 // TODO(shess): Providing a checksum for the add_chunk and sub_chunk |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1370 if (ip_blacklist_store_ && !ip_blacklist_store_->CheckValidity()) { | 1368 if (ip_blacklist_store_ && !ip_blacklist_store_->CheckValidity()) { |
1371 DLOG(ERROR) << "Safe-browsing IP blacklist database corrupt."; | 1369 DLOG(ERROR) << "Safe-browsing IP blacklist database corrupt."; |
1372 } | 1370 } |
1373 | 1371 |
1374 if (unwanted_software_store_ && | 1372 if (unwanted_software_store_ && |
1375 !unwanted_software_store_->CheckValidity()) { | 1373 !unwanted_software_store_->CheckValidity()) { |
1376 DLOG(ERROR) << "Unwanted software url list database corrupt."; | 1374 DLOG(ERROR) << "Unwanted software url list database corrupt."; |
1377 } | 1375 } |
1378 } | 1376 } |
1379 | 1377 |
1380 if (corruption_detected_) | 1378 if (db_state_manager_.corruption_detected()) |
1381 return; | 1379 return; |
1382 | 1380 |
1383 // Unroll the transaction if there was a protocol error or if the | 1381 // Unroll the transaction if there was a protocol error or if the |
1384 // transaction was empty. This will leave the prefix set, the | 1382 // transaction was empty. This will leave the prefix set, the |
1385 // pending hashes, and the prefix miss cache in place. | 1383 // pending hashes, and the prefix miss cache in place. |
1386 if (!update_succeeded || !change_detected_) { | 1384 if (!update_succeeded || !db_state_manager_.change_detected()) { |
1387 // Track empty updates to answer questions at http://crbug.com/72216 . | 1385 // Track empty updates to answer questions at http://crbug.com/72216 . |
1388 if (update_succeeded && !change_detected_) | 1386 if (update_succeeded && !db_state_manager_.change_detected()) |
1389 UMA_HISTOGRAM_COUNTS("SB2.DatabaseUpdateKilobytes", 0); | 1387 UMA_HISTOGRAM_COUNTS("SB2.DatabaseUpdateKilobytes", 0); |
1390 browse_store_->CancelUpdate(); | 1388 browse_store_->CancelUpdate(); |
1391 if (download_store_.get()) | 1389 if (download_store_.get()) |
1392 download_store_->CancelUpdate(); | 1390 download_store_->CancelUpdate(); |
1393 if (csd_whitelist_store_.get()) | 1391 if (csd_whitelist_store_.get()) |
1394 csd_whitelist_store_->CancelUpdate(); | 1392 csd_whitelist_store_->CancelUpdate(); |
1395 if (download_whitelist_store_.get()) | 1393 if (download_whitelist_store_.get()) |
1396 download_whitelist_store_->CancelUpdate(); | 1394 download_whitelist_store_->CancelUpdate(); |
1397 if (inclusion_whitelist_store_.get()) | 1395 if (inclusion_whitelist_store_.get()) |
1398 inclusion_whitelist_store_->CancelUpdate(); | 1396 inclusion_whitelist_store_->CancelUpdate(); |
1399 if (extension_blacklist_store_) | 1397 if (extension_blacklist_store_) |
1400 extension_blacklist_store_->CancelUpdate(); | 1398 extension_blacklist_store_->CancelUpdate(); |
1401 if (side_effect_free_whitelist_store_) | 1399 if (side_effect_free_whitelist_store_) |
1402 side_effect_free_whitelist_store_->CancelUpdate(); | 1400 side_effect_free_whitelist_store_->CancelUpdate(); |
1403 if (ip_blacklist_store_) | 1401 if (ip_blacklist_store_) |
1404 ip_blacklist_store_->CancelUpdate(); | 1402 ip_blacklist_store_->CancelUpdate(); |
1405 if (unwanted_software_store_) | 1403 if (unwanted_software_store_) |
1406 unwanted_software_store_->CancelUpdate(); | 1404 unwanted_software_store_->CancelUpdate(); |
1407 return; | 1405 return; |
1408 } | 1406 } |
1409 | 1407 |
1410 if (download_store_) { | 1408 if (download_store_) { |
1411 UpdateHashPrefixStore(DownloadDBFilename(filename_base_), | 1409 UpdateHashPrefixStore(DownloadDBFilename(db_state_manager_.filename_base()), |
1412 download_store_.get(), | 1410 download_store_.get(), |
1413 FAILURE_DOWNLOAD_DATABASE_UPDATE_FINISH); | 1411 FAILURE_DOWNLOAD_DATABASE_UPDATE_FINISH); |
1414 } | 1412 } |
1415 | 1413 |
1416 UpdatePrefixSetUrlStore(BrowseDBFilename(filename_base_), | 1414 UpdatePrefixSetUrlStore(BrowseDBFilename(db_state_manager_.filename_base()), |
1417 browse_store_.get(), | 1415 browse_store_.get(), PrefixSetId::BROWSE, |
1418 PrefixSetId::BROWSE, | |
1419 FAILURE_BROWSE_DATABASE_UPDATE_FINISH, | 1416 FAILURE_BROWSE_DATABASE_UPDATE_FINISH, |
1420 FAILURE_BROWSE_PREFIX_SET_WRITE, | 1417 FAILURE_BROWSE_PREFIX_SET_WRITE, true); |
1421 true); | |
1422 | 1418 |
1423 UpdateWhitelistStore(CsdWhitelistDBFilename(filename_base_), | 1419 UpdateWhitelistStore( |
1424 csd_whitelist_store_.get(), | 1420 CsdWhitelistDBFilename(db_state_manager_.filename_base()), |
1425 SBWhitelistId::CSD); | 1421 csd_whitelist_store_.get(), SBWhitelistId::CSD); |
1426 UpdateWhitelistStore(DownloadWhitelistDBFilename(filename_base_), | 1422 UpdateWhitelistStore( |
1427 download_whitelist_store_.get(), | 1423 DownloadWhitelistDBFilename(db_state_manager_.filename_base()), |
1428 SBWhitelistId::DOWNLOAD); | 1424 download_whitelist_store_.get(), SBWhitelistId::DOWNLOAD); |
1429 UpdateWhitelistStore(InclusionWhitelistDBFilename(filename_base_), | 1425 UpdateWhitelistStore( |
1430 inclusion_whitelist_store_.get(), | 1426 InclusionWhitelistDBFilename(db_state_manager_.filename_base()), |
1431 SBWhitelistId::INCLUSION); | 1427 inclusion_whitelist_store_.get(), SBWhitelistId::INCLUSION); |
1432 | 1428 |
1433 if (extension_blacklist_store_) { | 1429 if (extension_blacklist_store_) { |
1434 UpdateHashPrefixStore(ExtensionBlacklistDBFilename(filename_base_), | 1430 UpdateHashPrefixStore( |
1435 extension_blacklist_store_.get(), | 1431 ExtensionBlacklistDBFilename(db_state_manager_.filename_base()), |
1436 FAILURE_EXTENSION_BLACKLIST_UPDATE_FINISH); | 1432 extension_blacklist_store_.get(), |
| 1433 FAILURE_EXTENSION_BLACKLIST_UPDATE_FINISH); |
1437 } | 1434 } |
1438 | 1435 |
1439 if (side_effect_free_whitelist_store_) { | 1436 if (side_effect_free_whitelist_store_) { |
1440 UpdatePrefixSetUrlStore(SideEffectFreeWhitelistDBFilename(filename_base_), | 1437 UpdatePrefixSetUrlStore( |
1441 side_effect_free_whitelist_store_.get(), | 1438 SideEffectFreeWhitelistDBFilename(db_state_manager_.filename_base()), |
1442 PrefixSetId::SIDE_EFFECT_FREE_WHITELIST, | 1439 side_effect_free_whitelist_store_.get(), |
1443 FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_FINISH, | 1440 PrefixSetId::SIDE_EFFECT_FREE_WHITELIST, |
1444 FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_WRITE, | 1441 FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_FINISH, |
1445 false); | 1442 FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_WRITE, false); |
1446 } | 1443 } |
1447 | 1444 |
1448 if (ip_blacklist_store_) | 1445 if (ip_blacklist_store_) |
1449 UpdateIpBlacklistStore(); | 1446 UpdateIpBlacklistStore(); |
1450 | 1447 |
1451 if (unwanted_software_store_) { | 1448 if (unwanted_software_store_) { |
1452 UpdatePrefixSetUrlStore(UnwantedSoftwareDBFilename(filename_base_), | 1449 UpdatePrefixSetUrlStore( |
1453 unwanted_software_store_.get(), | 1450 UnwantedSoftwareDBFilename(db_state_manager_.filename_base()), |
1454 PrefixSetId::UNWANTED_SOFTWARE, | 1451 unwanted_software_store_.get(), PrefixSetId::UNWANTED_SOFTWARE, |
1455 FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_FINISH, | 1452 FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_FINISH, |
1456 FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE, | 1453 FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE, true); |
1457 true); | |
1458 } | 1454 } |
1459 } | 1455 } |
1460 | 1456 |
1461 void SafeBrowsingDatabaseNew::UpdateWhitelistStore( | 1457 void SafeBrowsingDatabaseNew::UpdateWhitelistStore( |
1462 const base::FilePath& store_filename, | 1458 const base::FilePath& store_filename, |
1463 SafeBrowsingStore* store, | 1459 SafeBrowsingStore* store, |
1464 SBWhitelistId whitelist_id) { | 1460 SBWhitelistId whitelist_id) { |
1465 DCHECK(thread_checker_.CalledOnValidThread()); | 1461 DCHECK(thread_checker_.CalledOnValidThread()); |
1466 | 1462 |
1467 if (!store) | 1463 if (!store) |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1600 // stores all full-length hashes as both full and prefix hashes. | 1596 // stores all full-length hashes as both full and prefix hashes. |
1601 PrefixSetBuilder builder; | 1597 PrefixSetBuilder builder; |
1602 std::vector<SBAddFullHash> full_hashes; | 1598 std::vector<SBAddFullHash> full_hashes; |
1603 if (!ip_blacklist_store_->FinishUpdate(&builder, &full_hashes)) { | 1599 if (!ip_blacklist_store_->FinishUpdate(&builder, &full_hashes)) { |
1604 RecordFailure(FAILURE_IP_BLACKLIST_UPDATE_FINISH); | 1600 RecordFailure(FAILURE_IP_BLACKLIST_UPDATE_FINISH); |
1605 LoadIpBlacklist(std::vector<SBAddFullHash>()); // Clear the list. | 1601 LoadIpBlacklist(std::vector<SBAddFullHash>()); // Clear the list. |
1606 return; | 1602 return; |
1607 } | 1603 } |
1608 | 1604 |
1609 const base::FilePath ip_blacklist_filename = | 1605 const base::FilePath ip_blacklist_filename = |
1610 IpBlacklistDBFilename(filename_base_); | 1606 IpBlacklistDBFilename(db_state_manager_.filename_base()); |
1611 | 1607 |
1612 RecordFileSizeHistogram(ip_blacklist_filename); | 1608 RecordFileSizeHistogram(ip_blacklist_filename); |
1613 | 1609 |
1614 #if defined(OS_MACOSX) | 1610 #if defined(OS_MACOSX) |
1615 base::mac::SetFileBackupExclusion(ip_blacklist_filename); | 1611 base::mac::SetFileBackupExclusion(ip_blacklist_filename); |
1616 #endif | 1612 #endif |
1617 | 1613 |
1618 LoadIpBlacklist(full_hashes); | 1614 LoadIpBlacklist(full_hashes); |
1619 } | 1615 } |
1620 | 1616 |
1621 void SafeBrowsingDatabaseNew::HandleCorruptDatabase() { | 1617 void SafeBrowsingDatabaseNew::HandleCorruptDatabase() { |
1622 DCHECK(thread_checker_.CalledOnValidThread()); | 1618 DCHECK(thread_checker_.CalledOnValidThread()); |
1623 | 1619 |
1624 // Reset the database after the current task has unwound (but only | 1620 // Reset the database after the current task has unwound (but only |
1625 // reset once within the scope of a given task). | 1621 // reset once within the scope of a given task). |
1626 if (!reset_factory_.HasWeakPtrs()) { | 1622 if (!reset_factory_.HasWeakPtrs()) { |
1627 RecordFailure(FAILURE_DATABASE_CORRUPT); | 1623 RecordFailure(FAILURE_DATABASE_CORRUPT); |
1628 base::MessageLoop::current()->PostTask(FROM_HERE, | 1624 base::MessageLoop::current()->PostTask(FROM_HERE, |
1629 base::Bind(&SafeBrowsingDatabaseNew::OnHandleCorruptDatabase, | 1625 base::Bind(&SafeBrowsingDatabaseNew::OnHandleCorruptDatabase, |
1630 reset_factory_.GetWeakPtr())); | 1626 reset_factory_.GetWeakPtr())); |
1631 } | 1627 } |
1632 } | 1628 } |
1633 | 1629 |
1634 void SafeBrowsingDatabaseNew::OnHandleCorruptDatabase() { | 1630 void SafeBrowsingDatabaseNew::OnHandleCorruptDatabase() { |
1635 DCHECK(thread_checker_.CalledOnValidThread()); | 1631 DCHECK(thread_checker_.CalledOnValidThread()); |
1636 | 1632 |
1637 RecordFailure(FAILURE_DATABASE_CORRUPT_HANDLER); | 1633 RecordFailure(FAILURE_DATABASE_CORRUPT_HANDLER); |
1638 corruption_detected_ = true; // Stop updating the database. | 1634 db_state_manager_.set_corruption_detected(); // Stop updating the database. |
1639 ResetDatabase(); | 1635 ResetDatabase(); |
1640 | 1636 |
1641 // NOTE(shess): ResetDatabase() should remove the corruption, so this should | 1637 // NOTE(shess): ResetDatabase() should remove the corruption, so this should |
1642 // only happen once. If you are here because you are hitting this after a | 1638 // only happen once. If you are here because you are hitting this after a |
1643 // restart, then I would be very interested in working with you to figure out | 1639 // restart, then I would be very interested in working with you to figure out |
1644 // what is happening, since it may affect real users. | 1640 // what is happening, since it may affect real users. |
1645 DLOG(FATAL) << "SafeBrowsing database was corrupt and reset"; | 1641 DLOG(FATAL) << "SafeBrowsing database was corrupt and reset"; |
1646 } | 1642 } |
1647 | 1643 |
1648 // TODO(shess): I'm not clear why this code doesn't have any | 1644 // TODO(shess): I'm not clear why this code doesn't have any |
1649 // real error-handling. | 1645 // real error-handling. |
1650 void SafeBrowsingDatabaseNew::LoadPrefixSet(const base::FilePath& db_filename, | 1646 void SafeBrowsingDatabaseNew::LoadPrefixSet(const base::FilePath& db_filename, |
1651 WriteTransaction* txn, | 1647 WriteTransaction* txn, |
1652 PrefixSetId prefix_set_id, | 1648 PrefixSetId prefix_set_id, |
1653 FailureType read_failure_type) { | 1649 FailureType read_failure_type) { |
1654 DCHECK(thread_checker_.CalledOnValidThread()); | 1650 DCHECK(thread_checker_.CalledOnValidThread()); |
1655 DCHECK(txn); | 1651 DCHECK(txn); |
1656 DCHECK(!filename_base_.empty()); | 1652 DCHECK(!db_state_manager_.filename_base().empty()); |
1657 | 1653 |
1658 // Only use the prefix set if database is present and non-empty. | 1654 // Only use the prefix set if database is present and non-empty. |
1659 if (!GetFileSizeOrZero(db_filename)) | 1655 if (!GetFileSizeOrZero(db_filename)) |
1660 return; | 1656 return; |
1661 | 1657 |
1662 // Cleanup any stale bloom filter (no longer used). | 1658 // Cleanup any stale bloom filter (no longer used). |
1663 // TODO(shess): Track existence to drive removal of this code? | 1659 // TODO(shess): Track existence to drive removal of this code? |
1664 const base::FilePath bloom_filter_filename = | 1660 const base::FilePath bloom_filter_filename = |
1665 BloomFilterForFilename(db_filename); | 1661 BloomFilterForFilename(db_filename); |
1666 base::DeleteFile(bloom_filter_filename, false); | 1662 base::DeleteFile(bloom_filter_filename, false); |
1667 | 1663 |
1668 const base::TimeTicks before = base::TimeTicks::Now(); | 1664 const base::TimeTicks before = base::TimeTicks::Now(); |
1669 scoped_ptr<const PrefixSet> new_prefix_set = | 1665 scoped_ptr<const PrefixSet> new_prefix_set = |
1670 PrefixSet::LoadFile(PrefixSetForFilename(db_filename)); | 1666 PrefixSet::LoadFile(PrefixSetForFilename(db_filename)); |
1671 if (!new_prefix_set.get()) | 1667 if (!new_prefix_set.get()) |
1672 RecordFailure(read_failure_type); | 1668 RecordFailure(read_failure_type); |
1673 txn->SwapPrefixSet(prefix_set_id, new_prefix_set.Pass()); | 1669 txn->SwapPrefixSet(prefix_set_id, new_prefix_set.Pass()); |
1674 UMA_HISTOGRAM_TIMES("SB2.PrefixSetLoad", base::TimeTicks::Now() - before); | 1670 UMA_HISTOGRAM_TIMES("SB2.PrefixSetLoad", base::TimeTicks::Now() - before); |
1675 } | 1671 } |
1676 | 1672 |
1677 bool SafeBrowsingDatabaseNew::Delete() { | 1673 bool SafeBrowsingDatabaseNew::Delete() { |
1678 DCHECK(thread_checker_.CalledOnValidThread()); | 1674 DCHECK(thread_checker_.CalledOnValidThread()); |
1679 DCHECK(!filename_base_.empty()); | 1675 DCHECK(!db_state_manager_.filename_base().empty()); |
1680 | 1676 |
1681 // TODO(shess): This is a mess. SafeBrowsingFileStore::Delete() closes the | 1677 // TODO(shess): This is a mess. SafeBrowsingFileStore::Delete() closes the |
1682 // store before calling DeleteStore(). DeleteStore() deletes transient files | 1678 // store before calling DeleteStore(). DeleteStore() deletes transient files |
1683 // in addition to the main file. Probably all of these should be converted to | 1679 // in addition to the main file. Probably all of these should be converted to |
1684 // a helper which calls Delete() if the store exists, else DeleteStore() on | 1680 // a helper which calls Delete() if the store exists, else DeleteStore() on |
1685 // the generated filename. | 1681 // the generated filename. |
1686 | 1682 |
1687 // TODO(shess): Determine if the histograms are useful in any way. I cannot | 1683 // TODO(shess): Determine if the histograms are useful in any way. I cannot |
1688 // recall any action taken as a result of their values, in which case it might | 1684 // recall any action taken as a result of their values, in which case it might |
1689 // make more sense to histogram an overall thumbs-up/-down and just dig deeper | 1685 // make more sense to histogram an overall thumbs-up/-down and just dig deeper |
(...skipping 15 matching lines...) Expand all Loading... |
1705 const bool r4 = download_whitelist_store_.get() ? | 1701 const bool r4 = download_whitelist_store_.get() ? |
1706 download_whitelist_store_->Delete() : true; | 1702 download_whitelist_store_->Delete() : true; |
1707 if (!r4) | 1703 if (!r4) |
1708 RecordFailure(FAILURE_DATABASE_STORE_DELETE); | 1704 RecordFailure(FAILURE_DATABASE_STORE_DELETE); |
1709 | 1705 |
1710 const bool r5 = inclusion_whitelist_store_.get() ? | 1706 const bool r5 = inclusion_whitelist_store_.get() ? |
1711 inclusion_whitelist_store_->Delete() : true; | 1707 inclusion_whitelist_store_->Delete() : true; |
1712 if (!r5) | 1708 if (!r5) |
1713 RecordFailure(FAILURE_DATABASE_STORE_DELETE); | 1709 RecordFailure(FAILURE_DATABASE_STORE_DELETE); |
1714 | 1710 |
1715 const base::FilePath browse_filename = BrowseDBFilename(filename_base_); | 1711 const base::FilePath browse_filename = |
| 1712 BrowseDBFilename(db_state_manager_.filename_base()); |
1716 const base::FilePath bloom_filter_filename = | 1713 const base::FilePath bloom_filter_filename = |
1717 BloomFilterForFilename(browse_filename); | 1714 BloomFilterForFilename(browse_filename); |
1718 const bool r6 = base::DeleteFile(bloom_filter_filename, false); | 1715 const bool r6 = base::DeleteFile(bloom_filter_filename, false); |
1719 if (!r6) | 1716 if (!r6) |
1720 RecordFailure(FAILURE_DATABASE_FILTER_DELETE); | 1717 RecordFailure(FAILURE_DATABASE_FILTER_DELETE); |
1721 | 1718 |
1722 const base::FilePath browse_prefix_set_filename = | 1719 const base::FilePath browse_prefix_set_filename = |
1723 PrefixSetForFilename(browse_filename); | 1720 PrefixSetForFilename(browse_filename); |
1724 const bool r7 = base::DeleteFile(browse_prefix_set_filename, false); | 1721 const bool r7 = base::DeleteFile(browse_prefix_set_filename, false); |
1725 if (!r7) | 1722 if (!r7) |
1726 RecordFailure(FAILURE_BROWSE_PREFIX_SET_DELETE); | 1723 RecordFailure(FAILURE_BROWSE_PREFIX_SET_DELETE); |
1727 | 1724 |
1728 const base::FilePath extension_blacklist_filename = | 1725 const base::FilePath extension_blacklist_filename = |
1729 ExtensionBlacklistDBFilename(filename_base_); | 1726 ExtensionBlacklistDBFilename(db_state_manager_.filename_base()); |
1730 const bool r8 = base::DeleteFile(extension_blacklist_filename, false); | 1727 const bool r8 = base::DeleteFile(extension_blacklist_filename, false); |
1731 if (!r8) | 1728 if (!r8) |
1732 RecordFailure(FAILURE_EXTENSION_BLACKLIST_DELETE); | 1729 RecordFailure(FAILURE_EXTENSION_BLACKLIST_DELETE); |
1733 | 1730 |
1734 const base::FilePath side_effect_free_whitelist_filename = | 1731 const base::FilePath side_effect_free_whitelist_filename = |
1735 SideEffectFreeWhitelistDBFilename(filename_base_); | 1732 SideEffectFreeWhitelistDBFilename(db_state_manager_.filename_base()); |
1736 const bool r9 = base::DeleteFile(side_effect_free_whitelist_filename, | 1733 const bool r9 = base::DeleteFile(side_effect_free_whitelist_filename, |
1737 false); | 1734 false); |
1738 if (!r9) | 1735 if (!r9) |
1739 RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_DELETE); | 1736 RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_DELETE); |
1740 | 1737 |
1741 const base::FilePath side_effect_free_whitelist_prefix_set_filename = | 1738 const base::FilePath side_effect_free_whitelist_prefix_set_filename = |
1742 PrefixSetForFilename(side_effect_free_whitelist_filename); | 1739 PrefixSetForFilename(side_effect_free_whitelist_filename); |
1743 const bool r10 = base::DeleteFile( | 1740 const bool r10 = base::DeleteFile( |
1744 side_effect_free_whitelist_prefix_set_filename, | 1741 side_effect_free_whitelist_prefix_set_filename, |
1745 false); | 1742 false); |
1746 if (!r10) | 1743 if (!r10) |
1747 RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_DELETE); | 1744 RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_DELETE); |
1748 | 1745 |
1749 const bool r11 = base::DeleteFile(IpBlacklistDBFilename(filename_base_), | 1746 const bool r11 = base::DeleteFile( |
1750 false); | 1747 IpBlacklistDBFilename(db_state_manager_.filename_base()), false); |
1751 if (!r11) | 1748 if (!r11) |
1752 RecordFailure(FAILURE_IP_BLACKLIST_DELETE); | 1749 RecordFailure(FAILURE_IP_BLACKLIST_DELETE); |
1753 | 1750 |
1754 const bool r12 = | 1751 const bool r12 = base::DeleteFile( |
1755 base::DeleteFile(UnwantedSoftwareDBFilename(filename_base_), false); | 1752 UnwantedSoftwareDBFilename(db_state_manager_.filename_base()), false); |
1756 if (!r12) | 1753 if (!r12) |
1757 RecordFailure(FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_DELETE); | 1754 RecordFailure(FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_DELETE); |
1758 | 1755 |
1759 return r1 && r2 && r3 && r4 && r5 && r6 && r7 && r8 && r9 && r10 && r11 && | 1756 return r1 && r2 && r3 && r4 && r5 && r6 && r7 && r8 && r9 && r10 && r11 && |
1760 r12; | 1757 r12; |
1761 } | 1758 } |
1762 | 1759 |
1763 void SafeBrowsingDatabaseNew::WritePrefixSet(const base::FilePath& db_filename, | 1760 void SafeBrowsingDatabaseNew::WritePrefixSet(const base::FilePath& db_filename, |
1764 PrefixSetId prefix_set_id, | 1761 PrefixSetId prefix_set_id, |
1765 FailureType write_failure_type) { | 1762 FailureType write_failure_type) { |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1921 else | 1918 else |
1922 NOTREACHED(); // Add support for new lists above. | 1919 NOTREACHED(); // Add support for new lists above. |
1923 | 1920 |
1924 // Histogram properties as in UMA_HISTOGRAM_COUNTS macro. | 1921 // Histogram properties as in UMA_HISTOGRAM_COUNTS macro. |
1925 base::HistogramBase* histogram_pointer = base::Histogram::FactoryGet( | 1922 base::HistogramBase* histogram_pointer = base::Histogram::FactoryGet( |
1926 histogram_name, 1, 1000000, 50, | 1923 histogram_name, 1, 1000000, 50, |
1927 base::HistogramBase::kUmaTargetedHistogramFlag); | 1924 base::HistogramBase::kUmaTargetedHistogramFlag); |
1928 | 1925 |
1929 histogram_pointer->Add(file_size_kilobytes); | 1926 histogram_pointer->Add(file_size_kilobytes); |
1930 } | 1927 } |
OLD | NEW |