Index: third_party/WebKit/Source/core/layout/LayoutObject.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp |
index 7bacec1713b10ba2ba8c418a59bbb52f9ea2f944..b0158df2a099dda2911936ae9fcd406d0af6ac73 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp |
@@ -759,10 +759,24 @@ static inline bool objectIsRelayoutBoundary(const LayoutObject* object) |
return true; |
} |
+void LayoutObject::markContainerChainForLayout(bool scheduleRelayout) |
+{ |
+ markContainerChainForLayout(scheduleRelayout, nullptr); |
+} |
+ |
+void LayoutObject::markContainerChainForLayout(SubtreeLayoutScope* layouter) |
+{ |
+ // When we have a layouter, it means that we're in layout and we're marking |
+ // a descendant as needing layout with the intention of visiting it during |
+ // this layout. We shouldn't be scheduling it to be laid out later. |
+ markContainerChainForLayout(!layouter, layouter); |
+} |
+ |
void LayoutObject::markContainerChainForLayout(bool scheduleRelayout, SubtreeLayoutScope* layouter) |
{ |
ASSERT(!isSetNeedsLayoutForbidden()); |
ASSERT(!layouter || this != layouter->root()); |
+ ASSERT(!scheduleRelayout || !layouter); |
LayoutObject* object = container(); |
LayoutObject* last = this; |