| Index: storage/browser/blob/blob_reader.h
|
| diff --git a/storage/browser/blob/blob_reader.h b/storage/browser/blob/blob_reader.h
|
| deleted file mode 100644
|
| index 54b262f3ef3e910dfcf932c37a87d8b9e85ab8b7..0000000000000000000000000000000000000000
|
| --- a/storage/browser/blob/blob_reader.h
|
| +++ /dev/null
|
| @@ -1,190 +0,0 @@
|
| -// 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_BLOB_READER_H_
|
| -#define STORAGE_BROWSER_BLOB_BLOB_READER_H_
|
| -
|
| -#include <stdint.h>
|
| -#include <map>
|
| -#include <vector>
|
| -
|
| -#include "base/macros.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "net/base/completion_callback.h"
|
| -#include "storage/browser/storage_browser_export.h"
|
| -
|
| -class GURL;
|
| -
|
| -namespace base {
|
| -class FilePath;
|
| -class SequencedTaskRunner;
|
| -class TaskRunner;
|
| -class Time;
|
| -}
|
| -
|
| -namespace net {
|
| -class DrainableIOBuffer;
|
| -class IOBuffer;
|
| -}
|
| -
|
| -namespace storage {
|
| -class BlobDataItem;
|
| -class BlobDataHandle;
|
| -class BlobDataSnapshot;
|
| -class FileStreamReader;
|
| -class FileSystemContext;
|
| -
|
| -// The blob reader is used to read a blob. This can only be used in the browser
|
| -// process, and we need to be on the IO thread.
|
| -// * There can only be one read happening at a time per reader.
|
| -// * If a status of Status::NET_ERROR is returned, that means there was an
|
| -// error and the net_error() variable contains the error code.
|
| -// Use a BlobDataHandle to create an instance.
|
| -class STORAGE_EXPORT BlobReader {
|
| - public:
|
| - class STORAGE_EXPORT FileStreamReaderProvider {
|
| - public:
|
| - virtual ~FileStreamReaderProvider();
|
| -
|
| - virtual scoped_ptr<FileStreamReader> CreateForLocalFile(
|
| - base::TaskRunner* task_runner,
|
| - const base::FilePath& file_path,
|
| - int64_t initial_offset,
|
| - const base::Time& expected_modification_time) = 0;
|
| -
|
| - virtual scoped_ptr<FileStreamReader> CreateFileStreamReader(
|
| - const GURL& filesystem_url,
|
| - int64_t offset,
|
| - int64_t max_bytes_to_read,
|
| - const base::Time& expected_modification_time) = 0;
|
| - };
|
| - enum class Status { NET_ERROR, IO_PENDING, DONE };
|
| - virtual ~BlobReader();
|
| -
|
| - // This calculates the total size of the blob, and initializes the reading
|
| - // cursor.
|
| - // * This should only be called once per reader.
|
| - // * Status::Done means that the total_size() value is populated and you can
|
| - // continue to SetReadRange or Read.
|
| - // * The 'done' callback is only called if Status::IO_PENDING is returned.
|
| - // The callback value contains the error code or net::OK. Please use the
|
| - // total_size() value to query the blob size, as it's uint64_t.
|
| - Status CalculateSize(const net::CompletionCallback& done);
|
| -
|
| - // Used to set the read position.
|
| - // * This should be called after CalculateSize and before Read.
|
| - // * Range can only be set once.
|
| - Status SetReadRange(uint64_t position, uint64_t length);
|
| -
|
| - // Reads a portion of the data.
|
| - // * CalculateSize (and optionally SetReadRange) must be called beforehand.
|
| - // * bytes_read is populated only if Status::DONE is returned. Otherwise the
|
| - // bytes read (or error code) is populated in the 'done' callback.
|
| - // * The done callback is only called if Status::IO_PENDING is returned.
|
| - // * This method can be called multiple times. A bytes_read value (either from
|
| - // the callback for Status::IO_PENDING or the bytes_read value for
|
| - // Status::DONE) of 0 means we're finished reading.
|
| - Status Read(net::IOBuffer* buffer,
|
| - size_t dest_size,
|
| - int* bytes_read,
|
| - net::CompletionCallback done);
|
| -
|
| - // Kills reading and invalidates all callbacks. The reader cannot be used
|
| - // after this call.
|
| - void Kill();
|
| -
|
| - // Returns if all of the blob's items are in memory.
|
| - bool IsInMemory() const;
|
| -
|
| - // Returns the remaining bytes to be read in the blob. This is populated
|
| - // after CalculateSize, and is modified by SetReadRange.
|
| - uint64_t remaining_bytes() const { return remaining_bytes_; }
|
| -
|
| - // Returns the net error code if there was an error. Defaults to net::OK.
|
| - int net_error() const { return net_error_; }
|
| -
|
| - // Returns the total size of the blob. This is populated after CalculateSize
|
| - // is called.
|
| - uint64_t total_size() const { return total_size_; }
|
| -
|
| - protected:
|
| - friend class BlobDataHandle;
|
| - friend class BlobReaderTest;
|
| -
|
| - BlobReader(const BlobDataHandle* blob_handle,
|
| - scoped_ptr<FileStreamReaderProvider> file_stream_provider,
|
| - base::SequencedTaskRunner* file_task_runner);
|
| -
|
| - bool total_size_calculated() const { return total_size_calculated_; }
|
| -
|
| - private:
|
| - Status ReportError(int net_error);
|
| - void InvalidateCallbacksAndDone(int net_error, net::CompletionCallback done);
|
| -
|
| - bool AddItemLength(size_t index, uint64_t length);
|
| - bool ResolveFileItemLength(const BlobDataItem& item,
|
| - int64_t total_length,
|
| - uint64_t* output_length);
|
| - void DidGetFileItemLength(size_t index, int64_t result);
|
| - void DidCountSize();
|
| -
|
| - // For reading the blob.
|
| - // Returns if we're done, PENDING_IO if we're waiting on async.
|
| - Status ReadLoop(int* bytes_read);
|
| - // Called from asynchronously called methods to continue the read loop.
|
| - void ContinueAsyncReadLoop();
|
| - // PENDING_IO means we're waiting on async.
|
| - Status ReadItem();
|
| - void AdvanceItem();
|
| - void AdvanceBytesRead(int result);
|
| - void ReadBytesItem(const BlobDataItem& item, int bytes_to_read);
|
| - BlobReader::Status ReadFileItem(FileStreamReader* reader, int bytes_to_read);
|
| - void DidReadFile(int result);
|
| - void DeleteCurrentFileReader();
|
| - Status ReadDiskCacheEntryItem(const BlobDataItem& item, int bytes_to_read);
|
| - void DidReadDiskCacheEntry(int result);
|
| - void DidReadItem(int result);
|
| - int ComputeBytesToRead() const;
|
| - int BytesReadCompleted();
|
| -
|
| - // Returns a FileStreamReader for a blob item at |index|.
|
| - // If the item at |index| is not of file this returns NULL.
|
| - FileStreamReader* GetOrCreateFileReaderAtIndex(size_t index);
|
| - // If the reader is null, then this basically performs a delete operation.
|
| - void SetFileReaderAtIndex(size_t index, scoped_ptr<FileStreamReader> reader);
|
| - // Creates a FileStreamReader for the item with additional_offset.
|
| - scoped_ptr<FileStreamReader> CreateFileStreamReader(
|
| - const BlobDataItem& item,
|
| - uint64_t additional_offset);
|
| -
|
| - scoped_ptr<BlobDataSnapshot> blob_data_;
|
| - scoped_ptr<FileStreamReaderProvider> file_stream_provider_;
|
| - scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
|
| -
|
| - int net_error_;
|
| - bool item_list_populated_ = false;
|
| - std::vector<uint64_t> item_length_list_;
|
| -
|
| - scoped_refptr<net::DrainableIOBuffer> read_buf_;
|
| -
|
| - bool total_size_calculated_ = false;
|
| - uint64_t total_size_ = 0;
|
| - uint64_t remaining_bytes_ = 0;
|
| - size_t pending_get_file_info_count_ = 0;
|
| - std::map<size_t, FileStreamReader*> index_to_reader_;
|
| - size_t current_item_index_ = 0;
|
| - uint64_t current_item_offset_ = 0;
|
| -
|
| - bool io_pending_ = false;
|
| -
|
| - net::CompletionCallback size_callback_;
|
| - net::CompletionCallback read_callback_;
|
| -
|
| - base::WeakPtrFactory<BlobReader> weak_factory_;
|
| - DISALLOW_COPY_AND_ASSIGN(BlobReader);
|
| -};
|
| -
|
| -} // namespace storage
|
| -#endif // STORAGE_BROWSER_BLOB_BLOB_READER_H_
|
|
|