local_file_stream_reader.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef STORAGE_BROWSER_FILE_SYSTEM_LOCAL_FILE_STREAM_READER_H_
  5. #define STORAGE_BROWSER_FILE_SYSTEM_LOCAL_FILE_STREAM_READER_H_
  6. #include <stdint.h>
  7. #include <memory>
  8. #include "base/compiler_specific.h"
  9. #include "base/component_export.h"
  10. #include "base/files/file.h"
  11. #include "base/files/file_path.h"
  12. #include "base/memory/weak_ptr.h"
  13. #include "base/time/time.h"
  14. #include "net/base/completion_once_callback.h"
  15. #include "storage/browser/file_system/file_stream_reader.h"
  16. namespace base {
  17. class TaskRunner;
  18. }
  19. namespace net {
  20. class FileStream;
  21. }
  22. namespace storage {
  23. // A thin wrapper of net::FileStream with range support for sliced file
  24. // handling.
  25. class COMPONENT_EXPORT(STORAGE_BROWSER) LocalFileStreamReader
  26. : public FileStreamReader {
  27. public:
  28. ~LocalFileStreamReader() override;
  29. // FileStreamReader overrides.
  30. int Read(net::IOBuffer* buf,
  31. int buf_len,
  32. net::CompletionOnceCallback callback) override;
  33. int64_t GetLength(net::Int64CompletionOnceCallback callback) override;
  34. private:
  35. friend class FileStreamReader;
  36. friend class LocalFileStreamReaderTest;
  37. LocalFileStreamReader(scoped_refptr<base::TaskRunner> task_runner,
  38. const base::FilePath& file_path,
  39. int64_t initial_offset,
  40. const base::Time& expected_modification_time);
  41. void Open(net::CompletionOnceCallback callback);
  42. // Callbacks that are chained from Open for Read.
  43. void DidVerifyForOpen(net::CompletionOnceCallback callback,
  44. int64_t get_length_result);
  45. void DidOpenFileStream(int result);
  46. void DidSeekFileStream(int64_t seek_result);
  47. void DidOpenForRead(net::IOBuffer* buf,
  48. int buf_len,
  49. net::CompletionOnceCallback callback,
  50. int open_result);
  51. void OnRead(int read_result);
  52. void DidGetFileInfoForGetLength(net::Int64CompletionOnceCallback callback,
  53. base::FileErrorOr<base::File::Info> result);
  54. net::CompletionOnceCallback callback_;
  55. scoped_refptr<base::TaskRunner> task_runner_;
  56. std::unique_ptr<net::FileStream> stream_impl_;
  57. const base::FilePath file_path_;
  58. const int64_t initial_offset_;
  59. const base::Time expected_modification_time_;
  60. bool has_pending_open_ = false;
  61. base::WeakPtrFactory<LocalFileStreamReader> weak_factory_{this};
  62. };
  63. } // namespace storage
  64. #endif // STORAGE_BROWSER_FILE_SYSTEM_LOCAL_FILE_STREAM_READER_H_