diff options
author | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-12 21:45:11 +0000 |
---|---|---|
committer | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-12 21:45:11 +0000 |
commit | 0b45559b42825a157d3f468e1a5ee102cc67d9a8 (patch) | |
tree | 00d25404d9803f5e905eab058cd175dca9fb68e0 /net/url_request/url_request_http_job.cc | |
parent | 37a24e0d9e75a916c13900cf34d7c6b54acc2001 (diff) | |
download | chromium_src-0b45559b42825a157d3f468e1a5ee102cc67d9a8.zip chromium_src-0b45559b42825a157d3f468e1a5ee102cc67d9a8.tar.gz chromium_src-0b45559b42825a157d3f468e1a5ee102cc67d9a8.tar.bz2 |
Specify new methods for supporting SSL client authentication.
See the changes to url_request.h and ssl_cert_request_info.h.
They are similar to the methods for handling SSL certificate
errors and HTTP authentication.
The handling of servers that request but don't require SSL
client authentication is reimplemented using the new methods.
R=rvargas,eroman
BUG=http://crbug.com/318
TEST=none
Review URL: http://codereview.chromium.org/118039
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18322 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/url_request/url_request_http_job.cc')
-rw-r--r-- | net/url_request/url_request_http_job.cc | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index 6ad2dc5..da56c8b 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -20,6 +20,7 @@ #include "net/base/net_errors.h" #include "net/base/net_util.h" #include "net/base/sdch_manager.h" +#include "net/base/ssl_cert_request_info.h" #include "net/http/http_response_headers.h" #include "net/http/http_response_info.h" #include "net/http/http_transaction.h" @@ -384,6 +385,26 @@ void URLRequestHttpJob::CancelAuth() { this, &URLRequestHttpJob::OnStartCompleted, net::OK)); } +void URLRequestHttpJob::ContinueWithCertificate( + net::X509Certificate* client_cert) { + DCHECK(transaction_.get()); + + DCHECK(!response_info_) << "should not have a response yet"; + + // No matter what, we want to report our status as IO pending since we will + // be notifying our consumer asynchronously via OnStartCompleted. + SetStatus(URLRequestStatus(URLRequestStatus::IO_PENDING, 0)); + + int rv = transaction_->RestartWithCertificate(client_cert, &start_callback_); + if (rv == net::ERR_IO_PENDING) + return; + + // The transaction started synchronously, but we need to notify the + // URLRequest delegate via the message loop. + MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( + this, &URLRequestHttpJob::OnStartCompleted, rv)); +} + void URLRequestHttpJob::ContinueDespiteLastError() { // If the transaction was destroyed, then the job was cancelled. if (!transaction_.get()) @@ -453,6 +474,9 @@ void URLRequestHttpJob::OnStartCompleted(int result) { // ssl_info. request_->delegate()->OnSSLCertificateError( request_, result, transaction_->GetResponseInfo()->ssl_info.cert); + } else if (result == net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED) { + request_->delegate()->OnCertificateRequested( + request_, transaction_->GetResponseInfo()->cert_request_info); } else { NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, result)); } |