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 "components/prefs/pref_service.h" | 5 #include "components/prefs/pref_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 uint32_t write_flags = WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS; | 45 uint32_t write_flags = WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS; |
46 | 46 |
47 if (!pref) | 47 if (!pref) |
48 return write_flags; | 48 return write_flags; |
49 | 49 |
50 if (pref->registration_flags() & PrefRegistry::LOSSY_PREF) | 50 if (pref->registration_flags() & PrefRegistry::LOSSY_PREF) |
51 write_flags |= WriteablePrefStore::LOSSY_PREF_WRITE_FLAG; | 51 write_flags |= WriteablePrefStore::LOSSY_PREF_WRITE_FLAG; |
52 return write_flags; | 52 return write_flags; |
53 } | 53 } |
54 | 54 |
| 55 bool HasValidPrefix(const std::string& pref_name, |
| 56 const std::vector<std::string> valid_prefixes) { |
| 57 for (const std::string& prefix : valid_prefixes) { |
| 58 if (pref_name.compare(0, prefix.size(), prefix) == 0) |
| 59 return true; |
| 60 } |
| 61 return false; |
| 62 } |
| 63 |
55 } // namespace | 64 } // namespace |
56 | 65 |
57 PrefService::PrefService( | 66 PrefService::PrefService( |
58 PrefNotifierImpl* pref_notifier, | 67 PrefNotifierImpl* pref_notifier, |
59 PrefValueStore* pref_value_store, | 68 PrefValueStore* pref_value_store, |
60 PersistentPrefStore* user_prefs, | 69 PersistentPrefStore* user_prefs, |
61 PrefRegistry* pref_registry, | 70 PrefRegistry* pref_registry, |
62 base::Callback<void(PersistentPrefStore::PrefReadError)> | 71 base::Callback<void(PersistentPrefStore::PrefReadError)> |
63 read_error_callback, | 72 read_error_callback, |
64 bool async) | 73 bool async) |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 | 203 |
195 scoped_ptr<base::DictionaryValue> PrefService::GetPreferenceValues() const { | 204 scoped_ptr<base::DictionaryValue> PrefService::GetPreferenceValues() const { |
196 DCHECK(CalledOnValidThread()); | 205 DCHECK(CalledOnValidThread()); |
197 scoped_ptr<base::DictionaryValue> out(new base::DictionaryValue); | 206 scoped_ptr<base::DictionaryValue> out(new base::DictionaryValue); |
198 for (const auto& it : *pref_registry_) { | 207 for (const auto& it : *pref_registry_) { |
199 out->Set(it.first, GetPreferenceValue(it.first)->CreateDeepCopy()); | 208 out->Set(it.first, GetPreferenceValue(it.first)->CreateDeepCopy()); |
200 } | 209 } |
201 return out; | 210 return out; |
202 } | 211 } |
203 | 212 |
| 213 void PrefService::SetPreferenceOmitdefault(const std::string& pref_name, |
| 214 base::DictionaryValue* out) const { |
| 215 const Preference* pref = FindPreference(pref_name); |
| 216 if (pref->IsDefaultValue()) |
| 217 return; |
| 218 out->Set(pref_name, pref->GetValue()->CreateDeepCopy()); |
| 219 } |
| 220 |
204 scoped_ptr<base::DictionaryValue> PrefService::GetPreferenceValuesOmitDefaults() | 221 scoped_ptr<base::DictionaryValue> PrefService::GetPreferenceValuesOmitDefaults() |
205 const { | 222 const { |
206 DCHECK(CalledOnValidThread()); | 223 DCHECK(CalledOnValidThread()); |
207 scoped_ptr<base::DictionaryValue> out(new base::DictionaryValue); | 224 scoped_ptr<base::DictionaryValue> out(new base::DictionaryValue); |
208 for (const auto& it : *pref_registry_) { | 225 for (const auto& it : *pref_registry_) { |
209 const Preference* pref = FindPreference(it.first); | 226 SetPreferenceOmitdefault(it.first, out.get()); |
210 if (pref->IsDefaultValue()) | |
211 continue; | |
212 out->Set(it.first, pref->GetValue()->CreateDeepCopy()); | |
213 } | 227 } |
214 return out; | 228 return out; |
215 } | 229 } |
| 230 |
| 231 scoped_ptr<base::DictionaryValue> |
| 232 PrefService::GetWhitelistedPreferenceValuesOmitDefaults( |
| 233 const std::vector<std::string>& whitelisted_prefixes) const { |
| 234 DCHECK(CalledOnValidThread()); |
| 235 scoped_ptr<base::DictionaryValue> out(new base::DictionaryValue); |
| 236 for (const auto& it : *pref_registry_) { |
| 237 if (HasValidPrefix(it.first, whitelisted_prefixes)) |
| 238 SetPreferenceOmitdefault(it.first, out.get()); |
| 239 } |
| 240 return out; |
| 241 } |
216 | 242 |
217 scoped_ptr<base::DictionaryValue> | 243 scoped_ptr<base::DictionaryValue> |
218 PrefService::GetPreferenceValuesWithoutPathExpansion() const { | 244 PrefService::GetPreferenceValuesWithoutPathExpansion() const { |
219 DCHECK(CalledOnValidThread()); | 245 DCHECK(CalledOnValidThread()); |
220 scoped_ptr<base::DictionaryValue> out(new base::DictionaryValue); | 246 scoped_ptr<base::DictionaryValue> out(new base::DictionaryValue); |
221 for (const auto& it : *pref_registry_) { | 247 for (const auto& it : *pref_registry_) { |
222 const base::Value* value = GetPreferenceValue(it.first); | 248 const base::Value* value = GetPreferenceValue(it.first); |
223 DCHECK(value); | 249 DCHECK(value); |
224 out->SetWithoutPathExpansion(it.first, value->CreateDeepCopy()); | 250 out->SetWithoutPathExpansion(it.first, value->CreateDeepCopy()); |
225 } | 251 } |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 DCHECK(found_value->IsType(default_type)); | 637 DCHECK(found_value->IsType(default_type)); |
612 return found_value; | 638 return found_value; |
613 } else { | 639 } else { |
614 // Every registered preference has at least a default value. | 640 // Every registered preference has at least a default value. |
615 NOTREACHED() << "no valid value found for registered pref " << path; | 641 NOTREACHED() << "no valid value found for registered pref " << path; |
616 } | 642 } |
617 } | 643 } |
618 | 644 |
619 return NULL; | 645 return NULL; |
620 } | 646 } |
OLD | NEW |