summaryrefslogtreecommitdiffstats
path: root/net/http/http_network_transaction.cc
diff options
context:
space:
mode:
authorukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-18 07:16:26 +0000
committerukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-18 07:16:26 +0000
commitf3b61f9de846be52ecd105039c4d548e3053234c (patch)
treed2033c37b675f77c1e883bc075d1e82d5e6084b8 /net/http/http_network_transaction.cc
parent89a3da9808c7f1b0b5481ce1d6b1c45cdcc01040 (diff)
downloadchromium_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.cc38
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;
}