1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// The file contains utility functions to implement chrome.fileSystem API for
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// file paths that do not directly map to host machine's file system path, such
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// as Google Drive or virtual volumes provided by fileSystemProvider extensions.
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_FILE_MANAGER_FILESYSTEM_API_UTIL_H_
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_FILE_MANAGER_FILESYSTEM_API_UTIL_H_
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <string>
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <vector>
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/callback_forward.h"
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Profile;
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace base {
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class FilePath;
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace base
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass FileSystemURL;
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace storage
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace file_manager {
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace util {
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Checks whether the given |path| points to a non-local filesystem that
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// requires special handling.
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool IsUnderNonNativeLocalPath(Profile* profile, const base::FilePath& path);
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Returns the mime type of the file pointed by |path|, and asynchronously sends
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// the result to |callback|.
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void GetNonNativeLocalPathMimeType(
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    Profile* profile,
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const base::FilePath& path,
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const base::Callback<void(bool, const std::string&)>& callback);
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Checks whether the |path| points to a directory, and asynchronously sends
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// the result to |callback|.
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void IsNonNativeLocalPathDirectory(
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    Profile* profile,
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const base::FilePath& path,
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const base::Callback<void(bool)>& callback);
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Ensures a file exists at |path|, i.e., it does nothing if a file is already
4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// present, or creates a file there if it isn't, and asynchronously sends to
5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// |callback| whether it succeeded.
5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void PrepareNonNativeLocalFileForWritableApp(
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    Profile* profile,
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const base::FilePath& path,
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const base::Callback<void(bool)>& callback);
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace util
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace file_manager
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_FILE_MANAGER_FILESYSTEM_API_UTIL_H_
60