Title: [223402] releases/WebKitGTK/webkit-2.18
Revision
223402
Author
carlo...@webkit.org
Date
2017-10-16 06:16:27 -0700 (Mon, 16 Oct 2017)

Log Message

Merge r222440 - [css-grid] fit-content() tracks shouldn't stretch
https://bugs.webkit.org/show_bug.cgi?id=177300

Reviewed by Sergio Villar Senin.

LayoutTests/imported/w3c:

Imported a new test in WPT covering several cases for this issue.

* web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001-expected.txt: Added.
* web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001.html: Added.
* web-platform-tests/css/css-grid-1/alignment/w3c-import.log:

Source/WebCore:

The spec is pretty clear regarding this
(https://drafts.csswg.org/css-grid/#algo-stretch):
  "This step sizes expands tracks that have an auto max track sizing
   function by dividing any remaining positive, definite free space
   equally amongst them."

The fit-content() tracks don't have an auto max track sizing function,
so they shouldn't be considered in this step of the algorithm.

The patch modifies GridTrackSizingAlgorithm::initializeTrackSizes()
so it doesn't consider fit-content() tracks as auto sized ones
(which are the ones later stretched in the last step of the algorithm).

Test: imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001.html

* rendering/GridTrackSizingAlgorithm.cpp:
(WebCore::GridTrackSizingAlgorithm::initializeTrackSizes):
(WebCore::GridTrackSizingAlgorithm::stretchAutoTracks):
(WebCore::GridTrackSizingAlgorithm::setup):
(WebCore::GridTrackSizingAlgorithm::reset):
* rendering/GridTrackSizingAlgorithm.h:

LayoutTests:

Added new case to an existent test and also modified
the expected result in another one.

* fast/css-grid-layout/grid-content-alignment-stretch-only-valid-for-auto-sized-tracks-expected.txt:
* fast/css-grid-layout/grid-content-alignment-stretch-only-valid-for-auto-sized-tracks.html:
* fast/css-grid-layout/grid-intrinsic-maximums-expected.html:

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.18/LayoutTests/ChangeLog (223401 => 223402)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/ChangeLog	2017-10-16 13:14:53 UTC (rev 223401)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/ChangeLog	2017-10-16 13:16:27 UTC (rev 223402)
@@ -1,3 +1,17 @@
+2017-09-25  Manuel Rego Casasnovas  <r...@igalia.com>
+
+        [css-grid] fit-content() tracks shouldn't stretch
+        https://bugs.webkit.org/show_bug.cgi?id=177300
+
+        Reviewed by Sergio Villar Senin.
+
+        Added new case to an existent test and also modified
+        the expected result in another one.
+
+        * fast/css-grid-layout/grid-content-alignment-stretch-only-valid-for-auto-sized-tracks-expected.txt:
+        * fast/css-grid-layout/grid-content-alignment-stretch-only-valid-for-auto-sized-tracks.html:
+        * fast/css-grid-layout/grid-intrinsic-maximums-expected.html:
+
 2017-09-24  Joanmarie Diggs  <jdi...@igalia.com>
 
         [ATK] Object attributes are missing for ARIA live region roles

Modified: releases/WebKitGTK/webkit-2.18/LayoutTests/fast/css-grid-layout/grid-content-alignment-stretch-only-valid-for-auto-sized-tracks-expected.txt (223401 => 223402)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/fast/css-grid-layout/grid-content-alignment-stretch-only-valid-for-auto-sized-tracks-expected.txt	2017-10-16 13:14:53 UTC (rev 223401)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/fast/css-grid-layout/grid-content-alignment-stretch-only-valid-for-auto-sized-tracks-expected.txt	2017-10-16 13:16:27 UTC (rev 223402)
@@ -21,3 +21,10 @@
 cols: 'minmax(auto, max-content)' | rows: 'minmax(auto, max-content)' | definite-sized container | definite-sized items
 
 PASS
+cols: 'fit-content(40px)' | rows: 'fit-content(20px)' | definite-sized container | content-sized items
+
+X XX XX X
+X XX XX X
+X XX XX X
+X XX XX X
+PASS

Modified: releases/WebKitGTK/webkit-2.18/LayoutTests/fast/css-grid-layout/grid-content-alignment-stretch-only-valid-for-auto-sized-tracks.html (223401 => 223402)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/fast/css-grid-layout/grid-content-alignment-stretch-only-valid-for-auto-sized-tracks.html	2017-10-16 13:14:53 UTC (rev 223401)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/fast/css-grid-layout/grid-content-alignment-stretch-only-valid-for-auto-sized-tracks.html	2017-10-16 13:16:27 UTC (rev 223402)
@@ -42,6 +42,7 @@
 .minMaxWithMaxContentTracks { grid: minmax(20px, max-content) minmax(20px, max-content) / minmax(20px, max-content) minmax(20px, max-content); }
 .minMaxWithMinContentTracks { grid: minmax(20px, min-content) minmax(20px, min-content) / minmax(20px, min-content) minmax(20px, min-content); }
 .minMaxWithMinAutoTracks { grid: minmax(auto, max-content) minmax(auto, max-content) / minmax(auto, max-content) minmax(auto, max-content); }
+.fitContentTracks { grid: fit-content(20px) fit-content(20px) / fit-content(40px) fit-content(40px); font: 10px/1 Ahem; }
 
 </style>
 </head>
@@ -119,5 +120,15 @@
     </div>
 </div>
 
+<div style="position: relative">
+    <p>cols: 'fit-content(40px)' | rows: 'fit-content(20px)' | definite-sized container | content-sized items</p>
+    <div class="grid contentStretch itemsStart definiteSize fitContentTracks" data-expected-width="200" data-expected-height="300">
+        <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20">X XX XX X</div>
+        <div class="firstRowSecondColumn" data-offset-x="40" data-offset-y="0" data-expected-width="40" data-expected-height="20">X XX XX X</div>
+        <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20">X XX XX X</div>
+        <div class="secondRowSecondColumn" data-offset-x="40" data-offset-y="20" data-expected-width="40" data-expected-height="20">X XX XX X</div>
+    </div>
+</div>
+
 </body>
 </html>

Modified: releases/WebKitGTK/webkit-2.18/LayoutTests/fast/css-grid-layout/grid-intrinsic-maximums-expected.html (223401 => 223402)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/fast/css-grid-layout/grid-intrinsic-maximums-expected.html	2017-10-16 13:14:53 UTC (rev 223401)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/fast/css-grid-layout/grid-intrinsic-maximums-expected.html	2017-10-16 13:16:27 UTC (rev 223402)
@@ -126,7 +126,7 @@
 
 <div class="float">
 
-<div class="grid" style="grid-template: 20px / calc(60px - 15px/2) 5px calc(25px + 35px/2);">
+<div class="grid" style="grid-template: 20px / calc(10px + (90px - 15px)/2) 5px calc((90px - 15px)/2 + 10px);">
     <div class="item" style="min-width: 15px;">XXXX XXXX</div>
     <div class="abs col1"></div>
     <div class="abs col2"></div>
@@ -133,7 +133,7 @@
     <div class="abs col3"></div>
 </div>
 
-<div class="grid" style="grid-template: 20px / calc(60px + 25px/2) 5px calc(25px - 5px/2);">
+<div class="grid" style="grid-template: 20px / calc(50px + (90px - 55px)/2) 5px calc((90px - 55px)/2 + 10px);">
     <div class="item" style="min-width: 55px;">XXXX XXXX</div>
     <div class="abs col1"></div>
     <div class="abs col2"></div>
@@ -140,7 +140,7 @@
     <div class="abs col3"></div>
 </div>
 
-<div class="grid" style="grid-template: 20px / 90px 5px 5px;">
+<div class="grid" style="grid-template: 20px / 85px 5px 10px;">
     <div class="item min-width-max-content">XXXX XXXX</div>
     <div class="abs col1"></div>
     <div class="abs col2"></div>

Modified: releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/ChangeLog (223401 => 223402)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/ChangeLog	2017-10-16 13:14:53 UTC (rev 223401)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/ChangeLog	2017-10-16 13:16:27 UTC (rev 223402)
@@ -1,3 +1,16 @@
+2017-09-25  Manuel Rego Casasnovas  <r...@igalia.com>
+
+        [css-grid] fit-content() tracks shouldn't stretch
+        https://bugs.webkit.org/show_bug.cgi?id=177300
+
+        Reviewed by Sergio Villar Senin.
+
+        Imported a new test in WPT covering several cases for this issue.
+
+        * web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001-expected.txt: Added.
+        * web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001.html: Added.
+        * web-platform-tests/css/css-grid-1/alignment/w3c-import.log:
+
 2017-09-12  Manuel Rego Casasnovas  <r...@igalia.com>
 
         [css-grid] Stretching auto tracks should be done as part of the track sizing algorithm

Added: releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001-expected.txt (0 => 223402)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001-expected.txt	2017-10-16 13:16:27 UTC (rev 223402)
@@ -0,0 +1,115 @@
+
+PASS .grid 1 
+PASS .grid 2 
+PASS .grid 3 
+PASS .grid 4 
+PASS .grid 5 
+PASS .grid 6 
+PASS .grid 7 
+PASS .grid 8 
+PASS .grid 9 
+PASS .grid 10 
+PASS .grid 11 
+PASS .grid 12 
+PASS .grid 13 
+PASS .grid 14 
+PASS .grid 15 
+PASS .grid 16 
+PASS .grid 17 
+PASS .grid 18 
+PASS .grid 19 
+PASS .grid 20 
+PASS .grid 21 
+PASS .grid 22 
+PASS .grid 23 
+PASS .grid 24 
+PASS .grid 25 
+PASS .grid 26 
+PASS .grid 27 
+PASS .grid 28 
+PASS .grid 29 
+PASS .grid 30 
+PASS .grid 31 
+PASS .grid 32 
+PASS .grid 33 
+PASS .grid 34 
+PASS .grid 35 
+PASS .grid 36 
+1) place-content: normal
+
+1.2) Unconstrained grid container
+
+X
+XXXX XXX XX X
+X
+XXXX XXX XX X
+XXXXXXXXX X
+XX
+X
+X
+X
+X
+1.2) Constrained grid container
+
+X
+XXXX XXX XX X
+X
+XXXX XXX XX X
+XXXXXXXXX X
+XX
+X
+X
+X
+X
+2) place-content: stretch
+
+2.2) Unconstrained grid container
+
+X
+XXXX XXX XX X
+X
+XXXX XXX XX X
+XXXXXXXXX X
+XX
+X
+X
+X
+X
+2.2) Constrained grid container
+
+X
+XXXX XXX XX X
+X
+XXXX XXX XX X
+XXXXXXXXX X
+XX
+X
+X
+X
+X
+3) place-content: start
+
+3.1) Unconstrained grid container
+
+X
+XXXX XXX XX X
+X
+XXXX XXX XX X
+XXXXXXXXX X
+XX
+X
+X
+X
+X
+3.2) Constrained grid container
+
+X
+XXXX XXX XX X
+X
+XXXX XXX XX X
+XXXXXXXXX X
+XX
+X
+X
+X
+X

