Unreviewed, rolling out r254780.
https://bugs.webkit.org/show_bug.cgi?id=206472
fast/css/content/content-none.html asserts in
LineBuilder::CollapsibleContent::collapse() (Requested by
zalan on #webkit).
Reverted changeset:
"[LFC][IFC] Do not construct a dedicated run for the trailing
(fully) collapsed whitespace."
https://bugs.webkit.org/show_bug.cgi?id=206428
https://trac.webkit.org/changeset/254780
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@254794 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 645a714..d3e84df 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,19 @@
+2020-01-18 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r254780.
+ https://bugs.webkit.org/show_bug.cgi?id=206472
+
+ fast/css/content/content-none.html asserts in
+ LineBuilder::CollapsibleContent::collapse() (Requested by
+ zalan on #webkit).
+
+ Reverted changeset:
+
+ "[LFC][IFC] Do not construct a dedicated run for the trailing
+ (fully) collapsed whitespace."
+ https://bugs.webkit.org/show_bug.cgi?id=206428
+ https://trac.webkit.org/changeset/254780
+
2020-01-17 Cathie Chen <cathiechen@igalia.com>
Add support for scroll behavior parsing
diff --git a/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp b/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp
index 054b5dc4..0896972 100644
--- a/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp
+++ b/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp
@@ -47,15 +47,13 @@
if (run.isContainerEnd() || layoutBox.style().verticalAlign() != VerticalAlign::Baseline)
continue;
+ if (run.isLineBreak())
+ return false;
if (run.isText()) {
if (!run.isCollapsedToVisuallyEmpty())
return false;
continue;
}
-
- if (run.isLineBreak())
- return false;
-
if (run.isContainerStart()) {
auto& boxGeometry = formattingContext().geometryForBox(layoutBox);
if (boxGeometry.horizontalBorder() || (boxGeometry.horizontalPadding() && boxGeometry.horizontalPadding().value()))
diff --git a/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp b/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp
index 478f484..7abf426 100644
--- a/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp
+++ b/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp
@@ -69,7 +69,7 @@
ContinuousContent(const InlineItemRun&, bool textIsAlignJustify);
bool isEligible(const InlineItemRun&) const;
- void expand(const InlineItemRun&);
+ void append(const InlineItemRun&);
LineBuilder::Run close();
static bool canInlineItemRunBeExpanded(const InlineItemRun& run) { return run.isText() && !run.isCollapsed() && !run.isCollapsedToZeroAdvanceWidth(); }
@@ -96,18 +96,18 @@
{
if (!m_trailingRunCanBeExpanded)
return false;
- return inlineItemRun.isText() && &m_initialInlineRun.layoutBox() == &inlineItemRun.layoutBox();
+ // Only non-collapsed text runs with the same layout box can be added as continuous content.
+ return inlineItemRun.isText() && !inlineItemRun.isCollapsedToZeroAdvanceWidth() && &m_initialInlineRun.layoutBox() == &inlineItemRun.layoutBox();
}
-void LineBuilder::ContinuousContent::expand(const InlineItemRun& inlineItemRun)
+void LineBuilder::ContinuousContent::append(const InlineItemRun& inlineItemRun)
{
// Merged content needs to be continuous.
ASSERT(isEligible(inlineItemRun));
m_trailingRunCanBeExpanded = canInlineItemRunBeExpanded(inlineItemRun);
ASSERT(inlineItemRun.isText());
- if (!inlineItemRun.isCollapsedToZeroAdvanceWidth())
- m_expandedLength += inlineItemRun.textContext()->length();
+ m_expandedLength += inlineItemRun.textContext()->length();
m_expandedWidth += inlineItemRun.logicalWidth();
if (m_collectExpansionOpportunities) {
@@ -238,7 +238,8 @@
visuallyCollapsePreWrapOverflowContent();
auto hangingContent = collectHangingContent(isLastLineWithInlineContent);
- auto mergedInlineItemRuns = [&] (auto& runList) {
+ auto mergedInlineItemRuns = [&] {
+ RunList runList;
unsigned runIndex = 0;
while (runIndex < m_inlineItemRuns.size()) {
// Merge eligible runs.
@@ -250,13 +251,13 @@
}
auto mergedRuns = ContinuousContent { inlineItemRun, isTextAlignJustify() };
for (runIndex = runIndex + 1; runIndex < m_inlineItemRuns.size() && mergedRuns.isEligible(m_inlineItemRuns[runIndex]); ++runIndex)
- mergedRuns.expand(m_inlineItemRuns[runIndex]);
+ mergedRuns.append(m_inlineItemRuns[runIndex]);
runList.append(mergedRuns.close());
}
+ return runList;
};
- RunList runList;
- mergedInlineItemRuns(runList);
+ auto runList = mergedInlineItemRuns();
if (!m_isIntrinsicSizing) {
for (auto& run : runList) {
adjustBaselineAndLineHeight(run);
@@ -345,7 +346,7 @@
switch (verticalAlign) {
case VerticalAlign::Baseline:
- if (run.isText() || run.isLineBreak())
+ if (run.isLineBreak() || run.isText())
logicalTop = baselineOffset() - ascent;
else if (run.isContainerStart()) {
auto& boxGeometry = formattingContext().geometryForBox(layoutBox);
@@ -790,7 +791,7 @@
ASSERT_NOT_REACHED();
}
-inline InlineLayoutUnit LineBuilder::runContentHeight(const Run& run) const
+InlineLayoutUnit LineBuilder::runContentHeight(const Run& run) const
{
ASSERT(!m_isIntrinsicSizing);
auto& fontMetrics = run.style().fontMetrics();
@@ -900,10 +901,14 @@
for (auto index = *m_firstRunIndex; index < m_inlineitemRunList.size(); ++index) {
auto& run = m_inlineitemRunList[index];
run.moveHorizontally(-accumulatedCollapsedWidth);
+ if (!run.isText()) {
+ ASSERT(run.isContainerStart() || run.isContainerEnd() || run.isLineBreak());
+ continue;
+ }
if (run.isWhitespace()) {
accumulatedCollapsedWidth += run.logicalWidth();
run.setCollapsesToZeroAdvanceWidth();
- } else if (run.isText()) {
+ } else {
ASSERT(!hasSeenNonWhitespaceTextContent);
#if ASSERT_ENABLED
hasSeenNonWhitespaceTextContent = true;
@@ -913,7 +918,6 @@
accumulatedCollapsedWidth += run.trailingLetterSpacing();
run.removeTrailingLetterSpacing();
}
- ASSERT(run.isContainerStart() || run.isContainerEnd() || run.isLineBreak());
}
ASSERT(accumulatedCollapsedWidth == width());
reset();