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_CHROMEOS_DRIVE_ASYNC_FILE_UTIL_H_
6#define CHROME_BROWSER_CHROMEOS_DRIVE_ASYNC_FILE_UTIL_H_
7
8#include "base/basictypes.h"
9#include "base/callback.h"
10#include "webkit/browser/fileapi/async_file_util.h"
11
12namespace drive {
13
14class FileSystemInterface;
15
16namespace internal {
17
18// The implementation of fileapi::AsyncFileUtil for Drive File System.
19class AsyncFileUtil : public fileapi::AsyncFileUtil {
20 public:
21  // Callback to return the FileSystemInterface instance. This is an
22  // injecting point for testing.
23  // Note that the callback will be copied between threads (IO and UI), and
24  // will be called on UI thread.
25  typedef base::Callback<FileSystemInterface*()> FileSystemGetter;
26
27  explicit AsyncFileUtil(const FileSystemGetter& file_system_getter);
28  virtual ~AsyncFileUtil();
29
30  // fileapi::AsyncFileUtil overrides.
31  virtual void CreateOrOpen(
32      scoped_ptr<fileapi::FileSystemOperationContext> context,
33      const fileapi::FileSystemURL& url,
34      int file_flags,
35      const CreateOrOpenCallback& callback) OVERRIDE;
36  virtual void EnsureFileExists(
37      scoped_ptr<fileapi::FileSystemOperationContext> context,
38      const fileapi::FileSystemURL& url,
39      const EnsureFileExistsCallback& callback) OVERRIDE;
40  virtual void CreateDirectory(
41      scoped_ptr<fileapi::FileSystemOperationContext> context,
42      const fileapi::FileSystemURL& url,
43      bool exclusive,
44      bool recursive,
45      const StatusCallback& callback) OVERRIDE;
46  virtual void GetFileInfo(
47      scoped_ptr<fileapi::FileSystemOperationContext> context,
48      const fileapi::FileSystemURL& url,
49      const GetFileInfoCallback& callback) OVERRIDE;
50  virtual void ReadDirectory(
51      scoped_ptr<fileapi::FileSystemOperationContext> context,
52      const fileapi::FileSystemURL& url,
53      const ReadDirectoryCallback& callback) OVERRIDE;
54  virtual void Touch(
55      scoped_ptr<fileapi::FileSystemOperationContext> context,
56      const fileapi::FileSystemURL& url,
57      const base::Time& last_access_time,
58      const base::Time& last_modified_time,
59      const StatusCallback& callback) OVERRIDE;
60  virtual void Truncate(
61      scoped_ptr<fileapi::FileSystemOperationContext> context,
62      const fileapi::FileSystemURL& url,
63      int64 length,
64      const StatusCallback& callback) OVERRIDE;
65  virtual void CopyFileLocal(
66      scoped_ptr<fileapi::FileSystemOperationContext> context,
67      const fileapi::FileSystemURL& src_url,
68      const fileapi::FileSystemURL& dest_url,
69      CopyOrMoveOption option,
70      const CopyFileProgressCallback& progress_callback,
71      const StatusCallback& callback) OVERRIDE;
72  virtual void MoveFileLocal(
73      scoped_ptr<fileapi::FileSystemOperationContext> context,
74      const fileapi::FileSystemURL& src_url,
75      const fileapi::FileSystemURL& dest_url,
76      CopyOrMoveOption option,
77      const StatusCallback& callback) OVERRIDE;
78  virtual void CopyInForeignFile(
79      scoped_ptr<fileapi::FileSystemOperationContext> context,
80      const base::FilePath& src_file_path,
81      const fileapi::FileSystemURL& dest_url,
82      const StatusCallback& callback) OVERRIDE;
83  virtual void DeleteFile(
84      scoped_ptr<fileapi::FileSystemOperationContext> context,
85      const fileapi::FileSystemURL& url,
86      const StatusCallback& callback) OVERRIDE;
87  virtual void DeleteDirectory(
88      scoped_ptr<fileapi::FileSystemOperationContext> context,
89      const fileapi::FileSystemURL& url,
90      const StatusCallback& callback) OVERRIDE;
91  virtual void DeleteRecursively(
92      scoped_ptr<fileapi::FileSystemOperationContext> context,
93      const fileapi::FileSystemURL& url,
94      const StatusCallback& callback) OVERRIDE;
95  virtual void CreateSnapshotFile(
96      scoped_ptr<fileapi::FileSystemOperationContext> context,
97      const fileapi::FileSystemURL& url,
98      const CreateSnapshotFileCallback& callback) OVERRIDE;
99
100 private:
101  FileSystemGetter file_system_getter_;
102
103  DISALLOW_COPY_AND_ASSIGN(AsyncFileUtil);
104};
105
106}  // namespace internal
107}  // namespace drive
108
109#endif  // CHROME_BROWSER_CHROMEOS_DRIVE_ASYNC_FILE_UTIL_H_
110