void HTMLFormElement::broadcastFormEvent(const AtomicString& eventName) { RefPtr<HTMLFormElement> protector(this); // Copy m_associatedElements because event handlers called from // formElement->dispatchEvent() might change m_associatedElements. Vector<RefPtr<FormAssociatedElement> > elements; elements.reserveCapacity(m_associatedElements.size()); for (unsigned i = 0; i < m_associatedElements.size(); ++i) { if (!m_associatedElements[i]->isResettable()) continue; elements.append(m_associatedElements[i]); } for (unsigned i = 0; i < elements.size(); ++i) { // We can assume a resettable control is always a HTMLFormControlElement. // FIXME: We should handle resettable non-HTMLFormControlElements maybe in the future. ASSERT(elements[i]->isFormControlElement()); HTMLFormControlElement* formElement = static_cast<HTMLFormControlElement*>(elements[i].get()); if (!formElement->dispatchEvent(Event::create(eventName, false, false))) continue; } }