Index: net/http/http_stream_factory_impl_request.h |
diff --git a/net/http/http_stream_factory_impl_request.h b/net/http/http_stream_factory_impl_request.h |
index e7eadbe9e8701f2f6da4ba99032097a5bce1953a..3c1b9960e31d6bb3971e9bafba07c93ca456f47b 100644 |
--- a/net/http/http_stream_factory_impl_request.h |
+++ b/net/http/http_stream_factory_impl_request.h |
@@ -5,6 +5,7 @@ |
#ifndef NET_HTTP_HTTP_STREAM_FACTORY_IMPL_REQUEST_H_ |
#define NET_HTTP_HTTP_STREAM_FACTORY_IMPL_REQUEST_H_ |
+#include <set> |
#include "base/scoped_ptr.h" |
#include "googleurl/src/gurl.h" |
#include "net/base/net_log.h" |
@@ -20,9 +21,6 @@ class HttpStreamFactoryImpl::Request : public HttpStreamRequest { |
const BoundNetLog& net_log); |
virtual ~Request(); |
- // Returns the Job that the Request started up. |
- Job* job() const { return job_; } |
- |
// The GURL from the HttpRequestInfo the started the Request. |
const GURL& url() const { return url_; } |
@@ -32,8 +30,9 @@ class HttpStreamFactoryImpl::Request : public HttpStreamRequest { |
// before knowing if SPDY is available. |
void SetSpdySessionKey(const HostPortProxyPair& spdy_session_key); |
- // Binds |job| to this request. |
- void BindJob(HttpStreamFactoryImpl::Job* job); |
+ // Attaches |job| to this request. Does not mean that Request will use |job|, |
+ // but Request will own |job|. |
+ void AttachJob(HttpStreamFactoryImpl::Job* job); |
// Marks completion of the request. Must be called before OnStreamReady(). |
// |source| is the NetLog::Source generated by the Job that fulfilled this |
@@ -47,23 +46,33 @@ class HttpStreamFactoryImpl::Request : public HttpStreamRequest { |
// SpdySessionRequestMap. |
void RemoveRequestFromSpdySessionRequestMap(); |
+ // Called by an attached Job if it sets up a SpdySession. |
+ void OnSpdySessionReady(Job* job, |
+ scoped_refptr<SpdySession> spdy_session, |
+ bool direct); |
+ |
// HttpStreamRequest::Delegate methods which we implement. Note we don't |
// actually subclass HttpStreamRequest::Delegate. |
- void OnStreamReady(const SSLConfig& used_ssl_config, |
+ void OnStreamReady(Job* job, |
+ const SSLConfig& used_ssl_config, |
const ProxyInfo& used_proxy_info, |
HttpStream* stream); |
- void OnStreamFailed(int status, const SSLConfig& used_ssl_config); |
- void OnCertificateError(int status, |
+ void OnStreamFailed(Job* job, int status, const SSLConfig& used_ssl_config); |
+ void OnCertificateError(Job* job, |
+ int status, |
const SSLConfig& used_ssl_config, |
const SSLInfo& ssl_info); |
- void OnNeedsProxyAuth(const HttpResponseInfo& proxy_response, |
+ void OnNeedsProxyAuth(Job* job, |
+ const HttpResponseInfo& proxy_response, |
const SSLConfig& used_ssl_config, |
const ProxyInfo& used_proxy_info, |
HttpAuthController* auth_controller); |
- void OnNeedsClientAuth(const SSLConfig& used_ssl_config, |
+ void OnNeedsClientAuth(Job* job, |
+ const SSLConfig& used_ssl_config, |
SSLCertRequestInfo* cert_info); |
void OnHttpsProxyTunnelResponse( |
+ Job *job, |
const HttpResponseInfo& response_info, |
const SSLConfig& used_ssl_config, |
const ProxyInfo& used_proxy_info, |
@@ -79,13 +88,21 @@ class HttpStreamFactoryImpl::Request : public HttpStreamRequest { |
virtual bool using_spdy() const; |
private: |
+ // Used to orphan all jobs in |jobs_| other than |job| which becomes "bound" |
+ // to the request. |
+ void OrphanJobsExcept(Job* job); |
+ |
+ // Used to orphan all jobs in |jobs_|. |
+ void OrphanJobs(); |
+ |
const GURL url_; |
HttpStreamFactoryImpl* const factory_; |
HttpStreamRequest::Delegate* const delegate_; |
const BoundNetLog net_log_; |
- // The |job_| that this request is tied to. |
- HttpStreamFactoryImpl::Job* job_; |
+ // At the point where Job is irrevocably tied to the Request, we set this. |
+ scoped_ptr<Job> bound_job_; |
+ std::set<HttpStreamFactoryImpl::Job*> jobs_; |
scoped_ptr<const HostPortProxyPair> spdy_session_key_; |
bool completed_; |