| OLD | NEW |
| 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/pref_hash_store_impl.h" | 5 #include "chrome/browser/prefs/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/prefs/pref_registry_simple.h" | 9 #include "base/prefs/pref_registry_simple.h" |
| 10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 void PrefHashStoreImpl::Reset() { | 83 void PrefHashStoreImpl::Reset() { |
| 84 DictionaryPrefUpdate update(local_state_, prefs::kProfilePreferenceHashes); | 84 DictionaryPrefUpdate update(local_state_, prefs::kProfilePreferenceHashes); |
| 85 | 85 |
| 86 // Remove the dictionary corresponding to the profile name, which may have a | 86 // Remove the dictionary corresponding to the profile name, which may have a |
| 87 // '.' | 87 // '.' |
| 88 update->RemoveWithoutPathExpansion(hash_store_id_, NULL); | 88 update->RemoveWithoutPathExpansion(hash_store_id_, NULL); |
| 89 | 89 |
| 90 // Remove this store's entry in the kStoreVersionsDict. | 90 // Remove this store's entry in the kStoreVersionsDict. |
| 91 base::DictionaryValue* version_dict; | 91 base::DictionaryValue* version_dict; |
| 92 if (update->GetDictionary(internals::kStoreVersionsDict, &version_dict)) | 92 if (update->GetDictionary(internals::kStoreVersionsDict, &version_dict)) |
| 93 version_dict->Remove(hash_store_id_, NULL); | 93 version_dict->RemoveWithoutPathExpansion(hash_store_id_, NULL); |
| 94 | 94 |
| 95 // Remove this store's entry in the kHashOfHashesDict. | 95 // Remove this store's entry in the kHashOfHashesDict. |
| 96 base::DictionaryValue* hash_of_hashes_dict; | 96 base::DictionaryValue* hash_of_hashes_dict; |
| 97 if (update->GetDictionaryWithoutPathExpansion(internals::kHashOfHashesDict, | 97 if (update->GetDictionaryWithoutPathExpansion(internals::kHashOfHashesDict, |
| 98 &hash_of_hashes_dict)) { | 98 &hash_of_hashes_dict)) { |
| 99 hash_of_hashes_dict->Remove(hash_store_id_, NULL); | 99 hash_of_hashes_dict->RemoveWithoutPathExpansion(hash_store_id_, NULL); |
| 100 } | 100 } |
| 101 } | 101 } |
| 102 | 102 |
| 103 scoped_ptr<PrefHashStoreTransaction> PrefHashStoreImpl::BeginTransaction() { | 103 scoped_ptr<PrefHashStoreTransaction> PrefHashStoreImpl::BeginTransaction() { |
| 104 return scoped_ptr<PrefHashStoreTransaction>( | 104 return scoped_ptr<PrefHashStoreTransaction>( |
| 105 new PrefHashStoreTransactionImpl(this)); | 105 new PrefHashStoreTransactionImpl(this)); |
| 106 } | 106 } |
| 107 | 107 |
| 108 PrefHashStoreImpl::StoreVersion PrefHashStoreImpl::GetCurrentVersion() const { | 108 PrefHashStoreImpl::StoreVersion PrefHashStoreImpl::GetCurrentVersion() const { |
| 109 const base::DictionaryValue* pref_hash_data = | 109 const base::DictionaryValue* pref_hash_data = |
| 110 local_state_->GetDictionary(prefs::kProfilePreferenceHashes); | 110 local_state_->GetDictionary(prefs::kProfilePreferenceHashes); |
| 111 | 111 |
| 112 if (!pref_hash_data->GetDictionaryWithoutPathExpansion(hash_store_id_, NULL)) | 112 if (!pref_hash_data->GetDictionaryWithoutPathExpansion(hash_store_id_, NULL)) |
| 113 return VERSION_UNINITIALIZED; | 113 return VERSION_UNINITIALIZED; |
| 114 | 114 |
| 115 const base::DictionaryValue* version_dict; | 115 const base::DictionaryValue* version_dict; |
| 116 int current_version; | 116 int current_version; |
| 117 if (!pref_hash_data->GetDictionary(internals::kStoreVersionsDict, | 117 if (!pref_hash_data->GetDictionary(internals::kStoreVersionsDict, |
| 118 &version_dict) || | 118 &version_dict) || |
| 119 !version_dict->GetInteger(hash_store_id_, ¤t_version)) { | 119 !version_dict->GetIntegerWithoutPathExpansion(hash_store_id_, |
| 120 ¤t_version)) { |
| 120 return VERSION_PRE_MIGRATION; | 121 return VERSION_PRE_MIGRATION; |
| 121 } | 122 } |
| 122 | 123 |
| 123 DCHECK_GT(current_version, VERSION_PRE_MIGRATION); | 124 DCHECK_GT(current_version, VERSION_PRE_MIGRATION); |
| 124 return static_cast<StoreVersion>(current_version); | 125 return static_cast<StoreVersion>(current_version); |
| 125 } | 126 } |
| 126 | 127 |
| 127 bool PrefHashStoreImpl::IsHashDictionaryTrusted() const { | 128 bool PrefHashStoreImpl::IsHashDictionaryTrusted() const { |
| 128 const base::DictionaryValue* pref_hash_data = | 129 const base::DictionaryValue* pref_hash_data = |
| 129 local_state_->GetDictionary(prefs::kProfilePreferenceHashes); | 130 local_state_->GetDictionary(prefs::kProfilePreferenceHashes); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 // practice only initialization transactions will actually do this, but | 183 // practice only initialization transactions will actually do this, but |
| 183 // since they always occur before minor update transaction it's okay | 184 // since they always occur before minor update transaction it's okay |
| 184 // to unconditionally do this here). Do this even if |!has_changed_| to also | 185 // to unconditionally do this here). Do this even if |!has_changed_| to also |
| 185 // seed version number on unchanged profiles. | 186 // seed version number on unchanged profiles. |
| 186 base::DictionaryValue* store_versions_dict = NULL; | 187 base::DictionaryValue* store_versions_dict = NULL; |
| 187 if (!update->GetDictionary(internals::kStoreVersionsDict, | 188 if (!update->GetDictionary(internals::kStoreVersionsDict, |
| 188 &store_versions_dict)) { | 189 &store_versions_dict)) { |
| 189 store_versions_dict = new base::DictionaryValue; | 190 store_versions_dict = new base::DictionaryValue; |
| 190 update->Set(internals::kStoreVersionsDict, store_versions_dict); | 191 update->Set(internals::kStoreVersionsDict, store_versions_dict); |
| 191 } | 192 } |
| 192 store_versions_dict->SetInteger(outer_->hash_store_id_, VERSION_LATEST); | 193 store_versions_dict->SetIntegerWithoutPathExpansion(outer_->hash_store_id_, |
| 194 VERSION_LATEST); |
| 193 } | 195 } |
| 194 | 196 |
| 195 PrefHashStoreTransaction::ValueState | 197 PrefHashStoreTransaction::ValueState |
| 196 PrefHashStoreImpl::PrefHashStoreTransactionImpl::CheckValue( | 198 PrefHashStoreImpl::PrefHashStoreTransactionImpl::CheckValue( |
| 197 const std::string& path, const base::Value* initial_value) const { | 199 const std::string& path, const base::Value* initial_value) const { |
| 198 const base::DictionaryValue* pref_hash_data = | 200 const base::DictionaryValue* pref_hash_data = |
| 199 outer_->local_state_->GetDictionary(prefs::kProfilePreferenceHashes); | 201 outer_->local_state_->GetDictionary(prefs::kProfilePreferenceHashes); |
| 200 const base::DictionaryValue* hashed_prefs = NULL; | 202 const base::DictionaryValue* hashed_prefs = NULL; |
| 201 pref_hash_data->GetDictionaryWithoutPathExpansion(outer_->hash_store_id_, | 203 pref_hash_data->GetDictionaryWithoutPathExpansion(outer_->hash_store_id_, |
| 202 &hashed_prefs); | 204 &hashed_prefs); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 if (!update->Get()->GetDictionaryWithoutPathExpansion(outer_->hash_store_id_, | 345 if (!update->Get()->GetDictionaryWithoutPathExpansion(outer_->hash_store_id_, |
| 344 &hashes_dict)) { | 346 &hashes_dict)) { |
| 345 hashes_dict = new base::DictionaryValue; | 347 hashes_dict = new base::DictionaryValue; |
| 346 update->Get()->SetWithoutPathExpansion(outer_->hash_store_id_, hashes_dict); | 348 update->Get()->SetWithoutPathExpansion(outer_->hash_store_id_, hashes_dict); |
| 347 } | 349 } |
| 348 hashes_dict->SetString( | 350 hashes_dict->SetString( |
| 349 path, outer_->pref_hash_calculator_.Calculate(path, new_value)); | 351 path, outer_->pref_hash_calculator_.Calculate(path, new_value)); |
| 350 | 352 |
| 351 has_changed_ = true; | 353 has_changed_ = true; |
| 352 } | 354 } |
| OLD | NEW |