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

Unified Diff: chrome/browser/policy/managed_mode_policy_provider.cc

Issue 23376002: Move ManagedModePolicyProvider functionality to ManagedUserSettingsService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 7 years, 3 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/policy/managed_mode_policy_provider.cc
diff --git a/chrome/browser/policy/managed_mode_policy_provider.cc b/chrome/browser/policy/managed_mode_policy_provider.cc
deleted file mode 100644
index cff89714b2ea21a8ceed368c2f0540caf598ad0f..0000000000000000000000000000000000000000
--- a/chrome/browser/policy/managed_mode_policy_provider.cc
+++ /dev/null
@@ -1,384 +0,0 @@
-// Copyright (c) 2012 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/policy/managed_mode_policy_provider.h"
-
-#include "base/callback.h"
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
-#include "base/prefs/json_pref_store.h"
-#include "base/strings/string_util.h"
-#include "base/threading/sequenced_worker_pool.h"
-#include "chrome/browser/managed_mode/managed_mode_url_filter.h"
-#include "chrome/browser/policy/external_data_fetcher.h"
-#include "chrome/browser/policy/policy_bundle.h"
-#include "chrome/browser/prefs/incognito_mode_prefs.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/chrome_constants.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/user_metrics.h"
-#include "policy/policy_constants.h"
-#include "sync/api/sync_change.h"
-#include "sync/protocol/sync.pb.h"
-
-using base::DictionaryValue;
-using base::JSONReader;
-using base::Value;
-using content::BrowserThread;
-using content::UserMetricsAction;
-using syncer::MANAGED_USER_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 kAtomicSettings[] = "atomic_settings";
-const char kManagedUserInternalPolicyPrefix[] = "X-";
-const char kQueuedItems[] = "queued_items";
-const char kSplitSettingKeySeparator = ':';
-const char kSplitSettings[] = "split_settings";
-
-bool SettingShouldApplyToPolicy(const std::string& key) {
- return !StartsWithASCII(key, kManagedUserInternalPolicyPrefix, false);
-}
-
-} // namespace
-
-namespace policy {
-
-
-// static
-scoped_ptr<ManagedModePolicyProvider> ManagedModePolicyProvider::Create(
- Profile* profile,
- base::SequencedTaskRunner* sequenced_task_runner,
- bool force_load) {
- base::FilePath path =
- profile->GetPath().Append(chrome::kManagedModePolicyFilename);
- JsonPrefStore* pref_store = new JsonPrefStore(path, sequenced_task_runner);
- // Load the data synchronously if needed (when creating profiles on startup).
- if (force_load)
- pref_store->ReadPrefs();
- else
- pref_store->ReadPrefsAsync(NULL);
-
- return make_scoped_ptr(new ManagedModePolicyProvider(pref_store));
-}
-
-ManagedModePolicyProvider::ManagedModePolicyProvider(
- PersistentPrefStore* pref_store)
- : store_(pref_store),
- local_policies_(new DictionaryValue) {
- store_->AddObserver(this);
- if (store_->IsInitializationComplete())
- UpdatePolicyFromCache();
-}
-
-ManagedModePolicyProvider::~ManagedModePolicyProvider() {}
-
-void ManagedModePolicyProvider::Clear() {
- store_->RemoveValue(kAtomicSettings);
- store_->RemoveValue(kSplitSettings);
-}
-
-// static
-std::string ManagedModePolicyProvider::MakeSplitSettingKey(
- const std::string& prefix,
- const std::string& key) {
- return prefix + kSplitSettingKeySeparator + key;
-}
-
-void ManagedModePolicyProvider::UploadItem(const std::string& key,
- scoped_ptr<Value> value) {
- DCHECK(!SettingShouldApplyToPolicy(key));
-
- std::string key_suffix = key;
- DictionaryValue* dict = NULL;
- if (sync_processor_) {
- content::RecordAction(
- UserMetricsAction("ManagedUsers_UploadItem_Syncing"));
- dict = GetDictionaryAndSplitKey(&key_suffix);
- DCHECK(GetQueuedItems()->empty());
- SyncChangeList change_list;
- SyncData data = CreateSyncDataForPolicy(key, value.get());
- SyncChange::SyncChangeType change_type =
- dict->HasKey(key_suffix) ? SyncChange::ACTION_UPDATE
- : SyncChange::ACTION_ADD;
- change_list.push_back(SyncChange(FROM_HERE, change_type, data));
- SyncError error =
- sync_processor_->ProcessSyncChanges(FROM_HERE, change_list);
- DCHECK(!error.IsSet()) << error.ToString();
- } else {
- content::RecordAction(
- UserMetricsAction("ManagedUsers_UploadItem_Queued"));
- dict = GetQueuedItems();
- }
- dict->SetWithoutPathExpansion(key_suffix, value.release());
-}
-
-void ManagedModePolicyProvider::SetLocalPolicyForTesting(
- const std::string& key,
- scoped_ptr<Value> value) {
- if (value)
- local_policies_->SetWithoutPathExpansion(key, value.release());
- else
- local_policies_->RemoveWithoutPathExpansion(key, NULL);
-
- UpdatePolicyFromCache();
-}
-
-// static
-SyncData ManagedModePolicyProvider::CreateSyncDataForPolicy(
- const std::string& name,
- const Value* value) {
- std::string json_value;
- base::JSONWriter::Write(value, &json_value);
- ::sync_pb::EntitySpecifics specifics;
- specifics.mutable_managed_user_setting()->set_name(name);
- specifics.mutable_managed_user_setting()->set_value(json_value);
- return SyncData::CreateLocalData(name, name, specifics);
-}
-
-void ManagedModePolicyProvider::Shutdown() {
- store_->RemoveObserver(this);
- ConfigurationPolicyProvider::Shutdown();
-}
-
-void ManagedModePolicyProvider::RefreshPolicies() {
- UpdatePolicyFromCache();
-}
-
-bool ManagedModePolicyProvider::IsInitializationComplete(
- PolicyDomain domain) const {
- if (domain == POLICY_DOMAIN_CHROME)
- return store_->IsInitializationComplete();
- return true;
-}
-
-void ManagedModePolicyProvider::OnPrefValueChanged(const std::string& key) {}
-
-void ManagedModePolicyProvider::OnInitializationCompleted(bool success) {
- DCHECK(success);
- UpdatePolicyFromCache();
-}
-
-SyncMergeResult ManagedModePolicyProvider::MergeDataAndStartSyncing(
- ModelType type,
- const SyncDataList& initial_sync_data,
- scoped_ptr<SyncChangeProcessor> sync_processor,
- scoped_ptr<SyncErrorFactory> error_handler) {
- DCHECK_EQ(MANAGED_USER_SETTINGS, type);
- sync_processor_ = sync_processor.Pass();
- error_handler_ = error_handler.Pass();
-
- // Clear all atomic and split settings, then recreate them from Sync data.
- Clear();
- for (SyncDataList::const_iterator it = initial_sync_data.begin();
- it != initial_sync_data.end(); ++it) {
- DCHECK_EQ(MANAGED_USER_SETTINGS, it->GetDataType());
- const ::sync_pb::ManagedUserSettingSpecifics& managed_user_setting =
- it->GetSpecifics().managed_user_setting();
- scoped_ptr<Value> value(JSONReader::Read(managed_user_setting.value()));
- std::string name_suffix = managed_user_setting.name();
- DictionaryValue* dict = GetDictionaryAndSplitKey(&name_suffix);
- dict->SetWithoutPathExpansion(name_suffix, value.release());
- }
- store_->ReportValueChanged(kAtomicSettings);
- store_->ReportValueChanged(kSplitSettings);
- UpdatePolicyFromCache();
-
- // Upload all the queued up items (either with an ADD or an UPDATE action,
- // depending on whether they already exist) and move them to split settings.
- SyncChangeList change_list;
- DictionaryValue* queued_items = GetQueuedItems();
- for (DictionaryValue::Iterator it(*queued_items); !it.IsAtEnd();
- it.Advance()) {
- std::string key_suffix = it.key();
- DictionaryValue* dict = GetDictionaryAndSplitKey(&key_suffix);
- SyncData data = CreateSyncDataForPolicy(it.key(), &it.value());
- SyncChange::SyncChangeType change_type =
- dict->HasKey(key_suffix) ? SyncChange::ACTION_UPDATE
- : SyncChange::ACTION_ADD;
- change_list.push_back(SyncChange(FROM_HERE, change_type, data));
- dict->SetWithoutPathExpansion(key_suffix, it.value().DeepCopy());
- }
- queued_items->Clear();
-
- SyncMergeResult result(MANAGED_USER_SETTINGS);
- // Process all the accumulated changes from the queued items.
- if (change_list.size() > 0) {
- store_->ReportValueChanged(kQueuedItems);
- result.set_error(
- sync_processor_->ProcessSyncChanges(FROM_HERE, change_list));
- }
-
- // TODO(bauerb): Statistics?
- return result;
-}
-
-void ManagedModePolicyProvider::StopSyncing(ModelType type) {
- DCHECK_EQ(syncer::MANAGED_USER_SETTINGS, type);
- sync_processor_.reset();
- error_handler_.reset();
-}
-
-SyncDataList ManagedModePolicyProvider::GetAllSyncData(ModelType type) const {
- DCHECK_EQ(syncer::MANAGED_USER_SETTINGS, type);
- SyncDataList data;
- for (DictionaryValue::Iterator it(*GetAtomicSettings()); !it.IsAtEnd();
- it.Advance()) {
- data.push_back(CreateSyncDataForPolicy(it.key(), &it.value()));
- }
- for (DictionaryValue::Iterator it(*GetSplitSettings()); !it.IsAtEnd();
- it.Advance()) {
- const DictionaryValue* dict = NULL;
- it.value().GetAsDictionary(&dict);
- for (DictionaryValue::Iterator jt(*dict); !jt.IsAtEnd(); jt.Advance()) {
- data.push_back(CreateSyncDataForPolicy(
- MakeSplitSettingKey(it.key(), jt.key()), &jt.value()));
- }
- }
- DCHECK_EQ(0u, GetQueuedItems()->size());
- return data;
-}
-
-SyncError ManagedModePolicyProvider::ProcessSyncChanges(
- const tracked_objects::Location& from_here,
- const SyncChangeList& change_list) {
- for (SyncChangeList::const_iterator it = change_list.begin();
- it != change_list.end(); ++it) {
- SyncData data = it->sync_data();
- DCHECK_EQ(MANAGED_USER_SETTINGS, data.GetDataType());
- const ::sync_pb::ManagedUserSettingSpecifics& managed_user_setting =
- data.GetSpecifics().managed_user_setting();
- std::string key = managed_user_setting.name();
- DictionaryValue* dict = GetDictionaryAndSplitKey(&key);
- switch (it->change_type()) {
- case SyncChange::ACTION_ADD:
- case SyncChange::ACTION_UPDATE: {
- scoped_ptr<Value> value(JSONReader::Read(managed_user_setting.value()));
- if (dict->HasKey(key)) {
- DLOG_IF(WARNING, it->change_type() == SyncChange::ACTION_ADD)
- << "Value for key " << key << " already exists";
- } else {
- DLOG_IF(WARNING, it->change_type() == SyncChange::ACTION_UPDATE)
- << "Value for key " << key << " doesn't exist yet";
- }
- dict->SetWithoutPathExpansion(key, value.release());
- break;
- }
- case SyncChange::ACTION_DELETE: {
- DLOG_IF(WARNING, !dict->HasKey(key)) << "Trying to delete nonexistent "
- << "key " << key;
- dict->RemoveWithoutPathExpansion(key, NULL);
- break;
- }
- case SyncChange::ACTION_INVALID: {
- NOTREACHED();
- break;
- }
- }
- }
- store_->ReportValueChanged(kAtomicSettings);
- store_->ReportValueChanged(kSplitSettings);
- UpdatePolicyFromCache();
-
- SyncError error;
- return error;
-}
-
-void ManagedModePolicyProvider::InitLocalPolicies() {
- local_policies_->Clear();
- local_policies_->SetBoolean(policy::key::kAllowDeletingBrowserHistory, false);
- local_policies_->SetInteger(policy::key::kContentPackDefaultFilteringBehavior,
- ManagedModeURLFilter::ALLOW);
- local_policies_->SetBoolean(policy::key::kForceSafeSearch, true);
- local_policies_->SetBoolean(policy::key::kHideWebStoreIcon, true);
- local_policies_->SetInteger(policy::key::kIncognitoModeAvailability,
- IncognitoModePrefs::DISABLED);
- local_policies_->SetBoolean(policy::key::kSigninAllowed, false);
- UpdatePolicyFromCache();
-}
-
-DictionaryValue* ManagedModePolicyProvider::GetOrCreateDictionary(
- const std::string& key) const {
- Value* value = NULL;
- DictionaryValue* dict = NULL;
- if (store_->GetMutableValue(key, &value)) {
- bool success = value->GetAsDictionary(&dict);
- DCHECK(success);
- } else {
- dict = new base::DictionaryValue;
- store_->SetValue(key, dict);
- }
-
- return dict;
-}
-
-DictionaryValue* ManagedModePolicyProvider::GetAtomicSettings() const {
- return GetOrCreateDictionary(kAtomicSettings);
-}
-
-DictionaryValue* ManagedModePolicyProvider::GetSplitSettings() const {
- return GetOrCreateDictionary(kSplitSettings);
-}
-
-DictionaryValue* ManagedModePolicyProvider::GetQueuedItems() const {
- return GetOrCreateDictionary(kQueuedItems);
-}
-
-DictionaryValue* ManagedModePolicyProvider::GetDictionaryAndSplitKey(
- std::string* key) const {
- size_t pos = key->find_first_of(kSplitSettingKeySeparator);
- if (pos == std::string::npos)
- return GetAtomicSettings();
-
- DictionaryValue* split_settings = GetSplitSettings();
- std::string prefix = key->substr(0, pos);
- DictionaryValue* dict = NULL;
- if (!split_settings->GetDictionary(prefix, &dict)) {
- dict = new DictionaryValue;
- DCHECK(!split_settings->HasKey(prefix));
- split_settings->Set(prefix, dict);
- }
- key->erase(0, pos + 1);
- return dict;
-}
-
-void ManagedModePolicyProvider::UpdatePolicyFromCache() {
- scoped_ptr<PolicyBundle> policy_bundle(new PolicyBundle);
- PolicyMap* policy_map = &policy_bundle->Get(
- PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()));
- policy_map->LoadFrom(
- local_policies_.get(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER);
-
- DictionaryValue* atomic_settings = GetAtomicSettings();
- for (DictionaryValue::Iterator it(*atomic_settings); !it.IsAtEnd();
- it.Advance()) {
- if (!SettingShouldApplyToPolicy(it.key()))
- continue;
-
- policy_map->Set(it.key(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
- it.value().DeepCopy(), NULL);
- }
-
- DictionaryValue* split_settings = GetSplitSettings();
- for (DictionaryValue::Iterator it(*split_settings); !it.IsAtEnd();
- it.Advance()) {
- if (!SettingShouldApplyToPolicy(it.key()))
- continue;
-
- policy_map->Set(it.key(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
- it.value().DeepCopy(), NULL);
- }
- UpdatePolicy(policy_bundle.Pass());
-}
-
-} // namespace policy

Powered by Google App Engine
This is Rietveld 408576698