diff options
author | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2017-05-30 12:48:17 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2017-05-30 12:48:17 +0200 |
commit | 881da28418d380042aa95a97f0cbd42560a64f7c (patch) | |
tree | a794dff3274695e99c651902dde93d934ea7a5af /Source/WebCore/html/HTMLInputElement.h | |
parent | 7e104c57a70fdf551bb3d22a5d637cdcbc69dbea (diff) | |
parent | 0fcedcd17cc00d3dd44c718b3cb36c1033319671 (diff) | |
download | qtwebkit-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.h | 312 |
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 |