blob: 7bbfd433b06e0ba6ae462bf4d69bdb45854e2b49 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// This file provides file system related API functions.
#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_FILE_SYSTEM_H_
#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_FILE_SYSTEM_H_
#include <string>
#include "base/platform_file.h"
#include "chrome/browser/chromeos/drive/file_errors.h"
#include "chrome/browser/chromeos/extensions/file_manager/private_api_base.h"
class GURL;
namespace base {
class FilePath;
}
namespace fileapi {
class FileSystemContext;
}
namespace extensions {
// Implements the chrome.fileBrowserPrivate.requestFileSystem method.
class FileBrowserPrivateRequestFileSystemFunction
: public LoggedAsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.requestFileSystem",
FILEBROWSERPRIVATE_REQUESTFILESYSTEM)
protected:
virtual ~FileBrowserPrivateRequestFileSystemFunction() {}
// AsyncExtensionFunction overrides.
virtual bool RunImpl() OVERRIDE;
private:
void RespondSuccessOnUIThread(const std::string& name,
const GURL& root_url);
void RespondFailedOnUIThread(base::PlatformFileError error_code);
// Called when something goes wrong. Records the error to |error_| per the
// error code and reports that the private API function failed.
void DidFail(base::PlatformFileError error_code);
// Sets up file system access permissions to the extension identified by
// |child_id|.
bool SetupFileSystemAccessPermissions(
scoped_refptr<fileapi::FileSystemContext> file_system_context,
int child_id,
scoped_refptr<const extensions::Extension> extension);
};
// Base class for FileBrowserPrivateAddFileWatchFunction and
// FileBrowserPrivateRemoveFileWatchFunction. Although it's called "FileWatch",
// the class and its sub classes are used only for watching changes in
// directories.
class FileWatchFunctionBase : public LoggedAsyncExtensionFunction {
protected:
virtual ~FileWatchFunctionBase() {}
// Performs a file watch operation (ex. adds or removes a file watch).
virtual void PerformFileWatchOperation(
const base::FilePath& local_path,
const base::FilePath& virtual_path,
const std::string& extension_id) = 0;
// AsyncExtensionFunction overrides.
virtual bool RunImpl() OVERRIDE;
// Calls SendResponse() with |success| converted to base::Value.
void Respond(bool success);
};
// Implements the chrome.fileBrowserPrivate.addFileWatch method.
// Starts watching changes in directories.
class FileBrowserPrivateAddFileWatchFunction : public FileWatchFunctionBase {
public:
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.addFileWatch",
FILEBROWSERPRIVATE_ADDFILEWATCH)
protected:
virtual ~FileBrowserPrivateAddFileWatchFunction() {}
// FileWatchFunctionBase override.
virtual void PerformFileWatchOperation(
const base::FilePath& local_path,
const base::FilePath& virtual_path,
const std::string& extension_id) OVERRIDE;
};
// Implements the chrome.fileBrowserPrivate.removeFileWatch method.
// Stops watching changes in directories.
class FileBrowserPrivateRemoveFileWatchFunction : public FileWatchFunctionBase {
public:
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.removeFileWatch",
FILEBROWSERPRIVATE_REMOVEFILEWATCH)
protected:
virtual ~FileBrowserPrivateRemoveFileWatchFunction() {}
// FileWatchFunctionBase override.
virtual void PerformFileWatchOperation(
const base::FilePath& local_path,
const base::FilePath& virtual_path,
const std::string& extension_id) OVERRIDE;
};
// Implements the chrome.fileBrowserPrivate.getSizeStats method.
class FileBrowserPrivateGetSizeStatsFunction
: public LoggedAsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.getSizeStats",
FILEBROWSERPRIVATE_GETSIZESTATS)
protected:
virtual ~FileBrowserPrivateGetSizeStatsFunction() {}
// AsyncExtensionFunction overrides.
virtual bool RunImpl() OVERRIDE;
private:
void GetDriveAvailableSpaceCallback(drive::FileError error,
int64 bytes_total,
int64 bytes_used);
void GetSizeStatsCallback(const uint64* total_size,
const uint64* remaining_size);
};
// Implements the chrome.fileBrowserPrivate.validatePathNameLength method.
class FileBrowserPrivateValidatePathNameLengthFunction
: public LoggedAsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.validatePathNameLength",
FILEBROWSERPRIVATE_VALIDATEPATHNAMELENGTH)
protected:
virtual ~FileBrowserPrivateValidatePathNameLengthFunction() {}
void OnFilePathLimitRetrieved(size_t current_length, size_t max_length);
// AsyncExtensionFunction overrides.
virtual bool RunImpl() OVERRIDE;
};
// Implements the chrome.fileBrowserPrivate.formatVolume method.
// Formats Volume given its mount path.
class FileBrowserPrivateFormatVolumeFunction
: public LoggedAsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.formatVolume",
FILEBROWSERPRIVATE_FORMATVOLUME)
protected:
virtual ~FileBrowserPrivateFormatVolumeFunction() {}
// AsyncExtensionFunction overrides.
virtual bool RunImpl() OVERRIDE;
};
// Implements the chrome.fileBrowserPrivate.startCopy method.
class FileBrowserPrivateStartCopyFunction
: public LoggedAsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.startCopy",
FILEBROWSERPRIVATE_STARTCOPY)
protected:
virtual ~FileBrowserPrivateStartCopyFunction() {}
// AsyncExtensionFunction overrides.
virtual bool RunImpl() OVERRIDE;
private:
// Part of RunImpl(). Called after Copy() is started on IO thread.
void RunAfterStartCopy(int operation_id);
};
// Implements the chrome.fileBrowserPrivate.cancelCopy method.
class FileBrowserPrivateCancelCopyFunction
: public LoggedAsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.cancelCopy",
FILEBROWSERPRIVATE_CANCELCOPY)
protected:
virtual ~FileBrowserPrivateCancelCopyFunction() {}
// AsyncExtensionFunction overrides.
virtual bool RunImpl() OVERRIDE;
};
} // namespace extensions
#endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_FILE_SYSTEM_H_