[LFC][Integration] Layout test assert and crash fixes
https://bugs.webkit.org/show_bug.cgi?id=204982
Reviewed by Zalan Bujtas.
* layout/integration/LayoutIntegrationLineLayout.cpp:
(WebCore::LayoutIntegration::LineLayout::firstLineBaseline const):
(WebCore::LayoutIntegration::LineLayout::lastLineBaseline const):
(WebCore::LayoutIntegration::LineLayout::textBoxesFor const):
Don't 0-initialize Optional.
* layout/integration/LayoutIntegrationLineLayout.h:
* layout/layouttree/LayoutTreeBuilder.cpp:
(WebCore::Layout::TreeBuilder::createLayoutBox):
Remember to add line break renderer to the renderer->layout box map.
* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::markLinesDirtyInBlockRange):
Invalidate layout path with LFC.
(WebCore::RenderBlockFlow::firstLineBaseline const):
(WebCore::RenderBlockFlow::inlineBlockBaseline const):
Call LFC baseline functions.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@253251 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/rendering/RenderBlockFlow.cpp b/Source/WebCore/rendering/RenderBlockFlow.cpp
index d973bee..f215509 100644
--- a/Source/WebCore/rendering/RenderBlockFlow.cpp
+++ b/Source/WebCore/rendering/RenderBlockFlow.cpp
@@ -3050,12 +3050,19 @@
if (logicalTop >= logicalBottom)
return;
- // Floats currently affect the choice whether to use simple line layout path.
+ // Floats currently affect the choice of layout path.
if (simpleLineLayout()) {
invalidateLineLayoutPath();
return;
}
+#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
+ if (layoutFormattingContextLineLayout()) {
+ invalidateLineLayoutPath();
+ return;
+ }
+#endif
+
RootInlineBox* lowestDirtyLine = lastRootBox();
RootInlineBox* afterLowest = lowestDirtyLine;
while (lowestDirtyLine && lowestDirtyLine->lineBottomWithLeading() >= logicalBottom && logicalBottom < LayoutUnit::max()) {
@@ -3080,8 +3087,13 @@
if (!hasLines())
return WTF::nullopt;
- if (auto simpleLineLayout = this->simpleLineLayout())
- return Optional<int>(SimpleLineLayout::computeFlowFirstLineBaseline(*this, *simpleLineLayout));
+#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
+ if (layoutFormattingContextLineLayout())
+ return floorToInt(layoutFormattingContextLineLayout()->firstLineBaseline());
+#endif
+
+ if (simpleLineLayout())
+ return { SimpleLineLayout::computeFlowFirstLineBaseline(*this, *simpleLineLayout()) };
ASSERT(firstRootBox());
if (style().isFlippedLinesWritingMode())
@@ -3112,8 +3124,12 @@
+ (lineDirection == HorizontalLine ? borderTop() + paddingTop() : borderRight() + paddingRight()));
}
- if (auto simpleLineLayout = this->simpleLineLayout())
- lastBaseline = SimpleLineLayout::computeFlowLastLineBaseline(*this, *simpleLineLayout);
+ if (simpleLineLayout())
+ lastBaseline = SimpleLineLayout::computeFlowLastLineBaseline(*this, *simpleLineLayout());
+#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
+ else if (layoutFormattingContextLineLayout())
+ lastBaseline = floorToInt(layoutFormattingContextLineLayout()->lastLineBaseline());
+#endif
else {
bool isFirstLine = lastRootBox() == firstRootBox();
const auto& style = isFirstLine ? firstLineStyle() : this->style();