| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_value_store.h" | 5 #include "chrome/browser/prefs/pref_value_store.h" |
| 6 | 6 |
| 7 #include "chrome/browser/prefs/pref_model_associator.h" |
| 7 #include "chrome/browser/prefs/pref_notifier.h" | 8 #include "chrome/browser/prefs/pref_notifier.h" |
| 8 | 9 |
| 9 PrefValueStore::PrefStoreKeeper::PrefStoreKeeper() | 10 PrefValueStore::PrefStoreKeeper::PrefStoreKeeper() |
| 10 : pref_value_store_(NULL), | 11 : pref_value_store_(NULL), |
| 11 type_(PrefValueStore::INVALID_STORE) { | 12 type_(PrefValueStore::INVALID_STORE) { |
| 12 } | 13 } |
| 13 | 14 |
| 14 PrefValueStore::PrefStoreKeeper::~PrefStoreKeeper() { | 15 PrefValueStore::PrefStoreKeeper::~PrefStoreKeeper() { |
| 15 if (pref_store_.get()) { | 16 if (pref_store_.get()) { |
| 16 pref_store_->RemoveObserver(this); | 17 pref_store_->RemoveObserver(this); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 42 } | 43 } |
| 43 | 44 |
| 44 PrefValueStore::PrefValueStore(PrefStore* managed_platform_prefs, | 45 PrefValueStore::PrefValueStore(PrefStore* managed_platform_prefs, |
| 45 PrefStore* managed_cloud_prefs, | 46 PrefStore* managed_cloud_prefs, |
| 46 PrefStore* extension_prefs, | 47 PrefStore* extension_prefs, |
| 47 PrefStore* command_line_prefs, | 48 PrefStore* command_line_prefs, |
| 48 PrefStore* user_prefs, | 49 PrefStore* user_prefs, |
| 49 PrefStore* recommended_platform_prefs, | 50 PrefStore* recommended_platform_prefs, |
| 50 PrefStore* recommended_cloud_prefs, | 51 PrefStore* recommended_cloud_prefs, |
| 51 PrefStore* default_prefs, | 52 PrefStore* default_prefs, |
| 53 PrefModelAssociator* pref_sync_associator, |
| 52 PrefNotifier* pref_notifier) | 54 PrefNotifier* pref_notifier) |
| 53 : pref_notifier_(pref_notifier) { | 55 : pref_sync_associator_(pref_sync_associator), |
| 56 pref_notifier_(pref_notifier) { |
| 54 InitPrefStore(MANAGED_PLATFORM_STORE, managed_platform_prefs); | 57 InitPrefStore(MANAGED_PLATFORM_STORE, managed_platform_prefs); |
| 55 InitPrefStore(MANAGED_CLOUD_STORE, managed_cloud_prefs); | 58 InitPrefStore(MANAGED_CLOUD_STORE, managed_cloud_prefs); |
| 56 InitPrefStore(EXTENSION_STORE, extension_prefs); | 59 InitPrefStore(EXTENSION_STORE, extension_prefs); |
| 57 InitPrefStore(COMMAND_LINE_STORE, command_line_prefs); | 60 InitPrefStore(COMMAND_LINE_STORE, command_line_prefs); |
| 58 InitPrefStore(USER_STORE, user_prefs); | 61 InitPrefStore(USER_STORE, user_prefs); |
| 59 InitPrefStore(RECOMMENDED_PLATFORM_STORE, recommended_platform_prefs); | 62 InitPrefStore(RECOMMENDED_PLATFORM_STORE, recommended_platform_prefs); |
| 60 InitPrefStore(RECOMMENDED_CLOUD_STORE, recommended_cloud_prefs); | 63 InitPrefStore(RECOMMENDED_CLOUD_STORE, recommended_cloud_prefs); |
| 61 InitPrefStore(DEFAULT_STORE, default_prefs); | 64 InitPrefStore(DEFAULT_STORE, default_prefs); |
| 62 | 65 |
| 63 CheckInitializationCompleted(); | 66 CheckInitializationCompleted(); |
| 64 } | 67 } |
| 65 | 68 |
| 66 PrefValueStore::~PrefValueStore() {} | 69 PrefValueStore::~PrefValueStore() {} |
| 67 | 70 |
| 68 PrefValueStore* PrefValueStore::CloneAndSpecialize( | 71 PrefValueStore* PrefValueStore::CloneAndSpecialize( |
| 69 PrefStore* managed_platform_prefs, | 72 PrefStore* managed_platform_prefs, |
| 70 PrefStore* managed_cloud_prefs, | 73 PrefStore* managed_cloud_prefs, |
| 71 PrefStore* extension_prefs, | 74 PrefStore* extension_prefs, |
| 72 PrefStore* command_line_prefs, | 75 PrefStore* command_line_prefs, |
| 73 PrefStore* user_prefs, | 76 PrefStore* user_prefs, |
| 74 PrefStore* recommended_platform_prefs, | 77 PrefStore* recommended_platform_prefs, |
| 75 PrefStore* recommended_cloud_prefs, | 78 PrefStore* recommended_cloud_prefs, |
| 76 PrefStore* default_prefs, | 79 PrefStore* default_prefs, |
| 80 PrefModelAssociator* pref_sync_associator, |
| 77 PrefNotifier* pref_notifier) { | 81 PrefNotifier* pref_notifier) { |
| 78 DCHECK(pref_notifier); | 82 DCHECK(pref_notifier); |
| 79 if (!managed_platform_prefs) | 83 if (!managed_platform_prefs) |
| 80 managed_platform_prefs = GetPrefStore(MANAGED_PLATFORM_STORE); | 84 managed_platform_prefs = GetPrefStore(MANAGED_PLATFORM_STORE); |
| 81 if (!managed_cloud_prefs) | 85 if (!managed_cloud_prefs) |
| 82 managed_cloud_prefs = GetPrefStore(MANAGED_CLOUD_STORE); | 86 managed_cloud_prefs = GetPrefStore(MANAGED_CLOUD_STORE); |
| 83 if (!extension_prefs) | 87 if (!extension_prefs) |
| 84 extension_prefs = GetPrefStore(EXTENSION_STORE); | 88 extension_prefs = GetPrefStore(EXTENSION_STORE); |
| 85 if (!command_line_prefs) | 89 if (!command_line_prefs) |
| 86 command_line_prefs = GetPrefStore(COMMAND_LINE_STORE); | 90 command_line_prefs = GetPrefStore(COMMAND_LINE_STORE); |
| 87 if (!user_prefs) | 91 if (!user_prefs) |
| 88 user_prefs = GetPrefStore(USER_STORE); | 92 user_prefs = GetPrefStore(USER_STORE); |
| 89 if (!recommended_platform_prefs) | 93 if (!recommended_platform_prefs) |
| 90 recommended_platform_prefs = GetPrefStore(RECOMMENDED_PLATFORM_STORE); | 94 recommended_platform_prefs = GetPrefStore(RECOMMENDED_PLATFORM_STORE); |
| 91 if (!recommended_cloud_prefs) | 95 if (!recommended_cloud_prefs) |
| 92 recommended_cloud_prefs = GetPrefStore(RECOMMENDED_CLOUD_STORE); | 96 recommended_cloud_prefs = GetPrefStore(RECOMMENDED_CLOUD_STORE); |
| 93 if (!default_prefs) | 97 if (!default_prefs) |
| 94 default_prefs = GetPrefStore(DEFAULT_STORE); | 98 default_prefs = GetPrefStore(DEFAULT_STORE); |
| 95 | 99 |
| 96 return new PrefValueStore( | 100 return new PrefValueStore( |
| 97 managed_platform_prefs, managed_cloud_prefs, extension_prefs, | 101 managed_platform_prefs, managed_cloud_prefs, extension_prefs, |
| 98 command_line_prefs, user_prefs, recommended_platform_prefs, | 102 command_line_prefs, user_prefs, recommended_platform_prefs, |
| 99 recommended_cloud_prefs, default_prefs, | 103 recommended_cloud_prefs, default_prefs, pref_sync_associator, |
| 100 pref_notifier); | 104 pref_notifier); |
| 101 } | 105 } |
| 102 | 106 |
| 103 bool PrefValueStore::GetValue(const std::string& name, | 107 bool PrefValueStore::GetValue(const std::string& name, |
| 104 Value::ValueType type, | 108 Value::ValueType type, |
| 105 const Value** out_value) const { | 109 const Value** out_value) const { |
| 106 *out_value = NULL; | 110 *out_value = NULL; |
| 107 // Check the |PrefStore|s in order of their priority from highest to lowest | 111 // Check the |PrefStore|s in order of their priority from highest to lowest |
| 108 // to find the value of the preference described by the given preference name. | 112 // to find the value of the preference described by the given preference name. |
| 109 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) { | 113 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 122 } | 126 } |
| 123 | 127 |
| 124 void PrefValueStore::NotifyPrefChanged( | 128 void PrefValueStore::NotifyPrefChanged( |
| 125 const char* path, | 129 const char* path, |
| 126 PrefValueStore::PrefStoreType new_store) { | 130 PrefValueStore::PrefStoreType new_store) { |
| 127 DCHECK(new_store != INVALID_STORE); | 131 DCHECK(new_store != INVALID_STORE); |
| 128 | 132 |
| 129 // If the pref is controlled by a higher-priority store, its effective value | 133 // If the pref is controlled by a higher-priority store, its effective value |
| 130 // cannot have changed. | 134 // cannot have changed. |
| 131 PrefStoreType controller = ControllingPrefStoreForPref(path); | 135 PrefStoreType controller = ControllingPrefStoreForPref(path); |
| 132 if (controller == INVALID_STORE || controller >= new_store) | 136 if (controller == INVALID_STORE || controller >= new_store) { |
| 133 pref_notifier_->OnPreferenceChanged(path); | 137 pref_notifier_->OnPreferenceChanged(path); |
| 138 if (pref_sync_associator_) |
| 139 pref_sync_associator_->ProcessPrefChange(path); |
| 140 } |
| 134 } | 141 } |
| 135 | 142 |
| 136 bool PrefValueStore::PrefValueInManagedStore(const char* name) const { | 143 bool PrefValueStore::PrefValueInManagedStore(const char* name) const { |
| 137 return PrefValueInStore(name, MANAGED_PLATFORM_STORE) || | 144 return PrefValueInStore(name, MANAGED_PLATFORM_STORE) || |
| 138 PrefValueInStore(name, MANAGED_CLOUD_STORE); | 145 PrefValueInStore(name, MANAGED_CLOUD_STORE); |
| 139 } | 146 } |
| 140 | 147 |
| 141 bool PrefValueStore::PrefValueInExtensionStore(const char* name) const { | 148 bool PrefValueStore::PrefValueInExtensionStore(const char* name) const { |
| 142 return PrefValueInStore(name, EXTENSION_STORE); | 149 return PrefValueInStore(name, EXTENSION_STORE); |
| 143 } | 150 } |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 | 256 |
| 250 void PrefValueStore::CheckInitializationCompleted() { | 257 void PrefValueStore::CheckInitializationCompleted() { |
| 251 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) { | 258 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) { |
| 252 scoped_refptr<PrefStore> store = | 259 scoped_refptr<PrefStore> store = |
| 253 GetPrefStore(static_cast<PrefStoreType>(i)); | 260 GetPrefStore(static_cast<PrefStoreType>(i)); |
| 254 if (store && !store->IsInitializationComplete()) | 261 if (store && !store->IsInitializationComplete()) |
| 255 return; | 262 return; |
| 256 } | 263 } |
| 257 pref_notifier_->OnInitializationCompleted(); | 264 pref_notifier_->OnInitializationCompleted(); |
| 258 } | 265 } |
| OLD | NEW |