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

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

Issue 2546063002: Rename FormAssociatedElement to ListedElement (Closed)
Patch Set: Rebased 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, 2008, 2009 Apple Inc. All rights 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
6 * reserved. 6 * reserved.
7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 #include "wtf/AutoReset.h" 60 #include "wtf/AutoReset.h"
61 #include "wtf/text/AtomicString.h" 61 #include "wtf/text/AtomicString.h"
62 #include <limits> 62 #include <limits>
63 63
64 namespace blink { 64 namespace blink {
65 65
66 using namespace HTMLNames; 66 using namespace HTMLNames;
67 67
68 HTMLFormElement::HTMLFormElement(Document& document) 68 HTMLFormElement::HTMLFormElement(Document& document)
69 : HTMLElement(formTag, document), 69 : HTMLElement(formTag, document),
70 m_associatedElementsAreDirty(false), 70 m_listedElementsAreDirty(false),
71 m_imageElementsAreDirty(false), 71 m_imageElementsAreDirty(false),
72 m_hasElementsAssociatedByParser(false), 72 m_hasElementsAssociatedByParser(false),
73 m_hasElementsAssociatedByFormAttribute(false), 73 m_hasElementsAssociatedByFormAttribute(false),
74 m_didFinishParsingChildren(false), 74 m_didFinishParsingChildren(false),
75 m_isInResetFunction(false), 75 m_isInResetFunction(false),
76 m_wasDemoted(false) {} 76 m_wasDemoted(false) {}
77 77
78 HTMLFormElement* HTMLFormElement::create(Document& document) { 78 HTMLFormElement* HTMLFormElement::create(Document& document) {
79 UseCounter::count(document, UseCounter::FormElement); 79 UseCounter::count(document, UseCounter::FormElement);
80 return new HTMLFormElement(document); 80 return new HTMLFormElement(document);
81 } 81 }
82 82
83 HTMLFormElement::~HTMLFormElement() {} 83 HTMLFormElement::~HTMLFormElement() {}
84 84
85 DEFINE_TRACE(HTMLFormElement) { 85 DEFINE_TRACE(HTMLFormElement) {
86 visitor->trace(m_pastNamesMap); 86 visitor->trace(m_pastNamesMap);
87 visitor->trace(m_radioButtonGroupScope); 87 visitor->trace(m_radioButtonGroupScope);
88 visitor->trace(m_associatedElements); 88 visitor->trace(m_listedElements);
89 visitor->trace(m_imageElements); 89 visitor->trace(m_imageElements);
90 visitor->trace(m_plannedNavigation); 90 visitor->trace(m_plannedNavigation);
91 HTMLElement::trace(visitor); 91 HTMLElement::trace(visitor);
92 } 92 }
93 93
94 bool HTMLFormElement::matchesValidityPseudoClasses() const { 94 bool HTMLFormElement::matchesValidityPseudoClasses() const {
95 return true; 95 return true;
96 } 96 }
97 97
98 bool HTMLFormElement::isValidElement() { 98 bool HTMLFormElement::isValidElement() {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 void notifyFormRemovedFromTree(const T& elements, Node& root) { 147 void notifyFormRemovedFromTree(const T& elements, Node& root) {
148 for (const auto& element : elements) 148 for (const auto& element : elements)
149 element->formRemovedFromTree(root); 149 element->formRemovedFromTree(root);
150 } 150 }
151 151
152 void HTMLFormElement::removedFrom(ContainerNode* insertionPoint) { 152 void HTMLFormElement::removedFrom(ContainerNode* insertionPoint) {
153 // We don't need to take care of form association by 'form' content 153 // We don't need to take care of form association by 'form' content
154 // attribute becuse IdTargetObserver handles it. 154 // attribute becuse IdTargetObserver handles it.
155 if (m_hasElementsAssociatedByParser) { 155 if (m_hasElementsAssociatedByParser) {
156 Node& root = NodeTraversal::highestAncestorOrSelf(*this); 156 Node& root = NodeTraversal::highestAncestorOrSelf(*this);
157 if (!m_associatedElementsAreDirty) { 157 if (!m_listedElementsAreDirty) {
158 FormAssociatedElement::List elements(associatedElements()); 158 ListedElement::List elements(listedElements());
159 notifyFormRemovedFromTree(elements, root); 159 notifyFormRemovedFromTree(elements, root);
160 } else { 160 } else {
161 FormAssociatedElement::List elements; 161 ListedElement::List elements;
162 collectAssociatedElements( 162 collectlistedElements(
163 NodeTraversal::highestAncestorOrSelf(*insertionPoint), elements); 163 NodeTraversal::highestAncestorOrSelf(*insertionPoint), elements);
164 notifyFormRemovedFromTree(elements, root); 164 notifyFormRemovedFromTree(elements, root);
165 collectAssociatedElements(root, elements); 165 collectlistedElements(root, elements);
166 notifyFormRemovedFromTree(elements, root); 166 notifyFormRemovedFromTree(elements, root);
167 } 167 }
168 168
169 if (!m_imageElementsAreDirty) { 169 if (!m_imageElementsAreDirty) {
170 HeapVector<Member<HTMLImageElement>> images(imageElements()); 170 HeapVector<Member<HTMLImageElement>> images(imageElements());
171 notifyFormRemovedFromTree(images, root); 171 notifyFormRemovedFromTree(images, root);
172 } else { 172 } else {
173 HeapVector<Member<HTMLImageElement>> images; 173 HeapVector<Member<HTMLImageElement>> images;
174 collectImageElements( 174 collectImageElements(
175 NodeTraversal::highestAncestorOrSelf(*insertionPoint), images); 175 NodeTraversal::highestAncestorOrSelf(*insertionPoint), images);
(...skipping 11 matching lines...) Expand all
187 if (event.eventPhase() != Event::kCapturingPhase && targetNode && 187 if (event.eventPhase() != Event::kCapturingPhase && targetNode &&
188 targetNode != this && (event.type() == EventTypeNames::submit || 188 targetNode != this && (event.type() == EventTypeNames::submit ||
189 event.type() == EventTypeNames::reset)) { 189 event.type() == EventTypeNames::reset)) {
190 event.stopPropagation(); 190 event.stopPropagation();
191 return; 191 return;
192 } 192 }
193 HTMLElement::handleLocalEvents(event); 193 HTMLElement::handleLocalEvents(event);
194 } 194 }
195 195
196 unsigned HTMLFormElement::length() const { 196 unsigned HTMLFormElement::length() const {
197 const FormAssociatedElement::List& elements = associatedElements(); 197 const ListedElement::List& elements = listedElements();
198 unsigned len = 0; 198 unsigned len = 0;
199 for (unsigned i = 0; i < elements.size(); ++i) { 199 for (unsigned i = 0; i < elements.size(); ++i) {
200 if (elements[i]->isEnumeratable()) 200 if (elements[i]->isEnumeratable())
201 ++len; 201 ++len;
202 } 202 }
203 return len; 203 return len;
204 } 204 }
205 205
206 HTMLElement* HTMLFormElement::item(unsigned index) { 206 HTMLElement* HTMLFormElement::item(unsigned index) {
207 return elements()->item(index); 207 return elements()->item(index);
208 } 208 }
209 209
210 void HTMLFormElement::submitImplicitly(Event* event, 210 void HTMLFormElement::submitImplicitly(Event* event,
211 bool fromImplicitSubmissionTrigger) { 211 bool fromImplicitSubmissionTrigger) {
212 int submissionTriggerCount = 0; 212 int submissionTriggerCount = 0;
213 bool seenDefaultButton = false; 213 bool seenDefaultButton = false;
214 const FormAssociatedElement::List& elements = associatedElements(); 214 const ListedElement::List& elements = listedElements();
215 for (unsigned i = 0; i < elements.size(); ++i) { 215 for (unsigned i = 0; i < elements.size(); ++i) {
216 FormAssociatedElement* formAssociatedElement = elements[i]; 216 ListedElement* ListedElement = elements[i];
217 if (!formAssociatedElement->isFormControlElement()) 217 if (!ListedElement->isFormControlElement())
218 continue; 218 continue;
219 HTMLFormControlElement* control = 219 HTMLFormControlElement* control = toHTMLFormControlElement(ListedElement);
220 toHTMLFormControlElement(formAssociatedElement);
221 if (!seenDefaultButton && control->canBeSuccessfulSubmitButton()) { 220 if (!seenDefaultButton && control->canBeSuccessfulSubmitButton()) {
222 if (fromImplicitSubmissionTrigger) 221 if (fromImplicitSubmissionTrigger)
223 seenDefaultButton = true; 222 seenDefaultButton = true;
224 if (control->isSuccessfulSubmitButton()) { 223 if (control->isSuccessfulSubmitButton()) {
225 control->dispatchSimulatedClick(event); 224 control->dispatchSimulatedClick(event);
226 return; 225 return;
227 } 226 }
228 if (fromImplicitSubmissionTrigger) { 227 if (fromImplicitSubmissionTrigger) {
229 // Default (submit) button is not activated; no implicit submission. 228 // Default (submit) button is not activated; no implicit submission.
230 return; 229 return;
231 } 230 }
232 } else if (control->canTriggerImplicitSubmission()) { 231 } else if (control->canTriggerImplicitSubmission()) {
233 ++submissionTriggerCount; 232 ++submissionTriggerCount;
234 } 233 }
235 } 234 }
236 if (fromImplicitSubmissionTrigger && submissionTriggerCount == 1) 235 if (fromImplicitSubmissionTrigger && submissionTriggerCount == 1)
237 prepareForSubmission(event, nullptr); 236 prepareForSubmission(event, nullptr);
238 } 237 }
239 238
240 bool HTMLFormElement::validateInteractively() { 239 bool HTMLFormElement::validateInteractively() {
241 UseCounter::count(document(), UseCounter::FormValidationStarted); 240 UseCounter::count(document(), UseCounter::FormValidationStarted);
242 const FormAssociatedElement::List& elements = associatedElements(); 241 const ListedElement::List& elements = listedElements();
243 for (unsigned i = 0; i < elements.size(); ++i) { 242 for (unsigned i = 0; i < elements.size(); ++i) {
244 if (elements[i]->isFormControlElement()) 243 if (elements[i]->isFormControlElement())
245 toHTMLFormControlElement(elements[i])->hideVisibleValidationMessage(); 244 toHTMLFormControlElement(elements[i])->hideVisibleValidationMessage();
246 } 245 }
247 246
248 HeapVector<Member<HTMLFormControlElement>> unhandledInvalidControls; 247 HeapVector<Member<HTMLFormControlElement>> unhandledInvalidControls;
249 if (!checkInvalidControlsAndCollectUnhandled( 248 if (!checkInvalidControlsAndCollectUnhandled(
250 &unhandledInvalidControls, CheckValidityDispatchInvalidEvent)) 249 &unhandledInvalidControls, CheckValidityDispatchInvalidEvent))
251 return true; 250 return true;
252 UseCounter::count(document(), UseCounter::FormValidationAbortedSubmission); 251 UseCounter::count(document(), UseCounter::FormValidationAbortedSubmission);
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 362
364 // Delay dispatching 'close' to dialog until done submitting. 363 // Delay dispatching 'close' to dialog until done submitting.
365 EventQueueScope scopeForDialogClose; 364 EventQueueScope scopeForDialogClose;
366 AutoReset<bool> submitScope(&m_isSubmitting, true); 365 AutoReset<bool> submitScope(&m_isSubmitting, true);
367 366
368 if (event && !submitButton) { 367 if (event && !submitButton) {
369 // In a case of implicit submission without a submit button, 'submit' 368 // In a case of implicit submission without a submit button, 'submit'
370 // event handler might add a submit button. We search for a submit 369 // event handler might add a submit button. We search for a submit
371 // button again. 370 // button again.
372 // TODO(tkent): Do we really need to activate such submit button? 371 // TODO(tkent): Do we really need to activate such submit button?
373 for (const auto& associatedElement : associatedElements()) { 372 for (const auto& listedElement : listedElements()) {
374 if (!associatedElement->isFormControlElement()) 373 if (!listedElement->isFormControlElement())
375 continue; 374 continue;
376 HTMLFormControlElement* control = 375 HTMLFormControlElement* control = toHTMLFormControlElement(listedElement);
377 toHTMLFormControlElement(associatedElement);
378 DCHECK(!control->isActivatedSubmit()); 376 DCHECK(!control->isActivatedSubmit());
379 if (control->isSuccessfulSubmitButton()) { 377 if (control->isSuccessfulSubmitButton()) {
380 submitButton = control; 378 submitButton = control;
381 break; 379 break;
382 } 380 }
383 } 381 }
384 } 382 }
385 383
386 FormSubmission* formSubmission = 384 FormSubmission* formSubmission =
387 FormSubmission::create(this, m_attributes, event, submitButton); 385 FormSubmission::create(this, m_attributes, event, submitButton);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 return; 464 return;
467 465
468 m_isInResetFunction = true; 466 m_isInResetFunction = true;
469 467
470 if (dispatchEvent(Event::createCancelableBubble(EventTypeNames::reset)) != 468 if (dispatchEvent(Event::createCancelableBubble(EventTypeNames::reset)) !=
471 DispatchEventResult::NotCanceled) { 469 DispatchEventResult::NotCanceled) {
472 m_isInResetFunction = false; 470 m_isInResetFunction = false;
473 return; 471 return;
474 } 472 }
475 473
476 const FormAssociatedElement::List& elements = associatedElements(); 474 const ListedElement::List& elements = listedElements();
477 for (unsigned i = 0; i < elements.size(); ++i) { 475 for (unsigned i = 0; i < elements.size(); ++i) {
478 if (elements[i]->isFormControlElement()) 476 if (elements[i]->isFormControlElement())
479 toHTMLFormControlElement(elements[i])->reset(); 477 toHTMLFormControlElement(elements[i])->reset();
480 } 478 }
481 479
482 m_isInResetFunction = false; 480 m_isInResetFunction = false;
483 } 481 }
484 482
485 void HTMLFormElement::parseAttribute(const QualifiedName& name, 483 void HTMLFormElement::parseAttribute(const QualifiedName& name,
486 const AtomicString& oldValue, 484 const AtomicString& oldValue,
(...skipping 20 matching lines...) Expand all
507 m_attributes.updateMethodType(value); 505 m_attributes.updateMethodType(value);
508 } else if (name == enctypeAttr) { 506 } else if (name == enctypeAttr) {
509 m_attributes.updateEncodingType(value); 507 m_attributes.updateEncodingType(value);
510 } else if (name == accept_charsetAttr) { 508 } else if (name == accept_charsetAttr) {
511 m_attributes.setAcceptCharset(value); 509 m_attributes.setAcceptCharset(value);
512 } else { 510 } else {
513 HTMLElement::parseAttribute(name, oldValue, value); 511 HTMLElement::parseAttribute(name, oldValue, value);
514 } 512 }
515 } 513 }
516 514
517 void HTMLFormElement::associate(FormAssociatedElement& e) { 515 void HTMLFormElement::associate(ListedElement& e) {
518 m_associatedElementsAreDirty = true; 516 m_listedElementsAreDirty = true;
519 m_associatedElements.clear(); 517 m_listedElements.clear();
520 if (toHTMLElement(e).fastHasAttribute(formAttr)) 518 if (toHTMLElement(e).fastHasAttribute(formAttr))
521 m_hasElementsAssociatedByFormAttribute = true; 519 m_hasElementsAssociatedByFormAttribute = true;
522 } 520 }
523 521
524 void HTMLFormElement::disassociate(FormAssociatedElement& e) { 522 void HTMLFormElement::disassociate(ListedElement& e) {
525 m_associatedElementsAreDirty = true; 523 m_listedElementsAreDirty = true;
526 m_associatedElements.clear(); 524 m_listedElements.clear();
527 removeFromPastNamesMap(toHTMLElement(e)); 525 removeFromPastNamesMap(toHTMLElement(e));
528 } 526 }
529 527
530 bool HTMLFormElement::isURLAttribute(const Attribute& attribute) const { 528 bool HTMLFormElement::isURLAttribute(const Attribute& attribute) const {
531 return attribute.name() == actionAttr || 529 return attribute.name() == actionAttr ||
532 HTMLElement::isURLAttribute(attribute); 530 HTMLElement::isURLAttribute(attribute);
533 } 531 }
534 532
535 bool HTMLFormElement::hasLegalLinkAttribute(const QualifiedName& name) const { 533 bool HTMLFormElement::hasLegalLinkAttribute(const QualifiedName& name) const {
536 return name == actionAttr || HTMLElement::hasLegalLinkAttribute(name); 534 return name == actionAttr || HTMLElement::hasLegalLinkAttribute(name);
(...skipping 14 matching lines...) Expand all
551 if (!m_didFinishParsingChildren) 549 if (!m_didFinishParsingChildren)
552 return; 550 return;
553 m_hasElementsAssociatedByParser = true; 551 m_hasElementsAssociatedByParser = true;
554 UseCounter::count(document(), UseCounter::FormAssociationByParser); 552 UseCounter::count(document(), UseCounter::FormAssociationByParser);
555 } 553 }
556 554
557 HTMLFormControlsCollection* HTMLFormElement::elements() { 555 HTMLFormControlsCollection* HTMLFormElement::elements() {
558 return ensureCachedCollection<HTMLFormControlsCollection>(FormControls); 556 return ensureCachedCollection<HTMLFormControlsCollection>(FormControls);
559 } 557 }
560 558
561 void HTMLFormElement::collectAssociatedElements( 559 void HTMLFormElement::collectlistedElements(
562 Node& root, 560 Node& root,
563 FormAssociatedElement::List& elements) const { 561 ListedElement::List& elements) const {
564 elements.clear(); 562 elements.clear();
565 for (HTMLElement& element : Traversal<HTMLElement>::startsAfter(root)) { 563 for (HTMLElement& element : Traversal<HTMLElement>::startsAfter(root)) {
566 FormAssociatedElement* associatedElement = 0; 564 ListedElement* listedElement = 0;
567 if (element.isFormControlElement()) 565 if (element.isFormControlElement())
568 associatedElement = toHTMLFormControlElement(&element); 566 listedElement = toHTMLFormControlElement(&element);
569 else if (isHTMLObjectElement(element)) 567 else if (isHTMLObjectElement(element))
570 associatedElement = toHTMLObjectElement(&element); 568 listedElement = toHTMLObjectElement(&element);
571 else 569 else
572 continue; 570 continue;
573 if (associatedElement->form() == this) 571 if (listedElement->form() == this)
574 elements.append(associatedElement); 572 elements.append(listedElement);
575 } 573 }
576 } 574 }
577 575
578 // This function should be const conceptually. However we update some fields 576 // This function should be const conceptually. However we update some fields
579 // because of lazy evaluation. 577 // because of lazy evaluation.
580 const FormAssociatedElement::List& HTMLFormElement::associatedElements() const { 578 const ListedElement::List& HTMLFormElement::listedElements() const {
581 if (!m_associatedElementsAreDirty) 579 if (!m_listedElementsAreDirty)
582 return m_associatedElements; 580 return m_listedElements;
583 HTMLFormElement* mutableThis = const_cast<HTMLFormElement*>(this); 581 HTMLFormElement* mutableThis = const_cast<HTMLFormElement*>(this);
584 Node* scope = mutableThis; 582 Node* scope = mutableThis;
585 if (m_hasElementsAssociatedByParser) 583 if (m_hasElementsAssociatedByParser)
586 scope = &NodeTraversal::highestAncestorOrSelf(*mutableThis); 584 scope = &NodeTraversal::highestAncestorOrSelf(*mutableThis);
587 if (isConnected() && m_hasElementsAssociatedByFormAttribute) 585 if (isConnected() && m_hasElementsAssociatedByFormAttribute)
588 scope = &treeScope().rootNode(); 586 scope = &treeScope().rootNode();
589 DCHECK(scope); 587 DCHECK(scope);
590 collectAssociatedElements(*scope, mutableThis->m_associatedElements); 588 collectlistedElements(*scope, mutableThis->m_listedElements);
591 mutableThis->m_associatedElementsAreDirty = false; 589 mutableThis->m_listedElementsAreDirty = false;
592 return m_associatedElements; 590 return m_listedElements;
593 } 591 }
594 592
595 void HTMLFormElement::collectImageElements( 593 void HTMLFormElement::collectImageElements(
596 Node& root, 594 Node& root,
597 HeapVector<Member<HTMLImageElement>>& elements) { 595 HeapVector<Member<HTMLImageElement>>& elements) {
598 elements.clear(); 596 elements.clear();
599 for (HTMLImageElement& image : 597 for (HTMLImageElement& image :
600 Traversal<HTMLImageElement>::startsAfter(root)) { 598 Traversal<HTMLImageElement>::startsAfter(root)) {
601 if (image.formOwner() == this) 599 if (image.formOwner() == this)
602 elements.append(&image); 600 elements.append(&image);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 634
637 String HTMLFormElement::method() const { 635 String HTMLFormElement::method() const {
638 return FormSubmission::Attributes::methodString(m_attributes.method()); 636 return FormSubmission::Attributes::methodString(m_attributes.method());
639 } 637 }
640 638
641 void HTMLFormElement::setMethod(const AtomicString& value) { 639 void HTMLFormElement::setMethod(const AtomicString& value) {
642 setAttribute(methodAttr, value); 640 setAttribute(methodAttr, value);
643 } 641 }
644 642
645 HTMLFormControlElement* HTMLFormElement::findDefaultButton() const { 643 HTMLFormControlElement* HTMLFormElement::findDefaultButton() const {
646 for (const auto& element : associatedElements()) { 644 for (const auto& element : listedElements()) {
647 if (!element->isFormControlElement()) 645 if (!element->isFormControlElement())
648 continue; 646 continue;
649 HTMLFormControlElement* control = toHTMLFormControlElement(element); 647 HTMLFormControlElement* control = toHTMLFormControlElement(element);
650 if (control->canBeSuccessfulSubmitButton()) 648 if (control->canBeSuccessfulSubmitButton())
651 return control; 649 return control;
652 } 650 }
653 return nullptr; 651 return nullptr;
654 } 652 }
655 653
656 bool HTMLFormElement::checkValidity() { 654 bool HTMLFormElement::checkValidity() {
657 return !checkInvalidControlsAndCollectUnhandled( 655 return !checkInvalidControlsAndCollectUnhandled(
658 0, CheckValidityDispatchInvalidEvent); 656 0, CheckValidityDispatchInvalidEvent);
659 } 657 }
660 658
661 bool HTMLFormElement::checkInvalidControlsAndCollectUnhandled( 659 bool HTMLFormElement::checkInvalidControlsAndCollectUnhandled(
662 HeapVector<Member<HTMLFormControlElement>>* unhandledInvalidControls, 660 HeapVector<Member<HTMLFormControlElement>>* unhandledInvalidControls,
663 CheckValidityEventBehavior eventBehavior) { 661 CheckValidityEventBehavior eventBehavior) {
664 // Copy associatedElements because event handlers called from 662 // Copy listedElements because event handlers called from
665 // HTMLFormControlElement::checkValidity() might change associatedElements. 663 // HTMLFormControlElement::checkValidity() might change listedElements.
666 const FormAssociatedElement::List& associatedElements = 664 const ListedElement::List& listedElements = this->listedElements();
667 this->associatedElements(); 665 HeapVector<Member<ListedElement>> elements;
668 HeapVector<Member<FormAssociatedElement>> elements; 666 elements.reserveCapacity(listedElements.size());
669 elements.reserveCapacity(associatedElements.size()); 667 for (unsigned i = 0; i < listedElements.size(); ++i)
670 for (unsigned i = 0; i < associatedElements.size(); ++i) 668 elements.append(listedElements[i]);
671 elements.append(associatedElements[i]);
672 int invalidControlsCount = 0; 669 int invalidControlsCount = 0;
673 for (unsigned i = 0; i < elements.size(); ++i) { 670 for (unsigned i = 0; i < elements.size(); ++i) {
674 if (elements[i]->form() == this && elements[i]->isFormControlElement()) { 671 if (elements[i]->form() == this && elements[i]->isFormControlElement()) {
675 HTMLFormControlElement* control = 672 HTMLFormControlElement* control =
676 toHTMLFormControlElement(elements[i].get()); 673 toHTMLFormControlElement(elements[i].get());
677 if (control->isSubmittableElement() && 674 if (control->isSubmittableElement() &&
678 !control->checkValidity(unhandledInvalidControls, eventBehavior) && 675 !control->checkValidity(unhandledInvalidControls, eventBehavior) &&
679 control->formOwner() == this) { 676 control->formOwner() == this) {
680 ++invalidControlsCount; 677 ++invalidControlsCount;
681 if (!unhandledInvalidControls && 678 if (!unhandledInvalidControls &&
(...skipping 14 matching lines...) Expand all
696 if (pastName.isEmpty() || !m_pastNamesMap) 693 if (pastName.isEmpty() || !m_pastNamesMap)
697 return 0; 694 return 0;
698 Element* element = m_pastNamesMap->get(pastName); 695 Element* element = m_pastNamesMap->get(pastName);
699 #if DCHECK_IS_ON() 696 #if DCHECK_IS_ON()
700 if (!element) 697 if (!element)
701 return 0; 698 return 0;
702 SECURITY_DCHECK(toHTMLElement(element)->formOwner() == this); 699 SECURITY_DCHECK(toHTMLElement(element)->formOwner() == this);
703 if (isHTMLImageElement(*element)) { 700 if (isHTMLImageElement(*element)) {
704 SECURITY_DCHECK(imageElements().find(element) != kNotFound); 701 SECURITY_DCHECK(imageElements().find(element) != kNotFound);
705 } else if (isHTMLObjectElement(*element)) { 702 } else if (isHTMLObjectElement(*element)) {
706 SECURITY_DCHECK(associatedElements().find(toHTMLObjectElement(element)) != 703 SECURITY_DCHECK(listedElements().find(toHTMLObjectElement(element)) !=
707 kNotFound); 704 kNotFound);
708 } else { 705 } else {
709 SECURITY_DCHECK(associatedElements().find( 706 SECURITY_DCHECK(listedElements().find(toHTMLFormControlElement(element)) !=
710 toHTMLFormControlElement(element)) != kNotFound); 707 kNotFound);
711 } 708 }
712 #endif 709 #endif
713 return element; 710 return element;
714 } 711 }
715 712
716 void HTMLFormElement::addToPastNamesMap(Element* element, 713 void HTMLFormElement::addToPastNamesMap(Element* element,
717 const AtomicString& pastName) { 714 const AtomicString& pastName) {
718 if (pastName.isEmpty()) 715 if (pastName.isEmpty())
719 return; 716 return;
720 if (!m_pastNamesMap) 717 if (!m_pastNamesMap)
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 returnValue.setRadioNodeList(radioNodeList(name, onlyMatchImg)); 802 returnValue.setRadioNodeList(radioNodeList(name, onlyMatchImg));
806 } 803 }
807 804
808 void HTMLFormElement::setDemoted(bool demoted) { 805 void HTMLFormElement::setDemoted(bool demoted) {
809 if (demoted) 806 if (demoted)
810 UseCounter::count(document(), UseCounter::DemotedFormElement); 807 UseCounter::count(document(), UseCounter::DemotedFormElement);
811 m_wasDemoted = demoted; 808 m_wasDemoted = demoted;
812 } 809 }
813 810
814 void HTMLFormElement::invalidateDefaultButtonStyle() const { 811 void HTMLFormElement::invalidateDefaultButtonStyle() const {
815 for (const auto& control : associatedElements()) { 812 for (const auto& control : listedElements()) {
816 if (!control->isFormControlElement()) 813 if (!control->isFormControlElement())
817 continue; 814 continue;
818 if (toHTMLFormControlElement(control)->canBeSuccessfulSubmitButton()) 815 if (toHTMLFormControlElement(control)->canBeSuccessfulSubmitButton())
819 toHTMLFormControlElement(control)->pseudoStateChanged( 816 toHTMLFormControlElement(control)->pseudoStateChanged(
820 CSSSelector::PseudoDefault); 817 CSSSelector::PseudoDefault);
821 } 818 }
822 } 819 }
823 820
824 } // namespace blink 821 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698