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