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

Unified Diff: chromeos/network/onc/onc_utils.cc

Issue 759663004: ONC: add support for non-utf-8 SSIDs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed issues Created 6 years, 1 month 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
« no previous file with comments | « chromeos/network/onc/onc_utils.h ('k') | chromeos/network/onc/onc_validator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/network/onc/onc_utils.cc
diff --git a/chromeos/network/onc/onc_utils.cc b/chromeos/network/onc/onc_utils.cc
index fdff42dbd9d3983db5ebf1aa68f7dfc5ee2fdb30..7b544cf3a4530c8d0e9b197be3cbf2039dfda448 100644
--- a/chromeos/network/onc/onc_utils.cc
+++ b/chromeos/network/onc/onc_utils.cc
@@ -8,6 +8,7 @@
#include "base/json/json_reader.h"
#include "base/logging.h"
#include "base/metrics/histogram.h"
+#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/values.h"
#include "chromeos/network/network_event_log.h"
@@ -240,6 +241,39 @@ void ExpandStringsInNetworks(const StringSubstitution& substitution,
}
}
+void FillInHexSSIDFieldsInOncObject(const OncValueSignature& signature,
+ base::DictionaryValue* onc_object) {
+ if (&signature == &kWiFiSignature)
+ FillInHexSSIDField(onc_object);
+
+ // Recurse into nested objects.
+ for (base::DictionaryValue::Iterator it(*onc_object); !it.IsAtEnd();
+ it.Advance()) {
+ base::DictionaryValue* inner_object = nullptr;
+ if (!onc_object->GetDictionaryWithoutPathExpansion(it.key(), &inner_object))
+ continue;
+
+ const OncFieldSignature* field_signature =
+ GetFieldSignature(signature, it.key());
+ if (!field_signature)
+ continue;
+
+ FillInHexSSIDFieldsInOncObject(*field_signature->value_signature,
+ inner_object);
+ }
+}
+
+void FillInHexSSIDField(base::DictionaryValue* wifi_fields) {
+ if (!wifi_fields->HasKey(::onc::wifi::kHexSSID)) {
+ std::string ssid_string;
+ wifi_fields->GetStringWithoutPathExpansion(::onc::wifi::kSSID,
+ &ssid_string);
+ wifi_fields->SetStringWithoutPathExpansion(
+ ::onc::wifi::kHexSSID,
+ base::HexEncode(ssid_string.c_str(), ssid_string.size()));
+ }
+}
+
namespace {
class OncMaskValues : public Mapper {
@@ -398,6 +432,9 @@ bool ParseAndValidateOncForImport(const std::string& onc_blob,
*toplevel_onc,
&validation_result);
+ FillInHexSSIDFieldsInOncObject(kToplevelConfigurationSignature,
+ toplevel_onc.get());
+
if (from_policy) {
UMA_HISTOGRAM_BOOLEAN("Enterprise.ONC.PolicyValidation",
validation_result == Validator::VALID);
« no previous file with comments | « chromeos/network/onc/onc_utils.h ('k') | chromeos/network/onc/onc_validator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698