1// Copyright (c) 2012 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 WEBKIT_BROWSER_FILEAPI_NATIVE_FILE_UTIL_H_
6#define WEBKIT_BROWSER_FILEAPI_NATIVE_FILE_UTIL_H_
7
8#include "base/files/file.h"
9#include "base/files/file_path.h"
10#include "base/files/file_util_proxy.h"
11#include "base/memory/scoped_ptr.h"
12#include "webkit/browser/fileapi/file_system_file_util.h"
13#include "webkit/browser/webkit_storage_browser_export.h"
14
15namespace base {
16class Time;
17}
18
19namespace fileapi {
20
21// A thin wrapper class for accessing the OS native filesystem.
22// This performs common error checks necessary to implement FileUtil family
23// in addition to perform native filesystem operations.
24//
25// For the error checks it performs please see the comment for
26// FileSystemFileUtil interface
27// (webkit/browser/fileapi/file_system_file_util.h).
28//
29// Note that all the methods of this class are static and this does NOT
30// inherit from FileSystemFileUtil.
31class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE NativeFileUtil {
32 public:
33  enum CopyOrMoveMode {
34    COPY_NOSYNC,
35    COPY_SYNC,
36    MOVE
37  };
38  static CopyOrMoveMode CopyOrMoveModeForDestination(
39      const FileSystemURL& dest_url, bool copy);
40
41  static base::File CreateOrOpen(const base::FilePath& path, int file_flags);
42  static base::File::Error EnsureFileExists(const base::FilePath& path,
43                                            bool* created);
44  static base::File::Error CreateDirectory(const base::FilePath& path,
45                                           bool exclusive,
46                                           bool recursive);
47  static base::File::Error GetFileInfo(const base::FilePath& path,
48                                       base::File::Info* file_info);
49  static scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator>
50      CreateFileEnumerator(const base::FilePath& root_path,
51                           bool recursive);
52  static base::File::Error Touch(const base::FilePath& path,
53                                 const base::Time& last_access_time,
54                                 const base::Time& last_modified_time);
55  static base::File::Error Truncate(const base::FilePath& path,
56                                    int64 length);
57  static bool PathExists(const base::FilePath& path);
58  static bool DirectoryExists(const base::FilePath& path);
59  static base::File::Error CopyOrMoveFile(
60      const base::FilePath& src_path,
61      const base::FilePath& dest_path,
62      FileSystemOperation::CopyOrMoveOption option,
63      CopyOrMoveMode mode);
64  static base::File::Error DeleteFile(const base::FilePath& path);
65  static base::File::Error DeleteDirectory(const base::FilePath& path);
66
67 private:
68  DISALLOW_IMPLICIT_CONSTRUCTORS(NativeFileUtil);
69};
70
71}  // namespace fileapi
72
73#endif  // WEBKIT_BROWSER_FILEAPI_NATIVE_FILE_UTIL_H_
74