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