| Index: third_party/WebKit/Source/core/dom/StyleEngine.cpp
 | 
| diff --git a/third_party/WebKit/Source/core/dom/StyleEngine.cpp b/third_party/WebKit/Source/core/dom/StyleEngine.cpp
 | 
| index eebbfe8ddd8d38fa8c3bf7bd635a58bdc4b23824..f6628b6448252e74358d5de8bdf1a83e0f12c688 100644
 | 
| --- a/third_party/WebKit/Source/core/dom/StyleEngine.cpp
 | 
| +++ b/third_party/WebKit/Source/core/dom/StyleEngine.cpp
 | 
| @@ -694,25 +694,27 @@ void StyleEngine::pseudoStateChangedForElement(CSSSelector::PseudoType pseudoTyp
 | 
|      m_styleInvalidator.scheduleInvalidationSetsForElement(invalidationLists, element);
 | 
|  }
 | 
|  
 | 
| -void StyleEngine::scheduleSiblingInvalidationsForElement(Element& element, ContainerNode& schedulingParent)
 | 
| +void StyleEngine::scheduleSiblingInvalidationsForElement(Element& element, ContainerNode& schedulingParent, unsigned minDirectAdjacent)
 | 
|  {
 | 
| +    DCHECK(minDirectAdjacent);
 | 
| +
 | 
|      InvalidationLists invalidationLists;
 | 
|  
 | 
|      RuleFeatureSet& ruleFeatureSet = ensureResolver().ensureUpdatedRuleFeatureSet();
 | 
|  
 | 
|      if (element.hasID())
 | 
| -        ruleFeatureSet.collectSiblingInvalidationSetForId(invalidationLists, element, element.idForStyleResolution());
 | 
| +        ruleFeatureSet.collectSiblingInvalidationSetForId(invalidationLists, element, element.idForStyleResolution(), minDirectAdjacent);
 | 
|  
 | 
|      if (element.hasClass()) {
 | 
|          const SpaceSplitString& classNames = element.classNames();
 | 
|          for (size_t i = 0; i < classNames.size(); i++)
 | 
| -            ruleFeatureSet.collectSiblingInvalidationSetForClass(invalidationLists, element, classNames[i]);
 | 
| +            ruleFeatureSet.collectSiblingInvalidationSetForClass(invalidationLists, element, classNames[i], minDirectAdjacent);
 | 
|      }
 | 
|  
 | 
|      for (const Attribute& attribute : element.attributes())
 | 
| -        ruleFeatureSet.collectSiblingInvalidationSetForAttribute(invalidationLists, element, attribute.name());
 | 
| +        ruleFeatureSet.collectSiblingInvalidationSetForAttribute(invalidationLists, element, attribute.name(), minDirectAdjacent);
 | 
|  
 | 
| -    ruleFeatureSet.collectUniversalSiblingInvalidationSet(invalidationLists);
 | 
| +    ruleFeatureSet.collectUniversalSiblingInvalidationSet(invalidationLists, minDirectAdjacent);
 | 
|  
 | 
|      m_styleInvalidator.scheduleSiblingInvalidationsAsDescendants(invalidationLists, schedulingParent);
 | 
|  }
 | 
| @@ -725,10 +727,10 @@ void StyleEngine::scheduleInvalidationsForInsertedSibling(Element* beforeElement
 | 
|      if (!schedulingParent)
 | 
|          return;
 | 
|  
 | 
| -    scheduleSiblingInvalidationsForElement(insertedElement, *schedulingParent);
 | 
| +    scheduleSiblingInvalidationsForElement(insertedElement, *schedulingParent, 1);
 | 
|  
 | 
| -    for (unsigned i = 0; beforeElement && i < affectedSiblings; i++, beforeElement = ElementTraversal::previousSibling(*beforeElement))
 | 
| -        scheduleSiblingInvalidationsForElement(*beforeElement, *schedulingParent);
 | 
| +    for (unsigned i = 1; beforeElement && i <= affectedSiblings; i++, beforeElement = ElementTraversal::previousSibling(*beforeElement))
 | 
| +        scheduleSiblingInvalidationsForElement(*beforeElement, *schedulingParent, i);
 | 
|  }
 | 
|  
 | 
|  void StyleEngine::scheduleInvalidationsForRemovedSibling(Element* beforeElement, Element& removedElement, Element& afterElement)
 | 
| @@ -739,10 +741,10 @@ void StyleEngine::scheduleInvalidationsForRemovedSibling(Element* beforeElement,
 | 
|      if (!schedulingParent)
 | 
|          return;
 | 
|  
 | 
| -    scheduleSiblingInvalidationsForElement(removedElement, *schedulingParent);
 | 
| +    scheduleSiblingInvalidationsForElement(removedElement, *schedulingParent, 1);
 | 
|  
 | 
| -    for (unsigned i = 1; beforeElement && i < affectedSiblings; i++, beforeElement = ElementTraversal::previousSibling(*beforeElement))
 | 
| -        scheduleSiblingInvalidationsForElement(*beforeElement, *schedulingParent);
 | 
| +    for (unsigned i = 2; beforeElement && i <= affectedSiblings; i++, beforeElement = ElementTraversal::previousSibling(*beforeElement))
 | 
| +        scheduleSiblingInvalidationsForElement(*beforeElement, *schedulingParent, i);
 | 
|  }
 | 
|  
 | 
|  void StyleEngine::setStatsEnabled(bool enabled)
 | 
| 
 |