Index: chromeos/network/network_state.cc |
diff --git a/chromeos/network/network_state.cc b/chromeos/network/network_state.cc |
index 0d0c790ee08a7cd1283b0fb2165819ff0b24b4ac..834022b730f7f6a4a6437a0f5445820c3409c870 100644 |
--- a/chromeos/network/network_state.cc |
+++ b/chromeos/network/network_state.cc |
@@ -4,17 +4,12 @@ |
#include "chromeos/network/network_state.h" |
-#include "base/i18n/icu_encoding_detection.h" |
-#include "base/i18n/icu_string_conversions.h" |
-#include "base/json/json_writer.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
-#include "base/strings/utf_string_conversion_utils.h" |
#include "chromeos/network/network_event_log.h" |
#include "chromeos/network/network_profile_handler.h" |
#include "chromeos/network/network_util.h" |
#include "chromeos/network/onc/onc_utils.h" |
+#include "chromeos/network/shill_property_util.h" |
#include "third_party/cros_system_api/dbus/service_constants.h" |
namespace { |
@@ -32,26 +27,6 @@ bool ConvertListValueToStringVector(const base::ListValue& string_list, |
return true; |
} |
-// Replace non UTF8 characters in |str| with a replacement character. |
-std::string ValidateUTF8(const std::string& str) { |
- std::string result; |
- for (int32 index = 0; index < static_cast<int32>(str.size()); ++index) { |
- uint32 code_point_out; |
- bool is_unicode_char = base::ReadUnicodeCharacter(str.c_str(), str.size(), |
- &index, &code_point_out); |
- const uint32 kFirstNonControlChar = 0x20; |
- if (is_unicode_char && (code_point_out >= kFirstNonControlChar)) { |
- base::WriteUnicodeCharacter(code_point_out, &result); |
- } else { |
- const uint32 kReplacementChar = 0xFFFD; |
- // Puts kReplacementChar if character is a control character [0,0x20) |
- // or is not readable UTF8. |
- base::WriteUnicodeCharacter(kReplacementChar, &result); |
- } |
- } |
- return result; |
-} |
- |
bool IsCaCertNssSet(const base::DictionaryValue& properties) { |
std::string ca_cert_nss; |
if (properties.GetStringWithoutPathExpansion(flimflam::kEapCaCertNssProperty, |
@@ -184,10 +159,13 @@ bool NetworkState::PropertyChanged(const std::string& key, |
} |
return true; |
} else if (key == flimflam::kUIDataProperty) { |
- if (!GetUIDataFromValue(value, &ui_data_)) { |
+ scoped_ptr<NetworkUIData> new_ui_data = |
+ shill_property_util::GetUIDataFromValue(value); |
+ if (!new_ui_data) { |
NET_LOG_ERROR("Failed to parse " + key, path()); |
return false; |
} |
+ ui_data_ = *new_ui_data; |
return true; |
} else if (key == flimflam::kNetworkTechnologyProperty) { |
return GetStringValue(key, value, &network_technology_); |
@@ -339,7 +317,8 @@ std::string NetworkState::GetNetmask() const { |
} |
bool NetworkState::UpdateName(const base::DictionaryValue& properties) { |
- std::string updated_name = GetNameFromProperties(path(), properties); |
+ std::string updated_name = |
+ shill_property_util::GetNameFromProperties(path(), properties); |
if (updated_name != name()) { |
set_name(updated_name); |
return true; |
@@ -348,80 +327,6 @@ bool NetworkState::UpdateName(const base::DictionaryValue& properties) { |
} |
// static |
-std::string NetworkState::GetNameFromProperties( |
- const std::string& service_path, |
- const base::DictionaryValue& properties) { |
- std::string name, hex_ssid; |
- properties.GetStringWithoutPathExpansion(flimflam::kNameProperty, &name); |
- properties.GetStringWithoutPathExpansion(flimflam::kWifiHexSsid, &hex_ssid); |
- |
- if (hex_ssid.empty()) { |
- if (name.empty()) |
- return name; |
- // Validate name for UTF8. |
- std::string valid_ssid = ValidateUTF8(name); |
- if (valid_ssid != name) { |
- NET_LOG_DEBUG("GetNameFromProperties", base::StringPrintf( |
- "%s: UTF8: %s", service_path.c_str(), valid_ssid.c_str())); |
- } |
- return valid_ssid; |
- } |
- |
- std::string ssid; |
- std::vector<uint8> raw_ssid_bytes; |
- if (base::HexStringToBytes(hex_ssid, &raw_ssid_bytes)) { |
- ssid = std::string(raw_ssid_bytes.begin(), raw_ssid_bytes.end()); |
- NET_LOG_DEBUG("GetNameFromProperties", base::StringPrintf( |
- "%s: %s, SSID: %s", service_path.c_str(), |
- hex_ssid.c_str(), ssid.c_str())); |
- } else { |
- NET_LOG_ERROR("GetNameFromProperties", |
- base::StringPrintf("%s: Error processing: %s", |
- service_path.c_str(), hex_ssid.c_str())); |
- return name; |
- } |
- |
- if (IsStringUTF8(ssid)) { |
- if (ssid != name) { |
- NET_LOG_DEBUG("GetNameFromProperties", base::StringPrintf( |
- "%s: UTF8: %s", service_path.c_str(), ssid.c_str())); |
- } |
- return ssid; |
- } |
- |
- // Detect encoding and convert to UTF-8. |
- std::string country_code; |
- properties.GetStringWithoutPathExpansion( |
- flimflam::kCountryProperty, &country_code); |
- std::string encoding; |
- if (!base::DetectEncoding(ssid, &encoding)) { |
- // TODO(stevenjb): This is currently experimental. If we find a case where |
- // base::DetectEncoding() fails, we need to figure out whether we can use |
- // country_code with ConvertToUtf8(). crbug.com/233267. |
- encoding = country_code; |
- } |
- if (!encoding.empty()) { |
- std::string utf8_ssid; |
- if (base::ConvertToUtf8AndNormalize(ssid, encoding, &utf8_ssid)) { |
- if (utf8_ssid != name) { |
- NET_LOG_DEBUG("GetNameFromProperties", base::StringPrintf( |
- "%s: Encoding=%s: %s", service_path.c_str(), |
- encoding.c_str(), utf8_ssid.c_str())); |
- } |
- return utf8_ssid; |
- } |
- } |
- |
- // Unrecognized encoding. Only use raw bytes if name_ is empty. |
- NET_LOG_DEBUG("GetNameFromProperties", base::StringPrintf( |
- "%s: Unrecognized Encoding=%s: %s", service_path.c_str(), |
- encoding.c_str(), ssid.c_str())); |
- if (name.empty() && !ssid.empty()) |
- return ssid; |
- return name; |
-} |
- |
-// static |
bool NetworkState::StateIsConnected(const std::string& connection_state) { |
return (connection_state == flimflam::kStateReady || |
connection_state == flimflam::kStateOnline || |
@@ -440,22 +345,4 @@ std::string NetworkState::IPConfigProperty(const char* key) { |
return base::StringPrintf("%s.%s", shill::kIPConfigProperty, key); |
} |
-// static |
-bool NetworkState::GetUIDataFromValue(const base::Value& ui_data_value, |
- NetworkUIData* out) { |
- std::string ui_data_str; |
- if (!ui_data_value.GetAsString(&ui_data_str)) |
- return false; |
- if (ui_data_str.empty()) { |
- *out = NetworkUIData(); |
- return true; |
- } |
- scoped_ptr<base::DictionaryValue> ui_data_dict( |
- chromeos::onc::ReadDictionaryFromJson(ui_data_str)); |
- if (!ui_data_dict) |
- return false; |
- *out = NetworkUIData(*ui_data_dict); |
- return true; |
-} |
- |
} // namespace chromeos |