1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_BROWSER_FILEAPI_UPLOAD_FILE_SYSTEM_FILE_ELEMENT_READER_H_ 6#define CONTENT_BROWSER_FILEAPI_UPLOAD_FILE_SYSTEM_FILE_ELEMENT_READER_H_ 7 8#include "base/memory/weak_ptr.h" 9#include "base/time/time.h" 10#include "content/common/content_export.h" 11#include "net/base/upload_element_reader.h" 12#include "url/gurl.h" 13 14namespace storage { 15class FileStreamReader; 16} 17 18namespace storage { 19class FileSystemContext; 20} 21 22namespace content { 23 24// An UploadElementReader implementation for filesystem file. 25class CONTENT_EXPORT UploadFileSystemFileElementReader : 26 NON_EXPORTED_BASE(public net::UploadElementReader) { 27 public: 28 UploadFileSystemFileElementReader( 29 storage::FileSystemContext* file_system_context, 30 const GURL& url, 31 uint64 range_offset, 32 uint64 range_length, 33 const base::Time& expected_modification_time); 34 virtual ~UploadFileSystemFileElementReader(); 35 36 // UploadElementReader overrides: 37 virtual int Init(const net::CompletionCallback& callback) OVERRIDE; 38 virtual uint64 GetContentLength() const OVERRIDE; 39 virtual uint64 BytesRemaining() const OVERRIDE; 40 virtual int Read(net::IOBuffer* buf, 41 int buf_length, 42 const net::CompletionCallback& callback) OVERRIDE; 43 44 private: 45 void OnGetLength(const net::CompletionCallback& callback, int64 result); 46 void OnRead(const net::CompletionCallback& callback, int result); 47 48 scoped_refptr<storage::FileSystemContext> file_system_context_; 49 const GURL url_; 50 const uint64 range_offset_; 51 const uint64 range_length_; 52 const base::Time expected_modification_time_; 53 54 scoped_ptr<storage::FileStreamReader> stream_reader_; 55 56 uint64 stream_length_; 57 uint64 position_; 58 59 base::WeakPtrFactory<UploadFileSystemFileElementReader> weak_ptr_factory_; 60 61 DISALLOW_COPY_AND_ASSIGN(UploadFileSystemFileElementReader); 62}; 63 64} // namespace content 65 66#endif // CONTENT_BROWSER_FILEAPI_UPLOAD_FILE_SYSTEM_FILE_ELEMENT_READER_H_ 67