FormAssociatedElement.h [plain text]
#pragma once
#include "FormNamedItem.h"
#include "Node.h"
#include <wtf/WeakPtr.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class ContainerNode;
class DOMFormData;
class Document;
class FormAttributeTargetObserver;
class HTMLElement;
class HTMLFormElement;
class ValidityState;
class FormAssociatedElement : public FormNamedItem {
WTF_MAKE_NONCOPYABLE(FormAssociatedElement);
WTF_MAKE_FAST_ALLOCATED;
public:
virtual ~FormAssociatedElement();
void ref() { refFormAssociatedElement(); }
void deref() { derefFormAssociatedElement(); }
static HTMLFormElement* findAssociatedForm(const HTMLElement*, HTMLFormElement*);
WEBCORE_EXPORT HTMLFormElement* form() const;
ValidityState* validity();
virtual bool isFormControlElement() const = 0;
virtual bool isFormControlElementWithState() const;
virtual bool isEnumeratable() const = 0;
virtual const AtomString& name() const;
virtual bool appendFormData(DOMFormData&, bool) { return false; }
void formWillBeDestroyed();
void resetFormOwner();
void formOwnerRemovedFromTree(const Node&);
bool badInput() const { return hasBadInput(); }
bool customError() const;
virtual bool hasBadInput() const;
virtual bool patternMismatch() const;
virtual bool rangeOverflow() const;
virtual bool rangeUnderflow() const;
virtual bool stepMismatch() const;
virtual bool tooShort() const;
virtual bool tooLong() const;
virtual bool typeMismatch() const;
virtual bool valueMissing() const;
virtual String validationMessage() const;
virtual bool isValid() const;
virtual void setCustomValidity(const String&);
void formAttributeTargetChanged();
protected:
FormAssociatedElement(HTMLFormElement*);
void insertedIntoAncestor(Node::InsertionType, ContainerNode&);
void removedFromAncestor(Node::RemovalType, ContainerNode&);
void didMoveToNewDocument(Document& oldDocument);
void clearForm() { setForm(nullptr); }
void setForm(HTMLFormElement*);
void formAttributeChanged();
virtual void willChangeForm();
virtual void didChangeForm();
String customValidationMessage() const;
private:
virtual bool willValidate() const = 0;
virtual void refFormAssociatedElement() = 0;
virtual void derefFormAssociatedElement() = 0;
void resetFormAttributeTargetObserver();
bool isFormAssociatedElement() const final { return true; }
std::unique_ptr<FormAttributeTargetObserver> m_formAttributeTargetObserver;
WeakPtr<HTMLFormElement> m_form;
WeakPtr<HTMLFormElement> m_formSetByParser;
String m_customValidationMessage;
};
}