| // Copyright 2014 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 "components/cronet/android/wrapped_channel_upload_element_reader.h" |
| |
| #include "base/android/jni_android.h" |
| #include "base/logging.h" |
| #include "net/base/io_buffer.h" |
| #include "net/base/net_errors.h" |
| |
| namespace cronet { |
| |
| WrappedChannelElementReader::WrappedChannelElementReader( |
| scoped_refptr<URLRequestAdapter::URLRequestAdapterDelegate> delegate, |
| uint64 length) |
| : length_(length), offset_(0), delegate_(delegate) { |
| } |
| |
| WrappedChannelElementReader::~WrappedChannelElementReader() { |
| } |
| |
| int WrappedChannelElementReader::Init(const net::CompletionCallback& callback) { |
| offset_ = 0; |
| return net::OK; |
| } |
| |
| uint64 WrappedChannelElementReader::GetContentLength() const { |
| return length_; |
| } |
| |
| uint64 WrappedChannelElementReader::BytesRemaining() const { |
| return length_ - offset_; |
| } |
| |
| bool WrappedChannelElementReader::IsInMemory() const { |
| return false; |
| } |
| |
| int WrappedChannelElementReader::Read(net::IOBuffer* buf, |
| int buf_length, |
| const net::CompletionCallback& callback) { |
| DCHECK(!callback.is_null()); |
| DCHECK(delegate_); |
| // TODO(mef): Post the read to file thread. |
| int bytes_read = delegate_->ReadFromUploadChannel(buf, buf_length); |
| if (bytes_read < 0) |
| return net::ERR_FAILED; |
| offset_ += bytes_read; |
| return bytes_read; |
| } |
| |
| } // namespace cronet |
| |