| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/chromeos/cros/network_ui_data.h" | |
| 6 | |
| 7 #include "base/logging.h" | |
| 8 #include "chrome/browser/chromeos/cros/network_library.h" | |
| 9 | |
| 10 namespace chromeos { | |
| 11 | |
| 12 // Top-level UI data dictionary keys. | |
| 13 const char NetworkUIData::kKeyONCSource[] = "onc_source"; | |
| 14 const char NetworkUIData::kKeyCertificatePattern[] = "certificate_pattern"; | |
| 15 const char NetworkUIData::kKeyCertificateType[] = "certificate_type"; | |
| 16 | |
| 17 // Property names for per-property data stored under |kKeyProperties|. | |
| 18 const EnumMapper<onc::ONCSource>::Pair | |
| 19 NetworkUIData::kONCSourceTable[] = { | |
| 20 { "user_import", onc::ONC_SOURCE_USER_IMPORT }, | |
| 21 { "device_policy", onc::ONC_SOURCE_DEVICE_POLICY }, | |
| 22 { "user_policy", onc::ONC_SOURCE_USER_POLICY }, | |
| 23 }; | |
| 24 | |
| 25 // Property names for per-property data stored under |kKeyProperties|. | |
| 26 const EnumMapper<ClientCertType>::Pair | |
| 27 NetworkUIData::kClientCertTable[] = { | |
| 28 { "none", CLIENT_CERT_TYPE_NONE }, | |
| 29 { "pattern", CLIENT_CERT_TYPE_PATTERN }, | |
| 30 { "ref", CLIENT_CERT_TYPE_REF }, | |
| 31 }; | |
| 32 | |
| 33 // Property names for the per-property dictionary. | |
| 34 const char NetworkPropertyUIData::kKeyController[] = "controller"; | |
| 35 const char NetworkPropertyUIData::kKeyDefaultValue[] = "default_value"; | |
| 36 | |
| 37 NetworkUIData::NetworkUIData() | |
| 38 : onc_source_(onc::ONC_SOURCE_NONE), | |
| 39 certificate_type_(CLIENT_CERT_TYPE_NONE) { | |
| 40 } | |
| 41 | |
| 42 NetworkUIData::NetworkUIData(const DictionaryValue& dict) { | |
| 43 std::string source; | |
| 44 if (dict.GetString(kKeyONCSource, &source)) { | |
| 45 onc_source_ = GetONCSourceMapper().Get(source); | |
| 46 } else { | |
| 47 onc_source_ = onc::ONC_SOURCE_NONE; | |
| 48 } | |
| 49 const DictionaryValue* cert_dict = NULL; | |
| 50 if (dict.GetDictionary(kKeyCertificatePattern, &cert_dict) && cert_dict) | |
| 51 certificate_pattern_.CopyFromDictionary(*cert_dict); | |
| 52 std::string type_string; | |
| 53 if (dict.GetString(kKeyCertificateType, &type_string)) { | |
| 54 certificate_type_ = GetClientCertMapper().Get(type_string); | |
| 55 } else { | |
| 56 certificate_type_ = CLIENT_CERT_TYPE_NONE; | |
| 57 } | |
| 58 DCHECK(certificate_type_ != CLIENT_CERT_TYPE_PATTERN || | |
| 59 (certificate_type_ == CLIENT_CERT_TYPE_PATTERN && | |
| 60 !certificate_pattern_.Empty())); | |
| 61 } | |
| 62 | |
| 63 NetworkUIData::~NetworkUIData() { | |
| 64 } | |
| 65 | |
| 66 void NetworkUIData::FillDictionary(base::DictionaryValue* dict) const { | |
| 67 dict->Clear(); | |
| 68 | |
| 69 std::string source_string(GetONCSourceMapper().GetKey(onc_source_)); | |
| 70 if (!source_string.empty()) | |
| 71 dict->SetString(kKeyONCSource, source_string); | |
| 72 std::string type_string(GetClientCertMapper().GetKey(certificate_type_)); | |
| 73 switch (certificate_type_) { | |
| 74 case CLIENT_CERT_TYPE_REF: | |
| 75 dict->SetString(kKeyCertificateType, "ref"); | |
| 76 break; | |
| 77 case CLIENT_CERT_TYPE_PATTERN: | |
| 78 dict->SetString(kKeyCertificateType, "pattern"); | |
| 79 if (!certificate_pattern_.Empty()) { | |
| 80 dict->Set(kKeyCertificatePattern, | |
| 81 certificate_pattern_.CreateAsDictionary()); | |
| 82 } | |
| 83 case CLIENT_CERT_TYPE_NONE: | |
| 84 default: | |
| 85 break; | |
| 86 } | |
| 87 } | |
| 88 | |
| 89 // static | |
| 90 EnumMapper<onc::ONCSource>& NetworkUIData::GetONCSourceMapper() { | |
| 91 CR_DEFINE_STATIC_LOCAL(EnumMapper<onc::ONCSource>, mapper, | |
| 92 (kONCSourceTable, arraysize(kONCSourceTable), | |
| 93 onc::ONC_SOURCE_NONE)); | |
| 94 return mapper; | |
| 95 } | |
| 96 | |
| 97 // static | |
| 98 EnumMapper<ClientCertType>& NetworkUIData::GetClientCertMapper() { | |
| 99 CR_DEFINE_STATIC_LOCAL(EnumMapper<ClientCertType>, mapper, | |
| 100 (kClientCertTable, arraysize(kClientCertTable), | |
| 101 CLIENT_CERT_TYPE_NONE)); | |
| 102 return mapper; | |
| 103 } | |
| 104 | |
| 105 NetworkPropertyUIData::NetworkPropertyUIData() | |
| 106 : controller_(CONTROLLER_USER) { | |
| 107 } | |
| 108 | |
| 109 NetworkPropertyUIData::~NetworkPropertyUIData() { | |
| 110 } | |
| 111 | |
| 112 NetworkPropertyUIData::NetworkPropertyUIData( | |
| 113 const NetworkUIData& ui_data) { | |
| 114 Reset(ui_data); | |
| 115 } | |
| 116 | |
| 117 void NetworkPropertyUIData::Reset(const NetworkUIData& ui_data) { | |
| 118 default_value_.reset(); | |
| 119 controller_ = ui_data.is_managed() ? CONTROLLER_POLICY : CONTROLLER_USER; | |
| 120 } | |
| 121 | |
| 122 void NetworkPropertyUIData::ParseOncProperty( | |
| 123 const NetworkUIData& ui_data, | |
| 124 const base::DictionaryValue* onc, | |
| 125 const std::string& property_key) { | |
| 126 Reset(ui_data); | |
| 127 if (!onc || controller_ == CONTROLLER_USER) | |
| 128 return; | |
| 129 | |
| 130 size_t pos = property_key.find_last_of('.'); | |
| 131 std::string recommended_property_key; | |
| 132 std::string property_basename(property_key); | |
| 133 if (pos != std::string::npos) { | |
| 134 recommended_property_key = property_key.substr(0, pos + 1); | |
| 135 property_basename = property_key.substr(pos + 1); | |
| 136 } | |
| 137 recommended_property_key += "Recommended"; | |
| 138 | |
| 139 const base::ListValue* recommended_keys = NULL; | |
| 140 if (onc->GetList(recommended_property_key, &recommended_keys)) { | |
| 141 base::StringValue basename_value(property_basename); | |
| 142 if (recommended_keys->Find(basename_value) != recommended_keys->end()) { | |
| 143 controller_ = CONTROLLER_USER; | |
| 144 const base::Value* default_value = NULL; | |
| 145 if (onc->Get(property_key, &default_value)) | |
| 146 default_value_.reset(default_value->DeepCopy()); | |
| 147 } | |
| 148 } | |
| 149 } | |
| 150 | |
| 151 } // namespace chromeos | |
| OLD | NEW |