Index: chromeos/network/onc/onc_translator_onc_to_shill.cc |
diff --git a/chromeos/network/onc/onc_translator_onc_to_shill.cc b/chromeos/network/onc/onc_translator_onc_to_shill.cc |
index e7e77829d18f7f733c8b7735cb798e84830724c7..6a3ce6bccd4da419b6bc7b26fc263eda19b8a29d 100644 |
--- a/chromeos/network/onc/onc_translator_onc_to_shill.cc |
+++ b/chromeos/network/onc/onc_translator_onc_to_shill.cc |
@@ -15,6 +15,7 @@ |
#include "base/json/json_reader.h" |
#include "base/json/json_writer.h" |
#include "base/logging.h" |
+#include "base/strings/string_util.h" |
#include "base/values.h" |
#include "chromeos/network/onc/onc_signature.h" |
#include "chromeos/network/onc/onc_translation_tables.h" |
@@ -27,6 +28,17 @@ namespace onc { |
namespace { |
+bool ConvertListValueToStringVector(const base::ListValue& string_list, |
+ std::vector<std::string>* result) { |
+ for (size_t i = 0; i < string_list.GetSize(); ++i) { |
+ std::string str; |
+ if (!string_list.GetString(i, &str)) |
+ return false; |
+ result->push_back(str); |
+ } |
+ return true; |
+} |
stevenjb
2014/09/08 17:23:14
nit: Since this isn't someplace where it can be re
pneubeck (no reviews)
2014/09/09 07:36:03
There are two other usages, which I can unify in a
|
+ |
scoped_ptr<base::StringValue> ConvertValueToString(const base::Value& value) { |
std::string str; |
if (!value.GetAsString(&str)) |
@@ -59,6 +71,7 @@ class LocalTranslator { |
void TranslateVPN(); |
void TranslateWiFi(); |
void TranslateEAP(); |
+ void TranslateStaticIPConfig(); |
void TranslateNetworkConfiguration(); |
// Copies all entries from |onc_object_| to |shill_dictionary_| for which a |
@@ -89,6 +102,8 @@ class LocalTranslator { |
void LocalTranslator::TranslateFields() { |
if (onc_signature_ == &kNetworkConfigurationSignature) |
TranslateNetworkConfiguration(); |
+ else if (onc_signature_ == &kStaticIPConfigSignature) |
+ TranslateStaticIPConfig(); |
else if (onc_signature_ == &kEthernetSignature) |
TranslateEthernet(); |
else if (onc_signature_ == &kVPNSignature) |
@@ -119,6 +134,21 @@ void LocalTranslator::TranslateEthernet() { |
CopyFieldsAccordingToSignature(); |
} |
+ |
+void LocalTranslator::TranslateStaticIPConfig() { |
+ const base::ListValue* onc_nameservers = NULL; |
+ if (onc_object_->GetListWithoutPathExpansion(::onc::ipconfig::kNameServers, |
+ &onc_nameservers)) { |
+ std::vector<std::string> onc_nameservers_vector; |
+ ConvertListValueToStringVector(*onc_nameservers, &onc_nameservers_vector); |
+ std::string shill_nameservers = JoinString(onc_nameservers_vector, ','); |
+ shill_dictionary_->SetStringWithoutPathExpansion( |
+ shill::kStaticIPNameServersProperty, shill_nameservers); |
+ } |
+ |
+ CopyFieldsAccordingToSignature(); |
+} |
+ |
void LocalTranslator::TranslateOpenVPN() { |
// SaveCredentials needs special handling when translating from Shill -> ONC |
// so handle it explicitly here. |