Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(337)

Side by Side Diff: chrome/browser/safe_browsing/prefix_set.h

Issue 781613002: Make SafeBrowsingDatabase's PrefixSets only updatable by swapping a new one in. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@a2_threadchecks
Patch Set: rebase off of CL 744183002 Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/prefix_set.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // A read-only set implementation for |SBPrefix| items. Prefixes are 5 // A read-only set implementation for |SBPrefix| items. Prefixes are
6 // sorted and stored as 16-bit deltas from the previous prefix. An 6 // sorted and stored as 16-bit deltas from the previous prefix. An
7 // index structure provides quick random access, and also handles 7 // index structure provides quick random access, and also handles
8 // cases where 16 bits cannot encode a delta. 8 // cases where 16 bits cannot encode a delta.
9 // 9 //
10 // For example, the sequence {20, 25, 41, 65432, 150000, 160000} would 10 // For example, the sequence {20, 25, 41, 65432, 150000, 160000} would
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 64
65 class PrefixSet { 65 class PrefixSet {
66 public: 66 public:
67 ~PrefixSet(); 67 ~PrefixSet();
68 68
69 // |true| if |hash| is in the hashes passed to the set's builder, or if 69 // |true| if |hash| is in the hashes passed to the set's builder, or if
70 // |hash.prefix| is one of the prefixes passed to the set's builder. 70 // |hash.prefix| is one of the prefixes passed to the set's builder.
71 bool Exists(const SBFullHash& hash) const; 71 bool Exists(const SBFullHash& hash) const;
72 72
73 // Persist the set on disk. 73 // Persist the set on disk.
74 static scoped_ptr<PrefixSet> LoadFile(const base::FilePath& filter_name); 74 static scoped_ptr<const PrefixSet> LoadFile(
75 const base::FilePath& filter_name);
75 bool WriteFile(const base::FilePath& filter_name) const; 76 bool WriteFile(const base::FilePath& filter_name) const;
76 77
77 private: 78 private:
78 friend class PrefixSetBuilder; 79 friend class PrefixSetBuilder;
79 80
80 friend class PrefixSetTest; 81 friend class PrefixSetTest;
81 FRIEND_TEST_ALL_PREFIXES(PrefixSetTest, AllBig); 82 FRIEND_TEST_ALL_PREFIXES(PrefixSetTest, AllBig);
82 FRIEND_TEST_ALL_PREFIXES(PrefixSetTest, EdgeCases); 83 FRIEND_TEST_ALL_PREFIXES(PrefixSetTest, EdgeCases);
83 FRIEND_TEST_ALL_PREFIXES(PrefixSetTest, Empty); 84 FRIEND_TEST_ALL_PREFIXES(PrefixSetTest, Empty);
84 FRIEND_TEST_ALL_PREFIXES(PrefixSetTest, FullHashBuild); 85 FRIEND_TEST_ALL_PREFIXES(PrefixSetTest, FullHashBuild);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 // Helper for unit tests and format conversion. 155 // Helper for unit tests and format conversion.
155 explicit PrefixSetBuilder(const std::vector<SBPrefix>& prefixes); 156 explicit PrefixSetBuilder(const std::vector<SBPrefix>& prefixes);
156 157
157 // Add a prefix to the set. Prefixes must arrive in ascending order. 158 // Add a prefix to the set. Prefixes must arrive in ascending order.
158 // Duplicate prefixes are dropped. 159 // Duplicate prefixes are dropped.
159 void AddPrefix(SBPrefix prefix); 160 void AddPrefix(SBPrefix prefix);
160 161
161 // Flush any buffered prefixes, and return the final PrefixSet instance. 162 // Flush any buffered prefixes, and return the final PrefixSet instance.
162 // |hashes| are sorted and stored in |full_hashes_|. Any call other than the 163 // |hashes| are sorted and stored in |full_hashes_|. Any call other than the
163 // destructor is illegal after this call. 164 // destructor is illegal after this call.
164 scoped_ptr<PrefixSet> GetPrefixSet(const std::vector<SBFullHash>& hashes); 165 scoped_ptr<const PrefixSet> GetPrefixSet(
166 const std::vector<SBFullHash>& hashes);
165 167
166 // Helper for clients which only track prefixes. Calls GetPrefixSet() with 168 // Helper for clients which only track prefixes. Calls GetPrefixSet() with
167 // empty hash vector. 169 // empty hash vector.
168 scoped_ptr<PrefixSet> GetPrefixSetNoHashes(); 170 scoped_ptr<const PrefixSet> GetPrefixSetNoHashes();
169 171
170 private: 172 private:
171 // Encode a run of deltas for |AddRun()|. The run is broken by a too-large 173 // Encode a run of deltas for |AddRun()|. The run is broken by a too-large
172 // delta, or kMaxRun, whichever comes first. 174 // delta, or kMaxRun, whichever comes first.
173 void EmitRun(); 175 void EmitRun();
174 176
175 // Buffers prefixes until enough are avaliable to emit a run. 177 // Buffers prefixes until enough are avaliable to emit a run.
176 std::vector<SBPrefix> buffer_; 178 std::vector<SBPrefix> buffer_;
177 179
178 // The PrefixSet being built. 180 // The PrefixSet being built.
179 scoped_ptr<PrefixSet> prefix_set_; 181 scoped_ptr<PrefixSet> prefix_set_;
180 }; 182 };
181 183
182 } // namespace safe_browsing 184 } // namespace safe_browsing
183 185
184 #endif // CHROME_BROWSER_SAFE_BROWSING_PREFIX_SET_H_ 186 #endif // CHROME_BROWSER_SAFE_BROWSING_PREFIX_SET_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/prefix_set.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698