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.AppendString(tree_name); | 1189 args.AppendString(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 |