summaryrefslogtreecommitdiffstats
path: root/content/browser/loader
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/loader')
-rw-r--r--content/browser/loader/resource_dispatcher_host_impl.cc10
-rw-r--r--content/browser/loader/resource_dispatcher_host_impl.h2
-rw-r--r--content/browser/loader/resource_loader.cc25
-rw-r--r--content/browser/loader/resource_loader.h8
-rw-r--r--content/browser/loader/resource_loader_unittest.cc1
5 files changed, 18 insertions, 28 deletions
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
index 8031983..a44d153 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.cc
+++ b/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -765,16 +765,6 @@ ResourceDispatcherHostImpl::MaybeInterceptAsStream(net::URLRequest* request,
return handler.Pass();
}
-void ResourceDispatcherHostImpl::ClearSSLClientAuthHandlerForRequest(
- net::URLRequest* request) {
- ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest(request);
- if (info) {
- ResourceLoader* loader = GetLoader(info->GetGlobalRequestID());
- if (loader)
- loader->ClearSSLClientAuthHandler();
- }
-}
-
ResourceDispatcherHostLoginDelegate*
ResourceDispatcherHostImpl::CreateLoginDelegate(
ResourceLoader* loader,
diff --git a/content/browser/loader/resource_dispatcher_host_impl.h b/content/browser/loader/resource_dispatcher_host_impl.h
index 86f8d60..a2631a2 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.h
+++ b/content/browser/loader/resource_dispatcher_host_impl.h
@@ -245,8 +245,6 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
ResourceResponse* response,
std::string* payload);
- void ClearSSLClientAuthHandlerForRequest(net::URLRequest* request);
-
ResourceScheduler* scheduler() { return scheduler_.get(); }
// Called by a ResourceHandler when it's ready to start reading data and
diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc
index 0aa9ceee..8c11b80 100644
--- a/content/browser/loader/resource_loader.cc
+++ b/content/browser/loader/resource_loader.cc
@@ -97,8 +97,7 @@ ResourceLoader::ResourceLoader(scoped_ptr<net::URLRequest> request,
ResourceLoader::~ResourceLoader() {
if (login_delegate_.get())
login_delegate_->OnRequestCancelled();
- if (ssl_client_auth_handler_.get())
- ssl_client_auth_handler_->OnRequestCancelled();
+ ssl_client_auth_handler_.reset();
// Run ResourceHandler destructor before we tear-down the rest of our state
// as the ResourceHandler may want to inspect the URLRequest and other state.
@@ -211,10 +210,6 @@ void ResourceLoader::ClearLoginDelegate() {
login_delegate_ = NULL;
}
-void ResourceLoader::ClearSSLClientAuthHandler() {
- ssl_client_auth_handler_ = NULL;
-}
-
void ResourceLoader::OnUploadProgressACK() {
waiting_for_upload_progress_ack_ = false;
}
@@ -292,12 +287,14 @@ void ResourceLoader::OnCertificateRequested(
return;
}
- DCHECK(!ssl_client_auth_handler_.get())
+ DCHECK(!ssl_client_auth_handler_)
<< "OnCertificateRequested called with ssl_client_auth_handler pending";
- ssl_client_auth_handler_ = new SSLClientAuthHandler(
+ ssl_client_auth_handler_.reset(new SSLClientAuthHandler(
GetRequestInfo()->GetContext()->CreateClientCertStore(),
request_.get(),
- cert_info);
+ cert_info,
+ base::Bind(&ResourceLoader::ContinueWithCertificate,
+ weak_ptr_factory_.GetWeakPtr())));
ssl_client_auth_handler_->SelectCertificate();
}
@@ -529,10 +526,7 @@ void ResourceLoader::CancelRequestInternal(int error, bool from_renderer) {
login_delegate_->OnRequestCancelled();
login_delegate_ = NULL;
}
- if (ssl_client_auth_handler_.get()) {
- ssl_client_auth_handler_->OnRequestCancelled();
- ssl_client_auth_handler_ = NULL;
- }
+ ssl_client_auth_handler_.reset();
request_->CancelWithError(error);
@@ -770,4 +764,9 @@ void ResourceLoader::RecordHistograms() {
}
}
+void ResourceLoader::ContinueWithCertificate(net::X509Certificate* cert) {
+ ssl_client_auth_handler_.reset();
+ request_->ContinueWithCertificate(cert);
+}
+
} // namespace content
diff --git a/content/browser/loader/resource_loader.h b/content/browser/loader/resource_loader.h
index b5c8b8a..d740ec0 100644
--- a/content/browser/loader/resource_loader.h
+++ b/content/browser/loader/resource_loader.h
@@ -15,6 +15,10 @@
#include "content/public/common/signed_certificate_timestamp_id_and_status.h"
#include "net/url_request/url_request.h"
+namespace net {
+class X509Certificate;
+}
+
namespace content {
class ResourceDispatcherHostLoginDelegate;
class ResourceLoaderDelegate;
@@ -46,7 +50,6 @@ class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
ResourceRequestInfoImpl* GetRequestInfo();
void ClearLoginDelegate();
- void ClearSSLClientAuthHandler();
// IPC message handlers:
void OnUploadProgressACK();
@@ -99,6 +102,7 @@ class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
void ResponseCompleted();
void CallDidFinishLoading();
void RecordHistograms();
+ void ContinueWithCertificate(net::X509Certificate* cert);
bool is_deferred() const { return deferred_stage_ != DEFERRED_NONE; }
@@ -129,7 +133,7 @@ class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
ResourceLoaderDelegate* delegate_;
scoped_refptr<ResourceDispatcherHostLoginDelegate> login_delegate_;
- scoped_refptr<SSLClientAuthHandler> ssl_client_auth_handler_;
+ scoped_ptr<SSLClientAuthHandler> ssl_client_auth_handler_;
uint64 last_upload_position_;
bool waiting_for_upload_progress_ack_;
diff --git a/content/browser/loader/resource_loader_unittest.cc b/content/browser/loader/resource_loader_unittest.cc
index 8910dec..2af4ffc 100644
--- a/content/browser/loader/resource_loader_unittest.cc
+++ b/content/browser/loader/resource_loader_unittest.cc
@@ -231,7 +231,6 @@ class SelectCertificateBrowserClient : public TestContentBrowserClient {
void SelectClientCertificate(
int render_process_id,
int render_view_id,
- const net::HttpNetworkSession* network_session,
net::SSLCertRequestInfo* cert_request_info,
const base::Callback<void(net::X509Certificate*)>& callback) override {
++call_count_;