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();