| Index: chrome/browser/dom_ui/options/certificate_manager_handler.cc
|
| diff --git a/chrome/browser/dom_ui/options/certificate_manager_handler.cc b/chrome/browser/dom_ui/options/certificate_manager_handler.cc
|
| index 480fcb4a3cd7460c8ca28f66d7666bd330ea477f..68a76851967a88142563a5a7b215f280041d2ec1 100644
|
| --- a/chrome/browser/dom_ui/options/certificate_manager_handler.cc
|
| +++ b/chrome/browser/dom_ui/options/certificate_manager_handler.cc
|
| @@ -17,7 +17,9 @@
|
| #include "chrome/browser/gtk/certificate_dialogs.h"
|
| #include "chrome/browser/tab_contents/tab_contents.h"
|
| #include "chrome/browser/tab_contents/tab_contents_view.h"
|
| +#include "chrome/browser/ui/pk11_password_dialog.h"
|
| #include "grit/generated_resources.h"
|
| +#include "net/base/crypto_module.h"
|
| #include "net/base/x509_certificate.h"
|
|
|
| namespace {
|
| @@ -527,6 +529,21 @@ void CertificateManagerHandler::ExportPersonalPasswordSelected(
|
| ImportExportCleanup();
|
| return;
|
| }
|
| +
|
| + // Currently, we don't support exporting more than one at a time. If we do,
|
| + // this would need some cleanup to handle unlocking multiple slots.
|
| + DCHECK_EQ(selected_cert_list_.size(), 1U);
|
| +
|
| + // TODO(mattm): do something smarter about non-extractable keys
|
| + browser::UnlockCertSlotIfNecessary(
|
| + selected_cert_list_[0].get(),
|
| + browser::kPK11PasswordCertExport,
|
| + "", // unused.
|
| + NewCallback(this,
|
| + &CertificateManagerHandler::ExportPersonalSlotsUnlocked));
|
| +}
|
| +
|
| +void CertificateManagerHandler::ExportPersonalSlotsUnlocked() {
|
| std::string output;
|
| int num_exported = certificate_manager_model_->cert_db().ExportToPKCS12(
|
| selected_cert_list_,
|
| @@ -605,7 +622,23 @@ void CertificateManagerHandler::ImportPersonalFileRead(
|
| UTF8ToUTF16(safe_strerror(read_errno))));
|
| return;
|
| }
|
| - int result = certificate_manager_model_->ImportFromPKCS12(data, password_);
|
| +
|
| + file_data_ = data;
|
| +
|
| + // TODO(mattm): allow user to choose a slot to import to.
|
| + module_ = certificate_manager_model_->cert_db().GetDefaultModule();
|
| +
|
| + browser::UnlockSlotIfNecessary(
|
| + module_.get(),
|
| + browser::kPK11PasswordCertImport,
|
| + "", // unused.
|
| + NewCallback(this,
|
| + &CertificateManagerHandler::ImportPersonalSlotUnlocked));
|
| +}
|
| +
|
| +void CertificateManagerHandler::ImportPersonalSlotUnlocked() {
|
| + int result = certificate_manager_model_->ImportFromPKCS12(
|
| + module_, file_data_, password_);
|
| ImportExportCleanup();
|
| dom_ui_->CallJavascriptFunction(L"CertificateRestoreOverlay.dismiss");
|
| switch (result) {
|
| @@ -634,8 +667,10 @@ void CertificateManagerHandler::CancelImportExportProcess(
|
| void CertificateManagerHandler::ImportExportCleanup() {
|
| file_path_.clear();
|
| password_.clear();
|
| + file_data_.clear();
|
| selected_cert_list_.clear();
|
| select_file_dialog_ = NULL;
|
| + module_ = NULL;
|
| }
|
|
|
| void CertificateManagerHandler::ImportServer(const ListValue* args) {
|
|
|