OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/ui/webui/settings/certificates_handler.h" | 5 #include "chrome/browser/ui/webui/settings/certificates_handler.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "base/strings/utf_string_conversions.h" | 23 #include "base/strings/utf_string_conversions.h" |
24 #include "base/values.h" | 24 #include "base/values.h" |
25 #include "build/build_config.h" | 25 #include "build/build_config.h" |
26 #include "chrome/browser/browser_process.h" | 26 #include "chrome/browser/browser_process.h" |
27 #include "chrome/browser/certificate_viewer.h" | 27 #include "chrome/browser/certificate_viewer.h" |
28 #include "chrome/browser/profiles/profile.h" | 28 #include "chrome/browser/profiles/profile.h" |
29 #include "chrome/browser/ui/certificate_dialogs.h" | 29 #include "chrome/browser/ui/certificate_dialogs.h" |
30 #include "chrome/browser/ui/chrome_select_file_policy.h" | 30 #include "chrome/browser/ui/chrome_select_file_policy.h" |
31 #include "chrome/browser/ui/crypto_module_password_dialog_nss.h" | 31 #include "chrome/browser/ui/crypto_module_password_dialog_nss.h" |
32 #include "chrome/browser/ui/webui/certificate_viewer_webui.h" | 32 #include "chrome/browser/ui/webui/certificate_viewer_webui.h" |
33 #include "chrome/grit/generated_resources.h" | 33 #include "chrome/grit/settings_strings.h" |
34 #include "content/public/browser/browser_thread.h" | 34 #include "content/public/browser/browser_thread.h" |
35 #include "content/public/browser/web_contents.h" | 35 #include "content/public/browser/web_contents.h" |
36 #include "grit/components_strings.h" | 36 #include "grit/components_strings.h" |
37 #include "net/base/crypto_module.h" | 37 #include "net/base/crypto_module.h" |
38 #include "net/base/net_errors.h" | 38 #include "net/base/net_errors.h" |
39 #include "net/cert/x509_certificate.h" | 39 #include "net/cert/x509_certificate.h" |
40 #include "net/der/input.h" | 40 #include "net/der/input.h" |
41 #include "net/der/parser.h" | 41 #include "net/der/parser.h" |
42 #include "ui/base/l10n/l10n_util.h" | 42 #include "ui/base/l10n/l10n_util.h" |
43 | 43 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 IMPORT_SERVER_FILE_SELECTED, | 77 IMPORT_SERVER_FILE_SELECTED, |
78 IMPORT_CA_FILE_SELECTED, | 78 IMPORT_CA_FILE_SELECTED, |
79 }; | 79 }; |
80 | 80 |
81 std::string OrgNameToId(const std::string& org) { | 81 std::string OrgNameToId(const std::string& org) { |
82 return "org-" + org; | 82 return "org-" + org; |
83 } | 83 } |
84 | 84 |
85 struct DictionaryIdComparator { | 85 struct DictionaryIdComparator { |
86 explicit DictionaryIdComparator(icu::Collator* collator) | 86 explicit DictionaryIdComparator(icu::Collator* collator) |
87 : collator_(collator) { | 87 : collator_(collator) {} |
88 } | |
89 | 88 |
90 bool operator()(const base::Value* a, | 89 bool operator()(const base::Value* a, const base::Value* b) const { |
91 const base::Value* b) const { | |
92 DCHECK(a->GetType() == base::Value::TYPE_DICTIONARY); | 90 DCHECK(a->GetType() == base::Value::TYPE_DICTIONARY); |
93 DCHECK(b->GetType() == base::Value::TYPE_DICTIONARY); | 91 DCHECK(b->GetType() == base::Value::TYPE_DICTIONARY); |
94 const base::DictionaryValue* a_dict = | 92 const base::DictionaryValue* a_dict = |
95 reinterpret_cast<const base::DictionaryValue*>(a); | 93 reinterpret_cast<const base::DictionaryValue*>(a); |
96 const base::DictionaryValue* b_dict = | 94 const base::DictionaryValue* b_dict = |
97 reinterpret_cast<const base::DictionaryValue*>(b); | 95 reinterpret_cast<const base::DictionaryValue*>(b); |
98 base::string16 a_str; | 96 base::string16 a_str; |
99 base::string16 b_str; | 97 base::string16 b_str; |
100 a_dict->GetString(kNameField, &a_str); | 98 a_dict->GetString(kNameField, &a_str); |
101 b_dict->GetString(kNameField, &b_str); | 99 b_dict->GetString(kNameField, &b_str); |
102 if (collator_ == NULL) | 100 if (collator_ == NULL) |
103 return a_str < b_str; | 101 return a_str < b_str; |
104 return base::i18n::CompareString16WithCollator(*collator_, a_str, b_str) == | 102 return base::i18n::CompareString16WithCollator(*collator_, a_str, b_str) == |
105 UCOL_LESS; | 103 UCOL_LESS; |
106 } | 104 } |
107 | 105 |
108 icu::Collator* collator_; | 106 icu::Collator* collator_; |
109 }; | 107 }; |
110 | 108 |
111 std::string NetErrorToString(int net_error) { | 109 std::string NetErrorToString(int net_error) { |
112 switch (net_error) { | 110 switch (net_error) { |
113 // TODO(mattm): handle more cases. | 111 // TODO(mattm): handle more cases. |
114 case net::ERR_IMPORT_CA_CERT_NOT_CA: | 112 case net::ERR_IMPORT_CA_CERT_NOT_CA: |
115 return l10n_util::GetStringUTF8(IDS_CERT_MANAGER_ERROR_NOT_CA); | 113 return l10n_util::GetStringUTF8( |
| 114 IDS_SETTINGS_CERTIFICATE_MANAGER_ERROR_NOT_CA); |
116 case net::ERR_IMPORT_CERT_ALREADY_EXISTS: | 115 case net::ERR_IMPORT_CERT_ALREADY_EXISTS: |
117 return l10n_util::GetStringUTF8( | 116 return l10n_util::GetStringUTF8( |
118 IDS_CERT_MANAGER_ERROR_CERT_ALREADY_EXISTS); | 117 IDS_SETTINGS_CERTIFICATE_MANAGER_ERROR_CERT_ALREADY_EXISTS); |
119 default: | 118 default: |
120 return l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR); | 119 return l10n_util::GetStringUTF8( |
| 120 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR); |
121 } | 121 } |
122 } | 122 } |
123 | 123 |
124 // Struct to bind the Equals member function to an object for use in find_if. | 124 // Struct to bind the Equals member function to an object for use in find_if. |
125 struct CertEquals { | 125 struct CertEquals { |
126 explicit CertEquals(const net::X509Certificate* cert) : cert_(cert) {} | 126 explicit CertEquals(const net::X509Certificate* cert) : cert_(cert) {} |
127 bool operator()(const scoped_refptr<net::X509Certificate> cert) const { | 127 bool operator()(const scoped_refptr<net::X509Certificate> cert) const { |
128 return cert_->Equals(cert.get()); | 128 return cert_->Equals(cert.get()); |
129 } | 129 } |
130 const net::X509Certificate* cert_; | 130 const net::X509Certificate* cert_; |
131 }; | 131 }; |
132 | 132 |
133 // Determine whether a certificate was stored with web trust by a policy. | 133 // Determine whether a certificate was stored with web trust by a policy. |
134 bool IsPolicyInstalledWithWebTrust( | 134 bool IsPolicyInstalledWithWebTrust(const net::CertificateList& web_trust_certs, |
135 const net::CertificateList& web_trust_certs, | 135 net::X509Certificate* cert) { |
136 net::X509Certificate* cert) { | |
137 return std::find_if(web_trust_certs.begin(), web_trust_certs.end(), | 136 return std::find_if(web_trust_certs.begin(), web_trust_certs.end(), |
138 CertEquals(cert)) != web_trust_certs.end(); | 137 CertEquals(cert)) != web_trust_certs.end(); |
139 } | 138 } |
140 | 139 |
141 #if defined(OS_CHROMEOS) | 140 #if defined(OS_CHROMEOS) |
142 void ShowCertificateViewerModalDialog(content::WebContents* web_contents, | 141 void ShowCertificateViewerModalDialog(content::WebContents* web_contents, |
143 gfx::NativeWindow parent, | 142 gfx::NativeWindow parent, |
144 net::X509Certificate* cert) { | 143 net::X509Certificate* cert) { |
145 CertificateViewerModalDialog* dialog = new CertificateViewerModalDialog(cert); | 144 CertificateViewerModalDialog* dialog = new CertificateViewerModalDialog(cert); |
146 dialog->Show(web_contents, parent); | 145 dialog->Show(web_contents, parent); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 ~CertIdMap() {} | 197 ~CertIdMap() {} |
199 | 198 |
200 std::string CertToId(net::X509Certificate* cert); | 199 std::string CertToId(net::X509Certificate* cert); |
201 net::X509Certificate* IdToCert(const std::string& id); | 200 net::X509Certificate* IdToCert(const std::string& id); |
202 net::X509Certificate* CallbackArgsToCert(const base::ListValue* args); | 201 net::X509Certificate* CallbackArgsToCert(const base::ListValue* args); |
203 | 202 |
204 private: | 203 private: |
205 typedef std::map<net::X509Certificate*, int32_t> CertMap; | 204 typedef std::map<net::X509Certificate*, int32_t> CertMap; |
206 | 205 |
207 // Creates an ID for cert and looks up the cert for an ID. | 206 // Creates an ID for cert and looks up the cert for an ID. |
208 IDMap<net::X509Certificate>id_map_; | 207 IDMap<net::X509Certificate> id_map_; |
209 | 208 |
210 // Finds the ID for a cert. | 209 // Finds the ID for a cert. |
211 CertMap cert_map_; | 210 CertMap cert_map_; |
212 | 211 |
213 DISALLOW_COPY_AND_ASSIGN(CertIdMap); | 212 DISALLOW_COPY_AND_ASSIGN(CertIdMap); |
214 }; | 213 }; |
215 | 214 |
216 std::string CertIdMap::CertToId(net::X509Certificate* cert) { | 215 std::string CertIdMap::CertToId(net::X509Certificate* cert) { |
217 CertMap::const_iterator iter = cert_map_.find(cert); | 216 CertMap::const_iterator iter = cert_map_.find(cert); |
218 if (iter != cert_map_.end()) | 217 if (iter != cert_map_.end()) |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 const std::string& data, | 269 const std::string& data, |
271 const WriteCallback& callback, | 270 const WriteCallback& callback, |
272 base::CancelableTaskTracker* tracker); | 271 base::CancelableTaskTracker* tracker); |
273 | 272 |
274 private: | 273 private: |
275 friend class base::RefCountedThreadSafe<FileAccessProvider>; | 274 friend class base::RefCountedThreadSafe<FileAccessProvider>; |
276 virtual ~FileAccessProvider() {} | 275 virtual ~FileAccessProvider() {} |
277 | 276 |
278 // Reads file at |path|. |saved_errno| is 0 on success or errno on failure. | 277 // Reads file at |path|. |saved_errno| is 0 on success or errno on failure. |
279 // When success, |data| has file content. | 278 // When success, |data| has file content. |
280 void DoRead(const base::FilePath& path, | 279 void DoRead(const base::FilePath& path, int* saved_errno, std::string* data); |
281 int* saved_errno, | |
282 std::string* data); | |
283 // Writes data to file at |path|. |saved_errno| is 0 on success or errno on | 280 // Writes data to file at |path|. |saved_errno| is 0 on success or errno on |
284 // failure. When success, |bytes_written| has number of bytes written. | 281 // failure. When success, |bytes_written| has number of bytes written. |
285 void DoWrite(const base::FilePath& path, | 282 void DoWrite(const base::FilePath& path, |
286 const std::string& data, | 283 const std::string& data, |
287 int* saved_errno, | 284 int* saved_errno, |
288 int* bytes_written); | 285 int* bytes_written); |
289 }; | 286 }; |
290 | 287 |
291 base::CancelableTaskTracker::TaskId FileAccessProvider::StartRead( | 288 base::CancelableTaskTracker::TaskId FileAccessProvider::StartRead( |
292 const base::FilePath& path, | 289 const base::FilePath& path, |
(...skipping 16 matching lines...) Expand all Loading... |
309 const std::string& data, | 306 const std::string& data, |
310 const WriteCallback& callback, | 307 const WriteCallback& callback, |
311 base::CancelableTaskTracker* tracker) { | 308 base::CancelableTaskTracker* tracker) { |
312 // Owned by reply callback posted below. | 309 // Owned by reply callback posted below. |
313 int* saved_errno = new int(0); | 310 int* saved_errno = new int(0); |
314 int* bytes_written = new int(0); | 311 int* bytes_written = new int(0); |
315 | 312 |
316 // Post task to file thread to write file. | 313 // Post task to file thread to write file. |
317 return tracker->PostTaskAndReply( | 314 return tracker->PostTaskAndReply( |
318 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), | 315 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), |
319 FROM_HERE, | 316 FROM_HERE, base::Bind(&FileAccessProvider::DoWrite, this, path, data, |
320 base::Bind(&FileAccessProvider::DoWrite, | 317 saved_errno, bytes_written), |
321 this, | 318 base::Bind(callback, base::Owned(saved_errno), |
322 path, | 319 base::Owned(bytes_written))); |
323 data, | |
324 saved_errno, | |
325 bytes_written), | |
326 base::Bind( | |
327 callback, base::Owned(saved_errno), base::Owned(bytes_written))); | |
328 } | 320 } |
329 | 321 |
330 void FileAccessProvider::DoRead(const base::FilePath& path, | 322 void FileAccessProvider::DoRead(const base::FilePath& path, |
331 int* saved_errno, | 323 int* saved_errno, |
332 std::string* data) { | 324 std::string* data) { |
333 bool success = base::ReadFileToString(path, data); | 325 bool success = base::ReadFileToString(path, data); |
334 *saved_errno = success ? 0 : errno; | 326 *saved_errno = success ? 0 : errno; |
335 } | 327 } |
336 | 328 |
337 void FileAccessProvider::DoWrite(const base::FilePath& path, | 329 void FileAccessProvider::DoWrite(const base::FilePath& path, |
338 const std::string& data, | 330 const std::string& data, |
339 int* saved_errno, | 331 int* saved_errno, |
340 int* bytes_written) { | 332 int* bytes_written) { |
341 *bytes_written = base::WriteFile(path, data.data(), data.size()); | 333 *bytes_written = base::WriteFile(path, data.data(), data.size()); |
342 *saved_errno = *bytes_written >= 0 ? 0 : errno; | 334 *saved_errno = *bytes_written >= 0 ? 0 : errno; |
343 } | 335 } |
344 | 336 |
345 /////////////////////////////////////////////////////////////////////////////// | 337 /////////////////////////////////////////////////////////////////////////////// |
346 // CertificatesHandler | 338 // CertificatesHandler |
347 | 339 |
348 CertificatesHandler::CertificatesHandler( | 340 CertificatesHandler::CertificatesHandler(bool show_certs_in_modal_dialog) |
349 bool show_certs_in_modal_dialog) | |
350 : show_certs_in_modal_dialog_(show_certs_in_modal_dialog), | 341 : show_certs_in_modal_dialog_(show_certs_in_modal_dialog), |
351 requested_certificate_manager_model_(false), | 342 requested_certificate_manager_model_(false), |
352 use_hardware_backed_(false), | 343 use_hardware_backed_(false), |
353 file_access_provider_(new FileAccessProvider()), | 344 file_access_provider_(new FileAccessProvider()), |
354 cert_id_map_(new CertIdMap), | 345 cert_id_map_(new CertIdMap), |
355 weak_ptr_factory_(this) {} | 346 weak_ptr_factory_(this) {} |
356 | 347 |
357 CertificatesHandler::~CertificatesHandler() { | 348 CertificatesHandler::~CertificatesHandler() {} |
358 } | |
359 | 349 |
360 void CertificatesHandler::RegisterMessages() { | 350 void CertificatesHandler::RegisterMessages() { |
361 web_ui()->RegisterMessageCallback( | 351 web_ui()->RegisterMessageCallback( |
362 "viewCertificate", | 352 "viewCertificate", base::Bind(&CertificatesHandler::HandleViewCertificate, |
363 base::Bind(&CertificatesHandler::HandleViewCertificate, | 353 base::Unretained(this))); |
364 base::Unretained(this))); | |
365 | 354 |
366 web_ui()->RegisterMessageCallback( | 355 web_ui()->RegisterMessageCallback( |
367 "getCaCertificateTrust", | 356 "getCaCertificateTrust", |
368 base::Bind(&CertificatesHandler::HandleGetCATrust, | 357 base::Bind(&CertificatesHandler::HandleGetCATrust, |
369 base::Unretained(this))); | 358 base::Unretained(this))); |
370 web_ui()->RegisterMessageCallback( | 359 web_ui()->RegisterMessageCallback( |
371 "editCaCertificateTrust", | 360 "editCaCertificateTrust", |
372 base::Bind(&CertificatesHandler::HandleEditCATrust, | 361 base::Bind(&CertificatesHandler::HandleEditCATrust, |
373 base::Unretained(this))); | 362 base::Unretained(this))); |
374 | 363 |
(...skipping 15 matching lines...) Expand all Loading... |
390 "importPersonalCertificate", | 379 "importPersonalCertificate", |
391 base::Bind(&CertificatesHandler::HandleImportPersonal, | 380 base::Bind(&CertificatesHandler::HandleImportPersonal, |
392 base::Unretained(this))); | 381 base::Unretained(this))); |
393 web_ui()->RegisterMessageCallback( | 382 web_ui()->RegisterMessageCallback( |
394 "importPersonalCertificatePasswordSelected", | 383 "importPersonalCertificatePasswordSelected", |
395 base::Bind(&CertificatesHandler::HandleImportPersonalPasswordSelected, | 384 base::Bind(&CertificatesHandler::HandleImportPersonalPasswordSelected, |
396 base::Unretained(this))); | 385 base::Unretained(this))); |
397 | 386 |
398 web_ui()->RegisterMessageCallback( | 387 web_ui()->RegisterMessageCallback( |
399 "importCaCertificate", | 388 "importCaCertificate", |
400 base::Bind(&CertificatesHandler::HandleImportCA, | 389 base::Bind(&CertificatesHandler::HandleImportCA, base::Unretained(this))); |
401 base::Unretained(this))); | |
402 web_ui()->RegisterMessageCallback( | 390 web_ui()->RegisterMessageCallback( |
403 "importCaCertificateTrustSelected", | 391 "importCaCertificateTrustSelected", |
404 base::Bind(&CertificatesHandler::HandleImportCATrustSelected, | 392 base::Bind(&CertificatesHandler::HandleImportCATrustSelected, |
405 base::Unretained(this))); | 393 base::Unretained(this))); |
406 | 394 |
407 web_ui()->RegisterMessageCallback( | 395 web_ui()->RegisterMessageCallback( |
408 "importServerCertificate", | 396 "importServerCertificate", |
409 base::Bind(&CertificatesHandler::HandleImportServer, | 397 base::Bind(&CertificatesHandler::HandleImportServer, |
410 base::Unretained(this))); | 398 base::Unretained(this))); |
411 | 399 |
(...skipping 22 matching lines...) Expand all Loading... |
434 if (service) | 422 if (service) |
435 service->GetWebTrustedCertificates(&web_trusted_certs); | 423 service->GetWebTrustedCertificates(&web_trusted_certs); |
436 #endif | 424 #endif |
437 PopulateTree("personalCerts", net::USER_CERT, web_trusted_certs); | 425 PopulateTree("personalCerts", net::USER_CERT, web_trusted_certs); |
438 PopulateTree("serverCerts", net::SERVER_CERT, web_trusted_certs); | 426 PopulateTree("serverCerts", net::SERVER_CERT, web_trusted_certs); |
439 PopulateTree("caCerts", net::CA_CERT, web_trusted_certs); | 427 PopulateTree("caCerts", net::CA_CERT, web_trusted_certs); |
440 PopulateTree("otherCerts", net::OTHER_CERT, web_trusted_certs); | 428 PopulateTree("otherCerts", net::OTHER_CERT, web_trusted_certs); |
441 } | 429 } |
442 | 430 |
443 void CertificatesHandler::FileSelected(const base::FilePath& path, | 431 void CertificatesHandler::FileSelected(const base::FilePath& path, |
444 int index, | 432 int index, |
445 void* params) { | 433 void* params) { |
446 switch (reinterpret_cast<intptr_t>(params)) { | 434 switch (reinterpret_cast<intptr_t>(params)) { |
447 case EXPORT_PERSONAL_FILE_SELECTED: | 435 case EXPORT_PERSONAL_FILE_SELECTED: |
448 ExportPersonalFileSelected(path); | 436 ExportPersonalFileSelected(path); |
449 break; | 437 break; |
450 case IMPORT_PERSONAL_FILE_SELECTED: | 438 case IMPORT_PERSONAL_FILE_SELECTED: |
451 ImportPersonalFileSelected(path); | 439 ImportPersonalFileSelected(path); |
452 break; | 440 break; |
453 case IMPORT_SERVER_FILE_SELECTED: | 441 case IMPORT_SERVER_FILE_SELECTED: |
454 ImportServerFileSelected(path); | 442 ImportServerFileSelected(path); |
455 break; | 443 break; |
(...skipping 19 matching lines...) Expand all Loading... |
475 } | 463 } |
476 } | 464 } |
477 | 465 |
478 void CertificatesHandler::HandleViewCertificate(const base::ListValue* args) { | 466 void CertificatesHandler::HandleViewCertificate(const base::ListValue* args) { |
479 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args); | 467 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args); |
480 if (!cert) | 468 if (!cert) |
481 return; | 469 return; |
482 #if defined(OS_CHROMEOS) | 470 #if defined(OS_CHROMEOS) |
483 if (show_certs_in_modal_dialog_) { | 471 if (show_certs_in_modal_dialog_) { |
484 ShowCertificateViewerModalDialog(web_ui()->GetWebContents(), | 472 ShowCertificateViewerModalDialog(web_ui()->GetWebContents(), |
485 GetParentWindow(), | 473 GetParentWindow(), cert); |
486 cert); | |
487 return; | 474 return; |
488 } | 475 } |
489 #endif | 476 #endif |
490 ShowCertificateViewer(web_ui()->GetWebContents(), GetParentWindow(), cert); | 477 ShowCertificateViewer(web_ui()->GetWebContents(), GetParentWindow(), cert); |
491 } | 478 } |
492 | 479 |
493 void CertificatesHandler::AssignWebUICallbackId(const base::ListValue* args) { | 480 void CertificatesHandler::AssignWebUICallbackId(const base::ListValue* args) { |
494 CHECK_LE(1U, args->GetSize()); | 481 CHECK_LE(1U, args->GetSize()); |
495 CHECK(webui_callback_id_.empty()); | 482 CHECK(webui_callback_id_.empty()); |
496 CHECK(args->GetString(0, &webui_callback_id_)); | 483 CHECK(args->GetString(0, &webui_callback_id_)); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 CHECK(cert); | 517 CHECK(cert); |
531 | 518 |
532 bool trust_ssl = false; | 519 bool trust_ssl = false; |
533 bool trust_email = false; | 520 bool trust_email = false; |
534 bool trust_obj_sign = false; | 521 bool trust_obj_sign = false; |
535 CHECK(args->GetBoolean(2, &trust_ssl)); | 522 CHECK(args->GetBoolean(2, &trust_ssl)); |
536 CHECK(args->GetBoolean(3, &trust_email)); | 523 CHECK(args->GetBoolean(3, &trust_email)); |
537 CHECK(args->GetBoolean(4, &trust_obj_sign)); | 524 CHECK(args->GetBoolean(4, &trust_obj_sign)); |
538 | 525 |
539 bool result = certificate_manager_model_->SetCertTrust( | 526 bool result = certificate_manager_model_->SetCertTrust( |
540 cert, | 527 cert, net::CA_CERT, |
541 net::CA_CERT, | |
542 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL + | 528 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL + |
543 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL + | 529 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL + |
544 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN); | 530 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN); |
545 if (!result) { | 531 if (!result) { |
546 // TODO(mattm): better error messages? | 532 // TODO(mattm): better error messages? |
547 RejectCallbackWithError( | 533 RejectCallbackWithError( |
548 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SET_TRUST_ERROR_TITLE), | 534 l10n_util::GetStringUTF8( |
549 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); | 535 IDS_SETTINGS_CERTIFICATE_MANAGER_SET_TRUST_ERROR_TITLE), |
| 536 l10n_util::GetStringUTF8( |
| 537 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR)); |
550 } else { | 538 } else { |
551 ResolveCallback(*base::Value::CreateNullValue()); | 539 ResolveCallback(*base::Value::CreateNullValue()); |
552 } | 540 } |
553 } | 541 } |
554 | 542 |
555 void CertificatesHandler::HandleExportPersonal(const base::ListValue* args) { | 543 void CertificatesHandler::HandleExportPersonal(const base::ListValue* args) { |
556 CHECK_EQ(2U, args->GetSize()); | 544 CHECK_EQ(2U, args->GetSize()); |
557 AssignWebUICallbackId(args); | 545 AssignWebUICallbackId(args); |
558 std::string node_id; | 546 std::string node_id; |
559 CHECK(args->GetString(1, &node_id)); | 547 CHECK(args->GetString(1, &node_id)); |
560 | 548 |
561 net::X509Certificate* cert = cert_id_map_->IdToCert(node_id); | 549 net::X509Certificate* cert = cert_id_map_->IdToCert(node_id); |
562 CHECK(cert); | 550 CHECK(cert); |
563 selected_cert_list_.push_back(cert); | 551 selected_cert_list_.push_back(cert); |
564 | 552 |
565 ui::SelectFileDialog::FileTypeInfo file_type_info; | 553 ui::SelectFileDialog::FileTypeInfo file_type_info; |
566 file_type_info.extensions.resize(1); | 554 file_type_info.extensions.resize(1); |
567 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("p12")); | 555 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("p12")); |
568 file_type_info.extension_description_overrides.push_back( | 556 file_type_info.extension_description_overrides.push_back( |
569 l10n_util::GetStringUTF16(IDS_CERT_MANAGER_PKCS12_FILES)); | 557 l10n_util::GetStringUTF16(IDS_SETTINGS_CERTIFICATE_MANAGER_PKCS12_FILES)); |
570 file_type_info.include_all_files = true; | 558 file_type_info.include_all_files = true; |
571 select_file_dialog_ = ui::SelectFileDialog::Create( | 559 select_file_dialog_ = ui::SelectFileDialog::Create( |
572 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); | 560 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); |
573 select_file_dialog_->SelectFile( | 561 select_file_dialog_->SelectFile( |
574 ui::SelectFileDialog::SELECT_SAVEAS_FILE, base::string16(), | 562 ui::SelectFileDialog::SELECT_SAVEAS_FILE, base::string16(), |
575 base::FilePath(), &file_type_info, 1, FILE_PATH_LITERAL("p12"), | 563 base::FilePath(), &file_type_info, 1, FILE_PATH_LITERAL("p12"), |
576 GetParentWindow(), | 564 GetParentWindow(), |
577 reinterpret_cast<void*>(EXPORT_PERSONAL_FILE_SELECTED)); | 565 reinterpret_cast<void*>(EXPORT_PERSONAL_FILE_SELECTED)); |
578 } | 566 } |
579 | 567 |
580 void CertificatesHandler::ExportPersonalFileSelected( | 568 void CertificatesHandler::ExportPersonalFileSelected( |
581 const base::FilePath& path) { | 569 const base::FilePath& path) { |
582 file_path_ = path; | 570 file_path_ = path; |
583 ResolveCallback(*base::Value::CreateNullValue()); | 571 ResolveCallback(*base::Value::CreateNullValue()); |
584 } | 572 } |
585 | 573 |
586 void CertificatesHandler::HandleExportPersonalPasswordSelected( | 574 void CertificatesHandler::HandleExportPersonalPasswordSelected( |
587 const base::ListValue* args) { | 575 const base::ListValue* args) { |
588 CHECK_EQ(2U, args->GetSize()); | 576 CHECK_EQ(2U, args->GetSize()); |
589 AssignWebUICallbackId(args); | 577 AssignWebUICallbackId(args); |
590 CHECK(args->GetString(1, &password_)); | 578 CHECK(args->GetString(1, &password_)); |
591 | 579 |
592 // Currently, we don't support exporting more than one at a time. If we do, | 580 // Currently, we don't support exporting more than one at a time. If we do, |
593 // this would need to either change this to use UnlockSlotsIfNecessary or | 581 // this would need to either change this to use UnlockSlotsIfNecessary or |
594 // change UnlockCertSlotIfNecessary to take a CertificateList. | 582 // change UnlockCertSlotIfNecessary to take a CertificateList. |
595 DCHECK_EQ(selected_cert_list_.size(), 1U); | 583 DCHECK_EQ(selected_cert_list_.size(), 1U); |
596 | 584 |
597 // TODO(mattm): do something smarter about non-extractable keys | 585 // TODO(mattm): do something smarter about non-extractable keys |
598 chrome::UnlockCertSlotIfNecessary( | 586 chrome::UnlockCertSlotIfNecessary( |
599 selected_cert_list_[0].get(), | 587 selected_cert_list_[0].get(), chrome::kCryptoModulePasswordCertExport, |
600 chrome::kCryptoModulePasswordCertExport, | |
601 net::HostPortPair(), // unused. | 588 net::HostPortPair(), // unused. |
602 GetParentWindow(), | 589 GetParentWindow(), |
603 base::Bind(&CertificatesHandler::ExportPersonalSlotsUnlocked, | 590 base::Bind(&CertificatesHandler::ExportPersonalSlotsUnlocked, |
604 base::Unretained(this))); | 591 base::Unretained(this))); |
605 } | 592 } |
606 | 593 |
607 void CertificatesHandler::ExportPersonalSlotsUnlocked() { | 594 void CertificatesHandler::ExportPersonalSlotsUnlocked() { |
608 std::string output; | 595 std::string output; |
609 int num_exported = certificate_manager_model_->cert_db()->ExportToPKCS12( | 596 int num_exported = certificate_manager_model_->cert_db()->ExportToPKCS12( |
610 selected_cert_list_, | 597 selected_cert_list_, password_, &output); |
611 password_, | |
612 &output); | |
613 if (!num_exported) { | 598 if (!num_exported) { |
614 RejectCallbackWithError( | 599 RejectCallbackWithError( |
615 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_PKCS12_EXPORT_ERROR_TITLE), | 600 l10n_util::GetStringUTF8( |
616 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); | 601 IDS_SETTINGS_CERTIFICATE_MANAGER_PKCS12_EXPORT_ERROR_TITLE), |
| 602 l10n_util::GetStringUTF8( |
| 603 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR)); |
617 ImportExportCleanup(); | 604 ImportExportCleanup(); |
618 return; | 605 return; |
619 } | 606 } |
620 file_access_provider_->StartWrite( | 607 file_access_provider_->StartWrite( |
621 file_path_, | 608 file_path_, output, |
622 output, | |
623 base::Bind(&CertificatesHandler::ExportPersonalFileWritten, | 609 base::Bind(&CertificatesHandler::ExportPersonalFileWritten, |
624 base::Unretained(this)), | 610 base::Unretained(this)), |
625 &tracker_); | 611 &tracker_); |
626 } | 612 } |
627 | 613 |
628 void CertificatesHandler::ExportPersonalFileWritten( | 614 void CertificatesHandler::ExportPersonalFileWritten(const int* write_errno, |
629 const int* write_errno, const int* bytes_written) { | 615 const int* bytes_written) { |
630 ImportExportCleanup(); | 616 ImportExportCleanup(); |
631 if (*write_errno) { | 617 if (*write_errno) { |
632 RejectCallbackWithError( | 618 RejectCallbackWithError( |
633 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_PKCS12_EXPORT_ERROR_TITLE), | 619 l10n_util::GetStringUTF8( |
634 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_WRITE_ERROR_FORMAT, | 620 IDS_SETTINGS_CERTIFICATE_MANAGER_PKCS12_EXPORT_ERROR_TITLE), |
635 UTF8ToUTF16( | 621 l10n_util::GetStringFUTF8( |
636 base::safe_strerror(*write_errno)))); | 622 IDS_SETTINGS_CERTIFICATE_MANAGER_WRITE_ERROR_FORMAT, |
| 623 UTF8ToUTF16(base::safe_strerror(*write_errno)))); |
637 } else { | 624 } else { |
638 ResolveCallback(*base::Value::CreateNullValue()); | 625 ResolveCallback(*base::Value::CreateNullValue()); |
639 } | 626 } |
640 } | 627 } |
641 | 628 |
642 void CertificatesHandler::HandleImportPersonal(const base::ListValue* args) { | 629 void CertificatesHandler::HandleImportPersonal(const base::ListValue* args) { |
643 CHECK_EQ(2U, args->GetSize()); | 630 CHECK_EQ(2U, args->GetSize()); |
644 AssignWebUICallbackId(args); | 631 AssignWebUICallbackId(args); |
645 CHECK(args->GetBoolean(1, &use_hardware_backed_)); | 632 CHECK(args->GetBoolean(1, &use_hardware_backed_)); |
646 | 633 |
647 ui::SelectFileDialog::FileTypeInfo file_type_info; | 634 ui::SelectFileDialog::FileTypeInfo file_type_info; |
648 file_type_info.extensions.resize(1); | 635 file_type_info.extensions.resize(1); |
649 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("p12")); | 636 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("p12")); |
650 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pfx")); | 637 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pfx")); |
651 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("crt")); | 638 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("crt")); |
652 file_type_info.extension_description_overrides.push_back( | 639 file_type_info.extension_description_overrides.push_back( |
653 l10n_util::GetStringUTF16(IDS_CERT_USAGE_SSL_CLIENT)); | 640 l10n_util::GetStringUTF16( |
| 641 IDS_SETTINGS_CERTIFICATE_MANAGER_USAGE_SSL_CLIENT)); |
654 file_type_info.include_all_files = true; | 642 file_type_info.include_all_files = true; |
655 select_file_dialog_ = ui::SelectFileDialog::Create( | 643 select_file_dialog_ = ui::SelectFileDialog::Create( |
656 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); | 644 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); |
657 select_file_dialog_->SelectFile( | 645 select_file_dialog_->SelectFile( |
658 ui::SelectFileDialog::SELECT_OPEN_FILE, base::string16(), | 646 ui::SelectFileDialog::SELECT_OPEN_FILE, base::string16(), |
659 base::FilePath(), &file_type_info, 1, FILE_PATH_LITERAL("p12"), | 647 base::FilePath(), &file_type_info, 1, FILE_PATH_LITERAL("p12"), |
660 GetParentWindow(), | 648 GetParentWindow(), |
661 reinterpret_cast<void*>(IMPORT_PERSONAL_FILE_SELECTED)); | 649 reinterpret_cast<void*>(IMPORT_PERSONAL_FILE_SELECTED)); |
662 } | 650 } |
663 | 651 |
664 void CertificatesHandler::ImportPersonalFileSelected( | 652 void CertificatesHandler::ImportPersonalFileSelected( |
665 const base::FilePath& path) { | 653 const base::FilePath& path) { |
666 file_access_provider_->StartRead( | 654 file_access_provider_->StartRead( |
667 path, base::Bind(&CertificatesHandler::ImportPersonalFileRead, | 655 path, base::Bind(&CertificatesHandler::ImportPersonalFileRead, |
668 base::Unretained(this)), | 656 base::Unretained(this)), |
669 &tracker_); | 657 &tracker_); |
670 } | 658 } |
671 | 659 |
672 void CertificatesHandler::ImportPersonalFileRead( | 660 void CertificatesHandler::ImportPersonalFileRead(const int* read_errno, |
673 const int* read_errno, const std::string* data) { | 661 const std::string* data) { |
674 if (*read_errno) { | 662 if (*read_errno) { |
675 ImportExportCleanup(); | 663 ImportExportCleanup(); |
676 RejectCallbackWithError( | 664 RejectCallbackWithError( |
677 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ERROR_TITLE), | 665 l10n_util::GetStringUTF8( |
678 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_READ_ERROR_FORMAT, | 666 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_ERROR_TITLE), |
679 UTF8ToUTF16( | 667 l10n_util::GetStringFUTF8( |
680 base::safe_strerror(*read_errno)))); | 668 IDS_SETTINGS_CERTIFICATE_MANAGER_READ_ERROR_FORMAT, |
| 669 UTF8ToUTF16(base::safe_strerror(*read_errno)))); |
681 return; | 670 return; |
682 } | 671 } |
683 | 672 |
684 file_data_ = *data; | 673 file_data_ = *data; |
685 | 674 |
686 if (CouldBePFX(file_data_)) { | 675 if (CouldBePFX(file_data_)) { |
687 ResolveCallback(base::FundamentalValue(true)); | 676 ResolveCallback(base::FundamentalValue(true)); |
688 return; | 677 return; |
689 } | 678 } |
690 | 679 |
691 // Non .p12/.pfx files are assumed to be single/chain certificates without | 680 // Non .p12/.pfx files are assumed to be single/chain certificates without |
692 // private key data. The default extension according to spec is '.crt', | 681 // private key data. The default extension according to spec is '.crt', |
693 // however other extensions are also used in some places to represent these | 682 // however other extensions are also used in some places to represent these |
694 // certificates. | 683 // certificates. |
695 int result = certificate_manager_model_->ImportUserCert(file_data_); | 684 int result = certificate_manager_model_->ImportUserCert(file_data_); |
696 ImportExportCleanup(); | 685 ImportExportCleanup(); |
697 int string_id; | 686 int string_id; |
698 switch (result) { | 687 switch (result) { |
699 case net::OK: | 688 case net::OK: |
700 ResolveCallback(base::FundamentalValue(false)); | 689 ResolveCallback(base::FundamentalValue(false)); |
701 return; | 690 return; |
702 case net::ERR_NO_PRIVATE_KEY_FOR_CERT: | 691 case net::ERR_NO_PRIVATE_KEY_FOR_CERT: |
703 string_id = IDS_CERT_MANAGER_IMPORT_MISSING_KEY; | 692 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_MISSING_KEY; |
704 break; | 693 break; |
705 case net::ERR_CERT_INVALID: | 694 case net::ERR_CERT_INVALID: |
706 string_id = IDS_CERT_MANAGER_IMPORT_INVALID_FILE; | 695 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_INVALID_FILE; |
707 break; | 696 break; |
708 default: | 697 default: |
709 string_id = IDS_CERT_MANAGER_UNKNOWN_ERROR; | 698 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR; |
710 break; | 699 break; |
711 } | 700 } |
712 RejectCallbackWithError( | 701 RejectCallbackWithError( |
713 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ERROR_TITLE), | 702 l10n_util::GetStringUTF8( |
| 703 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_ERROR_TITLE), |
714 l10n_util::GetStringUTF8(string_id)); | 704 l10n_util::GetStringUTF8(string_id)); |
715 } | 705 } |
716 | 706 |
717 void CertificatesHandler::HandleImportPersonalPasswordSelected( | 707 void CertificatesHandler::HandleImportPersonalPasswordSelected( |
718 const base::ListValue* args) { | 708 const base::ListValue* args) { |
719 CHECK_EQ(2U, args->GetSize()); | 709 CHECK_EQ(2U, args->GetSize()); |
720 AssignWebUICallbackId(args); | 710 AssignWebUICallbackId(args); |
721 CHECK(args->GetString(1, &password_)); | 711 CHECK(args->GetString(1, &password_)); |
722 | 712 |
723 if (use_hardware_backed_) { | 713 if (use_hardware_backed_) { |
724 module_ = certificate_manager_model_->cert_db()->GetPrivateModule(); | 714 module_ = certificate_manager_model_->cert_db()->GetPrivateModule(); |
725 } else { | 715 } else { |
726 module_ = certificate_manager_model_->cert_db()->GetPublicModule(); | 716 module_ = certificate_manager_model_->cert_db()->GetPublicModule(); |
727 } | 717 } |
728 | 718 |
729 net::CryptoModuleList modules; | 719 net::CryptoModuleList modules; |
730 modules.push_back(module_); | 720 modules.push_back(module_); |
731 chrome::UnlockSlotsIfNecessary( | 721 chrome::UnlockSlotsIfNecessary( |
732 modules, | 722 modules, chrome::kCryptoModulePasswordCertImport, |
733 chrome::kCryptoModulePasswordCertImport, | |
734 net::HostPortPair(), // unused. | 723 net::HostPortPair(), // unused. |
735 GetParentWindow(), | 724 GetParentWindow(), |
736 base::Bind(&CertificatesHandler::ImportPersonalSlotUnlocked, | 725 base::Bind(&CertificatesHandler::ImportPersonalSlotUnlocked, |
737 base::Unretained(this))); | 726 base::Unretained(this))); |
738 } | 727 } |
739 | 728 |
740 void CertificatesHandler::ImportPersonalSlotUnlocked() { | 729 void CertificatesHandler::ImportPersonalSlotUnlocked() { |
741 // Determine if the private key should be unextractable after the import. | 730 // Determine if the private key should be unextractable after the import. |
742 // We do this by checking the value of |use_hardware_backed_| which is set | 731 // We do this by checking the value of |use_hardware_backed_| which is set |
743 // to true if importing into a hardware module. Currently, this only happens | 732 // to true if importing into a hardware module. Currently, this only happens |
744 // for Chrome OS when the "Import and Bind" option is chosen. | 733 // for Chrome OS when the "Import and Bind" option is chosen. |
745 bool is_extractable = !use_hardware_backed_; | 734 bool is_extractable = !use_hardware_backed_; |
746 int result = certificate_manager_model_->ImportFromPKCS12( | 735 int result = certificate_manager_model_->ImportFromPKCS12( |
747 module_.get(), file_data_, password_, is_extractable); | 736 module_.get(), file_data_, password_, is_extractable); |
748 ImportExportCleanup(); | 737 ImportExportCleanup(); |
749 int string_id; | 738 int string_id; |
750 switch (result) { | 739 switch (result) { |
751 case net::OK: | 740 case net::OK: |
752 ResolveCallback(*base::Value::CreateNullValue()); | 741 ResolveCallback(*base::Value::CreateNullValue()); |
753 return; | 742 return; |
754 case net::ERR_PKCS12_IMPORT_BAD_PASSWORD: | 743 case net::ERR_PKCS12_IMPORT_BAD_PASSWORD: |
755 // TODO(mattm): if the error was a bad password, we should reshow the | 744 // TODO(mattm): if the error was a bad password, we should reshow the |
756 // password dialog after the user dismisses the error dialog. | 745 // password dialog after the user dismisses the error dialog. |
757 string_id = IDS_CERT_MANAGER_BAD_PASSWORD; | 746 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_BAD_PASSWORD; |
758 break; | 747 break; |
759 case net::ERR_PKCS12_IMPORT_INVALID_MAC: | 748 case net::ERR_PKCS12_IMPORT_INVALID_MAC: |
760 string_id = IDS_CERT_MANAGER_IMPORT_INVALID_MAC; | 749 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_INVALID_MAC; |
761 break; | 750 break; |
762 case net::ERR_PKCS12_IMPORT_INVALID_FILE: | 751 case net::ERR_PKCS12_IMPORT_INVALID_FILE: |
763 string_id = IDS_CERT_MANAGER_IMPORT_INVALID_FILE; | 752 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_INVALID_FILE; |
764 break; | 753 break; |
765 case net::ERR_PKCS12_IMPORT_UNSUPPORTED: | 754 case net::ERR_PKCS12_IMPORT_UNSUPPORTED: |
766 string_id = IDS_CERT_MANAGER_IMPORT_UNSUPPORTED; | 755 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_UNSUPPORTED; |
767 break; | 756 break; |
768 default: | 757 default: |
769 string_id = IDS_CERT_MANAGER_UNKNOWN_ERROR; | 758 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR; |
770 break; | 759 break; |
771 } | 760 } |
772 RejectCallbackWithError( | 761 RejectCallbackWithError( |
773 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ERROR_TITLE), | 762 l10n_util::GetStringUTF8( |
| 763 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_ERROR_TITLE), |
774 l10n_util::GetStringUTF8(string_id)); | 764 l10n_util::GetStringUTF8(string_id)); |
775 } | 765 } |
776 | 766 |
777 void CertificatesHandler::HandleCancelImportExportProcess( | 767 void CertificatesHandler::HandleCancelImportExportProcess( |
778 const base::ListValue* args) { | 768 const base::ListValue* args) { |
779 ImportExportCleanup(); | 769 ImportExportCleanup(); |
780 } | 770 } |
781 | 771 |
782 void CertificatesHandler::ImportExportCleanup() { | 772 void CertificatesHandler::ImportExportCleanup() { |
783 file_path_.clear(); | 773 file_path_.clear(); |
(...skipping 11 matching lines...) Expand all Loading... |
795 select_file_dialog_ = NULL; | 785 select_file_dialog_ = NULL; |
796 } | 786 } |
797 | 787 |
798 void CertificatesHandler::HandleImportServer(const base::ListValue* args) { | 788 void CertificatesHandler::HandleImportServer(const base::ListValue* args) { |
799 CHECK_EQ(1U, args->GetSize()); | 789 CHECK_EQ(1U, args->GetSize()); |
800 AssignWebUICallbackId(args); | 790 AssignWebUICallbackId(args); |
801 | 791 |
802 select_file_dialog_ = ui::SelectFileDialog::Create( | 792 select_file_dialog_ = ui::SelectFileDialog::Create( |
803 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); | 793 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); |
804 ShowCertSelectFileDialog( | 794 ShowCertSelectFileDialog( |
805 select_file_dialog_.get(), | 795 select_file_dialog_.get(), ui::SelectFileDialog::SELECT_OPEN_FILE, |
806 ui::SelectFileDialog::SELECT_OPEN_FILE, | 796 base::FilePath(), GetParentWindow(), |
807 base::FilePath(), | |
808 GetParentWindow(), | |
809 reinterpret_cast<void*>(IMPORT_SERVER_FILE_SELECTED)); | 797 reinterpret_cast<void*>(IMPORT_SERVER_FILE_SELECTED)); |
810 } | 798 } |
811 | 799 |
812 void CertificatesHandler::ImportServerFileSelected( | 800 void CertificatesHandler::ImportServerFileSelected(const base::FilePath& path) { |
813 const base::FilePath& path) { | |
814 file_access_provider_->StartRead( | 801 file_access_provider_->StartRead( |
815 path, base::Bind(&CertificatesHandler::ImportServerFileRead, | 802 path, base::Bind(&CertificatesHandler::ImportServerFileRead, |
816 base::Unretained(this)), | 803 base::Unretained(this)), |
817 &tracker_); | 804 &tracker_); |
818 } | 805 } |
819 | 806 |
820 void CertificatesHandler::ImportServerFileRead(const int* read_errno, | 807 void CertificatesHandler::ImportServerFileRead(const int* read_errno, |
821 const std::string* data) { | 808 const std::string* data) { |
822 if (*read_errno) { | 809 if (*read_errno) { |
823 ImportExportCleanup(); | 810 ImportExportCleanup(); |
824 RejectCallbackWithError( | 811 RejectCallbackWithError( |
825 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), | 812 l10n_util::GetStringUTF8( |
826 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_READ_ERROR_FORMAT, | 813 IDS_SETTINGS_CERTIFICATE_MANAGER_SERVER_IMPORT_ERROR_TITLE), |
827 UTF8ToUTF16( | 814 l10n_util::GetStringFUTF8( |
828 base::safe_strerror(*read_errno)))); | 815 IDS_SETTINGS_CERTIFICATE_MANAGER_READ_ERROR_FORMAT, |
| 816 UTF8ToUTF16(base::safe_strerror(*read_errno)))); |
829 return; | 817 return; |
830 } | 818 } |
831 | 819 |
832 selected_cert_list_ = net::X509Certificate::CreateCertificateListFromBytes( | 820 selected_cert_list_ = net::X509Certificate::CreateCertificateListFromBytes( |
833 data->data(), data->size(), net::X509Certificate::FORMAT_AUTO); | 821 data->data(), data->size(), net::X509Certificate::FORMAT_AUTO); |
834 if (selected_cert_list_.empty()) { | 822 if (selected_cert_list_.empty()) { |
835 ImportExportCleanup(); | 823 ImportExportCleanup(); |
836 RejectCallbackWithError( | 824 RejectCallbackWithError( |
837 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), | 825 l10n_util::GetStringUTF8( |
838 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CERT_PARSE_ERROR)); | 826 IDS_SETTINGS_CERTIFICATE_MANAGER_SERVER_IMPORT_ERROR_TITLE), |
| 827 l10n_util::GetStringUTF8( |
| 828 IDS_SETTINGS_CERTIFICATE_MANAGER_CERT_PARSE_ERROR)); |
839 return; | 829 return; |
840 } | 830 } |
841 | 831 |
842 net::NSSCertDatabase::ImportCertFailureList not_imported; | 832 net::NSSCertDatabase::ImportCertFailureList not_imported; |
843 // TODO(mattm): Add UI for trust. http://crbug.com/76274 | 833 // TODO(mattm): Add UI for trust. http://crbug.com/76274 |
844 bool result = certificate_manager_model_->ImportServerCert( | 834 bool result = certificate_manager_model_->ImportServerCert( |
845 selected_cert_list_, | 835 selected_cert_list_, net::NSSCertDatabase::TRUST_DEFAULT, ¬_imported); |
846 net::NSSCertDatabase::TRUST_DEFAULT, | |
847 ¬_imported); | |
848 if (!result) { | 836 if (!result) { |
849 RejectCallbackWithError( | 837 RejectCallbackWithError( |
850 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), | 838 l10n_util::GetStringUTF8( |
851 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); | 839 IDS_SETTINGS_CERTIFICATE_MANAGER_SERVER_IMPORT_ERROR_TITLE), |
| 840 l10n_util::GetStringUTF8( |
| 841 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR)); |
852 } else if (!not_imported.empty()) { | 842 } else if (!not_imported.empty()) { |
853 RejectCallbackWithImportError( | 843 RejectCallbackWithImportError( |
854 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), | 844 l10n_util::GetStringUTF8( |
| 845 IDS_SETTINGS_CERTIFICATE_MANAGER_SERVER_IMPORT_ERROR_TITLE), |
855 not_imported); | 846 not_imported); |
856 } else { | 847 } else { |
857 ResolveCallback(*base::Value::CreateNullValue()); | 848 ResolveCallback(*base::Value::CreateNullValue()); |
858 } | 849 } |
859 ImportExportCleanup(); | 850 ImportExportCleanup(); |
860 } | 851 } |
861 | 852 |
862 void CertificatesHandler::HandleImportCA(const base::ListValue* args) { | 853 void CertificatesHandler::HandleImportCA(const base::ListValue* args) { |
863 CHECK_EQ(1U, args->GetSize()); | 854 CHECK_EQ(1U, args->GetSize()); |
864 AssignWebUICallbackId(args); | 855 AssignWebUICallbackId(args); |
865 | 856 |
866 select_file_dialog_ = ui::SelectFileDialog::Create( | 857 select_file_dialog_ = ui::SelectFileDialog::Create( |
867 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); | 858 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); |
868 ShowCertSelectFileDialog(select_file_dialog_.get(), | 859 ShowCertSelectFileDialog(select_file_dialog_.get(), |
869 ui::SelectFileDialog::SELECT_OPEN_FILE, | 860 ui::SelectFileDialog::SELECT_OPEN_FILE, |
870 base::FilePath(), | 861 base::FilePath(), GetParentWindow(), |
871 GetParentWindow(), | |
872 reinterpret_cast<void*>(IMPORT_CA_FILE_SELECTED)); | 862 reinterpret_cast<void*>(IMPORT_CA_FILE_SELECTED)); |
873 } | 863 } |
874 | 864 |
875 void CertificatesHandler::ImportCAFileSelected( | 865 void CertificatesHandler::ImportCAFileSelected(const base::FilePath& path) { |
876 const base::FilePath& path) { | |
877 file_access_provider_->StartRead( | 866 file_access_provider_->StartRead( |
878 path, base::Bind(&CertificatesHandler::ImportCAFileRead, | 867 path, base::Bind(&CertificatesHandler::ImportCAFileRead, |
879 base::Unretained(this)), | 868 base::Unretained(this)), |
880 &tracker_); | 869 &tracker_); |
881 } | 870 } |
882 | 871 |
883 void CertificatesHandler::ImportCAFileRead(const int* read_errno, | 872 void CertificatesHandler::ImportCAFileRead(const int* read_errno, |
884 const std::string* data) { | 873 const std::string* data) { |
885 if (*read_errno) { | 874 if (*read_errno) { |
886 ImportExportCleanup(); | 875 ImportExportCleanup(); |
887 RejectCallbackWithError( | 876 RejectCallbackWithError( |
888 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), | 877 l10n_util::GetStringUTF8( |
889 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_READ_ERROR_FORMAT, | 878 IDS_SETTINGS_CERTIFICATE_MANAGER_CA_IMPORT_ERROR_TITLE), |
890 UTF8ToUTF16( | 879 l10n_util::GetStringFUTF8( |
891 base::safe_strerror(*read_errno)))); | 880 IDS_SETTINGS_CERTIFICATE_MANAGER_READ_ERROR_FORMAT, |
| 881 UTF8ToUTF16(base::safe_strerror(*read_errno)))); |
892 return; | 882 return; |
893 } | 883 } |
894 | 884 |
895 selected_cert_list_ = net::X509Certificate::CreateCertificateListFromBytes( | 885 selected_cert_list_ = net::X509Certificate::CreateCertificateListFromBytes( |
896 data->data(), data->size(), net::X509Certificate::FORMAT_AUTO); | 886 data->data(), data->size(), net::X509Certificate::FORMAT_AUTO); |
897 if (selected_cert_list_.empty()) { | 887 if (selected_cert_list_.empty()) { |
898 ImportExportCleanup(); | 888 ImportExportCleanup(); |
899 RejectCallbackWithError( | 889 RejectCallbackWithError( |
900 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), | 890 l10n_util::GetStringUTF8( |
901 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CERT_PARSE_ERROR)); | 891 IDS_SETTINGS_CERTIFICATE_MANAGER_CA_IMPORT_ERROR_TITLE), |
| 892 l10n_util::GetStringUTF8( |
| 893 IDS_SETTINGS_CERTIFICATE_MANAGER_CERT_PARSE_ERROR)); |
902 return; | 894 return; |
903 } | 895 } |
904 | 896 |
905 scoped_refptr<net::X509Certificate> root_cert = | 897 scoped_refptr<net::X509Certificate> root_cert = |
906 certificate_manager_model_->cert_db()->FindRootInList( | 898 certificate_manager_model_->cert_db()->FindRootInList( |
907 selected_cert_list_); | 899 selected_cert_list_); |
908 | 900 |
909 // TODO(mattm): check here if root_cert is not a CA cert and show error. | 901 // TODO(mattm): check here if root_cert is not a CA cert and show error. |
910 | 902 |
911 base::StringValue cert_name(root_cert->subject().GetDisplayName()); | 903 base::StringValue cert_name(root_cert->subject().GetDisplayName()); |
(...skipping 16 matching lines...) Expand all Loading... |
928 // http://crbug.com/128411 | 920 // http://crbug.com/128411 |
929 net::NSSCertDatabase::ImportCertFailureList not_imported; | 921 net::NSSCertDatabase::ImportCertFailureList not_imported; |
930 bool result = certificate_manager_model_->ImportCACerts( | 922 bool result = certificate_manager_model_->ImportCACerts( |
931 selected_cert_list_, | 923 selected_cert_list_, |
932 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL + | 924 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL + |
933 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL + | 925 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL + |
934 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN, | 926 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN, |
935 ¬_imported); | 927 ¬_imported); |
936 if (!result) { | 928 if (!result) { |
937 RejectCallbackWithError( | 929 RejectCallbackWithError( |
938 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), | 930 l10n_util::GetStringUTF8( |
939 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); | 931 IDS_SETTINGS_CERTIFICATE_MANAGER_CA_IMPORT_ERROR_TITLE), |
| 932 l10n_util::GetStringUTF8( |
| 933 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR)); |
940 } else if (!not_imported.empty()) { | 934 } else if (!not_imported.empty()) { |
941 RejectCallbackWithImportError( | 935 RejectCallbackWithImportError( |
942 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), | 936 l10n_util::GetStringUTF8( |
| 937 IDS_SETTINGS_CERTIFICATE_MANAGER_CA_IMPORT_ERROR_TITLE), |
943 not_imported); | 938 not_imported); |
944 } else { | 939 } else { |
945 ResolveCallback(*base::Value::CreateNullValue()); | 940 ResolveCallback(*base::Value::CreateNullValue()); |
946 } | 941 } |
947 ImportExportCleanup(); | 942 ImportExportCleanup(); |
948 } | 943 } |
949 | 944 |
950 void CertificatesHandler::HandleExportCertificate(const base::ListValue* args) { | 945 void CertificatesHandler::HandleExportCertificate(const base::ListValue* args) { |
951 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args); | 946 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args); |
952 if (!cert) | 947 if (!cert) |
953 return; | 948 return; |
954 ShowCertExportDialog(web_ui()->GetWebContents(), GetParentWindow(), cert); | 949 ShowCertExportDialog(web_ui()->GetWebContents(), GetParentWindow(), cert); |
955 } | 950 } |
956 | 951 |
957 void CertificatesHandler::HandleDeleteCertificate(const base::ListValue* args) { | 952 void CertificatesHandler::HandleDeleteCertificate(const base::ListValue* args) { |
958 CHECK_EQ(2U, args->GetSize()); | 953 CHECK_EQ(2U, args->GetSize()); |
959 AssignWebUICallbackId(args); | 954 AssignWebUICallbackId(args); |
960 std::string node_id; | 955 std::string node_id; |
961 CHECK(args->GetString(1, &node_id)); | 956 CHECK(args->GetString(1, &node_id)); |
962 | 957 |
963 net::X509Certificate* cert = cert_id_map_->IdToCert(node_id); | 958 net::X509Certificate* cert = cert_id_map_->IdToCert(node_id); |
964 CHECK(cert); | 959 CHECK(cert); |
965 | 960 |
966 bool result = certificate_manager_model_->Delete(cert); | 961 bool result = certificate_manager_model_->Delete(cert); |
967 if (!result) { | 962 if (!result) { |
968 // TODO(mattm): better error messages? | 963 // TODO(mattm): better error messages? |
969 RejectCallbackWithError( | 964 RejectCallbackWithError( |
970 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_DELETE_CERT_ERROR_TITLE), | 965 l10n_util::GetStringUTF8( |
971 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); | 966 IDS_SETTINGS_CERTIFICATE_MANAGER_DELETE_CERT_ERROR_TITLE), |
| 967 l10n_util::GetStringUTF8( |
| 968 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR)); |
972 } else { | 969 } else { |
973 ResolveCallback(*base::Value::CreateNullValue()); | 970 ResolveCallback(*base::Value::CreateNullValue()); |
974 } | 971 } |
975 } | 972 } |
976 | 973 |
977 void CertificatesHandler::OnCertificateManagerModelCreated( | 974 void CertificatesHandler::OnCertificateManagerModelCreated( |
978 scoped_ptr<CertificateManagerModel> model) { | 975 scoped_ptr<CertificateManagerModel> model) { |
979 certificate_manager_model_ = std::move(model); | 976 certificate_manager_model_ = std::move(model); |
980 CertificateManagerModelReady(); | 977 CertificateManagerModelReady(); |
981 } | 978 } |
982 | 979 |
983 void CertificatesHandler::CertificateManagerModelReady() { | 980 void CertificatesHandler::CertificateManagerModelReady() { |
984 base::FundamentalValue user_db_available_value( | 981 base::FundamentalValue user_db_available_value( |
985 certificate_manager_model_->is_user_db_available()); | 982 certificate_manager_model_->is_user_db_available()); |
986 base::FundamentalValue tpm_available_value( | 983 base::FundamentalValue tpm_available_value( |
987 certificate_manager_model_->is_tpm_available()); | 984 certificate_manager_model_->is_tpm_available()); |
988 web_ui()->CallJavascriptFunction( | 985 web_ui()->CallJavascriptFunction( |
989 "cr.webUIListenerCallback", | 986 "cr.webUIListenerCallback", base::StringValue("certificates-model-ready"), |
990 base::StringValue("certificates-model-ready"), | 987 user_db_available_value, tpm_available_value); |
991 user_db_available_value, | |
992 tpm_available_value); | |
993 certificate_manager_model_->Refresh(); | 988 certificate_manager_model_->Refresh(); |
994 } | 989 } |
995 | 990 |
996 void CertificatesHandler::HandleRefreshCertificates( | 991 void CertificatesHandler::HandleRefreshCertificates( |
997 const base::ListValue* args) { | 992 const base::ListValue* args) { |
998 if (certificate_manager_model_) { | 993 if (certificate_manager_model_) { |
999 // Already have a model, the webui must be re-loading. Just re-run the | 994 // Already have a model, the webui must be re-loading. Just re-run the |
1000 // webui initialization. | 995 // webui initialization. |
1001 CertificateManagerModelReady(); | 996 CertificateManagerModelReady(); |
1002 return; | 997 return; |
1003 } | 998 } |
1004 | 999 |
1005 if (!requested_certificate_manager_model_) { | 1000 if (!requested_certificate_manager_model_) { |
1006 // Request that a model be created. | 1001 // Request that a model be created. |
1007 CertificateManagerModel::Create( | 1002 CertificateManagerModel::Create( |
1008 Profile::FromWebUI(web_ui()), | 1003 Profile::FromWebUI(web_ui()), this, |
1009 this, | |
1010 base::Bind(&CertificatesHandler::OnCertificateManagerModelCreated, | 1004 base::Bind(&CertificatesHandler::OnCertificateManagerModelCreated, |
1011 weak_ptr_factory_.GetWeakPtr())); | 1005 weak_ptr_factory_.GetWeakPtr())); |
1012 requested_certificate_manager_model_ = true; | 1006 requested_certificate_manager_model_ = true; |
1013 return; | 1007 return; |
1014 } | 1008 } |
1015 | 1009 |
1016 // We are already waiting for a CertificateManagerModel to be created, no need | 1010 // We are already waiting for a CertificateManagerModel to be created, no need |
1017 // to do anything. | 1011 // to do anything. |
1018 } | 1012 } |
1019 | 1013 |
1020 void CertificatesHandler::PopulateTree( | 1014 void CertificatesHandler::PopulateTree( |
1021 const std::string& tab_name, | 1015 const std::string& tab_name, |
1022 net::CertType type, | 1016 net::CertType type, |
1023 const net::CertificateList& web_trust_certs) { | 1017 const net::CertificateList& web_trust_certs) { |
1024 scoped_ptr<icu::Collator> collator; | 1018 scoped_ptr<icu::Collator> collator; |
1025 UErrorCode error = U_ZERO_ERROR; | 1019 UErrorCode error = U_ZERO_ERROR; |
1026 collator.reset( | 1020 collator.reset(icu::Collator::createInstance( |
1027 icu::Collator::createInstance( | 1021 icu::Locale(g_browser_process->GetApplicationLocale().c_str()), error)); |
1028 icu::Locale(g_browser_process->GetApplicationLocale().c_str()), | |
1029 error)); | |
1030 if (U_FAILURE(error)) | 1022 if (U_FAILURE(error)) |
1031 collator.reset(NULL); | 1023 collator.reset(NULL); |
1032 DictionaryIdComparator comparator(collator.get()); | 1024 DictionaryIdComparator comparator(collator.get()); |
1033 CertificateManagerModel::OrgGroupingMap map; | 1025 CertificateManagerModel::OrgGroupingMap map; |
1034 | 1026 |
1035 certificate_manager_model_->FilterAndBuildOrgGroupingMap(type, &map); | 1027 certificate_manager_model_->FilterAndBuildOrgGroupingMap(type, &map); |
1036 | 1028 |
1037 { | 1029 { |
1038 scoped_ptr<base::ListValue> nodes = make_scoped_ptr(new base::ListValue()); | 1030 scoped_ptr<base::ListValue> nodes = make_scoped_ptr(new base::ListValue()); |
1039 for (CertificateManagerModel::OrgGroupingMap::iterator i = map.begin(); | 1031 for (CertificateManagerModel::OrgGroupingMap::iterator i = map.begin(); |
1040 i != map.end(); ++i) { | 1032 i != map.end(); ++i) { |
1041 // Populate first level (org name). | 1033 // Populate first level (org name). |
1042 base::DictionaryValue* dict = new base::DictionaryValue; | 1034 base::DictionaryValue* dict = new base::DictionaryValue; |
1043 dict->SetString(kKeyField, OrgNameToId(i->first)); | 1035 dict->SetString(kKeyField, OrgNameToId(i->first)); |
1044 dict->SetString(kNameField, i->first); | 1036 dict->SetString(kNameField, i->first); |
1045 | 1037 |
1046 // Populate second level (certs). | 1038 // Populate second level (certs). |
1047 base::ListValue* subnodes = new base::ListValue; | 1039 base::ListValue* subnodes = new base::ListValue; |
1048 for (net::CertificateList::const_iterator org_cert_it = i->second.begin(); | 1040 for (net::CertificateList::const_iterator org_cert_it = i->second.begin(); |
1049 org_cert_it != i->second.end(); ++org_cert_it) { | 1041 org_cert_it != i->second.end(); ++org_cert_it) { |
1050 base::DictionaryValue* cert_dict = new base::DictionaryValue; | 1042 base::DictionaryValue* cert_dict = new base::DictionaryValue; |
1051 net::X509Certificate* cert = org_cert_it->get(); | 1043 net::X509Certificate* cert = org_cert_it->get(); |
1052 cert_dict->SetString(kKeyField, cert_id_map_->CertToId(cert)); | 1044 cert_dict->SetString(kKeyField, cert_id_map_->CertToId(cert)); |
1053 cert_dict->SetString( | 1045 cert_dict->SetString( |
1054 kNameField, certificate_manager_model_->GetColumnText( | 1046 kNameField, certificate_manager_model_->GetColumnText( |
1055 *cert, CertificateManagerModel::COL_SUBJECT_NAME)); | 1047 *cert, CertificateManagerModel::COL_SUBJECT_NAME)); |
1056 cert_dict->SetBoolean( | 1048 cert_dict->SetBoolean( |
1057 kReadonlyField, | 1049 kReadonlyField, |
1058 certificate_manager_model_->cert_db()->IsReadOnly(cert)); | 1050 certificate_manager_model_->cert_db()->IsReadOnly(cert)); |
1059 // Policy-installed certificates with web trust are trusted. | 1051 // Policy-installed certificates with web trust are trusted. |
1060 bool policy_trusted = | 1052 bool policy_trusted = |
1061 IsPolicyInstalledWithWebTrust(web_trust_certs, cert); | 1053 IsPolicyInstalledWithWebTrust(web_trust_certs, cert); |
1062 cert_dict->SetBoolean( | 1054 cert_dict->SetBoolean( |
1063 kUntrustedField, | 1055 kUntrustedField, |
1064 !policy_trusted && | 1056 !policy_trusted && |
1065 certificate_manager_model_->cert_db()->IsUntrusted(cert)); | 1057 certificate_manager_model_->cert_db()->IsUntrusted(cert)); |
1066 cert_dict->SetBoolean(kPolicyField, policy_trusted); | 1058 cert_dict->SetBoolean(kPolicyField, policy_trusted); |
1067 // TODO(hshi): This should be determined by testing for PKCS #11 | 1059 // TODO(hshi): This should be determined by testing for PKCS #11 |
1068 // CKA_EXTRACTABLE attribute. We may need to use the NSS function | 1060 // CKA_EXTRACTABLE attribute. We may need to use the NSS function |
1069 // PK11_ReadRawAttribute to do that. | 1061 // PK11_ReadRawAttribute to do that. |
1070 cert_dict->SetBoolean( | 1062 cert_dict->SetBoolean( |
1071 kExtractableField, | 1063 kExtractableField, |
1072 !certificate_manager_model_->IsHardwareBacked(cert)); | 1064 !certificate_manager_model_->IsHardwareBacked(cert)); |
1073 // TODO(mattm): Other columns. | 1065 // TODO(mattm): Other columns. |
1074 subnodes->Append(cert_dict); | 1066 subnodes->Append(cert_dict); |
1075 } | 1067 } |
1076 std::sort(subnodes->begin(), subnodes->end(), comparator); | 1068 std::sort(subnodes->begin(), subnodes->end(), comparator); |
1077 | 1069 |
1078 dict->Set(kSubnodesField, subnodes); | 1070 dict->Set(kSubnodesField, subnodes); |
1079 nodes->Append(dict); | 1071 nodes->Append(dict); |
1080 } | 1072 } |
1081 std::sort(nodes->begin(), nodes->end(), comparator); | 1073 std::sort(nodes->begin(), nodes->end(), comparator); |
1082 | 1074 |
1083 web_ui()->CallJavascriptFunction("cr.webUIListenerCallback", | 1075 web_ui()->CallJavascriptFunction("cr.webUIListenerCallback", |
1084 base::StringValue("certificates-changed"), | 1076 base::StringValue("certificates-changed"), |
1085 base::StringValue(tab_name), | 1077 base::StringValue(tab_name), *nodes); |
1086 *nodes); | |
1087 } | 1078 } |
1088 } | 1079 } |
1089 | 1080 |
1090 void CertificatesHandler::ResolveCallback(const base::Value& response) { | 1081 void CertificatesHandler::ResolveCallback(const base::Value& response) { |
1091 DCHECK(!webui_callback_id_.empty()); | 1082 DCHECK(!webui_callback_id_.empty()); |
1092 ResolveJavascriptCallback(base::StringValue(webui_callback_id_), response); | 1083 ResolveJavascriptCallback(base::StringValue(webui_callback_id_), response); |
1093 webui_callback_id_.clear(); | 1084 webui_callback_id_.clear(); |
1094 } | 1085 } |
1095 | 1086 |
1096 void CertificatesHandler::RejectCallback(const base::Value& response) { | 1087 void CertificatesHandler::RejectCallback(const base::Value& response) { |
1097 DCHECK(!webui_callback_id_.empty()); | 1088 DCHECK(!webui_callback_id_.empty()); |
1098 RejectJavascriptCallback(base::StringValue(webui_callback_id_), response); | 1089 RejectJavascriptCallback(base::StringValue(webui_callback_id_), response); |
1099 webui_callback_id_.clear(); | 1090 webui_callback_id_.clear(); |
1100 } | 1091 } |
1101 | 1092 |
1102 void CertificatesHandler::RejectCallbackWithError( | 1093 void CertificatesHandler::RejectCallbackWithError(const std::string& title, |
1103 const std::string& title, | 1094 const std::string& error) { |
1104 const std::string& error) { | |
1105 scoped_ptr<base::DictionaryValue> error_info(new base::DictionaryValue); | 1095 scoped_ptr<base::DictionaryValue> error_info(new base::DictionaryValue); |
1106 error_info->SetString(kErrorTitle, title); | 1096 error_info->SetString(kErrorTitle, title); |
1107 error_info->SetString(kErrorDescription, error); | 1097 error_info->SetString(kErrorDescription, error); |
1108 RejectCallback(*error_info); | 1098 RejectCallback(*error_info); |
1109 } | 1099 } |
1110 | 1100 |
1111 void CertificatesHandler::RejectCallbackWithImportError( | 1101 void CertificatesHandler::RejectCallbackWithImportError( |
1112 const std::string& title, | 1102 const std::string& title, |
1113 const net::NSSCertDatabase::ImportCertFailureList& not_imported) { | 1103 const net::NSSCertDatabase::ImportCertFailureList& not_imported) { |
1114 std::string error; | 1104 std::string error; |
1115 if (selected_cert_list_.size() == 1) | 1105 if (selected_cert_list_.size() == 1) |
1116 error = l10n_util::GetStringUTF8( | 1106 error = l10n_util::GetStringUTF8( |
1117 IDS_CERT_MANAGER_IMPORT_SINGLE_NOT_IMPORTED); | 1107 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_SINGLE_NOT_IMPORTED); |
1118 else if (not_imported.size() == selected_cert_list_.size()) | 1108 else if (not_imported.size() == selected_cert_list_.size()) |
1119 error = l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ALL_NOT_IMPORTED); | 1109 error = l10n_util::GetStringUTF8( |
| 1110 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_ALL_NOT_IMPORTED); |
1120 else | 1111 else |
1121 error = l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_SOME_NOT_IMPORTED); | 1112 error = l10n_util::GetStringUTF8( |
| 1113 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_SOME_NOT_IMPORTED); |
1122 | 1114 |
1123 scoped_ptr<base::ListValue> cert_error_list = | 1115 scoped_ptr<base::ListValue> cert_error_list = |
1124 make_scoped_ptr(new base::ListValue()); | 1116 make_scoped_ptr(new base::ListValue()); |
1125 for (size_t i = 0; i < not_imported.size(); ++i) { | 1117 for (size_t i = 0; i < not_imported.size(); ++i) { |
1126 const net::NSSCertDatabase::ImportCertFailure& failure = not_imported[i]; | 1118 const net::NSSCertDatabase::ImportCertFailure& failure = not_imported[i]; |
1127 base::DictionaryValue* dict = new base::DictionaryValue; | 1119 base::DictionaryValue* dict = new base::DictionaryValue; |
1128 dict->SetString( | 1120 dict->SetString(kNameField, |
1129 kNameField, failure.certificate->subject().GetDisplayName()); | 1121 failure.certificate->subject().GetDisplayName()); |
1130 dict->SetString(kErrorField, NetErrorToString(failure.net_error)); | 1122 dict->SetString(kErrorField, NetErrorToString(failure.net_error)); |
1131 cert_error_list->Append(dict); | 1123 cert_error_list->Append(dict); |
1132 } | 1124 } |
1133 | 1125 |
1134 scoped_ptr<base::DictionaryValue> error_info(new base::DictionaryValue); | 1126 scoped_ptr<base::DictionaryValue> error_info(new base::DictionaryValue); |
1135 error_info->SetString(kErrorTitle, title); | 1127 error_info->SetString(kErrorTitle, title); |
1136 error_info->SetString(kErrorDescription, error); | 1128 error_info->SetString(kErrorDescription, error); |
1137 error_info->Set( | 1129 error_info->Set(kCertificateErrors, |
1138 kCertificateErrors, make_scoped_ptr(cert_error_list.release())); | 1130 make_scoped_ptr(cert_error_list.release())); |
1139 RejectCallback(*error_info); | 1131 RejectCallback(*error_info); |
1140 } | 1132 } |
1141 | 1133 |
1142 gfx::NativeWindow CertificatesHandler::GetParentWindow() const { | 1134 gfx::NativeWindow CertificatesHandler::GetParentWindow() const { |
1143 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); | 1135 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); |
1144 } | 1136 } |
1145 | 1137 |
1146 } // namespace settings | 1138 } // namespace settings |
OLD | NEW |