#ifndef COMPONENTS_REMOTE_COCOA_APP_SHIM_SELECT_FILE_DIALOG_BRIDGE_H_
#define COMPONENTS_REMOTE_COCOA_APP_SHIM_SELECT_FILE_DIALOG_BRIDGE_H_
#import <Cocoa/Cocoa.h>
#include <memory>
#include <vector>
#include "base/functional/callback.h"
#include "base/memory/weak_ptr.h"
#include "components/remote_cocoa/app_shim/remote_cocoa_app_shim_export.h"
#include "components/remote_cocoa/common/select_file_dialog.mojom.h"
@class ExtensionDropdownHandler;
@class SelectFileDialogDelegate;
namespace remote_cocoa {
class REMOTE_COCOA_APP_SHIM_EXPORT SelectFileDialogBridge
: public mojom::SelectFileDialog {
public:
explicit SelectFileDialogBridge(NSWindow* owning_window);
SelectFileDialogBridge(const SelectFileDialogBridge&) = delete;
SelectFileDialogBridge& operator=(const SelectFileDialogBridge&) = delete;
~SelectFileDialogBridge() override;
void Show(mojom::SelectFileDialogType type,
const std::u16string& title,
const base::FilePath& default_path,
mojom::SelectFileTypeInfoPtr file_types,
int file_type_index,
const base::FilePath::StringType& default_extension,
ShowCallback callback) override;
static NSSavePanel* GetLastCreatedNativePanelForTesting();
private:
class ScopedPreventKeyWindow;
void SetAccessoryView(mojom::SelectFileTypeInfoPtr file_types,
int file_type_index,
const base::FilePath::StringType& default_extension,
bool is_save_panel);
void OnPanelEnded(bool did_cancel);
ShowCallback show_callback_;
mojom::SelectFileDialogType type_;
NSSavePanel* __strong panel_;
NSWindow* __strong owning_window_;
std::unique_ptr<ScopedPreventKeyWindow> scoped_prevent_key_window_;
SelectFileDialogDelegate* __strong delegate_;
ExtensionDropdownHandler* __strong extension_dropdown_handler_;
base::WeakPtrFactory<SelectFileDialogBridge> weak_factory_;
};
}
#endif