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

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

Issue 1227973003: Componentize //chrome/browser/prefs/tracked. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years, 4 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 "chrome/browser/prefs/tracked/pref_hash_store_impl.h" 5 #include "components/user_prefs/tracked/pref_hash_store_impl.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/prefs/tracked/hash_store_contents.h" 10 #include "components/user_prefs/tracked/hash_store_contents.h"
11 #include "chrome/browser/prefs/tracked/pref_hash_store_transaction.h" 11 #include "components/user_prefs/tracked/pref_hash_store_transaction.h"
12 12
13 class PrefHashStoreImpl::PrefHashStoreTransactionImpl 13 class PrefHashStoreImpl::PrefHashStoreTransactionImpl
14 : public PrefHashStoreTransaction { 14 : public PrefHashStoreTransaction {
15 public: 15 public:
16 // Constructs a PrefHashStoreTransactionImpl which can use the private 16 // Constructs a PrefHashStoreTransactionImpl which can use the private
17 // members of its |outer| PrefHashStoreImpl. 17 // members of its |outer| PrefHashStoreImpl.
18 PrefHashStoreTransactionImpl(PrefHashStoreImpl* outer, 18 PrefHashStoreTransactionImpl(PrefHashStoreImpl* outer,
19 scoped_ptr<HashStoreContents> storage); 19 scoped_ptr<HashStoreContents> storage);
20 ~PrefHashStoreTransactionImpl() override; 20 ~PrefHashStoreTransactionImpl() override;
21 21
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 56
57 bool super_mac_valid_; 57 bool super_mac_valid_;
58 bool super_mac_dirty_; 58 bool super_mac_dirty_;
59 59
60 DISALLOW_COPY_AND_ASSIGN(PrefHashStoreTransactionImpl); 60 DISALLOW_COPY_AND_ASSIGN(PrefHashStoreTransactionImpl);
61 }; 61 };
62 62
63 PrefHashStoreImpl::PrefHashStoreImpl(const std::string& seed, 63 PrefHashStoreImpl::PrefHashStoreImpl(const std::string& seed,
64 const std::string& device_id, 64 const std::string& device_id,
65 bool use_super_mac) 65 bool use_super_mac)
66 : pref_hash_calculator_(seed, device_id), 66 : pref_hash_calculator_(seed, device_id), use_super_mac_(use_super_mac) {
67 use_super_mac_(use_super_mac) {
68 } 67 }
69 68
70 PrefHashStoreImpl::~PrefHashStoreImpl() { 69 PrefHashStoreImpl::~PrefHashStoreImpl() {
71 } 70 }
72 71
73 void PrefHashStoreImpl::set_legacy_hash_store_contents( 72 void PrefHashStoreImpl::set_legacy_hash_store_contents(
74 scoped_ptr<HashStoreContents> legacy_hash_store_contents) { 73 scoped_ptr<HashStoreContents> legacy_hash_store_contents) {
75 legacy_hash_store_contents_ = legacy_hash_store_contents.Pass(); 74 legacy_hash_store_contents_ = legacy_hash_store_contents.Pass();
76 } 75 }
77 76
(...skipping 16 matching lines...) Expand all
94 // The store must be initialized and have a valid super MAC to be trusted. 93 // The store must be initialized and have a valid super MAC to be trusted.
95 94
96 const base::DictionaryValue* store_contents = contents()->GetContents(); 95 const base::DictionaryValue* store_contents = contents()->GetContents();
97 if (!store_contents) 96 if (!store_contents)
98 return; 97 return;
99 98
100 std::string super_mac = contents()->GetSuperMac(); 99 std::string super_mac = contents()->GetSuperMac();
101 if (super_mac.empty()) 100 if (super_mac.empty())
102 return; 101 return;
103 102
104 super_mac_valid_ = 103 super_mac_valid_ = outer_->pref_hash_calculator_.Validate(
105 outer_->pref_hash_calculator_.Validate( 104 contents()->hash_store_id(), store_contents,
106 contents()->hash_store_id(), store_contents, super_mac) == 105 super_mac) == PrefHashCalculator::VALID;
107 PrefHashCalculator::VALID;
108 } 106 }
109 107
110 PrefHashStoreImpl::PrefHashStoreTransactionImpl:: 108 PrefHashStoreImpl::PrefHashStoreTransactionImpl::
111 ~PrefHashStoreTransactionImpl() { 109 ~PrefHashStoreTransactionImpl() {
112 if (super_mac_dirty_ && outer_->use_super_mac_) { 110 if (super_mac_dirty_ && outer_->use_super_mac_) {
113 // Get the dictionary of hashes (or NULL if it doesn't exist). 111 // Get the dictionary of hashes (or NULL if it doesn't exist).
114 const base::DictionaryValue* hashes_dict = contents()->GetContents(); 112 const base::DictionaryValue* hashes_dict = contents()->GetContents();
115 contents()->SetSuperMac(outer_->pref_hash_calculator_.Calculate( 113 contents()->SetSuperMac(outer_->pref_hash_calculator_.Calculate(
116 contents()->hash_store_id(), hashes_dict)); 114 contents()->hash_store_id(), hashes_dict));
117 } 115 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 for (base::DictionaryValue::Iterator it(*initial_split_value); !it.IsAtEnd(); 186 for (base::DictionaryValue::Iterator it(*initial_split_value); !it.IsAtEnd();
189 it.Advance()) { 187 it.Advance()) {
190 std::map<std::string, std::string>::iterator entry = 188 std::map<std::string, std::string>::iterator entry =
191 split_macs.find(it.key()); 189 split_macs.find(it.key());
192 if (entry == split_macs.end()) { 190 if (entry == split_macs.end()) {
193 invalid_keys->push_back(it.key()); 191 invalid_keys->push_back(it.key());
194 } else { 192 } else {
195 // Keep the common part from the old |keyed_path| and replace the key to 193 // Keep the common part from the old |keyed_path| and replace the key to
196 // get the new |keyed_path|. 194 // get the new |keyed_path|.
197 keyed_path.replace(common_part_length, std::string::npos, it.key()); 195 keyed_path.replace(common_part_length, std::string::npos, it.key());
198 switch (outer_->pref_hash_calculator_.Validate( 196 switch (outer_->pref_hash_calculator_.Validate(keyed_path, &it.value(),
199 keyed_path, &it.value(), entry->second)) { 197 entry->second)) {
200 case PrefHashCalculator::VALID: 198 case PrefHashCalculator::VALID:
201 break; 199 break;
202 case SECURE_LEGACY: 200 case SECURE_LEGACY:
203 // Secure legacy device IDs based hashes are still accepted, but we 201 // Secure legacy device IDs based hashes are still accepted, but we
204 // should make sure to notify the caller for him to update the legacy 202 // should make sure to notify the caller for him to update the legacy
205 // hashes. 203 // hashes.
206 has_secure_legacy_id_hashes = true; 204 has_secure_legacy_id_hashes = true;
207 break; 205 break;
208 case PrefHashCalculator::INVALID: 206 case PrefHashCalculator::INVALID:
209 invalid_keys->push_back(it.key()); 207 invalid_keys->push_back(it.key());
210 break; 208 break;
211 } 209 }
212 // Remove processed MACs, remaining MACs at the end will also be 210 // Remove processed MACs, remaining MACs at the end will also be
213 // considered invalid. 211 // considered invalid.
214 split_macs.erase(entry); 212 split_macs.erase(entry);
215 } 213 }
216 } 214 }
217 215
218 // Anything left in the map is missing from the data. 216 // Anything left in the map is missing from the data.
219 for (std::map<std::string, std::string>::const_iterator it = 217 for (std::map<std::string, std::string>::const_iterator it =
220 split_macs.begin(); 218 split_macs.begin();
221 it != split_macs.end(); 219 it != split_macs.end(); ++it) {
222 ++it) {
223 invalid_keys->push_back(it->first); 220 invalid_keys->push_back(it->first);
224 } 221 }
225 222
226 return invalid_keys->empty() 223 return invalid_keys->empty()
227 ? (has_secure_legacy_id_hashes ? SECURE_LEGACY : UNCHANGED) 224 ? (has_secure_legacy_id_hashes ? SECURE_LEGACY : UNCHANGED)
228 : CHANGED; 225 : CHANGED;
229 } 226 }
230 227
231 void PrefHashStoreImpl::PrefHashStoreTransactionImpl::StoreSplitHash( 228 void PrefHashStoreImpl::PrefHashStoreTransactionImpl::StoreSplitHash(
232 const std::string& path, 229 const std::string& path,
233 const base::DictionaryValue* split_value) { 230 const base::DictionaryValue* split_value) {
234 scoped_ptr<HashStoreContents::MutableDictionary> mutable_dictionary = 231 scoped_ptr<HashStoreContents::MutableDictionary> mutable_dictionary =
235 contents()->GetMutableContents(); 232 contents()->GetMutableContents();
236 (*mutable_dictionary)->Remove(path, NULL); 233 (*mutable_dictionary)->Remove(path, NULL);
237 234
238 if (split_value) { 235 if (split_value) {
239 std::string keyed_path(path); 236 std::string keyed_path(path);
240 keyed_path.push_back('.'); 237 keyed_path.push_back('.');
241 const size_t common_part_length = keyed_path.length(); 238 const size_t common_part_length = keyed_path.length();
242 for (base::DictionaryValue::Iterator it(*split_value); !it.IsAtEnd(); 239 for (base::DictionaryValue::Iterator it(*split_value); !it.IsAtEnd();
243 it.Advance()) { 240 it.Advance()) {
244 // Keep the common part from the old |keyed_path| and replace the key to 241 // Keep the common part from the old |keyed_path| and replace the key to
245 // get the new |keyed_path|. 242 // get the new |keyed_path|.
246 keyed_path.replace(common_part_length, std::string::npos, it.key()); 243 keyed_path.replace(common_part_length, std::string::npos, it.key());
247 (*mutable_dictionary)->SetString( 244 (*mutable_dictionary)
248 keyed_path, 245 ->SetString(keyed_path, outer_->pref_hash_calculator_.Calculate(
249 outer_->pref_hash_calculator_.Calculate(keyed_path, &it.value())); 246 keyed_path, &it.value()));
250 } 247 }
251 } 248 }
252 super_mac_dirty_ = true; 249 super_mac_dirty_ = true;
253 } 250 }
254 251
255 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::GetSplitMacs( 252 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::GetSplitMacs(
256 const std::string& key, 253 const std::string& key,
257 std::map<std::string, std::string>* split_macs) const { 254 std::map<std::string, std::string>* split_macs) const {
258 DCHECK(split_macs); 255 DCHECK(split_macs);
259 DCHECK(split_macs->empty()); 256 DCHECK(split_macs->empty());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::IsSuperMACValid() const { 299 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::IsSuperMACValid() const {
303 return super_mac_valid_; 300 return super_mac_valid_;
304 } 301 }
305 302
306 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::StampSuperMac() { 303 bool PrefHashStoreImpl::PrefHashStoreTransactionImpl::StampSuperMac() {
307 if (!outer_->use_super_mac_ || super_mac_valid_) 304 if (!outer_->use_super_mac_ || super_mac_valid_)
308 return false; 305 return false;
309 super_mac_dirty_ = true; 306 super_mac_dirty_ = true;
310 return true; 307 return true;
311 } 308 }
OLDNEW
« no previous file with comments | « components/user_prefs/tracked/pref_hash_store_impl.h ('k') | components/user_prefs/tracked/pref_hash_store_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698