[LFC][IFC] Add missing float check in inline line layout
[WebKit.git] / Source / WebCore / html / HTMLTextAreaElement.h
1 /*
2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2000 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2004, 2005, 2006, 2007, 2010 Apple Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  *
22  */
23
24 #pragma once
25
26 #include "HTMLTextFormControlElement.h"
27
28 namespace WebCore {
29
30 class BeforeTextInsertedEvent;
31 class RenderTextControlMultiLine;
32 class VisibleSelection;
33
34 class HTMLTextAreaElement final : public HTMLTextFormControlElement {
35     WTF_MAKE_ISO_ALLOCATED(HTMLTextAreaElement);
36 public:
37     static Ref<HTMLTextAreaElement> create(const QualifiedName&, Document&, HTMLFormElement*);
38
39     unsigned cols() const { return m_cols; }
40     unsigned rows() const { return m_rows; }
41
42     bool shouldWrapText() const { return m_wrap != NoWrap; }
43
44     WEBCORE_EXPORT String value() const final;
45     WEBCORE_EXPORT void setValue(const String&);
46     WEBCORE_EXPORT String defaultValue() const;
47     WEBCORE_EXPORT void setDefaultValue(const String&);
48     int textLength() const { return value().length(); }
49     int effectiveMaxLength() const { return maxLength(); }
50     // For ValidityState
51     String validationMessage() const final;
52     bool valueMissing() const final;
53     bool tooShort() const final;
54     bool tooLong() const final;
55     bool isValidValue(const String&) const;
56     
57     RefPtr<TextControlInnerTextElement> innerTextElement() const final;
58     RenderStyle createInnerTextStyle(const RenderStyle&) final;
59     void copyNonAttributePropertiesFromElement(const Element&) final;
60
61     void rendererWillBeDestroyed();
62
63     WEBCORE_EXPORT void setCols(unsigned);
64     WEBCORE_EXPORT void setRows(unsigned);
65
66     bool willRespondToMouseClickEvents() final;
67
68     RenderTextControlMultiLine* renderer() const;
69
70 private:
71     HTMLTextAreaElement(const QualifiedName&, Document&, HTMLFormElement*);
72
73     enum WrapMethod { NoWrap, SoftWrap, HardWrap };
74
75     void didAddUserAgentShadowRoot(ShadowRoot&) final;
76
77     void maxLengthAttributeChanged(const AtomString& newValue);
78     void minLengthAttributeChanged(const AtomString& newValue);
79
80     void handleBeforeTextInsertedEvent(BeforeTextInsertedEvent&) const;
81     static String sanitizeUserInputValue(const String&, unsigned maxLength);
82     void updateValue() const;
83     void setNonDirtyValue(const String&);
84     void setValueCommon(const String&);
85
86     bool supportsPlaceholder() const final { return true; }
87     HTMLElement* placeholderElement() const final;
88     void updatePlaceholderText() final;
89     bool isEmptyValue() const final { return value().isEmpty(); }
90
91     bool isOptionalFormControl() const final { return !isRequiredFormControl(); }
92     bool isRequiredFormControl() const final { return isRequired(); }
93
94     void defaultEventHandler(Event&) final;
95     
96     void subtreeHasChanged() final;
97
98     bool isEnumeratable() const final { return true; }
99     bool supportLabels() const final { return true; }
100
101     bool isInteractiveContent() const final { return true; }
102
103     const AtomString& formControlType() const final;
104
105     FormControlState saveFormControlState() const final;
106     void restoreFormControlState(const FormControlState&) final;
107
108     bool isTextField() const final { return true; }
109
110     void childrenChanged(const ChildChange&) final;
111     void parseAttribute(const QualifiedName&, const AtomString&) final;
112     bool isPresentationAttribute(const QualifiedName&) const final;
113     void collectStyleForPresentationAttribute(const QualifiedName&, const AtomString&, MutableStyleProperties&) final;
114     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
115     bool appendFormData(DOMFormData&, bool) final;
116     void reset() final;
117     bool hasCustomFocusLogic() const final;
118     int defaultTabIndex() const final;
119     bool isMouseFocusable() const final;
120     bool isKeyboardFocusable(KeyboardEvent*) const final;
121     void updateFocusAppearance(SelectionRestorationMode, SelectionRevealMode) final;
122
123     void accessKeyAction(bool sendMouseEvents) final;
124
125     bool shouldUseInputMethod() final;
126     bool matchesReadWritePseudoClass() const final;
127
128     bool valueMissing(const String& value) const { return isRequiredFormControl() && !isDisabledOrReadOnly() && value.isEmpty(); }
129     bool tooShort(StringView, NeedsToCheckDirtyFlag) const;
130     bool tooLong(StringView, NeedsToCheckDirtyFlag) const;
131
132     unsigned m_rows;
133     unsigned m_cols;
134     WrapMethod m_wrap { SoftWrap };
135     RefPtr<HTMLElement> m_placeholder;
136     mutable String m_value;
137     mutable bool m_isDirty { false };
138     mutable bool m_wasModifiedByUser { false };
139 };
140
141 } //namespace