syncable_file_system_operation.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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                    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