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

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

Issue 370623002: Remove most of NetworkUIData. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed yet-another unused function. Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « chromeos/network/network_ui_data.h ('k') | chromeos/network/network_ui_data_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_ui_data.h" 5 #include "chromeos/network/network_ui_data.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "chromeos/network/onc/onc_signature.h" 9 #include "components/onc/onc_constants.h"
10 10
11 namespace chromeos { 11 namespace chromeos {
12 12
13 // Top-level UI data dictionary keys. 13 // Top-level UI data dictionary keys.
14 const char NetworkUIData::kKeyONCSource[] = "onc_source"; 14 const char NetworkUIData::kKeyONCSource[] = "onc_source";
15 const char NetworkUIData::kKeyCertificatePattern[] = "certificate_pattern";
16 const char NetworkUIData::kKeyCertificateType[] = "certificate_type";
17 const char NetworkUIData::kKeyUserSettings[] = "user_settings"; 15 const char NetworkUIData::kKeyUserSettings[] = "user_settings";
18 const char NetworkUIData::kONCSourceUserImport[] = "user_import"; 16 const char NetworkUIData::kONCSourceUserImport[] = "user_import";
19 const char NetworkUIData::kONCSourceDevicePolicy[] = "device_policy"; 17 const char NetworkUIData::kONCSourceDevicePolicy[] = "device_policy";
20 const char NetworkUIData::kONCSourceUserPolicy[] = "user_policy"; 18 const char NetworkUIData::kONCSourceUserPolicy[] = "user_policy";
21 19
22 namespace { 20 namespace {
23 21
24 template <typename Enum> 22 template <typename Enum>
25 struct StringEnumEntry { 23 struct StringEnumEntry {
26 const char* string; 24 const char* string;
27 Enum enum_value; 25 Enum enum_value;
28 }; 26 };
29 27
30 const StringEnumEntry< ::onc::ONCSource> kONCSourceTable[] = { 28 const StringEnumEntry< ::onc::ONCSource> kONCSourceTable[] = {
31 { NetworkUIData::kONCSourceUserImport, ::onc::ONC_SOURCE_USER_IMPORT }, 29 { NetworkUIData::kONCSourceUserImport, ::onc::ONC_SOURCE_USER_IMPORT },
32 { NetworkUIData::kONCSourceDevicePolicy, ::onc::ONC_SOURCE_DEVICE_POLICY }, 30 { NetworkUIData::kONCSourceDevicePolicy, ::onc::ONC_SOURCE_DEVICE_POLICY },
33 { NetworkUIData::kONCSourceUserPolicy, ::onc::ONC_SOURCE_USER_POLICY } 31 { NetworkUIData::kONCSourceUserPolicy, ::onc::ONC_SOURCE_USER_POLICY }
34 }; 32 };
35 33
36 const StringEnumEntry<ClientCertType> kClientCertTable[] = {
37 { "none", CLIENT_CERT_TYPE_NONE },
38 { "pattern", CLIENT_CERT_TYPE_PATTERN },
39 { "ref", CLIENT_CERT_TYPE_REF }
40 };
41
42 // Converts |enum_value| to the corresponding string according to |table|. If no 34 // Converts |enum_value| to the corresponding string according to |table|. If no
43 // enum value of the table matches (which can only occur if incorrect casting 35 // enum value of the table matches (which can only occur if incorrect casting
44 // was used to obtain |enum_value|), returns an empty string instead. 36 // was used to obtain |enum_value|), returns an empty string instead.
45 template <typename Enum, int N> 37 template <typename Enum, int N>
46 std::string EnumToString(const StringEnumEntry<Enum>(& table)[N], 38 std::string EnumToString(const StringEnumEntry<Enum>(& table)[N],
47 Enum enum_value) { 39 Enum enum_value) {
48 for (int i = 0; i < N; ++i) { 40 for (int i = 0; i < N; ++i) {
49 if (table[i].enum_value == enum_value) 41 if (table[i].enum_value == enum_value)
50 return table[i].string; 42 return table[i].string;
51 } 43 }
52 return std::string(); 44 return std::string();
53 } 45 }
54 46
55 // Converts |str| to the corresponding enum value according to |table|. If no 47 // Converts |str| to the corresponding enum value according to |table|. If no
56 // string of the table matches, returns |fallback| instead. 48 // string of the table matches, returns |fallback| instead.
57 template<typename Enum, int N> 49 template<typename Enum, int N>
58 Enum StringToEnum(const StringEnumEntry<Enum>(& table)[N], 50 Enum StringToEnum(const StringEnumEntry<Enum>(& table)[N],
59 const std::string& str, 51 const std::string& str,
60 Enum fallback) { 52 Enum fallback) {
61 for (int i = 0; i < N; ++i) { 53 for (int i = 0; i < N; ++i) {
62 if (table[i].string == str) 54 if (table[i].string == str)
63 return table[i].enum_value; 55 return table[i].enum_value;
64 } 56 }
65 return fallback; 57 return fallback;
66 } 58 }
67 59
68 } // namespace 60 } // namespace
69 61
70 NetworkUIData::NetworkUIData() 62 NetworkUIData::NetworkUIData() : onc_source_(::onc::ONC_SOURCE_NONE) {
71 : onc_source_(::onc::ONC_SOURCE_NONE),
72 certificate_type_(CLIENT_CERT_TYPE_NONE) {
73 } 63 }
74 64
75 NetworkUIData::NetworkUIData(const NetworkUIData& other) { 65 NetworkUIData::NetworkUIData(const NetworkUIData& other) {
76 *this = other; 66 *this = other;
77 } 67 }
78 68
79 NetworkUIData& NetworkUIData::operator=(const NetworkUIData& other) { 69 NetworkUIData& NetworkUIData::operator=(const NetworkUIData& other) {
80 certificate_pattern_ = other.certificate_pattern_;
81 onc_source_ = other.onc_source_; 70 onc_source_ = other.onc_source_;
82 certificate_type_ = other.certificate_type_;
83 if (other.user_settings_) 71 if (other.user_settings_)
84 user_settings_.reset(other.user_settings_->DeepCopy()); 72 user_settings_.reset(other.user_settings_->DeepCopy());
85 policy_guid_ = other.policy_guid_;
86 return *this; 73 return *this;
87 } 74 }
88 75
89 NetworkUIData::NetworkUIData(const base::DictionaryValue& dict) { 76 NetworkUIData::NetworkUIData(const base::DictionaryValue& dict) {
90 std::string source; 77 std::string source;
91 dict.GetString(kKeyONCSource, &source); 78 dict.GetString(kKeyONCSource, &source);
92 onc_source_ = StringToEnum(kONCSourceTable, source, ::onc::ONC_SOURCE_NONE); 79 onc_source_ = StringToEnum(kONCSourceTable, source, ::onc::ONC_SOURCE_NONE);
93 80
94 std::string type_string; 81 std::string type_string;
95 dict.GetString(kKeyCertificateType, &type_string);
96 certificate_type_ =
97 StringToEnum(kClientCertTable, type_string, CLIENT_CERT_TYPE_NONE);
98
99 if (certificate_type_ == CLIENT_CERT_TYPE_PATTERN) {
100 const base::DictionaryValue* cert_dict = NULL;
101 dict.GetDictionary(kKeyCertificatePattern, &cert_dict);
102 if (cert_dict)
103 certificate_pattern_.ReadFromONCDictionary(*cert_dict);
104 if (certificate_pattern_.Empty()) {
105 // This case may occur if UIData from an older CrOS version is read.
106 LOG(WARNING) << "Couldn't parse a valid certificate pattern.";
107 certificate_type_ = CLIENT_CERT_TYPE_NONE;
108 }
109 }
110 82
111 const base::DictionaryValue* user_settings = NULL; 83 const base::DictionaryValue* user_settings = NULL;
112 if (dict.GetDictionary(kKeyUserSettings, &user_settings)) 84 if (dict.GetDictionary(kKeyUserSettings, &user_settings))
113 user_settings_.reset(user_settings->DeepCopy()); 85 user_settings_.reset(user_settings->DeepCopy());
114 } 86 }
115 87
116 NetworkUIData::~NetworkUIData() { 88 NetworkUIData::~NetworkUIData() {
117 } 89 }
118 90
119 void NetworkUIData::set_user_settings(scoped_ptr<base::DictionaryValue> dict) { 91 void NetworkUIData::set_user_settings(scoped_ptr<base::DictionaryValue> dict) {
120 user_settings_ = dict.Pass(); 92 user_settings_ = dict.Pass();
121 } 93 }
122 94
123 std::string NetworkUIData::GetONCSourceAsString() const { 95 std::string NetworkUIData::GetONCSourceAsString() const {
124 return EnumToString(kONCSourceTable, onc_source_); 96 return EnumToString(kONCSourceTable, onc_source_);
125 } 97 }
126 98
127 void NetworkUIData::FillDictionary(base::DictionaryValue* dict) const { 99 void NetworkUIData::FillDictionary(base::DictionaryValue* dict) const {
128 dict->Clear(); 100 dict->Clear();
129 101
130 std::string source_string = GetONCSourceAsString(); 102 std::string source_string = GetONCSourceAsString();
131 if (!source_string.empty()) 103 if (!source_string.empty())
132 dict->SetString(kKeyONCSource, source_string); 104 dict->SetString(kKeyONCSource, source_string);
133 105
134 if (certificate_type_ != CLIENT_CERT_TYPE_NONE) {
135 std::string type_string = EnumToString(kClientCertTable, certificate_type_);
136 dict->SetString(kKeyCertificateType, type_string);
137
138 if (certificate_type_ == CLIENT_CERT_TYPE_PATTERN &&
139 !certificate_pattern_.Empty()) {
140 dict->Set(kKeyCertificatePattern,
141 certificate_pattern_.CreateONCDictionary().release());
142 }
143 }
144 if (user_settings_) 106 if (user_settings_)
145 dict->SetWithoutPathExpansion(kKeyUserSettings, 107 dict->SetWithoutPathExpansion(kKeyUserSettings,
146 user_settings_->DeepCopy()); 108 user_settings_->DeepCopy());
147 } 109 }
148 110
149 namespace {
150
151 void GetAndTranslateClientCertType(const base::DictionaryValue& onc_object,
152 NetworkUIData* ui_data) {
153 using namespace ::onc::client_cert;
154
155 std::string client_cert_type;
156 if (!onc_object.GetStringWithoutPathExpansion(kClientCertType,
157 &client_cert_type)) {
158 return;
159 }
160
161 ClientCertType type;
162 if (client_cert_type == kClientCertTypeNone) {
163 type = CLIENT_CERT_TYPE_NONE;
164 } else if (client_cert_type == kRef) {
165 type = CLIENT_CERT_TYPE_REF;
166 } else if (client_cert_type == kPattern) {
167 type = CLIENT_CERT_TYPE_PATTERN;
168 } else {
169 type = CLIENT_CERT_TYPE_NONE;
170 NOTREACHED();
171 }
172
173 ui_data->set_certificate_type(type);
174 }
175
176 void TranslateCertificatePattern(const base::DictionaryValue& onc_object,
177 NetworkUIData* ui_data) {
178 CertificatePattern pattern;
179 bool success = pattern.ReadFromONCDictionary(onc_object);
180 DCHECK(success);
181 ui_data->set_certificate_pattern(pattern);
182 }
183
184 void TranslateONCHierarchy(const onc::OncValueSignature& signature,
185 const base::DictionaryValue& onc_object,
186 NetworkUIData* ui_data) {
187 if (&signature == &onc::kCertificatePatternSignature) {
188 TranslateCertificatePattern(onc_object, ui_data);
189 } else if (&signature == &onc::kEAPSignature ||
190 &signature == &onc::kIPsecSignature ||
191 &signature == &onc::kOpenVPNSignature) {
192 GetAndTranslateClientCertType(onc_object, ui_data);
193 }
194
195 // Recurse into nested objects.
196 for (base::DictionaryValue::Iterator it(onc_object); !it.IsAtEnd();
197 it.Advance()) {
198 const base::DictionaryValue* inner_object;
199 if (!it.value().GetAsDictionary(&inner_object))
200 continue;
201
202 const onc::OncFieldSignature* field_signature =
203 GetFieldSignature(signature, it.key());
204
205 TranslateONCHierarchy(*field_signature->value_signature, *inner_object,
206 ui_data);
207 }
208 }
209
210 } // namespace
211
212 // static 111 // static
213 scoped_ptr<NetworkUIData> NetworkUIData::CreateFromONC( 112 scoped_ptr<NetworkUIData> NetworkUIData::CreateFromONC(
214 ::onc::ONCSource onc_source, 113 ::onc::ONCSource onc_source) {
215 const base::DictionaryValue& onc_network) {
216 scoped_ptr<NetworkUIData> ui_data(new NetworkUIData()); 114 scoped_ptr<NetworkUIData> ui_data(new NetworkUIData());
217 TranslateONCHierarchy(onc::kNetworkConfigurationSignature, onc_network,
218 ui_data.get());
219 115
220 ui_data->set_onc_source(onc_source); 116 ui_data->onc_source_ = onc_source;
221 117
222 return ui_data.Pass(); 118 return ui_data.Pass();
223 } 119 }
224 120
225 } // namespace chromeos 121 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/network/network_ui_data.h ('k') | chromeos/network/network_ui_data_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698