Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Side by Side Diff: services/preferences/public/cpp/pref_store_client_mixin.cc

Issue 2743563003: Pref service: add persistent pref store frontend and backend. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 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
5 #include "services/preferences/public/cpp/pref_store_client_mixin.h"
6
7 #include "base/values.h"
8 #include "services/preferences/public/cpp/pref_store_client.h"
9
10 namespace prefs {
11
12 template <typename BasePrefStore>
13 PrefStoreClientMixin<BasePrefStore>::PrefStoreClientMixin()
14 : observer_binding_(this) {}
15
16 template <typename BasePrefStore>
17 void PrefStoreClientMixin<BasePrefStore>::AddObserver(
18 PrefStore::Observer* observer) {
19 observers_.AddObserver(observer);
20 }
21
22 template <typename BasePrefStore>
23 void PrefStoreClientMixin<BasePrefStore>::RemoveObserver(
24 PrefStore::Observer* observer) {
25 observers_.RemoveObserver(observer);
26 }
27
28 template <typename BasePrefStore>
29 bool PrefStoreClientMixin<BasePrefStore>::HasObservers() const {
30 return observers_.might_have_observers();
31 }
32
33 template <typename BasePrefStore>
34 bool PrefStoreClientMixin<BasePrefStore>::IsInitializationComplete() const {
35 return initialized_ && static_cast<bool>(cached_prefs_);
36 }
37
38 template <typename BasePrefStore>
39 bool PrefStoreClientMixin<BasePrefStore>::GetValue(
40 const std::string& key,
41 const base::Value** result) const {
42 DCHECK(initialized_);
tibell 2017/03/10 02:18:27 Also DCHECK cached_prefs_ here and elsewhere.
Sam McNally 2017/03/10 02:43:25 Done.
43 return cached_prefs_->Get(key, result);
44 }
45
46 template <typename BasePrefStore>
47 std::unique_ptr<base::DictionaryValue>
48 PrefStoreClientMixin<BasePrefStore>::GetValues() const {
49 DCHECK(initialized_);
50 return cached_prefs_->CreateDeepCopy();
51 }
52
53 template <typename BasePrefStore>
54 PrefStoreClientMixin<BasePrefStore>::~PrefStoreClientMixin() = default;
55
56 template <typename BasePrefStore>
57 void PrefStoreClientMixin<BasePrefStore>::Init(
58 std::unique_ptr<base::DictionaryValue> initial_prefs,
59 bool initialized,
60 mojom::PrefStoreObserverRequest observer_request) {
61 cached_prefs_ = std::move(initial_prefs);
62 observer_binding_.Bind(std::move(observer_request));
63 if (initialized)
64 OnInitializationCompleted(static_cast<bool>(cached_prefs_));
65 }
66
67 template <typename BasePrefStore>
68 base::DictionaryValue& PrefStoreClientMixin<BasePrefStore>::GetMutableValues() {
69 DCHECK(cached_prefs_);
70 return *cached_prefs_;
71 }
72
73 template <typename BasePrefStore>
74 void PrefStoreClientMixin<BasePrefStore>::ReportPrefValueChanged(
75 const std::string& key) {
76 for (auto& observer : observers_)
77 observer.OnPrefValueChanged(key);
78 }
79
80 template <typename BasePrefStore>
81 void PrefStoreClientMixin<BasePrefStore>::OnPrefChanged(
82 const std::string& key,
83 std::unique_ptr<base::Value> value) {
84 bool changed = false;
85 if (!value) { // Delete
86 if (cached_prefs_->RemovePath(key, nullptr))
87 changed = true;
88 } else {
89 const base::Value* prev;
90 if (cached_prefs_->Get(key, &prev)) {
91 if (!prev->Equals(value.get())) {
92 cached_prefs_->Set(key, std::move(value));
93 changed = true;
94 }
95 } else {
96 cached_prefs_->Set(key, std::move(value));
97 changed = true;
98 }
99 }
100 if (changed)
101 ReportPrefValueChanged(key);
102 }
103
104 template <typename BasePrefStore>
105 void PrefStoreClientMixin<BasePrefStore>::OnInitializationCompleted(
106 bool succeeded) {
107 if (!initialized_) {
108 initialized_ = true;
109 for (auto& observer : observers_)
110 observer.OnInitializationCompleted(succeeded);
111 }
112 }
113
114 template class PrefStoreClientMixin<::PrefStore>;
115 template class PrefStoreClientMixin<::PersistentPrefStore>;
116
117 } // namespace prefs
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698