summaryrefslogtreecommitdiffstats
path: root/storage/browser/blob/local_file_stream_reader.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage/browser/blob/local_file_stream_reader.h')
-rw-r--r--storage/browser/blob/local_file_stream_reader.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/storage/browser/blob/local_file_stream_reader.h b/storage/browser/blob/local_file_stream_reader.h
new file mode 100644
index 0000000..b9e3328
--- /dev/null
+++ b/storage/browser/blob/local_file_stream_reader.h
@@ -0,0 +1,81 @@
+// Copyright (c) 2012 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_LOCAL_FILE_STREAM_READER_H_
+#define STORAGE_BROWSER_BLOB_LOCAL_FILE_STREAM_READER_H_
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "base/files/file.h"
+#include "base/files/file_path.h"
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "storage/browser/blob/file_stream_reader.h"
+#include "storage/browser/storage_browser_export.h"
+
+namespace base {
+class TaskRunner;
+}
+
+namespace content {
+class LocalFileStreamReaderTest;
+}
+
+namespace net {
+class FileStream;
+}
+
+namespace storage {
+
+// A thin wrapper of net::FileStream with range support for sliced file
+// handling.
+class STORAGE_EXPORT LocalFileStreamReader
+ : public NON_EXPORTED_BASE(FileStreamReader) {
+ public:
+ virtual ~LocalFileStreamReader();
+
+ // FileStreamReader overrides.
+ virtual int Read(net::IOBuffer* buf, int buf_len,
+ const net::CompletionCallback& callback) OVERRIDE;
+ virtual int64 GetLength(
+ const net::Int64CompletionCallback& callback) OVERRIDE;
+
+ private:
+ friend class FileStreamReader;
+ friend class content::LocalFileStreamReaderTest;
+
+ LocalFileStreamReader(base::TaskRunner* task_runner,
+ const base::FilePath& file_path,
+ int64 initial_offset,
+ const base::Time& expected_modification_time);
+ int Open(const net::CompletionCallback& callback);
+
+ // Callbacks that are chained from Open for Read.
+ void DidVerifyForOpen(const net::CompletionCallback& callback,
+ int64 get_length_result);
+ void DidOpenFileStream(const net::CompletionCallback& callback,
+ int result);
+ void DidSeekFileStream(const net::CompletionCallback& callback,
+ int64 seek_result);
+ void DidOpenForRead(net::IOBuffer* buf,
+ int buf_len,
+ const net::CompletionCallback& callback,
+ int open_result);
+
+ void DidGetFileInfoForGetLength(const net::Int64CompletionCallback& callback,
+ base::File::Error error,
+ const base::File::Info& file_info);
+
+ scoped_refptr<base::TaskRunner> task_runner_;
+ scoped_ptr<net::FileStream> stream_impl_;
+ const base::FilePath file_path_;
+ const int64 initial_offset_;
+ const base::Time expected_modification_time_;
+ bool has_pending_open_;
+ base::WeakPtrFactory<LocalFileStreamReader> weak_factory_;
+};
+
+} // namespace storage
+
+#endif // STORAGE_BROWSER_BLOB_LOCAL_FILE_STREAM_READER_H_