Index: net/http/http_network_transaction.cc |
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc |
index 0733fdf4187a309b11cfb5eed5eb54228b856c00..29967723d4b1a1b7a6eec19cedb8044247672746 100644 |
--- a/net/http/http_network_transaction.cc |
+++ b/net/http/http_network_transaction.cc |
@@ -159,28 +159,18 @@ HttpNetworkTransaction::HttpNetworkTransaction(RequestPriority priority, |
HttpNetworkTransaction::~HttpNetworkTransaction() { |
if (stream_.get()) { |
- HttpResponseHeaders* headers = GetResponseHeaders(); |
// TODO(mbelshe): The stream_ should be able to compute whether or not the |
// stream should be kept alive. No reason to compute here |
// and pass it in. |
- bool try_to_keep_alive = |
- next_state_ == STATE_NONE && |
- stream_->CanFindEndOfResponse() && |
- (!headers || headers->IsKeepAlive()); |
- if (!try_to_keep_alive) { |
+ if (!stream_->CanReuseConnection() || next_state_ != STATE_NONE) { |
stream_->Close(true /* not reusable */); |
+ } else if (stream_->IsResponseBodyComplete()) { |
+ // If the response body is complete, we can just reuse the socket. |
+ stream_->Close(false /* reusable */); |
} else { |
- if (stream_->IsResponseBodyComplete()) { |
- // If the response body is complete, we can just reuse the socket. |
- stream_->Close(false /* reusable */); |
- } else if (stream_->IsSpdyHttpStream()) { |
- // Doesn't really matter for SpdyHttpStream. Just close it. |
- stream_->Close(true /* not reusable */); |
- } else { |
- // Otherwise, we try to drain the response body. |
- HttpStream* stream = stream_.release(); |
- stream->Drain(session_); |
- } |
+ // Otherwise, we try to drain the response body. |
+ HttpStream* stream = stream_.release(); |
+ stream->Drain(session_); |
} |
} |
@@ -293,8 +283,7 @@ void HttpNetworkTransaction::PrepareForAuthRestart(HttpAuth::Target target) { |
bool keep_alive = false; |
// Even if the server says the connection is keep-alive, we have to be |
// able to find the end of each response in order to reuse the connection. |
- if (GetResponseHeaders()->IsKeepAlive() && |
- stream_->CanFindEndOfResponse()) { |
+ if (stream_->CanReuseConnection()) { |
// If the response body hasn't been completely read, we need to drain |
// it first. |
if (!stream_->IsResponseBodyComplete()) { |
@@ -317,7 +306,7 @@ void HttpNetworkTransaction::DidDrainBodyForAuthRestart(bool keep_alive) { |
if (stream_.get()) { |
total_received_bytes_ += stream_->GetTotalReceivedBytes(); |
HttpStream* new_stream = NULL; |
- if (keep_alive && stream_->IsConnectionReusable()) { |
+ if (keep_alive && stream_->CanReuseConnection()) { |
// We should call connection_->set_idle_time(), but this doesn't occur |
// often enough to be worth the trouble. |
stream_->SetConnectionReused(); |
@@ -1115,26 +1104,18 @@ int HttpNetworkTransaction::DoReadBodyComplete(int result) { |
done = true; |
} |
- bool keep_alive = false; |
- if (stream_->IsResponseBodyComplete()) { |
+ // Clean up connection if we are done. |
+ if (done) { |
// Note: Just because IsResponseBodyComplete is true, we're not |
// necessarily "done". We're only "done" when it is the last |
// read on this HttpNetworkTransaction, which will be signified |
// by a zero-length read. |
- // TODO(mbelshe): The keepalive property is really a property of |
+ // TODO(mbelshe): The keep-alive property is really a property of |
// the stream. No need to compute it here just to pass back |
// to the stream's Close function. |
- // TODO(rtenneti): CanFindEndOfResponse should return false if there are no |
- // ResponseHeaders. |
- if (stream_->CanFindEndOfResponse()) { |
- HttpResponseHeaders* headers = GetResponseHeaders(); |
- if (headers) |
- keep_alive = headers->IsKeepAlive(); |
- } |
- } |
+ bool keep_alive = |
+ stream_->IsResponseBodyComplete() && stream_->CanReuseConnection(); |
- // Clean up connection if we are done. |
- if (done) { |
stream_->Close(!keep_alive); |
// Note: we don't reset the stream here. We've closed it, but we still |
// need it around so that callers can call methods such as |