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

Side by Side Diff: chromeos/network/shill_property_util.cc

Issue 819583004: Elim device log spam when translating ONC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fix_portal_detect_shutdown_crash
Patch Set: Rebase Created 5 years, 11 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/shill_property_util.h" 5 #include "chromeos/network/shill_property_util.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 "base/values.h" 14 #include "base/values.h"
15 #include "chromeos/network/network_event_log.h" 15 #include "chromeos/device_event_log.h"
16 #include "chromeos/network/network_ui_data.h" 16 #include "chromeos/network/network_ui_data.h"
17 #include "chromeos/network/onc/onc_utils.h" 17 #include "chromeos/network/onc/onc_utils.h"
18 #include "third_party/cros_system_api/dbus/service_constants.h" 18 #include "third_party/cros_system_api/dbus/service_constants.h"
19 19
20 namespace chromeos { 20 namespace chromeos {
21 21
22 namespace shill_property_util { 22 namespace shill_property_util {
23 23
24 namespace { 24 namespace {
25 25
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 } 58 }
59 59
60 } // namespace 60 } // namespace
61 61
62 void SetSSID(const std::string ssid, base::DictionaryValue* properties) { 62 void SetSSID(const std::string ssid, base::DictionaryValue* properties) {
63 std::string hex_ssid = base::HexEncode(ssid.c_str(), ssid.size()); 63 std::string hex_ssid = base::HexEncode(ssid.c_str(), ssid.size());
64 properties->SetStringWithoutPathExpansion(shill::kWifiHexSsid, hex_ssid); 64 properties->SetStringWithoutPathExpansion(shill::kWifiHexSsid, hex_ssid);
65 } 65 }
66 66
67 std::string GetSSIDFromProperties(const base::DictionaryValue& properties, 67 std::string GetSSIDFromProperties(const base::DictionaryValue& properties,
68 bool verbose_logging,
68 bool* unknown_encoding) { 69 bool* unknown_encoding) {
69 bool verbose_logging = false; 70 if (unknown_encoding)
70 if (unknown_encoding) {
71 *unknown_encoding = false; 71 *unknown_encoding = false;
72 verbose_logging = true;
73 }
74 72
75 // Get name for debugging. 73 // Get name for debugging.
76 std::string name; 74 std::string name;
77 properties.GetStringWithoutPathExpansion(shill::kNameProperty, &name); 75 properties.GetStringWithoutPathExpansion(shill::kNameProperty, &name);
78 76
79 std::string hex_ssid; 77 std::string hex_ssid;
80 properties.GetStringWithoutPathExpansion(shill::kWifiHexSsid, &hex_ssid); 78 properties.GetStringWithoutPathExpansion(shill::kWifiHexSsid, &hex_ssid);
81 79
82 if (hex_ssid.empty()) { 80 if (hex_ssid.empty()) {
81 // Note: use VLOG here to avoid spamming the event log.
83 if (verbose_logging) 82 if (verbose_logging)
84 NET_LOG_DEBUG("GetSSIDFromProperties: No HexSSID set.", name); 83 NET_LOG(DEBUG) << "GetSSIDFromProperties: No HexSSID set: " << name;
85 return std::string(); 84 return std::string();
86 } 85 }
87 86
88 std::string ssid; 87 std::string ssid;
89 std::vector<uint8> raw_ssid_bytes; 88 std::vector<uint8> raw_ssid_bytes;
90 if (base::HexStringToBytes(hex_ssid, &raw_ssid_bytes)) { 89 if (base::HexStringToBytes(hex_ssid, &raw_ssid_bytes)) {
91 ssid = std::string(raw_ssid_bytes.begin(), raw_ssid_bytes.end()); 90 ssid = std::string(raw_ssid_bytes.begin(), raw_ssid_bytes.end());
92 if (verbose_logging) { 91 if (verbose_logging) {
93 NET_LOG_DEBUG(base::StringPrintf("GetSSIDFromProperties: %s, SSID: %s", 92 NET_LOG(DEBUG) << "GetSSIDFromProperties: " << name
94 hex_ssid.c_str(), ssid.c_str()), name); 93 << " HexSsid=" << hex_ssid << " SSID=" << ssid;
95 } 94 }
96 } else { 95 } else {
97 NET_LOG_ERROR( 96 NET_LOG(ERROR) << "GetSSIDFromProperties: " << name
98 base::StringPrintf("GetSSIDFromProperties: Error processing: %s", 97 << " Error processing HexSsid: " << hex_ssid;
99 hex_ssid.c_str()), name);
100 return std::string(); 98 return std::string();
101 } 99 }
102 100
103 if (base::IsStringUTF8(ssid)) 101 if (base::IsStringUTF8(ssid))
104 return ssid; 102 return ssid;
105 103
106 // Detect encoding and convert to UTF-8. 104 // Detect encoding and convert to UTF-8.
107 std::string encoding; 105 std::string encoding;
108 if (!base::DetectEncoding(ssid, &encoding)) { 106 if (!base::DetectEncoding(ssid, &encoding)) {
109 // TODO(stevenjb): This is currently experimental. If we find a case where 107 // TODO(stevenjb): This is currently experimental. If we find a case where
110 // base::DetectEncoding() fails, we need to figure out whether we can use 108 // base::DetectEncoding() fails, we need to figure out whether we can use
111 // country_code with ConvertToUtf8(). crbug.com/233267. 109 // country_code with ConvertToUtf8(). crbug.com/233267.
112 properties.GetStringWithoutPathExpansion(shill::kCountryProperty, 110 properties.GetStringWithoutPathExpansion(shill::kCountryProperty,
113 &encoding); 111 &encoding);
114 } 112 }
115 std::string utf8_ssid; 113 std::string utf8_ssid;
116 if (!encoding.empty() && 114 if (!encoding.empty() &&
117 base::ConvertToUtf8AndNormalize(ssid, encoding, &utf8_ssid)) { 115 base::ConvertToUtf8AndNormalize(ssid, encoding, &utf8_ssid)) {
118 if (utf8_ssid != ssid) { 116 if (utf8_ssid != ssid) {
119 if (verbose_logging) { 117 if (verbose_logging) {
120 NET_LOG_DEBUG( 118 NET_LOG(DEBUG) << "GetSSIDFromProperties: " << name
121 base::StringPrintf("GetSSIDFromProperties: Encoding=%s: %s", 119 << " Encoding=" << encoding << " SSID=" << ssid
122 encoding.c_str(), utf8_ssid.c_str()), name); 120 << " UTF8 SSID=" << utf8_ssid;
123 } 121 }
124 } 122 }
125 return utf8_ssid; 123 return utf8_ssid;
126 } 124 }
127 125
128 if (unknown_encoding) 126 if (unknown_encoding)
129 *unknown_encoding = true; 127 *unknown_encoding = true;
130 if (verbose_logging) { 128 if (verbose_logging) {
131 NET_LOG_DEBUG( 129 NET_LOG(DEBUG) << "GetSSIDFromProperties: " << name
132 base::StringPrintf("GetSSIDFromProperties: Unrecognized Encoding=%s", 130 << " Unrecognized Encoding=" << encoding;
133 encoding.c_str()), name);
134 } 131 }
135 return ssid; 132 return ssid;
136 } 133 }
137 134
138 std::string GetNetworkIdFromProperties( 135 std::string GetNetworkIdFromProperties(
139 const base::DictionaryValue& properties) { 136 const base::DictionaryValue& properties) {
140 if (properties.empty()) 137 if (properties.empty())
141 return "EmptyProperties"; 138 return "EmptyProperties";
142 std::string result; 139 std::string result;
143 if (properties.GetStringWithoutPathExpansion(shill::kGuidProperty, &result)) 140 if (properties.GetStringWithoutPathExpansion(shill::kGuidProperty, &result))
144 return result; 141 return result;
145 if (properties.GetStringWithoutPathExpansion(shill::kSSIDProperty, &result)) 142 if (properties.GetStringWithoutPathExpansion(shill::kSSIDProperty, &result))
146 return result; 143 return result;
147 if (properties.GetStringWithoutPathExpansion(shill::kNameProperty, &result)) 144 if (properties.GetStringWithoutPathExpansion(shill::kNameProperty, &result))
148 return result; 145 return result;
149 std::string type = "UnknownType"; 146 std::string type = "UnknownType";
150 properties.GetStringWithoutPathExpansion(shill::kTypeProperty, &type); 147 properties.GetStringWithoutPathExpansion(shill::kTypeProperty, &type);
151 return "Unidentified " + type; 148 return "Unidentified " + type;
152 } 149 }
153 150
154 std::string GetNameFromProperties(const std::string& service_path, 151 std::string GetNameFromProperties(const std::string& service_path,
155 const base::DictionaryValue& properties) { 152 const base::DictionaryValue& properties) {
156 std::string name; 153 std::string name;
157 properties.GetStringWithoutPathExpansion(shill::kNameProperty, &name); 154 properties.GetStringWithoutPathExpansion(shill::kNameProperty, &name);
158 155
159 std::string validated_name = ValidateUTF8(name); 156 std::string validated_name = ValidateUTF8(name);
160 if (validated_name != name) { 157 if (validated_name != name) {
161 NET_LOG_DEBUG("GetNameFromProperties", 158 NET_LOG(DEBUG) << "GetNameFromProperties: " << service_path
162 base::StringPrintf("Validated name %s: UTF8: %s", 159 << " Validated name=" << validated_name << " name=" << name;
163 service_path.c_str(),
164 validated_name.c_str()));
165 } 160 }
166 161
167 std::string type; 162 std::string type;
168 properties.GetStringWithoutPathExpansion(shill::kTypeProperty, &type); 163 properties.GetStringWithoutPathExpansion(shill::kTypeProperty, &type);
169 if (type.empty()) { 164 if (type.empty()) {
170 NET_LOG_ERROR("GetNameFromProperties: No type", service_path); 165 NET_LOG(ERROR) << "GetNameFromProperties: " << service_path << " No type.";
171 return validated_name; 166 return validated_name;
172 } 167 }
173 if (!NetworkTypePattern::WiFi().MatchesType(type)) 168 if (!NetworkTypePattern::WiFi().MatchesType(type))
174 return validated_name; 169 return validated_name;
175 170
176 bool unknown_ssid_encoding = false; 171 bool unknown_ssid_encoding = false;
177 std::string ssid = GetSSIDFromProperties(properties, &unknown_ssid_encoding); 172 std::string ssid = GetSSIDFromProperties(
178 if (ssid.empty()) 173 properties, true /* verbose_logging */, &unknown_ssid_encoding);
179 NET_LOG_ERROR("GetNameFromProperties", "No SSID set: " + service_path); 174 if (ssid.empty()) {
175 NET_LOG(ERROR) << "GetNameFromProperties: " << service_path
176 << " No SSID set";
177 }
180 178
181 // Use |validated_name| if |ssid| is empty. 179 // Use |validated_name| if |ssid| is empty.
182 // And if the encoding of the SSID is unknown, use |ssid|, which contains raw 180 // And if the encoding of the SSID is unknown, use |ssid|, which contains raw
183 // bytes in that case, only if |validated_name| is empty. 181 // bytes in that case, only if |validated_name| is empty.
184 if (ssid.empty() || (unknown_ssid_encoding && !validated_name.empty())) 182 if (ssid.empty() || (unknown_ssid_encoding && !validated_name.empty()))
185 return validated_name; 183 return validated_name;
186 184
187 if (ssid != validated_name) { 185 if (ssid != validated_name) {
188 NET_LOG_DEBUG("GetNameFromProperties", 186 NET_LOG(DEBUG) << "GetNameFromProperties: " << service_path
189 base::StringPrintf("%s: SSID: %s, Name: %s", 187 << " SSID=" << ssid << " Validated name=" << validated_name;
190 service_path.c_str(),
191 ssid.c_str(),
192 validated_name.c_str()));
193 } 188 }
194 return ssid; 189 return ssid;
195 } 190 }
196 191
197 scoped_ptr<NetworkUIData> GetUIDataFromValue(const base::Value& ui_data_value) { 192 scoped_ptr<NetworkUIData> GetUIDataFromValue(const base::Value& ui_data_value) {
198 std::string ui_data_str; 193 std::string ui_data_str;
199 if (!ui_data_value.GetAsString(&ui_data_str)) 194 if (!ui_data_value.GetAsString(&ui_data_str))
200 return scoped_ptr<NetworkUIData>(); 195 return scoped_ptr<NetworkUIData>();
201 if (ui_data_str.empty()) 196 if (ui_data_str.empty())
202 return make_scoped_ptr(new NetworkUIData()); 197 return make_scoped_ptr(new NetworkUIData());
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 253
259 // VPN Provider values are read from the "Provider" dictionary, but written 254 // VPN Provider values are read from the "Provider" dictionary, but written
260 // with the keys "Provider.Type" and "Provider.Host". 255 // with the keys "Provider.Type" and "Provider.Host".
261 // TODO(pneubeck): Simplify this once http://crbug.com/381135 is fixed. 256 // TODO(pneubeck): Simplify this once http://crbug.com/381135 is fixed.
262 std::string vpn_provider_type; 257 std::string vpn_provider_type;
263 std::string vpn_provider_host; 258 std::string vpn_provider_host;
264 if (properties_read_from_shill) { 259 if (properties_read_from_shill) {
265 const base::DictionaryValue* provider_properties = NULL; 260 const base::DictionaryValue* provider_properties = NULL;
266 if (!service_properties.GetDictionaryWithoutPathExpansion( 261 if (!service_properties.GetDictionaryWithoutPathExpansion(
267 shill::kProviderProperty, &provider_properties)) { 262 shill::kProviderProperty, &provider_properties)) {
268 NET_LOG_ERROR("Missing VPN provider dict", 263 NET_LOG(ERROR) << "Missing VPN provider dict: "
269 GetNetworkIdFromProperties(service_properties)); 264 << GetNetworkIdFromProperties(service_properties);
270 } 265 }
271 provider_properties->GetStringWithoutPathExpansion(shill::kTypeProperty, 266 provider_properties->GetStringWithoutPathExpansion(shill::kTypeProperty,
272 &vpn_provider_type); 267 &vpn_provider_type);
273 provider_properties->GetStringWithoutPathExpansion(shill::kHostProperty, 268 provider_properties->GetStringWithoutPathExpansion(shill::kHostProperty,
274 &vpn_provider_host); 269 &vpn_provider_host);
275 } else { 270 } else {
276 service_properties.GetStringWithoutPathExpansion( 271 service_properties.GetStringWithoutPathExpansion(
277 shill::kProviderTypeProperty, &vpn_provider_type); 272 shill::kProviderTypeProperty, &vpn_provider_type);
278 service_properties.GetStringWithoutPathExpansion( 273 service_properties.GetStringWithoutPathExpansion(
279 shill::kProviderHostProperty, &vpn_provider_host); 274 shill::kProviderHostProperty, &vpn_provider_host);
280 } 275 }
281 success &= !vpn_provider_type.empty(); 276 success &= !vpn_provider_type.empty();
282 dest->SetStringWithoutPathExpansion(shill::kProviderTypeProperty, 277 dest->SetStringWithoutPathExpansion(shill::kProviderTypeProperty,
283 vpn_provider_type); 278 vpn_provider_type);
284 279
285 success &= !vpn_provider_host.empty(); 280 success &= !vpn_provider_host.empty();
286 dest->SetStringWithoutPathExpansion(shill::kProviderHostProperty, 281 dest->SetStringWithoutPathExpansion(shill::kProviderHostProperty,
287 vpn_provider_host); 282 vpn_provider_host);
288 } else if (type == shill::kTypeEthernet || type == shill::kTypeEthernetEap) { 283 } else if (type == shill::kTypeEthernet || type == shill::kTypeEthernetEap) {
289 // Ethernet and EthernetEAP don't have any additional identifying 284 // Ethernet and EthernetEAP don't have any additional identifying
290 // properties. 285 // properties.
291 } else { 286 } else {
292 NOTREACHED() << "Unsupported network type " << type; 287 NOTREACHED() << "Unsupported network type " << type;
293 success = false; 288 success = false;
294 } 289 }
295 if (!success) { 290 if (!success) {
296 NET_LOG_ERROR("Missing required properties", 291 NET_LOG(ERROR) << "Missing required properties: "
297 GetNetworkIdFromProperties(service_properties)); 292 << GetNetworkIdFromProperties(service_properties);
298 } 293 }
299 return success; 294 return success;
300 } 295 }
301 296
302 bool DoIdentifyingPropertiesMatch(const base::DictionaryValue& new_properties, 297 bool DoIdentifyingPropertiesMatch(const base::DictionaryValue& new_properties,
303 const base::DictionaryValue& old_properties) { 298 const base::DictionaryValue& old_properties) {
304 base::DictionaryValue new_identifying; 299 base::DictionaryValue new_identifying;
305 if (!CopyIdentifyingProperties( 300 if (!CopyIdentifyingProperties(
306 new_properties, 301 new_properties,
307 false /* properties were not read from Shill */, 302 false /* properties were not read from Shill */,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 LOG(WARNING) 350 LOG(WARNING)
356 << "Provider name and country not defined, using code instead: " 351 << "Provider name and country not defined, using code instead: "
357 << *home_provider_id; 352 << *home_provider_id;
358 } 353 }
359 return true; 354 return true;
360 } 355 }
361 356
362 } // namespace shill_property_util 357 } // namespace shill_property_util
363 358
364 } // namespace chromeos 359 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/network/shill_property_util.h ('k') | components/metrics/net/wifi_access_point_info_provider_chromeos.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698