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

Unified Diff: net/spdy/spdy_http_stream.cc

Issue 15701009: [SPDY] Add a SpdyStreamType enum and use it for SpdyStream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: CHECK -> DCHECK Created 7 years, 7 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
Index: net/spdy/spdy_http_stream.cc
diff --git a/net/spdy/spdy_http_stream.cc b/net/spdy/spdy_http_stream.cc
index a9fe271ac7f754a7b4404cc506ddd647bf01191d..a3f905e480892ca5ddbf0634419c4ab61f6447de 100644
--- a/net/spdy/spdy_http_stream.cc
+++ b/net/spdy/spdy_http_stream.cc
@@ -30,7 +30,6 @@ SpdyHttpStream::SpdyHttpStream(SpdySession* spdy_session,
: weak_factory_(this),
spdy_session_(spdy_session),
stream_closed_(false),
- closed_stream_pushed_(false),
closed_stream_status_(ERR_FAILED),
closed_stream_id_(0),
request_info_(NULL),
@@ -74,14 +73,15 @@ int SpdyHttpStream::InitializeStream(const HttpRequestInfo* request_info,
// |stream_| may be NULL even if OK was returned.
if (stream_) {
+ DCHECK_EQ(stream_->type(), SPDY_PUSH_STREAM);
stream_->SetDelegate(this);
return OK;
}
}
int rv = stream_request_.StartRequest(
- spdy_session_, request_info_->url, priority,
- stream_net_log,
+ SPDY_REQUEST_RESPONSE_STREAM, spdy_session_, request_info_->url,
+ priority, stream_net_log,
base::Bind(&SpdyHttpStream::OnStreamCreated,
weak_factory_.GetWeakPtr(), callback));
@@ -203,7 +203,7 @@ int SpdyHttpStream::SendRequest(const HttpRequestHeaders& request_headers,
HttpResponseInfo* response,
const CompletionCallback& callback) {
if (stream_closed_) {
- if (stream_->pushed())
+ if (stream_->type() == SPDY_PUSH_STREAM)
return closed_stream_status_;
return (closed_stream_status_ == OK) ? ERR_FAILED : closed_stream_status_;
@@ -256,17 +256,27 @@ int SpdyHttpStream::SendRequest(const HttpRequestHeaders& request_headers,
return result;
response_info_->socket_address = HostPortPair::FromIPEndPoint(address);
- scoped_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock);
- CreateSpdyHeadersFromHttpRequest(*request_info_, request_headers,
- headers.get(), stream_->GetProtocolVersion(),
- direct_);
- stream_->net_log().AddEvent(
- NetLog::TYPE_HTTP_TRANSACTION_SPDY_SEND_REQUEST_HEADERS,
- base::Bind(&SpdyHeaderBlockNetLogCallback, headers.get()));
- result =
- stream_->SendRequestHeaders(
- headers.Pass(),
- has_upload_data_ ? MORE_DATA_TO_SEND : NO_MORE_DATA_TO_SEND);
+ if (stream_->type() == SPDY_PUSH_STREAM) {
+ // Pushed streams do not send any data, and should always be
+ // idle. However, we still want to return ERR_IO_PENDING to mimic
+ // non-push behavior. The callback will be called when the
+ // response is received.
+ result = ERR_IO_PENDING;
+ } else {
+ scoped_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock);
+ CreateSpdyHeadersFromHttpRequest(
+ *request_info_, request_headers,
+ headers.get(), stream_->GetProtocolVersion(),
+ direct_);
+ stream_->net_log().AddEvent(
+ NetLog::TYPE_HTTP_TRANSACTION_SPDY_SEND_REQUEST_HEADERS,
+ base::Bind(&SpdyHeaderBlockNetLogCallback, headers.get()));
+ result =
+ stream_->SendRequestHeaders(
+ headers.Pass(),
+ has_upload_data_ ? MORE_DATA_TO_SEND : NO_MORE_DATA_TO_SEND);
+ }
+
if (result == ERR_IO_PENDING) {
CHECK(callback_.is_null());
callback_ = callback;
@@ -282,10 +292,9 @@ void SpdyHttpStream::Cancel() {
}
}
-SpdySendStatus SpdyHttpStream::OnSendRequestHeadersComplete() {
+void SpdyHttpStream::OnSendRequestHeadersComplete() {
if (!callback_.is_null())
DoCallback(OK);
- return has_upload_data_ ? MORE_DATA_TO_SEND : NO_MORE_DATA_TO_SEND;
}
void SpdyHttpStream::OnSendBody() {
@@ -309,7 +318,7 @@ int SpdyHttpStream::OnResponseReceived(const SpdyHeaderBlock& response,
base::Time response_time,
int status) {
if (!response_info_) {
- DCHECK(stream_->pushed());
+ DCHECK_EQ(stream_->type(), SPDY_PUSH_STREAM);
push_response_info_.reset(new HttpResponseInfo);
response_info_ = push_response_info_.get();
}
@@ -376,7 +385,7 @@ int SpdyHttpStream::OnDataReceived(scoped_ptr<SpdyBuffer> buffer) {
// ReadResponseBody(), therefore user_buffer_ may be NULL. This may often
// happen for server initiated streams.
DCHECK(stream_.get());
- DCHECK(!stream_->closed() || stream_->pushed());
+ DCHECK(!stream_->closed() || stream_->type() == SPDY_PUSH_STREAM);
if (buffer) {
response_body_queue_.Enqueue(buffer.Pass());
@@ -398,7 +407,6 @@ void SpdyHttpStream::OnDataSent() {
void SpdyHttpStream::OnClose(int status) {
if (stream_) {
stream_closed_ = true;
- closed_stream_pushed_ = stream_->pushed();
closed_stream_status_ = status;
closed_stream_id_ = stream_->stream_id();
}

Powered by Google App Engine
This is Rietveld 408576698