1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/cronet/android/wrapped_channel_upload_element_reader.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/android/jni_android.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/logging.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/base/io_buffer.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/base/net_errors.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace cronet { 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)WrappedChannelElementReader::WrappedChannelElementReader( 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<URLRequestAdapter::URLRequestAdapterDelegate> delegate, 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) uint64 length) 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : length_(length), offset_(0), delegate_(delegate) { 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 20116680a4aac90f2aa7413d9095a592090648e557Ben MurdochWrappedChannelElementReader::~WrappedChannelElementReader() { 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint WrappedChannelElementReader::Init(const net::CompletionCallback& callback) { 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch offset_ = 0; 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return net::OK; 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochuint64 WrappedChannelElementReader::GetContentLength() const { 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return length_; 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdochuint64 WrappedChannelElementReader::BytesRemaining() const { 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return length_ - offset_; 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool WrappedChannelElementReader::IsInMemory() const { 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint WrappedChannelElementReader::Read(net::IOBuffer* buf, 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int buf_length, 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const net::CompletionCallback& callback) { 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!callback.is_null()); 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK(delegate_); 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // TODO(mef): Post the read to file thread. 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int bytes_read = delegate_->ReadFromUploadChannel(buf, buf_length); 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (bytes_read < 0) 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return net::ERR_FAILED; 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch offset_ += bytes_read; 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return bytes_read; 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace cronet 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 55