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

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

Issue 2778733003: Pref service: delete old implementation (Closed)
Patch Set: Fix missed merge Created 3 years, 8 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 2016 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_client_store.h"
6
7 #include "base/memory/ptr_util.h"
8 #include "base/values.h"
9 #include "services/service_manager/public/cpp/connector.h"
10
11 namespace preferences {
12
13 PrefClientStore::PrefClientStore(
14 prefs::mojom::PreferencesServiceFactoryPtr pref_factory_ptr)
15 : prefs_binding_(this),
16 pref_factory_ptr_(std::move(pref_factory_ptr)),
17 initialized_(false) {
18 pref_factory_ptr_->Create(prefs_binding_.CreateInterfacePtrAndBind(),
19 mojo::MakeRequest(&prefs_service_ptr_));
20 }
21
22 void PrefClientStore::Subscribe(const std::set<std::string>& keys) {
23 keys_.insert(keys.begin(), keys.end());
24
25 std::vector<std::string> pref_array;
26 std::copy(keys_.begin(), keys_.end(), std::back_inserter(pref_array));
27 prefs_service_ptr_->Subscribe(pref_array);
28 }
29
30 bool PrefClientStore::GetValue(const std::string& key,
31 const base::Value** value) const {
32 DCHECK(initialized_);
33 DCHECK(keys_.find(key) != keys_.end());
34
35 return ValueMapPrefStore::GetValue(key, value);
36 }
37
38 void PrefClientStore::SetValue(const std::string& key,
39 std::unique_ptr<base::Value> value,
40 uint32_t flags) {
41 DCHECK(keys_.find(key) != keys_.end());
42
43 // TODO(jonross): only notify the server if the value changed.
44 SetValueOnPreferenceManager(key, *value);
45 ValueMapPrefStore::SetValue(key, std::move(value), flags);
46 }
47
48 void PrefClientStore::RemoveValue(const std::string& key, uint32_t flags) {
49 // TODO(jonross): add preference removal to preferences.mojom
50 NOTIMPLEMENTED();
51 }
52
53 bool PrefClientStore::GetMutableValue(const std::string& key,
54 base::Value** value) {
55 DCHECK(initialized_);
56 DCHECK(keys_.find(key) != keys_.end());
57
58 return ValueMapPrefStore::GetMutableValue(key, value);
59 }
60
61 void PrefClientStore::ReportValueChanged(const std::string& key,
62 uint32_t flags) {
63 DCHECK(keys_.find(key) != keys_.end());
64 const base::Value* value = nullptr;
65 ValueMapPrefStore::GetValue(key, &value);
66 SetValueOnPreferenceManager(key, *value);
67 ValueMapPrefStore::ReportValueChanged(key, flags);
68 }
69
70 void PrefClientStore::SetValueSilently(const std::string& key,
71 std::unique_ptr<base::Value> value,
72 uint32_t flags) {
73 SetValueOnPreferenceManager(key, *value);
74 ValueMapPrefStore::SetValueSilently(key, std::move(value), flags);
75 }
76
77 PrefClientStore::~PrefClientStore() {}
78
79 void PrefClientStore::SetValueOnPreferenceManager(const std::string& key,
80 const base::Value& value) {
81 if (keys_.find(key) == keys_.end())
82 return;
83
84 auto prefs = base::MakeUnique<base::DictionaryValue>();
85 prefs->SetWithoutPathExpansion(key, value.CreateDeepCopy());
86 prefs_service_ptr_->SetPreferences(std::move(prefs));
87 }
88
89 void PrefClientStore::OnPreferencesChanged(
90 std::unique_ptr<base::DictionaryValue> preferences) {
91 if (!initialized_) {
92 initialized_ = true;
93 NotifyInitializationCompleted();
94 }
95
96 for (base::DictionaryValue::Iterator it(*preferences); !it.IsAtEnd();
97 it.Advance()) {
98 if (keys_.find(it.key()) == keys_.end())
99 continue;
100 ValueMapPrefStore::SetValue(it.key(), it.value().CreateDeepCopy(), 0);
101 }
102 }
103
104 } // namespace preferences
OLDNEW
« no previous file with comments | « services/preferences/public/cpp/pref_client_store.h ('k') | services/preferences/public/cpp/pref_service_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698