| 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()) {
|
|
|