| Index: extensions/browser/api/file_system/file_system_delegate.h
|
| diff --git a/chrome/browser/extensions/api/file_system/file_entry_picker.h b/extensions/browser/api/file_system/file_system_delegate.h
|
| similarity index 15%
|
| copy from chrome/browser/extensions/api/file_system/file_entry_picker.h
|
| copy to extensions/browser/api/file_system/file_system_delegate.h
|
| index 43beff093c4e1fcc895b9879ad9d2c261248d3f8..8e83145474fabadec83368b6ab433ad2d2105687 100644
|
| --- a/chrome/browser/extensions/api/file_system/file_entry_picker.h
|
| +++ b/extensions/browser/api/file_system/file_system_delegate.h
|
| @@ -2,67 +2,102 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#ifndef CHROME_BROWSER_EXTENSIONS_API_FILE_SYSTEM_FILE_ENTRY_PICKER_H_
|
| -#define CHROME_BROWSER_EXTENSIONS_API_FILE_SYSTEM_FILE_ENTRY_PICKER_H_
|
| +#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.h"
|
| +#include "base/callback_forward.h"
|
| +#include "base/macros.h"
|
| #include "base/memory/ref_counted.h"
|
| +#include "build/build_config.h"
|
| +#include "extensions/common/api/file_system.h"
|
| #include "ui/shell_dialogs/select_file_dialog.h"
|
|
|
| +class UIThreadExtensionFunction;
|
| +
|
| namespace base {
|
| class FilePath;
|
| } // namespace base
|
|
|
| namespace content {
|
| +class BrowserContext;
|
| +class RenderFrameHost;
|
| class WebContents;
|
| } // namespace content
|
|
|
| namespace extensions {
|
|
|
| -// Shows a dialog to the user to ask for the filename for a file to save or
|
| -// open. Deletes itself once the dialog is closed.
|
| -class FileEntryPicker : public ui::SelectFileDialog::Listener {
|
| +class Extension;
|
| +class SavedFilesServiceInterface;
|
| +
|
| +// Delegate class for embedder-specific file system access.
|
| +class FileSystemDelegate {
|
| public:
|
| + using ErrorCallback = base::Callback<void(const std::string&)>;
|
| + using FileSystemCallback =
|
| + base::Callback<void(const std::string& id, const std::string& path)>;
|
| using FilesSelectedCallback =
|
| base::OnceCallback<void(const std::vector<base::FilePath>& paths)>;
|
| + using VolumeListCallback =
|
| + base::Callback<void(const std::vector<api::file_system::Volume>&)>;
|
| +
|
| + 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<UIThreadExtensionFunction> 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 base::string16& app_name,
|
| + content::WebContents* web_contents,
|
| + const base::Closure& on_accept,
|
| + const base::Closure& 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 defined(OS_CHROMEOS)
|
| + // Checks whether the extension can be granted access.
|
| + virtual bool IsGrantable(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<UIThreadExtensionFunction> requester,
|
| + const Extension& extension,
|
| + std::string volume_id,
|
| + bool writable,
|
| + const FileSystemCallback& success_callback,
|
| + const ErrorCallback& error_callback) = 0;
|
| +
|
| + // Immediately calls VolumeListCallback or ErrorCallback.
|
| + virtual void GetVolumeList(content::BrowserContext* browser_context,
|
| + const VolumeListCallback& success_callback,
|
| + const ErrorCallback& error_callback) = 0;
|
| +#endif
|
|
|
| - // Creates a file picker. After the user picks file(s) or cancels, the
|
| - // relevant callback is called and this object deletes itself.
|
| - // The dialog is modal to the |web_contents|'s window.
|
| - // See SelectFileDialog::SelectFile for the other parameters.
|
| - FileEntryPicker(content::WebContents* web_contents,
|
| - const base::FilePath& suggested_name,
|
| - const ui::SelectFileDialog::FileTypeInfo& file_type_info,
|
| - ui::SelectFileDialog::Type picker_type,
|
| - FilesSelectedCallback files_selected_callback,
|
| - base::OnceClosure file_selection_canceled_callback);
|
| -
|
| - private:
|
| - ~FileEntryPicker() override; // FileEntryPicker deletes itself.
|
| -
|
| - // ui::SelectFileDialog::Listener implementation.
|
| - void FileSelected(const base::FilePath& path,
|
| - int index,
|
| - void* params) override;
|
| - void FileSelectedWithExtraInfo(const ui::SelectedFileInfo& file,
|
| - int index,
|
| - void* params) override;
|
| - void MultiFilesSelected(const std::vector<base::FilePath>& files,
|
| - void* params) override;
|
| - void MultiFilesSelectedWithExtraInfo(
|
| - const std::vector<ui::SelectedFileInfo>& files,
|
| - void* params) override;
|
| - void FileSelectionCanceled(void* params) override;
|
| -
|
| - FilesSelectedCallback files_selected_callback_;
|
| - base::OnceClosure file_selection_canceled_callback_;
|
| - scoped_refptr<ui::SelectFileDialog> select_file_dialog_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(FileEntryPicker);
|
| + virtual SavedFilesServiceInterface* GetSavedFilesService(
|
| + content::BrowserContext* browser_context) = 0;
|
| };
|
|
|
| } // namespace extensions
|
|
|
| -#endif // CHROME_BROWSER_EXTENSIONS_API_FILE_SYSTEM_FILE_ENTRY_PICKER_H_
|
| +#endif // EXTENSIONS_BROWSER_API_FILE_SYSTEM_FILE_SYSTEM_DELEGATE_H_
|
|
|