LayoutTests:
[WebKit-https.git] / WebCore / html / HTMLFormElement.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 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., 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  *
22  */
23
24 #ifndef HTMLFormElement_h
25 #define HTMLFormElement_h
26
27 #include "HTMLCollection.h" 
28 #include "HTMLElement.h"
29
30 namespace WebCore {
31
32 class Event;
33 class FormData;
34 class HTMLGenericFormElement;
35 class HTMLImageElement;
36 class HTMLFormCollection;
37
38 class HTMLFormElement : public HTMLElement {
39 public:
40     HTMLFormElement(Document*);
41     virtual ~HTMLFormElement();
42
43     virtual HTMLTagStatus endTagRequirement() const { return TagStatusRequired; }
44     virtual int tagPriority() const { return 3; }
45
46     virtual void attach();
47     virtual void insertedIntoDocument();
48     virtual void removedFromDocument();
49  
50     virtual void handleLocalEvents(Event*, bool useCapture);
51      
52     PassRefPtr<HTMLCollection> elements();
53     void getNamedElements(const AtomicString&, Vector<RefPtr<Node> >&);
54     
55     unsigned length() const;
56     Node* item(unsigned index);
57
58     String enctype() const { return m_enctype; }
59     void setEnctype(const String&);
60
61     String encoding() const { return m_enctype; }
62     void setEncoding(const String& enctype) { setEnctype(enctype); }
63
64     bool autoComplete() const { return m_autocomplete; }
65
66     virtual void parseMappedAttribute(MappedAttribute*);
67
68     void registerFormElement(HTMLGenericFormElement*);
69     void removeFormElement(HTMLGenericFormElement*);
70     void registerImgElement(HTMLImageElement*);
71     void removeImgElement(HTMLImageElement*);
72
73     bool prepareSubmit(Event*);
74     void submit();
75     void submit(Event*, bool activateSubmitButton = false);
76     void reset();
77
78     void setMalformed(bool malformed) { m_malformed = malformed; }
79     virtual bool isMalformed() { return m_malformed; }
80     
81     void setPreserveAcrossRemove(bool b) { m_preserveAcrossRemove = b; }
82     bool preserveAcrossRemove() const { return m_preserveAcrossRemove; }
83
84     virtual bool isURLAttribute(Attribute*) const;
85     
86     void submitClick(Event*);
87     bool formWouldHaveSecureSubmission(const String& url);
88
89     String name() const;
90     void setName(const String&);
91
92     String acceptCharset() const;
93     void setAcceptCharset(const String&);
94
95     String action() const;
96     void setAction(const String&);
97
98     String method() const;
99     void setMethod(const String&);
100
101     virtual String target() const;
102     void setTarget(const String&);
103     
104     PassRefPtr<HTMLGenericFormElement> elementForAlias(const AtomicString&);
105     void addElementAlias(HTMLGenericFormElement*, const AtomicString& alias);
106
107     // FIXME: Change this to be private after getting rid of all the clients.
108     Vector<HTMLGenericFormElement*> formElements;
109
110 private:
111     void parseEnctype(const String&);
112     PassRefPtr<FormData> formData(const char* boundary) const;
113     unsigned formElementIndex(HTMLGenericFormElement*);
114
115     friend class HTMLFormCollection;
116
117     typedef HashMap<RefPtr<AtomicStringImpl>, RefPtr<HTMLGenericFormElement> > AliasMap;
118     
119     AliasMap* m_elementAliases;
120     HTMLCollection::CollectionInfo* collectionInfo;
121
122     Vector<HTMLImageElement*> imgElements;
123     String m_url;
124     String m_target;
125     String m_enctype;
126     String m_acceptcharset;
127     bool m_post : 1;
128     bool m_multipart : 1;
129     bool m_autocomplete : 1;
130     bool m_insubmit : 1;
131     bool m_doingsubmit : 1;
132     bool m_inreset : 1;
133     bool m_malformed : 1;
134     bool m_preserveAcrossRemove : 1;
135
136     String oldNameAttr;
137 };
138
139 } // namespace WebCore
140
141 #endif // HTMLFormElement_h