| Index: chrome/browser/ui/gtk/ssl_client_certificate_selector.cc
|
| ===================================================================
|
| --- chrome/browser/ui/gtk/ssl_client_certificate_selector.cc (revision 121706)
|
| +++ chrome/browser/ui/gtk/ssl_client_certificate_selector.cc (working copy)
|
| @@ -14,14 +14,15 @@
|
| #include "base/logging.h"
|
| #include "base/utf_string_conversions.h"
|
| #include "chrome/browser/certificate_viewer.h"
|
| +#include "chrome/browser/ssl/ssl_client_auth_observer.h"
|
| #include "chrome/browser/ui/crypto_module_password_dialog.h"
|
| #include "chrome/browser/ui/gtk/constrained_window_gtk.h"
|
| #include "chrome/browser/ui/gtk/gtk_util.h"
|
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
|
| #include "chrome/common/net/x509_certificate_model.h"
|
| -#include "content/browser/ssl/ssl_client_auth_handler.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "grit/generated_resources.h"
|
| +#include "net/base/ssl_cert_request_info.h"
|
| #include "net/base/x509_certificate.h"
|
| #include "ui/base/gtk/gtk_compat.h"
|
| #include "ui/base/gtk/gtk_hig_constants.h"
|
| @@ -46,8 +47,9 @@
|
| public:
|
| explicit SSLClientCertificateSelector(
|
| TabContentsWrapper* parent,
|
| + const net::HttpNetworkSession* network_session,
|
| net::SSLCertRequestInfo* cert_request_info,
|
| - SSLClientAuthHandler* delegate);
|
| + const base::Callback<void(net::X509Certificate*)>& callback);
|
| ~SSLClientCertificateSelector();
|
|
|
| void Show();
|
| @@ -81,15 +83,11 @@
|
| CHROMEGTK_CALLBACK_1(SSLClientCertificateSelector, void, OnPromptShown,
|
| GtkWidget*);
|
|
|
| - scoped_refptr<net::SSLCertRequestInfo> cert_request_info_;
|
| -
|
| std::vector<std::string> details_strings_;
|
|
|
| GtkWidget* cert_combo_box_;
|
| GtkTextBuffer* cert_details_buffer_;
|
|
|
| - scoped_refptr<SSLClientAuthHandler> delegate_;
|
| -
|
| ui::OwnedWidgetGtk root_widget_;
|
| // Hold on to the select button to focus it.
|
| GtkWidget* select_button_;
|
| @@ -102,11 +100,10 @@
|
|
|
| SSLClientCertificateSelector::SSLClientCertificateSelector(
|
| TabContentsWrapper* wrapper,
|
| + const net::HttpNetworkSession* network_session,
|
| net::SSLCertRequestInfo* cert_request_info,
|
| - SSLClientAuthHandler* delegate)
|
| - : SSLClientAuthObserver(cert_request_info, delegate),
|
| - cert_request_info_(cert_request_info),
|
| - delegate_(delegate),
|
| + const base::Callback<void(net::X509Certificate*)>& callback)
|
| + : SSLClientAuthObserver(network_session, cert_request_info, callback),
|
| wrapper_(wrapper),
|
| window_(NULL) {
|
| root_widget_.Own(gtk_vbox_new(FALSE, ui::kControlSpacing));
|
| @@ -204,7 +201,6 @@
|
| }
|
|
|
| void SSLClientCertificateSelector::OnCertSelectedByNotification() {
|
| - delegate_ = NULL;
|
| DCHECK(window_);
|
| window_->CloseConstrainedWindow();
|
| }
|
| @@ -214,28 +210,26 @@
|
| }
|
|
|
| void SSLClientCertificateSelector::DeleteDelegate() {
|
| - if (delegate_) {
|
| - // The dialog was closed by escape key.
|
| - StopObserving();
|
| - delegate_->CertificateSelected(NULL);
|
| - }
|
| + // The dialog was closed by escape key.
|
| + StopObserving();
|
| + CertificateSelected(NULL);
|
| delete this;
|
| }
|
|
|
| void SSLClientCertificateSelector::PopulateCerts() {
|
| std::vector<std::string> nicknames;
|
| x509_certificate_model::GetNicknameStringsFromCertList(
|
| - cert_request_info_->client_certs,
|
| + cert_request_info()->client_certs,
|
| l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_EXPIRED),
|
| l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_NOT_YET_VALID),
|
| &nicknames);
|
|
|
| DCHECK_EQ(nicknames.size(),
|
| - cert_request_info_->client_certs.size());
|
| + cert_request_info()->client_certs.size());
|
|
|
| - for (size_t i = 0; i < cert_request_info_->client_certs.size(); ++i) {
|
| + for (size_t i = 0; i < cert_request_info()->client_certs.size(); ++i) {
|
| net::X509Certificate::OSCertHandle cert =
|
| - cert_request_info_->client_certs[i]->os_cert_handle();
|
| + cert_request_info()->client_certs[i]->os_cert_handle();
|
|
|
| details_strings_.push_back(FormatDetailsText(cert));
|
|
|
| @@ -252,8 +246,8 @@
|
| int selected = gtk_combo_box_get_active(GTK_COMBO_BOX(cert_combo_box_));
|
| if (selected >= 0 &&
|
| selected < static_cast<int>(
|
| - cert_request_info_->client_certs.size()))
|
| - return cert_request_info_->client_certs[selected];
|
| + cert_request_info()->client_certs.size()))
|
| + return cert_request_info()->client_certs[selected];
|
| return NULL;
|
| }
|
|
|
| @@ -332,8 +326,7 @@
|
| void SSLClientCertificateSelector::Unlocked() {
|
| // TODO(mattm): refactor so we don't need to call GetSelectedCert again.
|
| net::X509Certificate* cert = GetSelectedCert();
|
| - delegate_->CertificateSelected(cert);
|
| - delegate_ = NULL;
|
| + CertificateSelected(cert);
|
| DCHECK(window_);
|
| window_->CloseConstrainedWindow();
|
| }
|
| @@ -357,9 +350,7 @@
|
| }
|
|
|
| void SSLClientCertificateSelector::OnCancelClicked(GtkWidget* button) {
|
| - StopObserving();
|
| - delegate_->CertificateSelected(NULL);
|
| - delegate_ = NULL;
|
| + CertificateSelected(NULL);
|
| DCHECK(window_);
|
| window_->CloseConstrainedWindow();
|
| }
|
| @@ -375,7 +366,7 @@
|
| browser::UnlockCertSlotIfNecessary(
|
| cert,
|
| browser::kCryptoModulePasswordClientAuth,
|
| - cert_request_info_->host_and_port,
|
| + cert_request_info()->host_and_port,
|
| base::Bind(&SSLClientCertificateSelector::Unlocked,
|
| base::Unretained(this)));
|
| }
|
| @@ -398,12 +389,12 @@
|
|
|
| void ShowNativeSSLClientCertificateSelector(
|
| TabContentsWrapper* wrapper,
|
| + const net::HttpNetworkSession* network_session,
|
| net::SSLCertRequestInfo* cert_request_info,
|
| - SSLClientAuthHandler* delegate) {
|
| + const base::Callback<void(net::X509Certificate*)>& callback) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - (new SSLClientCertificateSelector(wrapper,
|
| - cert_request_info,
|
| - delegate))->Show();
|
| + (new SSLClientCertificateSelector(
|
| + wrapper, network_session, cert_request_info, callback))->Show();
|
| }
|
|
|
| } // namespace browser
|
|
|