diff options
author | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-18 07:16:26 +0000 |
---|---|---|
committer | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-18 07:16:26 +0000 |
commit | f3b61f9de846be52ecd105039c4d548e3053234c (patch) | |
tree | d2033c37b675f77c1e883bc075d1e82d5e6084b8 /net/http/http_network_transaction.cc | |
parent | 89a3da9808c7f1b0b5481ce1d6b1c45cdcc01040 (diff) | |
download | chromium_src-f3b61f9de846be52ecd105039c4d548e3053234c.zip chromium_src-f3b61f9de846be52ecd105039c4d548e3053234c.tar.gz chromium_src-f3b61f9de846be52ecd105039c4d548e3053234c.tar.bz2 |
Refactor SpdyStream to get HTTP specific out of the interface and members.
Add SpdyStream::Delegate interface and SpdyHttpStream implements SpdyStream::Delegate.
SpdyHeaderBlock<->HTTP request/response conversion functions moved
from spdy_session.cc to spdy_http_stream.cc.
All interface between SpdySession and SpdyStream uses SpdyHeaderBlock
instead of HttpRequestInfo,HttpResponseInfo.
BUG=42320
TEST=none
Review URL: http://codereview.chromium.org/2667002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50215 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http/http_network_transaction.cc')
-rw-r--r-- | net/http/http_network_transaction.cc | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index ccc956b..d670024 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc @@ -507,10 +507,10 @@ int HttpNetworkTransaction::Read(IOBuffer* buf, int buf_len, // Are we using SPDY or HTTP? if (using_spdy_) { DCHECK(!http_stream_.get()); - DCHECK(spdy_stream_->GetResponseInfo()->headers); + DCHECK(spdy_http_stream_->GetResponseInfo()->headers); next_state = STATE_SPDY_READ_BODY; } else { - DCHECK(!spdy_stream_.get()); + DCHECK(!spdy_http_stream_.get()); next_state = STATE_READ_BODY; if (!connection_->is_initialized()) @@ -593,8 +593,8 @@ HttpNetworkTransaction::~HttpNetworkTransaction() { if (pac_request_) session_->proxy_service()->CancelPacRequest(pac_request_); - if (spdy_stream_.get()) - spdy_stream_->Cancel(); + if (spdy_http_stream_.get()) + spdy_http_stream_->Cancel(); } void HttpNetworkTransaction::DoCallback(int rv) { @@ -1498,7 +1498,7 @@ int HttpNetworkTransaction::DoDrainBodyForAuthRestartComplete(int result) { int HttpNetworkTransaction::DoSpdySendRequest() { next_state_ = STATE_SPDY_SEND_REQUEST_COMPLETE; - CHECK(!spdy_stream_.get()); + CHECK(!spdy_http_stream_.get()); // First we get a SPDY session. Theoretically, we've just negotiated one, but // if one already exists, then screw it, use the existing one! Otherwise, @@ -1529,9 +1529,25 @@ int HttpNetworkTransaction::DoSpdySendRequest() { return error_code; } headers_valid_ = false; - spdy_stream_ = spdy_session->GetOrCreateStream( - *request_, upload_data, net_log_); - return spdy_stream_->SendRequest(upload_data, &response_, &io_callback_); + scoped_refptr<SpdyStream> spdy_stream; + if (request_->method == "GET") + spdy_stream = spdy_session->GetPushStream(request_->url, net_log_); + if (spdy_stream.get()) { + DCHECK(spdy_stream->pushed()); + CHECK(spdy_stream->GetDelegate() == NULL); + spdy_http_stream_ = new SpdyHttpStream(spdy_stream); + spdy_http_stream_->InitializeRequest(*request_, base::Time::Now(), NULL); + } else { + spdy_stream = spdy_session->CreateStream(request_->url, + request_->priority, + net_log_); + DCHECK(!spdy_stream->pushed()); + CHECK(spdy_stream->GetDelegate() == NULL); + spdy_http_stream_ = new SpdyHttpStream(spdy_stream); + spdy_http_stream_->InitializeRequest( + *request_, base::Time::Now(), upload_data); + } + return spdy_http_stream_->SendRequest(&response_, &io_callback_); } int HttpNetworkTransaction::DoSpdySendRequestComplete(int result) { @@ -1544,7 +1560,7 @@ int HttpNetworkTransaction::DoSpdySendRequestComplete(int result) { int HttpNetworkTransaction::DoSpdyReadHeaders() { next_state_ = STATE_SPDY_READ_HEADERS_COMPLETE; - return spdy_stream_->ReadResponseHeaders(&io_callback_); + return spdy_http_stream_->ReadResponseHeaders(&io_callback_); } int HttpNetworkTransaction::DoSpdyReadHeadersComplete(int result) { @@ -1560,7 +1576,7 @@ int HttpNetworkTransaction::DoSpdyReadHeadersComplete(int result) { int HttpNetworkTransaction::DoSpdyReadBody() { next_state_ = STATE_SPDY_READ_BODY_COMPLETE; - return spdy_stream_->ReadResponseBody( + return spdy_http_stream_->ReadResponseBody( read_buf_, read_buf_len_, &io_callback_); } @@ -1569,7 +1585,7 @@ int HttpNetworkTransaction::DoSpdyReadBodyComplete(int result) { read_buf_len_ = 0; if (result <= 0) - spdy_stream_ = NULL; + spdy_http_stream_ = NULL; return result; } |