| OLD | NEW |
| 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 #include "base/prefs/pref_value_store.h" | 5 #include "base/prefs/pref_value_store.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/prefs/pref_notifier.h" | 8 #include "base/prefs/pref_notifier.h" |
| 9 #include "base/prefs/pref_observer.h" | 9 #include "base/prefs/pref_observer.h" |
| 10 | 10 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 managed_prefs, extension_prefs, command_line_prefs, user_prefs, | 93 managed_prefs, extension_prefs, command_line_prefs, user_prefs, |
| 94 recommended_prefs, default_prefs, pref_notifier); | 94 recommended_prefs, default_prefs, pref_notifier); |
| 95 } | 95 } |
| 96 | 96 |
| 97 void PrefValueStore::set_callback(const PrefChangedCallback& callback) { | 97 void PrefValueStore::set_callback(const PrefChangedCallback& callback) { |
| 98 pref_changed_callback_ = callback; | 98 pref_changed_callback_ = callback; |
| 99 } | 99 } |
| 100 | 100 |
| 101 bool PrefValueStore::GetValue(const std::string& name, | 101 bool PrefValueStore::GetValue(const std::string& name, |
| 102 base::Value::Type type, | 102 base::Value::Type type, |
| 103 const Value** out_value) const { | 103 const base::Value** out_value) const { |
| 104 // Check the |PrefStore|s in order of their priority from highest to lowest, | 104 // Check the |PrefStore|s in order of their priority from highest to lowest, |
| 105 // looking for the first preference value with the given |name| and |type|. | 105 // looking for the first preference value with the given |name| and |type|. |
| 106 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) { | 106 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) { |
| 107 if (GetValueFromStoreWithType(name.c_str(), type, | 107 if (GetValueFromStoreWithType(name.c_str(), type, |
| 108 static_cast<PrefStoreType>(i), out_value)) | 108 static_cast<PrefStoreType>(i), out_value)) |
| 109 return true; | 109 return true; |
| 110 } | 110 } |
| 111 return false; | 111 return false; |
| 112 } | 112 } |
| 113 | 113 |
| 114 bool PrefValueStore::GetRecommendedValue(const std::string& name, | 114 bool PrefValueStore::GetRecommendedValue(const std::string& name, |
| 115 base::Value::Type type, | 115 base::Value::Type type, |
| 116 const Value** out_value) const { | 116 const base::Value** out_value) const { |
| 117 return GetValueFromStoreWithType(name.c_str(), type, RECOMMENDED_STORE, | 117 return GetValueFromStoreWithType(name.c_str(), type, RECOMMENDED_STORE, |
| 118 out_value); | 118 out_value); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void PrefValueStore::NotifyPrefChanged( | 121 void PrefValueStore::NotifyPrefChanged( |
| 122 const char* path, | 122 const char* path, |
| 123 PrefValueStore::PrefStoreType new_store) { | 123 PrefValueStore::PrefStoreType new_store) { |
| 124 DCHECK(new_store != INVALID_STORE); | 124 DCHECK(new_store != INVALID_STORE); |
| 125 // A notification is sent when the pref value in any store changes. If this | 125 // A notification is sent when the pref value in any store changes. If this |
| 126 // store is currently being overridden by a higher-priority store, the | 126 // store is currently being overridden by a higher-priority store, the |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 | 172 |
| 173 void PrefValueStore::UpdateCommandLinePrefStore(PrefStore* command_line_prefs) { | 173 void PrefValueStore::UpdateCommandLinePrefStore(PrefStore* command_line_prefs) { |
| 174 InitPrefStore(COMMAND_LINE_STORE, command_line_prefs); | 174 InitPrefStore(COMMAND_LINE_STORE, command_line_prefs); |
| 175 } | 175 } |
| 176 | 176 |
| 177 bool PrefValueStore::PrefValueInStore( | 177 bool PrefValueStore::PrefValueInStore( |
| 178 const char* name, | 178 const char* name, |
| 179 PrefValueStore::PrefStoreType store) const { | 179 PrefValueStore::PrefStoreType store) const { |
| 180 // Declare a temp Value* and call GetValueFromStore, | 180 // Declare a temp Value* and call GetValueFromStore, |
| 181 // ignoring the output value. | 181 // ignoring the output value. |
| 182 const Value* tmp_value = NULL; | 182 const base::Value* tmp_value = NULL; |
| 183 return GetValueFromStore(name, store, &tmp_value); | 183 return GetValueFromStore(name, store, &tmp_value); |
| 184 } | 184 } |
| 185 | 185 |
| 186 bool PrefValueStore::PrefValueInStoreRange( | 186 bool PrefValueStore::PrefValueInStoreRange( |
| 187 const char* name, | 187 const char* name, |
| 188 PrefValueStore::PrefStoreType first_checked_store, | 188 PrefValueStore::PrefStoreType first_checked_store, |
| 189 PrefValueStore::PrefStoreType last_checked_store) const { | 189 PrefValueStore::PrefStoreType last_checked_store) const { |
| 190 if (first_checked_store > last_checked_store) { | 190 if (first_checked_store > last_checked_store) { |
| 191 NOTREACHED(); | 191 NOTREACHED(); |
| 192 return false; | 192 return false; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 204 const char* name) const { | 204 const char* name) const { |
| 205 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) { | 205 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) { |
| 206 if (PrefValueInStore(name, static_cast<PrefStoreType>(i))) | 206 if (PrefValueInStore(name, static_cast<PrefStoreType>(i))) |
| 207 return static_cast<PrefStoreType>(i); | 207 return static_cast<PrefStoreType>(i); |
| 208 } | 208 } |
| 209 return INVALID_STORE; | 209 return INVALID_STORE; |
| 210 } | 210 } |
| 211 | 211 |
| 212 bool PrefValueStore::GetValueFromStore(const char* name, | 212 bool PrefValueStore::GetValueFromStore(const char* name, |
| 213 PrefValueStore::PrefStoreType store_type, | 213 PrefValueStore::PrefStoreType store_type, |
| 214 const Value** out_value) const { | 214 const base::Value** out_value) const { |
| 215 // Only return true if we find a value and it is the correct type, so stale | 215 // Only return true if we find a value and it is the correct type, so stale |
| 216 // values with the incorrect type will be ignored. | 216 // values with the incorrect type will be ignored. |
| 217 const PrefStore* store = GetPrefStore(static_cast<PrefStoreType>(store_type)); | 217 const PrefStore* store = GetPrefStore(static_cast<PrefStoreType>(store_type)); |
| 218 if (store && store->GetValue(name, out_value)) | 218 if (store && store->GetValue(name, out_value)) |
| 219 return true; | 219 return true; |
| 220 | 220 |
| 221 // No valid value found for the given preference name: set the return value | 221 // No valid value found for the given preference name: set the return value |
| 222 // to false. | 222 // to false. |
| 223 *out_value = NULL; | 223 *out_value = NULL; |
| 224 return false; | 224 return false; |
| 225 } | 225 } |
| 226 | 226 |
| 227 bool PrefValueStore::GetValueFromStoreWithType(const char* name, | 227 bool PrefValueStore::GetValueFromStoreWithType( |
| 228 base::Value::Type type, | 228 const char* name, |
| 229 PrefStoreType store, | 229 base::Value::Type type, |
| 230 const Value** out_value) const { | 230 PrefStoreType store, |
| 231 const base::Value** out_value) const { |
| 231 if (GetValueFromStore(name, store, out_value)) { | 232 if (GetValueFromStore(name, store, out_value)) { |
| 232 if ((*out_value)->IsType(type)) | 233 if ((*out_value)->IsType(type)) |
| 233 return true; | 234 return true; |
| 234 | 235 |
| 235 LOG(WARNING) << "Expected type for " << name << " is " << type | 236 LOG(WARNING) << "Expected type for " << name << " is " << type |
| 236 << " but got " << (*out_value)->GetType() | 237 << " but got " << (*out_value)->GetType() |
| 237 << " in store " << store; | 238 << " in store " << store; |
| 238 } | 239 } |
| 239 | 240 |
| 240 *out_value = NULL; | 241 *out_value = NULL; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 267 if (initialization_failed_) | 268 if (initialization_failed_) |
| 268 return; | 269 return; |
| 269 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) { | 270 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) { |
| 270 scoped_refptr<PrefStore> store = | 271 scoped_refptr<PrefStore> store = |
| 271 GetPrefStore(static_cast<PrefStoreType>(i)); | 272 GetPrefStore(static_cast<PrefStoreType>(i)); |
| 272 if (store.get() && !store->IsInitializationComplete()) | 273 if (store.get() && !store->IsInitializationComplete()) |
| 273 return; | 274 return; |
| 274 } | 275 } |
| 275 pref_notifier_->OnInitializationCompleted(true); | 276 pref_notifier_->OnInitializationCompleted(true); |
| 276 } | 277 } |
| OLD | NEW |