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

Side by Side Diff: chrome/browser/chromeos/cros/onc_network_parser.cc

Issue 8804020: Set onc_source UI data parameter when importing ONC. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Handle "Recommended" dictionary entry properly. Created 9 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/chromeos/cros/onc_network_parser.h" 5 #include "chrome/browser/chromeos/cros/onc_network_parser.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/json/json_value_serializer.h" 8 #include "base/json/json_value_serializer.h"
9 #include "base/json/json_writer.h" // for debug output only. 9 #include "base/json/json_writer.h"
10 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "chrome/browser/chromeos/cros/native_network_constants.h" 12 #include "chrome/browser/chromeos/cros/native_network_constants.h"
13 #include "chrome/browser/chromeos/cros/native_network_parser.h" 13 #include "chrome/browser/chromeos/cros/native_network_parser.h"
14 #include "chrome/browser/chromeos/cros/network_library.h" 14 #include "chrome/browser/chromeos/cros/network_library.h"
15 #include "net/base/cert_database.h" 15 #include "net/base/cert_database.h"
16 #include "net/base/crypto_module.h" 16 #include "net/base/crypto_module.h"
17 #include "net/base/net_errors.h" 17 #include "net/base/net_errors.h"
18 #include "net/base/x509_certificate.h" 18 #include "net/base/x509_certificate.h"
19 #include "third_party/cros_system_api/dbus/service_constants.h" 19 #include "third_party/cros_system_api/dbus/service_constants.h"
(...skipping 16 matching lines...) Expand all
36 36
37 OncValueSignature network_configuration_signature[] = { 37 OncValueSignature network_configuration_signature[] = {
38 // TODO(crosbug.com/23673): Support Ethernet settings. 38 // TODO(crosbug.com/23673): Support Ethernet settings.
39 { "GUID", PROPERTY_INDEX_GUID, TYPE_STRING }, 39 { "GUID", PROPERTY_INDEX_GUID, TYPE_STRING },
40 { "Name", PROPERTY_INDEX_NAME, TYPE_STRING }, 40 { "Name", PROPERTY_INDEX_NAME, TYPE_STRING },
41 // TODO(crosbug.com/23674): Support ProxySettings. 41 // TODO(crosbug.com/23674): Support ProxySettings.
42 // TODO(crosbug.com/23604): Handle removing networks. 42 // TODO(crosbug.com/23604): Handle removing networks.
43 { "Remove", PROPERTY_INDEX_ONC_REMOVE, TYPE_BOOLEAN }, 43 { "Remove", PROPERTY_INDEX_ONC_REMOVE, TYPE_BOOLEAN },
44 { "Type", PROPERTY_INDEX_TYPE, TYPE_STRING }, 44 { "Type", PROPERTY_INDEX_TYPE, TYPE_STRING },
45 { "WiFi", PROPERTY_INDEX_ONC_WIFI, TYPE_DICTIONARY }, 45 { "WiFi", PROPERTY_INDEX_ONC_WIFI, TYPE_DICTIONARY },
46 { "VPN", PROPERTY_INDEX_ONC_VPN, TYPE_DICTIONARY } 46 { "VPN", PROPERTY_INDEX_ONC_VPN, TYPE_DICTIONARY },
47 { NULL }
kmixter1 2011/12/06 12:52:37 Ouch, nice catch.
47 }; 48 };
48 49
49 OncValueSignature wifi_signature[] = { 50 OncValueSignature wifi_signature[] = {
50 { "AutoConnect", PROPERTY_INDEX_AUTO_CONNECT, TYPE_BOOLEAN }, 51 { "AutoConnect", PROPERTY_INDEX_AUTO_CONNECT, TYPE_BOOLEAN,
52 NetworkUIData::kPropertyAutoConnect },
51 { "EAP", PROPERTY_INDEX_EAP, TYPE_DICTIONARY }, 53 { "EAP", PROPERTY_INDEX_EAP, TYPE_DICTIONARY },
52 { "HiddenSSID", PROPERTY_INDEX_HIDDEN_SSID, TYPE_BOOLEAN }, 54 { "HiddenSSID", PROPERTY_INDEX_HIDDEN_SSID, TYPE_BOOLEAN },
53 { "Passphrase", PROPERTY_INDEX_PASSPHRASE, TYPE_STRING }, 55 { "Passphrase", PROPERTY_INDEX_PASSPHRASE, TYPE_STRING,
56 NetworkUIData::kPropertyPassphrase },
54 { "ProxyURL", PROPERTY_INDEX_PROXY_CONFIG, TYPE_STRING }, 57 { "ProxyURL", PROPERTY_INDEX_PROXY_CONFIG, TYPE_STRING },
55 { "Security", PROPERTY_INDEX_SECURITY, TYPE_STRING }, 58 { "Security", PROPERTY_INDEX_SECURITY, TYPE_STRING },
56 { "SSID", PROPERTY_INDEX_SSID, TYPE_STRING }, 59 { "SSID", PROPERTY_INDEX_SSID, TYPE_STRING },
57 { NULL } 60 { NULL }
58 }; 61 };
59 62
60 OncValueSignature eap_signature[] = { 63 OncValueSignature eap_signature[] = {
61 { "AnonymousIdentity", PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY, TYPE_STRING }, 64 { "AnonymousIdentity", PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY, TYPE_STRING,
65 NetworkUIData::kPropertyEAPAnonymousIdentity },
kmixter1 2011/12/06 12:52:37 why can't these use the same name as in ONC?
Mattias Nissler (ping if slow) 2011/12/06 13:37:59 See other comment.
62 { "ClientCertPattern", PROPERTY_INDEX_ONC_CLIENT_CERT_PATTERN, 66 { "ClientCertPattern", PROPERTY_INDEX_ONC_CLIENT_CERT_PATTERN,
63 TYPE_DICTIONARY }, 67 TYPE_DICTIONARY },
64 { "ClientCertRef", PROPERTY_INDEX_ONC_CLIENT_CERT_REF, TYPE_STRING }, 68 { "ClientCertRef", PROPERTY_INDEX_ONC_CLIENT_CERT_REF, TYPE_STRING },
65 { "ClientCertType", PROPERTY_INDEX_ONC_CLIENT_CERT_TYPE, TYPE_STRING }, 69 { "ClientCertType", PROPERTY_INDEX_ONC_CLIENT_CERT_TYPE, TYPE_STRING },
66 { "Identity", PROPERTY_INDEX_EAP_IDENTITY, TYPE_STRING }, 70 { "Identity", PROPERTY_INDEX_EAP_IDENTITY, TYPE_STRING,
67 { "Inner", PROPERTY_INDEX_EAP_PHASE_2_AUTH, TYPE_STRING }, 71 NetworkUIData::kPropertyEAPIdentity },
68 { "Outer", PROPERTY_INDEX_EAP_METHOD, TYPE_STRING }, 72 { "Inner", PROPERTY_INDEX_EAP_PHASE_2_AUTH, TYPE_STRING,
69 { "Password", PROPERTY_INDEX_EAP_PASSWORD, TYPE_STRING }, 73 NetworkUIData::kPropertyEAPPhase2Auth },
70 { "ServerCARef", PROPERTY_INDEX_EAP_CA_CERT, TYPE_STRING }, 74 { "Outer", PROPERTY_INDEX_EAP_METHOD, TYPE_STRING,
71 { "UseSystemCAs", PROPERTY_INDEX_EAP_USE_SYSTEM_CAS, TYPE_BOOLEAN }, 75 NetworkUIData::kPropertyEAPMethod },
76 { "Password", PROPERTY_INDEX_EAP_PASSWORD, TYPE_STRING,
77 NetworkUIData::kPropertyEAPPassphrase },
78 { "ServerCARef", PROPERTY_INDEX_EAP_CA_CERT, TYPE_STRING,
79 NetworkUIData::kPropertyEAPServerCaCertNssNickname },
80 { "UseSystemCAs", PROPERTY_INDEX_EAP_USE_SYSTEM_CAS, TYPE_BOOLEAN,
81 NetworkUIData::kPropertyEAPUseSystemCAs },
72 { NULL } 82 { NULL }
73 }; 83 };
74 84
75 OncValueSignature vpn_signature[] = { 85 OncValueSignature vpn_signature[] = {
76 { "Host", PROPERTY_INDEX_PROVIDER_HOST, TYPE_STRING }, 86 { "Host", PROPERTY_INDEX_PROVIDER_HOST, TYPE_STRING },
77 { "IPsec", PROPERTY_INDEX_ONC_IPSEC, TYPE_DICTIONARY }, 87 { "IPsec", PROPERTY_INDEX_ONC_IPSEC, TYPE_DICTIONARY },
78 { "L2TP", PROPERTY_INDEX_ONC_L2TP, TYPE_DICTIONARY }, 88 { "L2TP", PROPERTY_INDEX_ONC_L2TP, TYPE_DICTIONARY },
79 { "OpenVPN", PROPERTY_INDEX_ONC_OPENVPN, TYPE_DICTIONARY }, 89 { "OpenVPN", PROPERTY_INDEX_ONC_OPENVPN, TYPE_DICTIONARY },
80 { "Type", PROPERTY_INDEX_PROVIDER_TYPE, TYPE_STRING }, 90 { "Type", PROPERTY_INDEX_PROVIDER_TYPE, TYPE_STRING },
81 { NULL } 91 { NULL }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 }; 164 };
155 CR_DEFINE_STATIC_LOCAL(EnumMapper<ConnectionType>, parser, 165 CR_DEFINE_STATIC_LOCAL(EnumMapper<ConnectionType>, parser,
156 (table, arraysize(table), TYPE_UNKNOWN)); 166 (table, arraysize(table), TYPE_UNKNOWN));
157 return parser.Get(type); 167 return parser.Get(type);
158 } 168 }
159 169
160 } // namespace 170 } // namespace
161 171
162 // -------------------- OncNetworkParser -------------------- 172 // -------------------- OncNetworkParser --------------------
163 173
164 OncNetworkParser::OncNetworkParser(const std::string& onc_blob) 174 OncNetworkParser::OncNetworkParser(const std::string& onc_blob,
175 NetworkUIData::ONCSource onc_source)
165 : NetworkParser(get_onc_mapper()), 176 : NetworkParser(get_onc_mapper()),
177 onc_source_(onc_source),
166 network_configs_(NULL), 178 network_configs_(NULL),
167 certificates_(NULL) { 179 certificates_(NULL) {
168 VLOG(2) << __func__ << ": OncNetworkParser called on " << onc_blob; 180 VLOG(2) << __func__ << ": OncNetworkParser called on " << onc_blob;
169 JSONStringValueSerializer deserializer(onc_blob); 181 JSONStringValueSerializer deserializer(onc_blob);
170 deserializer.set_allow_trailing_comma(true); 182 deserializer.set_allow_trailing_comma(true);
171 scoped_ptr<base::Value> root(deserializer.Deserialize(NULL, &parse_error_)); 183 scoped_ptr<base::Value> root(deserializer.Deserialize(NULL, &parse_error_));
172 184
173 if (!root.get() || root->GetType() != base::Value::TYPE_DICTIONARY) { 185 if (!root.get() || root->GetType() != base::Value::TYPE_DICTIONARY) {
174 LOG(WARNING) << "OncNetworkParser received bad ONC file: " << parse_error_; 186 LOG(WARNING) << "OncNetworkParser received bad ONC file: " << parse_error_;
175 } else { 187 } else {
(...skipping 26 matching lines...) Expand all
202 } 214 }
203 215
204 int OncNetworkParser::GetNetworkConfigsSize() const { 216 int OncNetworkParser::GetNetworkConfigsSize() const {
205 return network_configs_ ? network_configs_->GetSize() : 0; 217 return network_configs_ ? network_configs_->GetSize() : 0;
206 } 218 }
207 219
208 int OncNetworkParser::GetCertificatesSize() const { 220 int OncNetworkParser::GetCertificatesSize() const {
209 return certificates_ ? certificates_->GetSize() : 0; 221 return certificates_ ? certificates_->GetSize() : 0;
210 } 222 }
211 223
224 Network* OncNetworkParser::ParseNetwork(int n) {
225 if (!network_configs_)
226 return NULL;
227 DictionaryValue* info = NULL;
228 if (!network_configs_->GetDictionary(n, &info))
229 return NULL;
230 if (VLOG_IS_ON(2)) {
231 std::string network_json;
232 base::JSONWriter::Write(static_cast<base::Value*>(info),
233 true, &network_json);
234 VLOG(2) << "Parsing network at index " << n
235 << ": " << network_json;
236 }
237
238 return CreateNetworkFromInfo(std::string(), *info);
239 }
240
212 bool OncNetworkParser::ParseCertificate(int cert_index) { 241 bool OncNetworkParser::ParseCertificate(int cert_index) {
213 CHECK(certificates_); 242 CHECK(certificates_);
214 CHECK(static_cast<size_t>(cert_index) < certificates_->GetSize()); 243 CHECK(static_cast<size_t>(cert_index) < certificates_->GetSize());
215 CHECK(cert_index >= 0); 244 CHECK(cert_index >= 0);
216 base::DictionaryValue* certificate = NULL; 245 base::DictionaryValue* certificate = NULL;
217 certificates_->GetDictionary(cert_index, &certificate); 246 certificates_->GetDictionary(cert_index, &certificate);
218 CHECK(certificate); 247 CHECK(certificate);
219 248
220 if (VLOG_IS_ON(2)) { 249 if (VLOG_IS_ON(2)) {
221 std::string certificate_json; 250 std::string certificate_json;
(...skipping 27 matching lines...) Expand all
249 } 278 }
250 if (cert_type == "Client") { 279 if (cert_type == "Client") {
251 return ParseClientCertificate(cert_index, certificate); 280 return ParseClientCertificate(cert_index, certificate);
252 } 281 }
253 282
254 LOG(WARNING) << "ONC File: certificate of unknown type: " << cert_type 283 LOG(WARNING) << "ONC File: certificate of unknown type: " << cert_type
255 << " at index " << cert_index; 284 << " at index " << cert_index;
256 return false; 285 return false;
257 } 286 }
258 287
259 Network* OncNetworkParser::ParseNetwork(int n) {
260 if (!network_configs_)
261 return NULL;
262 DictionaryValue* info = NULL;
263 if (!network_configs_->GetDictionary(n, &info))
264 return NULL;
265 if (VLOG_IS_ON(2)) {
266 std::string network_json;
267 base::JSONWriter::Write(static_cast<base::Value*>(info),
268 true, &network_json);
269 VLOG(2) << "Parsing network at index " << n
270 << ": " << network_json;
271 }
272
273 return CreateNetworkFromInfo(std::string(), *info);
274 }
275
276 Network* OncNetworkParser::CreateNetworkFromInfo( 288 Network* OncNetworkParser::CreateNetworkFromInfo(
277 const std::string& service_path, 289 const std::string& service_path,
278 const DictionaryValue& info) { 290 const DictionaryValue& info) {
279 ConnectionType type = ParseTypeFromDictionary(info); 291 ConnectionType type = ParseTypeFromDictionary(info);
280 if (type == TYPE_UNKNOWN) // Return NULL if cannot parse network type. 292 if (type == TYPE_UNKNOWN) // Return NULL if cannot parse network type.
281 return NULL; 293 return NULL;
282 scoped_ptr<Network> network(CreateNewNetwork(type, service_path)); 294 scoped_ptr<Network> network(CreateNewNetwork(type, service_path));
295
296 // Initialize UI data.
297 NetworkUIData ui_data;
298 ui_data.set_onc_source(onc_source_);
299 ui_data.FillDictionary(network->ui_data());
300
301 // Parse all properties recursively.
283 if (!ParseNestedObject(network.get(), 302 if (!ParseNestedObject(network.get(),
284 "NetworkConfiguration", 303 "NetworkConfiguration",
285 static_cast<const base::Value&>(info), 304 static_cast<const base::Value&>(info),
286 network_configuration_signature, 305 network_configuration_signature,
287 ParseNetworkConfigurationValue)) { 306 ParseNetworkConfigurationValue)) {
288 LOG(WARNING) << "Network " << network->name() << " had problems."; 307 LOG(WARNING) << "Network " << network->name() << " had problems.";
289 return NULL; 308 return NULL;
290 } 309 }
310
311 // Update the UI data property.
312 std::string ui_data_json;
313 base::JSONWriter::Write(network->ui_data(), false, &ui_data_json);
314 base::StringValue ui_data_string_value(ui_data_json);
315 network->UpdatePropertyMap(PROPERTY_INDEX_UI_DATA, ui_data_string_value);
316
291 if (VLOG_IS_ON(2)) { 317 if (VLOG_IS_ON(2)) {
292 VLOG(2) << "Created Network '" << network->name() 318 VLOG(2) << "Created Network '" << network->name()
293 << "' from info. Path:" << service_path 319 << "' from info. Path:" << service_path
294 << " Type:" << ConnectionTypeToString(type); 320 << " Type:" << ConnectionTypeToString(type);
295 } 321 }
322
296 return network.release(); 323 return network.release();
297 } 324 }
298 325
299 Network* OncNetworkParser::CreateNewNetwork( 326 Network* OncNetworkParser::CreateNewNetwork(
300 ConnectionType type, const std::string& service_path) { 327 ConnectionType type, const std::string& service_path) {
301 Network* network = NetworkParser::CreateNewNetwork(type, service_path); 328 Network* network = NetworkParser::CreateNewNetwork(type, service_path);
302 if (network) { 329 if (network) {
303 if (type == TYPE_WIFI) 330 if (type == TYPE_WIFI)
304 network->SetNetworkParser(new OncWifiNetworkParser()); 331 network->SetNetworkParser(new OncWifiNetworkParser());
305 else if (type == TYPE_VPN) 332 else if (type == TYPE_VPN)
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 << " (error " << net::ErrorToString(result) << ")."; 464 << " (error " << net::ErrorToString(result) << ").";
438 return false; 465 return false;
439 } 466 }
440 VLOG(2) << "Successfully imported client certificate at index " 467 VLOG(2) << "Successfully imported client certificate at index "
441 << cert_index; 468 << cert_index;
442 return true; 469 return true;
443 } 470 }
444 471
445 bool OncNetworkParser::ParseNestedObject(Network* network, 472 bool OncNetworkParser::ParseNestedObject(Network* network,
446 const std::string& onc_type, 473 const std::string& onc_type,
447 const base::Value& value, 474 const base::Value& value,
stevenjb 2011/12/08 02:26:35 |value| here is an ONC dictionary entry, yes? We s
448 OncValueSignature* signature, 475 OncValueSignature* signature,
449 ParserPointer parser) { 476 ParserPointer parser) {
450 bool any_errors = false; 477 bool any_errors = false;
451 if (!value.IsType(base::Value::TYPE_DICTIONARY)) { 478 if (!value.IsType(base::Value::TYPE_DICTIONARY)) {
452 VLOG(1) << network->name() << ": expected object of type " << onc_type; 479 VLOG(1) << network->name() << ": expected object of type " << onc_type;
453 return false; 480 return false;
454 } 481 }
455 VLOG(2) << "Parsing nested object of type " << onc_type; 482 VLOG(2) << "Parsing nested object of type " << onc_type;
456 const DictionaryValue* dict = NULL; 483 const DictionaryValue* dict = NULL;
457 value.GetAsDictionary(&dict); 484 value.GetAsDictionary(&dict);
(...skipping 22 matching lines...) Expand all
480 } 507 }
481 PropertyIndex index = signature[field_index].index; 508 PropertyIndex index = signature[field_index].index;
482 // We need to UpdatePropertyMap now since parser might want to 509 // We need to UpdatePropertyMap now since parser might want to
483 // change the mapped value. 510 // change the mapped value.
484 network->UpdatePropertyMap(index, *inner_value); 511 network->UpdatePropertyMap(index, *inner_value);
485 if (!parser(this, index, *inner_value, network)) { 512 if (!parser(this, index, *inner_value, network)) {
486 VLOG(1) << network->name() << ": problem(s) with field: " << key; 513 VLOG(1) << network->name() << ": problem(s) with field: " << key;
487 any_errors = true; 514 any_errors = true;
488 continue; 515 continue;
489 } 516 }
517
490 if (VLOG_IS_ON(2)) { 518 if (VLOG_IS_ON(2)) {
491 std::string value_json; 519 std::string value_json;
492 base::JSONWriter::Write(inner_value, true, &value_json); 520 base::JSONWriter::Write(inner_value, true, &value_json);
493 VLOG(2) << network->name() << ": Successfully parsed [" << key 521 VLOG(2) << network->name() << ": Successfully parsed [" << key
494 << "(" << index << ")] = " << value_json; 522 << "(" << index << ")] = " << value_json;
495 } 523 }
496 } 524 }
525
526 ParseUIData(network, dict, signature);
527
497 return !any_errors; 528 return !any_errors;
498 } 529 }
499 530
500 // static 531 // static
501 bool OncNetworkParser::CheckNetworkType(Network* network, 532 bool OncNetworkParser::CheckNetworkType(Network* network,
502 ConnectionType expected, 533 ConnectionType expected,
503 const std::string& onc_type) { 534 const std::string& onc_type) {
504 if (expected != network->type()) { 535 if (expected != network->type()) {
505 VLOG(2) << network->name() 536 VLOG(2) << network->name()
506 << ": " << onc_type << " field unexpected for this type network"; 537 << ": " << onc_type << " field unexpected for this type network";
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 case PROPERTY_INDEX_GUID: 614 case PROPERTY_INDEX_GUID:
584 case PROPERTY_INDEX_NAME: 615 case PROPERTY_INDEX_NAME:
585 // Fall back to generic parser for these. 616 // Fall back to generic parser for these.
586 return parser->ParseValue(index, value, network); 617 return parser->ParseValue(index, value, network);
587 default: 618 default:
588 break; 619 break;
589 } 620 }
590 return false; 621 return false;
591 } 622 }
592 623
624 void OncNetworkParser::ParseUIData(Network* network,
625 const base::DictionaryValue* dict,
626 OncValueSignature* signature) const {
stevenjb 2011/12/08 02:26:35 |signature| is a list of signatures, yes, not a po
627 // Collect the set of recommended properties.
628 std::set<std::string> recommended;
629 bool all_recommended = false;
630 base::ListValue* recommended_list = NULL;
631 if (dict->GetList("Recommended", &recommended_list)) {
632 for (base::ListValue::const_iterator entry(recommended_list->begin());
633 entry != recommended_list->end(); ++entry) {
634 std::string entry_string;
635 if ((*entry)->GetAsString(&entry_string)) {
636 if (entry_string == ".") {
637 all_recommended = true;
638 break;
639 } else {
640 recommended.insert(entry_string);
641 }
642 } else {
643 LOG(WARNING) << "Entries in the recommended list should be strings!";
644 }
645 }
646 }
647
648 // Do a pass over |signature|, filling in UI data where applicable.
649 NetworkUIData ui_data;
650 for (int i = 0; signature[i].field != NULL; ++i) {
651 if (!signature[i].ui_data_key)
652 continue;
653
654 bool controlled_by_policy =
655 (onc_source_ == NetworkUIData::ONC_SOURCE_DEVICE_POLICY ||
656 onc_source_ == NetworkUIData::ONC_SOURCE_USER_POLICY) &&
657 !all_recommended &&
kmixter1 2011/12/06 12:52:37 I was thinking "." meant something a little differ
Mattias Nissler (ping if slow) 2011/12/06 13:37:59 Ah, so I didn't understand what your intention wit
kmixter1 2011/12/07 23:08:29 I added "." just for completeness in the specifica
658 recommended.find(signature[i].ui_data_key) == recommended.end();
stevenjb 2011/12/08 02:26:35 I'm confused by this. Above, we appear to be filli
659 const Value* default_value = NULL;
660 network->GetProperty(signature[i].index, &default_value);
661 NetworkPropertyUIData property_ui_data(
662 controlled_by_policy ? NetworkPropertyUIData::CONTROLLER_POLICY :
663 NetworkPropertyUIData::CONTROLLER_USER,
664 default_value ? default_value->DeepCopy() : NULL);
665 ui_data.SetProperty(signature[i].ui_data_key, property_ui_data);
stevenjb 2011/12/08 02:26:35 I can see why it is convenient to save this off, a
666 }
667
668 // Merge the result into the network-level |ui_data| dictionary.
669 DictionaryValue ui_data_dict;
670 ui_data.FillDictionary(&ui_data_dict);
671 network->ui_data()->MergeDictionary(&ui_data_dict);
672 }
673
593 // -------------------- OncWirelessNetworkParser -------------------- 674 // -------------------- OncWirelessNetworkParser --------------------
594 675
595 OncWirelessNetworkParser::OncWirelessNetworkParser() {} 676 OncWirelessNetworkParser::OncWirelessNetworkParser() {}
596 OncWirelessNetworkParser::~OncWirelessNetworkParser() {} 677 OncWirelessNetworkParser::~OncWirelessNetworkParser() {}
597 678
598 // -------------------- OncWifiNetworkParser -------------------- 679 // -------------------- OncWifiNetworkParser --------------------
599 680
600 OncWifiNetworkParser::OncWifiNetworkParser() {} 681 OncWifiNetworkParser::OncWifiNetworkParser() {}
601 682
602 OncWifiNetworkParser::~OncWifiNetworkParser() {} 683 OncWifiNetworkParser::~OncWifiNetworkParser() {}
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 // on the value of AuthenticationType. 1117 // on the value of AuthenticationType.
1037 { "L2TP-IPsec", PROVIDER_TYPE_L2TP_IPSEC_PSK }, 1118 { "L2TP-IPsec", PROVIDER_TYPE_L2TP_IPSEC_PSK },
1038 { "OpenVPN", PROVIDER_TYPE_OPEN_VPN }, 1119 { "OpenVPN", PROVIDER_TYPE_OPEN_VPN },
1039 }; 1120 };
1040 CR_DEFINE_STATIC_LOCAL(EnumMapper<ProviderType>, parser, 1121 CR_DEFINE_STATIC_LOCAL(EnumMapper<ProviderType>, parser,
1041 (table, arraysize(table), PROVIDER_TYPE_MAX)); 1122 (table, arraysize(table), PROVIDER_TYPE_MAX));
1042 return parser.Get(type); 1123 return parser.Get(type);
1043 } 1124 }
1044 1125
1045 } // namespace chromeos 1126 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698