diff options
Diffstat (limited to 'content/browser/loader')
-rw-r--r-- | content/browser/loader/resource_dispatcher_host_impl.cc | 10 | ||||
-rw-r--r-- | content/browser/loader/resource_dispatcher_host_impl.h | 2 | ||||
-rw-r--r-- | content/browser/loader/resource_loader.cc | 25 | ||||
-rw-r--r-- | content/browser/loader/resource_loader.h | 8 | ||||
-rw-r--r-- | content/browser/loader/resource_loader_unittest.cc | 1 |
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_; |