| // Copyright 2015 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. | 
 |  | 
 | #ifndef STORAGE_BROWSER_BLOB_UPLOAD_BLOB_ELEMENT_READER_H_ | 
 | #define STORAGE_BROWSER_BLOB_UPLOAD_BLOB_ELEMENT_READER_H_ | 
 |  | 
 | #include <stdint.h> | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "base/macros.h" | 
 | #include "base/memory/ref_counted.h" | 
 | #include "net/base/completion_callback.h" | 
 | #include "net/base/upload_element_reader.h" | 
 | #include "storage/browser/storage_browser_export.h" | 
 |  | 
 | namespace base { | 
 | class SingleThreadTaskRunner; | 
 | } | 
 |  | 
 | namespace net { | 
 | class IOBuffer; | 
 | } | 
 |  | 
 | namespace storage { | 
 | class BlobDataHandle; | 
 | class BlobReader; | 
 | class FileSystemContext; | 
 |  | 
 | // This class is a wrapper around the BlobReader to make it conform | 
 | // to the net::UploadElementReader interface, and it also holds around the | 
 | // handle to the blob so it stays in memory while we read it. | 
 | class STORAGE_EXPORT UploadBlobElementReader | 
 |     : NON_EXPORTED_BASE(public net::UploadElementReader) { | 
 |  public: | 
 |   UploadBlobElementReader(std::unique_ptr<BlobDataHandle> handle, | 
 |                           FileSystemContext* file_system_context, | 
 |                           base::SingleThreadTaskRunner* file_task_runner); | 
 |   ~UploadBlobElementReader() override; | 
 |  | 
 |   int Init(const net::CompletionCallback& callback) override; | 
 |  | 
 |   uint64_t GetContentLength() const override; | 
 |  | 
 |   uint64_t BytesRemaining() const override; | 
 |  | 
 |   bool IsInMemory() const override; | 
 |  | 
 |   int Read(net::IOBuffer* buf, | 
 |            int buf_length, | 
 |            const net::CompletionCallback& callback) override; | 
 |  | 
 |   const std::string& uuid() const; | 
 |  | 
 |  private: | 
 |   std::unique_ptr<BlobDataHandle> handle_; | 
 |   scoped_refptr<FileSystemContext> file_system_context_; | 
 |   scoped_refptr<base::SingleThreadTaskRunner> file_runner_; | 
 |   std::unique_ptr<BlobReader> reader_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(UploadBlobElementReader); | 
 | }; | 
 |  | 
 | }  // namespace storage | 
 | #endif  // STORAGE_BROWSER_BLOB_UPLOAD_BLOB_ELEMENT_READER_H_ |