| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/options/certificate_manager_handler.h" | 5 #include "chrome/browser/ui/webui/options/certificate_manager_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 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 cert); | 595 cert); |
| 596 return; | 596 return; |
| 597 } | 597 } |
| 598 #endif | 598 #endif |
| 599 ShowCertificateViewer(web_ui()->GetWebContents(), GetParentWindow(), cert); | 599 ShowCertificateViewer(web_ui()->GetWebContents(), GetParentWindow(), cert); |
| 600 } | 600 } |
| 601 | 601 |
| 602 void CertificateManagerHandler::GetCATrust(const base::ListValue* args) { | 602 void CertificateManagerHandler::GetCATrust(const base::ListValue* args) { |
| 603 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args); | 603 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args); |
| 604 if (!cert) { | 604 if (!cert) { |
| 605 web_ui()->CallJavascriptFunction("CertificateEditCaTrustOverlay.dismiss"); | 605 web_ui()->CallJavascriptFunctionUnsafe( |
| 606 "CertificateEditCaTrustOverlay.dismiss"); |
| 606 return; | 607 return; |
| 607 } | 608 } |
| 608 | 609 |
| 609 net::NSSCertDatabase::TrustBits trust_bits = | 610 net::NSSCertDatabase::TrustBits trust_bits = |
| 610 certificate_manager_model_->cert_db()->GetCertTrust(cert, net::CA_CERT); | 611 certificate_manager_model_->cert_db()->GetCertTrust(cert, net::CA_CERT); |
| 611 base::FundamentalValue ssl_value( | 612 base::FundamentalValue ssl_value( |
| 612 static_cast<bool>(trust_bits & net::NSSCertDatabase::TRUSTED_SSL)); | 613 static_cast<bool>(trust_bits & net::NSSCertDatabase::TRUSTED_SSL)); |
| 613 base::FundamentalValue email_value( | 614 base::FundamentalValue email_value( |
| 614 static_cast<bool>(trust_bits & net::NSSCertDatabase::TRUSTED_EMAIL)); | 615 static_cast<bool>(trust_bits & net::NSSCertDatabase::TRUSTED_EMAIL)); |
| 615 base::FundamentalValue obj_sign_value( | 616 base::FundamentalValue obj_sign_value( |
| 616 static_cast<bool>(trust_bits & net::NSSCertDatabase::TRUSTED_OBJ_SIGN)); | 617 static_cast<bool>(trust_bits & net::NSSCertDatabase::TRUSTED_OBJ_SIGN)); |
| 617 web_ui()->CallJavascriptFunction( | 618 web_ui()->CallJavascriptFunctionUnsafe( |
| 618 "CertificateEditCaTrustOverlay.populateTrust", | 619 "CertificateEditCaTrustOverlay.populateTrust", ssl_value, email_value, |
| 619 ssl_value, email_value, obj_sign_value); | 620 obj_sign_value); |
| 620 } | 621 } |
| 621 | 622 |
| 622 void CertificateManagerHandler::EditCATrust(const base::ListValue* args) { | 623 void CertificateManagerHandler::EditCATrust(const base::ListValue* args) { |
| 623 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args); | 624 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args); |
| 624 bool fail = !cert; | 625 bool fail = !cert; |
| 625 bool trust_ssl = false; | 626 bool trust_ssl = false; |
| 626 bool trust_email = false; | 627 bool trust_email = false; |
| 627 bool trust_obj_sign = false; | 628 bool trust_obj_sign = false; |
| 628 fail |= !CallbackArgsToBool(args, 1, &trust_ssl); | 629 fail |= !CallbackArgsToBool(args, 1, &trust_ssl); |
| 629 fail |= !CallbackArgsToBool(args, 2, &trust_email); | 630 fail |= !CallbackArgsToBool(args, 2, &trust_email); |
| 630 fail |= !CallbackArgsToBool(args, 3, &trust_obj_sign); | 631 fail |= !CallbackArgsToBool(args, 3, &trust_obj_sign); |
| 631 if (fail) { | 632 if (fail) { |
| 632 LOG(ERROR) << "EditCATrust args fail"; | 633 LOG(ERROR) << "EditCATrust args fail"; |
| 633 web_ui()->CallJavascriptFunction("CertificateEditCaTrustOverlay.dismiss"); | 634 web_ui()->CallJavascriptFunctionUnsafe( |
| 635 "CertificateEditCaTrustOverlay.dismiss"); |
| 634 return; | 636 return; |
| 635 } | 637 } |
| 636 | 638 |
| 637 bool result = certificate_manager_model_->SetCertTrust( | 639 bool result = certificate_manager_model_->SetCertTrust( |
| 638 cert, | 640 cert, |
| 639 net::CA_CERT, | 641 net::CA_CERT, |
| 640 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL + | 642 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL + |
| 641 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL + | 643 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL + |
| 642 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN); | 644 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN); |
| 643 web_ui()->CallJavascriptFunction("CertificateEditCaTrustOverlay.dismiss"); | 645 web_ui()->CallJavascriptFunctionUnsafe( |
| 646 "CertificateEditCaTrustOverlay.dismiss"); |
| 644 if (!result) { | 647 if (!result) { |
| 645 // TODO(mattm): better error messages? | 648 // TODO(mattm): better error messages? |
| 646 ShowError( | 649 ShowError( |
| 647 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SET_TRUST_ERROR_TITLE), | 650 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SET_TRUST_ERROR_TITLE), |
| 648 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); | 651 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); |
| 649 } | 652 } |
| 650 } | 653 } |
| 651 | 654 |
| 652 void CertificateManagerHandler::EditServer(const base::ListValue* args) { | 655 void CertificateManagerHandler::EditServer(const base::ListValue* args) { |
| 653 NOTIMPLEMENTED(); | 656 NOTIMPLEMENTED(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 675 reinterpret_cast<void*>(EXPORT_PERSONAL_FILE_SELECTED)); | 678 reinterpret_cast<void*>(EXPORT_PERSONAL_FILE_SELECTED)); |
| 676 } | 679 } |
| 677 | 680 |
| 678 void CertificateManagerHandler::ExportAllPersonal(const base::ListValue* args) { | 681 void CertificateManagerHandler::ExportAllPersonal(const base::ListValue* args) { |
| 679 NOTIMPLEMENTED(); | 682 NOTIMPLEMENTED(); |
| 680 } | 683 } |
| 681 | 684 |
| 682 void CertificateManagerHandler::ExportPersonalFileSelected( | 685 void CertificateManagerHandler::ExportPersonalFileSelected( |
| 683 const base::FilePath& path) { | 686 const base::FilePath& path) { |
| 684 file_path_ = path; | 687 file_path_ = path; |
| 685 web_ui()->CallJavascriptFunction( | 688 web_ui()->CallJavascriptFunctionUnsafe( |
| 686 "CertificateManager.exportPersonalAskPassword"); | 689 "CertificateManager.exportPersonalAskPassword"); |
| 687 } | 690 } |
| 688 | 691 |
| 689 void CertificateManagerHandler::ExportPersonalPasswordSelected( | 692 void CertificateManagerHandler::ExportPersonalPasswordSelected( |
| 690 const base::ListValue* args) { | 693 const base::ListValue* args) { |
| 691 if (!args->GetString(0, &password_)) { | 694 if (!args->GetString(0, &password_)) { |
| 692 web_ui()->CallJavascriptFunction("CertificateRestoreOverlay.dismiss"); | 695 web_ui()->CallJavascriptFunctionUnsafe("CertificateRestoreOverlay.dismiss"); |
| 693 ImportExportCleanup(); | 696 ImportExportCleanup(); |
| 694 return; | 697 return; |
| 695 } | 698 } |
| 696 | 699 |
| 697 // Currently, we don't support exporting more than one at a time. If we do, | 700 // Currently, we don't support exporting more than one at a time. If we do, |
| 698 // this would need to either change this to use UnlockSlotsIfNecessary or | 701 // this would need to either change this to use UnlockSlotsIfNecessary or |
| 699 // change UnlockCertSlotIfNecessary to take a CertificateList. | 702 // change UnlockCertSlotIfNecessary to take a CertificateList. |
| 700 DCHECK_EQ(selected_cert_list_.size(), 1U); | 703 DCHECK_EQ(selected_cert_list_.size(), 1U); |
| 701 | 704 |
| 702 // TODO(mattm): do something smarter about non-extractable keys | 705 // TODO(mattm): do something smarter about non-extractable keys |
| 703 chrome::UnlockCertSlotIfNecessary( | 706 chrome::UnlockCertSlotIfNecessary( |
| 704 selected_cert_list_[0].get(), | 707 selected_cert_list_[0].get(), |
| 705 chrome::kCryptoModulePasswordCertExport, | 708 chrome::kCryptoModulePasswordCertExport, |
| 706 net::HostPortPair(), // unused. | 709 net::HostPortPair(), // unused. |
| 707 GetParentWindow(), | 710 GetParentWindow(), |
| 708 base::Bind(&CertificateManagerHandler::ExportPersonalSlotsUnlocked, | 711 base::Bind(&CertificateManagerHandler::ExportPersonalSlotsUnlocked, |
| 709 base::Unretained(this))); | 712 base::Unretained(this))); |
| 710 } | 713 } |
| 711 | 714 |
| 712 void CertificateManagerHandler::ExportPersonalSlotsUnlocked() { | 715 void CertificateManagerHandler::ExportPersonalSlotsUnlocked() { |
| 713 std::string output; | 716 std::string output; |
| 714 int num_exported = certificate_manager_model_->cert_db()->ExportToPKCS12( | 717 int num_exported = certificate_manager_model_->cert_db()->ExportToPKCS12( |
| 715 selected_cert_list_, | 718 selected_cert_list_, |
| 716 password_, | 719 password_, |
| 717 &output); | 720 &output); |
| 718 if (!num_exported) { | 721 if (!num_exported) { |
| 719 web_ui()->CallJavascriptFunction("CertificateRestoreOverlay.dismiss"); | 722 web_ui()->CallJavascriptFunctionUnsafe("CertificateRestoreOverlay.dismiss"); |
| 720 ShowError( | 723 ShowError( |
| 721 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_PKCS12_EXPORT_ERROR_TITLE), | 724 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_PKCS12_EXPORT_ERROR_TITLE), |
| 722 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); | 725 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); |
| 723 ImportExportCleanup(); | 726 ImportExportCleanup(); |
| 724 return; | 727 return; |
| 725 } | 728 } |
| 726 file_access_provider_->StartWrite( | 729 file_access_provider_->StartWrite( |
| 727 file_path_, | 730 file_path_, |
| 728 output, | 731 output, |
| 729 base::Bind(&CertificateManagerHandler::ExportPersonalFileWritten, | 732 base::Bind(&CertificateManagerHandler::ExportPersonalFileWritten, |
| 730 base::Unretained(this)), | 733 base::Unretained(this)), |
| 731 &tracker_); | 734 &tracker_); |
| 732 } | 735 } |
| 733 | 736 |
| 734 void CertificateManagerHandler::ExportPersonalFileWritten( | 737 void CertificateManagerHandler::ExportPersonalFileWritten( |
| 735 const int* write_errno, const int* bytes_written) { | 738 const int* write_errno, const int* bytes_written) { |
| 736 web_ui()->CallJavascriptFunction("CertificateRestoreOverlay.dismiss"); | 739 web_ui()->CallJavascriptFunctionUnsafe("CertificateRestoreOverlay.dismiss"); |
| 737 ImportExportCleanup(); | 740 ImportExportCleanup(); |
| 738 if (*write_errno) { | 741 if (*write_errno) { |
| 739 ShowError( | 742 ShowError( |
| 740 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_PKCS12_EXPORT_ERROR_TITLE), | 743 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_PKCS12_EXPORT_ERROR_TITLE), |
| 741 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_WRITE_ERROR_FORMAT, | 744 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_WRITE_ERROR_FORMAT, |
| 742 UTF8ToUTF16( | 745 UTF8ToUTF16( |
| 743 base::safe_strerror(*write_errno)))); | 746 base::safe_strerror(*write_errno)))); |
| 744 } | 747 } |
| 745 } | 748 } |
| 746 | 749 |
| 747 void CertificateManagerHandler::StartImportPersonal( | 750 void CertificateManagerHandler::StartImportPersonal( |
| 748 const base::ListValue* args) { | 751 const base::ListValue* args) { |
| 749 ui::SelectFileDialog::FileTypeInfo file_type_info; | 752 ui::SelectFileDialog::FileTypeInfo file_type_info; |
| 750 if (!args->GetBoolean(0, &use_hardware_backed_)) { | 753 if (!args->GetBoolean(0, &use_hardware_backed_)) { |
| 751 // Unable to retrieve the hardware backed attribute from the args, | 754 // Unable to retrieve the hardware backed attribute from the args, |
| 752 // so bail. | 755 // so bail. |
| 753 web_ui()->CallJavascriptFunction("CertificateRestoreOverlay.dismiss"); | 756 web_ui()->CallJavascriptFunctionUnsafe("CertificateRestoreOverlay.dismiss"); |
| 754 ImportExportCleanup(); | 757 ImportExportCleanup(); |
| 755 return; | 758 return; |
| 756 } | 759 } |
| 757 file_type_info.extensions.resize(1); | 760 file_type_info.extensions.resize(1); |
| 758 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("p12")); | 761 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("p12")); |
| 759 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pfx")); | 762 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pfx")); |
| 760 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("crt")); | 763 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("crt")); |
| 761 file_type_info.extension_description_overrides.push_back( | 764 file_type_info.extension_description_overrides.push_back( |
| 762 l10n_util::GetStringUTF16(IDS_CERT_USAGE_SSL_CLIENT)); | 765 l10n_util::GetStringUTF16(IDS_CERT_USAGE_SSL_CLIENT)); |
| 763 file_type_info.include_all_files = true; | 766 file_type_info.include_all_files = true; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 775 file_access_provider_->StartRead( | 778 file_access_provider_->StartRead( |
| 776 path, base::Bind(&CertificateManagerHandler::ImportPersonalFileRead, | 779 path, base::Bind(&CertificateManagerHandler::ImportPersonalFileRead, |
| 777 base::Unretained(this)), | 780 base::Unretained(this)), |
| 778 &tracker_); | 781 &tracker_); |
| 779 } | 782 } |
| 780 | 783 |
| 781 void CertificateManagerHandler::ImportPersonalFileRead( | 784 void CertificateManagerHandler::ImportPersonalFileRead( |
| 782 const int* read_errno, const std::string* data) { | 785 const int* read_errno, const std::string* data) { |
| 783 if (*read_errno) { | 786 if (*read_errno) { |
| 784 ImportExportCleanup(); | 787 ImportExportCleanup(); |
| 785 web_ui()->CallJavascriptFunction("CertificateRestoreOverlay.dismiss"); | 788 web_ui()->CallJavascriptFunctionUnsafe("CertificateRestoreOverlay.dismiss"); |
| 786 ShowError( | 789 ShowError( |
| 787 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ERROR_TITLE), | 790 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ERROR_TITLE), |
| 788 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_READ_ERROR_FORMAT, | 791 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_READ_ERROR_FORMAT, |
| 789 UTF8ToUTF16( | 792 UTF8ToUTF16( |
| 790 base::safe_strerror(*read_errno)))); | 793 base::safe_strerror(*read_errno)))); |
| 791 return; | 794 return; |
| 792 } | 795 } |
| 793 | 796 |
| 794 file_data_ = *data; | 797 file_data_ = *data; |
| 795 | 798 |
| 796 if (CouldBePFX(file_data_)) { | 799 if (CouldBePFX(file_data_)) { |
| 797 web_ui()->CallJavascriptFunction( | 800 web_ui()->CallJavascriptFunctionUnsafe( |
| 798 "CertificateManager.importPersonalAskPassword"); | 801 "CertificateManager.importPersonalAskPassword"); |
| 799 return; | 802 return; |
| 800 } | 803 } |
| 801 | 804 |
| 802 // Non .p12/.pfx files are assumed to be single/chain certificates without | 805 // Non .p12/.pfx files are assumed to be single/chain certificates without |
| 803 // private key data. The default extension according to spec is '.crt', | 806 // private key data. The default extension according to spec is '.crt', |
| 804 // however other extensions are also used in some places to represent these | 807 // however other extensions are also used in some places to represent these |
| 805 // certificates. | 808 // certificates. |
| 806 int result = certificate_manager_model_->ImportUserCert(file_data_); | 809 int result = certificate_manager_model_->ImportUserCert(file_data_); |
| 807 ImportExportCleanup(); | 810 ImportExportCleanup(); |
| 808 web_ui()->CallJavascriptFunction("CertificateRestoreOverlay.dismiss"); | 811 web_ui()->CallJavascriptFunctionUnsafe("CertificateRestoreOverlay.dismiss"); |
| 809 int string_id; | 812 int string_id; |
| 810 switch (result) { | 813 switch (result) { |
| 811 case net::OK: | 814 case net::OK: |
| 812 return; | 815 return; |
| 813 case net::ERR_NO_PRIVATE_KEY_FOR_CERT: | 816 case net::ERR_NO_PRIVATE_KEY_FOR_CERT: |
| 814 string_id = IDS_CERT_MANAGER_IMPORT_MISSING_KEY; | 817 string_id = IDS_CERT_MANAGER_IMPORT_MISSING_KEY; |
| 815 break; | 818 break; |
| 816 case net::ERR_CERT_INVALID: | 819 case net::ERR_CERT_INVALID: |
| 817 string_id = IDS_CERT_MANAGER_IMPORT_INVALID_FILE; | 820 string_id = IDS_CERT_MANAGER_IMPORT_INVALID_FILE; |
| 818 break; | 821 break; |
| 819 default: | 822 default: |
| 820 string_id = IDS_CERT_MANAGER_UNKNOWN_ERROR; | 823 string_id = IDS_CERT_MANAGER_UNKNOWN_ERROR; |
| 821 break; | 824 break; |
| 822 } | 825 } |
| 823 ShowError( | 826 ShowError( |
| 824 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ERROR_TITLE), | 827 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ERROR_TITLE), |
| 825 l10n_util::GetStringUTF8(string_id)); | 828 l10n_util::GetStringUTF8(string_id)); |
| 826 } | 829 } |
| 827 | 830 |
| 828 void CertificateManagerHandler::ImportPersonalPasswordSelected( | 831 void CertificateManagerHandler::ImportPersonalPasswordSelected( |
| 829 const base::ListValue* args) { | 832 const base::ListValue* args) { |
| 830 if (!args->GetString(0, &password_)) { | 833 if (!args->GetString(0, &password_)) { |
| 831 web_ui()->CallJavascriptFunction("CertificateRestoreOverlay.dismiss"); | 834 web_ui()->CallJavascriptFunctionUnsafe("CertificateRestoreOverlay.dismiss"); |
| 832 ImportExportCleanup(); | 835 ImportExportCleanup(); |
| 833 return; | 836 return; |
| 834 } | 837 } |
| 835 | 838 |
| 836 if (use_hardware_backed_) { | 839 if (use_hardware_backed_) { |
| 837 module_ = certificate_manager_model_->cert_db()->GetPrivateModule(); | 840 module_ = certificate_manager_model_->cert_db()->GetPrivateModule(); |
| 838 } else { | 841 } else { |
| 839 module_ = certificate_manager_model_->cert_db()->GetPublicModule(); | 842 module_ = certificate_manager_model_->cert_db()->GetPublicModule(); |
| 840 } | 843 } |
| 841 | 844 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 852 | 855 |
| 853 void CertificateManagerHandler::ImportPersonalSlotUnlocked() { | 856 void CertificateManagerHandler::ImportPersonalSlotUnlocked() { |
| 854 // Determine if the private key should be unextractable after the import. | 857 // Determine if the private key should be unextractable after the import. |
| 855 // We do this by checking the value of |use_hardware_backed_| which is set | 858 // We do this by checking the value of |use_hardware_backed_| which is set |
| 856 // to true if importing into a hardware module. Currently, this only happens | 859 // to true if importing into a hardware module. Currently, this only happens |
| 857 // for Chrome OS when the "Import and Bind" option is chosen. | 860 // for Chrome OS when the "Import and Bind" option is chosen. |
| 858 bool is_extractable = !use_hardware_backed_; | 861 bool is_extractable = !use_hardware_backed_; |
| 859 int result = certificate_manager_model_->ImportFromPKCS12( | 862 int result = certificate_manager_model_->ImportFromPKCS12( |
| 860 module_.get(), file_data_, password_, is_extractable); | 863 module_.get(), file_data_, password_, is_extractable); |
| 861 ImportExportCleanup(); | 864 ImportExportCleanup(); |
| 862 web_ui()->CallJavascriptFunction("CertificateRestoreOverlay.dismiss"); | 865 web_ui()->CallJavascriptFunctionUnsafe("CertificateRestoreOverlay.dismiss"); |
| 863 int string_id; | 866 int string_id; |
| 864 switch (result) { | 867 switch (result) { |
| 865 case net::OK: | 868 case net::OK: |
| 866 return; | 869 return; |
| 867 case net::ERR_PKCS12_IMPORT_BAD_PASSWORD: | 870 case net::ERR_PKCS12_IMPORT_BAD_PASSWORD: |
| 868 // TODO(mattm): if the error was a bad password, we should reshow the | 871 // TODO(mattm): if the error was a bad password, we should reshow the |
| 869 // password dialog after the user dismisses the error dialog. | 872 // password dialog after the user dismisses the error dialog. |
| 870 string_id = IDS_CERT_MANAGER_BAD_PASSWORD; | 873 string_id = IDS_CERT_MANAGER_BAD_PASSWORD; |
| 871 break; | 874 break; |
| 872 case net::ERR_PKCS12_IMPORT_INVALID_MAC: | 875 case net::ERR_PKCS12_IMPORT_INVALID_MAC: |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1007 return; | 1010 return; |
| 1008 } | 1011 } |
| 1009 | 1012 |
| 1010 scoped_refptr<net::X509Certificate> root_cert = | 1013 scoped_refptr<net::X509Certificate> root_cert = |
| 1011 certificate_manager_model_->cert_db()->FindRootInList( | 1014 certificate_manager_model_->cert_db()->FindRootInList( |
| 1012 selected_cert_list_); | 1015 selected_cert_list_); |
| 1013 | 1016 |
| 1014 // TODO(mattm): check here if root_cert is not a CA cert and show error. | 1017 // TODO(mattm): check here if root_cert is not a CA cert and show error. |
| 1015 | 1018 |
| 1016 base::StringValue cert_name(root_cert->subject().GetDisplayName()); | 1019 base::StringValue cert_name(root_cert->subject().GetDisplayName()); |
| 1017 web_ui()->CallJavascriptFunction("CertificateEditCaTrustOverlay.showImport", | 1020 web_ui()->CallJavascriptFunctionUnsafe( |
| 1018 cert_name); | 1021 "CertificateEditCaTrustOverlay.showImport", cert_name); |
| 1019 } | 1022 } |
| 1020 | 1023 |
| 1021 void CertificateManagerHandler::ImportCATrustSelected( | 1024 void CertificateManagerHandler::ImportCATrustSelected( |
| 1022 const base::ListValue* args) { | 1025 const base::ListValue* args) { |
| 1023 bool fail = false; | 1026 bool fail = false; |
| 1024 bool trust_ssl = false; | 1027 bool trust_ssl = false; |
| 1025 bool trust_email = false; | 1028 bool trust_email = false; |
| 1026 bool trust_obj_sign = false; | 1029 bool trust_obj_sign = false; |
| 1027 fail |= !CallbackArgsToBool(args, 0, &trust_ssl); | 1030 fail |= !CallbackArgsToBool(args, 0, &trust_ssl); |
| 1028 fail |= !CallbackArgsToBool(args, 1, &trust_email); | 1031 fail |= !CallbackArgsToBool(args, 1, &trust_email); |
| 1029 fail |= !CallbackArgsToBool(args, 2, &trust_obj_sign); | 1032 fail |= !CallbackArgsToBool(args, 2, &trust_obj_sign); |
| 1030 if (fail) { | 1033 if (fail) { |
| 1031 LOG(ERROR) << "ImportCATrustSelected args fail"; | 1034 LOG(ERROR) << "ImportCATrustSelected args fail"; |
| 1032 ImportExportCleanup(); | 1035 ImportExportCleanup(); |
| 1033 web_ui()->CallJavascriptFunction("CertificateEditCaTrustOverlay.dismiss"); | 1036 web_ui()->CallJavascriptFunctionUnsafe( |
| 1037 "CertificateEditCaTrustOverlay.dismiss"); |
| 1034 return; | 1038 return; |
| 1035 } | 1039 } |
| 1036 | 1040 |
| 1037 // TODO(mattm): add UI for setting explicit distrust, too. | 1041 // TODO(mattm): add UI for setting explicit distrust, too. |
| 1038 // http://crbug.com/128411 | 1042 // http://crbug.com/128411 |
| 1039 net::NSSCertDatabase::ImportCertFailureList not_imported; | 1043 net::NSSCertDatabase::ImportCertFailureList not_imported; |
| 1040 bool result = certificate_manager_model_->ImportCACerts( | 1044 bool result = certificate_manager_model_->ImportCACerts( |
| 1041 selected_cert_list_, | 1045 selected_cert_list_, |
| 1042 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL + | 1046 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL + |
| 1043 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL + | 1047 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL + |
| 1044 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN, | 1048 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN, |
| 1045 ¬_imported); | 1049 ¬_imported); |
| 1046 web_ui()->CallJavascriptFunction("CertificateEditCaTrustOverlay.dismiss"); | 1050 web_ui()->CallJavascriptFunctionUnsafe( |
| 1051 "CertificateEditCaTrustOverlay.dismiss"); |
| 1047 if (!result) { | 1052 if (!result) { |
| 1048 ShowError( | 1053 ShowError( |
| 1049 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), | 1054 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), |
| 1050 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); | 1055 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); |
| 1051 } else if (!not_imported.empty()) { | 1056 } else if (!not_imported.empty()) { |
| 1052 ShowImportErrors( | 1057 ShowImportErrors( |
| 1053 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), | 1058 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), |
| 1054 not_imported); | 1059 not_imported); |
| 1055 } | 1060 } |
| 1056 ImportExportCleanup(); | 1061 ImportExportCleanup(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1080 std::unique_ptr<CertificateManagerModel> model) { | 1085 std::unique_ptr<CertificateManagerModel> model) { |
| 1081 certificate_manager_model_ = std::move(model); | 1086 certificate_manager_model_ = std::move(model); |
| 1082 CertificateManagerModelReady(); | 1087 CertificateManagerModelReady(); |
| 1083 } | 1088 } |
| 1084 | 1089 |
| 1085 void CertificateManagerHandler::CertificateManagerModelReady() { | 1090 void CertificateManagerHandler::CertificateManagerModelReady() { |
| 1086 base::FundamentalValue user_db_available_value( | 1091 base::FundamentalValue user_db_available_value( |
| 1087 certificate_manager_model_->is_user_db_available()); | 1092 certificate_manager_model_->is_user_db_available()); |
| 1088 base::FundamentalValue tpm_available_value( | 1093 base::FundamentalValue tpm_available_value( |
| 1089 certificate_manager_model_->is_tpm_available()); | 1094 certificate_manager_model_->is_tpm_available()); |
| 1090 web_ui()->CallJavascriptFunction("CertificateManager.onModelReady", | 1095 web_ui()->CallJavascriptFunctionUnsafe("CertificateManager.onModelReady", |
| 1091 user_db_available_value, | 1096 user_db_available_value, |
| 1092 tpm_available_value); | 1097 tpm_available_value); |
| 1093 certificate_manager_model_->Refresh(); | 1098 certificate_manager_model_->Refresh(); |
| 1094 } | 1099 } |
| 1095 | 1100 |
| 1096 void CertificateManagerHandler::Populate(const base::ListValue* args) { | 1101 void CertificateManagerHandler::Populate(const base::ListValue* args) { |
| 1097 if (certificate_manager_model_) { | 1102 if (certificate_manager_model_) { |
| 1098 // Already have a model, the webui must be re-loading. Just re-run the | 1103 // Already have a model, the webui must be re-loading. Just re-run the |
| 1099 // webui initialization. | 1104 // webui initialization. |
| 1100 CertificateManagerModelReady(); | 1105 CertificateManagerModelReady(); |
| 1101 return; | 1106 return; |
| 1102 } | 1107 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1176 std::sort(subnodes->begin(), subnodes->end(), comparator); | 1181 std::sort(subnodes->begin(), subnodes->end(), comparator); |
| 1177 | 1182 |
| 1178 dict->Set(kSubNodesId, subnodes); | 1183 dict->Set(kSubNodesId, subnodes); |
| 1179 nodes->Append(dict); | 1184 nodes->Append(dict); |
| 1180 } | 1185 } |
| 1181 std::sort(nodes->begin(), nodes->end(), comparator); | 1186 std::sort(nodes->begin(), nodes->end(), comparator); |
| 1182 | 1187 |
| 1183 base::ListValue args; | 1188 base::ListValue args; |
| 1184 args.Append(new base::StringValue(tree_name)); | 1189 args.Append(new base::StringValue(tree_name)); |
| 1185 args.Append(nodes); | 1190 args.Append(nodes); |
| 1186 web_ui()->CallJavascriptFunction("CertificateManager.onPopulateTree", args); | 1191 web_ui()->CallJavascriptFunctionUnsafe("CertificateManager.onPopulateTree", |
| 1192 args); |
| 1187 } | 1193 } |
| 1188 } | 1194 } |
| 1189 | 1195 |
| 1190 void CertificateManagerHandler::ShowError(const std::string& title, | 1196 void CertificateManagerHandler::ShowError(const std::string& title, |
| 1191 const std::string& error) const { | 1197 const std::string& error) const { |
| 1192 ScopedVector<const base::Value> args; | 1198 ScopedVector<const base::Value> args; |
| 1193 args.push_back(new base::StringValue(title)); | 1199 args.push_back(new base::StringValue(title)); |
| 1194 args.push_back(new base::StringValue(error)); | 1200 args.push_back(new base::StringValue(error)); |
| 1195 args.push_back(new base::StringValue(l10n_util::GetStringUTF8(IDS_OK))); | 1201 args.push_back(new base::StringValue(l10n_util::GetStringUTF8(IDS_OK))); |
| 1196 args.push_back(base::Value::CreateNullValue().release()); // cancelTitle | 1202 args.push_back(base::Value::CreateNullValue().release()); // cancelTitle |
| 1197 args.push_back(base::Value::CreateNullValue().release()); // okCallback | 1203 args.push_back(base::Value::CreateNullValue().release()); // okCallback |
| 1198 args.push_back(base::Value::CreateNullValue().release()); // cancelCallback | 1204 args.push_back(base::Value::CreateNullValue().release()); // cancelCallback |
| 1199 web_ui()->CallJavascriptFunction("AlertOverlay.show", args.get()); | 1205 web_ui()->CallJavascriptFunctionUnsafe("AlertOverlay.show", args.get()); |
| 1200 } | 1206 } |
| 1201 | 1207 |
| 1202 void CertificateManagerHandler::ShowImportErrors( | 1208 void CertificateManagerHandler::ShowImportErrors( |
| 1203 const std::string& title, | 1209 const std::string& title, |
| 1204 const net::NSSCertDatabase::ImportCertFailureList& not_imported) const { | 1210 const net::NSSCertDatabase::ImportCertFailureList& not_imported) const { |
| 1205 std::string error; | 1211 std::string error; |
| 1206 if (selected_cert_list_.size() == 1) | 1212 if (selected_cert_list_.size() == 1) |
| 1207 error = l10n_util::GetStringUTF8( | 1213 error = l10n_util::GetStringUTF8( |
| 1208 IDS_CERT_MANAGER_IMPORT_SINGLE_NOT_IMPORTED); | 1214 IDS_CERT_MANAGER_IMPORT_SINGLE_NOT_IMPORTED); |
| 1209 else if (not_imported.size() == selected_cert_list_.size()) | 1215 else if (not_imported.size() == selected_cert_list_.size()) |
| 1210 error = l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ALL_NOT_IMPORTED); | 1216 error = l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ALL_NOT_IMPORTED); |
| 1211 else | 1217 else |
| 1212 error = l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_SOME_NOT_IMPORTED); | 1218 error = l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_SOME_NOT_IMPORTED); |
| 1213 | 1219 |
| 1214 base::ListValue cert_error_list; | 1220 base::ListValue cert_error_list; |
| 1215 for (size_t i = 0; i < not_imported.size(); ++i) { | 1221 for (size_t i = 0; i < not_imported.size(); ++i) { |
| 1216 const net::NSSCertDatabase::ImportCertFailure& failure = not_imported[i]; | 1222 const net::NSSCertDatabase::ImportCertFailure& failure = not_imported[i]; |
| 1217 base::DictionaryValue* dict = new base::DictionaryValue; | 1223 base::DictionaryValue* dict = new base::DictionaryValue; |
| 1218 dict->SetString(kNameId, failure.certificate->subject().GetDisplayName()); | 1224 dict->SetString(kNameId, failure.certificate->subject().GetDisplayName()); |
| 1219 dict->SetString(kErrorId, NetErrorToString(failure.net_error)); | 1225 dict->SetString(kErrorId, NetErrorToString(failure.net_error)); |
| 1220 cert_error_list.Append(dict); | 1226 cert_error_list.Append(dict); |
| 1221 } | 1227 } |
| 1222 | 1228 |
| 1223 base::StringValue title_value(title); | 1229 base::StringValue title_value(title); |
| 1224 base::StringValue error_value(error); | 1230 base::StringValue error_value(error); |
| 1225 web_ui()->CallJavascriptFunction("CertificateImportErrorOverlay.show", | 1231 web_ui()->CallJavascriptFunctionUnsafe("CertificateImportErrorOverlay.show", |
| 1226 title_value, | 1232 title_value, error_value, |
| 1227 error_value, | 1233 cert_error_list); |
| 1228 cert_error_list); | |
| 1229 } | 1234 } |
| 1230 | 1235 |
| 1231 gfx::NativeWindow CertificateManagerHandler::GetParentWindow() const { | 1236 gfx::NativeWindow CertificateManagerHandler::GetParentWindow() const { |
| 1232 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); | 1237 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); |
| 1233 } | 1238 } |
| 1234 | 1239 |
| 1235 } // namespace options | 1240 } // namespace options |
| OLD | NEW |