| 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
|
|
|