diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index b69cd26..877a84e 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,16 @@
+2021-02-27  Zalan Bujtas  <zalan@apple.com>
+
+        [LFC][Coverage] Add missing not-yet-modern-line-layout reasons
+        https://bugs.webkit.org/show_bug.cgi?id=222488
+
+        Reviewed by Sam Weinig.
+
+        * layout/integration/LayoutIntegrationCoverage.cpp:
+        (WebCore::LayoutIntegration::printReason):
+        (WebCore::LayoutIntegration::canUseForChild):
+        (WebCore::LayoutIntegration::canUseForLineLayoutWithReason):
+        * layout/integration/LayoutIntegrationCoverage.h:
+
 2021-02-27  Antoine Quint  <graouts@webkit.org>
 
         border-image-slice blending does not account for the fill keyword
diff --git a/Source/WebCore/layout/integration/LayoutIntegrationCoverage.cpp b/Source/WebCore/layout/integration/LayoutIntegrationCoverage.cpp
index 3284214..b45654c 100644
--- a/Source/WebCore/layout/integration/LayoutIntegrationCoverage.cpp
+++ b/Source/WebCore/layout/integration/LayoutIntegrationCoverage.cpp
@@ -93,10 +93,10 @@
     case AvoidanceReason::FlowHasHorizonalWritingMode:
         stream << "horizontal writing mode";
         break;
-    case AvoidanceReason::FlowHasOutline:
+    case AvoidanceReason::ContentHasOutline:
         stream << "outline";
         break;
-    case AvoidanceReason::FlowIsRuby:
+    case AvoidanceReason::ContentIsRuby:
         stream << "ruby";
         break;
     case AvoidanceReason::FlowHasHangingPunctuation:
@@ -118,7 +118,7 @@
         stream << "wrapping textarea";
         break;
     case AvoidanceReason::FlowHasNonSupportedChild:
-        stream << "nested renderers";
+        stream << "unsupported child renderer";
         break;
     case AvoidanceReason::FlowHasUnsupportedFloat:
         stream << "complicated float";
@@ -196,16 +196,16 @@
         stream << "text is combine";
         break;
     case AvoidanceReason::FlowTextIsRenderCounter:
-        stream << "unsupported RenderCounter";
+        stream << "RenderCounter";
         break;
     case AvoidanceReason::FlowTextIsRenderQuote:
-        stream << "unsupported RenderQuote";
+        stream << "RenderQuote";
         break;
     case AvoidanceReason::FlowTextIsTextFragment:
-        stream << "unsupported TextFragment";
+        stream << "TextFragment";
         break;
     case AvoidanceReason::FlowTextIsSVGInlineText:
-        stream << "unsupported SVGInlineText";
+        stream << "SVGInlineText";
         break;
     case AvoidanceReason::FlowHasComplexFontCodePath:
         stream << "text with complex font codepath";
@@ -246,6 +246,33 @@
     case AvoidanceReason::FlowDoesNotEstablishInlineFormattingContext:
         stream << "flow does not establishes inline formatting context";
         break;
+    case AvoidanceReason::UnsupportedFieldset:
+        stream << "fieldset box";
+        break;
+    case AvoidanceReason::ChildBoxIsFloatingOrPositioned:
+        stream << "child box is floating or positioned";
+        break;
+    case AvoidanceReason::ContentIsSVG:
+        stream << "SVG content";
+        break;
+    case AvoidanceReason::ChildBoxHasUnsupportedStyle:
+        stream << "child box has unsupported style";
+        break;
+    case AvoidanceReason::UnsupportedImageMap:
+        stream << "image map";
+        break;
+    case AvoidanceReason::InlineBoxNeedsLayer:
+        stream << "inline box needs layer";
+        break;
+    case AvoidanceReason::InlineBoxHasBorderOrBorderImage:
+        stream << "inline box has border or border image";
+        break;
+    case AvoidanceReason::InlineBoxHasBackground:
+        stream << "inline box has background";
+        break;
+    case AvoidanceReason::InlineBoxHasMarginOrPadding:
+        stream << "inline box has margin or padding";
+        break;
     default:
         break;
     }
