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

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: rebase 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 <utility>
8
9 #include "base/values.h"
10 #include "services/preferences/public/cpp/pref_store_client.h"
11
12 namespace prefs {
13
14 template <typename BasePrefStore>
15 PrefStoreClientMixin<BasePrefStore>::PrefStoreClientMixin()
16 : observer_binding_(this) {}
17
18 template <typename BasePrefStore>
19 void PrefStoreClientMixin<BasePrefStore>::AddObserver(
20 PrefStore::Observer* observer) {
21 observers_.AddObserver(observer);
22 }
23
24 template <typename BasePrefStore>
25 void PrefStoreClientMixin<BasePrefStore>::RemoveObserver(
26 PrefStore::Observer* observer) {
27 observers_.RemoveObserver(observer);
28 }
29
30 template <typename BasePrefStore>
31 bool PrefStoreClientMixin<BasePrefStore>::HasObservers() const {
32 return observers_.might_have_observers();
33 }
34
35 template <typename BasePrefStore>
36 bool PrefStoreClientMixin<BasePrefStore>::IsInitializationComplete() const {
37 return initialized_ && static_cast<bool>(cached_prefs_);
38 }
39
40 template <typename BasePrefStore>
41 bool PrefStoreClientMixin<BasePrefStore>::GetValue(
42 const std::string& key,
43 const base::Value** result) const {
44 DCHECK(initialized_);
45 DCHECK(cached_prefs_);
46 return cached_prefs_->Get(key, result);
47 }
48
49 template <typename BasePrefStore>
50 std::unique_ptr<base::DictionaryValue>
51 PrefStoreClientMixin<BasePrefStore>::GetValues() const {
52 DCHECK(initialized_);
53 DCHECK(cached_prefs_);
54 return cached_prefs_->CreateDeepCopy();
55 }
56
57 template <typename BasePrefStore>
58 PrefStoreClientMixin<BasePrefStore>::~PrefStoreClientMixin() = default;
59
60 template <typename BasePrefStore>
61 void PrefStoreClientMixin<BasePrefStore>::Init(
62 std::unique_ptr<base::DictionaryValue> initial_prefs,
63 bool initialized,
64 mojom::PrefStoreObserverRequest observer_request) {
65 cached_prefs_ = std::move(initial_prefs);
66 observer_binding_.Bind(std::move(observer_request));
67 if (initialized)
68 OnInitializationCompleted(static_cast<bool>(cached_prefs_));
69 }
70
71 template <typename BasePrefStore>
72 base::DictionaryValue& PrefStoreClientMixin<BasePrefStore>::GetMutableValues() {
73 DCHECK(cached_prefs_);
74 return *cached_prefs_;
75 }
76
77 template <typename BasePrefStore>
78 void PrefStoreClientMixin<BasePrefStore>::ReportPrefValueChanged(
79 const std::string& key) {
80 for (auto& observer : observers_)
81 observer.OnPrefValueChanged(key);
82 }
83
84 template <typename BasePrefStore>
85 void PrefStoreClientMixin<BasePrefStore>::OnPrefChanged(
86 const std::string& key,
87 std::unique_ptr<base::Value> value) {
88 DCHECK(cached_prefs_);
89 bool changed = false;
90 if (!value) { // Delete
91 if (cached_prefs_->RemovePath(key, nullptr))
92 changed = true;
93 } else {
94 const base::Value* prev;
95 if (cached_prefs_->Get(key, &prev)) {
96 if (!prev->Equals(value.get())) {
97 cached_prefs_->Set(key, std::move(value));
98 changed = true;
99 }
100 } else {
101 cached_prefs_->Set(key, std::move(value));
102 changed = true;
103 }
104 }
105 if (changed)
106 ReportPrefValueChanged(key);
107 }
108
109 template <typename BasePrefStore>
110 void PrefStoreClientMixin<BasePrefStore>::OnInitializationCompleted(
111 bool succeeded) {
112 if (!initialized_) {
113 initialized_ = true;
114 for (auto& observer : observers_)
115 observer.OnInitializationCompleted(succeeded);
116 }
117 }
118
119 template class PrefStoreClientMixin<::PrefStore>;
120 template class PrefStoreClientMixin<::PersistentPrefStore>;
121
122 } // namespace prefs
OLDNEW
« no previous file with comments | « services/preferences/public/cpp/pref_store_client_mixin.h ('k') | services/preferences/public/cpp/preferences.typemap » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698