| Index: net/http/http_stream_factory_impl_job.h
|
| diff --git a/net/http/http_stream_factory_impl_job.h b/net/http/http_stream_factory_impl_job.h
|
| index 11361536f1881623bf027d8ad81f0b60f2d26b10..9a96af2961a6260f35786a860e7eaac43ff292ba 100644
|
| --- a/net/http/http_stream_factory_impl_job.h
|
| +++ b/net/http/http_stream_factory_impl_job.h
|
| @@ -102,6 +102,16 @@ class HttpStreamFactoryImpl::Job {
|
| // contained in |proxy_info| can be skipped.
|
| virtual bool OnInitConnection(const ProxyInfo& proxy_info) = 0;
|
|
|
| + // Invoked when |job| has completed proxy resolution. The delegate may
|
| + // create an alternative proxy server job to fetch the request.
|
| + virtual void OnResolveProxyComplete(
|
| + Job* job,
|
| + const HttpRequestInfo& request_info,
|
| + RequestPriority priority,
|
| + const SSLConfig& server_ssl_config,
|
| + const SSLConfig& proxy_ssl_config,
|
| + HttpStreamRequest::StreamType stream_type) = 0;
|
| +
|
| // Invoked to notify the Request and Factory of the readiness of new
|
| // SPDY session.
|
| virtual void OnNewSpdySessionReady(
|
| @@ -153,7 +163,6 @@ class HttpStreamFactoryImpl::Job {
|
| HttpNetworkSession* session,
|
| const HttpRequestInfo& request_info,
|
| RequestPriority priority,
|
| - const ProxyInfo& proxy_info,
|
| const SSLConfig& server_ssl_config,
|
| const SSLConfig& proxy_ssl_config,
|
| HostPortPair destination,
|
| @@ -174,7 +183,6 @@ class HttpStreamFactoryImpl::Job {
|
| HttpNetworkSession* session,
|
| const HttpRequestInfo& request_info,
|
| RequestPriority priority,
|
| - const ProxyInfo& proxy_info,
|
| const SSLConfig& server_ssl_config,
|
| const SSLConfig& proxy_ssl_config,
|
| HostPortPair destination,
|
| @@ -243,8 +251,6 @@ class HttpStreamFactoryImpl::Job {
|
| return using_existing_quic_session_;
|
| }
|
|
|
| - bool should_reconsider_proxy() const { return should_reconsider_proxy_; }
|
| -
|
| // TODO(xunjieli): Added to investigate crbug.com/711721. Remove when no
|
| // longer needed.
|
| void LogHistograms() const;
|
| @@ -254,8 +260,12 @@ class HttpStreamFactoryImpl::Job {
|
|
|
| enum State {
|
| STATE_START,
|
| + STATE_RESOLVE_PROXY,
|
| + STATE_RESOLVE_PROXY_COMPLETE,
|
| +
|
| // The main and alternative jobs are started in parallel. The main job
|
| - // can wait if it's paused. The alternative job never waits.
|
| + // waits after it finishes proxy resolution. The alternative job never
|
| + // waits.
|
| //
|
| // An HTTP/2 alternative job notifies the JobController in DoInitConnection
|
| // unless it can pool to an existing SpdySession. JobController, in turn,
|
| @@ -311,6 +321,8 @@ class HttpStreamFactoryImpl::Job {
|
| // ERR_IO_PENDING, then the result from OnIOComplete will be passed to the
|
| // next state method as the result arg.
|
| int DoStart();
|
| + int DoResolveProxy();
|
| + int DoResolveProxyComplete(int result);
|
| int DoWait();
|
| int DoWaitComplete(int result);
|
| int DoInitConnection();
|
| @@ -393,7 +405,7 @@ class HttpStreamFactoryImpl::Job {
|
|
|
| const HttpRequestInfo request_info_;
|
| RequestPriority priority_;
|
| - const ProxyInfo proxy_info_;
|
| + ProxyInfo proxy_info_;
|
| SSLConfig server_ssl_config_;
|
| SSLConfig proxy_ssl_config_;
|
| const NetLogWithSource net_log_;
|
| @@ -406,6 +418,7 @@ class HttpStreamFactoryImpl::Job {
|
| State state_;
|
|
|
| State next_state_;
|
| + ProxyService::PacRequest* pac_request_;
|
| SSLInfo ssl_info_;
|
|
|
| // The server we are trying to reach, could be that of the origin or of the
|
| @@ -440,10 +453,6 @@ class HttpStreamFactoryImpl::Job {
|
|
|
| // True if this network transaction is using QUIC instead of HTTP.
|
| bool using_quic_;
|
| -
|
| - // True if this job might succeed with a different proxy config.
|
| - bool should_reconsider_proxy_;
|
| -
|
| QuicStreamRequest quic_request_;
|
|
|
| // True if this job used an existing QUIC session.
|
| @@ -489,53 +498,51 @@ class HttpStreamFactoryImpl::Job {
|
| // Factory for creating Jobs.
|
| class HttpStreamFactoryImpl::JobFactory {
|
| public:
|
| - JobFactory();
|
| -
|
| - virtual ~JobFactory();
|
| + virtual ~JobFactory() {}
|
|
|
| - virtual std::unique_ptr<HttpStreamFactoryImpl::Job> CreateMainJob(
|
| + // Creates an alternative service Job.
|
| + virtual HttpStreamFactoryImpl::Job* CreateJob(
|
| HttpStreamFactoryImpl::Job::Delegate* delegate,
|
| HttpStreamFactoryImpl::JobType job_type,
|
| HttpNetworkSession* session,
|
| const HttpRequestInfo& request_info,
|
| RequestPriority priority,
|
| - const ProxyInfo& proxy_info,
|
| const SSLConfig& server_ssl_config,
|
| const SSLConfig& proxy_ssl_config,
|
| HostPortPair destination,
|
| GURL origin_url,
|
| + AlternativeService alternative_service,
|
| bool enable_ip_based_pooling,
|
| - NetLog* net_log);
|
| + NetLog* net_log) = 0;
|
|
|
| - virtual std::unique_ptr<HttpStreamFactoryImpl::Job> CreateAltSvcJob(
|
| + // Creates an alternative proxy server Job.
|
| + virtual HttpStreamFactoryImpl::Job* CreateJob(
|
| HttpStreamFactoryImpl::Job::Delegate* delegate,
|
| HttpStreamFactoryImpl::JobType job_type,
|
| HttpNetworkSession* session,
|
| const HttpRequestInfo& request_info,
|
| RequestPriority priority,
|
| - const ProxyInfo& proxy_info,
|
| const SSLConfig& server_ssl_config,
|
| const SSLConfig& proxy_ssl_config,
|
| HostPortPair destination,
|
| GURL origin_url,
|
| - AlternativeService alternative_service,
|
| + const ProxyServer& alternative_proxy_server,
|
| bool enable_ip_based_pooling,
|
| - NetLog* net_log);
|
| + NetLog* net_log) = 0;
|
|
|
| - virtual std::unique_ptr<HttpStreamFactoryImpl::Job> CreateAltProxyJob(
|
| + // Creates a non-alternative Job.
|
| + virtual HttpStreamFactoryImpl::Job* CreateJob(
|
| HttpStreamFactoryImpl::Job::Delegate* delegate,
|
| HttpStreamFactoryImpl::JobType job_type,
|
| HttpNetworkSession* session,
|
| const HttpRequestInfo& request_info,
|
| RequestPriority priority,
|
| - const ProxyInfo& proxy_info,
|
| const SSLConfig& server_ssl_config,
|
| const SSLConfig& proxy_ssl_config,
|
| HostPortPair destination,
|
| GURL origin_url,
|
| - const ProxyServer& alternative_proxy_server,
|
| bool enable_ip_based_pooling,
|
| - NetLog* net_log);
|
| + NetLog* net_log) = 0;
|
| };
|
|
|
| } // namespace net
|
|
|