@@ -590,7 +617,7 @@
 
     if (child.isFieldset()) {
         // Fieldsets don't follow the standard CSS box model. They require special handling.
-        SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons)
+        SET_REASON_AND_RETURN_IF_NEEDED(UnsupportedFieldset, reasons, includeReasons)
     }
 
 #if ALLOW_IMAGES || ALLOW_ALL_REPLACED || ALLOW_INLINE_BLOCK
@@ -610,18 +637,18 @@
     if (is<RenderReplaced>(child)) {
         auto& replaced = downcast<RenderReplaced>(child);
         if (replaced.isFloating() || replaced.isPositioned())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons)
+            SET_REASON_AND_RETURN_IF_NEEDED(ChildBoxIsFloatingOrPositioned, reasons, includeReasons)
 
         if (replaced.isSVGRoot())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
+            SET_REASON_AND_RETURN_IF_NEEDED(ContentIsSVG, reasons, includeReasons);
 
         if (!isSupportedStyle(replaced.style()))
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
+            SET_REASON_AND_RETURN_IF_NEEDED(ChildBoxHasUnsupportedStyle, reasons, includeReasons);
 
         if (is<RenderImage>(replaced)) {
             auto& image = downcast<RenderImage>(replaced);
             if (image.imageMap())
-                SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
+                SET_REASON_AND_RETURN_IF_NEEDED(UnsupportedImageMap, reasons, includeReasons);
             return reasons;
         }
 #if !ALLOW_ALL_REPLACED
@@ -637,15 +664,15 @@
         if (!block.isReplaced() || !block.isInline())
             SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons)
         if (block.isFloating() || block.isPositioned())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons)
+            SET_REASON_AND_RETURN_IF_NEEDED(ChildBoxIsFloatingOrPositioned, reasons, includeReasons)
         if (block.isRubyRun())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
+            SET_REASON_AND_RETURN_IF_NEEDED(ContentIsRuby, reasons, includeReasons);
 
         auto& style = block.style();
         if (!isSupportedStyle(style))
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons)
+            SET_REASON_AND_RETURN_IF_NEEDED(ChildBoxHasUnsupportedStyle, reasons, includeReasons)
         if (style.display() != DisplayType::InlineBlock)
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons)
+            SET_REASON_AND_RETURN_IF_NEEDED(ChildBoxHasUnsupportedStyle, reasons, includeReasons)
 
         return reasons;
     }
@@ -654,31 +681,29 @@
 #if ALLOW_INLINES
     if (is<RenderInline>(child)) {
         auto& renderInline = downcast<RenderInline>(child);
-        if (renderInline.isRubyInline() || renderInline.isQuote() || renderInline.isSVGInline())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
-
+        if (renderInline.isSVGInline())
+            SET_REASON_AND_RETURN_IF_NEEDED(ContentIsSVG, reasons, includeReasons);
+        if (renderInline.isRubyInline() || renderInline.isQuote())
+            SET_REASON_AND_RETURN_IF_NEEDED(ContentIsRuby, reasons, includeReasons);
         if (renderInline.requiresLayer())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons)
+            SET_REASON_AND_RETURN_IF_NEEDED(InlineBoxNeedsLayer, reasons, includeReasons)
 
         auto& style = renderInline.style();
         if (!isSupportedStyle(style))
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons)
-        if (style.hasBorder())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
-        if (style.borderImage().hasImage())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
+            SET_REASON_AND_RETURN_IF_NEEDED(ChildBoxHasUnsupportedStyle, reasons, includeReasons)
+        if (style.hasBorder() || style.borderImage().hasImage())
+            SET_REASON_AND_RETURN_IF_NEEDED(InlineBoxHasBorderOrBorderImage, reasons, includeReasons);
         if (style.hasBackground())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
+            SET_REASON_AND_RETURN_IF_NEEDED(InlineBoxHasBackground, reasons, includeReasons);
         if (style.hasOutline())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
-        if (renderInline.marginLeft() < 0 || renderInline.marginRight() < 0 || renderInline.marginTop() < 0 || renderInline.marginBottom() < 0)
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
-        if (renderInline.paddingLeft() < 0 || renderInline.paddingRight() < 0 || renderInline.paddingTop() < 0 || renderInline.paddingBottom() < 0)
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
+            SET_REASON_AND_RETURN_IF_NEEDED(ContentHasOutline, reasons, includeReasons);
+        if (renderInline.marginLeft() < 0 || renderInline.marginRight() < 0 || renderInline.marginTop() < 0 || renderInline.marginBottom() < 0
+            || renderInline.paddingLeft() < 0 || renderInline.paddingRight() < 0 || renderInline.paddingTop() < 0 || renderInline.paddingBottom() < 0)
+            SET_REASON_AND_RETURN_IF_NEEDED(InlineBoxHasMarginOrPadding, reasons, includeReasons);
         if (renderInline.isInFlowPositioned())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
