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

Side by Side Diff: chrome/browser/supervised_user/supervised_user_settings_service.cc

Issue 335833003: Rename "managed (mode|user)" to "supervised user" (part 2) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review comments (+ a few other cleanups) Created 6 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/managed_mode/managed_user_settings_service.h" 5 #include "chrome/browser/supervised_user/supervised_user_settings_service.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/json/json_reader.h" 8 #include "base/json/json_reader.h"
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/prefs/json_pref_store.h" 10 #include "base/prefs/json_pref_store.h"
11 #include "base/prefs/pref_filter.h" 11 #include "base/prefs/pref_filter.h"
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "base/threading/sequenced_worker_pool.h" 13 #include "base/threading/sequenced_worker_pool.h"
14 #include "chrome/browser/managed_mode/managed_mode_url_filter.h" 14 #include "chrome/browser/supervised_user/supervised_user_url_filter.h"
15 #include "chrome/common/chrome_constants.h" 15 #include "chrome/common/chrome_constants.h"
16 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
17 #include "content/public/browser/user_metrics.h" 17 #include "content/public/browser/user_metrics.h"
18 #include "sync/api/sync_change.h" 18 #include "sync/api/sync_change.h"
19 #include "sync/api/sync_error_factory.h" 19 #include "sync/api/sync_error_factory.h"
20 #include "sync/protocol/sync.pb.h" 20 #include "sync/protocol/sync.pb.h"
21 21
22 using base::DictionaryValue; 22 using base::DictionaryValue;
23 using base::JSONReader; 23 using base::JSONReader;
24 using base::UserMetricsAction; 24 using base::UserMetricsAction;
25 using base::Value; 25 using base::Value;
26 using content::BrowserThread; 26 using content::BrowserThread;
27 using syncer::SUPERVISED_USER_SETTINGS; 27 using syncer::SUPERVISED_USER_SETTINGS;
28 using syncer::ModelType; 28 using syncer::ModelType;
29 using syncer::SyncChange; 29 using syncer::SyncChange;
30 using syncer::SyncChangeList; 30 using syncer::SyncChangeList;
31 using syncer::SyncChangeProcessor; 31 using syncer::SyncChangeProcessor;
32 using syncer::SyncData; 32 using syncer::SyncData;
33 using syncer::SyncDataList; 33 using syncer::SyncDataList;
34 using syncer::SyncError; 34 using syncer::SyncError;
35 using syncer::SyncErrorFactory; 35 using syncer::SyncErrorFactory;
36 using syncer::SyncMergeResult; 36 using syncer::SyncMergeResult;
37 37
38 const char kAtomicSettings[] = "atomic_settings"; 38 const char kAtomicSettings[] = "atomic_settings";
39 const char kManagedUserInternalItemPrefix[] = "X-"; 39 const char kSupervisedUserInternalItemPrefix[] = "X-";
40 const char kQueuedItems[] = "queued_items"; 40 const char kQueuedItems[] = "queued_items";
41 const char kSplitSettingKeySeparator = ':'; 41 const char kSplitSettingKeySeparator = ':';
42 const char kSplitSettings[] = "split_settings"; 42 const char kSplitSettings[] = "split_settings";
43 43
44 namespace { 44 namespace {
45 45
46 bool SettingShouldApplyToPrefs(const std::string& name) { 46 bool SettingShouldApplyToPrefs(const std::string& name) {
47 return !StartsWithASCII(name, kManagedUserInternalItemPrefix, false); 47 return !StartsWithASCII(name, kSupervisedUserInternalItemPrefix, false);
48 } 48 }
49 49
50 } // namespace 50 } // namespace
51 51
52 ManagedUserSettingsService::ManagedUserSettingsService() 52 SupervisedUserSettingsService::SupervisedUserSettingsService()
53 : active_(false), local_settings_(new base::DictionaryValue) {} 53 : active_(false), local_settings_(new base::DictionaryValue) {}
54 54
55 ManagedUserSettingsService::~ManagedUserSettingsService() {} 55 SupervisedUserSettingsService::~SupervisedUserSettingsService() {}
56 56
57 void ManagedUserSettingsService::Init( 57 void SupervisedUserSettingsService::Init(
58 base::FilePath profile_path, 58 base::FilePath profile_path,
59 base::SequencedTaskRunner* sequenced_task_runner, 59 base::SequencedTaskRunner* sequenced_task_runner,
60 bool load_synchronously) { 60 bool load_synchronously) {
61 base::FilePath path = 61 base::FilePath path =
62 profile_path.Append(chrome::kSupervisedUserSettingsFilename); 62 profile_path.Append(chrome::kSupervisedUserSettingsFilename);
63 PersistentPrefStore* store = new JsonPrefStore( 63 PersistentPrefStore* store = new JsonPrefStore(
64 path, sequenced_task_runner, scoped_ptr<PrefFilter>()); 64 path, sequenced_task_runner, scoped_ptr<PrefFilter>());
65 Init(store); 65 Init(store);
66 if (load_synchronously) 66 if (load_synchronously)
67 store_->ReadPrefs(); 67 store_->ReadPrefs();
68 else 68 else
69 store_->ReadPrefsAsync(NULL); 69 store_->ReadPrefsAsync(NULL);
70 } 70 }
71 71
72 void ManagedUserSettingsService::Init( 72 void SupervisedUserSettingsService::Init(
73 scoped_refptr<PersistentPrefStore> store) { 73 scoped_refptr<PersistentPrefStore> store) {
74 DCHECK(!store_); 74 DCHECK(!store_);
75 store_ = store; 75 store_ = store;
76 store_->AddObserver(this); 76 store_->AddObserver(this);
77 } 77 }
78 78
79 void ManagedUserSettingsService::Subscribe(const SettingsCallback& callback) { 79 void SupervisedUserSettingsService::Subscribe(
80 const SettingsCallback& callback) {
80 if (IsReady()) { 81 if (IsReady()) {
81 scoped_ptr<base::DictionaryValue> settings = GetSettings(); 82 scoped_ptr<base::DictionaryValue> settings = GetSettings();
82 callback.Run(settings.get()); 83 callback.Run(settings.get());
83 } 84 }
84 85
85 subscribers_.push_back(callback); 86 subscribers_.push_back(callback);
86 } 87 }
87 88
88 void ManagedUserSettingsService::SetActive(bool active) { 89 void SupervisedUserSettingsService::SetActive(bool active) {
89 active_ = active; 90 active_ = active;
90 InformSubscribers(); 91 InformSubscribers();
91 } 92 }
92 93
93 bool ManagedUserSettingsService::IsReady() { 94 bool SupervisedUserSettingsService::IsReady() {
94 return store_->IsInitializationComplete(); 95 return store_->IsInitializationComplete();
95 } 96 }
96 97
97 void ManagedUserSettingsService::Clear() { 98 void SupervisedUserSettingsService::Clear() {
98 store_->RemoveValue(kAtomicSettings); 99 store_->RemoveValue(kAtomicSettings);
99 store_->RemoveValue(kSplitSettings); 100 store_->RemoveValue(kSplitSettings);
100 } 101 }
101 102
102 // static 103 // static
103 std::string ManagedUserSettingsService::MakeSplitSettingKey( 104 std::string SupervisedUserSettingsService::MakeSplitSettingKey(
104 const std::string& prefix, 105 const std::string& prefix,
105 const std::string& key) { 106 const std::string& key) {
106 return prefix + kSplitSettingKeySeparator + key; 107 return prefix + kSplitSettingKeySeparator + key;
107 } 108 }
108 109
109 void ManagedUserSettingsService::UploadItem(const std::string& key, 110 void SupervisedUserSettingsService::UploadItem(const std::string& key,
110 scoped_ptr<base::Value> value) { 111 scoped_ptr<base::Value> value) {
111 DCHECK(!SettingShouldApplyToPrefs(key)); 112 DCHECK(!SettingShouldApplyToPrefs(key));
112 113
113 std::string key_suffix = key; 114 std::string key_suffix = key;
114 base::DictionaryValue* dict = NULL; 115 base::DictionaryValue* dict = NULL;
115 if (sync_processor_) { 116 if (sync_processor_) {
116 content::RecordAction(UserMetricsAction("ManagedUsers_UploadItem_Syncing")); 117 content::RecordAction(UserMetricsAction("ManagedUsers_UploadItem_Syncing"));
117 dict = GetDictionaryAndSplitKey(&key_suffix); 118 dict = GetDictionaryAndSplitKey(&key_suffix);
118 DCHECK(GetQueuedItems()->empty()); 119 DCHECK(GetQueuedItems()->empty());
119 SyncChangeList change_list; 120 SyncChangeList change_list;
120 SyncData data = CreateSyncDataForSetting(key, *value); 121 SyncData data = CreateSyncDataForSetting(key, *value);
121 SyncChange::SyncChangeType change_type = 122 SyncChange::SyncChangeType change_type =
122 dict->HasKey(key_suffix) ? SyncChange::ACTION_UPDATE 123 dict->HasKey(key_suffix) ? SyncChange::ACTION_UPDATE
123 : SyncChange::ACTION_ADD; 124 : SyncChange::ACTION_ADD;
124 change_list.push_back(SyncChange(FROM_HERE, change_type, data)); 125 change_list.push_back(SyncChange(FROM_HERE, change_type, data));
125 SyncError error = 126 SyncError error =
126 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); 127 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list);
127 DCHECK(!error.IsSet()) << error.ToString(); 128 DCHECK(!error.IsSet()) << error.ToString();
128 } else { 129 } else {
129 // Queue the item up to be uploaded when we start syncing 130 // Queue the item up to be uploaded when we start syncing
130 // (in MergeDataAndStartSyncing()). 131 // (in MergeDataAndStartSyncing()).
131 content::RecordAction(UserMetricsAction("ManagedUsers_UploadItem_Queued")); 132 content::RecordAction(UserMetricsAction("ManagedUsers_UploadItem_Queued"));
132 dict = GetQueuedItems(); 133 dict = GetQueuedItems();
133 } 134 }
134 dict->SetWithoutPathExpansion(key_suffix, value.release()); 135 dict->SetWithoutPathExpansion(key_suffix, value.release());
135 } 136 }
136 137
137 void ManagedUserSettingsService::SetLocalSettingForTesting( 138 void SupervisedUserSettingsService::SetLocalSettingForTesting(
138 const std::string& key, 139 const std::string& key,
139 scoped_ptr<base::Value> value) { 140 scoped_ptr<base::Value> value) {
140 if (value) 141 if (value)
141 local_settings_->SetWithoutPathExpansion(key, value.release()); 142 local_settings_->SetWithoutPathExpansion(key, value.release());
142 else 143 else
143 local_settings_->RemoveWithoutPathExpansion(key, NULL); 144 local_settings_->RemoveWithoutPathExpansion(key, NULL);
144 145
145 InformSubscribers(); 146 InformSubscribers();
146 } 147 }
147 148
148 // static 149 // static
149 SyncData ManagedUserSettingsService::CreateSyncDataForSetting( 150 SyncData SupervisedUserSettingsService::CreateSyncDataForSetting(
150 const std::string& name, 151 const std::string& name,
151 const base::Value& value) { 152 const base::Value& value) {
152 std::string json_value; 153 std::string json_value;
153 base::JSONWriter::Write(&value, &json_value); 154 base::JSONWriter::Write(&value, &json_value);
154 ::sync_pb::EntitySpecifics specifics; 155 ::sync_pb::EntitySpecifics specifics;
155 specifics.mutable_managed_user_setting()->set_name(name); 156 specifics.mutable_managed_user_setting()->set_name(name);
156 specifics.mutable_managed_user_setting()->set_value(json_value); 157 specifics.mutable_managed_user_setting()->set_value(json_value);
157 return SyncData::CreateLocalData(name, name, specifics); 158 return SyncData::CreateLocalData(name, name, specifics);
158 } 159 }
159 160
160 void ManagedUserSettingsService::Shutdown() { 161 void SupervisedUserSettingsService::Shutdown() {
161 store_->RemoveObserver(this); 162 store_->RemoveObserver(this);
162 } 163 }
163 164
164 SyncMergeResult ManagedUserSettingsService::MergeDataAndStartSyncing( 165 SyncMergeResult SupervisedUserSettingsService::MergeDataAndStartSyncing(
165 ModelType type, 166 ModelType type,
166 const SyncDataList& initial_sync_data, 167 const SyncDataList& initial_sync_data,
167 scoped_ptr<SyncChangeProcessor> sync_processor, 168 scoped_ptr<SyncChangeProcessor> sync_processor,
168 scoped_ptr<SyncErrorFactory> error_handler) { 169 scoped_ptr<SyncErrorFactory> error_handler) {
169 DCHECK_EQ(SUPERVISED_USER_SETTINGS, type); 170 DCHECK_EQ(SUPERVISED_USER_SETTINGS, type);
170 sync_processor_ = sync_processor.Pass(); 171 sync_processor_ = sync_processor.Pass();
171 error_handler_ = error_handler.Pass(); 172 error_handler_ = error_handler.Pass();
172 173
173 // Clear all atomic and split settings, then recreate them from Sync data. 174 // Clear all atomic and split settings, then recreate them from Sync data.
174 Clear(); 175 Clear();
175 for (SyncDataList::const_iterator it = initial_sync_data.begin(); 176 for (SyncDataList::const_iterator it = initial_sync_data.begin();
176 it != initial_sync_data.end(); ++it) { 177 it != initial_sync_data.end(); ++it) {
177 DCHECK_EQ(SUPERVISED_USER_SETTINGS, it->GetDataType()); 178 DCHECK_EQ(SUPERVISED_USER_SETTINGS, it->GetDataType());
178 const ::sync_pb::ManagedUserSettingSpecifics& managed_user_setting = 179 const ::sync_pb::ManagedUserSettingSpecifics& supervised_user_setting =
179 it->GetSpecifics().managed_user_setting(); 180 it->GetSpecifics().managed_user_setting();
180 scoped_ptr<base::Value> value( 181 scoped_ptr<base::Value> value(
181 JSONReader::Read(managed_user_setting.value())); 182 JSONReader::Read(supervised_user_setting.value()));
182 std::string name_suffix = managed_user_setting.name(); 183 std::string name_suffix = supervised_user_setting.name();
183 base::DictionaryValue* dict = GetDictionaryAndSplitKey(&name_suffix); 184 base::DictionaryValue* dict = GetDictionaryAndSplitKey(&name_suffix);
184 dict->SetWithoutPathExpansion(name_suffix, value.release()); 185 dict->SetWithoutPathExpansion(name_suffix, value.release());
185 } 186 }
186 store_->ReportValueChanged(kAtomicSettings); 187 store_->ReportValueChanged(kAtomicSettings);
187 store_->ReportValueChanged(kSplitSettings); 188 store_->ReportValueChanged(kSplitSettings);
188 InformSubscribers(); 189 InformSubscribers();
189 190
190 // Upload all the queued up items (either with an ADD or an UPDATE action, 191 // Upload all the queued up items (either with an ADD or an UPDATE action,
191 // depending on whether they already exist) and move them to split settings. 192 // depending on whether they already exist) and move them to split settings.
192 SyncChangeList change_list; 193 SyncChangeList change_list;
(...skipping 16 matching lines...) Expand all
209 if (change_list.size() > 0) { 210 if (change_list.size() > 0) {
210 store_->ReportValueChanged(kQueuedItems); 211 store_->ReportValueChanged(kQueuedItems);
211 result.set_error( 212 result.set_error(
212 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list)); 213 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list));
213 } 214 }
214 215
215 // TODO(bauerb): Statistics? 216 // TODO(bauerb): Statistics?
216 return result; 217 return result;
217 } 218 }
218 219
219 void ManagedUserSettingsService::StopSyncing(ModelType type) { 220 void SupervisedUserSettingsService::StopSyncing(ModelType type) {
220 DCHECK_EQ(syncer::SUPERVISED_USER_SETTINGS, type); 221 DCHECK_EQ(syncer::SUPERVISED_USER_SETTINGS, type);
221 sync_processor_.reset(); 222 sync_processor_.reset();
222 error_handler_.reset(); 223 error_handler_.reset();
223 } 224 }
224 225
225 SyncDataList ManagedUserSettingsService::GetAllSyncData( 226 SyncDataList SupervisedUserSettingsService::GetAllSyncData(
226 ModelType type) const { 227 ModelType type) const {
227 DCHECK_EQ(syncer::SUPERVISED_USER_SETTINGS, type); 228 DCHECK_EQ(syncer::SUPERVISED_USER_SETTINGS, type);
228 SyncDataList data; 229 SyncDataList data;
229 for (base::DictionaryValue::Iterator it(*GetAtomicSettings()); !it.IsAtEnd(); 230 for (base::DictionaryValue::Iterator it(*GetAtomicSettings()); !it.IsAtEnd();
230 it.Advance()) { 231 it.Advance()) {
231 data.push_back(CreateSyncDataForSetting(it.key(), it.value())); 232 data.push_back(CreateSyncDataForSetting(it.key(), it.value()));
232 } 233 }
233 for (base::DictionaryValue::Iterator it(*GetSplitSettings()); !it.IsAtEnd(); 234 for (base::DictionaryValue::Iterator it(*GetSplitSettings()); !it.IsAtEnd();
234 it.Advance()) { 235 it.Advance()) {
235 const base::DictionaryValue* dict = NULL; 236 const base::DictionaryValue* dict = NULL;
236 it.value().GetAsDictionary(&dict); 237 it.value().GetAsDictionary(&dict);
237 for (base::DictionaryValue::Iterator jt(*dict); 238 for (base::DictionaryValue::Iterator jt(*dict);
238 !jt.IsAtEnd(); jt.Advance()) { 239 !jt.IsAtEnd(); jt.Advance()) {
239 data.push_back(CreateSyncDataForSetting( 240 data.push_back(CreateSyncDataForSetting(
240 MakeSplitSettingKey(it.key(), jt.key()), jt.value())); 241 MakeSplitSettingKey(it.key(), jt.key()), jt.value()));
241 } 242 }
242 } 243 }
243 DCHECK_EQ(0u, GetQueuedItems()->size()); 244 DCHECK_EQ(0u, GetQueuedItems()->size());
244 return data; 245 return data;
245 } 246 }
246 247
247 SyncError ManagedUserSettingsService::ProcessSyncChanges( 248 SyncError SupervisedUserSettingsService::ProcessSyncChanges(
248 const tracked_objects::Location& from_here, 249 const tracked_objects::Location& from_here,
249 const SyncChangeList& change_list) { 250 const SyncChangeList& change_list) {
250 for (SyncChangeList::const_iterator it = change_list.begin(); 251 for (SyncChangeList::const_iterator it = change_list.begin();
251 it != change_list.end(); ++it) { 252 it != change_list.end(); ++it) {
252 SyncData data = it->sync_data(); 253 SyncData data = it->sync_data();
253 DCHECK_EQ(SUPERVISED_USER_SETTINGS, data.GetDataType()); 254 DCHECK_EQ(SUPERVISED_USER_SETTINGS, data.GetDataType());
254 const ::sync_pb::ManagedUserSettingSpecifics& managed_user_setting = 255 const ::sync_pb::ManagedUserSettingSpecifics& supervised_user_setting =
255 data.GetSpecifics().managed_user_setting(); 256 data.GetSpecifics().managed_user_setting();
256 std::string key = managed_user_setting.name(); 257 std::string key = supervised_user_setting.name();
257 base::DictionaryValue* dict = GetDictionaryAndSplitKey(&key); 258 base::DictionaryValue* dict = GetDictionaryAndSplitKey(&key);
258 switch (it->change_type()) { 259 switch (it->change_type()) {
259 case SyncChange::ACTION_ADD: 260 case SyncChange::ACTION_ADD:
260 case SyncChange::ACTION_UPDATE: { 261 case SyncChange::ACTION_UPDATE: {
261 scoped_ptr<base::Value> value( 262 scoped_ptr<base::Value> value(
262 JSONReader::Read(managed_user_setting.value())); 263 JSONReader::Read(supervised_user_setting.value()));
263 if (dict->HasKey(key)) { 264 if (dict->HasKey(key)) {
264 DLOG_IF(WARNING, it->change_type() == SyncChange::ACTION_ADD) 265 DLOG_IF(WARNING, it->change_type() == SyncChange::ACTION_ADD)
265 << "Value for key " << key << " already exists"; 266 << "Value for key " << key << " already exists";
266 } else { 267 } else {
267 DLOG_IF(WARNING, it->change_type() == SyncChange::ACTION_UPDATE) 268 DLOG_IF(WARNING, it->change_type() == SyncChange::ACTION_UPDATE)
268 << "Value for key " << key << " doesn't exist yet"; 269 << "Value for key " << key << " doesn't exist yet";
269 } 270 }
270 dict->SetWithoutPathExpansion(key, value.release()); 271 dict->SetWithoutPathExpansion(key, value.release());
271 break; 272 break;
272 } 273 }
(...skipping 10 matching lines...) Expand all
283 } 284 }
284 } 285 }
285 store_->ReportValueChanged(kAtomicSettings); 286 store_->ReportValueChanged(kAtomicSettings);
286 store_->ReportValueChanged(kSplitSettings); 287 store_->ReportValueChanged(kSplitSettings);
287 InformSubscribers(); 288 InformSubscribers();
288 289
289 SyncError error; 290 SyncError error;
290 return error; 291 return error;
291 } 292 }
292 293
293 void ManagedUserSettingsService::OnPrefValueChanged(const std::string& key) {} 294 void SupervisedUserSettingsService::OnPrefValueChanged(const std::string& key) {
295 }
294 296
295 void ManagedUserSettingsService::OnInitializationCompleted(bool success) { 297 void SupervisedUserSettingsService::OnInitializationCompleted(bool success) {
296 DCHECK(success); 298 DCHECK(success);
297 DCHECK(IsReady()); 299 DCHECK(IsReady());
298 InformSubscribers(); 300 InformSubscribers();
299 } 301 }
300 302
301 base::DictionaryValue* ManagedUserSettingsService::GetOrCreateDictionary( 303 base::DictionaryValue* SupervisedUserSettingsService::GetOrCreateDictionary(
302 const std::string& key) const { 304 const std::string& key) const {
303 base::Value* value = NULL; 305 base::Value* value = NULL;
304 base::DictionaryValue* dict = NULL; 306 base::DictionaryValue* dict = NULL;
305 if (store_->GetMutableValue(key, &value)) { 307 if (store_->GetMutableValue(key, &value)) {
306 bool success = value->GetAsDictionary(&dict); 308 bool success = value->GetAsDictionary(&dict);
307 DCHECK(success); 309 DCHECK(success);
308 } else { 310 } else {
309 dict = new base::DictionaryValue; 311 dict = new base::DictionaryValue;
310 store_->SetValue(key, dict); 312 store_->SetValue(key, dict);
311 } 313 }
312 314
313 return dict; 315 return dict;
314 } 316 }
315 317
316 base::DictionaryValue* ManagedUserSettingsService::GetAtomicSettings() const { 318 base::DictionaryValue*
319 SupervisedUserSettingsService::GetAtomicSettings() const {
317 return GetOrCreateDictionary(kAtomicSettings); 320 return GetOrCreateDictionary(kAtomicSettings);
318 } 321 }
319 322
320 base::DictionaryValue* ManagedUserSettingsService::GetSplitSettings() const { 323 base::DictionaryValue* SupervisedUserSettingsService::GetSplitSettings() const {
321 return GetOrCreateDictionary(kSplitSettings); 324 return GetOrCreateDictionary(kSplitSettings);
322 } 325 }
323 326
324 base::DictionaryValue* ManagedUserSettingsService::GetQueuedItems() const { 327 base::DictionaryValue* SupervisedUserSettingsService::GetQueuedItems() const {
325 return GetOrCreateDictionary(kQueuedItems); 328 return GetOrCreateDictionary(kQueuedItems);
326 } 329 }
327 330
328 base::DictionaryValue* ManagedUserSettingsService::GetDictionaryAndSplitKey( 331 base::DictionaryValue* SupervisedUserSettingsService::GetDictionaryAndSplitKey(
329 std::string* key) const { 332 std::string* key) const {
330 size_t pos = key->find_first_of(kSplitSettingKeySeparator); 333 size_t pos = key->find_first_of(kSplitSettingKeySeparator);
331 if (pos == std::string::npos) 334 if (pos == std::string::npos)
332 return GetAtomicSettings(); 335 return GetAtomicSettings();
333 336
334 base::DictionaryValue* split_settings = GetSplitSettings(); 337 base::DictionaryValue* split_settings = GetSplitSettings();
335 std::string prefix = key->substr(0, pos); 338 std::string prefix = key->substr(0, pos);
336 base::DictionaryValue* dict = NULL; 339 base::DictionaryValue* dict = NULL;
337 if (!split_settings->GetDictionary(prefix, &dict)) { 340 if (!split_settings->GetDictionary(prefix, &dict)) {
338 dict = new base::DictionaryValue; 341 dict = new base::DictionaryValue;
339 DCHECK(!split_settings->HasKey(prefix)); 342 DCHECK(!split_settings->HasKey(prefix));
340 split_settings->Set(prefix, dict); 343 split_settings->Set(prefix, dict);
341 } 344 }
342 key->erase(0, pos + 1); 345 key->erase(0, pos + 1);
343 return dict; 346 return dict;
344 } 347 }
345 348
346 scoped_ptr<base::DictionaryValue> ManagedUserSettingsService::GetSettings() { 349 scoped_ptr<base::DictionaryValue> SupervisedUserSettingsService::GetSettings() {
347 DCHECK(IsReady()); 350 DCHECK(IsReady());
348 if (!active_) 351 if (!active_)
349 return scoped_ptr<base::DictionaryValue>(); 352 return scoped_ptr<base::DictionaryValue>();
350 353
351 scoped_ptr<base::DictionaryValue> settings(local_settings_->DeepCopy()); 354 scoped_ptr<base::DictionaryValue> settings(local_settings_->DeepCopy());
352 355
353 base::DictionaryValue* atomic_settings = GetAtomicSettings(); 356 base::DictionaryValue* atomic_settings = GetAtomicSettings();
354 for (base::DictionaryValue::Iterator it(*atomic_settings); !it.IsAtEnd(); 357 for (base::DictionaryValue::Iterator it(*atomic_settings); !it.IsAtEnd();
355 it.Advance()) { 358 it.Advance()) {
356 if (!SettingShouldApplyToPrefs(it.key())) 359 if (!SettingShouldApplyToPrefs(it.key()))
357 continue; 360 continue;
358 361
359 settings->Set(it.key(), it.value().DeepCopy()); 362 settings->Set(it.key(), it.value().DeepCopy());
360 } 363 }
361 364
362 base::DictionaryValue* split_settings = GetSplitSettings(); 365 base::DictionaryValue* split_settings = GetSplitSettings();
363 for (base::DictionaryValue::Iterator it(*split_settings); !it.IsAtEnd(); 366 for (base::DictionaryValue::Iterator it(*split_settings); !it.IsAtEnd();
364 it.Advance()) { 367 it.Advance()) {
365 if (!SettingShouldApplyToPrefs(it.key())) 368 if (!SettingShouldApplyToPrefs(it.key()))
366 continue; 369 continue;
367 370
368 settings->Set(it.key(), it.value().DeepCopy()); 371 settings->Set(it.key(), it.value().DeepCopy());
369 } 372 }
370 373
371 return settings.Pass(); 374 return settings.Pass();
372 } 375 }
373 376
374 void ManagedUserSettingsService::InformSubscribers() { 377 void SupervisedUserSettingsService::InformSubscribers() {
375 if (!IsReady()) 378 if (!IsReady())
376 return; 379 return;
377 380
378 scoped_ptr<base::DictionaryValue> settings = GetSettings(); 381 scoped_ptr<base::DictionaryValue> settings = GetSettings();
379 for (std::vector<SettingsCallback>::iterator it = subscribers_.begin(); 382 for (std::vector<SettingsCallback>::iterator it = subscribers_.begin();
380 it != subscribers_.end(); ++it) { 383 it != subscribers_.end(); ++it) {
381 it->Run(settings.get()); 384 it->Run(settings.get());
382 } 385 }
383 } 386 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698