Home | History | Annotate | Download | only in fileapi
      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 
      5 #ifndef WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_FILE_STREAM_READER_H_
      6 #define WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_FILE_STREAM_READER_H_
      7 
      8 #include "base/bind.h"
      9 #include "base/memory/ref_counted.h"
     10 #include "base/platform_file.h"
     11 #include "base/time/time.h"
     12 #include "webkit/browser/blob/file_stream_reader.h"
     13 #include "webkit/browser/fileapi/file_system_url.h"
     14 #include "webkit/browser/webkit_storage_browser_export.h"
     15 #include "webkit/common/blob/shareable_file_reference.h"
     16 
     17 namespace base {
     18 class FilePath;
     19 class SequencedTaskRunner;
     20 }
     21 
     22 namespace fileapi {
     23 
     24 class FileSystemContext;
     25 
     26 // Generic FileStreamReader implementation for FileSystem files.
     27 // Note: This generic implementation would work for any filesystems but
     28 // remote filesystem should implement its own reader rather than relying
     29 // on FileSystemOperation::GetSnapshotFile() which may force downloading
     30 // the entire contents for remote files.
     31 class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE FileSystemFileStreamReader
     32     : public NON_EXPORTED_BASE(webkit_blob::FileStreamReader) {
     33  public:
     34   virtual ~FileSystemFileStreamReader();
     35 
     36   // FileStreamReader overrides.
     37   virtual int Read(net::IOBuffer* buf, int buf_len,
     38                    const net::CompletionCallback& callback) OVERRIDE;
     39   virtual int64 GetLength(
     40       const net::Int64CompletionCallback& callback) OVERRIDE;
     41 
     42  private:
     43   friend class webkit_blob::FileStreamReader;
     44   friend class FileSystemFileStreamReaderTest;
     45 
     46   FileSystemFileStreamReader(FileSystemContext* file_system_context,
     47                              const FileSystemURL& url,
     48                              int64 initial_offset,
     49                              const base::Time& expected_modification_time);
     50 
     51   int CreateSnapshot(const base::Closure& callback,
     52                      const net::CompletionCallback& error_callback);
     53   void DidCreateSnapshot(
     54       const base::Closure& callback,
     55       const net::CompletionCallback& error_callback,
     56       base::PlatformFileError file_error,
     57       const base::PlatformFileInfo& file_info,
     58       const base::FilePath& platform_path,
     59       const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref);
     60 
     61   scoped_refptr<FileSystemContext> file_system_context_;
     62   FileSystemURL url_;
     63   const int64 initial_offset_;
     64   const base::Time expected_modification_time_;
     65   scoped_ptr<webkit_blob::FileStreamReader> local_file_reader_;
     66   scoped_refptr<webkit_blob::ShareableFileReference> snapshot_ref_;
     67   bool has_pending_create_snapshot_;
     68   base::WeakPtrFactory<FileSystemFileStreamReader> weak_factory_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(FileSystemFileStreamReader);
     71 };
     72 
     73 }  // namespace fileapi
     74 
     75 #endif  // WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_FILE_STREAM_READER_H_
     76