Home | History | Annotate | Download | only in local
      1 // Copyright 2013 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 CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_SYSTEM_OPERATION_H_
      6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_SYSTEM_OPERATION_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/callback.h"
     11 #include "base/memory/ref_counted.h"
     12 #include "base/memory/scoped_ptr.h"
     13 #include "base/memory/weak_ptr.h"
     14 #include "base/threading/non_thread_safe.h"
     15 #include "webkit/browser/fileapi/file_system_operation.h"
     16 #include "webkit/browser/fileapi/file_system_url.h"
     17 
     18 namespace fileapi {
     19 class FileSystemContext;
     20 class FileSystemOperationContext;
     21 }
     22 
     23 namespace sync_file_system {
     24 
     25 class SyncableFileOperationRunner;
     26 
     27 // A wrapper class of FileSystemOperation for syncable file system.
     28 class SyncableFileSystemOperation
     29     : public NON_EXPORTED_BASE(fileapi::FileSystemOperation),
     30       public base::NonThreadSafe {
     31  public:
     32   virtual ~SyncableFileSystemOperation();
     33 
     34   // fileapi::FileSystemOperation overrides.
     35   virtual void CreateFile(const fileapi::FileSystemURL& url,
     36                           bool exclusive,
     37                           const StatusCallback& callback) OVERRIDE;
     38   virtual void CreateDirectory(const fileapi::FileSystemURL& url,
     39                                bool exclusive,
     40                                bool recursive,
     41                                const StatusCallback& callback) OVERRIDE;
     42   virtual void Copy(const fileapi::FileSystemURL& src_url,
     43                     const fileapi::FileSystemURL& dest_url,
     44                     CopyOrMoveOption option,
     45                     const CopyProgressCallback& progress_callback,
     46                     const StatusCallback& callback) OVERRIDE;
     47   virtual void Move(const fileapi::FileSystemURL& src_url,
     48                     const fileapi::FileSystemURL& dest_url,
     49                     CopyOrMoveOption option,
     50                     const StatusCallback& callback) OVERRIDE;
     51   virtual void DirectoryExists(const fileapi::FileSystemURL& url,
     52                                const StatusCallback& callback) OVERRIDE;
     53   virtual void FileExists(const fileapi::FileSystemURL& url,
     54                           const StatusCallback& callback) OVERRIDE;
     55   virtual void GetMetadata(const fileapi::FileSystemURL& url,
     56                            const GetMetadataCallback& callback) OVERRIDE;
     57   virtual void ReadDirectory(const fileapi::FileSystemURL& url,
     58                              const ReadDirectoryCallback& callback) OVERRIDE;
     59   virtual void Remove(const fileapi::FileSystemURL& url, bool recursive,
     60                       const StatusCallback& callback) OVERRIDE;
     61   virtual void Write(const fileapi::FileSystemURL& url,
     62                      scoped_ptr<fileapi::FileWriterDelegate> writer_delegate,
     63                      scoped_ptr<net::URLRequest> blob_request,
     64                      const WriteCallback& callback) OVERRIDE;
     65   virtual void Truncate(const fileapi::FileSystemURL& url, int64 length,
     66                         const StatusCallback& callback) OVERRIDE;
     67   virtual void TouchFile(const fileapi::FileSystemURL& url,
     68                          const base::Time& last_access_time,
     69                          const base::Time& last_modified_time,
     70                          const StatusCallback& callback) OVERRIDE;
     71   virtual void OpenFile(const fileapi::FileSystemURL& url,
     72                         int file_flags,
     73                         const OpenFileCallback& callback) OVERRIDE;
     74   virtual void Cancel(const StatusCallback& cancel_callback) OVERRIDE;
     75   virtual void CreateSnapshotFile(
     76       const fileapi::FileSystemURL& path,
     77       const SnapshotFileCallback& callback) OVERRIDE;
     78   virtual void CopyInForeignFile(const base::FilePath& src_local_disk_path,
     79                                  const fileapi::FileSystemURL& dest_url,
     80                                  const StatusCallback& callback) OVERRIDE;
     81   virtual void RemoveFile(const fileapi::FileSystemURL& url,
     82                           const StatusCallback& callback) OVERRIDE;
     83   virtual void RemoveDirectory(const fileapi::FileSystemURL& url,
     84                                const StatusCallback& callback) OVERRIDE;
     85   virtual void CopyFileLocal(const fileapi::FileSystemURL& src_url,
     86                              const fileapi::FileSystemURL& dest_url,
     87                              CopyOrMoveOption option,
     88                              const CopyFileProgressCallback& progress_callback,
     89                              const StatusCallback& callback) OVERRIDE;
     90   virtual void MoveFileLocal(const fileapi::FileSystemURL& src_url,
     91                              const fileapi::FileSystemURL& dest_url,
     92                              CopyOrMoveOption option,
     93                              const StatusCallback& callback) OVERRIDE;
     94   virtual base::File::Error SyncGetPlatformPath(
     95       const fileapi::FileSystemURL& url,
     96       base::FilePath* platform_path) OVERRIDE;
     97 
     98  private:
     99   typedef SyncableFileSystemOperation self;
    100   class QueueableTask;
    101 
    102   // Only SyncFileSystemBackend can create a new operation directly.
    103   friend class SyncFileSystemBackend;
    104 
    105   SyncableFileSystemOperation(
    106       const fileapi::FileSystemURL& url,
    107       fileapi::FileSystemContext* file_system_context,
    108       scoped_ptr<fileapi::FileSystemOperationContext> operation_context);
    109 
    110   void DidFinish(base::File::Error status);
    111   void DidWrite(const WriteCallback& callback,
    112                 base::File::Error result,
    113                 int64 bytes,
    114                 bool complete);
    115 
    116   void OnCancelled();
    117 
    118   const fileapi::FileSystemURL url_;
    119 
    120   scoped_ptr<fileapi::FileSystemOperation> impl_;
    121   base::WeakPtr<SyncableFileOperationRunner> operation_runner_;
    122   std::vector<fileapi::FileSystemURL> target_paths_;
    123 
    124   StatusCallback completion_callback_;
    125 
    126   bool is_directory_operation_enabled_;
    127 
    128   base::WeakPtrFactory<SyncableFileSystemOperation> weak_factory_;
    129 
    130   DISALLOW_COPY_AND_ASSIGN(SyncableFileSystemOperation);
    131 };
    132 
    133 }  // namespace sync_file_system
    134 
    135 #endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_SYSTEM_OPERATION_H_
    136