| Index: net/http/http_network_transaction.h
|
| diff --git a/net/http/http_network_transaction.h b/net/http/http_network_transaction.h
|
| deleted file mode 100644
|
| index 2c4bd93fb980a28ca38067e19688979bd0dcef57..0000000000000000000000000000000000000000
|
| --- a/net/http/http_network_transaction.h
|
| +++ /dev/null
|
| @@ -1,335 +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_NETWORK_TRANSACTION_H_
|
| -#define NET_HTTP_HTTP_NETWORK_TRANSACTION_H_
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/gtest_prod_util.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/time/time.h"
|
| -#include "net/base/net_log.h"
|
| -#include "net/base/request_priority.h"
|
| -#include "net/http/http_auth.h"
|
| -#include "net/http/http_request_headers.h"
|
| -#include "net/http/http_response_info.h"
|
| -#include "net/http/http_stream_factory.h"
|
| -#include "net/http/http_transaction.h"
|
| -#include "net/proxy/proxy_service.h"
|
| -#include "net/ssl/ssl_config_service.h"
|
| -#include "net/websockets/websocket_handshake_stream_base.h"
|
| -
|
| -namespace net {
|
| -
|
| -class ClientSocketHandle;
|
| -class HttpAuthController;
|
| -class HttpNetworkSession;
|
| -class HttpStream;
|
| -class HttpStreamRequest;
|
| -class IOBuffer;
|
| -class ProxyInfo;
|
| -class SpdySession;
|
| -struct HttpRequestInfo;
|
| -
|
| -class NET_EXPORT_PRIVATE HttpNetworkTransaction
|
| - : public HttpTransaction,
|
| - public HttpStreamRequest::Delegate {
|
| - public:
|
| - HttpNetworkTransaction(RequestPriority priority,
|
| - HttpNetworkSession* session);
|
| -
|
| - ~HttpNetworkTransaction() override;
|
| -
|
| - // HttpTransaction methods:
|
| - int Start(const HttpRequestInfo* request_info,
|
| - const CompletionCallback& callback,
|
| - const BoundNetLog& net_log) override;
|
| - int RestartIgnoringLastError(const CompletionCallback& callback) override;
|
| - int RestartWithCertificate(X509Certificate* client_cert,
|
| - const CompletionCallback& callback) override;
|
| - int RestartWithAuth(const AuthCredentials& credentials,
|
| - const CompletionCallback& callback) override;
|
| - bool IsReadyToRestartForAuth() override;
|
| -
|
| - int Read(IOBuffer* buf,
|
| - int buf_len,
|
| - const CompletionCallback& callback) override;
|
| - void StopCaching() override;
|
| - bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override;
|
| - int64 GetTotalReceivedBytes() const override;
|
| - void DoneReading() override;
|
| - const HttpResponseInfo* GetResponseInfo() const override;
|
| - LoadState GetLoadState() const override;
|
| - UploadProgress GetUploadProgress() const override;
|
| - void SetQuicServerInfo(QuicServerInfo* quic_server_info) override;
|
| - bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override;
|
| - void SetPriority(RequestPriority priority) override;
|
| - void SetWebSocketHandshakeStreamCreateHelper(
|
| - WebSocketHandshakeStreamBase::CreateHelper* create_helper) override;
|
| - void SetBeforeNetworkStartCallback(
|
| - const BeforeNetworkStartCallback& callback) override;
|
| - void SetBeforeProxyHeadersSentCallback(
|
| - const BeforeProxyHeadersSentCallback& callback) override;
|
| - int ResumeNetworkStart() override;
|
| -
|
| - // HttpStreamRequest::Delegate methods:
|
| - void OnStreamReady(const SSLConfig& used_ssl_config,
|
| - const ProxyInfo& used_proxy_info,
|
| - HttpStream* stream) override;
|
| - void OnWebSocketHandshakeStreamReady(
|
| - const SSLConfig& used_ssl_config,
|
| - const ProxyInfo& used_proxy_info,
|
| - WebSocketHandshakeStreamBase* stream) override;
|
| - void OnStreamFailed(int status, const SSLConfig& used_ssl_config) override;
|
| - void OnCertificateError(int status,
|
| - const SSLConfig& used_ssl_config,
|
| - const SSLInfo& ssl_info) override;
|
| - void OnNeedsProxyAuth(const HttpResponseInfo& response_info,
|
| - const SSLConfig& used_ssl_config,
|
| - const ProxyInfo& used_proxy_info,
|
| - HttpAuthController* auth_controller) override;
|
| - void OnNeedsClientAuth(const SSLConfig& used_ssl_config,
|
| - SSLCertRequestInfo* cert_info) override;
|
| - void OnHttpsProxyTunnelResponse(const HttpResponseInfo& response_info,
|
| - const SSLConfig& used_ssl_config,
|
| - const ProxyInfo& used_proxy_info,
|
| - HttpStream* stream) override;
|
| -
|
| - private:
|
| - friend class HttpNetworkTransactionSSLTest;
|
| -
|
| - FRIEND_TEST_ALL_PREFIXES(HttpNetworkTransactionTest,
|
| - ResetStateForRestart);
|
| - FRIEND_TEST_ALL_PREFIXES(SpdyNetworkTransactionTest,
|
| - WindowUpdateReceived);
|
| - FRIEND_TEST_ALL_PREFIXES(SpdyNetworkTransactionTest,
|
| - WindowUpdateSent);
|
| - FRIEND_TEST_ALL_PREFIXES(SpdyNetworkTransactionTest,
|
| - WindowUpdateOverflow);
|
| - FRIEND_TEST_ALL_PREFIXES(SpdyNetworkTransactionTest,
|
| - FlowControlStallResume);
|
| - FRIEND_TEST_ALL_PREFIXES(SpdyNetworkTransactionTest,
|
| - FlowControlStallResumeAfterSettings);
|
| - FRIEND_TEST_ALL_PREFIXES(SpdyNetworkTransactionTest,
|
| - FlowControlNegativeSendWindowSize);
|
| -
|
| - enum State {
|
| - STATE_NOTIFY_BEFORE_CREATE_STREAM,
|
| - STATE_CREATE_STREAM,
|
| - STATE_CREATE_STREAM_COMPLETE,
|
| - STATE_INIT_STREAM,
|
| - STATE_INIT_STREAM_COMPLETE,
|
| - STATE_GENERATE_PROXY_AUTH_TOKEN,
|
| - STATE_GENERATE_PROXY_AUTH_TOKEN_COMPLETE,
|
| - STATE_GENERATE_SERVER_AUTH_TOKEN,
|
| - STATE_GENERATE_SERVER_AUTH_TOKEN_COMPLETE,
|
| - STATE_INIT_REQUEST_BODY,
|
| - STATE_INIT_REQUEST_BODY_COMPLETE,
|
| - STATE_BUILD_REQUEST,
|
| - STATE_BUILD_REQUEST_COMPLETE,
|
| - STATE_SEND_REQUEST,
|
| - STATE_SEND_REQUEST_COMPLETE,
|
| - STATE_READ_HEADERS,
|
| - STATE_READ_HEADERS_COMPLETE,
|
| - STATE_READ_BODY,
|
| - STATE_READ_BODY_COMPLETE,
|
| - STATE_DRAIN_BODY_FOR_AUTH_RESTART,
|
| - STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE,
|
| - STATE_NONE
|
| - };
|
| -
|
| - bool is_https_request() const;
|
| -
|
| - // Returns true if the request is using an HTTP(S) proxy without being
|
| - // tunneled via the CONNECT method.
|
| - bool UsingHttpProxyWithoutTunnel() const;
|
| -
|
| - void DoCallback(int result);
|
| - void OnIOComplete(int result);
|
| -
|
| - // Runs the state transition loop.
|
| - int DoLoop(int result);
|
| -
|
| - // 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 DoNotifyBeforeCreateStream();
|
| - int DoCreateStream();
|
| - int DoCreateStreamComplete(int result);
|
| - int DoInitStream();
|
| - int DoInitStreamComplete(int result);
|
| - int DoGenerateProxyAuthToken();
|
| - int DoGenerateProxyAuthTokenComplete(int result);
|
| - int DoGenerateServerAuthToken();
|
| - int DoGenerateServerAuthTokenComplete(int result);
|
| - int DoInitRequestBody();
|
| - int DoInitRequestBodyComplete(int result);
|
| - int DoBuildRequest();
|
| - int DoBuildRequestComplete(int result);
|
| - int DoSendRequest();
|
| - int DoSendRequestComplete(int result);
|
| - int DoReadHeaders();
|
| - int DoReadHeadersComplete(int result);
|
| - int DoReadBody();
|
| - int DoReadBodyComplete(int result);
|
| - int DoDrainBodyForAuthRestart();
|
| - int DoDrainBodyForAuthRestartComplete(int result);
|
| -
|
| - void BuildRequestHeaders(bool using_http_proxy_without_tunnel);
|
| -
|
| - // Writes a log message to help debugging in the field when we block a proxy
|
| - // response to a CONNECT request.
|
| - void LogBlockedTunnelResponse(int response_code) const;
|
| -
|
| - // Called to handle a client certificate request.
|
| - int HandleCertificateRequest(int error);
|
| -
|
| - // Called wherever ERR_HTTP_1_1_REQUIRED or
|
| - // ERR_PROXY_HTTP_1_1_REQUIRED has to be handled.
|
| - int HandleHttp11Required(int error);
|
| -
|
| - // Called to possibly handle a client authentication error.
|
| - void HandleClientAuthError(int error);
|
| -
|
| - // Called to possibly recover from an SSL handshake error. Sets next_state_
|
| - // and returns OK if recovering from the error. Otherwise, the same error
|
| - // code is returned.
|
| - int HandleSSLHandshakeError(int error);
|
| -
|
| - // Called to possibly recover from the given error. Sets next_state_ and
|
| - // returns OK if recovering from the error. Otherwise, the same error code
|
| - // is returned.
|
| - int HandleIOError(int error);
|
| -
|
| - // Gets the response headers from the HttpStream.
|
| - HttpResponseHeaders* GetResponseHeaders() const;
|
| -
|
| - // Called when the socket is unexpectedly closed. Returns true if the request
|
| - // should be resent in case of a socket reuse/close race.
|
| - bool ShouldResendRequest() const;
|
| -
|
| - // Resets the connection and the request headers for resend. Called when
|
| - // ShouldResendRequest() is true.
|
| - void ResetConnectionAndRequestForResend();
|
| -
|
| - // Sets up the state machine to restart the transaction with auth.
|
| - void PrepareForAuthRestart(HttpAuth::Target target);
|
| -
|
| - // Called when we don't need to drain the response body or have drained it.
|
| - // Resets |connection_| unless |keep_alive| is true, then calls
|
| - // ResetStateForRestart. Sets |next_state_| appropriately.
|
| - void DidDrainBodyForAuthRestart(bool keep_alive);
|
| -
|
| - // Resets the members of the transaction so it can be restarted.
|
| - void ResetStateForRestart();
|
| -
|
| - // Resets the members of the transaction, except |stream_|, which needs
|
| - // to be maintained for multi-round auth.
|
| - void ResetStateForAuthRestart();
|
| -
|
| - // Returns true if we should try to add a Proxy-Authorization header
|
| - bool ShouldApplyProxyAuth() const;
|
| -
|
| - // Returns true if we should try to add an Authorization header.
|
| - bool ShouldApplyServerAuth() const;
|
| -
|
| - // Handles HTTP status code 401 or 407.
|
| - // HandleAuthChallenge() returns a network error code, or OK on success.
|
| - // May update |pending_auth_target_| or |response_.auth_challenge|.
|
| - int HandleAuthChallenge();
|
| -
|
| - // Returns true if we have auth credentials for the given target.
|
| - bool HaveAuth(HttpAuth::Target target) const;
|
| -
|
| - // Get the {scheme, host, path, port} for the authentication target
|
| - GURL AuthURL(HttpAuth::Target target) const;
|
| -
|
| - // Returns true if this transaction is for a WebSocket handshake
|
| - bool ForWebSocketHandshake() const;
|
| -
|
| - // Debug helper.
|
| - static std::string DescribeState(State state);
|
| -
|
| - void SetStream(HttpStream* stream);
|
| -
|
| - scoped_refptr<HttpAuthController>
|
| - auth_controllers_[HttpAuth::AUTH_NUM_TARGETS];
|
| -
|
| - // Whether this transaction is waiting for proxy auth, server auth, or is
|
| - // not waiting for any auth at all. |pending_auth_target_| is read and
|
| - // cleared by RestartWithAuth().
|
| - HttpAuth::Target pending_auth_target_;
|
| -
|
| - CompletionCallback io_callback_;
|
| - CompletionCallback callback_;
|
| -
|
| - HttpNetworkSession* session_;
|
| -
|
| - BoundNetLog net_log_;
|
| - const HttpRequestInfo* request_;
|
| - RequestPriority priority_;
|
| - HttpResponseInfo response_;
|
| -
|
| - // |proxy_info_| is the ProxyInfo used by the HttpStreamRequest.
|
| - ProxyInfo proxy_info_;
|
| -
|
| - scoped_ptr<HttpStreamRequest> stream_request_;
|
| - scoped_ptr<HttpStream> stream_;
|
| -
|
| - // True if we've validated the headers that the stream parser has returned.
|
| - bool headers_valid_;
|
| -
|
| - SSLConfig server_ssl_config_;
|
| - SSLConfig proxy_ssl_config_;
|
| - // fallback_error_code contains the error code that caused the last TLS
|
| - // fallback. If the fallback connection results in
|
| - // ERR_SSL_INAPPROPRIATE_FALLBACK (i.e. the server indicated that the
|
| - // fallback should not have been needed) then we use this value to return the
|
| - // original error that triggered the fallback.
|
| - int fallback_error_code_;
|
| -
|
| - HttpRequestHeaders request_headers_;
|
| -
|
| - // The size in bytes of the buffer we use to drain the response body that
|
| - // we want to throw away. The response body is typically a small error
|
| - // page just a few hundred bytes long.
|
| - static const int kDrainBodyBufferSize = 1024;
|
| -
|
| - // User buffer and length passed to the Read method.
|
| - scoped_refptr<IOBuffer> read_buf_;
|
| - int read_buf_len_;
|
| -
|
| - // Total number of bytes received on streams for this transaction.
|
| - int64 total_received_bytes_;
|
| -
|
| - // When the transaction started / finished sending the request, including
|
| - // the body, if present.
|
| - base::TimeTicks send_start_time_;
|
| - base::TimeTicks send_end_time_;
|
| -
|
| - // The next state in the state machine.
|
| - State next_state_;
|
| -
|
| - // 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_;
|
| -
|
| - // The helper object to use to create WebSocketHandshakeStreamBase
|
| - // objects. Only relevant when establishing a WebSocket connection.
|
| - WebSocketHandshakeStreamBase::CreateHelper*
|
| - websocket_handshake_stream_base_create_helper_;
|
| -
|
| - BeforeNetworkStartCallback before_network_start_callback_;
|
| - BeforeProxyHeadersSentCallback before_proxy_headers_sent_callback_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(HttpNetworkTransaction);
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_HTTP_HTTP_NETWORK_TRANSACTION_H_
|
|
|