| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "base/base64.h" | 5 #include "base/base64.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/metrics/histogram_macros.h" | 9 #include "base/metrics/histogram_macros.h" |
| 10 #include "base/metrics/sparse_histogram.h" | 10 #include "base/metrics/sparse_histogram.h" |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 | 196 |
| 197 V4Store::V4Store(const scoped_refptr<base::SequencedTaskRunner>& task_runner, | 197 V4Store::V4Store(const scoped_refptr<base::SequencedTaskRunner>& task_runner, |
| 198 const base::FilePath& store_path, | 198 const base::FilePath& store_path, |
| 199 const int64_t old_file_size) | 199 const int64_t old_file_size) |
| 200 : file_size_(old_file_size), | 200 : file_size_(old_file_size), |
| 201 has_valid_data_(false), | 201 has_valid_data_(false), |
| 202 store_path_(store_path), | 202 store_path_(store_path), |
| 203 task_runner_(task_runner) {} | 203 task_runner_(task_runner) {} |
| 204 | 204 |
| 205 V4Store::~V4Store() { | 205 V4Store::~V4Store() { |
| 206 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 206 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
| 207 } | 207 } |
| 208 | 208 |
| 209 std::string V4Store::DebugString() const { | 209 std::string V4Store::DebugString() const { |
| 210 std::string state_base64; | 210 std::string state_base64; |
| 211 base::Base64Encode(state_, &state_base64); | 211 base::Base64Encode(state_, &state_base64); |
| 212 | 212 |
| 213 return base::StringPrintf("path: %" PRIsFP "; state: %s", | 213 return base::StringPrintf("path: %" PRIsFP "; state: %s", |
| 214 store_path_.value().c_str(), state_base64.c_str()); | 214 store_path_.value().c_str(), state_base64.c_str()); |
| 215 } | 215 } |
| 216 | 216 |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 | 521 |
| 522 (*prefix_map_to_update)[prefix_size].reserve(existing_capacity + | 522 (*prefix_map_to_update)[prefix_size].reserve(existing_capacity + |
| 523 prefix_length_to_add); | 523 prefix_length_to_add); |
| 524 } | 524 } |
| 525 } | 525 } |
| 526 | 526 |
| 527 ApplyUpdateResult V4Store::MergeUpdate(const HashPrefixMap& old_prefixes_map, | 527 ApplyUpdateResult V4Store::MergeUpdate(const HashPrefixMap& old_prefixes_map, |
| 528 const HashPrefixMap& additions_map, | 528 const HashPrefixMap& additions_map, |
| 529 const RepeatedField<int32>* raw_removals, | 529 const RepeatedField<int32>* raw_removals, |
| 530 const std::string& expected_checksum) { | 530 const std::string& expected_checksum) { |
| 531 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 531 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
| 532 DCHECK(hash_prefix_map_.empty()); | 532 DCHECK(hash_prefix_map_.empty()); |
| 533 | 533 |
| 534 bool calculate_checksum = !expected_checksum.empty(); | 534 bool calculate_checksum = !expected_checksum.empty(); |
| 535 if (calculate_checksum && | 535 if (calculate_checksum && |
| 536 (expected_checksum.size() != crypto::kSHA256Length)) { | 536 (expected_checksum.size() != crypto::kSHA256Length)) { |
| 537 return CHECKSUM_MISMATCH_FAILURE; | 537 return CHECKSUM_MISMATCH_FAILURE; |
| 538 } | 538 } |
| 539 | 539 |
| 540 hash_prefix_map_.clear(); | 540 hash_prefix_map_.clear(); |
| 541 ReserveSpaceInPrefixMap(old_prefixes_map, &hash_prefix_map_); | 541 ReserveSpaceInPrefixMap(old_prefixes_map, &hash_prefix_map_); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 #endif | 653 #endif |
| 654 return CHECKSUM_MISMATCH_FAILURE; | 654 return CHECKSUM_MISMATCH_FAILURE; |
| 655 } | 655 } |
| 656 } | 656 } |
| 657 } | 657 } |
| 658 | 658 |
| 659 return APPLY_UPDATE_SUCCESS; | 659 return APPLY_UPDATE_SUCCESS; |
| 660 } | 660 } |
| 661 | 661 |
| 662 StoreReadResult V4Store::ReadFromDisk() { | 662 StoreReadResult V4Store::ReadFromDisk() { |
| 663 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 663 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
| 664 | 664 |
| 665 V4StoreFileFormat file_format; | 665 V4StoreFileFormat file_format; |
| 666 int64_t file_size; | 666 int64_t file_size; |
| 667 TimeTicks before = TimeTicks::Now(); | 667 TimeTicks before = TimeTicks::Now(); |
| 668 { | 668 { |
| 669 // A temporary scope to make sure that |contents| get destroyed as soon as | 669 // A temporary scope to make sure that |contents| get destroyed as soon as |
| 670 // we are doing using it. | 670 // we are doing using it. |
| 671 std::string contents; | 671 std::string contents; |
| 672 bool read_success = base::ReadFileToString(store_path_, &contents); | 672 bool read_success = base::ReadFileToString(store_path_, &contents); |
| 673 if (!read_success) { | 673 if (!read_success) { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 789 if (result == 0) { | 789 if (result == 0) { |
| 790 return true; | 790 return true; |
| 791 } else if (result < 0) { | 791 } else if (result < 0) { |
| 792 return HashPrefixMatches(hash_prefix, begin, mid); | 792 return HashPrefixMatches(hash_prefix, begin, mid); |
| 793 } else { | 793 } else { |
| 794 return HashPrefixMatches(hash_prefix, mid + prefix_size, end); | 794 return HashPrefixMatches(hash_prefix, mid + prefix_size, end); |
| 795 } | 795 } |
| 796 } | 796 } |
| 797 | 797 |
| 798 bool V4Store::VerifyChecksum() { | 798 bool V4Store::VerifyChecksum() { |
| 799 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 799 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
| 800 | 800 |
| 801 if (expected_checksum_.empty()) { | 801 if (expected_checksum_.empty()) { |
| 802 // Nothing to check here folks! | 802 // Nothing to check here folks! |
| 803 // TODO(vakh): Do not allow empty checksums. | 803 // TODO(vakh): Do not allow empty checksums. |
| 804 return true; | 804 return true; |
| 805 } | 805 } |
| 806 | 806 |
| 807 IteratorMap iterator_map; | 807 IteratorMap iterator_map; |
| 808 HashPrefix next_smallest_prefix; | 808 HashPrefix next_smallest_prefix; |
| 809 InitializeIteratorMap(hash_prefix_map_, &iterator_map); | 809 InitializeIteratorMap(hash_prefix_map_, &iterator_map); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 856 base_metric + suffix, 1, 1000000, 50, | 856 base_metric + suffix, 1, 1000000, 50, |
| 857 base::HistogramBase::kUmaTargetedHistogramFlag); | 857 base::HistogramBase::kUmaTargetedHistogramFlag); |
| 858 if (histogram) { | 858 if (histogram) { |
| 859 const int64_t file_size_kilobytes = file_size_ / 1024; | 859 const int64_t file_size_kilobytes = file_size_ / 1024; |
| 860 histogram->Add(file_size_kilobytes); | 860 histogram->Add(file_size_kilobytes); |
| 861 } | 861 } |
| 862 return file_size_; | 862 return file_size_; |
| 863 } | 863 } |
| 864 | 864 |
| 865 } // namespace safe_browsing | 865 } // namespace safe_browsing |
| OLD | NEW |