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

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

Issue 2092453002: Mojom interface for Preferences (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Review Comments Created 4 years, 5 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_observer_store.h"
6
7 #include "base/values.h"
8 #include "mojo/public/cpp/bindings/array.h"
9 #include "services/shell/public/cpp/connector.h"
10
11 PrefObserverStore::PrefObserverStore(shell::Connector* connector)
12 : prefs_binding_(this), prefs_manager_(nullptr), initialized_(false) {
13 if (connector) {
14 connector->ConnectToInterface("exe:chrome", &prefs_manager_ptr_);
sadrul 2016/07/25 15:32:18 Send the |prefs_manager_ptr_| from the caller, ins
jonross 2016/07/26 19:27:36 Done.
15 prefs_manager_ = prefs_manager_ptr_.get();
16 }
17 }
18
19 void PrefObserverStore::Init(const std::set<std::string>& keys) {
20 DCHECK(prefs_manager_);
21 keys_ = keys;
sadrul 2016/07/25 15:32:18 DCHECK(!initialized_)
jonross 2016/07/26 19:27:36 Done.
22
23 prefs::mojom::PreferenceListPtr prefs_list =
24 prefs::mojom::PreferenceList::New();
25 mojo::Array<mojo::String> pref_array = mojo::Array<mojo::String>::From(keys);
26 prefs_list->preferences = std::move(pref_array);
27 prefs_manager_->AddObserver(std::move(prefs_list),
28 prefs_binding_.CreateInterfacePtrAndBind());
29 }
30
31 bool PrefObserverStore::GetValue(const std::string& key,
32 const base::Value** value) const {
33 DCHECK(initialized_);
34 DCHECK(keys_.find(key) != keys_.end());
35
36 return ValueMapPrefStore::GetValue(key, value);
37 }
38
39 void PrefObserverStore::SetValue(const std::string& key,
40 std::unique_ptr<base::Value> value,
41 uint32_t flags) {
42 DCHECK(keys_.find(key) != keys_.end());
43
44 SetValueOnPreferenceManager(key, value.get());
45 ValueMapPrefStore::SetValue(key, std::move(value), flags);
46 }
47
48 void PrefObserverStore::RemoveValue(const std::string& key, uint32_t flags) {
49 // TODO(jonross): add preference removal to preferences.mojom
50 NOTIMPLEMENTED();
51 }
52
53 bool PrefObserverStore::GetMutableValue(const std::string& key,
54 base::Value** value) {
55 // TODO(jonross): determine how we can track edits to base::Value so that we
56 // can appropriately set the value on the PreferenceManger.
sadrul 2016/07/25 15:32:17 Looks like the callers are expected to call Report
jonross 2016/07/26 19:27:36 Yeah that seems to be true. I'll update this to fo
57 NOTIMPLEMENTED();
58 return false;
59 }
60
61 void PrefObserverStore::ReportValueChanged(const std::string& key,
62 uint32_t flags) {
63 ValueMapPrefStore::ReportValueChanged(key, flags);
64 }
65
66 void PrefObserverStore::SetValueSilently(const std::string& key,
67 std::unique_ptr<base::Value> value,
68 uint32_t flags) {
69 SetValueOnPreferenceManager(key, value.get());
70 ValueMapPrefStore::SetValueSilently(key, std::move(value), flags);
71 }
72
73 PrefObserverStore::~PrefObserverStore() {}
74
75 void PrefObserverStore::SetValueOnPreferenceManager(const std::string& key,
76 base::Value* value) {
77 if (keys_.find(key) == keys_.end())
78 return;
79
80 // TODO(jonross): replace with struct traits for base::Value
sadrul 2016/07/25 15:32:18 Do we need to check |initialized_| here, and queue
jonross 2016/07/26 19:27:36 This is a possible way to handle it. Another is t
81 prefs::mojom::PreferencePtr pref = prefs::mojom::Preference::New();
82 switch (value->GetType()) {
83 case base::Value::TYPE_INTEGER: {
84 pref->type = prefs::mojom::Preference::PreferenceType::INT;
85 int val = 0;
86 value->GetAsInteger(&val);
sadrul 2016/07/25 15:32:18 Check return value
jonross 2016/07/26 19:27:36 Done.
87 pref->integer_value_ = val;
88 } break;
89 case base::Value::TYPE_STRING: {
90 pref->type = prefs::mojom::Preference::PreferenceType::STRING;
91 std::string str;
92 value->GetAsString(&str);
sadrul 2016/07/25 15:32:17 ditto
jonross 2016/07/26 19:27:36 Done.
93 pref->string_value_ = str;
94 } break;
95 default:
96 NOTIMPLEMENTED();
97 return;
98 }
99
100 prefs::mojom::PreferenceMapPtr pref_map = prefs::mojom::PreferenceMap::New();
101 pref_map->preferences.insert(key, std::move(pref));
102 prefs_manager_->SetPreferences(std::move(pref_map));
103 }
104
105 void PrefObserverStore::OnPreferencesChanged(
106 prefs::mojom::PreferenceMapPtr preferences) {
107 for (auto& it : preferences->preferences) {
108 if (keys_.find(it.first) == keys_.end())
109 continue;
110 // TODO(jonross): replace with struct traits for base::Value
111 base::Value* value;
sadrul 2016/07/25 15:32:17 value = nullptr;
jonross 2016/07/26 19:27:36 Done.
112 switch (it.second->type) {
113 case prefs::mojom::Preference::PreferenceType::INT:
114 value = new base::FundamentalValue((int)it.second->integer_value_);
115 break;
116 case prefs::mojom::Preference::PreferenceType::STRING:
117 value = new base::StringValue(it.second->string_value_);
118 break;
119 default:
120 NOTIMPLEMENTED();
121 return;
122 }
123 ValueMapPrefStore::SetValue(it.first, base::WrapUnique(value), 0);
124 }
125
126 if (!initialized_) {
127 initialized_ = true;
128 NotifyInitializationCompleted();
129 }
130 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698