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

Unified Diff: chrome/browser/chromeos/network_settings/onc_translator_shill_to_onc.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_translator_shill_to_onc.cc
diff --git a/chrome/browser/chromeos/network_settings/onc_translator_shill_to_onc.cc b/chrome/browser/chromeos/network_settings/onc_translator_shill_to_onc.cc
deleted file mode 100644
index b3c40de3158e785fd6a1389103596740f5be8099..0000000000000000000000000000000000000000
--- a/chrome/browser/chromeos/network_settings/onc_translator_shill_to_onc.cc
+++ /dev/null
@@ -1,231 +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_translator.h"
-
-#include <string>
-
-#include "base/basictypes.h"
-#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 {
-
-// Converts |str| to a base::Value of the given |type|. If the conversion fails,
-// returns NULL.
-scoped_ptr<base::Value> ConvertStringToValue(const std::string& str,
- base::Value::Type type) {
- base::Value* value;
- if (type == base::Value::TYPE_STRING)
- value = base::Value::CreateStringValue(str);
- else
- value = base::JSONReader::Read(str);
-
- if (value == NULL || value->GetType() != type) {
- delete value;
- value = NULL;
- }
- return make_scoped_ptr(value);
-}
-
-// This class implements the translation of properties from the given
-// |shill_dictionary| to a new ONC object of signature |onc_signature|. Using
-// recursive calls to TranslateShillServiceToONCPart, nested objects are
-// translated.
-class ShillToONCTranslator {
- public:
- ShillToONCTranslator(const base::DictionaryValue& shill_dictionary,
- const OncValueSignature& onc_signature)
- : shill_dictionary_(&shill_dictionary),
- onc_signature_(&onc_signature) {
- }
-
- // Translates the associated Shill dictionary and creates an ONC object of the
- // given signature.
- scoped_ptr<base::DictionaryValue> CreateTranslatedONCObject();
-
- private:
- void TranslateOpenVPN();
- void TranslateVPN();
- void TranslateNetworkConfiguration();
-
- // Creates an ONC object from |shill_dictionary| according to the signature
- // associated to |onc_field_name| and adds it to |onc_object_| at
- // |onc_field_name|.
- void TranslateAndAddNestedObject(const std::string& onc_field_name);
-
- // Copies all entries from |shill_dictionary_| to |onc_object_| for which a
- // translation (shill_property_name) is defined by |onc_signature_|.
- void CopyPropertiesAccordingToSignature();
-
- // If existent, translates the entry at |shill_property_name| in
- // |shill_dictionary_| using |table|. It is an error if no matching table
- // entry is found. Writes the result as entry at |onc_field_name| in
- // |onc_object_|.
- void TranslateWithTableAndSet(const std::string& shill_property_name,
- const StringTranslationEntry table[],
- const std::string& onc_field_name);
-
- const base::DictionaryValue* shill_dictionary_;
- const OncValueSignature* onc_signature_;
- scoped_ptr<base::DictionaryValue> onc_object_;
-
- DISALLOW_COPY_AND_ASSIGN(ShillToONCTranslator);
-};
-
-scoped_ptr<base::DictionaryValue>
-ShillToONCTranslator::CreateTranslatedONCObject() {
- onc_object_.reset(new base::DictionaryValue);
- if (onc_signature_ == &kNetworkConfigurationSignature)
- TranslateNetworkConfiguration();
- else if (onc_signature_ == &kVPNSignature)
- TranslateVPN();
- else if (onc_signature_ == &kOpenVPNSignature)
- TranslateOpenVPN();
- else
- CopyPropertiesAccordingToSignature();
- return onc_object_.Pass();
-}
-
-void ShillToONCTranslator::TranslateOpenVPN() {
- // Shill supports only one RemoteCertKU but ONC requires a list. If existing,
- // wraps the value into a list.
- std::string certKU;
- if (shill_dictionary_->GetStringWithoutPathExpansion(
- flimflam::kOpenVPNRemoteCertKUProperty, &certKU)) {
- scoped_ptr<base::ListValue> certKUs(new base::ListValue);
- certKUs->AppendString(certKU);
- onc_object_->SetWithoutPathExpansion(vpn::kRemoteCertKU, certKUs.release());
- }
-
- for (const OncFieldSignature* field_signature = onc_signature_->fields;
- field_signature->onc_field_name != NULL; ++field_signature) {
- const base::Value* shill_value;
- if (field_signature->shill_property_name == NULL ||
- !shill_dictionary_->GetWithoutPathExpansion(
- field_signature->shill_property_name, &shill_value)) {
- continue;
- }
-
- scoped_ptr<base::Value> translated;
- std::string shill_str;
- const std::string& onc_field_name = field_signature->onc_field_name;
- if (onc_field_name == vpn::kSaveCredentials ||
- onc_field_name == vpn::kRemoteCertKU) {
- translated.reset(shill_value->DeepCopy());
- } else if (shill_value->GetAsString(&shill_str)) {
- // Shill wants all Provider/VPN fields to be strings. Translates these
- // strings back to the correct ONC type.
- translated = ConvertStringToValue(
- shill_str,
- field_signature->value_signature->onc_type);
-
- if (translated.get() == NULL) {
- LOG(ERROR) << "Shill property '" << field_signature->shill_property_name
- << "' with value '" << shill_value
- << "' couldn't be converted to base::Value::Type "
- << field_signature->value_signature->onc_type;
- }
- } else {
- LOG(ERROR) << "Shill property '" << field_signature->shill_property_name
- << "' has value '" << shill_value
- << "', but expected a string";
- }
- onc_object_->SetWithoutPathExpansion(onc_field_name, translated.release());
- }
-}
-
-void ShillToONCTranslator::TranslateVPN() {
- TranslateWithTableAndSet(flimflam::kProviderTypeProperty, kVPNTypeTable,
- kType);
- CopyPropertiesAccordingToSignature();
-
- std::string vpn_type;
- if (onc_object_->GetStringWithoutPathExpansion(kType, &vpn_type)) {
- if (vpn_type == vpn::kTypeL2TP_IPsec) {
- TranslateAndAddNestedObject(vpn::kIPsec);
- TranslateAndAddNestedObject(vpn::kL2TP);
- } else {
- TranslateAndAddNestedObject(vpn_type);
- }
- }
-}
-
-void ShillToONCTranslator::TranslateAndAddNestedObject(
- const std::string& onc_field_name) {
- const OncFieldSignature* field_signature =
- GetFieldSignature(*onc_signature_, onc_field_name);
- ShillToONCTranslator nested_translator(*shill_dictionary_,
- *field_signature->value_signature);
- scoped_ptr<base::DictionaryValue> nested_object =
- nested_translator.CreateTranslatedONCObject();
- onc_object_->SetWithoutPathExpansion(onc_field_name, nested_object.release());
-}
-
-void ShillToONCTranslator::TranslateNetworkConfiguration() {
- TranslateWithTableAndSet(flimflam::kTypeProperty, kNetworkTypeTable, kType);
- CopyPropertiesAccordingToSignature();
-
- std::string network_type;
- if (onc_object_->GetStringWithoutPathExpansion(kType, &network_type))
- TranslateAndAddNestedObject(network_type);
-}
-
-void ShillToONCTranslator::CopyPropertiesAccordingToSignature() {
- for (const OncFieldSignature* field_signature = onc_signature_->fields;
- field_signature->onc_field_name != NULL; ++field_signature) {
- const base::Value* shill_value;
- if (field_signature->shill_property_name == NULL ||
- !shill_dictionary_->GetWithoutPathExpansion(
- field_signature->shill_property_name, &shill_value)) {
- continue;
- }
- onc_object_->SetWithoutPathExpansion(
- field_signature->onc_field_name, shill_value->DeepCopy());
- }
-}
-
-void ShillToONCTranslator::TranslateWithTableAndSet(
- const std::string& shill_property_name,
- const StringTranslationEntry table[],
- const std::string& onc_field_name) {
- std::string shill_value;
- if (!shill_dictionary_->GetStringWithoutPathExpansion(shill_property_name,
- &shill_value)) {
- return;
- }
-
- for (int i = 0; table[i].onc_value != NULL; ++i) {
- if (shill_value != table[i].shill_value)
- continue;
- onc_object_->SetStringWithoutPathExpansion(onc_field_name,
- table[i].onc_value);
- return;
- }
- LOG(ERROR) << "Shill property '" << shill_property_name << "' with value '"
- << shill_value << "' couldn't be translated to ONC";
-}
-
-} // namespace
-
-scoped_ptr<base::DictionaryValue> TranslateShillServiceToONCPart(
- const base::DictionaryValue& shill_dictionary,
- const OncValueSignature* onc_signature) {
- CHECK(onc_signature != NULL);
-
- ShillToONCTranslator translator(shill_dictionary, *onc_signature);
- return translator.CreateTranslatedONCObject();
-}
-
-} // namespace onc
-} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698