Chromium Code Reviews| 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); | |
|
tommycli
2016/03/17 19:14:19
All the string IDS changes are the only non-whites
dpapad
2016/03/17 22:19:45
Yes. Basically I replaced IDS_CERT with IDS_SETTIN
| |
| 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 |