Source/WebCore/ChangeLog

 12014-02-07 Sergio Villar Senin <svillar@igalia.com>
 2
 3 [CSS Grid Layout] Percentages of indefinite sizes should compute to auto
 4 https://bugs.webkit.org/show_bug.cgi?id=128173
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 We should treat percentages of indefinite sizes as auto as
 9 mandated by the spec. Otherwise we would end up calculating a
 10 percentage of -1, the value we use to represent infinite.
 11
 12 Added some test cases to the current tests.
 13
 14 * rendering/RenderGrid.cpp:
 15 (WebCore::RenderGrid::gridTrackSize):
 16 * rendering/style/GridTrackSize.h:
 17 (WebCore::GridTrackSize::isPercentage):
 18
1192014-01-29 Sergio Villar Senin <svillar@igalia.com>
220
321 [CSS Grid Layout] getComputedStyle() is wrong for grid-definition-{columns|rows}

Source/WebCore/rendering/RenderGrid.cpp

@@const GridTrackSize& RenderGrid::gridTrackSize(GridTrackSizingDirection directio
405405 if (i >= trackStyles.size())
406406 return (direction == ForColumns) ? style().gridAutoColumns() : style().gridAutoRows();
407407
408  return trackStyles[i];
 408 const GridTrackSize& trackSize = trackStyles[i];
 409 // If the logical width/height of the grid container is indefinite, percentage values are treated as <auto>.
 410 if (trackSize.isPercentage()) {
 411 Length logicalSize = direction == ForColumns ? style().logicalWidth() : style().logicalHeight();
 412 if (logicalSize.isIntrinsicOrAuto()) {
 413 DEFINE_STATIC_LOCAL(GridTrackSize, autoTrackSize, (Auto));
 414 return autoTrackSize;
 415 }
 416 }
 417
 418 return trackSize;
409419}
410420
411421size_t RenderGrid::explicitGridColumnCount() const

Source/WebCore/rendering/style/GridTrackSize.h

@@public:
9696
9797 bool isContentSized() const { return m_minTrackBreadth.isContentSized() || m_maxTrackBreadth.isContentSized(); }
9898
 99 bool isPercentage() const { return m_type == LengthTrackSizing && length().isLength() && length().length().isPercent(); }
 100
