blob: 3bc9c4f6106bace3232ef69782bbdb92ad784c13 [file] [log] [blame]
[email protected]b1de2c72013-02-06 02:45:471// 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
3// found in the LICENSE file.
4
brettwf00b9b42016-02-01 22:11:385#include "components/prefs/pref_registry.h"
[email protected]b1de2c72013-02-06 02:45:476
vabr88e507212017-03-29 13:22:267#include <utility>
8
[email protected]b1de2c72013-02-06 02:45:479#include "base/logging.h"
dcheng5f043bc2016-04-22 19:09:0610#include "base/memory/ptr_util.h"
raymes51b41a62015-04-24 02:45:0411#include "base/stl_util.h"
[email protected]b1de2c72013-02-06 02:45:4712#include "base/values.h"
brettwf00b9b42016-02-01 22:11:3813#include "components/prefs/default_pref_store.h"
14#include "components/prefs/pref_store.h"
[email protected]b1de2c72013-02-06 02:45:4715
16PrefRegistry::PrefRegistry()
Lei Zhangbeefaef12017-10-17 19:24:0417 : defaults_(base::MakeRefCounted<DefaultPrefStore>()) {}
[email protected]b1de2c72013-02-06 02:45:4718
19PrefRegistry::~PrefRegistry() {
20}
21
avi9ef8bb02015-12-24 05:29:3622uint32_t PrefRegistry::GetRegistrationFlags(
23 const std::string& pref_name) const {
raymes51b41a62015-04-24 02:45:0424 const auto& it = registration_flags_.find(pref_name);
Lei Zhangbeefaef12017-10-17 19:24:0425 return it != registration_flags_.end() ? it->second : NO_REGISTRATION_FLAGS;
raymes51b41a62015-04-24 02:45:0426}
27
[email protected]b1de2c72013-02-06 02:45:4728scoped_refptr<PrefStore> PrefRegistry::defaults() {
29 return defaults_.get();
30}
31
32PrefRegistry::const_iterator PrefRegistry::begin() const {
33 return defaults_->begin();
34}
35
36PrefRegistry::const_iterator PrefRegistry::end() const {
37 return defaults_->end();
38}
39
georgesak7da6e9d2014-12-03 01:10:2940void PrefRegistry::SetDefaultPrefValue(const std::string& pref_name,
Lei Zhangc3d77b62017-10-19 03:30:2841 base::Value value) {
42 const base::Value* current_value = nullptr;
[email protected]c02cb8012014-03-14 18:39:5343 DCHECK(defaults_->GetValue(pref_name, &current_value))
44 << "Setting default for unregistered pref: " << pref_name;
Lei Zhangc3d77b62017-10-19 03:30:2845 DCHECK(value.IsType(current_value->type()))
[email protected]c02cb8012014-03-14 18:39:5346 << "Wrong type for new default: " << pref_name;
[email protected]5879cef2013-03-02 17:02:2547
Lei Zhangc3d77b62017-10-19 03:30:2848 defaults_->ReplaceDefaultValue(
49 pref_name, std::make_unique<base::Value>(std::move(value)));
[email protected]5879cef2013-03-02 17:02:2550}
51
Sam McNally11c6c8a2017-06-08 01:44:1952void PrefRegistry::SetDefaultForeignPrefValue(
53 const std::string& path,
54 std::unique_ptr<base::Value> default_value,
55 uint32_t flags) {
56 auto erased = foreign_pref_keys_.erase(path);
57 DCHECK_EQ(1u, erased);
58 RegisterPreference(path, std::move(default_value), flags);
59}
60
vabr88e507212017-03-29 13:22:2661void PrefRegistry::RegisterPreference(
62 const std::string& path,
63 std::unique_ptr<base::Value> default_value,
64 uint32_t flags) {
jdoerrie76cee9c2017-10-06 22:42:4265 base::Value::Type orig_type = default_value->type();
jdoerriedc72ee942016-12-07 15:43:2866 DCHECK(orig_type != base::Value::Type::NONE &&
67 orig_type != base::Value::Type::BINARY) <<
[email protected]b1de2c72013-02-06 02:45:4768 "invalid preference type: " << orig_type;
Ivan Kotenkov75b1c3a2017-10-24 14:47:2469 DCHECK(!defaults_->GetValue(path, nullptr))
70 << "Trying to register a previously registered pref: " << path;
skyostil46384412016-08-12 14:33:3971 DCHECK(!base::ContainsKey(registration_flags_, path))
72 << "Trying to register a previously registered pref: " << path;
[email protected]b1de2c72013-02-06 02:45:4773
Sam McNally450271f2017-10-13 11:47:3474 base::Value* default_value_raw = default_value.get();
vabr88e507212017-03-29 13:22:2675 defaults_->SetDefaultValue(path, std::move(default_value));
raymes51b41a62015-04-24 02:45:0476 if (flags != NO_REGISTRATION_FLAGS)
77 registration_flags_[path] = flags;
Sam McNally450271f2017-10-13 11:47:3478 OnPrefRegistered(path, default_value_raw, flags);
[email protected]b1de2c72013-02-06 02:45:4779}
Sam McNally11c6c8a2017-06-08 01:44:1980
81void PrefRegistry::RegisterForeignPref(const std::string& path) {
82 bool inserted = foreign_pref_keys_.insert(path).second;
83 DCHECK(inserted);
84}
Sam McNally450271f2017-10-13 11:47:3485
86void PrefRegistry::OnPrefRegistered(const std::string& path,
87 base::Value* default_value,
88 uint32_t flags) {}