Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1754)

Unified Diff: content/browser/ssl/ssl_client_auth_handler.cc

Issue 42773002: Get ClientCertStore through ResourceContext. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update unittest, clang fix Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/ssl/ssl_client_auth_handler.cc
diff --git a/content/browser/ssl/ssl_client_auth_handler.cc b/content/browser/ssl/ssl_client_auth_handler.cc
index 3340334f18376ef1bff346b2c21b9eebc105051d..b76542d899dd912441106b3a182a3281933c997d 100644
--- a/content/browser/ssl/ssl_client_auth_handler.cc
+++ b/content/browser/ssl/ssl_client_auth_handler.cc
@@ -9,20 +9,24 @@
#include "content/browser/loader/resource_request_info_impl.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/resource_context.h"
#include "net/cert/x509_certificate.h"
#include "net/http/http_transaction_factory.h"
+#include "net/ssl/client_cert_store.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
namespace content {
SSLClientAuthHandler::SSLClientAuthHandler(
+ ResourceContext* context,
net::URLRequest* request,
net::SSLCertRequestInfo* cert_request_info)
: request_(request),
http_network_session_(
request_->context()->http_transaction_factory()->GetSession()),
- cert_request_info_(cert_request_info) {
+ cert_request_info_(cert_request_info),
+ client_cert_store_(context->GetClientCertStore()) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
}
@@ -39,6 +43,38 @@ void SSLClientAuthHandler::SelectCertificate() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
DCHECK(request_);
+ if (client_cert_store_)
+ client_cert_store_->GetClientCerts(
+ *cert_request_info_,
+ &cert_request_info_->client_certs,
+ base::Bind(&SSLClientAuthHandler::GotClientCerts, this));
+ else
+ GotClientCerts();
+}
+
+void SSLClientAuthHandler::CertificateSelected(net::X509Certificate* cert) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ VLOG(1) << this << " CertificateSelected " << cert;
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(
+ &SSLClientAuthHandler::DoCertificateSelected, this,
+ make_scoped_refptr(cert)));
+}
+
+void SSLClientAuthHandler::GotClientCerts() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ // Request may have cancelled while we were getting client certs.
+ if (!request_)
+ return;
+
+ if (client_cert_store_ && cert_request_info_->client_certs.empty()) {
+ // No need to query the user if there are no certs to choose from.
+ DoCertificateSelected(NULL);
+ return;
+ }
+
int render_process_host_id;
int render_view_host_id;
if (!ResourceRequestInfo::ForRequest(request_)->GetAssociatedRenderView(
@@ -57,17 +93,6 @@ void SSLClientAuthHandler::SelectCertificate() {
render_process_host_id, render_view_host_id));
}
-void SSLClientAuthHandler::CertificateSelected(net::X509Certificate* cert) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- VLOG(1) << this << " CertificateSelected " << cert;
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(
- &SSLClientAuthHandler::DoCertificateSelected, this,
- make_scoped_refptr(cert)));
-}
-
void SSLClientAuthHandler::DoCertificateSelected(net::X509Certificate* cert) {
VLOG(1) << this << " DoCertificateSelected " << cert;
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));

Powered by Google App Engine
This is Rietveld 408576698