bool HTMLFormElement::checkInvalidControlsAndCollectUnhandled(Vector<RefPtr<FormAssociatedElement> >* unhandledInvalidControls, HTMLFormControlElement::CheckValidityDispatchEvents dispatchEvents) { RefPtr<HTMLFormElement> protector(this); // Copy m_associatedElements because event handlers called from // HTMLFormControlElement::checkValidity() might change m_associatedElements. Vector<RefPtr<FormAssociatedElement> > elements; elements.reserveCapacity(m_associatedElements.size()); for (unsigned i = 0; i < m_associatedElements.size(); ++i) elements.append(m_associatedElements[i]); bool hasInvalidControls = false; for (unsigned i = 0; i < elements.size(); ++i) { if (elements[i]->form() == this && elements[i]->isFormControlElement()) { HTMLFormControlElement* control = toHTMLFormControlElement(elements[i].get()); if (!control->checkValidity(unhandledInvalidControls, dispatchEvents) && control->formOwner() == this) hasInvalidControls = true; } } return hasInvalidControls; }
bool HTMLFormElement::checkInvalidControlsAndCollectUnhandled(WillBeHeapVector<RefPtrWillBeMember<HTMLFormControlElement>>* unhandledInvalidControls, CheckValidityEventBehavior eventBehavior) { RefPtrWillBeRawPtr<HTMLFormElement> protector(this); // Copy associatedElements because event handlers called from // HTMLFormControlElement::checkValidity() might change associatedElements. const FormAssociatedElement::List& associatedElements = this->associatedElements(); WillBeHeapVector<RefPtrWillBeMember<FormAssociatedElement>> elements; elements.reserveCapacity(associatedElements.size()); for (unsigned i = 0; i < associatedElements.size(); ++i) elements.append(associatedElements[i]); int invalidControlsCount = 0; for (unsigned i = 0; i < elements.size(); ++i) { if (elements[i]->form() == this && elements[i]->isFormControlElement()) { HTMLFormControlElement* control = toHTMLFormControlElement(elements[i].get()); if (control->isSubmittableElement() && !control->checkValidity(unhandledInvalidControls, eventBehavior) && control->formOwner() == this) { ++invalidControlsCount; if (!unhandledInvalidControls && eventBehavior == CheckValidityDispatchNoEvent) return true; } } } return invalidControlsCount; }