Index: Source/core/css/invalidation/StyleInvalidator.cpp |
diff --git a/Source/core/css/invalidation/StyleInvalidator.cpp b/Source/core/css/invalidation/StyleInvalidator.cpp |
index 8d506a5a375a70a155f346b035b20d8b69c84dbb..c5c4f5f637931a10c6475ad8dc70b6b5ec5e1003 100644 |
--- a/Source/core/css/invalidation/StyleInvalidator.cpp |
+++ b/Source/core/css/invalidation/StyleInvalidator.cpp |
@@ -83,6 +83,8 @@ void StyleInvalidator::RecursionData::pushInvalidationSet(const DescendantInvali |
ASSERT(!m_wholeSubtreeInvalid); |
if (invalidationSet.treeBoundaryCrossing()) |
m_treeBoundaryCrossing = true; |
+ if (invalidationSet.insertionPointCrossing()) |
+ m_insertionPointCrossing = true; |
if (invalidationSet.wholeSubtreeInvalid()) { |
m_wholeSubtreeInvalid = true; |
return; |
@@ -100,6 +102,9 @@ ALWAYS_INLINE bool StyleInvalidator::RecursionData::matchesCurrentInvalidationSe |
return true; |
} |
+ if (m_insertionPointCrossing && element.isInsertionPoint()) |
+ return true; |
+ |
for (const auto& invalidationSet : m_invalidationSets) { |
if (invalidationSet->invalidatesElement(element)) |
return true; |
@@ -173,6 +178,12 @@ bool StyleInvalidator::invalidate(Element& element, StyleInvalidator::RecursionD |
} |
} |
+ if (recursionData.insertionPointCrossing() && element.isInsertionPoint()) { |
+ const InsertionPoint& insertionPoint = toInsertionPoint(element); |
+ for (size_t i = 0; i < insertionPoint.size(); ++i) |
esprehn
2014/10/16 02:19:06
Just set SubtreeStyleChange on the InsertionPoint
rune
2014/10/16 12:18:36
Done.
|
+ insertionPoint.at(i)->setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create(StyleChangeReason::StyleInvalidator)); |
+ } |
+ |
element.clearChildNeedsStyleInvalidation(); |
element.clearNeedsStyleInvalidation(); |