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_; |