| Index: Source/core/html/HTMLFormControlElement.cpp
 | 
| diff --git a/Source/core/html/HTMLFormControlElement.cpp b/Source/core/html/HTMLFormControlElement.cpp
 | 
| index 3ad09c1b9ffe14b63973f60877eb318aad4bf0be..7d15a19bcb726573a988af020ccc734aca3fa127 100644
 | 
| --- a/Source/core/html/HTMLFormControlElement.cpp
 | 
| +++ b/Source/core/html/HTMLFormControlElement.cpp
 | 
| @@ -58,7 +58,6 @@
 | 
|      , m_willValidateInitialized(false)
 | 
|      , m_willValidate(true)
 | 
|      , m_isValid(true)
 | 
| -    , m_validityIsDirty(true)
 | 
|      , m_wasChangedSinceLastFormControlChangeEvent(false)
 | 
|      , m_wasFocusedByMouse(false)
 | 
|  {
 | 
| @@ -474,24 +473,20 @@
 | 
|  
 | 
|  bool HTMLFormControlElement::isValidFormControlElement()
 | 
|  {
 | 
| -    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());
 | 
| -    }
 | 
| +    // 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()
 | 
|  {
 | 
| -    if (!m_validityIsDirty && willValidate()) {
 | 
| +    bool newIsValid = valid();
 | 
| +    if (willValidate() && newIsValid != m_isValid) {
 | 
|          // 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()) {
 | 
| 
 |