syncable_file_system_operation.h revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
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;
21class SandboxFileSystemBackend;
22}
23
24namespace sync_file_system {
25
26class SyncableFileOperationRunner;
27
28// A wrapper class of FileSystemOperation for syncable file system.
29class SyncableFileSystemOperation
30    : public NON_EXPORTED_BASE(fileapi::FileSystemOperation),
31      public base::NonThreadSafe {
32 public:
33  virtual ~SyncableFileSystemOperation();
34
35  // fileapi::FileSystemOperation overrides.
36  virtual void CreateFile(const fileapi::FileSystemURL& url,
37                          bool exclusive,
38                          const StatusCallback& callback) OVERRIDE;
39  virtual void CreateDirectory(const fileapi::FileSystemURL& url,
40                               bool exclusive,
41                               bool recursive,
42                               const StatusCallback& callback) OVERRIDE;
43  virtual void Copy(const fileapi::FileSystemURL& src_url,
44                    const fileapi::FileSystemURL& dest_url,
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 StatusCallback& callback) OVERRIDE;
87  virtual void MoveFileLocal(const fileapi::FileSystemURL& src_url,
88                             const fileapi::FileSystemURL& dest_url,
89                             const StatusCallback& callback) OVERRIDE;
90  virtual base::PlatformFileError SyncGetPlatformPath(
91      const fileapi::FileSystemURL& url,
92      base::FilePath* platform_path) OVERRIDE;
93
94 private:
95  typedef SyncableFileSystemOperation self;
96  class QueueableTask;
97
98  // Only SyncFileSystemBackend can create a new operation directly.
99  friend class SyncFileSystemBackend;
100
101  SyncableFileSystemOperation(
102      const fileapi::FileSystemURL& url,
103      fileapi::FileSystemContext* file_system_context,
104      scoped_ptr<fileapi::FileSystemOperationContext> operation_context);
105
106  void DidFinish(base::PlatformFileError status);
107  void DidWrite(const WriteCallback& callback,
108                base::PlatformFileError result,
109                int64 bytes,
110                bool complete);
111
112  void OnCancelled();
113
114  const fileapi::FileSystemURL url_;
115
116  scoped_ptr<fileapi::FileSystemOperation> impl_;
117  base::WeakPtr<SyncableFileOperationRunner> operation_runner_;
118  std::vector<fileapi::FileSystemURL> target_paths_;
119
120  StatusCallback completion_callback_;
121
122  bool is_directory_operation_enabled_;
123
124  base::WeakPtrFactory<SyncableFileSystemOperation> weak_factory_;
125
126  DISALLOW_COPY_AND_ASSIGN(SyncableFileSystemOperation);
127};
128
129}  // namespace sync_file_system
130
131#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_SYSTEM_OPERATION_H_
132