| Index: third_party/WebKit/Source/core/dom/Element.cpp
 | 
| diff --git a/third_party/WebKit/Source/core/dom/Element.cpp b/third_party/WebKit/Source/core/dom/Element.cpp
 | 
| index 945e0dc673290e2e4f6a04363892934c68ea2543..84b31061660b3108736725d30454336f75a88c8b 100644
 | 
| --- a/third_party/WebKit/Source/core/dom/Element.cpp
 | 
| +++ b/third_party/WebKit/Source/core/dom/Element.cpp
 | 
| @@ -1808,30 +1808,32 @@ void Element::detachLayoutTree(const AttachContext& context) {
 | 
|    DCHECK(needsAttach());
 | 
|  }
 | 
|  
 | 
| -bool Element::pseudoStyleCacheIsInvalid(const ComputedStyle* currentStyle,
 | 
| +void Element::pseudoStyleCacheIsInvalid(const ComputedStyle* currentStyle,
 | 
|                                          ComputedStyle* newStyle) {
 | 
| +  // TODO(rune@opera.com): This method does not take into account pseudo style
 | 
| +  // which is only present for the newStyle. Also the first-line part should
 | 
| +  // probably be moved to where we handle visual invalidation diff for setStyle.
 | 
| +  // setHasPseudoStyle() calls are probably unnecessary.
 | 
|    DCHECK_EQ(currentStyle, computedStyle());
 | 
|    DCHECK(layoutObject());
 | 
|  
 | 
|    if (!currentStyle)
 | 
| -    return false;
 | 
| +    return;
 | 
|  
 | 
|    const PseudoStyleCache* pseudoStyleCache = currentStyle->cachedPseudoStyles();
 | 
|    if (!pseudoStyleCache)
 | 
| -    return false;
 | 
| +    return;
 | 
|  
 | 
|    size_t cacheSize = pseudoStyleCache->size();
 | 
|    for (size_t i = 0; i < cacheSize; ++i) {
 | 
|      RefPtr<ComputedStyle> newPseudoStyle;
 | 
|      RefPtr<ComputedStyle> oldPseudoStyle = pseudoStyleCache->at(i);
 | 
|      PseudoId pseudoId = oldPseudoStyle->styleType();
 | 
| -    if (pseudoId == PseudoIdFirstLine || pseudoId == PseudoIdFirstLineInherited)
 | 
| -      newPseudoStyle = layoutObject()->uncachedFirstLineStyle(newStyle);
 | 
| -    else
 | 
| -      newPseudoStyle = layoutObject()->getUncachedPseudoStyle(
 | 
| -          PseudoStyleRequest(pseudoId), newStyle, newStyle);
 | 
| +    if (pseudoId != PseudoIdFirstLine && pseudoId != PseudoIdFirstLineInherited)
 | 
| +      continue;
 | 
| +    newPseudoStyle = layoutObject()->uncachedFirstLineStyle(newStyle);
 | 
|      if (!newPseudoStyle)
 | 
| -      return true;
 | 
| +      continue;
 | 
|      if (*oldPseudoStyle != *newPseudoStyle ||
 | 
|          oldPseudoStyle->font().loadingCustomFonts() !=
 | 
|              newPseudoStyle->font().loadingCustomFonts()) {
 | 
| @@ -1839,13 +1841,12 @@ bool Element::pseudoStyleCacheIsInvalid(const ComputedStyle* currentStyle,
 | 
|          newStyle->setHasPseudoStyle(pseudoId);
 | 
|        newStyle->addCachedPseudoStyle(newPseudoStyle);
 | 
|        if (pseudoId == PseudoIdFirstLine ||
 | 
| -          pseudoId == PseudoIdFirstLineInherited)
 | 
| +          pseudoId == PseudoIdFirstLineInherited) {
 | 
|          layoutObject()->firstLineStyleDidChange(*oldPseudoStyle,
 | 
|                                                  *newPseudoStyle);
 | 
| -      return true;
 | 
| +      }
 | 
|      }
 | 
|    }
 | 
| -  return false;
 | 
|  }
 | 
|  
 | 
|  PassRefPtr<ComputedStyle> Element::styleForLayoutObject() {
 | 
| @@ -2032,8 +2033,8 @@ StyleRecalcChange Element::recalcOwnStyle(StyleRecalcChange change,
 | 
|      updateCallbackSelectors(oldStyle.get(), newStyle.get());
 | 
|  
 | 
|    if (LayoutObject* layoutObject = this->layoutObject()) {
 | 
| -    if (localChange != NoChange ||
 | 
| -        pseudoStyleCacheIsInvalid(oldStyle.get(), newStyle.get())) {
 | 
| +    if (localChange != NoChange) {
 | 
| +      pseudoStyleCacheIsInvalid(oldStyle.get(), newStyle.get());
 | 
|        layoutObject->setStyle(newStyle.get());
 | 
|      } else {
 | 
|        // Although no change occurred, we use the new style so that the cousin
 | 
| 
 |