[go: nahoru, domu]

blob: 0f0a8ae939dc07b98641dc489b0bb25febd783c7 [file] [log] [blame]
// Copyright 2017 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.
#ifndef EXTENSIONS_BROWSER_API_FILE_SYSTEM_FILE_SYSTEM_DELEGATE_H_
#define EXTENSIONS_BROWSER_API_FILE_SYSTEM_FILE_SYSTEM_DELEGATE_H_
#include <memory>
#include <string>
#include <vector>
#include "base/callback_forward.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "extensions/common/api/file_system.h"
#include "ui/shell_dialogs/select_file_dialog.h"
class ExtensionFunction;
namespace base {
class FilePath;
} // namespace base
namespace content {
class BrowserContext;
class RenderFrameHost;
class WebContents;
} // namespace content
namespace extensions {
class Extension;
class SavedFilesServiceInterface;
// Delegate class for embedder-specific file system access.
class FileSystemDelegate {
public:
using ErrorCallback = base::OnceCallback<void(const std::string&)>;
using FileSystemCallback =
base::OnceCallback<void(const std::string& id, const std::string& path)>;
using FilesSelectedCallback =
base::OnceCallback<void(const std::vector<base::FilePath>& paths)>;
using VolumeListCallback =
base::OnceCallback<void(const std::vector<api::file_system::Volume>&)>;
enum GrantVolumesMode { kGrantAll, kGrantNone, kGrantPerVolume };
virtual ~FileSystemDelegate() {}
virtual base::FilePath GetDefaultDirectory() = 0;
// Shows a dialog to prompt the user to select files/directories. Returns
// false if the dialog cannot be shown, i.e. there is no valid WebContents.
virtual bool ShowSelectFileDialog(
scoped_refptr<ExtensionFunction> extension_function,
ui::SelectFileDialog::Type type,
const base::FilePath& default_path,
const ui::SelectFileDialog::FileTypeInfo* file_types,
FileSystemDelegate::FilesSelectedCallback files_selected_callback,
base::OnceClosure file_selection_canceled_callback) = 0;
// Confirms (e.g. with a dialog) whether the user wants to open the directory
// for a given app.
virtual void ConfirmSensitiveDirectoryAccess(
bool has_write_permission,
const std::u16string& app_name,
content::WebContents* web_contents,
base::OnceClosure on_accept,
base::OnceClosure on_cancel) = 0;
// Finds a string describing the accept type. Returns 0 if no applicable
// string ID is found.
virtual int GetDescriptionIdForAcceptType(const std::string& accept_type) = 0;
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Checks whether the extension can be granted access.
virtual GrantVolumesMode GetGrantVolumesMode(
content::BrowserContext* browser_context,
content::RenderFrameHost* render_frame_host,
const Extension& extension) = 0;
// Grants or denies an extension's request for access to the named file
// system. May prompt the user for consent.
virtual void RequestFileSystem(content::BrowserContext* browser_context,
scoped_refptr<ExtensionFunction> requester,
const Extension& extension,
std::string volume_id,
bool writable,
FileSystemCallback success_callback,
ErrorCallback error_callback) = 0;
// Immediately calls VolumeListCallback or ErrorCallback.
virtual void GetVolumeList(content::BrowserContext* browser_context,
const Extension& extension,
VolumeListCallback success_callback,
ErrorCallback error_callback) = 0;
#endif
virtual SavedFilesServiceInterface* GetSavedFilesService(
content::BrowserContext* browser_context) = 0;
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_FILE_SYSTEM_FILE_SYSTEM_DELEGATE_H_