| Index: storage/browser/blob/blob_url_request_job.h
|
| diff --git a/storage/browser/blob/blob_url_request_job.h b/storage/browser/blob/blob_url_request_job.h
|
| index 21baa2cea9d214ecd737adff10a3035fe5e04062..74d07ada58df6fbd4194f6ffcba8ead490865e80 100644
|
| --- a/storage/browser/blob/blob_url_request_job.h
|
| +++ b/storage/browser/blob/blob_url_request_job.h
|
| @@ -13,6 +13,7 @@
|
| #include "net/http/http_byte_range.h"
|
| #include "net/http/http_status_code.h"
|
| #include "net/url_request/url_request_job.h"
|
| +#include "storage/browser/blob/blob_data_snapshot.h"
|
| #include "storage/browser/storage_browser_export.h"
|
|
|
| namespace base {
|
| @@ -26,8 +27,6 @@
|
|
|
| namespace storage {
|
|
|
| -class BlobDataHandle;
|
| -class BlobReader;
|
| class FileStreamReader;
|
| class FileSystemContext;
|
|
|
| @@ -37,7 +36,7 @@
|
| public:
|
| BlobURLRequestJob(net::URLRequest* request,
|
| net::NetworkDelegate* network_delegate,
|
| - BlobDataHandle* blob_handle,
|
| + scoped_ptr<BlobDataSnapshot> blob_data,
|
| storage::FileSystemContext* file_system_context,
|
| base::SingleThreadTaskRunner* resolving_thread_task_runner);
|
|
|
| @@ -58,11 +57,58 @@
|
|
|
| // For preparing for read: get the size, apply the range and perform seek.
|
| void DidStart();
|
| - void DidCalculateSize(int result);
|
| - void DidReadRawData(int result);
|
| + bool AddItemLength(size_t index, int64 item_length);
|
| + bool CountSize();
|
| + void DidCountSize(int error);
|
| + void DidGetFileItemLength(size_t index, int64 result);
|
| + void Seek(int64 offset);
|
|
|
| + // For reading the blob.
|
| + bool ReadLoop(int* bytes_read);
|
| + bool ReadItem();
|
| + void AdvanceItem();
|
| + void AdvanceBytesRead(int result);
|
| + bool ReadBytesItem(const BlobDataItem& item, int bytes_to_read);
|
| +
|
| + bool ReadFileItem(FileStreamReader* reader, int bytes_to_read);
|
| + void DidReadFile(int chunk_number, int result);
|
| + void DeleteCurrentFileReader();
|
| +
|
| + bool ReadDiskCacheEntryItem(const BlobDataItem& item, int bytes_to_read);
|
| + void DidReadDiskCacheEntry(int result);
|
| +
|
| + int ComputeBytesToRead() const;
|
| + int BytesReadCompleted();
|
| +
|
| + // These methods convert the result of blob data reading into response headers
|
| + // and pass it to URLRequestJob's NotifyDone() or NotifyHeadersComplete().
|
| + void NotifySuccess();
|
| void NotifyFailure(int);
|
| void HeadersCompleted(net::HttpStatusCode status_code);
|
| +
|
| + // Returns a FileStreamReader for a blob item at |index|.
|
| + // If the item at |index| is not of file this returns NULL.
|
| + FileStreamReader* GetFileStreamReader(size_t index);
|
| +
|
| + // Creates a FileStreamReader for the item at |index| with additional_offset.
|
| + // If failed, then returns false.
|
| + bool CreateFileStreamReader(size_t index, int64 additional_offset);
|
| +
|
| + scoped_ptr<BlobDataSnapshot> blob_data_;
|
| +
|
| + // Variables for controlling read from |blob_data_|.
|
| + scoped_refptr<storage::FileSystemContext> file_system_context_;
|
| + scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
|
| + std::vector<int64> item_length_list_;
|
| + int64 total_size_;
|
| + int64 remaining_bytes_;
|
| + int pending_get_file_info_count_;
|
| + IndexToReaderMap index_to_reader_;
|
| + size_t current_item_index_;
|
| + int64 current_item_offset_;
|
| +
|
| + // Holds the buffer for read data with the IOBuffer interface.
|
| + scoped_refptr<net::DrainableIOBuffer> read_buf_;
|
|
|
| // Is set when NotifyFailure() is called and reset when DidStart is called.
|
| bool error_;
|
| @@ -70,8 +116,9 @@
|
| bool byte_range_set_;
|
| net::HttpByteRange byte_range_;
|
|
|
| - scoped_ptr<BlobDataHandle> blob_handle_;
|
| - scoped_ptr<BlobReader> blob_reader_;
|
| + // Used to create unique id's for tracing.
|
| + int current_file_chunk_number_;
|
| +
|
| scoped_ptr<net::HttpResponseInfo> response_info_;
|
|
|
| base::WeakPtrFactory<BlobURLRequestJob> weak_factory_;
|
|
|