Index: net/http/http_network_transaction.cc |
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc |
index f8e362f4b4fcac4609c1bfe9ecca45fd177e5fd6..66e750fb3f8dc3edbe7a5ac12ecd540653ecc3e2 100644 |
--- a/net/http/http_network_transaction.cc |
+++ b/net/http/http_network_transaction.cc |
@@ -39,7 +39,6 @@ |
#include "net/http/http_proxy_client_socket_pool.h" |
#include "net/http/http_request_headers.h" |
#include "net/http/http_request_info.h" |
-#include "net/http/http_response_body_drainer.h" |
#include "net/http/http_response_headers.h" |
#include "net/http/http_response_info.h" |
#include "net/http/http_stream_factory.h" |
@@ -133,15 +132,8 @@ HttpNetworkTransaction::~HttpNetworkTransaction() { |
stream_->Close(true /* not reusable */); |
} else { |
// Otherwise, we try to drain the response body. |
- // TODO(willchan): Consider moving this response body draining to the |
- // stream implementation. For SPDY, there's clearly no point. For |
- // HTTP, it can vary depending on whether or not we're pipelining. It's |
- // stream dependent, so the different subtypes should be implementing |
- // their solutions. |
- HttpResponseBodyDrainer* drainer = |
- new HttpResponseBodyDrainer(stream_.release()); |
- drainer->Start(session_); |
- // |drainer| will delete itself. |
+ HttpStream* stream = stream_.release(); |
+ stream->Drain(session_); |
} |
} |
} |
@@ -479,6 +471,13 @@ void HttpNetworkTransaction::DoCallback(int rv) { |
void HttpNetworkTransaction::OnIOComplete(int result) { |
int rv = DoLoop(result); |
+ if (rv == ERR_PIPELINE_EVICTION) { |
+ stream_->Close(false); |
+ stream_.reset(); |
+ stream_request_.reset(); |
+ next_state_ = STATE_NONE; |
+ RestartIgnoringLastError(user_callback_); |
mmenke
2011/09/01 21:15:39
You want to return here. Otherwise, you'll pass t
James Simonsen
2011/09/07 21:20:10
Eek. Yep. Fixed. Added test cases for the transact
|
+ } |
if (rv != ERR_IO_PENDING) |
DoCallback(rv); |
} |