Index: Source/core/html/HTMLFormControlElement.cpp |
diff --git a/Source/core/html/HTMLFormControlElement.cpp b/Source/core/html/HTMLFormControlElement.cpp |
index 7d15a19bcb726573a988af020ccc734aca3fa127..3ad09c1b9ffe14b63973f60877eb318aad4bf0be 100644 |
--- a/Source/core/html/HTMLFormControlElement.cpp |
+++ b/Source/core/html/HTMLFormControlElement.cpp |
@@ -58,6 +58,7 @@ HTMLFormControlElement::HTMLFormControlElement(const QualifiedName& tagName, Doc |
, m_willValidateInitialized(false) |
, m_willValidate(true) |
, m_isValid(true) |
+ , m_validityIsDirty(true) |
, m_wasChangedSinceLastFormControlChangeEvent(false) |
, m_wasFocusedByMouse(false) |
{ |
@@ -473,20 +474,24 @@ bool HTMLFormControlElement::checkValidity(WillBeHeapVector<RefPtrWillBeMember<F |
bool HTMLFormControlElement::isValidFormControlElement() |
{ |
- // If the following assertion fails, setNeedsValidityCheck() is not called |
- // correctly when something which changes validity is updated. |
- ASSERT(m_isValid == valid()); |
+ if (m_validityIsDirty) { |
+ m_isValid = valid(); |
+ m_validityIsDirty = false; |
+ } else { |
+ // If the following assertion fails, setNeedsValidityCheck() is not called |
+ // correctly when something which changes validity is updated. |
+ ASSERT(m_isValid == valid()); |
+ } |
return m_isValid; |
} |
void HTMLFormControlElement::setNeedsValidityCheck() |
{ |
- bool newIsValid = valid(); |
- if (willValidate() && newIsValid != m_isValid) { |
+ if (!m_validityIsDirty && willValidate()) { |
// Update style for pseudo classes such as :valid :invalid. |
setNeedsStyleRecalc(SubtreeStyleChange); |
+ m_validityIsDirty = true; |
} |
- m_isValid = newIsValid; |
// Updates only if this control already has a validation message. |
if (isValidationMessageVisible()) { |