diff options
author | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-13 01:21:13 +0000 |
---|---|---|
committer | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-13 01:21:13 +0000 |
commit | 7a3a965742838666dbfb3665783d08f3976f1d6c (patch) | |
tree | 31380e6ab890536b8cfc186772c974b62e88c012 /chrome/browser/dom_ui | |
parent | 8d260e51fdb7b92eae3dc4a1800dc571711c9277 (diff) | |
download | chromium_src-7a3a965742838666dbfb3665783d08f3976f1d6c.zip chromium_src-7a3a965742838666dbfb3665783d08f3976f1d6c.tar.gz chromium_src-7a3a965742838666dbfb3665783d08f3976f1d6c.tar.bz2 |
DOMUI Cert Manager: Add import server cert function.
BUG=19991
TEST=manual
Review URL: http://codereview.chromium.org/3691008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62368 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/dom_ui')
-rw-r--r-- | chrome/browser/dom_ui/options/certificate_manager_handler.cc | 63 | ||||
-rw-r--r-- | chrome/browser/dom_ui/options/certificate_manager_handler.h | 10 |
2 files changed, 73 insertions, 0 deletions
diff --git a/chrome/browser/dom_ui/options/certificate_manager_handler.cc b/chrome/browser/dom_ui/options/certificate_manager_handler.cc index ed1e9bc..bf30674 100644 --- a/chrome/browser/dom_ui/options/certificate_manager_handler.cc +++ b/chrome/browser/dom_ui/options/certificate_manager_handler.cc @@ -34,6 +34,7 @@ static const char kErrorId[] = "error"; enum { EXPORT_PERSONAL_FILE_SELECTED = 1, IMPORT_PERSONAL_FILE_SELECTED, + IMPORT_SERVER_FILE_SELECTED, IMPORT_CA_FILE_SELECTED, }; @@ -386,6 +387,9 @@ void CertificateManagerHandler::RegisterMessages() { dom_ui_->RegisterMessageCallback("importCaCertificateTrustSelected", NewCallback(this, &CertificateManagerHandler::ImportCATrustSelected)); + dom_ui_->RegisterMessageCallback("importServerCertificate", + NewCallback(this, &CertificateManagerHandler::ImportServer)); + dom_ui_->RegisterMessageCallback("exportCertificate", NewCallback(this, &CertificateManagerHandler::Export)); @@ -414,6 +418,9 @@ void CertificateManagerHandler::FileSelected(const FilePath& path, int index, case IMPORT_PERSONAL_FILE_SELECTED: ImportPersonalFileSelected(path); break; + case IMPORT_SERVER_FILE_SELECTED: + ImportServerFileSelected(path); + break; case IMPORT_CA_FILE_SELECTED: ImportCAFileSelected(path); break; @@ -426,6 +433,7 @@ void CertificateManagerHandler::FileSelectionCanceled(void* params) { switch (reinterpret_cast<intptr_t>(params)) { case EXPORT_PERSONAL_FILE_SELECTED: case IMPORT_PERSONAL_FILE_SELECTED: + case IMPORT_SERVER_FILE_SELECTED: case IMPORT_CA_FILE_SELECTED: ImportExportCleanup(); break; @@ -643,6 +651,61 @@ void CertificateManagerHandler::ImportExportCleanup() { select_file_dialog_ = NULL; } +void CertificateManagerHandler::ImportServer(const ListValue* args) { + select_file_dialog_ = SelectFileDialog::Create(this); + ShowCertSelectFileDialog( + select_file_dialog_.get(), + SelectFileDialog::SELECT_OPEN_FILE, + FilePath(), + GetParentWindow(), + reinterpret_cast<void*>(IMPORT_SERVER_FILE_SELECTED)); +} + +void CertificateManagerHandler::ImportServerFileSelected(const FilePath& path) { + file_path_ = path; + file_access_provider_->StartRead( + file_path_, + &consumer_, + NewCallback(this, &CertificateManagerHandler::ImportServerFileRead)); +} + +void CertificateManagerHandler::ImportServerFileRead(int read_errno, + std::string data) { + if (read_errno) { + ImportExportCleanup(); + ShowError( + l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), + l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_READ_ERROR_FORMAT, + UTF8ToUTF16(safe_strerror(read_errno)))); + return; + } + + selected_cert_list_ = net::X509Certificate::CreateCertificateListFromBytes( + data.data(), data.size(), net::X509Certificate::FORMAT_AUTO); + if (selected_cert_list_.empty()) { + ImportExportCleanup(); + ShowError( + l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), + l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CERT_PARSE_ERROR)); + return; + } + + net::CertDatabase::ImportCertFailureList not_imported; + bool result = certificate_manager_model_->ImportServerCert( + selected_cert_list_, + ¬_imported); + if (!result) { + ShowError( + l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), + l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); + } else if (!not_imported.empty()) { + ShowImportErrors( + l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), + not_imported); + } + ImportExportCleanup(); +} + void CertificateManagerHandler::ImportCA(const ListValue* args) { select_file_dialog_ = SelectFileDialog::Create(this); ShowCertSelectFileDialog(select_file_dialog_.get(), diff --git a/chrome/browser/dom_ui/options/certificate_manager_handler.h b/chrome/browser/dom_ui/options/certificate_manager_handler.h index 2182c2b..3ac3898 100644 --- a/chrome/browser/dom_ui/options/certificate_manager_handler.h +++ b/chrome/browser/dom_ui/options/certificate_manager_handler.h @@ -85,6 +85,16 @@ class CertificateManagerHandler : public OptionsPageUIHandler, void ImportPersonalPasswordSelected(const ListValue* args); void ImportPersonalFileRead(int read_errno, std::string data); + // Import Server certificates from file. Sequence goes like: + // 1. user clicks on import button -> ImportServer -> launches file selector + // 2. user selects file -> ImportServerFileSelected -> starts async read + // 3. read completes -> ImportServerFileRead -> parse certs -> attempt import + // 4a. if import succeeds -> ImportExportCleanup + // 4b. if import fails -> show error, ImportExportCleanup + void ImportServer(const ListValue* args); + void ImportServerFileSelected(const FilePath& path); + void ImportServerFileRead(int read_errno, std::string data); + // Import Certificate Authorities from file. Sequence goes like: // 1. user clicks on import button -> ImportCA -> launches file selector // 2. user selects file -> ImportCAFileSelected -> starts async read |