Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: third_party/WebKit/Source/core/html/ListedElement.cpp

Issue 2546063002: Rename FormAssociatedElement to ListedElement (Closed)
Patch Set: Rename FormAssociatedElement to ListedElement Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version. 11 * version 2 of the License, or (at your option) any later version.
12 * 12 *
13 * This library is distributed in the hope that it will be useful, 13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details. 16 * Library General Public License for more details.
17 * 17 *
18 * You should have received a copy of the GNU Library General Public License 18 * You should have received a copy of the GNU Library General Public License
19 * along with this library; see the file COPYING.LIB. If not, write to 19 * along with this library; see the file COPYING.LIB. If not, write to
20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA. 21 * Boston, MA 02110-1301, USA.
22 * 22 *
23 */ 23 */
24 24
25 #include "core/html/FormAssociatedElement.h" 25 #include "core/html/ListedElement.h"
26 26
27 #include "core/HTMLNames.h" 27 #include "core/HTMLNames.h"
28 #include "core/dom/IdTargetObserver.h" 28 #include "core/dom/IdTargetObserver.h"
29 #include "core/dom/NodeTraversal.h" 29 #include "core/dom/NodeTraversal.h"
30 #include "core/html/HTMLFormControlElement.h" 30 #include "core/html/HTMLFormControlElement.h"
31 #include "core/html/HTMLFormElement.h" 31 #include "core/html/HTMLFormElement.h"
32 #include "core/html/HTMLObjectElement.h" 32 #include "core/html/HTMLObjectElement.h"
33 #include "core/html/ValidityState.h" 33 #include "core/html/ValidityState.h"
34 34
35 namespace blink { 35 namespace blink {
36 36
37 using namespace HTMLNames; 37 using namespace HTMLNames;
38 38
39 class FormAttributeTargetObserver : public IdTargetObserver { 39 class FormAttributeTargetObserver : public IdTargetObserver {
40 public: 40 public:
41 static FormAttributeTargetObserver* create(const AtomicString& id, 41 static FormAttributeTargetObserver* create(const AtomicString& id,
42 FormAssociatedElement*); 42 ListedElement*);
43 DECLARE_VIRTUAL_TRACE(); 43 DECLARE_VIRTUAL_TRACE();
44 void idTargetChanged() override; 44 void idTargetChanged() override;
45 45
46 private: 46 private:
47 FormAttributeTargetObserver(const AtomicString& id, FormAssociatedElement*); 47 FormAttributeTargetObserver(const AtomicString& id, ListedElement*);
48 48
49 Member<FormAssociatedElement> m_element; 49 Member<ListedElement> m_element;
50 }; 50 };
51 51
52 FormAssociatedElement::FormAssociatedElement() : m_formWasSetByParser(false) {} 52 ListedElement::ListedElement() : m_formWasSetByParser(false) {}
53 53
54 FormAssociatedElement::~FormAssociatedElement() { 54 ListedElement::~ListedElement() {
55 // We can't call setForm here because it contains virtual calls. 55 // We can't call setForm here because it contains virtual calls.
56 } 56 }
57 57
58 DEFINE_TRACE(FormAssociatedElement) { 58 DEFINE_TRACE(ListedElement) {
59 visitor->trace(m_formAttributeTargetObserver); 59 visitor->trace(m_formAttributeTargetObserver);
60 visitor->trace(m_form); 60 visitor->trace(m_form);
61 visitor->trace(m_validityState); 61 visitor->trace(m_validityState);
62 } 62 }
63 63
64 ValidityState* FormAssociatedElement::validity() { 64 ValidityState* ListedElement::validity() {
65 if (!m_validityState) 65 if (!m_validityState)
66 m_validityState = ValidityState::create(this); 66 m_validityState = ValidityState::create(this);
67 67
68 return m_validityState.get(); 68 return m_validityState.get();
69 } 69 }
70 70
71 void FormAssociatedElement::didMoveToNewDocument(Document& oldDocument) { 71 void ListedElement::didMoveToNewDocument(Document& oldDocument) {
72 HTMLElement* element = toHTMLElement(this); 72 HTMLElement* element = toHTMLElement(this);
73 if (element->fastHasAttribute(formAttr)) 73 if (element->fastHasAttribute(formAttr))
74 setFormAttributeTargetObserver(nullptr); 74 setFormAttributeTargetObserver(nullptr);
75 } 75 }
76 76
77 void FormAssociatedElement::insertedInto(ContainerNode* insertionPoint) { 77 void ListedElement::insertedInto(ContainerNode* insertionPoint) {
78 if (!m_formWasSetByParser || !m_form || 78 if (!m_formWasSetByParser || !m_form ||
79 NodeTraversal::highestAncestorOrSelf(*insertionPoint) != 79 NodeTraversal::highestAncestorOrSelf(*insertionPoint) !=
80 NodeTraversal::highestAncestorOrSelf(*m_form.get())) 80 NodeTraversal::highestAncestorOrSelf(*m_form.get()))
81 resetFormOwner(); 81 resetFormOwner();
82 82
83 if (!insertionPoint->isConnected()) 83 if (!insertionPoint->isConnected())
84 return; 84 return;
85 85
86 HTMLElement* element = toHTMLElement(this); 86 HTMLElement* element = toHTMLElement(this);
87 if (element->fastHasAttribute(formAttr)) 87 if (element->fastHasAttribute(formAttr))
88 resetFormAttributeTargetObserver(); 88 resetFormAttributeTargetObserver();
89 } 89 }
90 90
91 void FormAssociatedElement::removedFrom(ContainerNode* insertionPoint) { 91 void ListedElement::removedFrom(ContainerNode* insertionPoint) {
92 HTMLElement* element = toHTMLElement(this); 92 HTMLElement* element = toHTMLElement(this);
93 if (insertionPoint->isConnected() && element->fastHasAttribute(formAttr)) { 93 if (insertionPoint->isConnected() && element->fastHasAttribute(formAttr)) {
94 setFormAttributeTargetObserver(nullptr); 94 setFormAttributeTargetObserver(nullptr);
95 resetFormOwner(); 95 resetFormOwner();
96 return; 96 return;
97 } 97 }
98 // If the form and element are both in the same tree, preserve the connection 98 // If the form and element are both in the same tree, preserve the connection
99 // to the form. Otherwise, null out our form and remove ourselves from the 99 // to the form. Otherwise, null out our form and remove ourselves from the
100 // form's list of elements. 100 // form's list of elements.
101 if (m_form && 101 if (m_form &&
102 NodeTraversal::highestAncestorOrSelf(*element) != 102 NodeTraversal::highestAncestorOrSelf(*element) !=
103 NodeTraversal::highestAncestorOrSelf(*m_form.get())) 103 NodeTraversal::highestAncestorOrSelf(*m_form.get()))
104 resetFormOwner(); 104 resetFormOwner();
105 } 105 }
106 106
107 HTMLFormElement* FormAssociatedElement::findAssociatedForm( 107 HTMLFormElement* ListedElement::findAssociatedForm(const HTMLElement* element) {
108 const HTMLElement* element) {
109 const AtomicString& formId(element->fastGetAttribute(formAttr)); 108 const AtomicString& formId(element->fastGetAttribute(formAttr));
110 // 3. If the element is reassociateable, has a form content attribute, and 109 // 3. If the element is reassociateable, has a form content attribute, and
111 // is itself in a Document, then run these substeps: 110 // is itself in a Document, then run these substeps:
112 if (!formId.isNull() && element->isConnected()) { 111 if (!formId.isNull() && element->isConnected()) {
113 // 3.1. If the first element in the Document to have an ID that is 112 // 3.1. If the first element in the Document to have an ID that is
114 // case-sensitively equal to the element's form content attribute's 113 // case-sensitively equal to the element's form content attribute's
115 // value is a form element, then associate the form-associated element 114 // value is a form element, then associate the form-associated element
116 // with that form element. 115 // with that form element.
117 // 3.2. Abort the "reset the form owner" steps. 116 // 3.2. Abort the "reset the form owner" steps.
118 Element* newFormCandidate = element->treeScope().getElementById(formId); 117 Element* newFormCandidate = element->treeScope().getElementById(formId);
119 return isHTMLFormElement(newFormCandidate) 118 return isHTMLFormElement(newFormCandidate)
120 ? toHTMLFormElement(newFormCandidate) 119 ? toHTMLFormElement(newFormCandidate)
121 : 0; 120 : 0;
122 } 121 }
123 // 4. Otherwise, if the form-associated element in question has an ancestor 122 // 4. Otherwise, if the form-associated element in question has an ancestor
124 // form element, then associate the form-associated element with the nearest 123 // form element, then associate the form-associated element with the nearest
125 // such ancestor form element. 124 // such ancestor form element.
126 return element->findFormAncestor(); 125 return element->findFormAncestor();
127 } 126 }
128 127
129 void FormAssociatedElement::formRemovedFromTree(const Node& formRoot) { 128 void ListedElement::formRemovedFromTree(const Node& formRoot) {
130 DCHECK(m_form); 129 DCHECK(m_form);
131 if (NodeTraversal::highestAncestorOrSelf(toHTMLElement(*this)) == formRoot) 130 if (NodeTraversal::highestAncestorOrSelf(toHTMLElement(*this)) == formRoot)
132 return; 131 return;
133 resetFormOwner(); 132 resetFormOwner();
134 } 133 }
135 134
136 void FormAssociatedElement::associateByParser(HTMLFormElement* form) { 135 void ListedElement::associateByParser(HTMLFormElement* form) {
137 if (form && form->isConnected()) { 136 if (form && form->isConnected()) {
138 m_formWasSetByParser = true; 137 m_formWasSetByParser = true;
139 setForm(form); 138 setForm(form);
140 form->didAssociateByParser(); 139 form->didAssociateByParser();
141 } 140 }
142 } 141 }
143 142
144 void FormAssociatedElement::setForm(HTMLFormElement* newForm) { 143 void ListedElement::setForm(HTMLFormElement* newForm) {
145 if (m_form.get() == newForm) 144 if (m_form.get() == newForm)
146 return; 145 return;
147 willChangeForm(); 146 willChangeForm();
148 if (m_form) 147 if (m_form)
149 m_form->disassociate(*this); 148 m_form->disassociate(*this);
150 if (newForm) { 149 if (newForm) {
151 m_form = newForm; 150 m_form = newForm;
152 m_form->associate(*this); 151 m_form->associate(*this);
153 } else { 152 } else {
154 m_form = nullptr; 153 m_form = nullptr;
155 } 154 }
156 didChangeForm(); 155 didChangeForm();
157 } 156 }
158 157
159 void FormAssociatedElement::willChangeForm() {} 158 void ListedElement::willChangeForm() {}
160 159
161 void FormAssociatedElement::didChangeForm() { 160 void ListedElement::didChangeForm() {
162 if (!m_formWasSetByParser && m_form && m_form->isConnected()) { 161 if (!m_formWasSetByParser && m_form && m_form->isConnected()) {
163 HTMLElement* element = toHTMLElement(this); 162 HTMLElement* element = toHTMLElement(this);
164 element->document().didAssociateFormControl(element); 163 element->document().didAssociateFormControl(element);
165 } 164 }
166 } 165 }
167 166
168 void FormAssociatedElement::resetFormOwner() { 167 void ListedElement::resetFormOwner() {
169 m_formWasSetByParser = false; 168 m_formWasSetByParser = false;
170 HTMLElement* element = toHTMLElement(this); 169 HTMLElement* element = toHTMLElement(this);
171 const AtomicString& formId(element->fastGetAttribute(formAttr)); 170 const AtomicString& formId(element->fastGetAttribute(formAttr));
172 HTMLFormElement* nearestForm = element->findFormAncestor(); 171 HTMLFormElement* nearestForm = element->findFormAncestor();
173 // 1. If the element's form owner is not null, and either the element is not 172 // 1. If the element's form owner is not null, and either the element is not
174 // reassociateable or its form content attribute is not present, and the 173 // reassociateable or its form content attribute is not present, and the
175 // element's form owner is its nearest form element ancestor after the 174 // element's form owner is its nearest form element ancestor after the
176 // change to the ancestor chain, then do nothing, and abort these steps. 175 // change to the ancestor chain, then do nothing, and abort these steps.
177 if (m_form && formId.isNull() && m_form.get() == nearestForm) 176 if (m_form && formId.isNull() && m_form.get() == nearestForm)
178 return; 177 return;
179 178
180 setForm(findAssociatedForm(element)); 179 setForm(findAssociatedForm(element));
181 } 180 }
182 181
183 void FormAssociatedElement::formAttributeChanged() { 182 void ListedElement::formAttributeChanged() {
184 resetFormOwner(); 183 resetFormOwner();
185 resetFormAttributeTargetObserver(); 184 resetFormAttributeTargetObserver();
186 } 185 }
187 186
188 bool FormAssociatedElement::customError() const { 187 bool ListedElement::customError() const {
189 const HTMLElement* element = toHTMLElement(this); 188 const HTMLElement* element = toHTMLElement(this);
190 return element->willValidate() && !m_customValidationMessage.isEmpty(); 189 return element->willValidate() && !m_customValidationMessage.isEmpty();
191 } 190 }
192 191
193 bool FormAssociatedElement::hasBadInput() const { 192 bool ListedElement::hasBadInput() const {
194 return false; 193 return false;
195 } 194 }
196 195
197 bool FormAssociatedElement::patternMismatch() const { 196 bool ListedElement::patternMismatch() const {
198 return false; 197 return false;
199 } 198 }
200 199
201 bool FormAssociatedElement::rangeOverflow() const { 200 bool ListedElement::rangeOverflow() const {
202 return false; 201 return false;
203 } 202 }
204 203
205 bool FormAssociatedElement::rangeUnderflow() const { 204 bool ListedElement::rangeUnderflow() const {
206 return false; 205 return false;
207 } 206 }
208 207
209 bool FormAssociatedElement::stepMismatch() const { 208 bool ListedElement::stepMismatch() const {
210 return false; 209 return false;
211 } 210 }
212 211
213 bool FormAssociatedElement::tooLong() const { 212 bool ListedElement::tooLong() const {
214 return false; 213 return false;
215 } 214 }
216 215
217 bool FormAssociatedElement::tooShort() const { 216 bool ListedElement::tooShort() const {
218 return false; 217 return false;
219 } 218 }
220 219
221 bool FormAssociatedElement::typeMismatch() const { 220 bool ListedElement::typeMismatch() const {
222 return false; 221 return false;
223 } 222 }
224 223
225 bool FormAssociatedElement::valid() const { 224 bool ListedElement::valid() const {
226 bool someError = typeMismatch() || stepMismatch() || rangeUnderflow() || 225 bool someError = typeMismatch() || stepMismatch() || rangeUnderflow() ||
227 rangeOverflow() || tooLong() || tooShort() || 226 rangeOverflow() || tooLong() || tooShort() ||
228 patternMismatch() || valueMissing() || hasBadInput() || 227 patternMismatch() || valueMissing() || hasBadInput() ||
229 customError(); 228 customError();
230 return !someError; 229 return !someError;
231 } 230 }
232 231
233 bool FormAssociatedElement::valueMissing() const { 232 bool ListedElement::valueMissing() const {
234 return false; 233 return false;
235 } 234 }
236 235
237 String FormAssociatedElement::customValidationMessage() const { 236 String ListedElement::customValidationMessage() const {
238 return m_customValidationMessage; 237 return m_customValidationMessage;
239 } 238 }
240 239
241 String FormAssociatedElement::validationMessage() const { 240 String ListedElement::validationMessage() const {
242 return customError() ? m_customValidationMessage : String(); 241 return customError() ? m_customValidationMessage : String();
243 } 242 }
244 243
245 String FormAssociatedElement::validationSubMessage() const { 244 String ListedElement::validationSubMessage() const {
246 return String(); 245 return String();
247 } 246 }
248 247
249 void FormAssociatedElement::setCustomValidity(const String& error) { 248 void ListedElement::setCustomValidity(const String& error) {
250 m_customValidationMessage = error; 249 m_customValidationMessage = error;
251 } 250 }
252 251
253 void FormAssociatedElement::setFormAttributeTargetObserver( 252 void ListedElement::setFormAttributeTargetObserver(
254 FormAttributeTargetObserver* newObserver) { 253 FormAttributeTargetObserver* newObserver) {
255 if (m_formAttributeTargetObserver) 254 if (m_formAttributeTargetObserver)
256 m_formAttributeTargetObserver->unregister(); 255 m_formAttributeTargetObserver->unregister();
257 m_formAttributeTargetObserver = newObserver; 256 m_formAttributeTargetObserver = newObserver;
258 } 257 }
259 258
260 void FormAssociatedElement::resetFormAttributeTargetObserver() { 259 void ListedElement::resetFormAttributeTargetObserver() {
261 HTMLElement* element = toHTMLElement(this); 260 HTMLElement* element = toHTMLElement(this);
262 const AtomicString& formId(element->fastGetAttribute(formAttr)); 261 const AtomicString& formId(element->fastGetAttribute(formAttr));
263 if (!formId.isNull() && element->isConnected()) 262 if (!formId.isNull() && element->isConnected()) {
264 setFormAttributeTargetObserver( 263 setFormAttributeTargetObserver(
265 FormAttributeTargetObserver::create(formId, this)); 264 FormAttributeTargetObserver::create(formId, this));
266 else 265 } else {
267 setFormAttributeTargetObserver(nullptr); 266 setFormAttributeTargetObserver(nullptr);
267 }
268 } 268 }
269 269
270 void FormAssociatedElement::formAttributeTargetChanged() { 270 void ListedElement::formAttributeTargetChanged() {
271 resetFormOwner(); 271 resetFormOwner();
272 } 272 }
273 273
274 const AtomicString& FormAssociatedElement::name() const { 274 const AtomicString& ListedElement::name() const {
275 const AtomicString& name = toHTMLElement(this)->getNameAttribute(); 275 const AtomicString& name = toHTMLElement(this)->getNameAttribute();
276 return name.isNull() ? emptyAtom : name; 276 return name.isNull() ? emptyAtom : name;
277 } 277 }
278 278
279 bool FormAssociatedElement::isFormControlElementWithState() const { 279 bool ListedElement::isFormControlElementWithState() const {
280 return false; 280 return false;
281 } 281 }
282 282
283 const HTMLElement& toHTMLElement( 283 const HTMLElement& toHTMLElement(const ListedElement& associatedElement) {
tkent 2016/12/02 13:24:37 Rename this argument to listedElement.
284 const FormAssociatedElement& associatedElement) {
285 if (associatedElement.isFormControlElement()) 284 if (associatedElement.isFormControlElement())
286 return toHTMLFormControlElement(associatedElement); 285 return toHTMLFormControlElement(associatedElement);
287 return toHTMLObjectElement(associatedElement); 286 return toHTMLObjectElement(associatedElement);
288 } 287 }
289 288
290 const HTMLElement* toHTMLElement( 289 const HTMLElement* toHTMLElement(const ListedElement* associatedElement) {
tkent 2016/12/02 13:24:37 Rename this argument to listedElement.
291 const FormAssociatedElement* associatedElement) {
292 DCHECK(associatedElement); 290 DCHECK(associatedElement);
293 return &toHTMLElement(*associatedElement); 291 return &toHTMLElement(*associatedElement);
294 } 292 }
295 293
296 HTMLElement* toHTMLElement(FormAssociatedElement* associatedElement) { 294 HTMLElement* toHTMLElement(ListedElement* associatedElement) {
tkent 2016/12/02 13:24:37 Rename this argument to listedElement.
297 return const_cast<HTMLElement*>(toHTMLElement( 295 return const_cast<HTMLElement*>(
298 static_cast<const FormAssociatedElement*>(associatedElement))); 296 toHTMLElement(static_cast<const ListedElement*>(associatedElement)));
299 } 297 }
300 298
301 HTMLElement& toHTMLElement(FormAssociatedElement& associatedElement) { 299 HTMLElement& toHTMLElement(ListedElement& associatedElement) {
tkent 2016/12/02 13:24:37 Rename this argument to listedElement.
302 return const_cast<HTMLElement&>(toHTMLElement( 300 return const_cast<HTMLElement&>(
303 static_cast<const FormAssociatedElement&>(associatedElement))); 301 toHTMLElement(static_cast<const ListedElement&>(associatedElement)));
304 } 302 }
305 303
306 FormAttributeTargetObserver* FormAttributeTargetObserver::create( 304 FormAttributeTargetObserver* FormAttributeTargetObserver::create(
307 const AtomicString& id, 305 const AtomicString& id,
308 FormAssociatedElement* element) { 306 ListedElement* element) {
309 return new FormAttributeTargetObserver(id, element); 307 return new FormAttributeTargetObserver(id, element);
310 } 308 }
311 309
312 FormAttributeTargetObserver::FormAttributeTargetObserver( 310 FormAttributeTargetObserver::FormAttributeTargetObserver(const AtomicString& id,
313 const AtomicString& id, 311 ListedElement* element)
314 FormAssociatedElement* element)
315 : IdTargetObserver( 312 : IdTargetObserver(
316 toHTMLElement(element)->treeScope().idTargetObserverRegistry(), 313 toHTMLElement(element)->treeScope().idTargetObserverRegistry(),
317 id), 314 id),
318 m_element(element) {} 315 m_element(element) {}
319 316
320 DEFINE_TRACE(FormAttributeTargetObserver) { 317 DEFINE_TRACE(FormAttributeTargetObserver) {
321 visitor->trace(m_element); 318 visitor->trace(m_element);
322 IdTargetObserver::trace(visitor); 319 IdTargetObserver::trace(visitor);
323 } 320 }
324 321
325 void FormAttributeTargetObserver::idTargetChanged() { 322 void FormAttributeTargetObserver::idTargetChanged() {
326 m_element->formAttributeTargetChanged(); 323 m_element->formAttributeTargetChanged();
327 } 324 }
328 325
329 } // namespace blink 326 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698