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