+            SET_REASON_AND_RETURN_IF_NEEDED(ChildBoxIsFloatingOrPositioned, reasons, includeReasons);
         if (renderInline.containingBlock()->style().lineBoxContain() != RenderStyle::initialLineBoxContain())
-            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasNonSupportedChild, reasons, includeReasons);
+            SET_REASON_AND_RETURN_IF_NEEDED(FlowHasLineBoxContainProperty, reasons, includeReasons);
         auto fontAndTextReasons = canUseForFontAndText(downcast<RenderInline>(child), includeReasons);
         if (fontAndTextReasons)
             ADD_REASONS_AND_RETURN_IF_NEEDED(fontAndTextReasons, reasons, includeReasons);
@@ -741,9 +766,9 @@
     if (!flow.isHorizontalWritingMode())
         SET_REASON_AND_RETURN_IF_NEEDED(FlowHasHorizonalWritingMode, reasons, includeReasons);
     if (flow.hasOutline())
-        SET_REASON_AND_RETURN_IF_NEEDED(FlowHasOutline, reasons, includeReasons);
+        SET_REASON_AND_RETURN_IF_NEEDED(ContentHasOutline, reasons, includeReasons);
     if (flow.isRubyText() || flow.isRubyBase())
-        SET_REASON_AND_RETURN_IF_NEEDED(FlowIsRuby, reasons, includeReasons);
+        SET_REASON_AND_RETURN_IF_NEEDED(ContentIsRuby, reasons, includeReasons);
     if (!flow.style().hangingPunctuation().isEmpty())
         SET_REASON_AND_RETURN_IF_NEEDED(FlowHasHangingPunctuation, reasons, includeReasons);
 
diff --git a/Source/WebCore/layout/integration/LayoutIntegrationCoverage.h b/Source/WebCore/layout/integration/LayoutIntegrationCoverage.h
index e9fe9e0..6f8e55c 100644
--- a/Source/WebCore/layout/integration/LayoutIntegrationCoverage.h
+++ b/Source/WebCore/layout/integration/LayoutIntegrationCoverage.h
@@ -39,8 +39,8 @@
 enum class AvoidanceReason : uint64_t {
     FlowIsInsideANonMultiColumnThread            = 1LLU  << 0,
     FlowHasHorizonalWritingMode                  = 1LLU  << 1,
-    FlowHasOutline                               = 1LLU  << 2,
-    FlowIsRuby                                   = 1LLU  << 3,
+    ContentHasOutline                            = 1LLU  << 2,
+    ContentIsRuby                                = 1LLU  << 3,
     FlowIsPaginated                              = 1LLU  << 4,
     FlowHasTextOverflow                          = 1LLU  << 5,
     FlowIsDepricatedFlexBox                      = 1LLU  << 6,
@@ -91,7 +91,16 @@
     FlowIncludesDocumentMarkers                  = 1LLU  << 51,
     FlowIncludesHighlights                       = 1LLU  << 52,
     FlowHasJustifiedNonBreakingSpace             = 1LLU  << 53,
-    EndOfReasons                                 = 1LLU  << 54
+    UnsupportedFieldset                          = 1LLU  << 54,
+    ChildBoxIsFloatingOrPositioned               = 1LLU  << 55,
+    ContentIsSVG                                 = 1LLU  << 56,
+    ChildBoxHasUnsupportedStyle                  = 1LLU  << 57,
+    UnsupportedImageMap                          = 1LLU  << 58,
+    InlineBoxNeedsLayer                          = 1LLU  << 59,
+    InlineBoxHasBorderOrBorderImage              = 1LLU  << 60,
+    InlineBoxHasBackground                       = 1LLU  << 61,
+    InlineBoxHasMarginOrPadding                  = 1LLU  << 62,
+    EndOfReasons                                 = 1LLU  << 63
 };
 
 bool canUseForLineLayout(const RenderBlockFlow&);
