18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *           (C) 1999 Antti Koivisto (koivisto@kde.org)
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *           (C) 2000 Dirk Mueller (mueller@kde.org)
55af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke * Copyright (C) 2004, 2005, 2006, 2007, 2010 Apple Inc. All rights reserved.
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef HTMLInputElement_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define HTMLInputElement_h
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLFormControlElement.h"
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "InputElement.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass FileList;
33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockclass HTMLDataListElement;
34231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockclass HTMLOptionElement;
35bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenclass InputType;
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass KURL;
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
38231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockclass HTMLInputElement : public HTMLTextFormControlElement, public InputElement {
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    static PassRefPtr<HTMLInputElement> create(const QualifiedName&, Document*, HTMLFormElement*, bool createdByParser);
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual ~HTMLInputElement();
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
43a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitspeechchange);
44a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
452bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual InputElement* toInputElement() { return this; }
462bde8e466a4451c7319e3a072d118917957d6554Steve Block
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool autoComplete() const;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    // For ValidityState
50a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    bool typeMismatch() const;
515ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    // valueMissing() ignores the specified string value for CHECKBOX and RADIO.
525ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    bool valueMissing(const String&) const;
535ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    bool patternMismatch(const String&) const;
545ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    bool tooLong(const String&, NeedsToCheckDirtyFlag) const;
555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    bool rangeUnderflow(const String&) const;
565ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    bool rangeOverflow(const String&) const;
57d0825bca7fe65beaee391d30da42e937db621564Steve Block    // Returns the minimum value for type=date, number, or range.  Don't call this for other types.
58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    double minimum() const;
59d0825bca7fe65beaee391d30da42e937db621564Steve Block    // Returns the maximum value for type=date, number, or range.  Don't call this for other types.
60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // This always returns a value which is >= minimum().
61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    double maximum() const;
62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Sets the "allowed value step" defined in the HTML spec to the specified double pointer.
63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Returns false if there is no "allowed value step."
64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool getAllowedValueStep(double*) const;
656b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    bool getAllowedValueStepWithDecimalPlaces(double*, unsigned*) const;
66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // For ValidityState.
675ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    bool stepMismatch(const String&) const;
686b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    String minimumString() const;
696b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    String maximumString() const;
706b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    String stepBaseString() const;
716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    String stepString() const;
726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    String typeMismatchText() const;
734576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    String valueMissingText() const;
745ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Implementations of HTMLInputElement::stepUp() and stepDown().
76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void stepUp(int, ExceptionCode&);
77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void stepDown(int, ExceptionCode&);
78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void stepUp(ExceptionCode& ec) { stepUp(1, ec); }
79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void stepDown(ExceptionCode& ec) { stepDown(1, ec); }
8021939df44de1705786c545cd1bf519d47250322dBen Murdoch    // stepUp()/stepDown() for user-interaction.
8121939df44de1705786c545cd1bf519d47250322dBen Murdoch    void stepUpFromRenderer(int);
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
83cad810f21b803229eb11403f9209855525a25d57Steve Block    bool isTextButton() const;
8468513a70bcd92384395513322f1b801e7bf9c729Steve Block
85cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool isRadioButton() const;
86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual bool isTextField() const;
87cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool isSearchField() const;
88cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool isInputTypeHidden() const;
89cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool isPasswordField() const;
90cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool isCheckbox() const;
9168513a70bcd92384395513322f1b801e7bf9c729Steve Block
9268513a70bcd92384395513322f1b801e7bf9c729Steve Block    // FIXME: It's highly likely that any call site calling this function should instead
9368513a70bcd92384395513322f1b801e7bf9c729Steve Block    // be using a different one. Many input elements behave like text fields, and in addition
9468513a70bcd92384395513322f1b801e7bf9c729Steve Block    // any unknown input type is treated as text. Consider, for example, isTextField or
9568513a70bcd92384395513322f1b801e7bf9c729Steve Block    // isTextField && !isPasswordField.
96cad810f21b803229eb11403f9209855525a25d57Steve Block    bool isText() const;
9768513a70bcd92384395513322f1b801e7bf9c729Steve Block
98cad810f21b803229eb11403f9209855525a25d57Steve Block    bool isEmailField() const;
99cad810f21b803229eb11403f9209855525a25d57Steve Block    bool isFileUpload() const;
100cad810f21b803229eb11403f9209855525a25d57Steve Block    bool isImageButton() const;
101cad810f21b803229eb11403f9209855525a25d57Steve Block    bool isNumberField() const;
102cad810f21b803229eb11403f9209855525a25d57Steve Block    bool isSubmitButton() const;
103cad810f21b803229eb11403f9209855525a25d57Steve Block    bool isTelephoneField() const;
104cad810f21b803229eb11403f9209855525a25d57Steve Block    bool isURLField() const;
10568513a70bcd92384395513322f1b801e7bf9c729Steve Block
10606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#if ENABLE(INPUT_SPEECH)
10706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    virtual bool isSpeechEnabled() const;
108a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
110cad810f21b803229eb11403f9209855525a25d57Steve Block    bool checked() const { return m_isChecked; }
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setChecked(bool, bool sendChangeEvent = false);
112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // 'indeterminate' is a state independent of the checked state that causes the control to draw in a way that hides the actual state.
114cad810f21b803229eb11403f9209855525a25d57Steve Block    bool indeterminate() const { return m_isIndeterminate; }
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setIndeterminate(bool);
116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual int size() const;
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1195af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    void setType(const String&);
120d0825bca7fe65beaee391d30da42e937db621564Steve Block
121635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual String value() const;
122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setValue(const String&, bool sendChangeEvent = false);
123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setValueForUser(const String&);
1245ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    // Checks if the specified string would be a valid value.
1255ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    // We should not call this for types with no string value such as CHECKBOX and RADIO.
1265ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    bool isValidValue(const String&) const;
127635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
128e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    virtual const String& suggestedValue() const;
129e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    void setSuggestedValue(const String&);
130e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
131d0825bca7fe65beaee391d30da42e937db621564Steve Block    double valueAsDate() const;
132d0825bca7fe65beaee391d30da42e937db621564Steve Block    void setValueAsDate(double, ExceptionCode&);
133d0825bca7fe65beaee391d30da42e937db621564Steve Block
134d0825bca7fe65beaee391d30da42e937db621564Steve Block    double valueAsNumber() const;
135d0825bca7fe65beaee391d30da42e937db621564Steve Block    void setValueAsNumber(double, ExceptionCode&);
136d0825bca7fe65beaee391d30da42e937db621564Steve Block
1375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual String placeholder() const;
1385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual void setPlaceholder(const String&);
1395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String valueWithDefault() const;
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void setValueFromRenderer(const String&);
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setFileListFromRenderer(const Vector<String>&);
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool canHaveSelection() const;
146231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual void select() { HTMLTextFormControlElement::select(); }
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool rendererIsNeeded(RenderStyle*);
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void detach();
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1525af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    // FIXME: For isActivatedSubmit and setActivatedSubmit, we should use the NVI-idiom here by making
1535af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    // it private virtual in all classes and expose a public method in HTMLFormControlElement to call
1545af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    // the private virtual method.
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool isActivatedSubmit() const;
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void setActivatedSubmit(bool flag);
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String altText() const;
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int maxResults() const { return m_maxResults; }
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String defaultValue() const;
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setDefaultValue(const String&);
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
165635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    void setDefaultName(const AtomicString&);
166635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String accept() const;
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String alt() const;
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setSize(unsigned);
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    KURL src() const;
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    virtual int maxLength() const;
175231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    void setMaxLength(int, ExceptionCode&);
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    bool multiple() const;
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
179cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool isAutofilled() const { return m_isAutofilled; }
180cad810f21b803229eb11403f9209855525a25d57Steve Block    void setAutofilled(bool = true);
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FileList* files();
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void addSearchResult();
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void onSearch();
186635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1875af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#if ENABLE(DATALIST)
1885af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    HTMLElement* list() const;
1895af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    HTMLOptionElement* selectedOption() const;
19021939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
1915af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
19206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#if ENABLE(WCSS)
19306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    void setWapInputFormat(String& mask);
19406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif
19506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
196cad810f21b803229eb11403f9209855525a25d57Steve Block    // These functions are public so they can be used in InputType classes.
197cad810f21b803229eb11403f9209855525a25d57Steve Block    // Otherwise, they would be private.
198cad810f21b803229eb11403f9209855525a25d57Steve Block    CheckedRadioButtons& checkedRadioButtons() const;
199cad810f21b803229eb11403f9209855525a25d57Steve Block    void handleBeforeTextInsertedEvent(Event*);
200cad810f21b803229eb11403f9209855525a25d57Steve Block    void updateCheckedRadioButtons();
20181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2022bde8e466a4451c7319e3a072d118917957d6554Steve Block    bool lastChangeWasUserEdit() const;
2032bde8e466a4451c7319e3a072d118917957d6554Steve Block
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected:
2052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    HTMLInputElement(const QualifiedName&, Document*, HTMLFormElement*, bool createdByParser);
2065af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
20721939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual void defaultEventHandler(Event*);
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
2105af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    enum AutoCompleteSetting { Uninitialized, On, Off };
2115af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2125af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void willMoveToNewOwnerDocument();
2135af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void didMoveToNewOwnerDocument();
2145af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2155af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool isKeyboardFocusable(KeyboardEvent*) const;
2165af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool isMouseFocusable() const;
217cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool isEnumeratable() const;
2185af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void updateFocusAppearance(bool restorePreviousSelection);
2195af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void aboutToUnload();
2205af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool shouldUseInputMethod() const;
2215af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2225af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual const AtomicString& formControlName() const;
22381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2245af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    // isChecked is used by the rendering tree/CSS while checked() is used by JS to determine checked state
225cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool isChecked() const;
2265af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool isIndeterminate() const { return indeterminate(); }
22781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2285af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool isTextFormControl() const { return isTextField(); }
2295af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
230cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool hasSpinButton() const;
2315af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool canTriggerImplicitSubmission() const { return isTextField(); }
2325af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2335af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual const AtomicString& formControlType() const;
2345af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2355af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool searchEventsShouldBeDispatched() const;
2365af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2375af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool saveFormControlState(String& value) const;
2385af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void restoreFormControlState(const String&);
2395af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2405af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool canStartSelection() const;
24181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2425af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void accessKeyAction(bool sendToAnyElement);
2435af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2445af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const;
2455af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void parseMappedAttribute(Attribute*);
2462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void finishParsingChildren();
2475af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2485af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void copyNonAttributeProperties(const Element* source);
2495af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2505af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void attach();
2515af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2525af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool appendFormData(FormDataList&, bool);
2535af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2545af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool isSuccessfulSubmitButton() const;
2555af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2565af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void reset();
2575af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2585af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void* preDispatchEventHandler(Event*);
2595af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void postDispatchEventHandler(Event*, void* dataFromPreDispatch);
2605af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2615af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool isURLAttribute(Attribute*) const;
2625af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2635af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void cacheSelection(int start, int end);
2645af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual String visibleValue() const;
26681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual String convertFromVisibleValue(const String&) const;
2675abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    virtual bool isAcceptableValue(const String&) const;
2685af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual String sanitizeValue(const String&) const;
2695abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    virtual bool hasUnacceptableValue() const;
2705af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
271cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool isInRange() const;
272cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool isOutOfRange() const;
273cad810f21b803229eb11403f9209855525a25d57Steve Block
2745af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void documentDidBecomeActive();
2755af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2765af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
2775af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool needsActivationCallback();
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void registerForActivationCallbackIfNeeded();
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void unregisterForActivationCallbackIfNeeded();
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2820617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    virtual bool supportsMaxLength() const { return isTextType(); }
2830617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    bool isTextType() const;
2840617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
285cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool supportsPlaceholder() const;
286231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual bool isEmptyValue() const { return value().isEmpty(); }
28781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual bool isEmptySuggestedValue() const { return suggestedValue().isEmpty(); }
288231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual void handleFocusEvent();
289231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual void handleBlurEvent();
290231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual int cachedSelectionStart() const { return m_data.cachedSelectionStart(); }
291231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual int cachedSelectionEnd() const { return m_data.cachedSelectionEnd(); }
292231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
2930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual bool isOptionalFormControl() const { return !isRequiredFormControl(); }
2940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual bool isRequiredFormControl() const;
295dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual bool recalcWillValidate() const;
2960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29768513a70bcd92384395513322f1b801e7bf9c729Steve Block    void updateType();
29868513a70bcd92384395513322f1b801e7bf9c729Steve Block
2998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    // Helper for stepUp()/stepDown().  Adds step value * count to the current value.
3008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    void applyStep(double count, ExceptionCode&);
3018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
302231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DATALIST)
303231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    HTMLDataListElement* dataList() const;
304231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
305231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
3065af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#if ENABLE(WCSS)
3075af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual InputElementData data() const { return m_data; }
3085af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#endif
3095af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
310635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    InputElementData m_data;
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    short m_maxResults;
312cad810f21b803229eb11403f9209855525a25d57Steve Block    bool m_isChecked : 1;
313cad810f21b803229eb11403f9209855525a25d57Steve Block    bool m_reflectsCheckedAttribute : 1;
314cad810f21b803229eb11403f9209855525a25d57Steve Block    bool m_isIndeterminate : 1;
315cad810f21b803229eb11403f9209855525a25d57Steve Block    bool m_hasType : 1;
316cad810f21b803229eb11403f9209855525a25d57Steve Block    bool m_isActivatedSubmit : 1;
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    unsigned m_autocomplete : 2; // AutoCompleteSetting
318cad810f21b803229eb11403f9209855525a25d57Steve Block    bool m_isAutofilled : 1;
319231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DATALIST)
320231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    bool m_hasNonEmptyList : 1;
321231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
3222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool m_stateRestored : 1;
3232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool m_parsingInProgress : 1;
324bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    OwnPtr<InputType> m_inputType;
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} //namespace
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
330