OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. | |
3 * Copyright (C) 2010, 2011, 2012 Google Inc. All rights reserved. | |
4 * | |
5 * This library is free software; you can redistribute it and/or | |
6 * modify it under the terms of the GNU Library General Public | |
7 * License as published by the Free Software Foundation; either | |
8 * version 2 of the License, or (at your option) any later version. | |
9 * | |
10 * This library is distributed in the hope that it will be useful, | |
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 * Library General Public License for more details. | |
14 * | |
15 * You should have received a copy of the GNU Library General Public License | |
16 * along with this library; see the file COPYING.LIB. If not, write to | |
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
18 * Boston, MA 02110-1301, USA. | |
19 * | |
20 */ | |
21 | |
22 #ifndef FormController_h | |
23 #define FormController_h | |
24 | |
25 #include "core/dom/CheckedRadioButtons.h" | |
26 #include "wtf/Forward.h" | |
27 #include "wtf/ListHashSet.h" | |
28 #include "wtf/Vector.h" | |
29 #include "wtf/text/AtomicStringHash.h" | |
30 | |
31 namespace WebCore { | |
32 | |
33 class FormAssociatedElement; | |
34 class FormKeyGenerator; | |
35 class HTMLFormControlElementWithState; | |
36 class HTMLFormElement; | |
37 class SavedFormState; | |
38 | |
39 class FormControlState { | |
40 public: | |
41 FormControlState() : m_type(TypeSkip) { } | |
42 explicit FormControlState(const String& value) : m_type(TypeRestore) { m_val
ues.append(value); } | |
43 static FormControlState deserialize(const Vector<String>& stateVector, size_
t& index); | |
44 FormControlState(const FormControlState& another) : m_type(another.m_type),
m_values(another.m_values) { } | |
45 FormControlState& operator=(const FormControlState&); | |
46 | |
47 bool isFailure() const { return m_type == TypeFailure; } | |
48 size_t valueSize() const { return m_values.size(); } | |
49 const String& operator[](size_t i) const { return m_values[i]; } | |
50 void append(const String&); | |
51 void serializeTo(Vector<String>& stateVector) const; | |
52 | |
53 private: | |
54 enum Type { TypeSkip, TypeRestore, TypeFailure }; | |
55 explicit FormControlState(Type type) : m_type(type) { } | |
56 | |
57 Type m_type; | |
58 Vector<String> m_values; | |
59 }; | |
60 | |
61 inline FormControlState& FormControlState::operator=(const FormControlState& ano
ther) | |
62 { | |
63 m_type = another.m_type; | |
64 m_values = another.m_values; | |
65 return *this; | |
66 } | |
67 | |
68 inline void FormControlState::append(const String& value) | |
69 { | |
70 m_type = TypeRestore; | |
71 m_values.append(value); | |
72 } | |
73 | |
74 class FormController { | |
75 WTF_MAKE_FAST_ALLOCATED; | |
76 public: | |
77 static PassOwnPtr<FormController> create() | |
78 { | |
79 return adoptPtr(new FormController); | |
80 } | |
81 ~FormController(); | |
82 | |
83 CheckedRadioButtons& checkedRadioButtons() { return m_checkedRadioButtons; } | |
84 | |
85 void registerFormElementWithState(HTMLFormControlElementWithState*); | |
86 void unregisterFormElementWithState(HTMLFormControlElementWithState*); | |
87 // This should be callled only by Document::formElementsState(). | |
88 Vector<String> formElementsState() const; | |
89 // This should be callled only by Document::setStateForNewFormElements(). | |
90 void setStateForNewFormElements(const Vector<String>&); | |
91 void willDeleteForm(HTMLFormElement*); | |
92 void restoreControlStateFor(HTMLFormControlElementWithState&); | |
93 void restoreControlStateIn(HTMLFormElement&); | |
94 | |
95 static Vector<String> getReferencedFilePaths(const Vector<String>& stateVect
or); | |
96 | |
97 private: | |
98 typedef ListHashSet<RefPtr<HTMLFormControlElementWithState>, 64> FormElement
ListHashSet; | |
99 typedef HashMap<AtomicString, OwnPtr<SavedFormState> > SavedFormStateMap; | |
100 | |
101 FormController(); | |
102 static PassOwnPtr<SavedFormStateMap> createSavedFormStateMap(const FormEleme
ntListHashSet&); | |
103 FormControlState takeStateForFormElement(const HTMLFormControlElementWithSta
te&); | |
104 static void formStatesFromStateVector(const Vector<String>&, SavedFormStateM
ap&); | |
105 | |
106 CheckedRadioButtons m_checkedRadioButtons; | |
107 FormElementListHashSet m_formElementsWithState; | |
108 SavedFormStateMap m_savedFormStateMap; | |
109 OwnPtr<FormKeyGenerator> m_formKeyGenerator; | |
110 }; | |
111 | |
112 } // namespace WebCore | |
113 #endif | |
OLD | NEW |