summaryrefslogtreecommitdiffstats
path: root/chrome/browser/dom_ui
diff options
context:
space:
mode:
authormattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-13 01:21:13 +0000
committermattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-13 01:21:13 +0000
commit7a3a965742838666dbfb3665783d08f3976f1d6c (patch)
tree31380e6ab890536b8cfc186772c974b62e88c012 /chrome/browser/dom_ui
parent8d260e51fdb7b92eae3dc4a1800dc571711c9277 (diff)
downloadchromium_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.cc63
-rw-r--r--chrome/browser/dom_ui/options/certificate_manager_handler.h10
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_,
+ &not_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