Added: releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001.html (0 => 223402)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001.html	2017-10-16 13:16:27 UTC (rev 223402)
@@ -0,0 +1,208 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: fit-content() tracks don't stretch</title>
+<link rel="author" title="Manuel Rego Casasnovas" href=""
+<link rel="help" href="" title="7.2. Explicit Track Sizing: the grid-template-rows and grid-template-columns properties">
+<link rel="help" href="" title="10.5. Aligning the Grid: the justify-content and align-content properties">
+<link rel="help" href="" title="11.8. Stretch auto Tracks">
+<meta name="flags" content="ahem dom">
+<meta name="assert" content="This test checks that 'fit-content()' tracks behave the same with 'normal', 'stretch' or 'start' values for content distribution properties.">
+
+<style>
+.grid {
+  display: grid;
+  width: 400px;
+  height: 200px;
+  font: 25px/1 Ahem;
+}
+
+.constrainedGrid {
+  width: 20px;
+  height: 10px;
+}
+
+.fitContent200x100 {
+  grid-template-columns: fit-content(200px);
+  grid-template-rows: fit-content(100px);
+}
+
+.placeContentStretch {
+  place-content: stretch;
+}
+
+.placeContentStart {
+  place-content: start;
+}
+</style>
+
+<script src=""
+<script src=""
+<script src=""
+
+<body _onLoad_="checkLayout('.grid');">
+
+<div id="log"></div>
+
+<h1>1) place-content: normal</h1>
+
+<h2>1.2) Unconstrained grid container</h2>
+
+<div class="grid" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="400" data-expected-height="200">X</div>
+</div>
+
+<div class="grid" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="400" data-expected-height="200">XXXX XXX XX X</div>
+</div>
+
+<div class="grid fitContent200x100" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="25" data-expected-height="25">X</div>
+</div>
+
+<div class="grid fitContent200x100" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="200" data-expected-height="50">XXXX XXX XX X</div>
+</div>
+
+<div class="grid fitContent200x100" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="225" data-expected-height="50">XXXXXXXXX X</div>
+</div>
+
+<div class="grid fitContent200x100" data-expected-width="400" data-expected-height="200">
+    <div data-expected-width="50" data-expected-height="125">XX<br>X<br>X<br>X<br>X</div>
+</div>
+
+<h2>1.2) Constrained grid container</h2>
+
+<div class="grid constrainedGrid" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="25" data-expected-height="25">X</div>
+</div>
+
+<div class="grid constrainedGrid" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="100" data-expected-height="75">XXXX XXX XX X</div>
+</div>
+
+<div class="grid constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="25" data-expected-height="25">X</div>
+</div>
+
+<div class="grid constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="100" data-expected-height="75">XXXX XXX XX X</div>
+</div>
+
+<div class="grid constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="225" data-expected-height="50">XXXXXXXXX X</div>
+</div>
+
+<div class="grid constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+    <div data-expected-width="50" data-expected-height="125">XX<br>X<br>X<br>X<br>X</div>
+</div>
+
+<h1>2) place-content: stretch</h1>
+
+<h2>2.2) Unconstrained grid container</h2>
+
+<div class="grid placeContentStretch" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="400" data-expected-height="200">X</div>
+</div>
+
+<div class="grid placeContentStretch" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="400" data-expected-height="200">XXXX XXX XX X</div>
+</div>
+
+<div class="grid placeContentStretch fitContent200x100" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="25" data-expected-height="25">X</div>
+</div>
+
+<div class="grid placeContentStretch fitContent200x100" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="200" data-expected-height="50">XXXX XXX XX X</div>
+</div>
+
+<div class="grid placeContentStretch fitContent200x100" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="225" data-expected-height="50">XXXXXXXXX X</div>
+</div>
+
+<div class="grid placeContentStretch fitContent200x100" data-expected-width="400" data-expected-height="200">
+    <div data-expected-width="50" data-expected-height="125">XX<br>X<br>X<br>X<br>X</div>
+</div>
+
+<h2>2.2) Constrained grid container</h2>
+
+<div class="grid placeContentStretch constrainedGrid" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="25" data-expected-height="25">X</div>
+</div>
+
+<div class="grid placeContentStretch constrainedGrid" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="100" data-expected-height="75">XXXX XXX XX X</div>
+</div>
+
+<div class="grid placeContentStretch constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="25" data-expected-height="25">X</div>
+</div>
+
+<div class="grid placeContentStretch constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="100" data-expected-height="75">XXXX XXX XX X</div>
+</div>
+
+<div class="grid placeContentStretch constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="225" data-expected-height="50">XXXXXXXXX X</div>
+</div>
+
+<div class="grid placeContentStretch constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+    <div data-expected-width="50" data-expected-height="125">XX<br>X<br>X<br>X<br>X</div>
+</div>
+
+<h1>3) place-content: start</h1>
+
+<h2>3.1) Unconstrained grid container</h2>
+
+<div class="grid placeContentStart" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="25" data-expected-height="25">X</div>
+</div>
+
+<div class="grid placeContentStart" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="325" data-expected-height="25">XXXX XXX XX X</div>
+</div>
+
+<div class="grid placeContentStart fitContent200x100" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="25" data-expected-height="25">X</div>
+</div>
+
+<div class="grid placeContentStart fitContent200x100" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="200" data-expected-height="50">XXXX XXX XX X</div>
+</div>
+
+<div class="grid placeContentStart fitContent200x100" data-expected-width="400" data-expected-height="200">
+  <div data-expected-width="225" data-expected-height="50">XXXXXXXXX X</div>
+</div>
+
+<div class="grid placeContentStart fitContent200x100" data-expected-width="400" data-expected-height="200">
+    <div data-expected-width="50" data-expected-height="125">XX<br>X<br>X<br>X<br>X</div>
+</div>
+
+<h2>3.2) Constrained grid container</h2>
+
+<div class="grid placeContentStart constrainedGrid" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="25" data-expected-height="25">X</div>
+</div>
+
+<div class="grid placeContentStart constrainedGrid" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="100" data-expected-height="75">XXXX XXX XX X</div>
+</div>
+
+<div class="grid placeContentStart constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="25" data-expected-height="25">X</div>
+</div>
+
+<div class="grid placeContentStart constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="100" data-expected-height="75">XXXX XXX XX X</div>
+</div>
+
+<div class="grid placeContentStart constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+  <div data-expected-width="225" data-expected-height="50">XXXXXXXXX X</div>
+</div>
+
+<div class="grid placeContentStart constrainedGrid fitContent200x100" data-expected-width="20" data-expected-height="10">
+    <div data-expected-width="50" data-expected-height="125">XX<br>X<br>X<br>X<br>X</div>
+</div>
+
+</body>

