| Index: Source/core/css/resolver/StyleResolver.cpp
 | 
| diff --git a/Source/core/css/resolver/StyleResolver.cpp b/Source/core/css/resolver/StyleResolver.cpp
 | 
| index b3702d1d7c405ff6df17fe01bed1f3c0fb81309e..bc5fca1534bf4aefabc82f57f5aa1ba001ea4108 100644
 | 
| --- a/Source/core/css/resolver/StyleResolver.cpp
 | 
| +++ b/Source/core/css/resolver/StyleResolver.cpp
 | 
| @@ -68,7 +68,6 @@
 | 
|  #include "core/css/resolver/StyleResolverStats.h"
 | 
|  #include "core/css/resolver/ViewportStyleResolver.h"
 | 
|  #include "core/dom/CSSSelectorWatch.h"
 | 
| -#include "core/dom/FirstLetterPseudoElement.h"
 | 
|  #include "core/dom/NodeRenderStyle.h"
 | 
|  #include "core/dom/StyleEngine.h"
 | 
|  #include "core/dom/Text.h"
 | 
| @@ -734,30 +733,18 @@ PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap
 | 
|      return CSSAnimatableValueFactory::create(property, *state.style());
 | 
|  }
 | 
|  
 | 
| -PassRefPtrWillBeRawPtr<PseudoElement> StyleResolver::createPseudoElement(Element* parent, PseudoId pseudoId)
 | 
| -{
 | 
| -    if (pseudoId == FIRST_LETTER)
 | 
| -        return FirstLetterPseudoElement::create(parent);
 | 
| -    return PseudoElement::create(parent, pseudoId);
 | 
| -}
 | 
| -
 | 
|  PassRefPtrWillBeRawPtr<PseudoElement> StyleResolver::createPseudoElementIfNeeded(Element& parent, PseudoId pseudoId)
 | 
|  {
 | 
|      RenderObject* parentRenderer = parent.renderer();
 | 
|      if (!parentRenderer)
 | 
|          return nullptr;
 | 
|  
 | 
| -    // The first letter pseudo element has to look up the tree and see if any
 | 
| -    // of the ancestors are first letter.
 | 
| -    if (pseudoId < FIRST_INTERNAL_PSEUDOID && pseudoId != FIRST_LETTER && !parentRenderer->style()->hasPseudoStyle(pseudoId))
 | 
| +    if (pseudoId < FIRST_INTERNAL_PSEUDOID && !parentRenderer->style()->hasPseudoStyle(pseudoId))
 | 
|          return nullptr;
 | 
|  
 | 
|      if (pseudoId == BACKDROP && !parent.isInTopLayer())
 | 
|          return nullptr;
 | 
|  
 | 
| -    if (pseudoId == FIRST_LETTER && (parent.isSVGElement() || !FirstLetterPseudoElement::firstLetterTextRenderer(parent)))
 | 
| -        return nullptr;
 | 
| -
 | 
|      if (!parentRenderer->canHaveGeneratedChildren())
 | 
|          return nullptr;
 | 
|  
 | 
| @@ -765,7 +752,7 @@ PassRefPtrWillBeRawPtr<PseudoElement> StyleResolver::createPseudoElementIfNeeded
 | 
|      if (RenderStyle* cachedStyle = parentStyle->getCachedPseudoStyle(pseudoId)) {
 | 
|          if (!pseudoElementRendererIsNeeded(cachedStyle))
 | 
|              return nullptr;
 | 
| -        return createPseudoElement(&parent, pseudoId);
 | 
| +        return PseudoElement::create(&parent, pseudoId);
 | 
|      }
 | 
|  
 | 
|      StyleResolverState state(document(), &parent, parentStyle);
 | 
| @@ -778,7 +765,7 @@ PassRefPtrWillBeRawPtr<PseudoElement> StyleResolver::createPseudoElementIfNeeded
 | 
|      if (!pseudoElementRendererIsNeeded(style.get()))
 | 
|          return nullptr;
 | 
|  
 | 
| -    RefPtrWillBeRawPtr<PseudoElement> pseudo = createPseudoElement(&parent, pseudoId);
 | 
| +    RefPtrWillBeRawPtr<PseudoElement> pseudo = PseudoElement::create(&parent, pseudoId);
 | 
|  
 | 
|      setAnimationUpdateIfNeeded(state, *pseudo);
 | 
|      if (ActiveAnimations* activeAnimations = pseudo->activeAnimations())
 | 
| 
 |