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

Unified Diff: chrome/browser/chromeos/network_settings/onc_merger.cc

Issue 11299236: This moves the ONC parsing code into chromeos/network/onc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix unit tests Created 8 years 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/chromeos/network_settings/onc_merger.cc
diff --git a/chrome/browser/chromeos/network_settings/onc_merger.cc b/chrome/browser/chromeos/network_settings/onc_merger.cc
deleted file mode 100644
index 7e706fb419342ee7460f1bd8965983b71c7b14f6..0000000000000000000000000000000000000000
--- a/chrome/browser/chromeos/network_settings/onc_merger.cc
+++ /dev/null
@@ -1,174 +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/chromeos/network_settings/onc_merger.h"
-
-#include <set>
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/logging.h"
-#include "base/values.h"
-#include "chrome/browser/chromeos/cros/onc_constants.h"
-
-namespace chromeos {
-namespace onc {
-namespace {
-
-typedef scoped_ptr<base::DictionaryValue> DictionaryPtr;
-
-// Inserts |true| at every field name in |result| that is recommended in policy.
-void MarkRecommendedFieldnames(const base::DictionaryValue& policy,
- base::DictionaryValue* result) {
- const ListValue* recommended_value = NULL;
- if (!policy.GetListWithoutPathExpansion(kRecommended, &recommended_value))
- return;
- for (ListValue::const_iterator it = recommended_value->begin();
- it != recommended_value->end(); ++it) {
- std::string entry;
- if ((*it)->GetAsString(&entry))
- result->SetBooleanWithoutPathExpansion(entry, true);
- }
-}
-
-// Split the given |policy| into its recommended and mandatory settings. The
-// dictionary |result_editable| contains a |true| value at each path that is
-// editable by the user.
-void SplitPolicy(const base::DictionaryValue& policy,
- DictionaryPtr* result_recommended,
- DictionaryPtr* result_editable,
- DictionaryPtr* result_mandatory) {
- result_recommended->reset(new base::DictionaryValue);
- result_editable->reset(new base::DictionaryValue);
- result_mandatory->reset(new base::DictionaryValue);
-
- MarkRecommendedFieldnames(policy, result_editable->get());
-
- // Distribute policy's entries into |result_recommended| and |result_editable|
- // according to |result_editable| and recurse into nested dictionaries.
- for (base::DictionaryValue::Iterator it(policy); it.HasNext(); it.Advance()) {
- if (it.key() == kRecommended)
- continue;
-
- const base::DictionaryValue* child_policy = NULL;
- if (it.value().GetAsDictionary(&child_policy)) {
- DictionaryPtr child_recommended, child_editable, child_mandatory;
- SplitPolicy(*child_policy, &child_recommended, &child_editable,
- &child_mandatory);
-
- (*result_recommended)->SetWithoutPathExpansion(
- it.key(), child_recommended.release());
- (*result_editable)->SetWithoutPathExpansion(
- it.key(), child_editable.release());
- (*result_mandatory)->SetWithoutPathExpansion(
- it.key(), child_mandatory.release());
- } else {
- bool is_recommended = false;
- (*result_editable)->GetBooleanWithoutPathExpansion(it.key(),
- &is_recommended);
- if (is_recommended) {
- (*result_recommended)->SetWithoutPathExpansion(
- it.key(), it.value().DeepCopy());
- } else {
- (*result_mandatory)->SetWithoutPathExpansion(
- it.key(), it.value().DeepCopy());
- }
- }
- }
-}
-
-// Copy values from |user| at paths that are assigned true in |editable|. The
-// values are copied to a new dictionary which is returned.
-DictionaryPtr DeepCopyIf(
- const base::DictionaryValue& user,
- const base::DictionaryValue& editable) {
- DictionaryPtr result(new base::DictionaryValue);
-
- for (base::DictionaryValue::Iterator it(user); it.HasNext(); it.Advance()) {
- const base::DictionaryValue* user_child = NULL;
- if (it.value().GetAsDictionary(&user_child)) {
- const base::DictionaryValue* editable_child = NULL;
- if (editable.GetDictionaryWithoutPathExpansion(it.key(),
- &editable_child)) {
- result->SetWithoutPathExpansion(
- it.key(), DeepCopyIf(*user_child, *editable_child).release());
- }
- } else {
- bool editable_flag;
- if (editable.GetBooleanWithoutPathExpansion(it.key(), &editable_flag) &&
- editable_flag) {
- result->SetWithoutPathExpansion(it.key(), it.value().DeepCopy());
- }
- }
- }
-
- return result.Pass();
-}
-
-void MergeDictionaryIfNotNULL(const base::DictionaryValue* update,
- base::DictionaryValue* result) {
- if (update != NULL)
- result->MergeDictionary(update);
-}
-
-} // namespace
-
-DictionaryPtr MergeSettingsWithPolicies(
- const base::DictionaryValue* user_policy,
- const base::DictionaryValue* device_policy,
- const base::DictionaryValue* user_onc,
- const base::DictionaryValue* shared_onc) {
- DictionaryPtr user_mandatory;
- DictionaryPtr user_editable;
- DictionaryPtr user_recommended;
- if (user_policy != NULL) {
- SplitPolicy(*user_policy, &user_recommended, &user_editable,
- &user_mandatory);
- } else {
- user_mandatory.reset(new base::DictionaryValue);
- user_recommended.reset(new base::DictionaryValue);
- // 'user_editable == NULL' means everything is editable
- }
-
- DictionaryPtr device_mandatory;
- DictionaryPtr device_editable;
- DictionaryPtr device_recommended;
- if (device_policy != NULL) {
- SplitPolicy(*device_policy, &device_recommended, &device_editable,
- &device_mandatory);
- } else {
- device_mandatory.reset(new base::DictionaryValue);
- device_recommended.reset(new base::DictionaryValue);
- // 'device_editable == NULL' means everything is editable
- }
-
- DictionaryPtr reduced_user_onc(
- user_onc != NULL ? user_onc->DeepCopy() : new base::DictionaryValue);
- if (user_editable.get() != NULL)
- reduced_user_onc = DeepCopyIf(*reduced_user_onc, *user_editable);
- if (device_editable.get() != NULL)
- reduced_user_onc = DeepCopyIf(*reduced_user_onc, *device_editable);
-
- DictionaryPtr reduced_shared_onc(
- shared_onc != NULL ? shared_onc->DeepCopy() : new base::DictionaryValue);
- if (user_editable.get() != NULL)
- reduced_shared_onc = DeepCopyIf(*reduced_shared_onc, *user_editable);
- if (device_editable.get() != NULL)
- reduced_shared_onc = DeepCopyIf(*reduced_shared_onc, *device_editable);
-
- // Merge the settings layers according to their priority: From lowest to
- // highest priority.
- DictionaryPtr result(new base::DictionaryValue);
- MergeDictionaryIfNotNULL(device_recommended.get(), result.get());
- MergeDictionaryIfNotNULL(user_recommended.get(), result.get());
- MergeDictionaryIfNotNULL(reduced_shared_onc.get(), result.get());
- MergeDictionaryIfNotNULL(reduced_user_onc.get(), result.get());
- MergeDictionaryIfNotNULL(device_mandatory.get(), result.get());
- MergeDictionaryIfNotNULL(user_mandatory.get(), result.get());
-
- return result.Pass();
-}
-
-} // namespace onc
-} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/network_settings/onc_merger.h ('k') | chrome/browser/chromeos/network_settings/onc_merger_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698