syncable_file_system_operation.h revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
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 18namespace fileapi { 19class FileSystemContext; 20class FileSystemOperationContext; 21} 22 23namespace sync_file_system { 24 25class SyncableFileOperationRunner; 26 27// A wrapper class of FileSystemOperation for syncable file system. 28class 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 const CopyProgressCallback& progress_callback, 45 const StatusCallback& callback) OVERRIDE; 46 virtual void Move(const fileapi::FileSystemURL& src_url, 47 const fileapi::FileSystemURL& dest_url, 48 const StatusCallback& callback) OVERRIDE; 49 virtual void DirectoryExists(const fileapi::FileSystemURL& url, 50 const StatusCallback& callback) OVERRIDE; 51 virtual void FileExists(const fileapi::FileSystemURL& url, 52 const StatusCallback& callback) OVERRIDE; 53 virtual void GetMetadata(const fileapi::FileSystemURL& url, 54 const GetMetadataCallback& callback) OVERRIDE; 55 virtual void ReadDirectory(const fileapi::FileSystemURL& url, 56 const ReadDirectoryCallback& callback) OVERRIDE; 57 virtual void Remove(const fileapi::FileSystemURL& url, bool recursive, 58 const StatusCallback& callback) OVERRIDE; 59 virtual void Write(const fileapi::FileSystemURL& url, 60 scoped_ptr<fileapi::FileWriterDelegate> writer_delegate, 61 scoped_ptr<net::URLRequest> blob_request, 62 const WriteCallback& callback) OVERRIDE; 63 virtual void Truncate(const fileapi::FileSystemURL& url, int64 length, 64 const StatusCallback& callback) OVERRIDE; 65 virtual void TouchFile(const fileapi::FileSystemURL& url, 66 const base::Time& last_access_time, 67 const base::Time& last_modified_time, 68 const StatusCallback& callback) OVERRIDE; 69 virtual void OpenFile(const fileapi::FileSystemURL& url, 70 int file_flags, 71 base::ProcessHandle peer_handle, 72 const OpenFileCallback& callback) OVERRIDE; 73 virtual void Cancel(const StatusCallback& cancel_callback) OVERRIDE; 74 virtual void CreateSnapshotFile( 75 const fileapi::FileSystemURL& path, 76 const SnapshotFileCallback& callback) OVERRIDE; 77 virtual void CopyInForeignFile(const base::FilePath& src_local_disk_path, 78 const fileapi::FileSystemURL& dest_url, 79 const StatusCallback& callback) OVERRIDE; 80 virtual void RemoveFile(const fileapi::FileSystemURL& url, 81 const StatusCallback& callback) OVERRIDE; 82 virtual void RemoveDirectory(const fileapi::FileSystemURL& url, 83 const StatusCallback& callback) OVERRIDE; 84 virtual void CopyFileLocal(const fileapi::FileSystemURL& src_url, 85 const fileapi::FileSystemURL& dest_url, 86 const CopyFileProgressCallback& progress_callback, 87 const StatusCallback& callback) OVERRIDE; 88 virtual void MoveFileLocal(const fileapi::FileSystemURL& src_url, 89 const fileapi::FileSystemURL& dest_url, 90 const StatusCallback& callback) OVERRIDE; 91 virtual base::PlatformFileError SyncGetPlatformPath( 92 const fileapi::FileSystemURL& url, 93 base::FilePath* platform_path) OVERRIDE; 94 95 private: 96 typedef SyncableFileSystemOperation self; 97 class QueueableTask; 98 99 // Only SyncFileSystemBackend can create a new operation directly. 100 friend class SyncFileSystemBackend; 101 102 SyncableFileSystemOperation( 103 const fileapi::FileSystemURL& url, 104 fileapi::FileSystemContext* file_system_context, 105 scoped_ptr<fileapi::FileSystemOperationContext> operation_context); 106 107 void DidFinish(base::PlatformFileError status); 108 void DidWrite(const WriteCallback& callback, 109 base::PlatformFileError result, 110 int64 bytes, 111 bool complete); 112 113 void OnCancelled(); 114 115 const fileapi::FileSystemURL url_; 116 117 scoped_ptr<fileapi::FileSystemOperation> impl_; 118 base::WeakPtr<SyncableFileOperationRunner> operation_runner_; 119 std::vector<fileapi::FileSystemURL> target_paths_; 120 121 StatusCallback completion_callback_; 122 123 bool is_directory_operation_enabled_; 124 125 base::WeakPtrFactory<SyncableFileSystemOperation> weak_factory_; 126 127 DISALLOW_COPY_AND_ASSIGN(SyncableFileSystemOperation); 128}; 129 130} // namespace sync_file_system 131 132#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_SYSTEM_OPERATION_H_ 133