summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/HTMLInputElement.h
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-05-30 12:48:17 +0200
committerOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-05-30 12:48:17 +0200
commit881da28418d380042aa95a97f0cbd42560a64f7c (patch)
treea794dff3274695e99c651902dde93d934ea7a5af /Source/WebCore/html/HTMLInputElement.h
parent7e104c57a70fdf551bb3d22a5d637cdcbc69dbea (diff)
parent0fcedcd17cc00d3dd44c718b3cb36c1033319671 (diff)
downloadqtwebkit-881da28418d380042aa95a97f0cbd42560a64f7c.tar.gz
Merge 'wip/next' into dev
Change-Id: Iff9ee5e23bb326c4371ec8ed81d56f2f05d680e9
Diffstat (limited to 'Source/WebCore/html/HTMLInputElement.h')
-rw-r--r--Source/WebCore/html/HTMLInputElement.h312
1 files changed, 155 insertions, 157 deletions
diff --git a/Source/WebCore/html/HTMLInputElement.h b/Source/WebCore/html/HTMLInputElement.h
index 2271dd956..747fe1082 100644
--- a/Source/WebCore/html/HTMLInputElement.h
+++ b/Source/WebCore/html/HTMLInputElement.h
@@ -28,6 +28,11 @@
#include "FileChooser.h"
#include "HTMLTextFormControlElement.h"
#include "StepRange.h"
+#include <memory>
+
+#if PLATFORM(IOS)
+#include "DateComponents.h"
+#endif
namespace WebCore {
@@ -39,31 +44,40 @@ class HTMLImageLoader;
class HTMLOptionElement;
class Icon;
class InputType;
-class KURL;
class ListAttributeTargetObserver;
+class TextControlInnerTextElement;
+class URL;
struct DateTimeChooserParameters;
+struct InputElementClickState {
+ InputElementClickState()
+ : stateful(false)
+ , checked(false)
+ , indeterminate(false)
+ { }
+ bool stateful;
+ bool checked;
+ bool indeterminate;
+ RefPtr<HTMLInputElement> checkedRadioButton;
+};
+
class HTMLInputElement : public HTMLTextFormControlElement {
public:
- static PassRefPtr<HTMLInputElement> create(const QualifiedName&, Document*, HTMLFormElement*, bool createdByParser);
+ static Ref<HTMLInputElement> create(const QualifiedName&, Document&, HTMLFormElement*, bool createdByParser);
virtual ~HTMLInputElement();
- DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitspeechchange);
-
- virtual HTMLInputElement* toInputElement() { return this; }
-
- virtual bool shouldAutocomplete() const;
+ WEBCORE_EXPORT virtual bool shouldAutocomplete() const override final;
// For ValidityState
- virtual bool hasBadInput() const OVERRIDE;
- virtual bool patternMismatch() const OVERRIDE;
- virtual bool rangeUnderflow() const OVERRIDE;
- virtual bool rangeOverflow() const;
- virtual bool stepMismatch() const OVERRIDE;
- virtual bool tooLong() const OVERRIDE;
- virtual bool typeMismatch() const OVERRIDE;
- virtual bool valueMissing() const OVERRIDE;
- virtual String validationMessage() const OVERRIDE;
+ virtual bool hasBadInput() const override final;
+ virtual bool patternMismatch() const override final;
+ virtual bool rangeUnderflow() const override final;
+ virtual bool rangeOverflow() const override final;
+ virtual bool stepMismatch() const override final;
+ virtual bool tooLong() const override final;
+ virtual bool typeMismatch() const override final;
+ virtual bool valueMissing() const override final;
+ virtual String validationMessage() const override final;
// Returns the minimum value for type=date, number, or range. Don't call this for other types.
double minimum() const;
@@ -76,7 +90,7 @@ public:
StepRange createStepRange(AnyStepHandling) const;
#if ENABLE(DATALIST_ELEMENT)
- Decimal findClosestTickMarkValue(const Decimal&);
+ Optional<Decimal> findClosestTickMarkValue(const Decimal&);
#endif
// Implementations of HTMLInputElement::stepUp() and stepDown().
@@ -90,10 +104,10 @@ public:
bool isTextButton() const;
bool isRadioButton() const;
- bool isTextField() const;
- bool isSearchField() const;
+ WEBCORE_EXPORT bool isTextField() const;
+ WEBCORE_EXPORT bool isSearchField() const;
bool isInputTypeHidden() const;
- bool isPasswordField() const;
+ WEBCORE_EXPORT bool isPasswordField() const;
bool isCheckbox() const;
bool isRangeControl() const;
@@ -105,38 +119,37 @@ public:
// be using a different one. Many input elements behave like text fields, and in addition
// any unknown input type is treated as text. Consider, for example, isTextField or
// isTextField && !isPasswordField.
- bool isText() const;
+ WEBCORE_EXPORT bool isText() const;
- bool isEmailField() const;
+ WEBCORE_EXPORT bool isEmailField() const;
bool isFileUpload() const;
bool isImageButton() const;
- bool isNumberField() const;
+ WEBCORE_EXPORT bool isNumberField() const;
bool isSubmitButton() const;
- bool isTelephoneField() const;
- bool isURLField() const;
- bool isDateField() const;
- bool isDateTimeField() const;
- bool isDateTimeLocalField() const;
- bool isMonthField() const;
- bool isTimeField() const;
- bool isWeekField() const;
-
-#if ENABLE(INPUT_SPEECH)
- bool isSpeechEnabled() const;
+ WEBCORE_EXPORT bool isTelephoneField() const;
+ WEBCORE_EXPORT bool isURLField() const;
+ WEBCORE_EXPORT bool isDateField() const;
+ WEBCORE_EXPORT bool isDateTimeField() const;
+ WEBCORE_EXPORT bool isDateTimeLocalField() const;
+ WEBCORE_EXPORT bool isMonthField() const;
+ WEBCORE_EXPORT bool isTimeField() const;
+ WEBCORE_EXPORT bool isWeekField() const;
+
+#if PLATFORM(IOS)
+ DateComponents::Type dateType() const;
#endif
HTMLElement* containerElement() const;
- virtual HTMLElement* innerTextElement() const;
+ virtual TextControlInnerTextElement* innerTextElement() const override final;
HTMLElement* innerBlockElement() const;
HTMLElement* innerSpinButtonElement() const;
+ HTMLElement* capsLockIndicatorElement() const;
HTMLElement* resultsButtonElement() const;
HTMLElement* cancelButtonElement() const;
-#if ENABLE(INPUT_SPEECH)
- HTMLElement* speechButtonElement() const;
-#endif
HTMLElement* sliderThumbElement() const;
HTMLElement* sliderTrackElement() const;
- virtual HTMLElement* placeholderElement() const;
+ virtual HTMLElement* placeholderElement() const override final;
+ WEBCORE_EXPORT HTMLElement* autoFillButtonElement() const;
bool checked() const { return m_isChecked; }
void setChecked(bool, TextFieldEventBehavior = DispatchNoEvent);
@@ -146,17 +159,18 @@ public:
void setIndeterminate(bool);
// shouldAppearChecked is used by the rendering tree/CSS while checked() is used by JS to determine checked state
bool shouldAppearChecked() const;
- virtual bool shouldAppearIndeterminate() const OVERRIDE;
+ virtual bool shouldAppearIndeterminate() const override final;
int size() const;
bool sizeShouldIncludeDecoration(int& preferredSize) const;
+ float decorationWidth() const;
- void setType(const String&);
+ void setType(const AtomicString&);
- String value() const;
+ WEBCORE_EXPORT virtual String value() const override final;
void setValue(const String&, ExceptionCode&, TextFieldEventBehavior = DispatchNoEvent);
- void setValue(const String&, TextFieldEventBehavior = DispatchNoEvent);
- void setValueForUser(const String&);
+ WEBCORE_EXPORT void setValue(const String&, TextFieldEventBehavior = DispatchNoEvent);
+ WEBCORE_EXPORT void setValueForUser(const String&);
// Checks if the specified string would be a valid value.
// We should not call this for types with no string value such as CHECKBOX and RADIO.
bool isValidValue(const String&) const;
@@ -169,16 +183,13 @@ public:
// The value which is drawn by a renderer.
String visibleValue() const;
- const String& suggestedValue() const;
- void setSuggestedValue(const String&);
-
- void setEditingValue(const String&);
+ WEBCORE_EXPORT void setEditingValue(const String&);
double valueAsDate() const;
void setValueAsDate(double, ExceptionCode&);
- double valueAsNumber() const;
- void setValueAsNumber(double, ExceptionCode&, TextFieldEventBehavior = DispatchNoEvent);
+ WEBCORE_EXPORT double valueAsNumber() const;
+ WEBCORE_EXPORT void setValueAsNumber(double, ExceptionCode&, TextFieldEventBehavior = DispatchNoEvent);
String valueWithDefault() const;
@@ -186,18 +197,23 @@ public:
bool canHaveSelection() const;
- virtual bool rendererIsNeeded(const NodeRenderingContext&);
- virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
- virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
+ virtual bool rendererIsNeeded(const RenderStyle&) override final;
+ virtual RenderPtr<RenderElement> createElementRenderer(Ref<RenderStyle>&&, const RenderTreePosition&) override final;
+ virtual void willAttachRenderers() override final;
+ virtual void didAttachRenderers() override final;
+ virtual void didDetachRenderers() override final;
// FIXME: For isActivatedSubmit and setActivatedSubmit, we should use the NVI-idiom here by making
// it private virtual in all classes and expose a public method in HTMLFormControlElement to call
// the private virtual method.
- virtual bool isActivatedSubmit() const;
- virtual void setActivatedSubmit(bool flag);
+ virtual bool isActivatedSubmit() const override final;
+ virtual void setActivatedSubmit(bool flag) override final;
String altText() const;
+ void willDispatchEvent(Event&, InputElementClickState&);
+ void didDispatchClickEvent(Event&, const InputElementClickState&);
+
int maxResults() const { return m_maxResults; }
String defaultValue() const;
@@ -211,27 +227,31 @@ public:
void setSize(unsigned);
void setSize(unsigned, ExceptionCode&);
- KURL src() const;
+ URL src() const;
- virtual int maxLength() const;
+ virtual int maxLength() const override final;
void setMaxLength(int, ExceptionCode&);
bool multiple() const;
- bool isAutofilled() const { return m_isAutofilled; }
- void setAutofilled(bool = true);
+ bool isAutoFilled() const { return m_isAutoFilled; }
+ WEBCORE_EXPORT void setAutoFilled(bool = true);
+
+ AutoFillButtonType autoFillButtonType() const { return (AutoFillButtonType)m_autoFillButtonType; }
+ WEBCORE_EXPORT void setShowAutoFillButton(AutoFillButtonType);
FileList* files();
void setFiles(PassRefPtr<FileList>);
+#if ENABLE(DRAG_SUPPORT)
// Returns true if the given DragData has more than one dropped files.
- bool receiveDroppedFiles(const DragData*);
-
-#if ENABLE(FILE_SYSTEM)
- String droppedFileSystemId();
+ bool receiveDroppedFiles(const DragData&);
#endif
Icon* icon() const;
+#if PLATFORM(IOS)
+ String displayString() const;
+#endif
// These functions are used for rendering the input active during a
// drag-and-drop operation.
bool canReceiveDroppedFiles() const;
@@ -240,9 +260,7 @@ public:
void addSearchResult();
void onSearch();
- void updateClearButtonVisibility();
-
- virtual bool willRespondToMouseClickEvents() OVERRIDE;
+ virtual bool willRespondToMouseClickEvents() override;
#if ENABLE(DATALIST_ELEMENT)
HTMLElement* list() const;
@@ -262,16 +280,13 @@ public:
void cacheSelectionInResponseToSetValue(int caretOffset) { cacheSelection(caretOffset, caretOffset, SelectionHasNoDirection); }
-#if ENABLE(INPUT_TYPE_COLOR)
- // For test purposes.
- void selectColorInColorChooser(const Color&);
-#endif
+ Color valueAsColor() const; // Returns transparent color if not type=color.
+ WEBCORE_EXPORT void selectColor(const Color&); // Does nothing if not type=color. Simulates user selection of color; intended for testing.
String defaultToolTip() const;
#if ENABLE(MEDIA_CAPTURE)
- String capture() const;
- void setCapture(const String& value);
+ bool shouldUseMediaCapture() const;
#endif
static const int maximumLength;
@@ -281,94 +296,92 @@ public:
void setHeight(unsigned);
void setWidth(unsigned);
- virtual void blur() OVERRIDE;
+ virtual void blur() override final;
void defaultBlur();
- virtual const AtomicString& name() const OVERRIDE;
+ virtual const AtomicString& name() const override final;
void endEditing();
static Vector<FileChooserFileInfo> filesFromFileInputFormControlState(const FormControlState&);
- virtual bool matchesReadOnlyPseudoClass() const OVERRIDE;
- virtual bool matchesReadWritePseudoClass() const OVERRIDE;
- virtual void setRangeText(const String& replacement, ExceptionCode&) OVERRIDE;
- virtual void setRangeText(const String& replacement, unsigned start, unsigned end, const String& selectionMode, ExceptionCode&) OVERRIDE;
+ virtual bool matchesReadWritePseudoClass() const override final;
+ virtual void setRangeText(const String& replacement, ExceptionCode&) override final;
+ virtual void setRangeText(const String& replacement, unsigned start, unsigned end, const String& selectionMode, ExceptionCode&) override final;
- bool hasImageLoader() const { return m_imageLoader; }
- HTMLImageLoader* imageLoader();
+ HTMLImageLoader* imageLoader() { return m_imageLoader.get(); }
+ HTMLImageLoader& ensureImageLoader();
#if ENABLE(DATE_AND_TIME_INPUT_TYPES)
bool setupDateTimeChooserParameters(DateTimeChooserParameters&);
#endif
+ void capsLockStateMayHaveChanged();
+
protected:
- HTMLInputElement(const QualifiedName&, Document*, HTMLFormElement*, bool createdByParser);
+ HTMLInputElement(const QualifiedName&, Document&, HTMLFormElement*, bool createdByParser);
- virtual void defaultEventHandler(Event*);
+ virtual void defaultEventHandler(Event*) override;
private:
enum AutoCompleteSetting { Uninitialized, On, Off };
- // FIXME: Author shadows should be allowed
- // https://bugs.webkit.org/show_bug.cgi?id=92608
- virtual bool areAuthorShadowsAllowed() const OVERRIDE { return false; }
-
- virtual void didAddUserAgentShadowRoot(ShadowRoot*) OVERRIDE;
+ virtual void didAddUserAgentShadowRoot(ShadowRoot*) override final;
+ virtual bool canHaveUserAgentShadowRoot() const override final { return true; }
- virtual void willChangeForm() OVERRIDE;
- virtual void didChangeForm() OVERRIDE;
- virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE;
- virtual void removedFrom(ContainerNode*) OVERRIDE;
- virtual void didMoveToNewDocument(Document* oldDocument) OVERRIDE;
+ virtual void willChangeForm() override final;
+ virtual void didChangeForm() override final;
+ virtual InsertionNotificationRequest insertedInto(ContainerNode&) override final;
+ void finishedInsertingSubtree() override final;
+ virtual void removedFrom(ContainerNode&) override final;
+ virtual void didMoveToNewDocument(Document* oldDocument) override final;
- virtual bool hasCustomFocusLogic() const OVERRIDE;
- virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
- virtual bool isMouseFocusable() const OVERRIDE;
- virtual bool isEnumeratable() const;
- virtual bool supportLabels() const OVERRIDE;
- virtual void updateFocusAppearance(bool restorePreviousSelection);
- virtual bool shouldUseInputMethod() OVERRIDE FINAL;
+ virtual bool hasCustomFocusLogic() const override final;
+ virtual bool isKeyboardFocusable(KeyboardEvent*) const override final;
+ virtual bool isMouseFocusable() const override final;
+ virtual bool isEnumeratable() const override final;
+ virtual bool supportLabels() const override final;
+ virtual void updateFocusAppearance(SelectionRestorationMode, SelectionRevealMode) override final;
+ virtual bool shouldUseInputMethod() override final;
- virtual bool isTextFormControl() const { return isTextField(); }
+ virtual bool isTextFormControl() const override final { return isTextField(); }
- virtual bool canTriggerImplicitSubmission() const { return isTextField(); }
+ virtual bool canTriggerImplicitSubmission() const override final { return isTextField(); }
- virtual const AtomicString& formControlType() const;
+ virtual const AtomicString& formControlType() const override final;
- virtual bool shouldSaveAndRestoreFormControlState() const OVERRIDE;
- virtual FormControlState saveFormControlState() const OVERRIDE;
- virtual void restoreFormControlState(const FormControlState&) OVERRIDE;
+ virtual bool shouldSaveAndRestoreFormControlState() const override final;
+ virtual FormControlState saveFormControlState() const override final;
+ virtual void restoreFormControlState(const FormControlState&) override final;
- virtual bool canStartSelection() const;
+ virtual bool canStartSelection() const override final;
- virtual void accessKeyAction(bool sendMouseEvents);
+ virtual void accessKeyAction(bool sendMouseEvents) override final;
- virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
- virtual bool isPresentationAttribute(const QualifiedName&) const OVERRIDE;
- virtual void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStylePropertySet*) OVERRIDE;
- virtual void finishParsingChildren();
+ virtual void parseAttribute(const QualifiedName&, const AtomicString&) override final;
+ virtual bool isPresentationAttribute(const QualifiedName&) const override final;
+ virtual void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStyleProperties&) override final;
+ virtual void finishParsingChildren() override final;
+ virtual void parserDidSetAttributes() override final;
- virtual void copyNonAttributePropertiesFromElement(const Element&);
+ virtual void copyNonAttributePropertiesFromElement(const Element&) override final;
- virtual void attach(const AttachContext& = AttachContext()) OVERRIDE;
+ virtual bool appendFormData(FormDataList&, bool) override final;
- virtual bool appendFormData(FormDataList&, bool);
+ virtual bool isSuccessfulSubmitButton() const override final;
- virtual bool isSuccessfulSubmitButton() const;
+ virtual void reset() override final;
- virtual void reset();
+ virtual bool isURLAttribute(const Attribute&) const override final;
+ virtual bool isInRange() const override final;
+ virtual bool isOutOfRange() const override final;
- virtual void* preDispatchEventHandler(Event*);
- virtual void postDispatchEventHandler(Event*, void* dataFromPreDispatch);
-
- virtual bool isURLAttribute(const Attribute&) const OVERRIDE;
- virtual bool isInRange() const;
- virtual bool isOutOfRange() const;
-
- virtual void documentDidResumeFromPageCache();
+ virtual void resumeFromDocumentSuspension() override final;
+#if ENABLE(INPUT_TYPE_COLOR)
+ virtual void prepareForDocumentSuspension() override final;
+#endif
- virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
+ virtual void addSubresourceAttributeURLs(ListHashSet<URL>&) const override final;
bool needsSuspensionCallback();
void registerForSuspensionCallbackIfNeeded();
@@ -378,21 +391,22 @@ private:
bool isTextType() const;
bool tooLong(const String&, NeedsToCheckDirtyFlag) const;
- virtual bool supportsPlaceholder() const;
- virtual void updatePlaceholderText();
- virtual bool isEmptyValue() const OVERRIDE { return innerTextValue().isEmpty(); }
- virtual bool isEmptySuggestedValue() const { return suggestedValue().isEmpty(); }
- virtual void handleFocusEvent(Node* oldFocusedNode, FocusDirection) OVERRIDE;
- virtual void handleBlurEvent();
+ virtual bool supportsPlaceholder() const override final;
+ virtual void updatePlaceholderText() override final;
+ virtual bool isEmptyValue() const override final;
+ virtual void handleFocusEvent(Node* oldFocusedNode, FocusDirection) override final;
+ virtual void handleBlurEvent() override final;
- virtual bool isOptionalFormControl() const { return !isRequiredFormControl(); }
- virtual bool isRequiredFormControl() const;
- virtual bool recalcWillValidate() const;
- virtual void requiredAttributeChanged() OVERRIDE;
+ virtual bool isOptionalFormControl() const override final { return !isRequiredFormControl(); }
+ virtual bool isRequiredFormControl() const override final;
+ virtual bool computeWillValidate() const override final;
+ virtual void requiredAttributeChanged() override final;
+ void initializeInputType();
void updateType();
+ void runPostTypeUpdateTasks();
- virtual void subtreeHasChanged();
+ virtual void subtreeHasChanged() override final;
#if ENABLE(DATALIST_ELEMENT)
void resetListAttributeTargetObserver();
@@ -407,7 +421,6 @@ private:
AtomicString m_name;
String m_valueIfDirty;
- String m_suggestedValue;
int m_size;
int m_maxLength;
short m_maxResults;
@@ -417,7 +430,8 @@ private:
bool m_hasType : 1;
bool m_isActivatedSubmit : 1;
unsigned m_autocomplete : 2; // AutoCompleteSetting
- bool m_isAutofilled : 1;
+ bool m_isAutoFilled : 1;
+ unsigned m_autoFillButtonType : 2; // AutoFillButtonType;
#if ENABLE(DATALIST_ELEMENT)
bool m_hasNonEmptyList : 1;
#endif
@@ -429,31 +443,15 @@ private:
#if ENABLE(TOUCH_EVENTS)
bool m_hasTouchEventHandler : 1;
#endif
- OwnPtr<InputType> m_inputType;
+ std::unique_ptr<InputType> m_inputType;
// The ImageLoader must be owned by this element because the loader code assumes
// that it lives as long as its owning element lives. If we move the loader into
// the ImageInput object we may delete the loader while this element lives on.
- OwnPtr<HTMLImageLoader> m_imageLoader;
+ std::unique_ptr<HTMLImageLoader> m_imageLoader;
#if ENABLE(DATALIST_ELEMENT)
- OwnPtr<ListAttributeTargetObserver> m_listAttributeTargetObserver;
+ std::unique_ptr<ListAttributeTargetObserver> m_listAttributeTargetObserver;
#endif
};
-inline bool isHTMLInputElement(Node* node)
-{
- return node->hasTagName(HTMLNames::inputTag);
-}
-
-inline bool isHTMLInputElement(Element* element)
-{
- return element->hasTagName(HTMLNames::inputTag);
-}
-
-inline HTMLInputElement* toHTMLInputElement(Node* node)
-{
- ASSERT_WITH_SECURITY_IMPLICATION(!node || isHTMLInputElement(node));
- return static_cast<HTMLInputElement*>(node);
-}
-
} //namespace
#endif