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/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "chromeos/network/network_event_log.h" | 9 #include "chromeos/network/network_event_log.h" |
10 #include "chromeos/network/network_profile_handler.h" | 10 #include "chromeos/network/network_profile_handler.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 } else if (key == shill::kConnectableProperty) { | 83 } else if (key == shill::kConnectableProperty) { |
84 return GetBooleanValue(key, value, &connectable_); | 84 return GetBooleanValue(key, value, &connectable_); |
85 } else if (key == shill::kErrorProperty) { | 85 } else if (key == shill::kErrorProperty) { |
86 if (!GetStringValue(key, value, &error_)) | 86 if (!GetStringValue(key, value, &error_)) |
87 return false; | 87 return false; |
88 if (ErrorIsValid(error_)) | 88 if (ErrorIsValid(error_)) |
89 last_error_ = error_; | 89 last_error_ = error_; |
90 else | 90 else |
91 error_.clear(); | 91 error_.clear(); |
92 return true; | 92 return true; |
93 } else if (key == IPConfigProperty(shill::kAddressProperty)) { | |
94 return GetStringValue(key, value, &ip_address_); | |
95 } else if (key == IPConfigProperty(shill::kGatewayProperty)) { | |
96 return GetStringValue(key, value, &gateway_); | |
97 } else if (key == IPConfigProperty(shill::kNameServersProperty)) { | |
98 const base::ListValue* dns_servers; | |
99 if (!value.GetAsList(&dns_servers)) | |
100 return false; | |
101 dns_servers_.clear(); | |
102 ConvertListValueToStringVector(*dns_servers, &dns_servers_); | |
103 return true; | |
104 } else if (key == IPConfigProperty(shill::kPrefixlenProperty)) { | |
105 return GetIntegerValue(key, value, &prefix_length_); | |
106 } else if (key == IPConfigProperty( | |
107 shill::kWebProxyAutoDiscoveryUrlProperty)) { | |
108 std::string url_string; | |
109 if (!GetStringValue(key, value, &url_string)) | |
110 return false; | |
111 if (url_string.empty()) { | |
112 web_proxy_auto_discovery_url_ = GURL(); | |
113 } else { | |
114 GURL gurl(url_string); | |
115 if (!gurl.is_valid()) { | |
116 web_proxy_auto_discovery_url_ = gurl; | |
117 } else { | |
118 NET_LOG_ERROR("Invalid WebProxyAutoDiscoveryUrl: " + url_string, | |
119 path()); | |
120 web_proxy_auto_discovery_url_ = GURL(); | |
121 } | |
122 } | |
123 return true; | |
124 } else if (key == shill::kActivationStateProperty) { | 93 } else if (key == shill::kActivationStateProperty) { |
125 return GetStringValue(key, value, &activation_state_); | 94 return GetStringValue(key, value, &activation_state_); |
126 } else if (key == shill::kRoamingStateProperty) { | 95 } else if (key == shill::kRoamingStateProperty) { |
127 return GetStringValue(key, value, &roaming_); | 96 return GetStringValue(key, value, &roaming_); |
128 } else if (key == shill::kSecurityProperty) { | 97 } else if (key == shill::kSecurityProperty) { |
129 return GetStringValue(key, value, &security_); | 98 return GetStringValue(key, value, &security_); |
130 } else if (key == shill::kEapMethodProperty) { | 99 } else if (key == shill::kEapMethodProperty) { |
131 return GetStringValue(key, value, &eap_method_); | 100 return GetStringValue(key, value, &eap_method_); |
132 } else if (key == shill::kUIDataProperty) { | 101 } else if (key == shill::kUIDataProperty) { |
133 scoped_ptr<NetworkUIData> new_ui_data = | 102 scoped_ptr<NetworkUIData> new_ui_data = |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 return changed; | 139 return changed; |
171 } | 140 } |
172 | 141 |
173 void NetworkState::GetStateProperties(base::DictionaryValue* dictionary) const { | 142 void NetworkState::GetStateProperties(base::DictionaryValue* dictionary) const { |
174 ManagedState::GetStateProperties(dictionary); | 143 ManagedState::GetStateProperties(dictionary); |
175 | 144 |
176 // Properties shared by all types. | 145 // Properties shared by all types. |
177 dictionary->SetStringWithoutPathExpansion(shill::kGuidProperty, guid()); | 146 dictionary->SetStringWithoutPathExpansion(shill::kGuidProperty, guid()); |
178 dictionary->SetStringWithoutPathExpansion(shill::kStateProperty, | 147 dictionary->SetStringWithoutPathExpansion(shill::kStateProperty, |
179 connection_state()); | 148 connection_state()); |
180 dictionary->SetStringWithoutPathExpansion(shill::kErrorProperty, error()); | |
181 dictionary->SetStringWithoutPathExpansion(shill::kSecurityProperty, | 149 dictionary->SetStringWithoutPathExpansion(shill::kSecurityProperty, |
182 security()); | 150 security()); |
| 151 if (!error().empty()) |
| 152 dictionary->SetStringWithoutPathExpansion(shill::kErrorProperty, error()); |
183 | 153 |
184 if (!NetworkTypePattern::Wireless().MatchesType(type())) | 154 if (!NetworkTypePattern::Wireless().MatchesType(type())) |
185 return; | 155 return; |
186 | 156 |
187 // Wireless properties | 157 // Wireless properties |
188 dictionary->SetBooleanWithoutPathExpansion(shill::kConnectableProperty, | 158 dictionary->SetBooleanWithoutPathExpansion(shill::kConnectableProperty, |
189 connectable()); | 159 connectable()); |
190 dictionary->SetIntegerWithoutPathExpansion(shill::kSignalStrengthProperty, | 160 dictionary->SetIntegerWithoutPathExpansion(shill::kSignalStrengthProperty, |
191 signal_strength()); | 161 signal_strength()); |
192 | 162 |
193 // Wifi properties | 163 // Wifi properties |
194 if (!NetworkTypePattern::WiFi().MatchesType(type())) { | 164 if (NetworkTypePattern::WiFi().MatchesType(type())) { |
195 dictionary->SetStringWithoutPathExpansion(shill::kEapMethodProperty, | 165 dictionary->SetStringWithoutPathExpansion(shill::kEapMethodProperty, |
196 eap_method()); | 166 eap_method()); |
197 } | 167 } |
198 | 168 |
199 // Mobile properties | 169 // Mobile properties |
200 if (NetworkTypePattern::Mobile().MatchesType(type())) { | 170 if (NetworkTypePattern::Mobile().MatchesType(type())) { |
201 dictionary->SetStringWithoutPathExpansion( | 171 dictionary->SetStringWithoutPathExpansion( |
202 shill::kNetworkTechnologyProperty, | 172 shill::kNetworkTechnologyProperty, |
203 network_technology()); | 173 network_technology()); |
204 dictionary->SetStringWithoutPathExpansion(shill::kActivationStateProperty, | 174 dictionary->SetStringWithoutPathExpansion(shill::kActivationStateProperty, |
205 activation_state()); | 175 activation_state()); |
206 dictionary->SetStringWithoutPathExpansion(shill::kRoamingStateProperty, | 176 dictionary->SetStringWithoutPathExpansion(shill::kRoamingStateProperty, |
207 roaming()); | 177 roaming()); |
208 dictionary->SetBooleanWithoutPathExpansion(shill::kOutOfCreditsProperty, | 178 dictionary->SetBooleanWithoutPathExpansion(shill::kOutOfCreditsProperty, |
209 cellular_out_of_credits()); | 179 cellular_out_of_credits()); |
210 } | 180 } |
211 } | 181 } |
212 | 182 |
| 183 void NetworkState::IPConfigPropertiesChanged( |
| 184 const base::DictionaryValue& properties) { |
| 185 for (base::DictionaryValue::Iterator iter(properties); |
| 186 !iter.IsAtEnd(); iter.Advance()) { |
| 187 std::string key = iter.key(); |
| 188 const base::Value& value = iter.value(); |
| 189 |
| 190 if (key == shill::kAddressProperty) { |
| 191 GetStringValue(key, value, &ip_address_); |
| 192 } else if (key == shill::kGatewayProperty) { |
| 193 GetStringValue(key, value, &gateway_); |
| 194 } else if (key == shill::kNameServersProperty) { |
| 195 const base::ListValue* dns_servers; |
| 196 if (value.GetAsList(&dns_servers)) { |
| 197 dns_servers_.clear(); |
| 198 ConvertListValueToStringVector(*dns_servers, &dns_servers_); |
| 199 } |
| 200 } else if (key == shill::kPrefixlenProperty) { |
| 201 GetIntegerValue(key, value, &prefix_length_); |
| 202 } else if (key == shill::kWebProxyAutoDiscoveryUrlProperty) { |
| 203 std::string url_string; |
| 204 if (GetStringValue(key, value, &url_string)) { |
| 205 if (url_string.empty()) { |
| 206 web_proxy_auto_discovery_url_ = GURL(); |
| 207 } else { |
| 208 GURL gurl(url_string); |
| 209 if (gurl.is_valid()) { |
| 210 web_proxy_auto_discovery_url_ = gurl; |
| 211 } else { |
| 212 NET_LOG_ERROR("Invalid WebProxyAutoDiscoveryUrl: " + url_string, |
| 213 path()); |
| 214 web_proxy_auto_discovery_url_ = GURL(); |
| 215 } |
| 216 } |
| 217 } |
| 218 } |
| 219 } |
| 220 } |
| 221 |
213 bool NetworkState::RequiresActivation() const { | 222 bool NetworkState::RequiresActivation() const { |
214 return (type() == shill::kTypeCellular && | 223 return (type() == shill::kTypeCellular && |
215 activation_state() != shill::kActivationStateActivated && | 224 activation_state() != shill::kActivationStateActivated && |
216 activation_state() != shill::kActivationStateUnknown); | 225 activation_state() != shill::kActivationStateUnknown); |
217 } | 226 } |
218 | 227 |
219 bool NetworkState::IsConnectedState() const { | 228 bool NetworkState::IsConnectedState() const { |
220 return StateIsConnected(connection_state_); | 229 return StateIsConnected(connection_state_); |
221 } | 230 } |
222 | 231 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 connection_state == shill::kStateConfiguration || | 275 connection_state == shill::kStateConfiguration || |
267 connection_state == shill::kStateCarrier); | 276 connection_state == shill::kStateCarrier); |
268 } | 277 } |
269 | 278 |
270 // static | 279 // static |
271 bool NetworkState::ErrorIsValid(const std::string& error) { | 280 bool NetworkState::ErrorIsValid(const std::string& error) { |
272 // Shill uses "Unknown" to indicate an unset or cleared error state. | 281 // Shill uses "Unknown" to indicate an unset or cleared error state. |
273 return !error.empty() && error != kErrorUnknown; | 282 return !error.empty() && error != kErrorUnknown; |
274 } | 283 } |
275 | 284 |
276 // static | |
277 std::string NetworkState::IPConfigProperty(const char* key) { | |
278 return base::StringPrintf("%s.%s", shill::kIPConfigProperty, key); | |
279 } | |
280 | |
281 } // namespace chromeos | 285 } // namespace chromeos |
OLD | NEW |