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

Side by Side Diff: components/user_prefs/tracked/pref_hash_store_impl.cc

Issue 2111253002: Clean up old legacy preference migration logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove now unused kHashStoreId in unit test Created 4 years, 5 months 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "components/user_prefs/tracked/pref_hash_store_impl.h" 5 #include "components/user_prefs/tracked/pref_hash_store_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 25 matching lines...) Expand all
36 bool HasHash(const std::string& path) const override; 36 bool HasHash(const std::string& path) const override;
37 void ImportHash(const std::string& path, const base::Value* hash) override; 37 void ImportHash(const std::string& path, const base::Value* hash) override;
38 void ClearHash(const std::string& path) override; 38 void ClearHash(const std::string& path) override;
39 bool IsSuperMACValid() const override; 39 bool IsSuperMACValid() const override;
40 bool StampSuperMac() override; 40 bool StampSuperMac() override;
41 41
42 private: 42 private:
43 bool GetSplitMacs(const std::string& path, 43 bool GetSplitMacs(const std::string& path,
44 std::map<std::string, std::string>* split_macs) const; 44 std::map<std::string, std::string>* split_macs) const;
45 45
46 HashStoreContents* contents() {
47 return outer_->legacy_hash_store_contents_
48 ? outer_->legacy_hash_store_contents_.get()
49 : contents_.get();
50 }
51
52 const HashStoreContents* contents() const {
53 return outer_->legacy_hash_store_contents_
54 ? outer_->legacy_hash_store_contents_.get()
55 : contents_.get();
56 }
57
58 PrefHashStoreImpl* outer_; 46 PrefHashStoreImpl* outer_;
59 std::unique_ptr<HashStoreContents> contents_; 47 std::unique_ptr<HashStoreContents> contents_;
60 48
61 bool super_mac_valid_; 49 bool super_mac_valid_;
62 bool super_mac_dirty_; 50 bool super_mac_dirty_;
63 51
64 DISALLOW_COPY_AND_ASSIGN(PrefHashStoreTransactionImpl); 52 DISALLOW_COPY_AND_ASSIGN(PrefHashStoreTransactionImpl);
65 }; 53 };
66 54
67 PrefHashStoreImpl::PrefHashStoreImpl(const std::string& seed, 55 PrefHashStoreImpl::PrefHashStoreImpl(const std::string& seed,
68 const std::string& device_id, 56 const std::string& device_id,
69 bool use_super_mac) 57 bool use_super_mac)
70 : pref_hash_calculator_(seed, device_id), use_super_mac_(use_super_mac) { 58 : pref_hash_calculator_(seed, device_id), use_super_mac_(use_super_mac) {
71 } 59 }
72 60
73 PrefHashStoreImpl::~PrefHashStoreImpl() { 61 PrefHashStoreImpl::~PrefHashStoreImpl() {
74 } 62 }
75 63
76 void PrefHashStoreImpl::set_legacy_hash_store_contents(
77 std::unique_ptr<HashStoreContents> legacy_hash_store_contents) {
78 legacy_hash_store_contents_ = std::move(legacy_hash_store_contents);
79 }
80
81 std::unique_ptr<PrefHashStoreTransaction> PrefHashStoreImpl::BeginTransaction( 64 std::unique_ptr<PrefHashStoreTransaction> PrefHashStoreImpl::BeginTransaction(
82 std::unique_ptr<HashStoreContents> storage) { 65 std::unique_ptr<HashStoreContents> storage) {
83 return std::unique_ptr<PrefHashStoreTransaction>( 66 return std::unique_ptr<PrefHashStoreTransaction>(
84 new PrefHashStoreTransactionImpl(this, std::move(storage))); 67 new PrefHashStoreTransactionImpl(this, std::move(storage)));
85 } 68 }
86 69
87 PrefHashStoreImpl::PrefHashStoreTransactionImpl::PrefHashStoreTransactionImpl( 70 PrefHashStoreImpl::PrefHashStoreTransactionImpl::PrefHashStoreTransactionImpl(
88 PrefHashStoreImpl* outer, 71 PrefHashStoreImpl* outer,
89 std::unique_ptr<HashStoreContents> storage) 72 std::unique_ptr<HashStoreContents> storage)
90 : outer_(outer), 73 : outer_(outer),
91 contents_(std::move(storage)), 74 contents_(std::move(storage)),
92 super_mac_valid_(false), 75 super_mac_valid_(false),
93 super_mac_dirty_(false) { 76 super_mac_dirty_(false) {
94 if (!outer_->use_super_mac_) 77 if (!outer_->use_super_mac_)
95 return; 78 return;
96 79
97 // The store must be initialized and have a valid super MAC to be trusted. 80 // The store must be initialized and have a valid super MAC to be trusted.
98 81
99 const base::DictionaryValue* store_contents = contents()->GetContents(); 82 const base::DictionaryValue* store_contents = contents_->GetContents();
100 if (!store_contents) 83 if (!store_contents)
101 return; 84 return;
102 85
103 std::string super_mac = contents()->GetSuperMac(); 86 std::string super_mac = contents_->GetSuperMac();
104 if (super_mac.empty()) 87 if (super_mac.empty())
105 return; 88 return;
106 89
107 super_mac_valid_ = outer_->pref_hash_calculator_.Validate( 90 super_mac_valid_ =
108 contents()->hash_store_id(), store_contents, 91 outer_->pref_hash_calculator_.Validate("", store_contents, super_mac) ==
109 super_mac) == PrefHashCalculator::VALID; 92 PrefHashCalculator::VALID;
110 } 93 }
111 94
112 PrefHashStoreImpl::PrefHashStoreTransactionImpl:: 95 PrefHashStoreImpl::PrefHashStoreTransactionImpl::
113 ~PrefHashStoreTransactionImpl() { 96 ~PrefHashStoreTransactionImpl() {
114 if (super_mac_dirty_ && outer_->use_super_mac_) { 97 if (super_mac_dirty_ && outer_->use_super_mac_) {
115 // Get the dictionary of hashes (or NULL if it doesn't exist). 98 // Get the dictionary of hashes (or NULL if it doesn't exist).
116 const base::DictionaryValue* hashes_dict = contents()->GetContents(); 99 const base::DictionaryValue* hashes_dict = contents_->GetContents();
117 contents()->SetSuperMac(outer_->pref_hash_calculator_.Calculate( 100 contents_->SetSuperMac(
118 contents()->hash_store_id(), hashes_dict)); 101 outer_->pref_hash_calculator_.Calculate("", hashes_dict));
119 } 102 }
120 } 103 }
121 104
122 PrefHashStoreTransaction::ValueState 105 PrefHashStoreTransaction::ValueState
123 PrefHashStoreImpl::PrefHashStoreTransactionImpl::CheckValue( 106 PrefHashStoreImpl::PrefHashStoreTransactionImpl::CheckValue(
124 const std::string& path, 107 const std::string& path,
125 const base::Value* initial_value) const { 108 const base::Value* initial_value) const {
126 const base::DictionaryValue* hashes_dict = contents()->GetContents(); 109 const base::DictionaryValue* hashes_dict = contents_->GetContents();
127 110
128 std::string last_hash; 111 std::string last_hash;
129 if (hashes_dict) 112 if (hashes_dict)
130 hashes_dict->GetString(path, &last_hash); 113 hashes_dict->GetString(path, &last_hash);
131 114
132 if (last_hash.empty()) { 115 if (last_hash.empty()) {
133 // In the absence of a hash for this pref, always trust a NULL value, but 116 // In the absence of a hash for this pref, always trust a NULL value, but
134 // only trust an existing value if the initial hashes dictionary is trusted. 117 // only trust an existing value if the initial hashes dictionary is trusted.
135 if (!initial_value) 118 if (!initial_value)
136 return TRUSTED_NULL_VALUE; 119 return TRUSTED_NULL_VALUE;
(...skipping 16 matching lines...) Expand all
153 NOTREACHED() << "Unexpected PrefHashCalculator::ValidationResult: " 136 NOTREACHED() << "Unexpected PrefHashCalculator::ValidationResult: "
154 << validation_result; 137 << validation_result;
155 return UNTRUSTED_UNKNOWN_VALUE; 138 return UNTRUSTED_UNKNOWN_VALUE;
156 } 139 }
157 140
158 void PrefHashStoreImpl::PrefHashStoreTransactionImpl::StoreHash( 141 void PrefHashStoreImpl::PrefHashStoreTransactionImpl::StoreHash(
159 const std::string& path, 142 const std::string& path,
160 const base::Value* new_value) { 143 const base::Value* new_value) {
161 const std::string mac = 144 const std::string mac =
162 outer_->pref_hash_calculator_.Calculate(path, new_value); 145 outer_->pref_hash_calculator_.Calculate(path, new_value);
163 (*contents()->GetMutableContents())->SetString(path, mac); 146 (*contents_->GetMutableContents())->SetString(path, mac);
164 super_mac_dirty_ = true; 147 super_mac_dirty_ = true;
165 } 148 }
166 149
167 PrefHashStoreTransaction::ValueState 150 PrefHashStoreTransaction::ValueState
168 PrefHashStoreImpl::PrefHashStoreTransactionImpl::CheckSplitValue( 151 PrefHashStoreImpl::PrefHashStoreTransactionImpl::CheckSplitValue(
169 const std::string& path, 152 const std::string& path,
170 const base::DictionaryValue* initial_split_value, 153 const base::DictionaryValue* initial_split_value,
171 std::vector<std::string>* invalid_keys) const { 154 std::vector<std::string>* invalid_keys) const {
172 DCHECK(invalid_keys && invalid_keys->empty()); 155 DCHECK(invalid_keys && invalid_keys->empty());
173 156
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 209
227 return invalid_keys->empty() 210 return invalid_keys->empty()
228 ? (has_secure_legacy_id_hashes ? SECURE_LEGACY : UNCHANGED) 211 ? (has_secure_legacy_id_hashes ? SECURE_LEGACY : UNCHANGED)
229 : CHANGED; 212 : CHANGED;
230 } 213 }
231 214
232 void PrefHashStoreImpl::PrefHashStoreTransactionImpl::StoreSplitHash( 215 void PrefHashStoreImpl::PrefHashStoreTransactionImpl::StoreSplitHash(
233 const std::string& path, 216 const std::string& path,
234 const base::DictionaryValue* split_value) { 217 const base::DictionaryValue* split_value) {
235 std::unique_ptr<HashStoreContents::MutableDictionary> mutable_dictionary = 218 std::unique_ptr<HashStoreContents::MutableDictionary> mutable_dictionary =
236 contents()->GetMutableContents(); 219 contents_->GetMutableContents();
237 (*mutable_dictionary)->Remove(path, NULL); 220 (*mutable_dictionary)->Remove(path, NULL);
238 221
239 if (split_value) { 222 if (split_value) {
240 std::string keyed_path(path); 223 std::string keyed_path(path);
241 keyed_path.push_back('.'); 224 keyed_path.push_back('.');
242 const size_t common_part_length = keyed_path.length(); 225 const size_t common_part_length = keyed_path.length();
243 for (base::DictionaryValue::Iterator it(*split_value); !it.IsAtEnd(); 226 for (base::DictionaryValue::Iterator it(*split_value); !it.IsAtEnd();
244 it.Advance()) { 227 it.Advance()) {
245 // Keep the common part from the old |keyed_path| and replace the key to 228 // Keep the common part from the old |keyed_path| and replace the key to
246 // get the new |keyed_path|. 229 // get the new |keyed_path|.
247 keyed_path.replace(common_part_length, std::string::npos, it.key()); 230 keyed_path.replace(common_part_length, std::string::npos, it.key());
248 (*mutable_dictionary) 231 (*mutable_dictionary)
249 ->SetString(keyed_path, outer_->pref_hash_calculator_.Calculate( 232 ->SetString(keyed_path, outer_->pref_hash_calculator_.Calculate(
250 keyed_path, &it.value())); 233 keyed_path, &it.value()));
251 } 234 }
252 } 235 }
253 super_mac_dirty_ = true; 236 super_mac_dirty_ = true;
254 } 237 }
255 238
256 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::GetSplitMacs( 239 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::GetSplitMacs(
257 const std::string& key, 240 const std::string& key,
258 std::map<std::string, std::string>* split_macs) const { 241 std::map<std::string, std::string>* split_macs) const {
259 DCHECK(split_macs); 242 DCHECK(split_macs);
260 DCHECK(split_macs->empty()); 243 DCHECK(split_macs->empty());
261 244
262 const base::DictionaryValue* hashes_dict = contents()->GetContents(); 245 const base::DictionaryValue* hashes_dict = contents_->GetContents();
263 const base::DictionaryValue* split_mac_dictionary = NULL; 246 const base::DictionaryValue* split_mac_dictionary = NULL;
264 if (!hashes_dict || !hashes_dict->GetDictionary(key, &split_mac_dictionary)) 247 if (!hashes_dict || !hashes_dict->GetDictionary(key, &split_mac_dictionary))
265 return false; 248 return false;
266 for (base::DictionaryValue::Iterator it(*split_mac_dictionary); !it.IsAtEnd(); 249 for (base::DictionaryValue::Iterator it(*split_mac_dictionary); !it.IsAtEnd();
267 it.Advance()) { 250 it.Advance()) {
268 std::string mac_string; 251 std::string mac_string;
269 if (!it.value().GetAsString(&mac_string)) { 252 if (!it.value().GetAsString(&mac_string)) {
270 NOTREACHED(); 253 NOTREACHED();
271 continue; 254 continue;
272 } 255 }
273 split_macs->insert(make_pair(it.key(), mac_string)); 256 split_macs->insert(make_pair(it.key(), mac_string));
274 } 257 }
275 return true; 258 return true;
276 } 259 }
277 260
278 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::HasHash( 261 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::HasHash(
279 const std::string& path) const { 262 const std::string& path) const {
280 const base::DictionaryValue* hashes_dict = contents()->GetContents(); 263 const base::DictionaryValue* hashes_dict = contents_->GetContents();
281 return hashes_dict && hashes_dict->Get(path, NULL); 264 return hashes_dict && hashes_dict->Get(path, NULL);
282 } 265 }
283 266
284 void PrefHashStoreImpl::PrefHashStoreTransactionImpl::ImportHash( 267 void PrefHashStoreImpl::PrefHashStoreTransactionImpl::ImportHash(
285 const std::string& path, 268 const std::string& path,
286 const base::Value* hash) { 269 const base::Value* hash) {
287 DCHECK(hash); 270 DCHECK(hash);
288 271
289 (*contents()->GetMutableContents())->Set(path, hash->DeepCopy()); 272 (*contents_->GetMutableContents())->Set(path, hash->DeepCopy());
290 273
291 if (super_mac_valid_) 274 if (super_mac_valid_)
292 super_mac_dirty_ = true; 275 super_mac_dirty_ = true;
293 } 276 }
294 277
295 void PrefHashStoreImpl::PrefHashStoreTransactionImpl::ClearHash( 278 void PrefHashStoreImpl::PrefHashStoreTransactionImpl::ClearHash(
296 const std::string& path) { 279 const std::string& path) {
297 if ((*contents()->GetMutableContents())->RemovePath(path, NULL) && 280 if ((*contents_->GetMutableContents())->RemovePath(path, NULL) &&
298 super_mac_valid_) { 281 super_mac_valid_) {
299 super_mac_dirty_ = true; 282 super_mac_dirty_ = true;
300 } 283 }
301 } 284 }
302 285
303 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::IsSuperMACValid() const { 286 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::IsSuperMACValid() const {
304 return super_mac_valid_; 287 return super_mac_valid_;
305 } 288 }
306 289
307 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::StampSuperMac() { 290 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::StampSuperMac() {
308 if (!outer_->use_super_mac_ || super_mac_valid_) 291 if (!outer_->use_super_mac_ || super_mac_valid_)
309 return false; 292 return false;
310 super_mac_dirty_ = true; 293 super_mac_dirty_ = true;
311 return true; 294 return true;
312 } 295 }
OLDNEW
« no previous file with comments | « components/user_prefs/tracked/pref_hash_store_impl.h ('k') | components/user_prefs/tracked/pref_service_hash_store_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698