// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// This file provides miscellaneous API functions, which don't belong to
// other files.
#ifndef CHROME_BROWSER_ASH_EXTENSIONS_FILE_MANAGER_PRIVATE_API_MISC_H_
#define CHROME_BROWSER_ASH_EXTENSIONS_FILE_MANAGER_PRIVATE_API_MISC_H_
#include <memory>
#include <string>
#include <vector>
#include "base/files/file.h"
#include "base/files/file_path.h"
#include "chrome/browser/ash/extensions/file_manager/logged_extension_function.h"
#include "chrome/browser/ash/file_system_provider/provided_file_system_interface.h"
#include "chrome/common/extensions/api/file_manager_private.h"
#include "storage/browser/file_system/file_system_url.h"
namespace ash {
class RecentFile;
}
namespace crostini {
enum class CrostiniResult;
struct LinuxPackageInfo;
} // namespace crostini
namespace file_manager::util {
struct EntryDefinition;
using EntryDefinitionList = std::vector<EntryDefinition>;
} // namespace file_manager::util
namespace extensions {
// Implements the chrome.fileManagerPrivate.getPreferences method.
// Gets settings for the Files app.
class FileManagerPrivateGetPreferencesFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.getPreferences",
FILEMANAGERPRIVATE_GETPREFERENCES)
protected:
~FileManagerPrivateGetPreferencesFunction() override = default;
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.setPreferences method.
// Sets settings for the Files app.
class FileManagerPrivateSetPreferencesFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.setPreferences",
FILEMANAGERPRIVATE_SETPREFERENCES)
protected:
~FileManagerPrivateSetPreferencesFunction() override = default;
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.zoom method.
// Changes the zoom level of the file manager by modifying the zoom level of the
// WebContents.
// TODO(hirono): Remove this function once the zoom level change is supported
// for all apps. crbug.com/227175.
class FileManagerPrivateZoomFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.zoom", FILEMANAGERPRIVATE_ZOOM)
protected:
~FileManagerPrivateZoomFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
};
class FileManagerPrivateGetProfilesFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.getProfiles",
FILEMANAGERPRIVATE_GETPROFILES)
protected:
~FileManagerPrivateGetProfilesFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.openInspector method.
class FileManagerPrivateOpenInspectorFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.openInspector",
FILEMANAGERPRIVATE_OPENINSPECTOR)
protected:
~FileManagerPrivateOpenInspectorFunction() override = default;
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.openSettingsSubpage method.
class FileManagerPrivateOpenSettingsSubpageFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.openSettingsSubpage",
FILEMANAGERPRIVATE_OPENSETTINGSSUBPAGE)
protected:
~FileManagerPrivateOpenSettingsSubpageFunction() override = default;
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.getMimeType method.
class FileManagerPrivateGetMimeTypeFunction : public LoggedExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.getMimeType",
FILEMANAGERPRIVATEINTERNAL_GETMIMETYPE)
FileManagerPrivateGetMimeTypeFunction();
protected:
~FileManagerPrivateGetMimeTypeFunction() override;
// ExtensionFunction overrides.
ResponseAction Run() override;
void OnGetMimeType(const std::string& mimeType);
};
// Implements the chrome.fileManagerPrivate.getProviders method.
class FileManagerPrivateGetProvidersFunction : public ExtensionFunction {
public:
FileManagerPrivateGetProvidersFunction();
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.getProviders",
FILEMANAGERPRIVATE_GETPROVIDERS)
FileManagerPrivateGetProvidersFunction(
const FileManagerPrivateGetProvidersFunction&) = delete;
FileManagerPrivateGetProvidersFunction& operator=(
const FileManagerPrivateGetProvidersFunction&) = delete;
protected:
~FileManagerPrivateGetProvidersFunction() override = default;
private:
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.addProvidedFileSystem method.
class FileManagerPrivateAddProvidedFileSystemFunction
: public ExtensionFunction {
public:
FileManagerPrivateAddProvidedFileSystemFunction();
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.addProvidedFileSystem",
FILEMANAGERPRIVATE_ADDPROVIDEDFILESYSTEM)
FileManagerPrivateAddProvidedFileSystemFunction(
const FileManagerPrivateAddProvidedFileSystemFunction&) = delete;
FileManagerPrivateAddProvidedFileSystemFunction& operator=(
const FileManagerPrivateAddProvidedFileSystemFunction&) = delete;
protected:
~FileManagerPrivateAddProvidedFileSystemFunction() override = default;
private:
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.configureVolume method.
class FileManagerPrivateConfigureVolumeFunction
: public LoggedExtensionFunction {
public:
FileManagerPrivateConfigureVolumeFunction();
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.configureVolume",
FILEMANAGERPRIVATE_CONFIGUREVOLUME)
FileManagerPrivateConfigureVolumeFunction(
const FileManagerPrivateConfigureVolumeFunction&) = delete;
FileManagerPrivateConfigureVolumeFunction& operator=(
const FileManagerPrivateConfigureVolumeFunction&) = delete;
protected:
~FileManagerPrivateConfigureVolumeFunction() override = default;
private:
ResponseAction Run() override;
void OnCompleted(base::File::Error result);
};
// Implements the chrome.fileManagerPrivate.mountCrostini method.
// Starts and mounts crostini container.
class FileManagerPrivateMountCrostiniFunction : public LoggedExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.mountCrostini",
FILEMANAGERPRIVATE_MOUNTCROSTINI)
FileManagerPrivateMountCrostiniFunction();
FileManagerPrivateMountCrostiniFunction(
const FileManagerPrivateMountCrostiniFunction&) = delete;
FileManagerPrivateMountCrostiniFunction& operator=(
const FileManagerPrivateMountCrostiniFunction&) = delete;
protected:
~FileManagerPrivateMountCrostiniFunction() override;
ResponseAction Run() override;
void RestartCallback(crostini::CrostiniResult);
void MountCallback(crostini::CrostiniResult);
};
// Implements the chrome.fileManagerPrivate.importCrostiniImage method.
// Starts importing the crostini .tini image.
class FileManagerPrivateInternalImportCrostiniImageFunction
: public LoggedExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivateInternal.importCrostiniImage",
FILEMANAGERPRIVATEINTERNAL_IMPORTCROSTINIIMAGE)
FileManagerPrivateInternalImportCrostiniImageFunction();
FileManagerPrivateInternalImportCrostiniImageFunction(
const FileManagerPrivateInternalImportCrostiniImageFunction&) = delete;
FileManagerPrivateInternalImportCrostiniImageFunction& operator=(
const FileManagerPrivateInternalImportCrostiniImageFunction&) = delete;
protected:
~FileManagerPrivateInternalImportCrostiniImageFunction() override;
private:
ResponseAction Run() override;
std::string image_path_;
};
// Implements the chrome.fileManagerPrivate.sharePathsWithCrostini
// method. Shares specified paths.
class FileManagerPrivateInternalSharePathsWithCrostiniFunction
: public LoggedExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION(
"fileManagerPrivateInternal.sharePathsWithCrostini",
FILEMANAGERPRIVATEINTERNAL_SHAREPATHSWITHCROSTINI)
FileManagerPrivateInternalSharePathsWithCrostiniFunction() = default;
FileManagerPrivateInternalSharePathsWithCrostiniFunction(
const FileManagerPrivateInternalSharePathsWithCrostiniFunction&) = delete;
FileManagerPrivateInternalSharePathsWithCrostiniFunction& operator=(
const FileManagerPrivateInternalSharePathsWithCrostiniFunction&) = delete;
protected:
~FileManagerPrivateInternalSharePathsWithCrostiniFunction() override =
default;
private:
ResponseAction Run() override;
void SharePathsCallback(bool success, const std::string& failure_reason);
};
// Implements the chrome.fileManagerPrivate.unsharePathWithCrostini
// method. Unshares specified path.
class FileManagerPrivateInternalUnsharePathWithCrostiniFunction
: public LoggedExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION(
"fileManagerPrivateInternal.unsharePathWithCrostini",
FILEMANAGERPRIVATEINTERNAL_UNSHAREPATHWITHCROSTINI)
FileManagerPrivateInternalUnsharePathWithCrostiniFunction() = default;
FileManagerPrivateInternalUnsharePathWithCrostiniFunction(
const FileManagerPrivateInternalUnsharePathWithCrostiniFunction&) =
delete;
FileManagerPrivateInternalUnsharePathWithCrostiniFunction& operator=(
const FileManagerPrivateInternalUnsharePathWithCrostiniFunction&) =
delete;
protected:
~FileManagerPrivateInternalUnsharePathWithCrostiniFunction() override =
default;
private:
ResponseAction Run() override;
void UnsharePathCallback(bool success, const std::string& failure_reason);
};
// Implements the chrome.fileManagerPrivate.getCrostiniSharedPaths
// method. Returns list of file entries.
class FileManagerPrivateInternalGetCrostiniSharedPathsFunction
: public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION(
"fileManagerPrivateInternal.getCrostiniSharedPaths",
FILEMANAGERPRIVATEINTERNAL_GETCROSTINISHAREDPATHS)
FileManagerPrivateInternalGetCrostiniSharedPathsFunction() = default;
FileManagerPrivateInternalGetCrostiniSharedPathsFunction(
const FileManagerPrivateInternalGetCrostiniSharedPathsFunction&) = delete;
FileManagerPrivateInternalGetCrostiniSharedPathsFunction operator=(
const FileManagerPrivateInternalGetCrostiniSharedPathsFunction&) = delete;
protected:
~FileManagerPrivateInternalGetCrostiniSharedPathsFunction() override =
default;
private:
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.getLinuxPackageInfo method.
// Retrieves information about a Linux package.
class FileManagerPrivateInternalGetLinuxPackageInfoFunction
: public LoggedExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivateInternal.getLinuxPackageInfo",
FILEMANAGERPRIVATEINTERNAL_GETLINUXPACKAGEINFO)
FileManagerPrivateInternalGetLinuxPackageInfoFunction() = default;
FileManagerPrivateInternalGetLinuxPackageInfoFunction(
const FileManagerPrivateInternalGetLinuxPackageInfoFunction&) = delete;
FileManagerPrivateInternalGetLinuxPackageInfoFunction operator=(
const FileManagerPrivateInternalGetLinuxPackageInfoFunction&) = delete;
protected:
~FileManagerPrivateInternalGetLinuxPackageInfoFunction() override = default;
private:
ResponseAction Run() override;
void OnGetLinuxPackageInfo(
const crostini::LinuxPackageInfo& linux_package_info);
};
// Implements the chrome.fileManagerPrivate.installLinuxPackage method.
// Starts installation of a Linux package.
class FileManagerPrivateInternalInstallLinuxPackageFunction
: public LoggedExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivateInternal.installLinuxPackage",
FILEMANAGERPRIVATEINTERNAL_INSTALLLINUXPACKAGE)
FileManagerPrivateInternalInstallLinuxPackageFunction() = default;
FileManagerPrivateInternalInstallLinuxPackageFunction(
const FileManagerPrivateInternalInstallLinuxPackageFunction&) = delete;
FileManagerPrivateInternalInstallLinuxPackageFunction operator=(
const FileManagerPrivateInternalInstallLinuxPackageFunction&) = delete;
protected:
~FileManagerPrivateInternalInstallLinuxPackageFunction() override = default;
private:
ResponseAction Run() override;
void OnInstallLinuxPackage(crostini::CrostiniResult result);
};
// Implements the chrome.fileManagerPrivate.getCustomActions method.
class FileManagerPrivateInternalGetCustomActionsFunction
: public LoggedExtensionFunction {
public:
FileManagerPrivateInternalGetCustomActionsFunction();
DECLARE_EXTENSION_FUNCTION("fileManagerPrivateInternal.getCustomActions",
FILEMANAGERPRIVATEINTERNAL_GETCUSTOMACTIONS)
FileManagerPrivateInternalGetCustomActionsFunction(
const FileManagerPrivateInternalGetCustomActionsFunction&) = delete;
FileManagerPrivateInternalGetCustomActionsFunction operator=(
const FileManagerPrivateInternalGetCustomActionsFunction&) = delete;
protected:
~FileManagerPrivateInternalGetCustomActionsFunction() override = default;
private:
ResponseAction Run() override;
void OnCompleted(const ash::file_system_provider::Actions& actions,
base::File::Error result);
};
// Implements the chrome.fileManagerPrivate.executeCustomAction method.
class FileManagerPrivateInternalExecuteCustomActionFunction
: public LoggedExtensionFunction {
public:
FileManagerPrivateInternalExecuteCustomActionFunction();
DECLARE_EXTENSION_FUNCTION("fileManagerPrivateInternal.executeCustomAction",
FILEMANAGERPRIVATEINTERNAL_EXECUTECUSTOMACTION)
FileManagerPrivateInternalExecuteCustomActionFunction(
const FileManagerPrivateInternalExecuteCustomActionFunction&) = delete;
FileManagerPrivateInternalExecuteCustomActionFunction operator=(
const FileManagerPrivateInternalExecuteCustomActionFunction&) = delete;
protected:
~FileManagerPrivateInternalExecuteCustomActionFunction() override = default;
private:
ResponseAction Run() override;
void OnCompleted(base::File::Error result);
};
// Implements the chrome.fileManagerPrivateInternal.getRecentFiles method.
class FileManagerPrivateInternalGetRecentFilesFunction
: public LoggedExtensionFunction {
public:
FileManagerPrivateInternalGetRecentFilesFunction();
DECLARE_EXTENSION_FUNCTION("fileManagerPrivateInternal.getRecentFiles",
FILEMANAGERPRIVATE_GETRECENTFILES)
FileManagerPrivateInternalGetRecentFilesFunction(
const FileManagerPrivateInternalGetRecentFilesFunction&) = delete;
FileManagerPrivateInternalGetRecentFilesFunction& operator=(
FileManagerPrivateInternalGetRecentFilesFunction&) = delete;
protected:
~FileManagerPrivateInternalGetRecentFilesFunction() override = default;
private:
ResponseAction Run() override;
void OnGetRecentFiles(
api::file_manager_private::SourceRestriction restriction,
const std::vector<ash::RecentFile>& files);
void OnConvertFileDefinitionListToEntryDefinitionList(
std::unique_ptr<file_manager::util::EntryDefinitionList>
entry_definition_list);
};
// Implements the chrome.fileManagerPrivate.isTabletModeEnabled method.
class FileManagerPrivateIsTabletModeEnabledFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.isTabletModeEnabled",
FILEMANAGERPRIVATE_ISTABLETMODEENABLED)
protected:
~FileManagerPrivateIsTabletModeEnabledFunction() override = default;
private:
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.openURL method.
class FileManagerPrivateOpenURLFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.openURL",
FILEMANAGERPRIVATE_OPENURL)
protected:
~FileManagerPrivateOpenURLFunction() override = default;
private:
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.openWindow method.
class FileManagerPrivateOpenWindowFunction : public LoggedExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.openWindow",
FILEMANAGERPRIVATE_OPENWINDOW)
protected:
~FileManagerPrivateOpenWindowFunction() override = default;
private:
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.sendFeedback method.
class FileManagerPrivateSendFeedbackFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.sendFeedback",
FILEMANAGERPRIVATE_SENDFEEDBACK)
protected:
~FileManagerPrivateSendFeedbackFunction() override = default;
private:
ResponseAction Run() override;
};
// Implements the chrome.fileManagerPrivate.getDeviceConnectionState method.
class FileManagerPrivateGetDeviceConnectionStateFunction
: public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.getDeviceConnectionState",
FILEMANAGERPRIVATE_GETDEVICECONNECTIONSTATE)
protected:
~FileManagerPrivateGetDeviceConnectionStateFunction() override = default;
ResponseAction Run() override;
};
} // namespace extensions
#endif // CHROME_BROWSER_ASH_EXTENSIONS_FILE_MANAGER_PRIVATE_API_MISC_H_