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 |