⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 194143 in webkit


Ignore:
Timestamp:
Dec 16, 2015, 6:53:28 AM (11 years ago)
Author:
svillar@igalia.com
Message:

Fix computation of min|max-content contribution of non-replaced blocks
​https://bugs.webkit.org/show_bug.cgi?id=152004

Reviewed by Darin Adler.

Source/WebCore:

WebKit currently always returns the min preferred logical
width for the min-content contribution (and the max preferred
logical width for the max-content contribution) for
non-replaced blocks. That is not correct according to specs
​https://drafts.csswg.org/css-sizing/#block-intrinsic.

The min-content and max-content contributions actually depend
on the computed inline size of the block:

  • for min-content,max-content or definite sizes: min-content

and max-content contributions are the inline size plus border,
margin and padding.

  • otherwise: min-content contribution is the min-content size

and max-content contribution is the max-content size (in both
cases plus border, padding and margin).

Tests: fast/css-intrinsic-dimensions/auto-maxcontent-inlinesize-contribution-nonreplaced-blocks.html

fast/css-intrinsic-dimensions/auto-mincontent-inlinesize-contribution-nonreplaced-blocks.html
fast/css-intrinsic-dimensions/fillavailable-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
fast/css-intrinsic-dimensions/fillavailable-mincontent-inlinesize-contribution-nonreplaced-blocks.html
fast/css-intrinsic-dimensions/fitcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
fast/css-intrinsic-dimensions/fitcontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html
fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-1.html
fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-2.html
fast/css-intrinsic-dimensions/indefinite-percent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
fast/css-intrinsic-dimensions/indefinite-percent-mincontent-inlinesize-contribution-nonreplaced-blocks.html
fast/css-intrinsic-dimensions/maxcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
fast/css-intrinsic-dimensions/maxcontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html
fast/css-intrinsic-dimensions/mincontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
fast/css-intrinsic-dimensions/mincontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html

  • rendering/RenderBlock.cpp:

(WebCore::RenderBlock::computeBlockPreferredLogicalWidths):

LayoutTests:

  • fast/css-intrinsic-dimensions/auto-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/auto-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/auto-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/auto-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/fillavailable-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/fillavailable-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/fillavailable-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/fillavailable-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/fitcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/fitcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/fitcontent-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/fitcontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-1-expected.html: Added.
  • fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-1.html: Added.
  • fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-2-expected.html: Added.
  • fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-2.html: Added.
  • fast/css-intrinsic-dimensions/indefinite-percent-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/indefinite-percent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/indefinite-percent-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/indefinite-percent-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/maxcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/maxcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/maxcontent-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/maxcontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/mincontent-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/mincontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/mincontent-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
  • fast/css-intrinsic-dimensions/mincontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
  • fast/css-intrinsic-dimensions/resources/intrinsic-size-contribution.css: Added.

(.container):
(.item):
(.border):
(.padding):
(.margin):

