Chromium Code Reviews| Index: Source/core/html/HTMLFormControlElement.cpp |
| diff --git a/Source/core/html/HTMLFormControlElement.cpp b/Source/core/html/HTMLFormControlElement.cpp |
| index d0b933ef8e7678445183ffcec72a861ebe09657c..a2836e266ee9e328509971e77e6789f997a31834 100644 |
| --- a/Source/core/html/HTMLFormControlElement.cpp |
| +++ b/Source/core/html/HTMLFormControlElement.cpp |
| @@ -253,11 +253,13 @@ Node::InsertionNotificationRequest HTMLFormControlElement::insertedInto(Containe |
| setNeedsWillValidateCheck(); |
| HTMLElement::insertedInto(insertionPoint); |
| FormAssociatedElement::insertedInto(insertionPoint); |
| + fieldSetAncestorsSetNeedsValidityCheck(insertionPoint); |
| return InsertionDone; |
| } |
| void HTMLFormControlElement::removedFrom(ContainerNode* insertionPoint) |
| { |
| + fieldSetAncestorsSetNeedsValidityCheck(insertionPoint); |
| hideVisibleValidationMessage(); |
| m_hasValidationMessage = false; |
| m_ancestorDisabledState = AncestorDisabledStateUnknown; |
| @@ -285,6 +287,20 @@ void HTMLFormControlElement::formOwnerSetNeedsValidityCheck() |
| form->setNeedsValidityCheck(); |
| } |
| +void HTMLFormControlElement::fieldSetAncestorsSetNeedsValidityCheck(Node* node) |
| +{ |
| + if (!node) |
| + return; |
| + HTMLFieldSetElement* fieldSet = Traversal<HTMLFieldSetElement>::firstAncestorOrSelf(*node); |
| + HTMLFieldSetElement* lastFieldSet = 0; |
| + while (fieldSet) { |
| + lastFieldSet = fieldSet; |
| + fieldSet = Traversal<HTMLFieldSetElement>::firstAncestor(*fieldSet); |
| + } |
| + if (lastFieldSet) |
| + lastFieldSet->setNeedsValidityCheck(); |
| +} |
| + |
| void HTMLFormControlElement::setChangedSinceLastFormControlChangeEvent(bool changed) |
| { |
| m_wasChangedSinceLastFormControlChangeEvent = changed; |
| @@ -519,6 +535,7 @@ void HTMLFormControlElement::setNeedsValidityCheck() |
| bool newIsValid = valid(); |
| if (willValidate() && newIsValid != m_isValid) { |
| formOwnerSetNeedsValidityCheck(); |
| + fieldSetAncestorsSetNeedsValidityCheck(this->parentNode()); |
|
tkent
2014/10/19 23:56:40
|this->| is unnecessary.
I'm afraid this causes a
Bartek Nowierski
2014/10/20 10:43:10
Done.
|
| // Update style for pseudo classes such as :valid :invalid. |
| setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::createWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Invalid)); |
| } |