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