| Index: chrome/browser/ssl/ssl_client_auth_observer.cc
|
| diff --git a/chrome/browser/ssl/ssl_client_auth_observer.cc b/chrome/browser/ssl/ssl_client_auth_observer.cc
|
| index fd9fa66b69352571fbe85bd46af5849f26083091..b0f7122e3625d0e99310caa73f0514c4bab55743 100644
|
| --- a/chrome/browser/ssl/ssl_client_auth_observer.cc
|
| +++ b/chrome/browser/ssl/ssl_client_auth_observer.cc
|
| @@ -14,6 +14,8 @@
|
| #include "content/public/browser/notification_service.h"
|
| #include "net/cert/x509_certificate.h"
|
| #include "net/ssl/ssl_cert_request_info.h"
|
| +#include "net/ssl/ssl_platform_key.h"
|
| +#include "net/ssl/ssl_private_key.h"
|
|
|
| using content::BrowserThread;
|
|
|
| @@ -48,7 +50,12 @@ void SSLClientAuthObserver::CertificateSelected(
|
| content::Source<content::BrowserContext>(browser_context_),
|
| content::Details<CertDetails>(&details));
|
|
|
| - delegate_->ContinueWithCertificate(certificate);
|
| + scoped_refptr<net::SSLPrivateKey> private_key;
|
| +
|
| + if (certificate)
|
| + private_key = net::FetchClientCertPrivateKey(certificate);
|
| +
|
| + delegate_->ContinueWithCertificate(certificate, private_key.get());
|
| delegate_.reset();
|
| }
|
|
|
| @@ -71,13 +78,19 @@ void SSLClientAuthObserver::Observe(
|
|
|
| CertDetails* cert_details = content::Details<CertDetails>(details).ptr();
|
| if (!cert_details->first->host_and_port.Equals(
|
| - cert_request_info_->host_and_port))
|
| + cert_request_info_->host_and_port))
|
| return;
|
|
|
| DVLOG(1) << this << " got matching notification and selecting cert "
|
| << cert_details->second;
|
| StopObserving();
|
| - delegate_->ContinueWithCertificate(cert_details->second);
|
| +
|
| + scoped_refptr<net::SSLPrivateKey> private_key;
|
| +
|
| + if (cert_details->second)
|
| + private_key = net::FetchClientCertPrivateKey(cert_details->second);
|
| +
|
| + delegate_->ContinueWithCertificate(cert_details->second, private_key.get());
|
| delegate_.reset();
|
| OnCertSelectedByNotification();
|
| }
|
|
|