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

Unified Diff: chrome/browser/managed_mode/managed_user_shared_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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/managed_mode/managed_user_shared_settings_service.cc
diff --git a/chrome/browser/managed_mode/managed_user_shared_settings_service.cc b/chrome/browser/managed_mode/managed_user_shared_settings_service.cc
deleted file mode 100644
index 74c0b77d444a6c2ca1c7f9cf99c726e1aa2ecb3d..0000000000000000000000000000000000000000
--- a/chrome/browser/managed_mode/managed_user_shared_settings_service.cc
+++ /dev/null
@@ -1,346 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/managed_mode/managed_user_shared_settings_service.h"
-
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
-#include "base/prefs/pref_service.h"
-#include "base/prefs/scoped_user_pref_update.h"
-#include "base/values.h"
-#include "chrome/common/pref_names.h"
-#include "components/pref_registry/pref_registry_syncable.h"
-#include "sync/api/sync_change.h"
-#include "sync/api/sync_data.h"
-#include "sync/api/sync_error.h"
-#include "sync/api/sync_error_factory.h"
-#include "sync/api/sync_merge_result.h"
-#include "sync/protocol/sync.pb.h"
-
-using base::DictionaryValue;
-using base::Value;
-using syncer::SUPERVISED_USER_SHARED_SETTINGS;
-using syncer::ModelType;
-using syncer::SyncChange;
-using syncer::SyncChangeList;
-using syncer::SyncChangeProcessor;
-using syncer::SyncData;
-using syncer::SyncDataList;
-using syncer::SyncError;
-using syncer::SyncErrorFactory;
-using syncer::SyncMergeResult;
-
-namespace {
-
-const char kAcknowledged[] = "acknowledged";
-const char kValue[] = "value";
-
-DictionaryValue* FindOrCreateDictionary(DictionaryValue* parent,
- const std::string& key) {
- DictionaryValue* dict = NULL;
- if (!parent->GetDictionaryWithoutPathExpansion(key, &dict)) {
- dict = new DictionaryValue;
- parent->SetWithoutPathExpansion(key, dict);
- }
- return dict;
-}
-
-class ScopedManagedUserSharedSettingsUpdate {
- public:
- ScopedManagedUserSharedSettingsUpdate(PrefService* prefs,
- const std::string& mu_id)
- : update_(prefs, prefs::kSupervisedUserSharedSettings), mu_id_(mu_id) {
- DCHECK(!mu_id.empty());
-
- // A supervised user can only modify their own settings.
- std::string id = prefs->GetString(prefs::kSupervisedUserId);
- DCHECK(id.empty() || id == mu_id);
- }
-
- DictionaryValue* Get() {
- return FindOrCreateDictionary(update_.Get(), mu_id_);
- }
-
- private:
- DictionaryPrefUpdate update_;
- std::string mu_id_;
-};
-
-SyncData CreateSyncDataForValue(
- const std::string& mu_id,
- const std::string& key,
- const Value& dict_value) {
- const DictionaryValue* dict = NULL;
- if (!dict_value.GetAsDictionary(&dict))
- return SyncData();
-
- const Value* value = NULL;
- if (!dict->Get(kValue, &value))
- return SyncData();
-
- bool acknowledged = false;
- dict->GetBoolean(kAcknowledged, &acknowledged);
-
- return ManagedUserSharedSettingsService::CreateSyncDataForSetting(
- mu_id, key, *value, acknowledged);
-}
-
-} // namespace
-
-
-ManagedUserSharedSettingsService::ManagedUserSharedSettingsService(
- PrefService* prefs)
- : prefs_(prefs) {}
-
-ManagedUserSharedSettingsService::~ManagedUserSharedSettingsService() {}
-
-void ManagedUserSharedSettingsService::SetValueInternal(
- const std::string& mu_id,
- const std::string& key,
- const Value& value,
- bool acknowledged) {
- ScopedManagedUserSharedSettingsUpdate update(prefs_, mu_id);
- DictionaryValue* update_dict = update.Get();
-
- DictionaryValue* dict = NULL;
- bool has_key = update_dict->GetDictionaryWithoutPathExpansion(key, &dict);
- if (!has_key) {
- dict = new DictionaryValue;
- update_dict->SetWithoutPathExpansion(key, dict);
- }
- dict->SetWithoutPathExpansion(kValue, value.DeepCopy());
- dict->SetBooleanWithoutPathExpansion(kAcknowledged, acknowledged);
-
- if (!sync_processor_)
- return;
-
- SyncData data = CreateSyncDataForSetting(mu_id, key, value, acknowledged);
- SyncChange::SyncChangeType change_type =
- has_key ? SyncChange::ACTION_UPDATE : SyncChange::ACTION_ADD;
- SyncChangeList changes;
- changes.push_back(SyncChange(FROM_HERE, change_type, data));
- SyncError error = sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
- DCHECK(!error.IsSet()) << error.ToString();
-}
-
-const Value* ManagedUserSharedSettingsService::GetValue(
- const std::string& mu_id,
- const std::string& key) {
- const DictionaryValue* data =
- prefs_->GetDictionary(prefs::kSupervisedUserSharedSettings);
- const DictionaryValue* dict = NULL;
- if (!data->GetDictionaryWithoutPathExpansion(mu_id, &dict))
- return NULL;
-
- const DictionaryValue* settings = NULL;
- if (!dict->GetDictionaryWithoutPathExpansion(key, &settings))
- return NULL;
-
- const Value* value = NULL;
- if (!settings->GetWithoutPathExpansion(kValue, &value))
- return NULL;
-
- return value;
-}
-
-void ManagedUserSharedSettingsService::SetValue(
- const std::string& mu_id,
- const std::string& key,
- const Value& value) {
- SetValueInternal(mu_id, key, value, true);
-}
-
-scoped_ptr<ManagedUserSharedSettingsService::ChangeCallbackList::Subscription>
-ManagedUserSharedSettingsService::Subscribe(
- const ManagedUserSharedSettingsService::ChangeCallback& cb) {
- return callbacks_.Add(cb);
-}
-
-// static
-void ManagedUserSharedSettingsService::RegisterProfilePrefs(
- user_prefs::PrefRegistrySyncable* registry) {
- registry->RegisterDictionaryPref(
- prefs::kSupervisedUserSharedSettings,
- user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
-}
-
-// static
-SyncData ManagedUserSharedSettingsService::CreateSyncDataForSetting(
- const std::string& mu_id,
- const std::string& key,
- const Value& value,
- bool acknowledged) {
- std::string json_value;
- base::JSONWriter::Write(&value, &json_value);
- ::sync_pb::EntitySpecifics specifics;
- specifics.mutable_managed_user_shared_setting()->set_mu_id(mu_id);
- specifics.mutable_managed_user_shared_setting()->set_key(key);
- specifics.mutable_managed_user_shared_setting()->set_value(json_value);
- specifics.mutable_managed_user_shared_setting()->set_acknowledged(
- acknowledged);
- std::string title = mu_id + ":" + key;
- return SyncData::CreateLocalData(title, title, specifics);
-}
-
-void ManagedUserSharedSettingsService::Shutdown() {}
-
-syncer::SyncMergeResult
-ManagedUserSharedSettingsService::MergeDataAndStartSyncing(
- syncer::ModelType type,
- const syncer::SyncDataList& initial_sync_data,
- scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
- scoped_ptr<syncer::SyncErrorFactory> error_handler) {
- DCHECK_EQ(SUPERVISED_USER_SHARED_SETTINGS, type);
- sync_processor_ = sync_processor.Pass();
- error_handler_ = error_handler.Pass();
-
- // We keep a map from MU ID to the set of keys that we have seen in the
- // initial sync data.
- std::map<std::string, std::set<std::string> > seen_keys;
-
- // Iterate over all initial sync data, and update it locally. This means that
- // the value from the server always wins over a local value.
- for (SyncDataList::const_iterator it = initial_sync_data.begin();
- it != initial_sync_data.end();
- ++it) {
- DCHECK_EQ(SUPERVISED_USER_SHARED_SETTINGS, it->GetDataType());
- const ::sync_pb::ManagedUserSharedSettingSpecifics&
- managed_user_shared_setting =
- it->GetSpecifics().managed_user_shared_setting();
- scoped_ptr<Value> value(
- base::JSONReader::Read(managed_user_shared_setting.value()));
- const std::string& mu_id = managed_user_shared_setting.mu_id();
- ScopedManagedUserSharedSettingsUpdate update(prefs_, mu_id);
- const std::string& key = managed_user_shared_setting.key();
- DictionaryValue* dict = FindOrCreateDictionary(update.Get(), key);
- dict->SetWithoutPathExpansion(kValue, value.release());
-
- // Every setting we get from the server should have the acknowledged flag
- // set.
- DCHECK(managed_user_shared_setting.acknowledged());
- dict->SetBooleanWithoutPathExpansion(
- kAcknowledged, managed_user_shared_setting.acknowledged());
- callbacks_.Notify(mu_id, key);
-
- seen_keys[mu_id].insert(key);
- }
-
- // Iterate over all settings that we have locally, which includes settings
- // that were just synced down. We filter those out using |seen_keys|.
- SyncChangeList change_list;
- const DictionaryValue* all_settings =
- prefs_->GetDictionary(prefs::kSupervisedUserSharedSettings);
- for (DictionaryValue::Iterator it(*all_settings); !it.IsAtEnd();
- it.Advance()) {
- const DictionaryValue* dict = NULL;
- bool success = it.value().GetAsDictionary(&dict);
- DCHECK(success);
-
- const std::set<std::string>& seen = seen_keys[it.key()];
- for (DictionaryValue::Iterator jt(*dict); !jt.IsAtEnd(); jt.Advance()) {
- // We only need to upload settings that we haven't seen in the initial
- // sync data (which means they were added locally).
- if (seen.count(jt.key()) > 0)
- continue;
-
- SyncData data = CreateSyncDataForValue(it.key(), jt.key(), jt.value());
- DCHECK(data.IsValid());
- change_list.push_back(
- SyncChange(FROM_HERE, SyncChange::ACTION_ADD, data));
- }
- }
-
- SyncMergeResult result(SUPERVISED_USER_SHARED_SETTINGS);
- // Process all the accumulated changes.
- if (change_list.size() > 0) {
- result.set_error(
- sync_processor_->ProcessSyncChanges(FROM_HERE, change_list));
- }
-
- // TODO(bauerb): Statistics?
- return result;
-}
-
-void ManagedUserSharedSettingsService::StopSyncing(syncer::ModelType type) {
- DCHECK_EQ(SUPERVISED_USER_SHARED_SETTINGS, type);
- sync_processor_.reset();
- error_handler_.reset();
-}
-
-syncer::SyncDataList ManagedUserSharedSettingsService::GetAllSyncData(
- syncer::ModelType type) const {
- DCHECK_EQ(SUPERVISED_USER_SHARED_SETTINGS, type);
- SyncDataList data;
- const DictionaryValue* all_settings =
- prefs_->GetDictionary(prefs::kSupervisedUserSharedSettings);
- for (DictionaryValue::Iterator it(*all_settings); !it.IsAtEnd();
- it.Advance()) {
- const DictionaryValue* dict = NULL;
- bool success = it.value().GetAsDictionary(&dict);
- DCHECK(success);
- for (DictionaryValue::Iterator jt(*dict); !jt.IsAtEnd(); jt.Advance()) {
- data.push_back(CreateSyncDataForValue(it.key(), jt.key(), jt.value()));
- }
- }
- return data;
-}
-
-syncer::SyncError ManagedUserSharedSettingsService::ProcessSyncChanges(
- const tracked_objects::Location& from_here,
- const syncer::SyncChangeList& change_list) {
- for (SyncChangeList::const_iterator it = change_list.begin();
- it != change_list.end();
- ++it) {
- SyncData data = it->sync_data();
- DCHECK_EQ(SUPERVISED_USER_SHARED_SETTINGS, data.GetDataType());
- const ::sync_pb::ManagedUserSharedSettingSpecifics&
- managed_user_shared_setting =
- data.GetSpecifics().managed_user_shared_setting();
- const std::string& key = managed_user_shared_setting.key();
- const std::string& mu_id = managed_user_shared_setting.mu_id();
- ScopedManagedUserSharedSettingsUpdate update(prefs_, mu_id);
- DictionaryValue* update_dict = update.Get();
- DictionaryValue* dict = NULL;
- bool has_key = update_dict->GetDictionaryWithoutPathExpansion(key, &dict);
- switch (it->change_type()) {
- case SyncChange::ACTION_ADD:
- case SyncChange::ACTION_UPDATE: {
- // Every setting we get from the server should have the acknowledged
- // flag set.
- DCHECK(managed_user_shared_setting.acknowledged());
-
- if (has_key) {
- // If the managed user already exists, it should be an update action.
- DCHECK_EQ(SyncChange::ACTION_UPDATE, it->change_type());
- } else {
- // Otherwise, it should be an add action.
- DCHECK_EQ(SyncChange::ACTION_ADD, it->change_type());
- dict = new DictionaryValue;
- update_dict->SetWithoutPathExpansion(key, dict);
- }
- scoped_ptr<Value> value(
- base::JSONReader::Read(managed_user_shared_setting.value()));
- dict->SetWithoutPathExpansion(kValue, value.release());
- dict->SetBooleanWithoutPathExpansion(
- kAcknowledged, managed_user_shared_setting.acknowledged());
- break;
- }
- case SyncChange::ACTION_DELETE: {
- if (has_key)
- update_dict->RemoveWithoutPathExpansion(key, NULL);
- else
- NOTREACHED() << "Trying to delete nonexistent key " << key;
- break;
- }
- case SyncChange::ACTION_INVALID: {
- NOTREACHED();
- break;
- }
- }
- callbacks_.Notify(mu_id, key);
- }
-
- SyncError error;
- return error;
-}

Powered by Google App Engine
This is Rietveld 408576698