Location:
trunk
Files:
29 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r194142 r194143  
     12015-12-08  Sergio Villar Senin  <svillar@igalia.com>
     2
     3        Fix computation of min|max-content contribution of non-replaced blocks
     4        https://bugs.webkit.org/show_bug.cgi?id=152004
     5
     6        Reviewed by Darin Adler.
     7
     8        * fast/css-intrinsic-dimensions/auto-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     9        * fast/css-intrinsic-dimensions/auto-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     10        * fast/css-intrinsic-dimensions/auto-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     11        * fast/css-intrinsic-dimensions/auto-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     12        * fast/css-intrinsic-dimensions/fillavailable-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     13        * fast/css-intrinsic-dimensions/fillavailable-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     14        * fast/css-intrinsic-dimensions/fillavailable-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     15        * fast/css-intrinsic-dimensions/fillavailable-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     16        * fast/css-intrinsic-dimensions/fitcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     17        * fast/css-intrinsic-dimensions/fitcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     18        * fast/css-intrinsic-dimensions/fitcontent-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     19        * fast/css-intrinsic-dimensions/fitcontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     20        * fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-1-expected.html: Added.
     21        * fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-1.html: Added.
     22        * fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-2-expected.html: Added.
     23        * fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-2.html: Added.
     24        * fast/css-intrinsic-dimensions/indefinite-percent-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     25        * fast/css-intrinsic-dimensions/indefinite-percent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     26        * fast/css-intrinsic-dimensions/indefinite-percent-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     27        * fast/css-intrinsic-dimensions/indefinite-percent-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     28        * fast/css-intrinsic-dimensions/maxcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     29        * fast/css-intrinsic-dimensions/maxcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     30        * fast/css-intrinsic-dimensions/maxcontent-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     31        * fast/css-intrinsic-dimensions/maxcontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     32        * fast/css-intrinsic-dimensions/mincontent-maxcontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     33        * fast/css-intrinsic-dimensions/mincontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     34        * fast/css-intrinsic-dimensions/mincontent-mincontent-inlinesize-contribution-nonreplaced-blocks-expected.html: Added.
     35        * fast/css-intrinsic-dimensions/mincontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html: Added.
     36        * fast/css-intrinsic-dimensions/resources/intrinsic-size-contribution.css: Added.
     37        (.container):
     38        (.item):
     39        (.border):
     40        (.padding):
     41        (.margin):
     42
    1432015-12-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>
    244
  • trunk/Source/WebCore/ChangeLog

    r194140 r194143  
     12015-12-08  Sergio Villar Senin  <svillar@igalia.com>
     2
     3        Fix computation of min|max-content contribution of non-replaced blocks
     4        https://bugs.webkit.org/show_bug.cgi?id=152004
     5
     6        Reviewed by Darin Adler.
     7
     8        WebKit currently always returns the min preferred logical
     9        width for the min-content contribution (and the max preferred
     10        logical width for the max-content contribution) for
     11        non-replaced blocks. That is not correct according to specs
     12        https://drafts.csswg.org/css-sizing/#block-intrinsic.
     13
     14        The min-content and max-content contributions actually depend
     15        on the computed inline size of the block:
     16        * for min-content,max-content or definite sizes: min-content
     17        and max-content contributions are the inline size plus border,
     18        margin and padding.
     19        * otherwise: min-content contribution is the min-content size
     20        and max-content contribution is the max-content size (in both
     21        cases plus border, padding and margin).
     22
     23        Tests: fast/css-intrinsic-dimensions/auto-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
     24               fast/css-intrinsic-dimensions/auto-mincontent-inlinesize-contribution-nonreplaced-blocks.html
     25               fast/css-intrinsic-dimensions/fillavailable-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
     26               fast/css-intrinsic-dimensions/fillavailable-mincontent-inlinesize-contribution-nonreplaced-blocks.html
     27               fast/css-intrinsic-dimensions/fitcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
     28               fast/css-intrinsic-dimensions/fitcontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html
     29               fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-1.html
     30               fast/css-intrinsic-dimensions/fixed-inlinesize-contribution-nonreplaced-blocks-2.html
     31               fast/css-intrinsic-dimensions/indefinite-percent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
     32               fast/css-intrinsic-dimensions/indefinite-percent-mincontent-inlinesize-contribution-nonreplaced-blocks.html
     33               fast/css-intrinsic-dimensions/maxcontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
     34               fast/css-intrinsic-dimensions/maxcontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html
     35               fast/css-intrinsic-dimensions/mincontent-maxcontent-inlinesize-contribution-nonreplaced-blocks.html
     36               fast/css-intrinsic-dimensions/mincontent-mincontent-inlinesize-contribution-nonreplaced-blocks.html
     37
     38        * rendering/RenderBlock.cpp:
     39        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
     40
    1412015-12-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>
    242
  • trunk/Source/WebCore/rendering/RenderBlock.cpp

    r193773 r194143  
    27522752            childMinPreferredLogicalWidth = childMaxPreferredLogicalWidth = computedValues.m_extent;
    27532753        } else {
    2754             childMinPreferredLogicalWidth = child->minPreferredLogicalWidth();
    2755             childMaxPreferredLogicalWidth = child->maxPreferredLogicalWidth();
     2754            if (is<RenderBlock>(*child) && !is<RenderTable>(*child)) {
     2755                const Length& computedInlineSize = child->style().logicalWidth();
     2756                if (computedInlineSize.isFitContent() || computedInlineSize.isFillAvailable() || computedInlineSize.isAuto()
     2757                    || computedInlineSize.isPercentOrCalculated()) {
     2758                    // FIXME: we could do a lot better for percents (we're considering them always indefinite)
     2759                    // but we need https://bugs.webkit.org/show_bug.cgi?id=152262 to be fixed first
     2760                    childMinPreferredLogicalWidth = child->minPreferredLogicalWidth();
     2761                    childMaxPreferredLogicalWidth = child->maxPreferredLogicalWidth();
     2762                } else {
     2763                    ASSERT(computedInlineSize.isMinContent() || computedInlineSize.isMaxContent() || computedInlineSize.isFixed());
     2764                    LogicalExtentComputedValues computedValues;
     2765                    downcast<RenderBlock>(*child).computeLogicalWidthInRegion(computedValues);
     2766                    childMinPreferredLogicalWidth = childMaxPreferredLogicalWidth = computedValues.m_extent;
     2767                    child->setPreferredLogicalWidthsDirty(false);
     2768                }
     2769            } else {
     2770                // FIXME: we leave the original implementation as default fallback. Still need to specialcase
     2771                // some other situations: https://drafts.csswg.org/css-sizing/#intrinsic
     2772                childMinPreferredLogicalWidth = child->minPreferredLogicalWidth();
     2773                childMaxPreferredLogicalWidth = child->maxPreferredLogicalWidth();
     2774            }
    27562775        }
    27572776
Note: See TracChangeset for help on using the changeset viewer.