| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromeos/network/network_state.h" | 5 #include "chromeos/network/network_state.h" |
| 6 | 6 |
| 7 #include "base/i18n/icu_encoding_detection.h" | 7 #include "base/i18n/icu_encoding_detection.h" |
| 8 #include "base/i18n/icu_string_conversions.h" | 8 #include "base/i18n/icu_string_conversions.h" |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
| 12 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
| 13 #include "base/strings/utf_string_conversion_utils.h" | 13 #include "base/strings/utf_string_conversion_utils.h" |
| 14 #include "chromeos/network/network_event_log.h" | 14 #include "chromeos/network/network_event_log.h" |
| 15 #include "chromeos/network/network_profile_handler.h" | 15 #include "chromeos/network/network_profile_handler.h" |
| 16 #include "chromeos/network/network_ui_data.h" | |
| 17 #include "chromeos/network/network_util.h" | 16 #include "chromeos/network/network_util.h" |
| 18 #include "chromeos/network/onc/onc_utils.h" | 17 #include "chromeos/network/onc/onc_utils.h" |
| 19 #include "third_party/cros_system_api/dbus/service_constants.h" | 18 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 20 | 19 |
| 21 namespace { | 20 namespace { |
| 22 | 21 |
| 23 bool ConvertListValueToStringVector(const base::ListValue& string_list, | 22 bool ConvertListValueToStringVector(const base::ListValue& string_list, |
| 24 std::vector<std::string>* result) { | 23 std::vector<std::string>* result) { |
| 25 for (size_t i = 0; i < string_list.GetSize(); ++i) { | 24 for (size_t i = 0; i < string_list.GetSize(); ++i) { |
| 26 std::string str; | 25 std::string str; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 44 } else { | 43 } else { |
| 45 const uint32 kReplacementChar = 0xFFFD; | 44 const uint32 kReplacementChar = 0xFFFD; |
| 46 // Puts kReplacementChar if character is a control character [0,0x20) | 45 // Puts kReplacementChar if character is a control character [0,0x20) |
| 47 // or is not readable UTF8. | 46 // or is not readable UTF8. |
| 48 base::WriteUnicodeCharacter(kReplacementChar, &result); | 47 base::WriteUnicodeCharacter(kReplacementChar, &result); |
| 49 } | 48 } |
| 50 } | 49 } |
| 51 return result; | 50 return result; |
| 52 } | 51 } |
| 53 | 52 |
| 54 // Returns a new NetworkUIData* if |ui_data_value| is a valid NetworkUIData | |
| 55 // dictionary string, otherwise returns NULL. | |
| 56 chromeos::NetworkUIData* CreateUIDataFromValue( | |
| 57 const base::Value& ui_data_value) { | |
| 58 std::string ui_data_str; | |
| 59 if (!ui_data_value.GetAsString(&ui_data_str)) | |
| 60 return NULL; | |
| 61 if (ui_data_str.empty()) | |
| 62 return new chromeos::NetworkUIData(); | |
| 63 | |
| 64 scoped_ptr<base::DictionaryValue> ui_data_dict( | |
| 65 chromeos::onc::ReadDictionaryFromJson(ui_data_str)); | |
| 66 if (!ui_data_dict) | |
| 67 return NULL; | |
| 68 return new chromeos::NetworkUIData(*ui_data_dict); | |
| 69 } | |
| 70 | |
| 71 bool IsCaCertNssSet(const base::DictionaryValue& properties) { | 53 bool IsCaCertNssSet(const base::DictionaryValue& properties) { |
| 72 std::string ca_cert_nss; | 54 std::string ca_cert_nss; |
| 73 if (properties.GetStringWithoutPathExpansion(flimflam::kEapCaCertNssProperty, | 55 if (properties.GetStringWithoutPathExpansion(flimflam::kEapCaCertNssProperty, |
| 74 &ca_cert_nss) && | 56 &ca_cert_nss) && |
| 75 !ca_cert_nss.empty()) { | 57 !ca_cert_nss.empty()) { |
| 76 return true; | 58 return true; |
| 77 } | 59 } |
| 78 | 60 |
| 79 const base::DictionaryValue* provider = NULL; | 61 const base::DictionaryValue* provider = NULL; |
| 80 properties.GetDictionaryWithoutPathExpansion(flimflam::kProviderProperty, | 62 properties.GetDictionaryWithoutPathExpansion(flimflam::kProviderProperty, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 97 | 79 |
| 98 } // namespace | 80 } // namespace |
| 99 | 81 |
| 100 namespace chromeos { | 82 namespace chromeos { |
| 101 | 83 |
| 102 NetworkState::NetworkState(const std::string& path) | 84 NetworkState::NetworkState(const std::string& path) |
| 103 : ManagedState(MANAGED_TYPE_NETWORK, path), | 85 : ManagedState(MANAGED_TYPE_NETWORK, path), |
| 104 auto_connect_(false), | 86 auto_connect_(false), |
| 105 favorite_(false), | 87 favorite_(false), |
| 106 priority_(0), | 88 priority_(0), |
| 107 onc_source_(onc::ONC_SOURCE_NONE), | |
| 108 prefix_length_(0), | 89 prefix_length_(0), |
| 109 signal_strength_(0), | 90 signal_strength_(0), |
| 110 connectable_(false), | 91 connectable_(false), |
| 111 activate_over_non_cellular_networks_(false), | 92 activate_over_non_cellular_networks_(false), |
| 112 cellular_out_of_credits_(false), | 93 cellular_out_of_credits_(false), |
| 113 has_ca_cert_nss_(false) { | 94 has_ca_cert_nss_(false) { |
| 114 } | 95 } |
| 115 | 96 |
| 116 NetworkState::~NetworkState() { | 97 NetworkState::~NetworkState() { |
| 117 } | 98 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 // Warning: The DictionaryValue returned from | 154 // Warning: The DictionaryValue returned from |
| 174 // ReadDictionaryFromJson/JSONParser is an optimized derived class that | 155 // ReadDictionaryFromJson/JSONParser is an optimized derived class that |
| 175 // doesn't allow releasing ownership of nested values. A Swap in the wrong | 156 // doesn't allow releasing ownership of nested values. A Swap in the wrong |
| 176 // order leads to memory access errors. | 157 // order leads to memory access errors. |
| 177 proxy_config_.MergeDictionary(proxy_config_dict.get()); | 158 proxy_config_.MergeDictionary(proxy_config_dict.get()); |
| 178 } else { | 159 } else { |
| 179 NET_LOG_ERROR("Failed to parse " + key, path()); | 160 NET_LOG_ERROR("Failed to parse " + key, path()); |
| 180 } | 161 } |
| 181 return true; | 162 return true; |
| 182 } else if (key == flimflam::kUIDataProperty) { | 163 } else if (key == flimflam::kUIDataProperty) { |
| 183 if (!GetOncSource(value, &onc_source_)) { | 164 if (!GetUIDataFromValue(value, &ui_data_)) { |
| 184 NET_LOG_ERROR("Failed to parse " + key, path()); | 165 NET_LOG_ERROR("Failed to parse " + key, path()); |
| 185 return false; | 166 return false; |
| 186 } | 167 } |
| 187 return true; | 168 return true; |
| 188 } else if (key == flimflam::kNetworkTechnologyProperty) { | 169 } else if (key == flimflam::kNetworkTechnologyProperty) { |
| 189 return GetStringValue(key, value, &network_technology_); | 170 return GetStringValue(key, value, &network_technology_); |
| 190 } else if (key == flimflam::kDeviceProperty) { | 171 } else if (key == flimflam::kDeviceProperty) { |
| 191 return GetStringValue(key, value, &device_path_); | 172 return GetStringValue(key, value, &device_path_); |
| 192 } else if (key == flimflam::kGuidProperty) { | 173 } else if (key == flimflam::kGuidProperty) { |
| 193 return GetStringValue(key, value, &guid_); | 174 return GetStringValue(key, value, &guid_); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 | 284 |
| 304 bool NetworkState::IsConnectedState() const { | 285 bool NetworkState::IsConnectedState() const { |
| 305 return StateIsConnected(connection_state_); | 286 return StateIsConnected(connection_state_); |
| 306 } | 287 } |
| 307 | 288 |
| 308 bool NetworkState::IsConnectingState() const { | 289 bool NetworkState::IsConnectingState() const { |
| 309 return StateIsConnecting(connection_state_); | 290 return StateIsConnecting(connection_state_); |
| 310 } | 291 } |
| 311 | 292 |
| 312 bool NetworkState::IsManaged() const { | 293 bool NetworkState::IsManaged() const { |
| 313 return onc_source_ == onc::ONC_SOURCE_DEVICE_POLICY || | 294 return ui_data_.onc_source() == onc::ONC_SOURCE_DEVICE_POLICY || |
| 314 onc_source_ == onc::ONC_SOURCE_USER_POLICY; | 295 ui_data_.onc_source() == onc::ONC_SOURCE_USER_POLICY; |
| 315 } | 296 } |
| 316 | 297 |
| 317 bool NetworkState::IsPrivate() const { | 298 bool NetworkState::IsPrivate() const { |
| 318 return !profile_path_.empty() && | 299 return !profile_path_.empty() && |
| 319 profile_path_ != NetworkProfileHandler::kSharedProfilePath; | 300 profile_path_ != NetworkProfileHandler::kSharedProfilePath; |
| 320 } | 301 } |
| 321 | 302 |
| 322 std::string NetworkState::GetDnsServersAsString() const { | 303 std::string NetworkState::GetDnsServersAsString() const { |
| 323 std::string result; | 304 std::string result; |
| 324 for (size_t i = 0; i < dns_servers_.size(); ++i) { | 305 for (size_t i = 0; i < dns_servers_.size(); ++i) { |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 connection_state == flimflam::kStateConfiguration || | 406 connection_state == flimflam::kStateConfiguration || |
| 426 connection_state == flimflam::kStateCarrier); | 407 connection_state == flimflam::kStateCarrier); |
| 427 } | 408 } |
| 428 | 409 |
| 429 // static | 410 // static |
| 430 std::string NetworkState::IPConfigProperty(const char* key) { | 411 std::string NetworkState::IPConfigProperty(const char* key) { |
| 431 return base::StringPrintf("%s.%s", shill::kIPConfigProperty, key); | 412 return base::StringPrintf("%s.%s", shill::kIPConfigProperty, key); |
| 432 } | 413 } |
| 433 | 414 |
| 434 // static | 415 // static |
| 435 bool NetworkState::GetOncSource(const base::Value& ui_data_value, | 416 bool NetworkState::GetUIDataFromValue(const base::Value& ui_data_value, |
| 436 onc::ONCSource* out) { | 417 NetworkUIData* out) { |
| 437 scoped_ptr<NetworkUIData> ui_data(CreateUIDataFromValue(ui_data_value)); | 418 std::string ui_data_str; |
| 438 if (!ui_data) | 419 if (!ui_data_value.GetAsString(&ui_data_str)) |
| 439 return false; | 420 return false; |
| 440 *out = ui_data->onc_source(); | 421 if (ui_data_str.empty()) { |
| 422 *out = NetworkUIData(); |
| 423 return true; |
| 424 } |
| 425 scoped_ptr<base::DictionaryValue> ui_data_dict( |
| 426 chromeos::onc::ReadDictionaryFromJson(ui_data_str)); |
| 427 if (!ui_data_dict) |
| 428 return false; |
| 429 *out = NetworkUIData(*ui_data_dict); |
| 441 return true; | 430 return true; |
| 442 } | 431 } |
| 443 | 432 |
| 444 } // namespace chromeos | 433 } // namespace chromeos |
| OLD | NEW |