1// Copyright 2014 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 CONTENT_PUBLIC_TEST_ASYNC_FILE_TEST_HELPER_H_
6#define CONTENT_PUBLIC_TEST_ASYNC_FILE_TEST_HELPER_H_
7
8#include "base/basictypes.h"
9#include "storage/browser/fileapi/file_system_operation.h"
10#include "storage/common/fileapi/file_system_types.h"
11#include "storage/common/quota/quota_status_code.h"
12
13namespace storage {
14class QuotaManager;
15}
16
17namespace storage {
18class FileSystemContext;
19class FileSystemURL;
20}
21
22namespace content {
23
24// A helper class to perform async file operations in a synchronous way.
25class AsyncFileTestHelper {
26 public:
27  typedef storage::FileSystemOperation::FileEntryList FileEntryList;
28  typedef storage::FileSystemOperation::CopyProgressCallback
29      CopyProgressCallback;
30
31  static const int64 kDontCheckSize;
32
33  // Performs Copy from |src| to |dest| and returns the status code.
34  static base::File::Error Copy(storage::FileSystemContext* context,
35                                const storage::FileSystemURL& src,
36                                const storage::FileSystemURL& dest);
37
38  // Same as Copy, but this supports |progress_callback|.
39  static base::File::Error CopyWithProgress(
40      storage::FileSystemContext* context,
41      const storage::FileSystemURL& src,
42      const storage::FileSystemURL& dest,
43      const CopyProgressCallback& progress_callback);
44
45  // Performs Move from |src| to |dest| and returns the status code.
46  static base::File::Error Move(storage::FileSystemContext* context,
47                                const storage::FileSystemURL& src,
48                                const storage::FileSystemURL& dest);
49
50  // Removes the given |url|.
51  static base::File::Error Remove(storage::FileSystemContext* context,
52                                  const storage::FileSystemURL& url,
53                                  bool recursive);
54
55  // Performs ReadDirectory on |url|.
56  static base::File::Error ReadDirectory(storage::FileSystemContext* context,
57                                         const storage::FileSystemURL& url,
58                                         FileEntryList* entries);
59
60  // Creates a directory at |url|.
61  static base::File::Error CreateDirectory(storage::FileSystemContext* context,
62                                           const storage::FileSystemURL& url);
63
64  // Creates a file at |url|.
65  static base::File::Error CreateFile(storage::FileSystemContext* context,
66                                      const storage::FileSystemURL& url);
67
68  // Creates a file at |url| and fills with |buf|.
69  static base::File::Error CreateFileWithData(
70      storage::FileSystemContext* context,
71      const storage::FileSystemURL& url,
72      const char* buf,
73      int buf_size);
74
75  // Truncates the file |url| to |size|.
76  static base::File::Error TruncateFile(storage::FileSystemContext* context,
77                                        const storage::FileSystemURL& url,
78                                        size_t size);
79
80  // Retrieves File::Info for |url| and populates |file_info|.
81  static base::File::Error GetMetadata(storage::FileSystemContext* context,
82                                       const storage::FileSystemURL& url,
83                                       base::File::Info* file_info);
84
85  // Retrieves FilePath for |url| and populates |platform_path|.
86  static base::File::Error GetPlatformPath(storage::FileSystemContext* context,
87                                           const storage::FileSystemURL& url,
88                                           base::FilePath* platform_path);
89
90  // Returns true if a file exists at |url| with |size|. If |size| is
91  // kDontCheckSize it doesn't check the file size (but just check its
92  // existence).
93  static bool FileExists(storage::FileSystemContext* context,
94                         const storage::FileSystemURL& url,
95                         int64 size);
96
97  // Returns true if a directory exists at |url|.
98  static bool DirectoryExists(storage::FileSystemContext* context,
99                              const storage::FileSystemURL& url);
100
101  // Returns usage and quota. It's valid to pass NULL to |usage| and/or |quota|.
102  static storage::QuotaStatusCode GetUsageAndQuota(
103      storage::QuotaManager* quota_manager,
104      const GURL& origin,
105      storage::FileSystemType type,
106      int64* usage,
107      int64* quota);
108};
109
110}  // namespace content
111
112#endif  // CONTENT_PUBLIC_TEST_ASYNC_FILE_TEST_HELPER_H_
113