| 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
|
| deleted file mode 100644
|
| index 04342bff28d6eff23e74a4cc644d99ad68757530..0000000000000000000000000000000000000000
|
| --- a/net/http/http_stream_factory_impl_job.h
|
| +++ /dev/null
|
| @@ -1,351 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -#ifndef NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_
|
| -#define NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_
|
| -
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "net/base/completion_callback.h"
|
| -#include "net/base/net_log.h"
|
| -#include "net/base/request_priority.h"
|
| -#include "net/http/http_auth.h"
|
| -#include "net/http/http_auth_controller.h"
|
| -#include "net/http/http_request_info.h"
|
| -#include "net/http/http_stream_factory_impl.h"
|
| -#include "net/proxy/proxy_service.h"
|
| -#include "net/quic/quic_stream_factory.h"
|
| -#include "net/socket/client_socket_handle.h"
|
| -#include "net/socket/ssl_client_socket.h"
|
| -#include "net/spdy/spdy_session_key.h"
|
| -#include "net/ssl/ssl_config_service.h"
|
| -
|
| -namespace net {
|
| -
|
| -class ClientSocketHandle;
|
| -class HttpAuthController;
|
| -class HttpNetworkSession;
|
| -class HttpStream;
|
| -class SpdySessionPool;
|
| -class QuicHttpStream;
|
| -
|
| -// An HttpStreamRequestImpl exists for each stream which is in progress of being
|
| -// created for the StreamFactory.
|
| -class HttpStreamFactoryImpl::Job {
|
| - public:
|
| - Job(HttpStreamFactoryImpl* stream_factory,
|
| - HttpNetworkSession* session,
|
| - const HttpRequestInfo& request_info,
|
| - RequestPriority priority,
|
| - const SSLConfig& server_ssl_config,
|
| - const SSLConfig& proxy_ssl_config,
|
| - NetLog* net_log);
|
| - ~Job();
|
| -
|
| - // Start initiates the process of creating a new HttpStream. |request| will be
|
| - // notified upon completion if the Job has not been Orphan()'d.
|
| - void Start(Request* request);
|
| -
|
| - // Preconnect will attempt to request |num_streams| sockets from the
|
| - // appropriate ClientSocketPool.
|
| - int Preconnect(int num_streams);
|
| -
|
| - int RestartTunnelWithProxyAuth(const AuthCredentials& credentials);
|
| - LoadState GetLoadState() const;
|
| -
|
| - // Marks this Job as the "alternate" job, from Alternate-Protocol. Tracks the
|
| - // original url so we can mark the Alternate-Protocol as broken if
|
| - // we fail to connect. |alternate| specifies the alternate protocol to use
|
| - // and alternate port to connect to.
|
| - void MarkAsAlternate(const GURL& original_url,
|
| - AlternateProtocolInfo alternate);
|
| -
|
| - // Tells |this| to wait for |job| to resume it.
|
| - void WaitFor(Job* job);
|
| -
|
| - // Tells |this| that |job| has determined it still needs to continue
|
| - // connecting, so allow |this| to continue. If this is not called, then
|
| - // |request_| is expected to cancel |this| by deleting it.
|
| - void Resume(Job* job);
|
| -
|
| - // Used to detach the Job from |request|.
|
| - void Orphan(const Request* request);
|
| -
|
| - void SetPriority(RequestPriority priority);
|
| -
|
| - RequestPriority priority() const { return priority_; }
|
| - bool was_npn_negotiated() const;
|
| - NextProto protocol_negotiated() const;
|
| - bool using_spdy() const;
|
| - const BoundNetLog& net_log() const { return net_log_; }
|
| -
|
| - const SSLConfig& server_ssl_config() const;
|
| - const SSLConfig& proxy_ssl_config() const;
|
| - const ProxyInfo& proxy_info() const;
|
| -
|
| - // Indicates whether or not this job is performing a preconnect.
|
| - bool IsPreconnecting() const;
|
| -
|
| - // Indicates whether or not this Job has been orphaned by a Request.
|
| - bool IsOrphaned() const;
|
| -
|
| - // Called to indicate that this job succeeded, and some other jobs
|
| - // will be orphaned.
|
| - void ReportJobSuccededForRequest();
|
| -
|
| - // Marks that the other |job| has completed.
|
| - void MarkOtherJobComplete(const Job& job);
|
| -
|
| - private:
|
| - enum State {
|
| - STATE_START,
|
| - STATE_RESOLVE_PROXY,
|
| - STATE_RESOLVE_PROXY_COMPLETE,
|
| -
|
| - // Note that when Alternate-Protocol says we can connect to an alternate
|
| - // port using a different protocol, we have the choice of communicating over
|
| - // the original protocol, or speaking the alternate protocol (currently,
|
| - // only npn-spdy) over an alternate port. For a cold page load, the http
|
| - // connection that delivers the http response that has the
|
| - // Alternate-Protocol header will already be warm. So, blocking the next
|
| - // http request on establishing a new npn-spdy connection would incur extra
|
| - // latency. Even if the http connection was not reused, establishing a new
|
| - // http connection is typically faster than npn-spdy, since npn-spdy
|
| - // requires a SSL handshake. Therefore, we start both the http and the
|
| - // npn-spdy jobs in parallel. In order not to unnecessarily waste sockets,
|
| - // we have the http job block on the npn-spdy job after proxy resolution.
|
| - // The npn-spdy job will Resume() the http job if, in
|
| - // STATE_INIT_CONNECTION_COMPLETE, it detects an error or does not find an
|
| - // existing SpdySession. In that case, the http and npn-spdy jobs will race.
|
| - STATE_WAIT_FOR_JOB,
|
| - STATE_WAIT_FOR_JOB_COMPLETE,
|
| -
|
| - STATE_INIT_CONNECTION,
|
| - STATE_INIT_CONNECTION_COMPLETE,
|
| - STATE_WAITING_USER_ACTION,
|
| - STATE_RESTART_TUNNEL_AUTH,
|
| - STATE_RESTART_TUNNEL_AUTH_COMPLETE,
|
| - STATE_CREATE_STREAM,
|
| - STATE_CREATE_STREAM_COMPLETE,
|
| - STATE_DRAIN_BODY_FOR_AUTH_RESTART,
|
| - STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE,
|
| - STATE_DONE,
|
| - STATE_NONE
|
| - };
|
| -
|
| - enum JobStatus {
|
| - STATUS_RUNNING,
|
| - STATUS_FAILED,
|
| - STATUS_BROKEN,
|
| - STATUS_SUCCEEDED
|
| - };
|
| -
|
| - void OnStreamReadyCallback();
|
| - void OnWebSocketHandshakeStreamReadyCallback();
|
| - // This callback function is called when a new SPDY session is created.
|
| - void OnNewSpdySessionReadyCallback();
|
| - void OnStreamFailedCallback(int result);
|
| - void OnCertificateErrorCallback(int result, const SSLInfo& ssl_info);
|
| - void OnNeedsProxyAuthCallback(const HttpResponseInfo& response_info,
|
| - HttpAuthController* auth_controller);
|
| - void OnNeedsClientAuthCallback(SSLCertRequestInfo* cert_info);
|
| - void OnHttpsProxyTunnelResponseCallback(const HttpResponseInfo& response_info,
|
| - HttpStream* stream);
|
| - void OnPreconnectsComplete();
|
| -
|
| - void OnIOComplete(int result);
|
| - int RunLoop(int result);
|
| - int DoLoop(int result);
|
| - int StartInternal();
|
| -
|
| - // Each of these methods corresponds to a State value. Those with an input
|
| - // argument receive the result from the previous state. If a method returns
|
| - // 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 DoWaitForJob();
|
| - int DoWaitForJobComplete(int result);
|
| - int DoInitConnection();
|
| - int DoInitConnectionComplete(int result);
|
| - int DoWaitingUserAction(int result);
|
| - int DoCreateStream();
|
| - int DoCreateStreamComplete(int result);
|
| - int DoRestartTunnelAuth();
|
| - int DoRestartTunnelAuthComplete(int result);
|
| -
|
| - // Creates a SpdyHttpStream from the given values and sets to |stream_|. Does
|
| - // nothing if |stream_factory_| is for WebSockets.
|
| - int SetSpdyHttpStream(base::WeakPtr<SpdySession> session, bool direct);
|
| -
|
| - // Returns to STATE_INIT_CONNECTION and resets some state.
|
| - void ReturnToStateInitConnection(bool close_connection);
|
| -
|
| - // Set the motivation for this request onto the underlying socket.
|
| - void SetSocketMotivation();
|
| -
|
| - bool IsHttpsProxyAndHttpUrl() const;
|
| -
|
| - // Sets several fields of ssl_config for the given origin_server based on the
|
| - // proxy info and other factors.
|
| - void InitSSLConfig(const HostPortPair& origin_server,
|
| - SSLConfig* ssl_config,
|
| - bool is_proxy) const;
|
| -
|
| - // Retrieve SSLInfo from our SSL Socket.
|
| - // This must only be called when we are using an SSLSocket.
|
| - // After calling, the caller can use ssl_info_.
|
| - void GetSSLInfo();
|
| -
|
| - SpdySessionKey GetSpdySessionKey() const;
|
| -
|
| - // Returns true if the current request can use an existing spdy session.
|
| - bool CanUseExistingSpdySession() const;
|
| -
|
| - // Called when we encounter a network error that could be resolved by trying
|
| - // a new proxy configuration. If there is another proxy configuration to try
|
| - // then this method sets next_state_ appropriately and returns either OK or
|
| - // ERR_IO_PENDING depending on whether or not the new proxy configuration is
|
| - // available synchronously or asynchronously. Otherwise, the given error
|
| - // code is simply returned.
|
| - int ReconsiderProxyAfterError(int error);
|
| -
|
| - // Called to handle a certificate error. Stores the certificate in the
|
| - // allowed_bad_certs list, and checks if the error can be ignored. Returns
|
| - // OK if it can be ignored, or the error code otherwise.
|
| - int HandleCertificateError(int error);
|
| -
|
| - // Called to handle a client certificate request.
|
| - int HandleCertificateRequest(int error);
|
| -
|
| - // Moves this stream request into SPDY mode.
|
| - void SwitchToSpdyMode();
|
| -
|
| - // Should we force SPDY to run over SSL for this stream request.
|
| - bool ShouldForceSpdySSL() const;
|
| -
|
| - // Should we force SPDY to run without SSL for this stream request.
|
| - bool ShouldForceSpdyWithoutSSL() const;
|
| -
|
| - // Should we force QUIC for this stream request.
|
| - bool ShouldForceQuic() const;
|
| -
|
| - void MaybeMarkAlternateProtocolBroken();
|
| -
|
| - // Record histograms of latency until Connect() completes.
|
| - static void LogHttpConnectedMetrics(const ClientSocketHandle& handle);
|
| -
|
| - // Invoked by the transport socket pool after host resolution is complete
|
| - // to allow the connection to be aborted, if a matching SPDY session can
|
| - // be found. Will return ERR_SPDY_SESSION_ALREADY_EXISTS if such a
|
| - // session is found, and OK otherwise.
|
| - static int OnHostResolution(SpdySessionPool* spdy_session_pool,
|
| - const SpdySessionKey& spdy_session_key,
|
| - const AddressList& addresses,
|
| - const BoundNetLog& net_log);
|
| -
|
| - Request* request_;
|
| -
|
| - const HttpRequestInfo request_info_;
|
| - RequestPriority priority_;
|
| - ProxyInfo proxy_info_;
|
| - SSLConfig server_ssl_config_;
|
| - SSLConfig proxy_ssl_config_;
|
| - const BoundNetLog net_log_;
|
| -
|
| - CompletionCallback io_callback_;
|
| - scoped_ptr<ClientSocketHandle> connection_;
|
| - HttpNetworkSession* const session_;
|
| - HttpStreamFactoryImpl* const stream_factory_;
|
| - State next_state_;
|
| - ProxyService::PacRequest* pac_request_;
|
| - SSLInfo ssl_info_;
|
| -
|
| - // The origin server we're trying to reach.
|
| - HostPortPair origin_;
|
| -
|
| - // The origin url we're trying to reach. This url may be different from the
|
| - // original request when host mapping rules are set-up.
|
| - GURL origin_url_;
|
| -
|
| - // If this is a Job for an "Alternate-Protocol", then this will be non-NULL
|
| - // and will specify the original URL.
|
| - scoped_ptr<GURL> original_url_;
|
| -
|
| - // AlternateProtocol for this job if this is an alternate job.
|
| - AlternateProtocolInfo alternate_protocol_;
|
| -
|
| - // AlternateProtocol for the other job if this is not an alternate job.
|
| - AlternateProtocolInfo other_job_alternate_protocol_;
|
| -
|
| - // This is the Job we're dependent on. It will notify us if/when it's OK to
|
| - // proceed.
|
| - Job* blocking_job_;
|
| -
|
| - // |waiting_job_| is a Job waiting to see if |this| can reuse a connection.
|
| - // If |this| is unable to do so, we'll notify |waiting_job_| that it's ok to
|
| - // proceed and then race the two Jobs.
|
| - Job* waiting_job_;
|
| -
|
| - // True if handling a HTTPS request, or using SPDY with SSL
|
| - bool using_ssl_;
|
| -
|
| - // True if this network transaction is using SPDY instead of HTTP.
|
| - bool using_spdy_;
|
| -
|
| - // True if this network transaction is using QUIC instead of HTTP.
|
| - bool using_quic_;
|
| - QuicStreamRequest quic_request_;
|
| -
|
| - // True if this job used an existing QUIC session.
|
| - bool using_existing_quic_session_;
|
| -
|
| - // Force quic for a specific port.
|
| - int force_quic_port_;
|
| -
|
| - // The certificate error while using SPDY over SSL for insecure URLs.
|
| - int spdy_certificate_error_;
|
| -
|
| - scoped_refptr<HttpAuthController>
|
| - auth_controllers_[HttpAuth::AUTH_NUM_TARGETS];
|
| -
|
| - // True when the tunnel is in the process of being established - we can't
|
| - // read from the socket until the tunnel is done.
|
| - bool establishing_tunnel_;
|
| -
|
| - scoped_ptr<HttpStream> stream_;
|
| - scoped_ptr<WebSocketHandshakeStreamBase> websocket_stream_;
|
| -
|
| - // True if we negotiated NPN.
|
| - bool was_npn_negotiated_;
|
| -
|
| - // Protocol negotiated with the server.
|
| - NextProto protocol_negotiated_;
|
| -
|
| - // 0 if we're not preconnecting. Otherwise, the number of streams to
|
| - // preconnect.
|
| - int num_streams_;
|
| -
|
| - // Initialized when we create a new SpdySession.
|
| - base::WeakPtr<SpdySession> new_spdy_session_;
|
| -
|
| - // Initialized when we have an existing SpdySession.
|
| - base::WeakPtr<SpdySession> existing_spdy_session_;
|
| -
|
| - // Only used if |new_spdy_session_| is non-NULL.
|
| - bool spdy_session_direct_;
|
| -
|
| - JobStatus job_status_;
|
| - JobStatus other_job_status_;
|
| -
|
| - base::WeakPtrFactory<Job> ptr_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Job);
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_
|
|
|