void RadioButtonGroup::remove(HTMLInputElement* button) { DCHECK_EQ(button->type(), InputTypeNames::radio); auto it = m_members.find(button); if (it == m_members.end()) return; bool wasValid = isValid(); DCHECK_EQ(it->value, button->isRequired()); updateRequiredButton(*it, false); m_members.remove(it); if (m_checkedButton == button) m_checkedButton = nullptr; if (m_members.isEmpty()) { DCHECK(!m_requiredCount); DCHECK(!m_checkedButton); } else if (wasValid != isValid()) { setNeedsValidityCheckForAllButtons(); } if (!wasValid) { // A radio button not in a group is always valid. We need to make it // valid only if the group was invalid. button->setNeedsValidityCheck(); } // Send notification to update AX attributes for AXObjects which radiobutton // group has. if (!m_members.isEmpty()) { HTMLInputElement* input = m_members.begin()->key; if (AXObjectCache* cache = input->document().existingAXObjectCache()) cache->radiobuttonRemovedFromGroup(input); } }
void RadioButtonGroup::requiredAttributeChanged(HTMLInputElement* button) { DCHECK_EQ(button->type(), InputTypeNames::radio); auto it = m_members.find(button); DCHECK_NE(it, m_members.end()); bool wasValid = isValid(); // Synchronize the 'required' flag for the button, along with // updating the overall count. updateRequiredButton(*it, button->isRequired()); if (wasValid != isValid()) setNeedsValidityCheckForAllButtons(); }