#pragma once
#include "BaseClickableWithKeyInputType.h"
#include "FileChooser.h"
#include "FileIconLoader.h"
#include <wtf/RefPtr.h>
namespace WebCore {
class DragData;
class FileList;
class FileListCreator;
class Icon;
class FileInputType final : public BaseClickableWithKeyInputType, private FileChooserClient, private FileIconLoaderClient {
public:
explicit FileInputType(HTMLInputElement&);
virtual ~FileInputType();
static Vector<FileChooserFileInfo> filesFromFormControlState(const FormControlState&);
private:
const AtomicString& formControlType() const final;
FormControlState saveFormControlState() const final;
void restoreFormControlState(const FormControlState&) final;
bool appendFormData(DOMFormData&, bool) const final;
bool valueMissing(const String&) const final;
String valueMissingText() const final;
void handleDOMActivateEvent(Event&) final;
RenderPtr<RenderElement> createInputRenderer(RenderStyle&&) final;
bool canSetStringValue() const final;
FileList* files() final;
void setFiles(RefPtr<FileList>&&) final;
enum class RequestIcon { Yes, No };
void setFiles(RefPtr<FileList>&&, RequestIcon);
String displayString() const final;
bool canSetValue(const String&) final;
bool getTypeSpecificValue(String&) final; void setValue(const String&, bool valueChanged, TextFieldEventBehavior) final;
#if ENABLE(DRAG_SUPPORT)
bool receiveDroppedFiles(const DragData&) final;
#endif
Icon* icon() const final;
bool isFileUpload() const final;
void createShadowSubtree() final;
void disabledStateChanged() final;
void attributeChanged(const QualifiedName&) final;
String defaultToolTip() const final;
void filesChosen(const Vector<FileChooserFileInfo>&, const String& displayString = { }, Icon* = nullptr) final;
void iconLoaded(RefPtr<Icon>&&) final;
void requestIcon(const Vector<String>&);
void applyFileChooserSettings(const FileChooserSettings&);
bool allowsDirectories() const;
RefPtr<FileChooser> m_fileChooser;
std::unique_ptr<FileIconLoader> m_fileIconLoader;
Ref<FileList> m_fileList;
RefPtr<FileListCreator> m_fileListCreator;
RefPtr<Icon> m_icon;
String m_displayString;
};
}