Changeset 238613 in webkit


Ignore:
Timestamp:
Nov 28, 2018 9:17:28 AM (5 years ago)
Author:
Alan Bujtas
Message:

[LFC][Quirk] Use non-collapsed vertical margin values when the container is stretched to the size of the ICB.
https://bugs.webkit.org/show_bug.cgi?id=192078

Reviewed by Antti Koivisto.

Source/WebCore:

This quirk happens when the body height is 0 which means its vertical margins collapse through (top and bottom margins are adjoining).
However now that we stretch the body they don't collapse through anymore, so we need to use the non-collapsed values instead.

  • layout/LayoutUnits.h:

(WebCore::Layout::HeightAndMargin::usedMarginValues const):

  • layout/blockformatting/BlockFormattingContextGeometry.cpp:

(WebCore::Layout::stretchHeightToInitialContainingBlock):

Tools:

  • LayoutReloaded/misc/LFC-passing-tests.txt:
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r238611 r238613  
     12018-11-28  Zalan Bujtas  <zalan@apple.com>
     2
     3        [LFC][Quirk] Use non-collapsed vertical margin values when the container is stretched to the size of the ICB.
     4        https://bugs.webkit.org/show_bug.cgi?id=192078
     5
     6        Reviewed by Antti Koivisto.
     7
     8        This quirk happens when the body height is 0 which means its vertical margins collapse through (top and bottom margins are adjoining).
     9        However now that we stretch the body they don't collapse through anymore, so we need to use the non-collapsed values instead.
     10
     11        * layout/LayoutUnits.h:
     12        (WebCore::Layout::HeightAndMargin::usedMarginValues const):
     13        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
     14        (WebCore::Layout::stretchHeightToInitialContainingBlock):
     15
    1162018-11-28  Zalan Bujtas  <zalan@apple.com>
    217
  • trunk/Source/WebCore/layout/LayoutUnits.h

    r238482 r238613  
    107107
    108108struct HeightAndMargin {
     109    VerticalEdges usedMarginValues() const { return collapsedMargin.value_or(margin); }
     110
    109111    LayoutUnit height;
    110112    VerticalEdges margin;
  • trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp

    r238481 r238613  
    5959}
    6060
    61 static HeightAndMargin stretchHeightToInitialContainingBlock(HeightAndMargin heightAndMargin, LayoutUnit initialContainingBlockHeight)
    62 {
    63     auto verticalMargins = heightAndMargin.margin.top + heightAndMargin.margin.bottom;
     61static HeightAndMargin stretchHeightToInitialContainingBlockQuirk(HeightAndMargin heightAndMargin, LayoutUnit initialContainingBlockHeight)
     62{
     63    // This quirk happens when the body height is 0 which means its vertical margins collapse through (top and bottom margins are adjoining).
     64    // However now that we stretch the body they don't collapse through anymore, so we need to use the non-collapsed values instead.
     65    ASSERT(initialContainingBlockHeight);
     66    auto verticalMargins = heightAndMargin.height ? heightAndMargin.usedMarginValues() : heightAndMargin.margin;
     67    auto totalVerticalMargins = verticalMargins.top + verticalMargins.bottom;
    6468    // Stretch but never overstretch with the margins.
    65     if (heightAndMargin.height + verticalMargins < initialContainingBlockHeight)
    66         heightAndMargin.height = initialContainingBlockHeight - verticalMargins;
     69    if (heightAndMargin.height + totalVerticalMargins < initialContainingBlockHeight)
     70        heightAndMargin.height = initialContainingBlockHeight - totalVerticalMargins;
    6771
    6872    return heightAndMargin;
     
    311315
    312316    auto initialContainingBlockHeight = layoutState.displayBoxForLayoutBox(initialContainingBlock(layoutBox)).contentBoxHeight();
    313     heightAndMargin = stretchHeightToInitialContainingBlock(heightAndMargin, initialContainingBlockHeight);
     317    heightAndMargin = stretchHeightToInitialContainingBlockQuirk(heightAndMargin, initialContainingBlockHeight);
    314318
    315319    LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> inflow non-replaced -> streched to viewport -> height(" << heightAndMargin.height << "px) margin(" << heightAndMargin.margin.top << "px, " << heightAndMargin.margin.bottom << "px) -> layoutBox(" << &layoutBox << ")");
  • trunk/Tools/ChangeLog

    r238611 r238613  
     12018-11-28  Zalan Bujtas  <zalan@apple.com>
     2
     3        [LFC][Quirk] Use non-collapsed vertical margin values when the container is stretched to the size of the ICB.
     4        https://bugs.webkit.org/show_bug.cgi?id=192078
     5
     6        Reviewed by Antti Koivisto.
     7
     8        * LayoutReloaded/misc/LFC-passing-tests.txt:
     9
    1102018-11-28  Zalan Bujtas  <zalan@apple.com>
    211
  • trunk/Tools/LayoutReloaded/misc/LFC-passing-tests.txt

    r238611 r238613  
    9797fast/block/margin-collapse/002.html
    9898fast/block/margin-collapse/003.html
     99fast/block/positioning/004.html
     100fast/block/positioning/005.html
     101fast/block/positioning/006.html
     102fast/block/positioning/007.html
     103fast/block/positioning/008.html
     104fast/block/positioning/009.html
     105fast/block/positioning/010.html
     106fast/block/positioning/011.html
     107fast/block/positioning/012.html
     108fast/block/positioning/013.html
     109fast/block/positioning/014.html
     110fast/block/positioning/015.html
     111fast/block/positioning/016.html
     112fast/block/positioning/017.html
     113fast/block/positioning/018.html
     114fast/block/positioning/019.html
     115fast/block/positioning/020.html
     116fast/block/positioning/021.html
     117fast/block/positioning/022.html
     118fast/block/positioning/023.html
     119fast/block/positioning/024.html
     120fast/block/positioning/025.html
     121fast/block/positioning/032.html
     122fast/block/positioning/033.html
     123fast/block/positioning/034.html
     124fast/block/positioning/035.html
     125fast/block/positioning/036.html
     126fast/block/positioning/037.html
     127fast/block/positioning/038.html
     128fast/block/positioning/039.html
     129fast/block/positioning/040.html
     130fast/block/positioning/041.html
     131fast/block/positioning/042.html
     132fast/block/positioning/043.html
     133fast/block/positioning/044.html
     134fast/block/positioning/045.html
     135fast/block/positioning/046.html
     136fast/block/positioning/049.html
     137fast/block/positioning/052.html
     138fast/block/positioning/054.html
Note: See TracChangeset for help on using the changeset viewer.