syncable_file_system_operation.h revision 2385ea399aae016c0806a4f9ef3c9cfe3d2a39df
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_impl.h"
16
17namespace fileapi {
18class FileSystemContext;
19class FileSystemOperationContext;
20class SandboxFileSystemBackend;
21}
22
23namespace sync_file_system {
24
25class SyncableFileOperationRunner;
26
27// A wrapper class of FileSystemOperationImpl for syncable file system.
28class SyncableFileSystemOperation
29    : public fileapi::FileSystemOperationImpl,
30      public base::SupportsWeakPtr<SyncableFileSystemOperation>,
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
78  // FileSystemOperationImpl overrides.
79  virtual void CopyInForeignFile(const base::FilePath& src_local_disk_path,
80                                 const fileapi::FileSystemURL& dest_url,
81                                 const StatusCallback& callback) OVERRIDE;
82
83  using base::SupportsWeakPtr<SyncableFileSystemOperation>::AsWeakPtr;
84
85 private:
86  typedef SyncableFileSystemOperation self;
87  class QueueableTask;
88
89  // Only SyncFileSystemBackend can create a new operation directly.
90  friend class SyncFileSystemBackend;
91
92  SyncableFileSystemOperation(
93      const fileapi::FileSystemURL& url,
94      fileapi::FileSystemContext* file_system_context,
95      scoped_ptr<fileapi::FileSystemOperationContext> operation_context);
96  fileapi::FileSystemOperationImpl* NewOperation();
97
98  void DidFinish(base::PlatformFileError status);
99  void DidWrite(const WriteCallback& callback,
100                base::PlatformFileError result,
101                int64 bytes,
102                bool complete);
103
104  void OnCancelled();
105
106  const fileapi::FileSystemURL url_;
107
108  base::WeakPtr<SyncableFileOperationRunner> operation_runner_;
109  scoped_ptr<fileapi::FileSystemOperationImpl> inflight_operation_;
110  std::vector<fileapi::FileSystemURL> target_paths_;
111
112  StatusCallback completion_callback_;
113
114  bool is_directory_operation_enabled_;
115
116  DISALLOW_COPY_AND_ASSIGN(SyncableFileSystemOperation);
117};
118
119}  // namespace sync_file_system
120
121#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_SYSTEM_OPERATION_H_
122