| Index: Source/core/html/HTMLTextAreaElement.cpp
 | 
| diff --git a/Source/core/html/HTMLTextAreaElement.cpp b/Source/core/html/HTMLTextAreaElement.cpp
 | 
| index ebf14f419e61ea7aa3d6ce74c56a2fef08f450cc..ad58a58cd51c7a586e9e05bf6ad3bff047c47055 100644
 | 
| --- a/Source/core/html/HTMLTextAreaElement.cpp
 | 
| +++ b/Source/core/html/HTMLTextAreaElement.cpp
 | 
| @@ -84,6 +84,7 @@ HTMLTextAreaElement::HTMLTextAreaElement(Document& document, HTMLFormElement* fo
 | 
|      , m_wrap(SoftWrap)
 | 
|      , m_isDirty(false)
 | 
|      , m_valueIsUpToDate(true)
 | 
| +    , m_isPlaceholderVisible(false)
 | 
|  {
 | 
|  }
 | 
|  
 | 
| @@ -274,7 +275,7 @@ void HTMLTextAreaElement::subtreeHasChanged()
 | 
|      m_valueIsUpToDate = false;
 | 
|      setNeedsValidityCheck();
 | 
|      setAutofilled(false);
 | 
| -    updatePlaceholderVisibility(false);
 | 
| +    updatePlaceholderVisibility();
 | 
|  
 | 
|      if (!focused())
 | 
|          return;
 | 
| @@ -332,7 +333,7 @@ void HTMLTextAreaElement::updateValue() const
 | 
|      const_cast<HTMLTextAreaElement*>(this)->m_valueIsUpToDate = true;
 | 
|      const_cast<HTMLTextAreaElement*>(this)->notifyFormStateChanged();
 | 
|      m_isDirty = true;
 | 
| -    const_cast<HTMLTextAreaElement*>(this)->updatePlaceholderVisibility(false);
 | 
| +    const_cast<HTMLTextAreaElement*>(this)->updatePlaceholderVisibility();
 | 
|  }
 | 
|  
 | 
|  String HTMLTextAreaElement::value() const
 | 
| @@ -384,7 +385,7 @@ void HTMLTextAreaElement::setValueCommon(const String& newValue, TextFieldEventB
 | 
|      setInnerEditorValue(m_value);
 | 
|      if (eventBehavior == DispatchNoEvent)
 | 
|          setLastChangeWasNotUserEdit();
 | 
| -    updatePlaceholderVisibility(false);
 | 
| +    updatePlaceholderVisibility();
 | 
|      setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create(StyleChangeReason::ControlValue));
 | 
|      m_suggestedValue = String();
 | 
|      setNeedsValidityCheck();
 | 
| @@ -499,7 +500,7 @@ void HTMLTextAreaElement::setSuggestedValue(const String& value)
 | 
|          setInnerEditorValue(m_suggestedValue);
 | 
|      else
 | 
|          setInnerEditorValue(m_value);
 | 
| -    updatePlaceholderVisibility(false);
 | 
| +    updatePlaceholderVisibility();
 | 
|      setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create(StyleChangeReason::ControlValue));
 | 
|  }
 | 
|  
 | 
| @@ -604,6 +605,11 @@ bool HTMLTextAreaElement::matchesReadWritePseudoClass() const
 | 
|      return !isReadOnly();
 | 
|  }
 | 
|  
 | 
| +void HTMLTextAreaElement::setPlaceholderVisibility(bool visible)
 | 
| +{
 | 
| +    m_isPlaceholderVisible = visible;
 | 
| +}
 | 
| +
 | 
|  void HTMLTextAreaElement::updatePlaceholderText()
 | 
|  {
 | 
|      HTMLElement* placeholder = placeholderElement();
 | 
| @@ -618,6 +624,7 @@ void HTMLTextAreaElement::updatePlaceholderText()
 | 
|          placeholder = newElement.get();
 | 
|          placeholder->setShadowPseudoId(AtomicString("-webkit-input-placeholder", AtomicString::ConstructFromLiteral));
 | 
|          placeholder->setAttribute(idAttr, ShadowElementNames::placeholder());
 | 
| +        placeholder->setInlineStyleProperty(CSSPropertyDisplay, isPlaceholderVisible() ? CSSValueBlock : CSSValueNone, true);
 | 
|          userAgentShadowRoot()->insertBefore(placeholder, innerEditorElement()->nextSibling());
 | 
|      }
 | 
|      placeholder->setTextContent(placeholderText);
 | 
| 
 |