Modified: releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/w3c-import.log (223401 => 223402)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/w3c-import.log	2017-10-16 13:14:53 UTC (rev 223401)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/w3c-import.log	2017-10-16 13:16:27 UTC (rev 223402)
@@ -112,6 +112,7 @@
 /LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-023.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-024-expected.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-024.html
+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-001.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-002.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-003.html

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog (223401 => 223402)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog	2017-10-16 13:14:53 UTC (rev 223401)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog	2017-10-16 13:16:27 UTC (rev 223402)
@@ -1,3 +1,32 @@
+2017-09-25  Manuel Rego Casasnovas  <r...@igalia.com>
+
+        [css-grid] fit-content() tracks shouldn't stretch
+        https://bugs.webkit.org/show_bug.cgi?id=177300
+
+        Reviewed by Sergio Villar Senin.
+
+        The spec is pretty clear regarding this
+        (https://drafts.csswg.org/css-grid/#algo-stretch):
+          "This step sizes expands tracks that have an auto max track sizing
+           function by dividing any remaining positive, definite free space
+           equally amongst them."
+
+        The fit-content() tracks don't have an auto max track sizing function,
+        so they shouldn't be considered in this step of the algorithm.
+
+        The patch modifies GridTrackSizingAlgorithm::initializeTrackSizes()
+        so it doesn't consider fit-content() tracks as auto sized ones
+        (which are the ones later stretched in the last step of the algorithm).
+
+        Test: imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001.html
+
+        * rendering/GridTrackSizingAlgorithm.cpp:
+        (WebCore::GridTrackSizingAlgorithm::initializeTrackSizes):
+        (WebCore::GridTrackSizingAlgorithm::stretchAutoTracks):
+        (WebCore::GridTrackSizingAlgorithm::setup):
+        (WebCore::GridTrackSizingAlgorithm::reset):
+        * rendering/GridTrackSizingAlgorithm.h:
+
 2017-09-24  Joanmarie Diggs  <jdi...@igalia.com>
 
         [ATK] Object attributes are missing for ARIA live region roles

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp (223401 => 223402)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp	2017-10-16 13:14:53 UTC (rev 223401)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp	2017-10-16 13:16:27 UTC (rev 223402)
@@ -970,7 +970,7 @@
 {
     ASSERT(m_contentSizedTracksIndex.isEmpty());
     ASSERT(m_flexibleSizedTracksIndex.isEmpty());
-    ASSERT(m_autoSizedTracksIndex.isEmpty());
+    ASSERT(m_autoSizedTracksForStretchIndex.isEmpty());
 
     Vector<GridTrack>& allTracks = tracks(m_direction);
     const bool hasDefiniteFreeSpace = !!availableSpace();
@@ -993,8 +993,8 @@
             m_contentSizedTracksIndex.append(i);
         if (trackSize.maxTrackBreadth().isFlex())
             m_flexibleSizedTracksIndex.append(i);
-        if (trackSize.hasAutoMaxTrackBreadth())
-            m_autoSizedTracksIndex.append(i);
+        if (trackSize.hasAutoMaxTrackBreadth() && !trackSize.isFitContent())
+            m_autoSizedTracksForStretchIndex.append(i);
     }
 }
 
