| Index: chrome/browser/chromeos/network_settings/onc_translator_onc_to_shill.cc
|
| diff --git a/chrome/browser/chromeos/network_settings/onc_translator_onc_to_shill.cc b/chrome/browser/chromeos/network_settings/onc_translator_onc_to_shill.cc
|
| deleted file mode 100644
|
| index 2182dd506b0c2993c17384b2cb2e810d6842b12e..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/network_settings/onc_translator_onc_to_shill.cc
|
| +++ /dev/null
|
| @@ -1,210 +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.
|
| -
|
| -// The implementation of TranslateONCObjectToShill is structured in two parts:
|
| -// - The recursion through the existing ONC hierarchy
|
| -// see TranslateONCHierarchy
|
| -// - The local translation of an object depending on the associated signature
|
| -// see LocalTranslator::TranslateFields
|
| -
|
| -#include "chrome/browser/chromeos/network_settings/onc_translator.h"
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/json/json_reader.h"
|
| -#include "base/json/json_writer.h"
|
| -#include "base/logging.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/chromeos/cros/onc_constants.h"
|
| -#include "chrome/browser/chromeos/network_settings/onc_signature.h"
|
| -#include "chrome/browser/chromeos/network_settings/onc_translation_tables.h"
|
| -#include "third_party/cros_system_api/dbus/service_constants.h"
|
| -
|
| -namespace chromeos {
|
| -namespace onc {
|
| -
|
| -namespace {
|
| -
|
| -scoped_ptr<base::StringValue> ConvertValueToString(const base::Value& value) {
|
| - std::string str;
|
| - if (!value.GetAsString(&str))
|
| - base::JSONWriter::Write(&value, &str);
|
| - return make_scoped_ptr(base::Value::CreateStringValue(str));
|
| -}
|
| -
|
| -// This class is responsible to translate the local fields of the given
|
| -// |onc_object| according to |onc_signature| into |shill_dictionary|. This
|
| -// translation should consider (if possible) only fields of this ONC object and
|
| -// not nested objects because recursion is handled by the calling function
|
| -// TranslateONCHierarchy.
|
| -class LocalTranslator {
|
| - public:
|
| - LocalTranslator(const OncValueSignature& onc_signature,
|
| - const base::DictionaryValue& onc_object,
|
| - base::DictionaryValue* shill_dictionary)
|
| - : onc_signature_(&onc_signature),
|
| - onc_object_(&onc_object),
|
| - shill_dictionary_(shill_dictionary) {
|
| - }
|
| -
|
| - void TranslateFields();
|
| -
|
| - private:
|
| - void TranslateOpenVPN();
|
| - void TranslateVPN();
|
| - void TranslateNetworkConfiguration();
|
| -
|
| - // Copies all entries from |onc_object_| to |shill_dictionary_| for which a
|
| - // translation (shill_property_name) is defined by |onc_signature_|.
|
| - void CopyFieldsAccordingToSignature();
|
| -
|
| - // Adds |value| to |shill_dictionary| at the field shill_property_name given
|
| - // by the associated signature. Takes ownership of |value|. Does nothing if
|
| - // |value| is NULL or the property name cannot be read from the signature.
|
| - void AddValueAccordingToSignature(const std::string& onc_field_name,
|
| - scoped_ptr<base::Value> value);
|
| -
|
| - // If existent, translates the entry at |onc_field_name| in |onc_object_|
|
| - // using |table|. It is an error if no matching table entry is found. Writes
|
| - // the result as entry at |shill_property_name| in |shill_dictionary_|.
|
| - void TranslateWithTableAndSet(const std::string& onc_field_name,
|
| - const StringTranslationEntry table[],
|
| - const std::string& shill_property_name);
|
| -
|
| - const OncValueSignature* onc_signature_;
|
| - const base::DictionaryValue* onc_object_;
|
| - base::DictionaryValue* shill_dictionary_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(LocalTranslator);
|
| -};
|
| -
|
| -void LocalTranslator::TranslateFields() {
|
| - if (onc_signature_ == &kNetworkConfigurationSignature)
|
| - TranslateNetworkConfiguration();
|
| - else if (onc_signature_ == &kVPNSignature)
|
| - TranslateVPN();
|
| - else if (onc_signature_ == &kOpenVPNSignature)
|
| - TranslateOpenVPN();
|
| - else
|
| - CopyFieldsAccordingToSignature();
|
| -}
|
| -
|
| -void LocalTranslator::TranslateOpenVPN() {
|
| - // Shill supports only one RemoteCertKU but ONC a list.
|
| - // Copy only the first entry if existing.
|
| - const base::ListValue* certKUs;
|
| - std::string certKU;
|
| - if (onc_object_->GetListWithoutPathExpansion(vpn::kRemoteCertKU, &certKUs) &&
|
| - certKUs->GetString(0, &certKU)) {
|
| - shill_dictionary_->SetStringWithoutPathExpansion(
|
| - flimflam::kOpenVPNRemoteCertKUProperty, certKU);
|
| - }
|
| -
|
| - for (base::DictionaryValue::Iterator it(*onc_object_); it.HasNext();
|
| - it.Advance()) {
|
| - scoped_ptr<base::Value> translated;
|
| - if (it.key() == vpn::kSaveCredentials || it.key() == vpn::kRemoteCertKU) {
|
| - translated.reset(it.value().DeepCopy());
|
| - } else {
|
| - // Shill wants all Provider/VPN fields to be strings.
|
| - translated = ConvertValueToString(it.value());
|
| - }
|
| - AddValueAccordingToSignature(it.key(), translated.Pass());
|
| - }
|
| -}
|
| -
|
| -void LocalTranslator::TranslateVPN() {
|
| - TranslateWithTableAndSet(kType, kVPNTypeTable,
|
| - flimflam::kProviderTypeProperty);
|
| - CopyFieldsAccordingToSignature();
|
| -}
|
| -
|
| -void LocalTranslator::TranslateNetworkConfiguration() {
|
| - TranslateWithTableAndSet(kType, kNetworkTypeTable, flimflam::kTypeProperty);
|
| - CopyFieldsAccordingToSignature();
|
| -}
|
| -
|
| -void LocalTranslator::CopyFieldsAccordingToSignature() {
|
| - for (base::DictionaryValue::Iterator it(*onc_object_); it.HasNext();
|
| - it.Advance()) {
|
| - AddValueAccordingToSignature(it.key(),
|
| - make_scoped_ptr(it.value().DeepCopy()));
|
| - }
|
| -}
|
| -
|
| -void LocalTranslator::AddValueAccordingToSignature(
|
| - const std::string& onc_name,
|
| - scoped_ptr<base::Value> value) {
|
| - if (value.get() == NULL)
|
| - return;
|
| - const OncFieldSignature* field_signature =
|
| - GetFieldSignature(*onc_signature_, onc_name);
|
| - DCHECK(field_signature != NULL);
|
| - if (field_signature == NULL || field_signature->shill_property_name == NULL)
|
| - return;
|
| -
|
| - shill_dictionary_->SetWithoutPathExpansion(
|
| - field_signature->shill_property_name, value.release());
|
| -}
|
| -
|
| -void LocalTranslator::TranslateWithTableAndSet(
|
| - const std::string& onc_field_name,
|
| - const StringTranslationEntry table[],
|
| - const std::string& shill_property_name) {
|
| - std::string onc_value;
|
| - if (!onc_object_->GetStringWithoutPathExpansion(onc_field_name, &onc_value))
|
| - return;
|
| -
|
| - for (int i = 0; table[i].onc_value != NULL; ++i) {
|
| - if (onc_value != table[i].onc_value)
|
| - continue;
|
| - shill_dictionary_->SetStringWithoutPathExpansion(shill_property_name,
|
| - table[i].shill_value);
|
| - return;
|
| - }
|
| - // As we previously validate ONC, this case should never occur. If it still
|
| - // occurs, we should check here. Otherwise the failure will only show up much
|
| - // later in Shill.
|
| - LOG(ERROR) << "Value '" << onc_value << "' for field '"
|
| - << onc_field_name << "' cannot be translated to Shill";
|
| -}
|
| -
|
| -// Iterates recursively over |onc_object| and its |signature|. At each object
|
| -// applies the local translation using LocalTranslator::TranslateFields. The
|
| -// results are written to |shill_dictionary|.
|
| -void TranslateONCHierarchy(const OncValueSignature& signature,
|
| - const base::DictionaryValue& onc_object,
|
| - base::DictionaryValue* shill_dictionary) {
|
| - // Translates fields of |onc_object| and writes them to |shill_dictionary_|.
|
| - LocalTranslator translator(signature, onc_object, shill_dictionary);
|
| - translator.TranslateFields();
|
| -
|
| - // Recurse into nested objects.
|
| - for (base::DictionaryValue::Iterator it(onc_object); it.HasNext();
|
| - it.Advance()) {
|
| - const base::DictionaryValue* inner_object;
|
| - if (!it.value().GetAsDictionary(&inner_object))
|
| - continue;
|
| -
|
| - const OncFieldSignature* field_signature =
|
| - GetFieldSignature(signature, it.key());
|
| -
|
| - TranslateONCHierarchy(*field_signature->value_signature, *inner_object,
|
| - shill_dictionary);
|
| - }
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -scoped_ptr<base::DictionaryValue> TranslateONCObjectToShill(
|
| - const OncValueSignature* onc_signature,
|
| - const base::DictionaryValue& onc_object) {
|
| - CHECK(onc_signature != NULL);
|
| - scoped_ptr<base::DictionaryValue> shill_dictionary(new base::DictionaryValue);
|
| - TranslateONCHierarchy(*onc_signature, onc_object, shill_dictionary.get());
|
| - return shill_dictionary.Pass();
|
| -}
|
| -
|
| -} // namespace onc
|
| -} // namespace chromeos
|
|
|