[LFC][BFC] Special case the document renderer when computing the height and margin
authorzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Aug 2018 18:00:23 +0000 (18:00 +0000)
committerzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Aug 2018 18:00:23 +0000 (18:00 +0000)
https://bugs.webkit.org/show_bug.cgi?id=188313

Reviewed by Antti Koivisto.

The document renderer is certainly special and its geometry is likely to be computed as part of "10.6.6 Complicated cases" (spec is unclear) but probably not by
making the it a formatting root. Let's just special case it at contentHeightForFormattingContextRoot(), since having the document renderer as a context root has unwanted side effect.

* layout/FormattingContextGeometry.cpp:
(WebCore::Layout::contentHeightForFormattingContextRoot):
* layout/layouttree/LayoutBox.cpp:
(WebCore::Layout::Box::establishesBlockFormattingContext const):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234554 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/layout/FormattingContextGeometry.cpp
Source/WebCore/layout/layouttree/LayoutBox.cpp

index 7e3d4cb..eef5c6f 100644 (file)
@@ -1,5 +1,20 @@
 2018-08-03  Zalan Bujtas  <zalan@apple.com>
 
+        [LFC][BFC] Special case the document renderer when computing the height and margin
+        https://bugs.webkit.org/show_bug.cgi?id=188313
+
+        Reviewed by Antti Koivisto.
+
+        The document renderer is certainly special and its geometry is likely to be computed as part of "10.6.6 Complicated cases" (spec is unclear) but probably not by
+        making the it a formatting root. Let's just special case it at contentHeightForFormattingContextRoot(), since having the document renderer as a context root has unwanted side effect. 
+
+        * layout/FormattingContextGeometry.cpp:
+        (WebCore::Layout::contentHeightForFormattingContextRoot):
+        * layout/layouttree/LayoutBox.cpp:
+        (WebCore::Layout::Box::establishesBlockFormattingContext const):
+
+2018-08-03  Zalan Bujtas  <zalan@apple.com>
+
         [LFC][BFC] Layout out-of-flow descendants only on the formatting context root.
         https://bugs.webkit.org/show_bug.cgi?id=188312
 
index a7a8c27..a8ac6f6 100644 (file)
@@ -35,7 +35,7 @@ namespace Layout {
 
 static LayoutUnit contentHeightForFormattingContextRoot(LayoutContext& layoutContext, const Box& layoutBox)
 {
-    ASSERT(layoutBox.style().logicalHeight().isAuto() && layoutBox.establishesFormattingContext());
+    ASSERT(layoutBox.style().logicalHeight().isAuto() && (layoutBox.establishesFormattingContext() || layoutBox.isDocumentBox()));
 
     // 10.6.7 'Auto' heights for block formatting context roots
 
@@ -55,7 +55,13 @@ static LayoutUnit contentHeightForFormattingContextRoot(LayoutContext& layoutCon
 
     auto* firstDisplayBox = layoutContext.displayBoxForLayoutBox(*formattingRootContainer.firstInFlowChild());
     auto* lastDisplayBox = layoutContext.displayBoxForLayoutBox(*formattingRootContainer.lastInFlowChild());
-    auto floatsBottom = layoutContext.establishedFormattingState(layoutBox).floatingState().bottom(layoutBox);
+    auto* formattingContextRoot = &layoutBox;
+    // TODO: The document renderer is not a formatting context root by default at all. Need to find out what it is.
+    if (!layoutBox.establishesFormattingContext()) {
+        ASSERT(layoutBox.isDocumentBox());
+        formattingContextRoot = &layoutBox.formattingContextRoot();
+    }
+    auto floatsBottom = layoutContext.establishedFormattingState(*formattingContextRoot).floatingState().bottom(*formattingContextRoot);
 
     auto top = firstDisplayBox->marginBox().top();
     auto bottom = lastDisplayBox->marginBox().bottom();
index 5fd5829..b602569 100644 (file)
@@ -71,9 +71,6 @@ bool Box::establishesBlockFormattingContext() const
     if (isBlockLevelBox() && !isOverflowVisible())
         return true;
 
-    if (isDocumentBox())
-        return true;
-
     return false;
 }