99101 bool operator==(const GridTrackSize& other) const
100102 {
101103 return m_type == other.m_type && m_minTrackBreadth == other.m_minTrackBreadth && m_maxTrackBreadth == other.m_maxTrackBreadth;

LayoutTests/ChangeLog

 12014-02-07 Sergio Villar Senin <svillar@igalia.com>
 2
 3 [CSS Grid Layout] Percentages of indefinite sizes should compute to auto
 4 https://bugs.webkit.org/show_bug.cgi?id=128173
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Added a grid with indefinite sizes to check that we use auto to
 9 compute the track breadths instead of the specified percentages.
 10
 11 * fast/css-grid-layout/grid-columns-rows-get-set-expected.txt:
 12 * fast/css-grid-layout/grid-columns-rows-get-set-multiple-expected.txt:
 13 * fast/css-grid-layout/grid-columns-rows-get-set-multiple.html:
 14 * fast/css-grid-layout/grid-columns-rows-get-set.html:
 15 * fast/css-grid-layout/grid-element-repeat-get-set-expected.txt:
 16 * fast/css-grid-layout/grid-element-repeat-get-set.html:
 17 * fast/css-grid-layout/named-grid-line-get-set-expected.txt:
 18 * fast/css-grid-layout/named-grid-line-get-set.html:
 19 * fast/css-grid-layout/resources/grid-columns-rows-get-set-multiple.js:
 20 * fast/css-grid-layout/resources/grid-columns-rows-get-set.js:
 21 * fast/css-grid-layout/resources/grid.css:
 22 (.indefiniteSizeGrid):
 23
1242014-01-29 Sergio Villar Senin <svillar@igalia.com>
225
326 [CSS Grid Layout] getComputedStyle() is wrong for grid-definition-{columns|rows}

LayoutTests/fast/css-grid-layout/grid-columns-rows-get-set-expected.txt

@@PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('-webkit
1010PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('-webkit-grid-definition-rows') is "15px"
1111PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('-webkit-grid-definition-columns') is "424px"
1212PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('-webkit-grid-definition-rows') is "162px"
 13PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('-webkit-grid-definition-columns') is "0px"
 14PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('-webkit-grid-definition-rows') is "0px"
 15PASS window.getComputedStyle(gridWithPercentWithoutSizeWithChildren, '').getPropertyValue('-webkit-grid-definition-columns') is "7px"
 16PASS window.getComputedStyle(gridWithPercentWithoutSizeWithChildren, '').getPropertyValue('-webkit-grid-definition-rows') is "11px"
1317PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('-webkit-grid-definition-columns') is "0px"
1418PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('-webkit-grid-definition-rows') is "0px"
1519PASS window.getComputedStyle(gridWithAutoWithChildrenElement, '').getPropertyValue('-webkit-grid-definition-columns') is "7px"

LayoutTests/fast/css-grid-layout/grid-columns-rows-get-set-multiple-expected.txt

@@PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('-webkit
88PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('-webkit-grid-definition-rows') is "17px 2px"
99PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('-webkit-grid-definition-columns') is "424px 792px"
1010PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('-webkit-grid-definition-rows') is "162px 312px"
 11PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('-webkit-grid-definition-columns') is "7px 0px"
 12PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('-webkit-grid-definition-rows') is "11px 0px"
1113PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('-webkit-grid-definition-columns') is "0px 17px"
1214PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('-webkit-grid-definition-rows') is "0px 3px"
1315PASS window.getComputedStyle(gridWithEMElement, '').getPropertyValue('-webkit-grid-definition-columns') is "100px 120px"

LayoutTests/fast/css-grid-layout/grid-columns-rows-get-set-multiple.html

@@if (window.testRunner)
9090<body>
9191<div class="grid gridWithFixed" id="gridWithFixedElement"></div>
9292<div class="grid gridWithPercent" id="gridWithPercentElement"></div>
 93<div class="indefiniteSizeGrid gridWithPercent" id="gridWithPercentWithoutSize">
 94 <div class="gridItem"></div>
 95</div>
9396<div class="grid gridWithAuto" id="gridWithAutoElement">
9497 <div class="gridItem2"></div>
9598</div>

LayoutTests/fast/css-grid-layout/grid-columns-rows-get-set.html

@@if (window.testRunner)
8080<div class="grid gridWithNone" id="gridWithNoneElement"></div>
8181<div class="grid gridWithFixed" id="gridWithFixedElement"></div>
8282<div class="grid gridWithPercent" id="gridWithPercentElement"></div>
 83<div class="indefiniteSizeGrid gridWithPercent" id="gridWithPercentWithoutSize"></div>
 84<div class="indefiniteSizeGrid gridWithPercent" id="gridWithPercentWithoutSizeWithChildren">
 85 <div class="gridItem"></div>
 86</div>
8387<div class="grid gridWithAuto" id="gridWithAutoElement"></div>
8488<div class="grid gridWithAuto" id="gridWithAutoWithChildrenElement">
8589 <div class="gridItem"></div>

LayoutTests/fast/css-grid-layout/grid-element-repeat-get-set-expected.txt

@@On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
66Test getting grid-definition-columns and grid-definition-rows set through CSS
77PASS window.getComputedStyle(singleSingleTrackRepeatWithSize, '').getPropertyValue('-webkit-grid-definition-columns') is "120px"
88PASS window.getComputedStyle(singleSingleTrackRepeatWithSize, '').getPropertyValue('-webkit-grid-definition-rows') is "18px"
 9PASS window.getComputedStyle(singleSingleTrackRepeatWithoutSize, '').getPropertyValue('-webkit-grid-definition-columns') is "0px"
 10PASS window.getComputedStyle(singleSingleTrackRepeatWithoutSize, '').getPropertyValue('-webkit-grid-definition-rows') is "18px"
911PASS window.getComputedStyle(twoSingleTrackRepeat, '').getPropertyValue('-webkit-grid-definition-columns') is "400px 400px"
1012PASS window.getComputedStyle(twoSingleTrackRepeat, '').getPropertyValue('-webkit-grid-definition-rows') is "0px 0px"
1113PASS window.getComputedStyle(twoSingleTrackRepeatWithChildren, '').getPropertyValue('-webkit-grid-definition-columns') is "400px 400px"

LayoutTests/fast/css-grid-layout/grid-element-repeat-get-set.html

@@if (window.testRunner)
7676</head>
7777<body>
7878<div class="grid singleSingleTrackRepeat" id="singleSingleTrackRepeatWithSize"></div>
 79<div class="indefiniteSizeGrid singleSingleTrackRepeat" id="singleSingleTrackRepeatWithoutSize"></div>
7980<div class="grid twoSingleTrackRepeat" id="twoSingleTrackRepeat"></div>
8081<div class="grid twoSingleTrackRepeat" id="twoSingleTrackRepeatWithChildren">
8182 <div class="gridItem"></div>

@@if (window.testRunner)
103104
104105 debug("Test getting grid-definition-columns and grid-definition-rows set through CSS");
105106 testGridDefinitionsValues(document.getElementById("singleSingleTrackRepeatWithSize"), "120px", "18px");
 107 testGridDefinitionsValues(document.getElementById("singleSingleTrackRepeatWithoutSize"), "0px", "18px");
106108 testGridDefinitionsValues(document.getElementById("twoSingleTrackRepeat"), "400px 400px", "0px 0px");
107109 testGridDefinitionsValues(document.getElementById("twoSingleTrackRepeatWithChildren"), "400px 400px", "44px 77px");
108110 testGridDefinitionsValues(document.getElementById("twoDoubleTrackRepeat"), "33px 120px 0px 120px", "10px 77px 10px 0px");

LayoutTests/fast/css-grid-layout/named-grid-line-get-set-expected.txt

@@PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('-webkit
88PASS window.getComputedStyle(gridWithFixedElement, '').getPropertyValue('-webkit-grid-definition-rows') is "first 15px"
99PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('-webkit-grid-definition-columns') is "424px last"
1010PASS window.getComputedStyle(gridWithPercentElement, '').getPropertyValue('-webkit-grid-definition-rows') is "162px last"
 11PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('-webkit-grid-definition-columns') is "0px last"
 12PASS window.getComputedStyle(gridWithPercentWithoutSize, '').getPropertyValue('-webkit-grid-definition-rows') is "0px last"
 13PASS window.getComputedStyle(gridWithPercentWithoutSizeWithChildren, '').getPropertyValue('-webkit-grid-definition-columns') is "77px last"
 14PASS window.getComputedStyle(gridWithPercentWithoutSizeWithChildren, '').getPropertyValue('-webkit-grid-definition-rows') is "22px last"
1115PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first 0px"
1216PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('-webkit-grid-definition-rows') is "0px last"
1317PASS window.getComputedStyle(gridWithAutoWithChildrenElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first 77px"

LayoutTests/fast/css-grid-layout/named-grid-line-get-set.html

@@if (window.testRunner)
4848<body>
4949<div class="grid gridWithFixed" id="gridWithFixedElement"></div>
5050<div class="grid gridWithPercent" id="gridWithPercentElement"></div>
 51<div class="indefiniteSizeGrid gridWithPercent" id="gridWithPercentWithoutSize"></div>
 52<div class="indefiniteSizeGrid gridWithPercent" id="gridWithPercentWithoutSizeWithChildren">
 53 <div class="gridItem"></div>
 54</div>
5155<div class="grid gridWithAuto" id="gridWithAutoElement"></div>
5256<div class="grid gridWithAuto" id="gridWithAutoWithChildrenElement">
5357 <div class="gridItem"></div>

@@if (window.testRunner)
6266 debug("Test getting -webkit-grid-definition-columns and -webkit-grid-definition-rows set through CSS");
6367 testGridDefinitionsValues(document.getElementById("gridWithFixedElement"), "first 10px", "first 15px");
6468 testGridDefinitionsValues(document.getElementById("gridWithPercentElement"), "424px last", "162px last");
 69 testGridDefinitionsValues(document.getElementById("gridWithPercentWithoutSize"), "0px last", "0px last");
 70 testGridDefinitionsValues(document.getElementById("gridWithPercentWithoutSizeWithChildren"), "77px last", "22px last");
6571 testGridDefinitionsValues(document.getElementById("gridWithAutoElement"), "first 0px", "0px last");
6672 testGridDefinitionsValues(document.getElementById("gridWithAutoWithChildrenElement"), "first 77px", "22px last");
6773 testGridDefinitionsValues(document.getElementById("gridWithMinMax"), "first 80px", "300px last");

LayoutTests/fast/css-grid-layout/resources/grid-columns-rows-get-set-multiple.js

@@description('Test that setting and getting grid-definition-columns and grid-defi
33debug("Test getting |grid-definition-columns| and |grid-definition-rows| set through CSS");
44testGridDefinitionsValues(document.getElementById("gridWithFixedElement"), "7px 11px", "17px 2px");
55testGridDefinitionsValues(document.getElementById("gridWithPercentElement"), "53% 99%", "27% 52%", "424px 792px", "162px 312px");
 6testGridDefinitionsValues(document.getElementById("gridWithPercentWithoutSize"), "53% 99%", "27% 52%", "7px 0px", "11px 0px");
67testGridDefinitionsValues(document.getElementById("gridWithAutoElement"), "auto auto", "auto auto", "0px 17px", "0px 3px");
78testGridDefinitionsValues(document.getElementById("gridWithEMElement"), "100px 120px", "150px 170px");
89testGridDefinitionsValues(document.getElementById("gridWithThreeItems"), "15px auto 100px", "120px 18px auto", "15px 0px 100px", "120px 18px 0px");

LayoutTests/fast/css-grid-layout/resources/grid-columns-rows-get-set.js

@@debug("Test getting -webkit-grid-definition-columns and -webkit-grid-definition-
44testGridDefinitionsValues(document.getElementById("gridWithNoneElement"), "none", "none");
55testGridDefinitionsValues(document.getElementById("gridWithFixedElement"), "10px", "15px");
66testGridDefinitionsValues(document.getElementById("gridWithPercentElement"), "424px", "162px");
 7testGridDefinitionsValues(document.getElementById("gridWithPercentWithoutSize"), "0px", "0px");
 8testGridDefinitionsValues(document.getElementById("gridWithPercentWithoutSizeWithChildren"), "7px", "11px");
79testGridDefinitionsValues(document.getElementById("gridWithAutoElement"), "0px", "0px");
810testGridDefinitionsValues(document.getElementById("gridWithAutoWithChildrenElement"), "7px", "11px");
911testGridDefinitionsValues(document.getElementById("gridWithEMElement"), "100px", "150px");

LayoutTests/fast/css-grid-layout/resources/grid.css

33 background-color: grey;
44}
55
 6.indefiniteSizeGrid {
 7 display: -webkit-grid;
 8 background-color: grey;
 9 width: -webkit-min-content;
 10 height: auto;
 11}
 12
613.inline-grid {
714 display: -webkit-inline-grid;
815 background-color: grey;