OLD | NEW |
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 "net/http/transport_security_persister.h" | 5 #include "net/http/transport_security_persister.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 bool dirtied = false; | 205 bool dirtied = false; |
206 | 206 |
207 for (base::DictionaryValue::Iterator i(*dict_value); | 207 for (base::DictionaryValue::Iterator i(*dict_value); |
208 !i.IsAtEnd(); i.Advance()) { | 208 !i.IsAtEnd(); i.Advance()) { |
209 const base::DictionaryValue* parsed = NULL; | 209 const base::DictionaryValue* parsed = NULL; |
210 if (!i.value().GetAsDictionary(&parsed)) { | 210 if (!i.value().GetAsDictionary(&parsed)) { |
211 LOG(WARNING) << "Could not parse entry " << i.key() << "; skipping entry"; | 211 LOG(WARNING) << "Could not parse entry " << i.key() << "; skipping entry"; |
212 continue; | 212 continue; |
213 } | 213 } |
214 | 214 |
215 std::string mode_string; | |
216 double expiry; | |
217 double dynamic_spki_hashes_expiry = 0.0; | |
218 TransportSecurityState::DomainState domain_state; | 215 TransportSecurityState::DomainState domain_state; |
219 | 216 |
220 // kIncludeSubdomains is a legacy synonym for kStsIncludeSubdomains and | 217 // kIncludeSubdomains is a legacy synonym for kStsIncludeSubdomains and |
221 // kPkpIncludeSubdomains. Parse at least one of these properties, | 218 // kPkpIncludeSubdomains. Parse at least one of these properties, |
222 // preferably the new ones. | 219 // preferably the new ones. |
223 bool include_subdomains = false; | 220 bool include_subdomains = false; |
224 bool parsed_include_subdomains = parsed->GetBoolean(kIncludeSubdomains, | 221 bool parsed_include_subdomains = parsed->GetBoolean(kIncludeSubdomains, |
225 &include_subdomains); | 222 &include_subdomains); |
226 domain_state.sts.include_subdomains = include_subdomains; | 223 domain_state.sts.include_subdomains = include_subdomains; |
227 domain_state.pkp.include_subdomains = include_subdomains; | 224 domain_state.pkp.include_subdomains = include_subdomains; |
228 if (parsed->GetBoolean(kStsIncludeSubdomains, &include_subdomains)) { | 225 if (parsed->GetBoolean(kStsIncludeSubdomains, &include_subdomains)) { |
229 domain_state.sts.include_subdomains = include_subdomains; | 226 domain_state.sts.include_subdomains = include_subdomains; |
230 parsed_include_subdomains = true; | 227 parsed_include_subdomains = true; |
231 } | 228 } |
232 if (parsed->GetBoolean(kPkpIncludeSubdomains, &include_subdomains)) { | 229 if (parsed->GetBoolean(kPkpIncludeSubdomains, &include_subdomains)) { |
233 domain_state.pkp.include_subdomains = include_subdomains; | 230 domain_state.pkp.include_subdomains = include_subdomains; |
234 parsed_include_subdomains = true; | 231 parsed_include_subdomains = true; |
235 } | 232 } |
236 | 233 |
| 234 std::string mode_string; |
| 235 double expiry = 0; |
237 if (!parsed_include_subdomains || | 236 if (!parsed_include_subdomains || |
238 !parsed->GetString(kMode, &mode_string) || | 237 !parsed->GetString(kMode, &mode_string) || |
239 !parsed->GetDouble(kExpiry, &expiry)) { | 238 !parsed->GetDouble(kExpiry, &expiry)) { |
240 LOG(WARNING) << "Could not parse some elements of entry " << i.key() | 239 LOG(WARNING) << "Could not parse some elements of entry " << i.key() |
241 << "; skipping entry"; | 240 << "; skipping entry"; |
242 continue; | 241 continue; |
243 } | 242 } |
244 | 243 |
245 // Don't fail if this key is not present. | 244 // Don't fail if this key is not present. |
| 245 double dynamic_spki_hashes_expiry = 0; |
246 parsed->GetDouble(kDynamicSPKIHashesExpiry, | 246 parsed->GetDouble(kDynamicSPKIHashesExpiry, |
247 &dynamic_spki_hashes_expiry); | 247 &dynamic_spki_hashes_expiry); |
248 | 248 |
249 const base::ListValue* pins_list = NULL; | 249 const base::ListValue* pins_list = NULL; |
250 if (parsed->GetList(kDynamicSPKIHashes, &pins_list)) { | 250 if (parsed->GetList(kDynamicSPKIHashes, &pins_list)) { |
251 SPKIHashesFromListValue(*pins_list, &domain_state.pkp.spki_hashes); | 251 SPKIHashesFromListValue(*pins_list, &domain_state.pkp.spki_hashes); |
252 } | 252 } |
253 | 253 |
254 if (mode_string == kForceHTTPS || mode_string == kStrict) { | 254 if (mode_string == kForceHTTPS || mode_string == kStrict) { |
255 domain_state.sts.upgrade_mode = | 255 domain_state.sts.upgrade_mode = |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 bool dirty = false; | 319 bool dirty = false; |
320 if (!LoadEntries(state, &dirty)) { | 320 if (!LoadEntries(state, &dirty)) { |
321 LOG(ERROR) << "Failed to deserialize state: " << state; | 321 LOG(ERROR) << "Failed to deserialize state: " << state; |
322 return; | 322 return; |
323 } | 323 } |
324 if (dirty) | 324 if (dirty) |
325 StateIsDirty(transport_security_state_); | 325 StateIsDirty(transport_security_state_); |
326 } | 326 } |
327 | 327 |
328 } // namespace net | 328 } // namespace net |
OLD | NEW |