// 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. #ifndef CHROMEOS_NETWORK_ONC_ONC_MERGER_H_ #define CHROMEOS_NETWORK_ONC_ONC_MERGER_H_ #include "base/memory/scoped_ptr.h" #include "chromeos/chromeos_export.h" namespace base { class DictionaryValue; } namespace chromeos { namespace onc { struct OncValueSignature; // Merges the given |user_settings| and |shared_settings| settings with the // given |user_policy| and |device_policy| settings. Each can be omitted by // providing a NULL pointer. Each dictionary has to be part of a valid ONC // dictionary. They don't have to describe top-level ONC but should refer to the // same section in ONC. |user_settings| and |shared_settings| should not contain // kRecommended fields. The resulting dictionary is valid ONC but may contain // dispensable fields (e.g. in a network with type: "WiFi", the field "VPN" is // dispensable) that can be removed by the caller using the ONC normalizer. ONC // conformance of the arguments is not checked. Use ONC validator for that. CHROMEOS_EXPORT scoped_ptr<base::DictionaryValue> MergeSettingsAndPoliciesToEffective( const base::DictionaryValue* user_policy, const base::DictionaryValue* device_policy, const base::DictionaryValue* user_settings, const base::DictionaryValue* shared_settings); // Like MergeSettingsWithPoliciesToEffective but creates one dictionary in place // of each field that exists in any of the argument dictionaries. Each of these // dictionaries contains the onc::kAugmentations* fields (see onc_constants.h) // for which a value is available. The onc::kAugmentationEffectiveSetting field // contains the field name of the field containing the effective field that // overrides all other values. Credentials from policies are not written to the // result. CHROMEOS_EXPORT scoped_ptr<base::DictionaryValue> MergeSettingsAndPoliciesToAugmented( const OncValueSignature& signature, const base::DictionaryValue* user_policy, const base::DictionaryValue* device_policy, const base::DictionaryValue* user_settings, const base::DictionaryValue* shared_settings, const base::DictionaryValue* active_settings); } // namespace onc } // namespace chromeos #endif // CHROMEOS_NETWORK_ONC_ONC_MERGER_H_