Chromium Code Reviews| Index: chrome/browser/gtk/ssl_client_certificate_selector.cc |
| diff --git a/chrome/browser/gtk/ssl_client_certificate_selector.cc b/chrome/browser/gtk/ssl_client_certificate_selector.cc |
| index 8e4077e934ec9721d9b2ad2aa58b8c5ffd302c94..09d03877992c734e801c5577ec2f03bf650994f5 100644 |
| --- a/chrome/browser/gtk/ssl_client_certificate_selector.cc |
| +++ b/chrome/browser/gtk/ssl_client_certificate_selector.cc |
| @@ -21,6 +21,7 @@ |
| #include "chrome/browser/gtk/owned_widget_gtk.h" |
| #include "chrome/browser/ssl/ssl_client_auth_handler.h" |
| #include "chrome/browser/tab_contents/tab_contents.h" |
| +#include "chrome/browser/ui/pk11_password_dialog.h" |
| #include "chrome/common/net/x509_certificate_model.h" |
| #include "gfx/native_widget_types.h" |
| #include "grit/generated_resources.h" |
| @@ -60,6 +61,9 @@ class SSLClientCertificateSelector : public ConstrainedDialogDelegate { |
| static std::string FormatDetailsText( |
| net::X509Certificate::OSCertHandle cert); |
| + // Callback after unlocking certificate slot. |
| + void Unlocked(); |
| + |
| CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnComboBoxChanged); |
| CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnViewClicked); |
| CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnCancelClicked); |
| @@ -246,7 +250,7 @@ std::string SSLClientCertificateSelector::FormatDetailsText( |
| rv += l10n_util::GetStringFUTF8( |
| IDS_CERT_SUBJECTNAME_FORMAT, |
| - UTF8ToUTF16(x509_certificate_model::GetSubjectName(cert)));; |
| + UTF8ToUTF16(x509_certificate_model::GetSubjectName(cert))); |
| rv += "\n "; |
| rv += l10n_util::GetStringFUTF8( |
| @@ -303,6 +307,14 @@ std::string SSLClientCertificateSelector::FormatDetailsText( |
| return rv; |
| } |
| +void SSLClientCertificateSelector::Unlocked() { |
| + net::X509Certificate* cert = GetSelectedCert(); |
|
wtc
2010/12/15 20:54:36
Can |cert| be passed to this method as a parameter
mattm
2011/01/12 01:22:07
Could be done, but UnlockSlotIfNecessary and Unloc
|
| + delegate_->CertificateSelected(cert); |
| + delegate_ = NULL; |
| + DCHECK(window_); |
| + window_->CloseConstrainedWindow(); |
| +} |
| + |
| void SSLClientCertificateSelector::OnComboBoxChanged(GtkWidget* combo_box) { |
| int selected = gtk_combo_box_get_active( |
| GTK_COMBO_BOX(cert_combo_box_)); |
| @@ -330,10 +342,12 @@ void SSLClientCertificateSelector::OnCancelClicked(GtkWidget* button) { |
| void SSLClientCertificateSelector::OnOkClicked(GtkWidget* button) { |
| net::X509Certificate* cert = GetSelectedCert(); |
| - delegate_->CertificateSelected(cert); |
| - delegate_ = NULL; |
| - DCHECK(window_); |
| - window_->CloseConstrainedWindow(); |
| + |
| + browser::UnlockCertSlotIfNecessary( |
| + cert, |
| + browser::kPK11PasswordClientAuth, |
| + cert_request_info_->host_and_port, // TODO(mattm): strip port part? |
|
wtc
2010/12/15 20:54:36
The port part is important.
mattm
2011/01/12 01:22:07
Done.
|
| + NewCallback(this, &SSLClientCertificateSelector::Unlocked)); |
| } |
| void SSLClientCertificateSelector::OnPromptShown(GtkWidget* widget, |