| Index: net/base/elements_upload_data_stream.cc
|
| diff --git a/net/base/elements_upload_data_stream.cc b/net/base/elements_upload_data_stream.cc
|
| deleted file mode 100644
|
| index e8d33ee851a1229274224f2c2e3d74aedcb547df..0000000000000000000000000000000000000000
|
| --- a/net/base/elements_upload_data_stream.cc
|
| +++ /dev/null
|
| @@ -1,166 +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/base/elements_upload_data_stream.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/logging.h"
|
| -#include "net/base/completion_callback.h"
|
| -#include "net/base/io_buffer.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/base/upload_bytes_element_reader.h"
|
| -#include "net/base/upload_element_reader.h"
|
| -
|
| -namespace net {
|
| -
|
| -ElementsUploadDataStream::ElementsUploadDataStream(
|
| - ScopedVector<UploadElementReader> element_readers,
|
| - int64 identifier)
|
| - : UploadDataStream(false, identifier),
|
| - element_readers_(element_readers.Pass()),
|
| - element_index_(0),
|
| - read_failed_(false),
|
| - weak_ptr_factory_(this) {
|
| -}
|
| -
|
| -ElementsUploadDataStream::~ElementsUploadDataStream() {
|
| -}
|
| -
|
| -scoped_ptr<UploadDataStream> ElementsUploadDataStream::CreateWithReader(
|
| - scoped_ptr<UploadElementReader> reader,
|
| - int64 identifier) {
|
| - ScopedVector<UploadElementReader> readers;
|
| - readers.push_back(reader.release());
|
| - return scoped_ptr<UploadDataStream>(
|
| - new ElementsUploadDataStream(readers.Pass(), identifier));
|
| -}
|
| -
|
| -int ElementsUploadDataStream::InitInternal() {
|
| - return InitElements(0);
|
| -}
|
| -
|
| -int ElementsUploadDataStream::ReadInternal(
|
| - IOBuffer* buf,
|
| - int buf_len) {
|
| - DCHECK_GT(buf_len, 0);
|
| - return ReadElements(new DrainableIOBuffer(buf, buf_len));
|
| -}
|
| -
|
| -bool ElementsUploadDataStream::IsInMemory() const {
|
| - for (size_t i = 0; i < element_readers_.size(); ++i) {
|
| - if (!element_readers_[i]->IsInMemory())
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -const ScopedVector<UploadElementReader>*
|
| -ElementsUploadDataStream::GetElementReaders() const {
|
| - return &element_readers_;
|
| -}
|
| -
|
| -void ElementsUploadDataStream::ResetInternal() {
|
| - weak_ptr_factory_.InvalidateWeakPtrs();
|
| - read_failed_ = false;
|
| - element_index_ = 0;
|
| -}
|
| -
|
| -int ElementsUploadDataStream::InitElements(size_t start_index) {
|
| - // Call Init() for all elements.
|
| - for (size_t i = start_index; i < element_readers_.size(); ++i) {
|
| - UploadElementReader* reader = element_readers_[i];
|
| - // When new_result is ERR_IO_PENDING, InitInternal() will be called
|
| - // with start_index == i + 1 when reader->Init() finishes.
|
| - int result = reader->Init(
|
| - base::Bind(&ElementsUploadDataStream::OnInitElementCompleted,
|
| - weak_ptr_factory_.GetWeakPtr(),
|
| - i));
|
| - DCHECK(result != ERR_IO_PENDING || !reader->IsInMemory());
|
| - DCHECK_LE(result, OK);
|
| - if (result != OK)
|
| - return result;
|
| - }
|
| -
|
| - uint64 total_size = 0;
|
| - for (size_t i = 0; i < element_readers_.size(); ++i) {
|
| - total_size += element_readers_[i]->GetContentLength();
|
| - }
|
| - SetSize(total_size);
|
| - return OK;
|
| -}
|
| -
|
| -void ElementsUploadDataStream::OnInitElementCompleted(size_t index,
|
| - int result) {
|
| - DCHECK_NE(ERR_IO_PENDING, result);
|
| -
|
| - // Check the last result.
|
| - if (result == OK)
|
| - result = InitElements(index + 1);
|
| -
|
| - if (result != ERR_IO_PENDING)
|
| - OnInitCompleted(result);
|
| -}
|
| -
|
| -int ElementsUploadDataStream::ReadElements(
|
| - const scoped_refptr<DrainableIOBuffer>& buf) {
|
| - while (!read_failed_ && element_index_ < element_readers_.size()) {
|
| - UploadElementReader* reader = element_readers_[element_index_];
|
| -
|
| - if (reader->BytesRemaining() == 0) {
|
| - ++element_index_;
|
| - continue;
|
| - }
|
| -
|
| - if (buf->BytesRemaining() == 0)
|
| - break;
|
| -
|
| - int result = reader->Read(
|
| - buf.get(),
|
| - buf->BytesRemaining(),
|
| - base::Bind(&ElementsUploadDataStream::OnReadElementCompleted,
|
| - weak_ptr_factory_.GetWeakPtr(),
|
| - buf));
|
| - if (result == ERR_IO_PENDING)
|
| - return ERR_IO_PENDING;
|
| - ProcessReadResult(buf, result);
|
| - }
|
| -
|
| - if (read_failed_) {
|
| - // If an error occured during read operation, then pad with zero.
|
| - // Otherwise the server will hang waiting for the rest of the data.
|
| - int num_bytes_to_fill = static_cast<int>(std::min(
|
| - static_cast<uint64>(buf->BytesRemaining()),
|
| - size() - position() - buf->BytesConsumed()));
|
| - DCHECK_GE(num_bytes_to_fill, 0);
|
| - memset(buf->data(), 0, num_bytes_to_fill);
|
| - buf->DidConsume(num_bytes_to_fill);
|
| - }
|
| -
|
| - return buf->BytesConsumed();
|
| -}
|
| -
|
| -void ElementsUploadDataStream::OnReadElementCompleted(
|
| - const scoped_refptr<DrainableIOBuffer>& buf,
|
| - int result) {
|
| - ProcessReadResult(buf, result);
|
| -
|
| - result = ReadElements(buf);
|
| - if (result != ERR_IO_PENDING)
|
| - OnReadCompleted(result);
|
| -}
|
| -
|
| -void ElementsUploadDataStream::ProcessReadResult(
|
| - const scoped_refptr<DrainableIOBuffer>& buf,
|
| - int result) {
|
| - DCHECK_NE(ERR_IO_PENDING, result);
|
| - DCHECK(!read_failed_);
|
| -
|
| - if (result >= 0) {
|
| - buf->DidConsume(result);
|
| - } else {
|
| - read_failed_ = true;
|
| - }
|
| -}
|
| -
|
| -} // namespace net
|
|
|