<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[203716] trunk</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/203716">203716</a></dd>
<dt>Author</dt> <dd>svillar@igalia.com</dd>
<dt>Date</dt> <dd>2016-07-26 02:37:41 -0700 (Tue, 26 Jul 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>[css-grid] grid-auto-flow|row should take a <track-size>+
https://bugs.webkit.org/show_bug.cgi?id=160158
Reviewed by Darin Adler.
Source/WebCore:
* css/CSSComputedStyleDeclaration.cpp:
(WebCore::valueForGridTrackSizeList):
(WebCore::ComputedStyleExtractor::propertyValue): Return a list of <track-size> instead of
just one.
* css/CSSParser.cpp:
(WebCore::CSSParser::parseValue): Use the new values of TrackListType;
(WebCore::CSSParser::parseGridTemplateRowsAndAreasAndColumns): Ditto.
(WebCore::CSSParser::parseGridTemplateShorthand): Ditto.
(WebCore::CSSParser::parseGridShorthand): Ditto.
(WebCore::CSSParser::parseGridTrackList): Changed behavior depending on the value of
TrackSizeList.
* css/CSSParser.h: TrackListType has now 3 different values which determine the behavior of
parseGridTrackList.
* css/CSSPropertyNames.in: Use a new converter for lists.
* css/StyleBuilderConverter.h:
(WebCore::StyleBuilderConverter::convertGridTrackSizeList):
* rendering/RenderGrid.cpp:
(WebCore::RenderGrid::rawGridTrackSize): Resolve the size of the auto track.
* rendering/style/RenderStyle.h:
(WebCore::RenderStyle::gridAutoColumns): Return a Vector.
(WebCore::RenderStyle::gridAutoRows): Ditto.
(WebCore::RenderStyle::setGridAutoColumns): Store a Vector.
(WebCore::RenderStyle::setGridAutoRows): Ditto.
(WebCore::RenderStyle::initialGridAutoColumns): Return a Vector with one auto track.
(WebCore::RenderStyle::initialGridAutoRows): Ditto.
* rendering/style/StyleGridData.h: Store a Vector of GridTrackSize instead of just one.
LayoutTests:
* fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt:
* fast/css-grid-layout/grid-auto-columns-rows-get-set.html:
* fast/css-grid-layout/grid-shorthand-get-set-expected.txt:
* fast/css-grid-layout/grid-shorthand-get-set.html:
* svg/css/getComputedStyle-basic-expected.txt: CSSPrimitiveValue -> CSSValueList.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastcssgridlayoutgridautocolumnsrowsgetsetexpectedtxt">trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssgridlayoutgridautocolumnsrowsgetsethtml">trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html</a></li>
<li><a href="#trunkLayoutTestsfastcssgridlayoutgridshorthandgetsetexpectedtxt">trunk/LayoutTests/fast/css-grid-layout/grid-shorthand-get-set-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssgridlayoutgridshorthandgetsethtml">trunk/LayoutTests/fast/css-grid-layout/grid-shorthand-get-set.html</a></li>
<li><a href="#trunkLayoutTestssvgcssgetComputedStylebasicexpectedtxt">trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssCSSComputedStyleDeclarationcpp">trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSParsercpp">trunk/Source/WebCore/css/CSSParser.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSParserh">trunk/Source/WebCore/css/CSSParser.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSPropertyNamesin">trunk/Source/WebCore/css/CSSPropertyNames.in</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderConverterh">trunk/Source/WebCore/css/StyleBuilderConverter.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderGridcpp">trunk/Source/WebCore/rendering/RenderGrid.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleRenderStyleh">trunk/Source/WebCore/rendering/style/RenderStyle.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleStyleGridDatah">trunk/Source/WebCore/rendering/style/StyleGridData.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/LayoutTests/ChangeLog        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-07-25 Sergio Villar Senin <svillar@igalia.com>
+
+ [css-grid] grid-auto-flow|row should take a <track-size>+
+ https://bugs.webkit.org/show_bug.cgi?id=160158
+
+ Reviewed by Darin Adler.
+
+ * fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt:
+ * fast/css-grid-layout/grid-auto-columns-rows-get-set.html:
+ * fast/css-grid-layout/grid-shorthand-get-set-expected.txt:
+ * fast/css-grid-layout/grid-shorthand-get-set.html:
+ * svg/css/getComputedStyle-basic-expected.txt: CSSPrimitiveValue -> CSSValueList.
+
</ins><span class="cx"> 2016-07-25 Frederic Wang <fwang@igalia.com>
</span><span class="cx">
</span><span class="cx"> MathOperator: Add a mapping from combining to non-combining equivalents
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgridlayoutgridautocolumnsrowsgetsetexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -22,6 +22,10 @@
</span><span class="cx"> PASS window.getComputedStyle(gridAutoFixedFixedWithFixedFixedWithChildren, '').getPropertyValue('grid-auto-columns') is "40px"
</span><span class="cx"> PASS window.getComputedStyle(gridAutoFixedFixedWithFixedFixedWithChildren, '').getPropertyValue('grid-template-columns') is "20px 40px 40px"
</span><span class="cx"> PASS window.getComputedStyle(gridAutoFixedFixedWithFixedFixedWithChildren, '').getPropertyValue('grid-template-rows') is "15px 30px 30px"
</span><ins>+PASS window.getComputedStyle(gridAutoMultipleTracks, '').getPropertyValue('grid-template-columns') is "25px 50px 100px 25px"
+PASS window.getComputedStyle(gridAutoMultipleTracks, '').getPropertyValue('grid-template-rows') is "10px 20px 30px 10px"
+PASS window.getComputedStyle(gridAutoMultipleTracksNegativeIndexes, '').getPropertyValue('grid-template-columns') is "100px 25px 50px 100px"
+PASS window.getComputedStyle(gridAutoMultipleTracksNegativeIndexes, '').getPropertyValue('grid-template-rows') is "30px 10px 20px 30px"
</ins><span class="cx">
</span><span class="cx"> Test that grid-template-* definitions are not affected by grid-auto-* definitions
</span><span class="cx"> PASS window.getComputedStyle(gridAutoFixedFixed, '').getPropertyValue('grid-template-columns') is "none"
</span><span class="lines">@@ -36,22 +40,28 @@
</span><span class="cx"> PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is 'auto'
</span><span class="cx">
</span><span class="cx"> Test getting and setting grid-auto-columns and grid-auto-rows through JS
</span><del>-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is '180px'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is '660px'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is 'minmax(-webkit-min-content, 48px)'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is 'minmax(80px, -webkit-min-content)'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is 'minmax(-webkit-min-content, -webkit-max-content)'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is 'minmax(-webkit-max-content, -webkit-min-content)'
</del><ins>+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is "180px"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is "660px"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is "minmax(-webkit-min-content, 48px)"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is "minmax(80px, -webkit-min-content)"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is "minmax(-webkit-min-content, -webkit-max-content)"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is "minmax(-webkit-max-content, -webkit-min-content)"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is "minmax(-webkit-min-content, 10px) 48px 5%"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is "auto 30px minmax(10%, 60%)"
</ins><span class="cx">
</span><span class="cx"> Test setting grid-auto-columns and grid-auto-rows to bad minmax value through JS
</span><del>-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is 'auto'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is 'auto'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is 'auto'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is 'auto'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is 'auto'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is 'auto'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is 'auto'
-PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is 'auto'
</del><ins>+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is "auto"
+PASS getComputedStyle(element, '').getPropertyValue('grid-auto-rows') is "auto"
</ins><span class="cx">
</span><span class="cx"> Test setting grid-auto-columns and grid-auto-rows to 'inherit' through JS
</span><span class="cx"> PASS getComputedStyle(element, '').getPropertyValue('grid-auto-columns') is '50px'
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgridlayoutgridautocolumnsrowsgetsethtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -31,6 +31,13 @@
</span><span class="cx"> grid-auto-columns: minmax(10vw, auto);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+.gridAutoMultipleTracks {
+ width: 100px;
+ height: 50px;
+ grid-auto-rows: 10px 20px 30px;
+ grid-auto-columns: 25px 50px 100px;
+}
+
</ins><span class="cx"> </style>
</span><span class="cx"> <script src="../../resources/js-test-pre.js"></script>
</span><span class="cx"> <script src="resources/grid-definitions-parsing-utils.js"></script>
</span><span class="lines">@@ -47,6 +54,19 @@
</span><span class="cx"> <div class="sizedToGridArea thirdRowAutoColumn"></div>
</span><span class="cx"> <div class="sizedToGridArea autoRowThirdColumn"></div>
</span><span class="cx"> </div>
</span><ins>+<div class="grid gridAutoMultipleTracks" id="gridAutoMultipleTracks">
+ <div style="grid-column: 1; grid-row: 1"></div>
+ <div style="grid-column: 2; grid-row: 2"></div>
+ <div style="grid-column: 3; grid-row: 3"></div>
+ <div style="grid-column: 4; grid-row: 4"></div>
+</div>
+<div class="grid gridAutoMultipleTracks" id="gridAutoMultipleTracksNegativeIndexes">
+ <div style="grid-column: -2; grid-row: -2"></div>
+ <div style="grid-column: -3; grid-row: -3"></div>
+ <div style="grid-column: -4; grid-row: -4"></div>
+ <div style="grid-column: -5; grid-row: -5"></div>
+</div>
+
</ins><span class="cx"> <script>
</span><span class="cx"> description('Test that setting and getting grid-auto-columns and grid-auto-rows works as expected');
</span><span class="cx">
</span><span class="lines">@@ -62,6 +82,8 @@
</span><span class="cx"> testGridTemplatesValues(document.getElementById("gridAutoFixedFixedWithChildren"), "50px", "30px");
</span><span class="cx"> testGridAutoDefinitionsValues(document.getElementById("gridAutoFixedFixedWithFixedFixedWithChildren"), "30px", "40px");
</span><span class="cx"> testGridTemplatesValues(document.getElementById("gridAutoFixedFixedWithFixedFixedWithChildren"), "20px", "15px", "20px 40px 40px", "15px 30px 30px");
</span><ins>+testGridTemplatesValues(document.getElementById("gridAutoMultipleTracks"), "25px 50px 100px 25px", "10px 20px 30px 10px");
+testGridTemplatesValues(document.getElementById("gridAutoMultipleTracksNegativeIndexes"), "100px 25px 50px 100px", "30px 10px 20px 30px");
</ins><span class="cx">
</span><span class="cx"> debug("");
</span><span class="cx"> debug("Test that grid-template-* definitions are not affected by grid-auto-* definitions");
</span><span class="lines">@@ -76,65 +98,32 @@
</span><span class="cx"> shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'");
</span><span class="cx"> shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'");
</span><span class="cx">
</span><ins>+function testAutoValues(autoCols, autoRows, computedAutoCols, computedAutoRows) {
+ element = document.createElement("div");
+ document.body.appendChild(element);
+ element.style.fontSize = "10px";
+ element.style.gridAutoColumns = autoCols;
+ element.style.gridAutoRows = autoRows;
+ shouldBeEqualToString("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", computedAutoCols || autoCols);
+ shouldBeEqualToString("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", computedAutoRows || autoRows);
+}
+
</ins><span class="cx"> debug("");
</span><span class="cx"> debug("Test getting and setting grid-auto-columns and grid-auto-rows through JS");
</span><del>-element.style.font = "10px Ahem";
-element.style.gridAutoColumns = "18em";
-element.style.gridAutoRows = "66em";
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'180px'");
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'660px'");
</del><ins>+testAutoValues("18em", "66em", "180px", "660px");
+testAutoValues("minmax(-webkit-min-content, 8vh)", "minmax(10vw, -webkit-min-content)", "minmax(-webkit-min-content, 48px)", "minmax(80px, -webkit-min-content)");
+testAutoValues("minmax(-webkit-min-content, -webkit-max-content)", "minmax(-webkit-max-content, -webkit-min-content)");
+testAutoValues("minmax(-webkit-min-content, 10px) 48px 5%", "auto 30px minmax(10%, 60%)");
</ins><span class="cx">
</span><del>-element = document.createElement("div");
-document.body.appendChild(element);
-element.style.gridAutoColumns = "minmax(-webkit-min-content, 8vh)";
-element.style.gridAutoRows = "minmax(10vw, -webkit-min-content)";
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'minmax(-webkit-min-content, 48px)'");
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'minmax(80px, -webkit-min-content)'");
-
-element = document.createElement("div");
-document.body.appendChild(element);
-element.style.gridAutoColumns = "minmax(-webkit-min-content, -webkit-max-content)";
-element.style.gridAutoRows = "minmax(-webkit-max-content, -webkit-min-content)";
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'minmax(-webkit-min-content, -webkit-max-content)'");
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'minmax(-webkit-max-content, -webkit-min-content)'");
-
</del><span class="cx"> debug("");
</span><span class="cx"> debug("Test setting grid-auto-columns and grid-auto-rows to bad minmax value through JS");
</span><del>-element = document.createElement("div");
-document.body.appendChild(element);
-// No comma.
-element.style.gridAutoColumns = "minmax(10px 20px)";
-// Only 1 argument provided.
-element.style.gridAutoRows = "minmax(10px)";
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'");
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'");
</del><ins>+testAutoValues("minmax(10px 20px)", "minmax(10px)", "auto", "auto");
+testAutoValues("minmax(minmax(10px, 20px), 20px)", "minmax(10px, 20px, 30px)", "auto", "auto");
+testAutoValues("minmax()", "minmax(30px 30% 30em)", "auto", "auto");
+testAutoValues("none", "none", "auto", "auto");
+testAutoValues("10px [a] 20px", "[z] auto [y] -webkit-min-content", "auto", "auto");
+testAutoValues("repeat(2, 10px [a] 20px)", "[z] repeat(auto-fit, 100px)", "auto", "auto");
</ins><span class="cx">
</span><del>-element = document.createElement("div");
-document.body.appendChild(element);
-// Nested minmax.
-element.style.gridAutoColumns = "minmax(minmax(10px, 20px), 20px)";
-// Only 2 arguments are allowed.
-element.style.gridAutoRows = "minmax(10px, 20px, 30px)";
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'");
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'");
-
-element = document.createElement("div");
-document.body.appendChild(element);
-// No breadth value.
-element.style.gridAutoColumns = "minmax()";
-// No comma.
-element.style.gridAutoRows = "minmax(30px 30% 30em)";
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'");
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'");
-
-element = document.createElement("div");
-document.body.appendChild(element);
-// None is not allowed for grid-auto-{rows|columns}.
-element.style.gridAutoColumns = "none";
-element.style.gridAutoRows = "none";
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'");
-shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'");
-
</del><span class="cx"> function testInherit()
</span><span class="cx"> {
</span><span class="cx"> var parentElement = document.createElement("div");
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgridlayoutgridshorthandgetsetexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layout/grid-shorthand-get-set-expected.txt (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/grid-shorthand-get-set-expected.txt        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-shorthand-get-set-expected.txt        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -64,6 +64,12 @@
</span><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowAndRowsAndColumns, '').getPropertyValue('grid-auto-flow') is "column"
</span><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowAndRowsAndColumns, '').getPropertyValue('grid-auto-columns') is "20px"
</span><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowAndRowsAndColumns, '').getPropertyValue('grid-auto-rows') is "10px"
</span><ins>+PASS window.getComputedStyle(gridWithAutoFlowAndMultipleAutoTracks, '').getPropertyValue('grid-template-columns') is "none"
+PASS window.getComputedStyle(gridWithAutoFlowAndMultipleAutoTracks, '').getPropertyValue('grid-template-rows') is "none"
+PASS window.getComputedStyle(gridWithAutoFlowAndMultipleAutoTracks, '').getPropertyValue('grid-template-areas') is "none"
+PASS window.getComputedStyle(gridWithAutoFlowAndMultipleAutoTracks, '').getPropertyValue('grid-auto-flow') is "row"
+PASS window.getComputedStyle(gridWithAutoFlowAndMultipleAutoTracks, '').getPropertyValue('grid-auto-columns') is "100px 10%"
+PASS window.getComputedStyle(gridWithAutoFlowAndMultipleAutoTracks, '').getPropertyValue('grid-auto-rows') is "20px 10px"
</ins><span class="cx">
</span><span class="cx"> Test setting wrong values for 'grid' shorthand through CSS (they should resolve to the default: 'row')
</span><span class="cx"> PASS window.getComputedStyle(gridWithNone, '').getPropertyValue('grid-template-columns') is "none"
</span><span class="lines">@@ -120,12 +126,6 @@
</span><span class="cx"> PASS window.getComputedStyle(gridWithWrongSlash2, '').getPropertyValue('grid-auto-flow') is "row"
</span><span class="cx"> PASS window.getComputedStyle(gridWithWrongSlash2, '').getPropertyValue('grid-auto-columns') is "auto"
</span><span class="cx"> PASS window.getComputedStyle(gridWithWrongSlash2, '').getPropertyValue('grid-auto-rows') is "auto"
</span><del>-PASS window.getComputedStyle(gridWithWrongSlash3, '').getPropertyValue('grid-template-columns') is "none"
-PASS window.getComputedStyle(gridWithWrongSlash3, '').getPropertyValue('grid-template-rows') is "none"
-PASS window.getComputedStyle(gridWithWrongSlash3, '').getPropertyValue('grid-template-areas') is "none"
-PASS window.getComputedStyle(gridWithWrongSlash3, '').getPropertyValue('grid-auto-flow') is "row"
-PASS window.getComputedStyle(gridWithWrongSlash3, '').getPropertyValue('grid-auto-columns') is "auto"
-PASS window.getComputedStyle(gridWithWrongSlash3, '').getPropertyValue('grid-auto-rows') is "auto"
</del><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowRowAndColumn, '').getPropertyValue('grid-template-columns') is "none"
</span><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowRowAndColumn, '').getPropertyValue('grid-template-rows') is "none"
</span><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowRowAndColumn, '').getPropertyValue('grid-template-areas') is "none"
</span><span class="lines">@@ -132,12 +132,6 @@
</span><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowRowAndColumn, '').getPropertyValue('grid-auto-flow') is "row"
</span><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowRowAndColumn, '').getPropertyValue('grid-auto-columns') is "auto"
</span><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowRowAndColumn, '').getPropertyValue('grid-auto-rows') is "auto"
</span><del>-PASS window.getComputedStyle(gridWithoutAutoFlowAndExtraBreath, '').getPropertyValue('grid-template-columns') is "none"
-PASS window.getComputedStyle(gridWithoutAutoFlowAndExtraBreath, '').getPropertyValue('grid-template-rows') is "none"
-PASS window.getComputedStyle(gridWithoutAutoFlowAndExtraBreath, '').getPropertyValue('grid-template-areas') is "none"
-PASS window.getComputedStyle(gridWithoutAutoFlowAndExtraBreath, '').getPropertyValue('grid-auto-flow') is "row"
-PASS window.getComputedStyle(gridWithoutAutoFlowAndExtraBreath, '').getPropertyValue('grid-auto-columns') is "auto"
-PASS window.getComputedStyle(gridWithoutAutoFlowAndExtraBreath, '').getPropertyValue('grid-auto-rows') is "auto"
</del><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowString1, '').getPropertyValue('grid-template-columns') is "none"
</span><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowString1, '').getPropertyValue('grid-template-rows') is "none"
</span><span class="cx"> PASS window.getComputedStyle(gridWithAutoFlowString1, '').getPropertyValue('grid-template-areas') is "none"
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgridlayoutgridshorthandgetsethtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layout/grid-shorthand-get-set.html (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/grid-shorthand-get-set.html        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-shorthand-get-set.html        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -33,6 +33,9 @@
</span><span class="cx"> #gridWithAutoFlowAndRowsAndColumns {
</span><span class="cx"> grid: column 10px / 20px;
</span><span class="cx"> }
</span><ins>+#gridWithAutoFlowAndMultipleAutoTracks {
+ grid: row 20px 10px / 100px 10%;
+}
</ins><span class="cx">
</span><span class="cx"> /* Bad values. */
</span><span class="cx">
</span><span class="lines">@@ -58,17 +61,11 @@
</span><span class="cx"> grid: column / 10px;
</span><span class="cx"> }
</span><span class="cx"> #gridWithWrongSlash2 {
</span><del>- grid: column 10px 20px;
-}
-#gridWithWrongSlash3 {
</del><span class="cx"> grid: 5x / 10px / 20px;
</span><span class="cx"> }
</span><span class="cx"> #gridWithAutoFlowRowAndColumn {
</span><span class="cx"> grid: row column 10px;
</span><span class="cx"> }
</span><del>-#gridWithoutAutoFlowAndExtraBreath {
- grid: row 10px / 20px 30px;
-}
</del><span class="cx"> #gridWithAutoFlowString1 {
</span><span class="cx"> grid: row 10px "a";
</span><span class="cx"> }
</span><span class="lines">@@ -109,9 +106,7 @@
</span><span class="cx"> <div class="grid" id="gridWithMisplacedNone2"></div>
</span><span class="cx"> <div class="grid" id="gridWithWrongSlash1"></div>
</span><span class="cx"> <div class="grid" id="gridWithWrongSlash2"></div>
</span><del>-<div class="grid" id="gridWithWrongSlash3"></div>
</del><span class="cx"> <div class="grid" id="gridWithAutoFlowRowAndColumn"></div>
</span><del>-<div class="grid" id="gridWithoutAutoFlowAndExtraBreath"></div>
</del><span class="cx"> <div class="grid" id="gridWithAutoFlowString1"></div>
</span><span class="cx"> <div class="grid" id="gridWithAutoFlowString2"></div>
</span><span class="cx"> <div class="grid" id="gridWithAutoFlowString3"></div>
</span><span class="lines">@@ -118,6 +113,7 @@
</span><span class="cx"> <div class="grid" id="gridWithTemplateAndAutoFlow"></div>
</span><span class="cx"> <div class="grid" id="gridWithTemplateAndMisplacedString1"></div>
</span><span class="cx"> <div class="grid" id="gridWithMisplacedDense"></div>
</span><ins>+<div class="grid" id="gridWithAutoFlowAndMultipleAutoTracks"></div>
</ins><span class="cx"> <script src="resources/grid-shorthand-parsing-utils.js"></script>
</span><span class="cx"> <script>
</span><span class="cx"> description("This test checks that the 'grid' shorthand is properly parsed and the longhand properties correctly assigned.");
</span><span class="lines">@@ -133,6 +129,7 @@
</span><span class="cx"> testGridDefinitionsValues(document.getElementById("gridWithAutoFlowColumnDense"), "none", "none", "none", "column dense", "10px", "10px");
</span><span class="cx"> testGridDefinitionsValues(document.getElementById("gridWithAutoFlowDenseRow"), "none", "none", "none", "row dense", "10px", "10px");
</span><span class="cx"> testGridDefinitionsValues(document.getElementById("gridWithAutoFlowAndRowsAndColumns"), "none", "none", "none", "column", "20px", "10px");
</span><ins>+ testGridDefinitionsValues(document.getElementById("gridWithAutoFlowAndMultipleAutoTracks"), "none", "none", "none", "row", "100px 10%", "20px 10px");
</ins><span class="cx">
</span><span class="cx"> debug("");
</span><span class="cx"> debug("Test setting wrong values for 'grid' shorthand through CSS (they should resolve to the default: 'row')");
</span><span class="lines">@@ -145,9 +142,7 @@
</span><span class="cx"> testGridDefinitionsValues(document.getElementById("gridWithMisplacedDense"), "none", "none", "none", "row", "auto", "auto");
</span><span class="cx"> testGridDefinitionsValues(document.getElementById("gridWithWrongSlash1"), "none", "none", "none", "row", "auto", "auto");
</span><span class="cx"> testGridDefinitionsValues(document.getElementById("gridWithWrongSlash2"), "none", "none", "none", "row", "auto", "auto");
</span><del>- testGridDefinitionsValues(document.getElementById("gridWithWrongSlash3"), "none", "none", "none", "row", "auto", "auto");
</del><span class="cx"> testGridDefinitionsValues(document.getElementById("gridWithAutoFlowRowAndColumn"), "none", "none", "none", "row", "auto", "auto");
</span><del>- testGridDefinitionsValues(document.getElementById("gridWithoutAutoFlowAndExtraBreath"), "none", "none", "none", "row", "auto", "auto");
</del><span class="cx"> testGridDefinitionsValues(document.getElementById("gridWithAutoFlowString1"), "none", "none", "none", "row", "auto", "auto");
</span><span class="cx"> testGridDefinitionsValues(document.getElementById("gridWithAutoFlowString2"), "none", "none", "none", "row", "auto", "auto");
</span><span class="cx"> testGridDefinitionsValues(document.getElementById("gridWithAutoFlowString3"), "none", "none", "none", "row", "auto", "auto");
</span></span></pre></div>
<a id="trunkLayoutTestssvgcssgetComputedStylebasicexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -329,11 +329,11 @@
</span><span class="cx"> rect: style.getPropertyValue(font-variant-east-asian) : normal
</span><span class="cx"> rect: style.getPropertyCSSValue(font-variant-east-asian) : [object CSSPrimitiveValue]
</span><span class="cx"> rect: style.getPropertyValue(grid-auto-columns) : auto
</span><del>-rect: style.getPropertyCSSValue(grid-auto-columns) : [object CSSPrimitiveValue]
</del><ins>+rect: style.getPropertyCSSValue(grid-auto-columns) : [object CSSValueList]
</ins><span class="cx"> rect: style.getPropertyValue(grid-auto-flow) : row
</span><span class="cx"> rect: style.getPropertyCSSValue(grid-auto-flow) : [object CSSValueList]
</span><span class="cx"> rect: style.getPropertyValue(grid-auto-rows) : auto
</span><del>-rect: style.getPropertyCSSValue(grid-auto-rows) : [object CSSPrimitiveValue]
</del><ins>+rect: style.getPropertyCSSValue(grid-auto-rows) : [object CSSValueList]
</ins><span class="cx"> rect: style.getPropertyValue(grid-column-end) : auto
</span><span class="cx"> rect: style.getPropertyCSSValue(grid-column-end) : [object CSSPrimitiveValue]
</span><span class="cx"> rect: style.getPropertyValue(grid-column-start) : auto
</span><span class="lines">@@ -863,11 +863,11 @@
</span><span class="cx"> g: style.getPropertyValue(font-variant-east-asian) : normal
</span><span class="cx"> g: style.getPropertyCSSValue(font-variant-east-asian) : [object CSSPrimitiveValue]
</span><span class="cx"> g: style.getPropertyValue(grid-auto-columns) : auto
</span><del>-g: style.getPropertyCSSValue(grid-auto-columns) : [object CSSPrimitiveValue]
</del><ins>+g: style.getPropertyCSSValue(grid-auto-columns) : [object CSSValueList]
</ins><span class="cx"> g: style.getPropertyValue(grid-auto-flow) : row
</span><span class="cx"> g: style.getPropertyCSSValue(grid-auto-flow) : [object CSSValueList]
</span><span class="cx"> g: style.getPropertyValue(grid-auto-rows) : auto
</span><del>-g: style.getPropertyCSSValue(grid-auto-rows) : [object CSSPrimitiveValue]
</del><ins>+g: style.getPropertyCSSValue(grid-auto-rows) : [object CSSValueList]
</ins><span class="cx"> g: style.getPropertyValue(grid-column-end) : auto
</span><span class="cx"> g: style.getPropertyCSSValue(grid-column-end) : [object CSSPrimitiveValue]
</span><span class="cx"> g: style.getPropertyValue(grid-column-start) : auto
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/Source/WebCore/ChangeLog        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -1,3 +1,37 @@
</span><ins>+2016-07-25 Sergio Villar Senin <svillar@igalia.com>
+
+ [css-grid] grid-auto-flow|row should take a <track-size>+
+ https://bugs.webkit.org/show_bug.cgi?id=160158
+
+ Reviewed by Darin Adler.
+
+ * css/CSSComputedStyleDeclaration.cpp:
+ (WebCore::valueForGridTrackSizeList):
+ (WebCore::ComputedStyleExtractor::propertyValue): Return a list of <track-size> instead of
+ just one.
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseValue): Use the new values of TrackListType;
+ (WebCore::CSSParser::parseGridTemplateRowsAndAreasAndColumns): Ditto.
+ (WebCore::CSSParser::parseGridTemplateShorthand): Ditto.
+ (WebCore::CSSParser::parseGridShorthand): Ditto.
+ (WebCore::CSSParser::parseGridTrackList): Changed behavior depending on the value of
+ TrackSizeList.
+ * css/CSSParser.h: TrackListType has now 3 different values which determine the behavior of
+ parseGridTrackList.
+ * css/CSSPropertyNames.in: Use a new converter for lists.
+ * css/StyleBuilderConverter.h:
+ (WebCore::StyleBuilderConverter::convertGridTrackSizeList):
+ * rendering/RenderGrid.cpp:
+ (WebCore::RenderGrid::rawGridTrackSize): Resolve the size of the auto track.
+ * rendering/style/RenderStyle.h:
+ (WebCore::RenderStyle::gridAutoColumns): Return a Vector.
+ (WebCore::RenderStyle::gridAutoRows): Ditto.
+ (WebCore::RenderStyle::setGridAutoColumns): Store a Vector.
+ (WebCore::RenderStyle::setGridAutoRows): Ditto.
+ (WebCore::RenderStyle::initialGridAutoColumns): Return a Vector with one auto track.
+ (WebCore::RenderStyle::initialGridAutoRows): Ditto.
+ * rendering/style/StyleGridData.h: Store a Vector of GridTrackSize instead of just one.
+
</ins><span class="cx"> 2016-07-25 Frederic Wang <fwang@igalia.com>
</span><span class="cx">
</span><span class="cx"> MathOperator: Add a mapping from combining to non-combining equivalents
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSComputedStyleDeclarationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -1111,6 +1111,16 @@
</span><span class="cx"> list.append(WTFMove(lineNames));
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+static Ref<CSSValueList> valueForGridTrackSizeList(GridTrackSizingDirection direction, const RenderStyle& style)
+{
+ auto& autoTrackSizes = direction == ForColumns ? style.gridAutoColumns() : style.gridAutoRows();
+
+ auto list = CSSValueList::createSpaceSeparated();
+ for (auto& trackSize : autoTrackSizes)
+ list->append(specifiedValueForGridTrackSize(trackSize, style));
+ return list;
+}
+
</ins><span class="cx"> static Ref<CSSValue> valueForGridTrackList(GridTrackSizingDirection direction, RenderObject* renderer, const RenderStyle& style)
</span><span class="cx"> {
</span><span class="cx"> bool isRowAxis = direction == ForColumns;
</span><span class="lines">@@ -2881,14 +2891,14 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Specs mention that getComputedStyle() should return the used value of the property instead of the computed
</span><del>- // one for grid-definition-{rows|columns} but not for the grid-auto-{rows|columns} as things like
</del><ins>+ // one for grid-template-{rows|columns} but not for the grid-auto-{rows|columns} as things like
</ins><span class="cx"> // grid-auto-columns: 2fr; cannot be resolved to a value in pixels as the '2fr' means very different things
</span><span class="cx"> // depending on the size of the explicit grid or the number of implicit tracks added to the grid. See
</span><span class="cx"> // http://lists.w3.org/Archives/Public/www-style/2013Nov/0014.html
</span><span class="cx"> case CSSPropertyGridAutoColumns:
</span><del>- return specifiedValueForGridTrackSize(style->gridAutoColumns(), *style);
</del><ins>+ return valueForGridTrackSizeList(ForColumns, *style);
</ins><span class="cx"> case CSSPropertyGridAutoRows:
</span><del>- return specifiedValueForGridTrackSize(style->gridAutoRows(), *style);
</del><ins>+ return valueForGridTrackSizeList(ForRows, *style);
</ins><span class="cx">
</span><span class="cx"> case CSSPropertyGridTemplateColumns:
</span><span class="cx"> return valueForGridTrackList(ForColumns, renderer, *style);
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSParser.cpp (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSParser.cpp        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/Source/WebCore/css/CSSParser.cpp        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -2759,7 +2759,7 @@
</span><span class="cx"> case CSSPropertyGridAutoRows:
</span><span class="cx"> if (!isCSSGridLayoutEnabled())
</span><span class="cx"> return false;
</span><del>- parsedValue = parseGridTrackSize(*m_valueList);
</del><ins>+ parsedValue = parseGridTrackList(GridAuto);
</ins><span class="cx"> break;
</span><span class="cx">
</span><span class="cx"> case CSSPropertyGridTemplateColumns:
</span><span class="lines">@@ -2766,7 +2766,7 @@
</span><span class="cx"> case CSSPropertyGridTemplateRows:
</span><span class="cx"> if (!isCSSGridLayoutEnabled())
</span><span class="cx"> return false;
</span><del>- parsedValue = parseGridTrackList();
</del><ins>+ parsedValue = parseGridTrackList(GridTemplate);
</ins><span class="cx"> break;
</span><span class="cx">
</span><span class="cx"> case CSSPropertyGridColumnStart:
</span><span class="lines">@@ -5689,7 +5689,7 @@
</span><span class="cx"> RefPtr<CSSValue> templateColumns;
</span><span class="cx"> if (m_valueList->current()) {
</span><span class="cx"> ASSERT(isForwardSlashOperator(*m_valueList->current()));
</span><del>- templateColumns = parseGridTemplateColumns(DisallowRepeat);
</del><ins>+ templateColumns = parseGridTemplateColumns(GridTemplateNoRepeat);
</ins><span class="cx"> if (!templateColumns)
</span><span class="cx"> return false;
</span><span class="cx"> // The template-columns <track-list> can't be 'none'.
</span><span class="lines">@@ -5733,7 +5733,7 @@
</span><span class="cx"> if (firstValueIsNone)
</span><span class="cx"> rowsValue = CSSValuePool::singleton().createIdentifierValue(CSSValueNone);
</span><span class="cx"> else
</span><del>- rowsValue = parseGridTrackList();
</del><ins>+ rowsValue = parseGridTrackList(GridTemplate);
</ins><span class="cx">
</span><span class="cx"> if (rowsValue) {
</span><span class="cx"> auto columnsValue = parseGridTemplateColumns();
</span><span class="lines">@@ -5783,13 +5783,13 @@
</span><span class="cx"> RefPtr<CSSValue> autoRowsValue;
</span><span class="cx">
</span><span class="cx"> if (m_valueList->current()) {
</span><del>- autoRowsValue = parseGridTrackSize(*m_valueList);
</del><ins>+ autoRowsValue = parseGridTrackList(GridAuto);
</ins><span class="cx"> if (!autoRowsValue)
</span><span class="cx"> return false;
</span><span class="cx"> if (m_valueList->current()) {
</span><span class="cx"> if (!isForwardSlashOperator(*m_valueList->current()) || !m_valueList->next())
</span><span class="cx"> return false;
</span><del>- autoColumnsValue = parseGridTrackSize(*m_valueList);
</del><ins>+ autoColumnsValue = parseGridTrackList(GridAuto);
</ins><span class="cx"> if (!autoColumnsValue)
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><span class="lines">@@ -5931,6 +5931,8 @@
</span><span class="cx">
</span><span class="cx"> CSSParserValue* value = m_valueList->current();
</span><span class="cx"> if (value->id == CSSValueNone) {
</span><ins>+ if (trackListType == GridAuto)
+ return nullptr;
</ins><span class="cx"> m_valueList->next();
</span><span class="cx"> return CSSValuePool::singleton().createIdentifierValue(CSSValueNone);
</span><span class="cx"> }
</span><span class="lines">@@ -5938,17 +5940,22 @@
</span><span class="cx"> auto values = CSSValueList::createSpaceSeparated();
</span><span class="cx"> // Handle leading <custom-ident>*.
</span><span class="cx"> value = m_valueList->current();
</span><del>- if (value && value->unit == CSSParserValue::ValueList)
</del><ins>+ bool allowGridLineNames = trackListType != GridAuto;
+ if (value && value->unit == CSSParserValue::ValueList) {
+ if (!allowGridLineNames)
+ return nullptr;
</ins><span class="cx"> parseGridLineNames(*m_valueList, values);
</span><ins>+ }
</ins><span class="cx">
</span><span class="cx"> bool seenTrackSizeOrRepeatFunction = false;
</span><span class="cx"> bool seenAutoRepeat = false;
</span><span class="cx"> bool allTracksAreFixedSized = true;
</span><ins>+ bool repeatAllowed = trackListType == GridTemplate;
</ins><span class="cx"> while (CSSParserValue* currentValue = m_valueList->current()) {
</span><span class="cx"> if (isForwardSlashOperator(*currentValue))
</span><span class="cx"> break;
</span><span class="cx"> if (currentValue->unit == CSSParserValue::Function && equalLettersIgnoringASCIICase(currentValue->function->name, "repeat(")) {
</span><del>- if (trackListType == DisallowRepeat)
</del><ins>+ if (!repeatAllowed)
</ins><span class="cx"> return nullptr;
</span><span class="cx"> bool isAutoRepeat;
</span><span class="cx"> if (!parseGridTrackRepeatFunction(values, isAutoRepeat, allTracksAreFixedSized))
</span><span class="lines">@@ -5971,8 +5978,11 @@
</span><span class="cx">
</span><span class="cx"> // This will handle the trailing <custom-ident>* in the grammar.
</span><span class="cx"> value = m_valueList->current();
</span><del>- if (value && value->unit == CSSParserValue::ValueList)
</del><ins>+ if (value && value->unit == CSSParserValue::ValueList) {
+ if (!allowGridLineNames)
+ return nullptr;
</ins><span class="cx"> parseGridLineNames(*m_valueList, values);
</span><ins>+ }
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (!seenTrackSizeOrRepeatFunction)
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSParser.h (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSParser.h        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/Source/WebCore/css/CSSParser.h        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -235,8 +235,8 @@
</span><span class="cx"> bool isCSSGridLayoutEnabled() const;
</span><span class="cx"> RefPtr<CSSValue> parseGridPosition();
</span><span class="cx"> bool parseGridItemPositionShorthand(CSSPropertyID, bool important);
</span><del>- enum TrackListType { AllowRepeat, DisallowRepeat };
- RefPtr<CSSValue> parseGridTemplateColumns(TrackListType = AllowRepeat);
</del><ins>+ enum TrackListType { GridTemplate, GridTemplateNoRepeat, GridAuto };
+ RefPtr<CSSValue> parseGridTemplateColumns(TrackListType = GridTemplate);
</ins><span class="cx"> bool parseGridTemplateRowsAndAreasAndColumns(bool important);
</span><span class="cx"> bool parseGridTemplateShorthand(bool important);
</span><span class="cx"> bool parseGridShorthand(bool important);
</span><span class="lines">@@ -243,7 +243,7 @@
</span><span class="cx"> bool parseGridAreaShorthand(bool important);
</span><span class="cx"> bool parseGridGapShorthand(bool important);
</span><span class="cx"> bool parseSingleGridAreaLonghand(RefPtr<CSSValue>&);
</span><del>- RefPtr<CSSValue> parseGridTrackList(TrackListType = AllowRepeat);
</del><ins>+ RefPtr<CSSValue> parseGridTrackList(TrackListType);
</ins><span class="cx"> bool parseGridTrackRepeatFunction(CSSValueList&, bool& isAutoRepeat, bool& allTracksAreFixedSized);
</span><span class="cx"> RefPtr<CSSValue> parseGridTrackSize(CSSParserValueList& inputList);
</span><span class="cx"> RefPtr<CSSPrimitiveValue> parseGridBreadth(CSSParserValue&);
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPropertyNamesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPropertyNames.in (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPropertyNames.in        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/Source/WebCore/css/CSSPropertyNames.in        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -498,8 +498,8 @@
</span><span class="cx"> #if defined(ENABLE_CSS_GRID_LAYOUT) && ENABLE_CSS_GRID_LAYOUT
</span><span class="cx"> grid [Longhands=grid-template-rows|grid-template-columns|grid-template-areas|grid-auto-flow|grid-auto-rows|grid-auto-columns|grid-column-gap|grid-row-gap]
</span><span class="cx"> grid-area [Longhands=grid-row-start|grid-column-start|grid-row-end|grid-column-end]
</span><del>-grid-auto-columns [Converter=GridTrackSize]
-grid-auto-rows [Converter=GridTrackSize]
</del><ins>+grid-auto-columns [Converter=GridTrackSizeList]
+grid-auto-rows [Converter=GridTrackSizeList]
</ins><span class="cx"> grid-column-end [ConditionalConverter=GridPosition, NameForMethods=GridItemColumnEnd]
</span><span class="cx"> grid-column-gap [Initial=initialZeroLength, Converter=Length]
</span><span class="cx"> grid-column-start [ConditionalConverter=GridPosition, NameForMethods=GridItemColumnStart]
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderConverterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderConverter.h (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -101,6 +101,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx"> static GridTrackSize convertGridTrackSize(StyleResolver&, CSSValue&);
</span><ins>+ static Vector<GridTrackSize> convertGridTrackSizeList(StyleResolver&, CSSValue&);
</ins><span class="cx"> static Optional<GridPosition> convertGridPosition(StyleResolver&, CSSValue&);
</span><span class="cx"> static GridAutoFlow convertGridAutoFlow(StyleResolver&, CSSValue&);
</span><span class="cx"> #endif // ENABLE(CSS_GRID_LAYOUT)
</span><span class="lines">@@ -992,6 +993,20 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+inline Vector<GridTrackSize> StyleBuilderConverter::convertGridTrackSizeList(StyleResolver& styleResolver, CSSValue& value)
+{
+ ASSERT(value.isValueList());
+ auto& valueList = downcast<CSSValueList>(value);
+ Vector<GridTrackSize> trackSizes;
+ trackSizes.reserveInitialCapacity(valueList.length());
+ for (auto& currValue : valueList) {
+ ASSERT(!currValue->isGridLineNamesValue());
+ ASSERT(!currValue->isGridAutoRepeatValue());
+ trackSizes.uncheckedAppend(convertGridTrackSize(styleResolver, currValue));
+ }
+ return trackSizes;
+}
+
</ins><span class="cx"> inline GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolver& styleResolver, CSSValue& value)
</span><span class="cx"> {
</span><span class="cx"> return createGridTrackSize(value, styleResolver);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderGridcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderGrid.cpp (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderGrid.cpp        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/Source/WebCore/rendering/RenderGrid.cpp        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -875,7 +875,7 @@
</span><span class="cx"> bool isRowAxis = direction == ForColumns;
</span><span class="cx"> auto& trackStyles = isRowAxis ? style().gridColumns() : style().gridRows();
</span><span class="cx"> auto& autoRepeatTrackStyles = isRowAxis ? style().gridAutoRepeatColumns() : style().gridAutoRepeatRows();
</span><del>- auto& autoTrackSize = isRowAxis ? style().gridAutoColumns() : style().gridAutoRows();
</del><ins>+ auto& autoTrackStyles = isRowAxis ? style().gridAutoColumns() : style().gridAutoRows();
</ins><span class="cx"> unsigned insertionPoint = isRowAxis ? style().gridAutoRepeatColumnsInsertionPoint() : style().gridAutoRepeatRowsInsertionPoint();
</span><span class="cx"> unsigned repetitions = autoRepeatCountForDirection(direction);
</span><span class="cx">
</span><span class="lines">@@ -885,12 +885,17 @@
</span><span class="cx"> unsigned explicitTracksCount = trackStyles.size() + repetitions;
</span><span class="cx">
</span><span class="cx"> int untranslatedIndexAsInt = translatedIndex + (isRowAxis ? m_smallestColumnStart : m_smallestRowStart);
</span><del>- if (untranslatedIndexAsInt < 0)
- return autoTrackSize;
</del><ins>+ unsigned autoTrackStylesSize = autoTrackStyles.size();
+ if (untranslatedIndexAsInt < 0) {
+ int index = untranslatedIndexAsInt % static_cast<int>(autoTrackStylesSize);
+ // We need to traspose the index because the first negative implicit line will get the last defined auto track and so on.
+ index += index ? autoTrackStylesSize : 0;
+ return autoTrackStyles[index];
+ }
</ins><span class="cx">
</span><span class="cx"> unsigned untranslatedIndex = static_cast<unsigned>(untranslatedIndexAsInt);
</span><span class="cx"> if (untranslatedIndex >= explicitTracksCount)
</span><del>- return autoTrackSize;
</del><ins>+ return autoTrackStyles[(untranslatedIndex - explicitTracksCount) % autoTrackStylesSize];
</ins><span class="cx">
</span><span class="cx"> if (!repetitions || untranslatedIndex < insertionPoint)
</span><span class="cx"> return trackStyles[untranslatedIndex];
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleRenderStyleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/RenderStyle.h        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -979,8 +979,8 @@
</span><span class="cx"> bool isGridAutoFlowDirectionColumn() const { return (rareNonInheritedData->m_grid->m_gridAutoFlow & InternalAutoFlowDirectionColumn); }
</span><span class="cx"> bool isGridAutoFlowAlgorithmSparse() const { return (rareNonInheritedData->m_grid->m_gridAutoFlow & InternalAutoFlowAlgorithmSparse); }
</span><span class="cx"> bool isGridAutoFlowAlgorithmDense() const { return (rareNonInheritedData->m_grid->m_gridAutoFlow & InternalAutoFlowAlgorithmDense); }
</span><del>- const GridTrackSize& gridAutoColumns() const { return rareNonInheritedData->m_grid->m_gridAutoColumns; }
- const GridTrackSize& gridAutoRows() const { return rareNonInheritedData->m_grid->m_gridAutoRows; }
</del><ins>+ const Vector<GridTrackSize>& gridAutoColumns() const { return rareNonInheritedData->m_grid->m_gridAutoColumns; }
+ const Vector<GridTrackSize>& gridAutoRows() const { return rareNonInheritedData->m_grid->m_gridAutoRows; }
</ins><span class="cx"> const Length& gridColumnGap() const { return rareNonInheritedData->m_grid->m_gridColumnGap; }
</span><span class="cx"> const Length& gridRowGap() const { return rareNonInheritedData->m_grid->m_gridRowGap; }
</span><span class="cx">
</span><span class="lines">@@ -1560,8 +1560,8 @@
</span><span class="cx"> void setJustifySelfPosition(ItemPosition position) { rareNonInheritedData.access()->m_justifySelf.setPosition(position); }
</span><span class="cx"> void setJustifySelfOverflow(OverflowAlignment overflow) { rareNonInheritedData.access()->m_justifySelf.setOverflow(overflow); }
</span><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><del>- void setGridAutoColumns(const GridTrackSize& length) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridAutoColumns, length); }
- void setGridAutoRows(const GridTrackSize& length) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridAutoRows, length); }
</del><ins>+ void setGridAutoColumns(const Vector<GridTrackSize>& trackSizeList) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridAutoColumns, trackSizeList); }
+ void setGridAutoRows(const Vector<GridTrackSize>& trackSizeList) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridAutoRows, trackSizeList); }
</ins><span class="cx"> void setGridColumns(const Vector<GridTrackSize>& lengths) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridColumns, lengths); }
</span><span class="cx"> void setGridRows(const Vector<GridTrackSize>& lengths) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridRows, lengths); }
</span><span class="cx"> void setGridAutoRepeatColumns(const Vector<GridTrackSize>& lengths) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridAutoRepeatColumns, lengths); }
</span><span class="lines">@@ -2096,8 +2096,8 @@
</span><span class="cx">
</span><span class="cx"> static GridAutoFlow initialGridAutoFlow() { return AutoFlowRow; }
</span><span class="cx">
</span><del>- static GridTrackSize initialGridAutoColumns() { return GridTrackSize(Length(Auto)); }
- static GridTrackSize initialGridAutoRows() { return GridTrackSize(Length(Auto)); }
</del><ins>+ static Vector<GridTrackSize> initialGridAutoColumns() { return { GridTrackSize(Length(Auto)) }; }
+ static Vector<GridTrackSize> initialGridAutoRows() { return { GridTrackSize(Length(Auto)) }; }
</ins><span class="cx">
</span><span class="cx"> static NamedGridAreaMap initialNamedGridArea() { return NamedGridAreaMap(); }
</span><span class="cx"> static size_t initialNamedGridAreaCount() { return 0; }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleStyleGridDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/StyleGridData.h (203715 => 203716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/StyleGridData.h        2016-07-26 08:06:28 UTC (rev 203715)
+++ trunk/Source/WebCore/rendering/style/StyleGridData.h        2016-07-26 09:37:41 UTC (rev 203716)
</span><span class="lines">@@ -85,8 +85,8 @@
</span><span class="cx">
</span><span class="cx"> unsigned m_gridAutoFlow : GridAutoFlowBits;
</span><span class="cx">
</span><del>- GridTrackSize m_gridAutoRows;
- GridTrackSize m_gridAutoColumns;
</del><ins>+ Vector<GridTrackSize> m_gridAutoRows;
+ Vector<GridTrackSize> m_gridAutoColumns;
</ins><span class="cx">
</span><span class="cx"> NamedGridAreaMap m_namedGridArea;
</span><span class="cx"> // Because m_namedGridArea doesn't store the unnamed grid areas, we need to keep track
</span></span></pre>
</div>
</div>
</body>
</html>