15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CONTENT_PUBLIC_TEST_ASYNC_FILE_TEST_HELPER_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CONTENT_PUBLIC_TEST_ASYNC_FILE_TEST_HELPER_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/basictypes.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_operation.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/fileapi/file_system_types.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/quota/quota_status_code.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class QuotaManager;
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class FileSystemContext;
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class FileSystemURL;
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content {
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// A helper class to perform async file operations in a synchronous way.
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class AsyncFileTestHelper {
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  typedef storage::FileSystemOperation::FileEntryList FileEntryList;
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  typedef storage::FileSystemOperation::CopyProgressCallback
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      CopyProgressCallback;
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static const int64 kDontCheckSize;
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Performs Copy from |src| to |dest| and returns the status code.
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static base::File::Error Copy(storage::FileSystemContext* context,
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                const storage::FileSystemURL& src,
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                const storage::FileSystemURL& dest);
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Same as Copy, but this supports |progress_callback|.
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static base::File::Error CopyWithProgress(
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      storage::FileSystemContext* context,
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const storage::FileSystemURL& src,
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const storage::FileSystemURL& dest,
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const CopyProgressCallback& progress_callback);
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Performs Move from |src| to |dest| and returns the status code.
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static base::File::Error Move(storage::FileSystemContext* context,
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                const storage::FileSystemURL& src,
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                const storage::FileSystemURL& dest);
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Removes the given |url|.
5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static base::File::Error Remove(storage::FileSystemContext* context,
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                  const storage::FileSystemURL& url,
5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                  bool recursive);
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Performs ReadDirectory on |url|.
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static base::File::Error ReadDirectory(storage::FileSystemContext* context,
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                         const storage::FileSystemURL& url,
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         FileEntryList* entries);
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Creates a directory at |url|.
6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static base::File::Error CreateDirectory(storage::FileSystemContext* context,
6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                           const storage::FileSystemURL& url);
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Creates a file at |url|.
6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static base::File::Error CreateFile(storage::FileSystemContext* context,
6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                      const storage::FileSystemURL& url);
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Creates a file at |url| and fills with |buf|.
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static base::File::Error CreateFileWithData(
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      storage::FileSystemContext* context,
7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const storage::FileSystemURL& url,
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const char* buf,
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      int buf_size);
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Truncates the file |url| to |size|.
7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static base::File::Error TruncateFile(storage::FileSystemContext* context,
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                        const storage::FileSystemURL& url,
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                        size_t size);
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Retrieves File::Info for |url| and populates |file_info|.
8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static base::File::Error GetMetadata(storage::FileSystemContext* context,
8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                       const storage::FileSystemURL& url,
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                       base::File::Info* file_info);
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Retrieves FilePath for |url| and populates |platform_path|.
8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static base::File::Error GetPlatformPath(storage::FileSystemContext* context,
8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                           const storage::FileSystemURL& url,
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                           base::FilePath* platform_path);
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Returns true if a file exists at |url| with |size|. If |size| is
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // kDontCheckSize it doesn't check the file size (but just check its
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // existence).
9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static bool FileExists(storage::FileSystemContext* context,
9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                         const storage::FileSystemURL& url,
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         int64 size);
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Returns true if a directory exists at |url|.
9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static bool DirectoryExists(storage::FileSystemContext* context,
9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                              const storage::FileSystemURL& url);
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Returns usage and quota. It's valid to pass NULL to |usage| and/or |quota|.
10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static storage::QuotaStatusCode GetUsageAndQuota(
10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      storage::QuotaManager* quota_manager,
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const GURL& origin,
10503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      storage::FileSystemType type,
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      int64* usage,
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      int64* quota);
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace content
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // CONTENT_PUBLIC_TEST_ASYNC_FILE_TEST_HELPER_H_
113