Index: net/http/http_response_body_drainer.cc |
diff --git a/net/http/http_response_body_drainer.cc b/net/http/http_response_body_drainer.cc |
deleted file mode 100644 |
index fdcec3115d3fc515723f977c54bf68cfd9b4f8f8..0000000000000000000000000000000000000000 |
--- a/net/http/http_response_body_drainer.cc |
+++ /dev/null |
@@ -1,126 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/http/http_response_body_drainer.h" |
- |
-#include "base/compiler_specific.h" |
-#include "base/logging.h" |
-#include "net/base/io_buffer.h" |
-#include "net/base/net_errors.h" |
-#include "net/http/http_network_session.h" |
-#include "net/http/http_stream.h" |
- |
-namespace net { |
- |
-HttpResponseBodyDrainer::HttpResponseBodyDrainer(HttpStream* stream) |
- : stream_(stream), |
- next_state_(STATE_NONE), |
- total_read_(0), |
- session_(NULL) {} |
- |
-HttpResponseBodyDrainer::~HttpResponseBodyDrainer() {} |
- |
-void HttpResponseBodyDrainer::Start(HttpNetworkSession* session) { |
- read_buf_ = new IOBuffer(kDrainBodyBufferSize); |
- next_state_ = STATE_DRAIN_RESPONSE_BODY; |
- int rv = DoLoop(OK); |
- |
- if (rv == ERR_IO_PENDING) { |
- timer_.Start(FROM_HERE, |
- base::TimeDelta::FromSeconds(kTimeoutInSeconds), |
- this, |
- &HttpResponseBodyDrainer::OnTimerFired); |
- session_ = session; |
- session->AddResponseDrainer(this); |
- return; |
- } |
- |
- Finish(rv); |
-} |
- |
-int HttpResponseBodyDrainer::DoLoop(int result) { |
- DCHECK_NE(next_state_, STATE_NONE); |
- |
- int rv = result; |
- do { |
- State state = next_state_; |
- next_state_ = STATE_NONE; |
- switch (state) { |
- case STATE_DRAIN_RESPONSE_BODY: |
- DCHECK_EQ(OK, rv); |
- rv = DoDrainResponseBody(); |
- break; |
- case STATE_DRAIN_RESPONSE_BODY_COMPLETE: |
- rv = DoDrainResponseBodyComplete(rv); |
- break; |
- default: |
- NOTREACHED() << "bad state"; |
- rv = ERR_UNEXPECTED; |
- break; |
- } |
- } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); |
- |
- return rv; |
-} |
- |
-int HttpResponseBodyDrainer::DoDrainResponseBody() { |
- next_state_ = STATE_DRAIN_RESPONSE_BODY_COMPLETE; |
- |
- return stream_->ReadResponseBody( |
- read_buf_.get(), |
- kDrainBodyBufferSize - total_read_, |
- base::Bind(&HttpResponseBodyDrainer::OnIOComplete, |
- base::Unretained(this))); |
-} |
- |
-int HttpResponseBodyDrainer::DoDrainResponseBodyComplete(int result) { |
- DCHECK_NE(ERR_IO_PENDING, result); |
- |
- if (result < 0) |
- return result; |
- |
- total_read_ += result; |
- if (stream_->IsResponseBodyComplete()) |
- return OK; |
- |
- DCHECK_LE(total_read_, kDrainBodyBufferSize); |
- if (total_read_ >= kDrainBodyBufferSize) |
- return ERR_RESPONSE_BODY_TOO_BIG_TO_DRAIN; |
- |
- if (result == 0) |
- return ERR_CONNECTION_CLOSED; |
- |
- next_state_ = STATE_DRAIN_RESPONSE_BODY; |
- return OK; |
-} |
- |
-void HttpResponseBodyDrainer::OnIOComplete(int result) { |
- int rv = DoLoop(result); |
- if (rv != ERR_IO_PENDING) { |
- timer_.Stop(); |
- Finish(rv); |
- } |
-} |
- |
-void HttpResponseBodyDrainer::OnTimerFired() { |
- Finish(ERR_TIMED_OUT); |
-} |
- |
-void HttpResponseBodyDrainer::Finish(int result) { |
- DCHECK_NE(ERR_IO_PENDING, result); |
- |
- if (session_) |
- session_->RemoveResponseDrainer(this); |
- |
- if (result < 0) { |
- stream_->Close(true /* no keep-alive */); |
- } else { |
- DCHECK_EQ(OK, result); |
- stream_->Close(false /* keep-alive */); |
- } |
- |
- delete this; |
-} |
- |
-} // namespace net |