Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1256)

Unified Diff: net/http/http_network_transaction.h

Issue 249031: Refactor HttpNetworkTransaction: Parse stream in HttpStream (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_basic_stream.cc ('k') | net/http/http_network_transaction.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_network_transaction.h
===================================================================
--- net/http/http_network_transaction.h (revision 29289)
+++ net/http/http_network_transaction.h (working copy)
@@ -28,10 +28,8 @@
namespace net {
class ClientSocketFactory;
-class HttpChunkedDecoder;
class HttpNetworkSession;
class HttpStream;
-class UploadDataStream;
class HttpNetworkTransaction : public HttpTransaction {
public:
@@ -62,38 +60,6 @@
private:
FRIEND_TEST(HttpNetworkTransactionTest, ResetStateForRestart);
- // This version of IOBuffer lets us use a string as the real storage and
- // "move" the data pointer inside the string before using it to do actual IO.
- class RequestHeaders : public net::IOBuffer {
- public:
- RequestHeaders() : net::IOBuffer() {}
- ~RequestHeaders() { data_ = NULL; }
-
- void SetDataOffset(size_t offset) {
- data_ = const_cast<char*>(headers_.data()) + offset;
- }
-
- // This is intentionally a public member.
- std::string headers_;
- };
-
- // This version of IOBuffer lets us use a malloc'ed buffer as the real storage
- // and "move" the data pointer inside the buffer before using it to do actual
- // IO.
- class ResponseHeaders : public net::IOBuffer {
- public:
- ResponseHeaders() : net::IOBuffer() {}
- ~ResponseHeaders() { data_ = NULL; }
-
- void set_data(size_t offset) { data_ = headers_.get() + offset; }
- char* headers() { return headers_.get(); }
- void Reset() { headers_.reset(); }
- void Realloc(size_t new_size);
-
- private:
- scoped_ptr_malloc<char> headers_;
- };
-
enum State {
STATE_RESOLVE_PROXY,
STATE_RESOLVE_PROXY_COMPLETE,
@@ -103,10 +69,8 @@
STATE_SOCKS_CONNECT_COMPLETE,
STATE_SSL_CONNECT,
STATE_SSL_CONNECT_COMPLETE,
- STATE_WRITE_HEADERS,
- STATE_WRITE_HEADERS_COMPLETE,
- STATE_WRITE_BODY,
- STATE_WRITE_BODY_COMPLETE,
+ STATE_SEND_REQUEST,
+ STATE_SEND_REQUEST_COMPLETE,
STATE_READ_HEADERS,
STATE_READ_HEADERS_COMPLETE,
STATE_READ_BODY,
@@ -141,10 +105,8 @@
int DoSOCKSConnectComplete(int result);
int DoSSLConnect();
int DoSSLConnectComplete(int result);
- int DoWriteHeaders();
- int DoWriteHeadersComplete(int result);
- int DoWriteBody();
- int DoWriteBodyComplete(int result);
+ int DoSendRequest();
+ int DoSendRequestComplete(int result);
int DoReadHeaders();
int DoReadHeadersComplete(int result);
int DoReadBody();
@@ -167,9 +129,6 @@
static void LogIOErrorMetrics(const ClientSocketHandle& handle);
- // Called when header_buf_ contains the complete response headers.
- int DidReadResponseHeaders();
-
// Called to handle a certificate error. Returns OK if the error should be
// ignored. Otherwise, stores the certificate in response_.ssl_info and
// returns the same error code.
@@ -188,6 +147,9 @@
// is returned.
int HandleIOError(int error);
+ // Gets the response headers from the HttpStream.
+ HttpResponseHeaders* GetResponseHeaders() const;
+
// Called when we reached EOF or got an error. Returns true if we should
// resend the request. |error| is OK when we reached EOF.
bool ShouldResendRequest(int error) const;
@@ -209,13 +171,6 @@
// requests.
int HandleConnectionClosedBeforeEndOfHeaders();
- // Return true if based on the bytes read so far, the start of the
- // status line is known. This is used to distingish between HTTP/0.9
- // responses (which have no status line) and HTTP/1.x responses.
- bool has_found_status_line_start() const {
- return header_buf_http_offset_ != -1;
- }
-
// Sets up the state machine to restart the transaction with auth.
void PrepareForAuthRestart(HttpAuth::Target target);
@@ -309,7 +264,6 @@
scoped_refptr<LoadLog> load_log_;
const HttpRequestInfo* request_;
- HttpResponseInfo response_;
ProxyService::PacRequest* pac_request_;
ProxyInfo proxy_info_;
@@ -318,33 +272,24 @@
scoped_ptr<HttpStream> http_stream_;
bool reused_socket_;
+ // True if we've validated the headers that the stream parser has returned.
+ bool headers_valid_;
+
+ // True if we've logged the time of the first response byte. Used to
+ // prevent logging across authentication activity where we see multiple
+ // responses.
+ bool logged_response_time;
+
bool using_ssl_; // True if handling a HTTPS request
ProxyMode proxy_mode_;
// True while establishing a tunnel. This allows the HTTP CONNECT
- // request/response to reuse the STATE_WRITE_HEADERS,
- // STATE_WRITE_HEADERS_COMPLETE, STATE_READ_HEADERS, and
+ // request/response to reuse the STATE_SEND_REQUEST,
+ // STATE_SEND_REQUEST_COMPLETE, STATE_READ_HEADERS, and
// STATE_READ_HEADERS_COMPLETE states and allows us to tell them apart from
// the real request/response of the transaction.
bool establishing_tunnel_;
- // Only used between the states
- // STATE_READ_BODY/STATE_DRAIN_BODY_FOR_AUTH and
- // STATE_READ_BODY_COMPLETE/STATE_DRAIN_BODY_FOR_AUTH_COMPLETE.
- //
- // Set to true when DoReadBody or DoDrainBodyForAuthRestart starts to read
- // the response body from the socket, and set to false when the socket read
- // call completes. DoReadBodyComplete and DoDrainBodyForAuthRestartComplete
- // use this boolean to disambiguate a |result| of 0 between a connection
- // closure (EOF) and reaching the end of the response body (no more data).
- //
- // TODO(wtc): this is similar to the |ignore_ok_result_| member of the
- // SSLClientSocketWin class. We may want to add an internal error code, say
- // ERR_EOF, to indicate a connection closure, so that 0 simply means 0 bytes
- // or OK. Note that we already have an ERR_CONNECTION_CLOSED error code,
- // but it isn't really being used.
- bool reading_body_from_socket_;
-
// True if we've used the username/password embedded in the URL. This
// makes sure we use the embedded identity only once for the transaction,
// preventing an infinite auth restart loop.
@@ -352,48 +297,13 @@
SSLConfig ssl_config_;
- scoped_refptr<RequestHeaders> request_headers_;
- size_t request_headers_bytes_sent_;
- scoped_ptr<UploadDataStream> request_body_stream_;
+ std::string request_headers_;
- // The read buffer |header_buf_| may be larger than it is full. The
- // 'capacity' indicates the allocation size of the buffer, and the 'len'
- // indicates how much data is in the buffer already. The 'body offset'
- // indicates the offset of the start of the response body within the read
- // buffer.
- scoped_refptr<ResponseHeaders> header_buf_;
- int header_buf_capacity_;
- int header_buf_len_;
- int header_buf_body_offset_;
-
- // The number of bytes by which the header buffer is grown when it reaches
- // capacity.
- enum { kHeaderBufInitialSize = 4096 };
-
- // |kMaxHeaderBufSize| is the number of bytes that the response headers can
- // grow to. If the body start is not found within this range of the
- // response, the transaction will fail with ERR_RESPONSE_HEADERS_TOO_BIG.
- // Note: |kMaxHeaderBufSize| should be a multiple of |kHeaderBufInitialSize|.
- enum { kMaxHeaderBufSize = 256 * 1024 }; // 256 kilobytes.
-
// 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.
enum { kDrainBodyBufferSize = 1024 };
- // The position where status line starts; -1 if not found yet.
- int header_buf_http_offset_;
-
- // Indicates the content length remaining to read. If this value is less
- // than zero (and chunked_decoder_ is null), then we read until the server
- // closes the connection.
- int64 response_body_length_;
-
- // Keeps track of the number of response body bytes read so far.
- int64 response_body_read_;
-
- scoped_ptr<HttpChunkedDecoder> chunked_decoder_;
-
// User buffer and length passed to the Read method.
scoped_refptr<IOBuffer> read_buf_;
int read_buf_len_;
« no previous file with comments | « net/http/http_basic_stream.cc ('k') | net/http/http_network_transaction.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698