Diff
Modified: trunk/LayoutTests/ChangeLog (293645 => 293646)
--- trunk/LayoutTests/ChangeLog 2022-04-30 13:11:23 UTC (rev 293645)
+++ trunk/LayoutTests/ChangeLog 2022-04-30 15:30:19 UTC (rev 293646)
@@ -1,5 +1,16 @@
2022-04-30 Alan Bujtas <za...@apple.com>
+ ASSERTION FAILED: *trailingRunIndex >= overflowingRunIndex in WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns
+ https://bugs.webkit.org/show_bug.cgi?id=239838
+ <rdar://problem/92455051>
+
+ Reviewed by Antti Koivisto.
+
+ * fast/inline/overflowing-content-inside-inline-box-crash-expected.txt: Added.
+ * fast/inline/overflowing-content-inside-inline-box-crash.html: Added.
+
+2022-04-30 Alan Bujtas <za...@apple.com>
+
[LFC][IFC] Do not wrap </span> to the next line when it is preceded by overflowing text
https://bugs.webkit.org/show_bug.cgi?id=239879
<rdar://problem/92497176>
Added: trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash-expected.txt (0 => 293646)
--- trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash-expected.txt 2022-04-30 15:30:19 UTC (rev 293646)
@@ -0,0 +1 @@
+PASSif no crash or ASSERT.
Added: trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash.html (0 => 293646)
--- trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash.html (rev 0)
+++ trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash.html 2022-04-30 15:30:19 UTC (rev 293646)
@@ -0,0 +1,15 @@
+<style>
+div {
+ position: absolute;
+ word-break: break-word;
+}
+
+.second_inline_box {
+ margin-left: 1px;
+}
+</style>
+<div><span>PASS</span><span class=second_inline_box>if no crash or ASSERT.</span></div>
+<script>
+if (window.testRunner)
+ testRunner.dumpAsText();
+</script>
\ No newline at end of file
Modified: trunk/Source/WebCore/ChangeLog (293645 => 293646)
--- trunk/Source/WebCore/ChangeLog 2022-04-30 13:11:23 UTC (rev 293645)
+++ trunk/Source/WebCore/ChangeLog 2022-04-30 15:30:19 UTC (rev 293646)
@@ -1,5 +1,23 @@
2022-04-30 Alan Bujtas <za...@apple.com>
+ ASSERTION FAILED: *trailingRunIndex >= overflowingRunIndex in WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns
+ https://bugs.webkit.org/show_bug.cgi?id=239838
+ <rdar://problem/92455051>
+
+ Reviewed by Antti Koivisto.
+
+ Take partial text overflow into account when computing intrinsic width.
+
+ Test: fast/inline/overflowing-content-inside-inline-box-crash.html
+
+ * layout/formattingContexts/inline/InlineFormattingContext.cpp:
+ (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
+ * layout/formattingContexts/inline/InlineLineBuilder.cpp:
+ (WebCore::Layout::LineBuilder::computedIntrinsicWidth):
+ * layout/formattingContexts/inline/InlineLineBuilder.h:
+
+2022-04-30 Alan Bujtas <za...@apple.com>
+
[LFC][IFC] Introduce LineBuilder::PartialContent
https://bugs.webkit.org/show_bug.cgi?id=239886
Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp (293645 => 293646)
--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp 2022-04-30 13:11:23 UTC (rev 293645)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp 2022-04-30 15:30:19 UTC (rev 293646)
@@ -432,9 +432,10 @@
auto previousLine = std::optional<LineBuilder::PreviousLine> { };
while (!layoutRange.isEmpty()) {
auto intrinsicContent = lineBuilder.computedIntrinsicWidth(layoutRange, previousLine);
- layoutRange.start = intrinsicContent.inlineItemRange.end;
maximumLineWidth = std::max(maximumLineWidth, intrinsicContent.logicalWidth);
- previousLine = LineBuilder::PreviousLine { };
+
+ layoutRange.start = !intrinsicContent.partialOverflowingContent ? intrinsicContent.inlineItemRange.end : intrinsicContent.inlineItemRange.end - 1;
+ previousLine = LineBuilder::PreviousLine { intrinsicContent.inlineItemRange, { }, { }, intrinsicContent.partialOverflowingContent };
// FIXME: Add support for clear.
for (auto* floatBox : intrinsicContent.floats)
maximumFloatWidth += geometryForBox(*floatBox).marginBoxWidth();
Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp (293645 => 293646)
--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp 2022-04-30 13:11:23 UTC (rev 293645)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp 2022-04-30 15:30:19 UTC (rev 293646)
@@ -407,7 +407,10 @@
auto committedContent = placeInlineContent(needsLayoutRange);
auto committedRange = close(needsLayoutRange, committedContent);
auto lineWidth = lineConstraints.logicalRect.left() + lineConstraints.marginStart + m_line.contentLogicalWidth();
- return { committedRange, lineWidth, m_floats };
+ auto overflow = std::optional<PartialContent> { };
+ if (committedContent.partialTrailingContentLength)
+ overflow = { committedContent.partialTrailingContentLength, committedContent.overflowLogicalWidth };
+ return { committedRange, lineWidth, overflow, m_floats };
}
void LineBuilder::initialize(const UsedConstraints& lineConstraints, size_t leadingInlineItemIndex, const std::optional<PreviousLine>& previousLine)
Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h (293645 => 293646)
--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h 2022-04-30 13:11:23 UTC (rev 293645)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h 2022-04-30 15:30:19 UTC (rev 293646)
@@ -62,7 +62,7 @@
TextDirection inlineBaseDirection { TextDirection::LTR };
std::optional<PartialContent> partialOverflowingContent { };
// Content width measured during line breaking (avoid double-measuring).
- std::optional<InlineLayoutUnit> trailingOverflowingContentWidth;
+ std::optional<InlineLayoutUnit> trailingOverflowingContentWidth { };
};
using FloatList = Vector<const Box*>;
struct LineContent {
@@ -88,6 +88,7 @@
struct IntrinsicContent {
InlineItemRange inlineItemRange;
InlineLayoutUnit logicalWidth { 0 };
+ std::optional<PartialContent> partialOverflowingContent { };
const FloatList& floats;
};
IntrinsicContent computedIntrinsicWidth(const InlineItemRange&, const std::optional<PreviousLine>&);