@@ -1071,7 +1071,7 @@
 
 void GridTrackSizingAlgorithm::stretchAutoTracks()
 {
-    if (m_autoSizedTracksIndex.isEmpty())
+    if (m_autoSizedTracksForStretchIndex.isEmpty())
         return;
 
     auto currentFreeSpace = freeSpace(m_direction);
@@ -1082,9 +1082,9 @@
         return;
 
     Vector<GridTrack>& allTracks = tracks(m_direction);
-    unsigned numberOfAutoSizedTracks = m_autoSizedTracksIndex.size();
+    unsigned numberOfAutoSizedTracks = m_autoSizedTracksForStretchIndex.size();
     LayoutUnit sizeToIncrease = currentFreeSpace.value() / numberOfAutoSizedTracks;
-    for (const auto& trackIndex : m_autoSizedTracksIndex) {
+    for (const auto& trackIndex : m_autoSizedTracksForStretchIndex) {
         auto& track = allTracks[trackIndex];
         track.setBaseSize(track.baseSize() + sizeToIncrease);
     }
@@ -1145,7 +1145,7 @@
 
     m_contentSizedTracksIndex.shrink(0);
     m_flexibleSizedTracksIndex.shrink(0);
-    m_autoSizedTracksIndex.shrink(0);
+    m_autoSizedTracksForStretchIndex.shrink(0);
 
     setFreeSpace(direction, freeSpace);
     tracks(direction).resize(numTracks);
@@ -1193,7 +1193,7 @@
     m_rows.shrink(0);
     m_contentSizedTracksIndex.shrink(0);
     m_flexibleSizedTracksIndex.shrink(0);
-    m_autoSizedTracksIndex.shrink(0);
+    m_autoSizedTracksForStretchIndex.shrink(0);
     setAvailableSpace(ForRows, std::nullopt);
     setAvailableSpace(ForColumns, std::nullopt);
 }

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/GridTrackSizingAlgorithm.h (223401 => 223402)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/GridTrackSizingAlgorithm.h	2017-10-16 13:14:53 UTC (rev 223401)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/GridTrackSizingAlgorithm.h	2017-10-16 13:16:27 UTC (rev 223402)
@@ -172,7 +172,7 @@
     Vector<GridTrack> m_rows;
     Vector<unsigned> m_contentSizedTracksIndex;
     Vector<unsigned> m_flexibleSizedTracksIndex;
-    Vector<unsigned> m_autoSizedTracksIndex;
+    Vector<unsigned> m_autoSizedTracksForStretchIndex;
 
     GridTrackSizingDirection m_direction;
     SizingOperation m_sizingOperation;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to