Source/WebCore/ChangeLog

 12013-07-01 Sergio Villar Senin <svillar@igalia.com>
 2
 3 [CSS Grid Layout] Allow defining named grid lines on the grid element
 4 https://bugs.webkit.org/show_bug.cgi?id=118255
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 From Blink r149798 by <jchaffraix@chromium.org>
 9
 10 This change adds parsing, style resolution and getComputedStyle
 11 support for named grid lines at the grid element level
 12 (i.e. extends our <track-list> support). Per the specification, we
 13 allow multiple grid lines with the same name.
 14
 15 To fully support resolving the grid lines to a position on our
 16 grid, we need to add the parsing at the grid item's level (which
 17 means extending our <grid-line> support). This will be done in a
 18 follow-up change.
 19
 20 Test: fast/css-grid-layout/named-grid-line-get-set.html
 21
 22 * css/CSSComputedStyleDeclaration.cpp:
 23 (WebCore::addValuesForNamedGridLinesAtIndex):
 24 (WebCore::valueForGridTrackList):
 25 (WebCore::ComputedStyleExtractor::propertyValue):
 26 * css/CSSParser.cpp:
 27 (WebCore::CSSParser::parseGridTrackList):
 28 * css/StyleResolver.cpp:
 29 (WebCore::createGridTrackList):
 30 (WebCore::StyleResolver::applyProperty):
 31 * rendering/style/RenderStyle.h:
 32 * rendering/style/StyleGridData.cpp:
 33 (WebCore::StyleGridData::StyleGridData):
 34 * rendering/style/StyleGridData.h:
 35 (WebCore::StyleGridData::operator==):
 36
1372013-06-29 Simon Fraser <simon.fraser@apple.com>
238
339 Avoid calling into Objective-C every time we get the scrollbar width

Source/WebCore/css/CSSComputedStyleDeclaration.cpp

@@static PassRefPtr<CSSValue> valueForGridTrackSize(const GridTrackSize& trackSize
10831083 return 0;
10841084}
10851085
1086 static PassRefPtr<CSSValue> valueForGridTrackList(const Vector<GridTrackSize>& trackSizes, const RenderStyle* style, RenderView *renderView)
 1086static void addValuesForNamedGridLinesAtIndex(const NamedGridLinesMap& namedGridLines, size_t i, CSSValueList& list)
 1087{
 1088 // Note that this won't return the results in the order specified in the style sheet,
 1089 // which is probably fine as we still *do* return all the expected values.
 1090 NamedGridLinesMap::const_iterator it = namedGridLines.begin();
 1091 NamedGridLinesMap::const_iterator end = namedGridLines.end();
 1092 for (; it != end; ++it) {
 1093 const Vector<size_t>& linesIndexes = it->value;
 1094 for (size_t j = 0; j < linesIndexes.size(); ++j) {
 1095 if (linesIndexes[j] != i)
 1096 continue;
 1097
 1098 list.append(cssValuePool().createValue(it->key, CSSPrimitiveValue::CSS_STRING));
 1099 break;
 1100 }
 1101 }
 1102}
 1103
 1104static PassRefPtr<CSSValue> valueForGridTrackList(const Vector<GridTrackSize>& trackSizes, const NamedGridLinesMap& namedGridLines, const RenderStyle* style, RenderView* renderView)
10871105{
10881106 // Handle the 'none' case here.
1089  if (!trackSizes.size())
 1107 if (!trackSizes.size()) {
 1108 ASSERT(namedGridLines.isEmpty());
10901109 return cssValuePool().createIdentifierValue(CSSValueNone);
 1110 }
10911111
10921112 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
1093  for (size_t i = 0; i < trackSizes.size(); ++i)
 1113 for (size_t i = 0; i < trackSizes.size(); ++i) {
 1114 addValuesForNamedGridLinesAtIndex(namedGridLines, i, *list);
10941115 list->append(valueForGridTrackSize(trackSizes[i], style, renderView));
 1116 }
 1117 // Those are the trailing <string>* allowed in the syntax.
 1118 addValuesForNamedGridLinesAtIndex(namedGridLines, trackSizes.size(), *list);
10951119 return list.release();
10961120}
10971121

@@PassRefPtr<CSSValue> ComputedStyleExtractor::propertyValue(CSSPropertyID propert
19741998 case CSSPropertyWebkitGridAutoRows:
19751999 return valueForGridTrackSize(style->gridAutoRows(), style.get(), m_node->document()->renderView());
19762000 case CSSPropertyWebkitGridColumns:
1977  return valueForGridTrackList(style->gridColumns(), style.get(), m_node->document()->renderView());
 2001 return valueForGridTrackList(style->gridColumns(), style->namedGridColumnLines(), style.get(), m_node->document()->renderView());
19782002 case CSSPropertyWebkitGridRows:
1979  return valueForGridTrackList(style->gridRows(), style.get(), m_node->document()->renderView());
 2003 return valueForGridTrackList(style->gridRows(), style->namedGridRowLines(), style.get(), m_node->document()->renderView());
19802004
19812005 case CSSPropertyWebkitGridStart:
19822006 return valueForGridPosition(style->gridItemStart());

Source/WebCore/css/CSSParser.cpp

@@bool CSSParser::parseGridTrackList(CSSPropertyID propId, bool important)
47834783
47844784 RefPtr<CSSValueList> values = CSSValueList::createSpaceSeparated();
47854785 while (m_valueList->current()) {
 4786 while (m_valueList->current() && m_valueList->current()->unit == CSSPrimitiveValue::CSS_STRING) {
 4787 RefPtr<CSSPrimitiveValue> name = createPrimitiveStringValue(m_valueList->current());
 4788 values->append(name);
 4789 m_valueList->next();
 4790 }
 4791
 4792 // This allows trailing <string>* per the specification.
 4793 if (!m_valueList->current())
 4794 break;
 4795
47864796 RefPtr<CSSPrimitiveValue> primitiveValue = parseGridTrackSize();
47874797 if (!primitiveValue)
47884798 return false;

Source/WebCore/css/StyleResolver.cpp

@@static bool createGridTrackSize(CSSValue* value, GridTrackSize& trackSize, const
21132113 return true;
21142114}
21152115
2116 static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSizes, const StyleResolver::State& state)
 2116static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSizes, NamedGridLinesMap& namedGridLines, const StyleResolver::State& state)
21172117{
21182118 // Handle 'none'.
21192119 if (value->isPrimitiveValue()) {

@@static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSiz
21242124 if (!value->isValueList())
21252125 return false;
21262126
 2127 size_t currentNamedGridLine = 0;
21272128 for (CSSValueListIterator i = value; i.hasMore(); i.advance()) {
21282129 CSSValue* currValue = i.value();
 2130 if (currValue->isPrimitiveValue()) {
 2131 CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(currValue);
 2132 if (primitiveValue->isString()) {
 2133 NamedGridLinesMap::AddResult result = namedGridLines.add(primitiveValue->getStringValue(), Vector<size_t>());
 2134 result.iterator->value.append(currentNamedGridLine);
 2135 continue;
 2136 }
 2137 }
 2138
 2139 ++currentNamedGridLine;
21292140 GridTrackSize trackSize;
21302141 if (!createGridTrackSize(currValue, trackSize, state))
21312142 return false;
21322143
21332144 trackSizes.append(trackSize);
21342145 }
 2146
 2147 if (trackSizes.isEmpty())
 2148 return false;
 2149
21352150 return true;
21362151}
21372152

@@void StyleResolver::applyProperty(CSSPropertyID id, CSSValue* value)
28382853 }
28392854 case CSSPropertyWebkitGridColumns: {
28402855 Vector<GridTrackSize> trackSizes;
2841  if (!createGridTrackList(value, trackSizes, state))
 2856 NamedGridLinesMap namedGridLines;
 2857 if (!createGridTrackList(value, trackSizes, namedGridLines, state))
28422858 return;
28432859 state.style()->setGridColumns(trackSizes);
 2860 state.style()->setNamedGridColumnLines(namedGridLines);
28442861 return;
28452862 }
28462863 case CSSPropertyWebkitGridRows: {
28472864 Vector<GridTrackSize> trackSizes;
2848  if (!createGridTrackList(value, trackSizes, state))
 2865 NamedGridLinesMap namedGridLines;
 2866 if (!createGridTrackList(value, trackSizes, namedGridLines, state))
28492867 return;
28502868 state.style()->setGridRows(trackSizes);
 2869 state.style()->setNamedGridRowLines(namedGridLines);
28512870 return;
28522871 }
28532872

Source/WebCore/rendering/style/RenderStyle.h

@@public:
773773
774774 const Vector<GridTrackSize>& gridColumns() const { return rareNonInheritedData->m_grid->m_gridColumns; }
775775 const Vector<GridTrackSize>& gridRows() const { return rareNonInheritedData->m_grid->m_gridRows; }
 776 const NamedGridLinesMap& namedGridColumnLines() const { return rareNonInheritedData->m_grid->m_namedGridColumnLines; }
 777 const NamedGridLinesMap& namedGridRowLines() const { return rareNonInheritedData->m_grid->m_namedGridRowLines; }
776778 GridAutoFlow gridAutoFlow() const { return rareNonInheritedData->m_grid->m_gridAutoFlow; }
777779 const GridTrackSize& gridAutoColumns() const { return rareNonInheritedData->m_grid->m_gridAutoColumns; }
778780 const GridTrackSize& gridAutoRows() const { return rareNonInheritedData->m_grid->m_gridAutoRows; }

@@public:
12951297 void setGridAutoRows(const GridTrackSize& length) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridAutoRows, length); }
12961298 void setGridColumns(const Vector<GridTrackSize>& lengths) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridColumns, lengths); }
12971299 void setGridRows(const Vector<GridTrackSize>& lengths) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridRows, lengths); }
 1300 void setNamedGridColumnLines(const NamedGridLinesMap& namedGridColumnLines) { SET_VAR(rareNonInheritedData.access()->m_grid, m_namedGridColumnLines, namedGridColumnLines); }
 1301 void setNamedGridRowLines(const NamedGridLinesMap& namedGridRowLines) { SET_VAR(rareNonInheritedData.access()->m_grid, m_namedGridRowLines, namedGridRowLines); }
12981302 void setGridAutoFlow(GridAutoFlow flow) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridAutoFlow, flow); }
12991303 void setGridItemStart(const GridPosition& startPosition) { SET_VAR(rareNonInheritedData.access()->m_gridItem, m_gridStart, startPosition); }
13001304 void setGridItemEnd(const GridPosition& endPosition) { SET_VAR(rareNonInheritedData.access()->m_gridItem, m_gridEnd, endPosition); }

Source/WebCore/rendering/style/StyleGridData.cpp

@@StyleGridData::StyleGridData(const StyleGridData& o)
4343 : RefCounted<StyleGridData>()
4444 , m_gridColumns(o.m_gridColumns)
4545 , m_gridRows(o.m_gridRows)
 46 , m_namedGridColumnLines(o.m_namedGridColumnLines)
 47 , m_namedGridRowLines(o.m_namedGridRowLines)
4648 , m_gridAutoFlow(o.m_gridAutoFlow)
4749 , m_gridAutoRows(o.m_gridAutoRows)
4850 , m_gridAutoColumns(o.m_gridAutoColumns)

Source/WebCore/rendering/style/StyleGridData.h

3131#include <wtf/PassRefPtr.h>
3232#include <wtf/RefCounted.h>
3333#include <wtf/Vector.h>
 34#include <wtf/text/WTFString.h>
3435
3536namespace WebCore {
3637
 38typedef HashMap<String, Vector<size_t> > NamedGridLinesMap;
 39
3740class StyleGridData : public RefCounted<StyleGridData> {
3841public:
3942 static PassRefPtr<StyleGridData> create() { return adoptRef(new StyleGridData); }

@@public:
4144
4245 bool operator==(const StyleGridData& o) const
4346 {
44  return m_gridColumns == o.m_gridColumns && m_gridRows == o.m_gridRows && m_gridAutoFlow == o.m_gridAutoFlow && m_gridAutoRows == o.m_gridAutoRows && m_gridAutoColumns == o.m_gridAutoColumns;
 47 return m_gridColumns == o.m_gridColumns && m_gridRows == o.m_gridRows && m_gridAutoFlow == o.m_gridAutoFlow && m_gridAutoRows == o.m_gridAutoRows && m_gridAutoColumns == o.m_gridAutoColumns && m_namedGridColumnLines == o.m_namedGridColumnLines && m_namedGridRowLines == o.m_namedGridRowLines;
4548 }
4649
4750 bool operator!=(const StyleGridData& o) const

@@public:
5356 Vector<GridTrackSize> m_gridColumns;
5457 Vector<GridTrackSize> m_gridRows;
5558
 59 NamedGridLinesMap m_namedGridColumnLines;
 60 NamedGridLinesMap m_namedGridRowLines;
 61
5662 GridAutoFlow m_gridAutoFlow;
5763
5864 GridTrackSize m_gridAutoRows;

LayoutTests/ChangeLog

 12013-07-01 Sergio Villar Senin <svillar@igalia.com>
 2
 3 [CSS Grid Layout] Allow defining named grid lines on the grid element
 4 https://bugs.webkit.org/show_bug.cgi?id=118255
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 From Blink r149798 by <jchaffraix@chromium.org>
 9
 10 * fast/css-grid-layout/named-grid-line-get-set-expected.txt: Added.
 11 * fast/css-grid-layout/named-grid-line-get-set.html: Added.
 12
1132013-06-30 Zan Dobersek <zdobersek@igalia.com>
214
315 Unreviewed GTK gardening. Rebaselining whatever can be rebaselined and adding failure expectations for other current failures.

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

 1Test that setting and getting grid-columns and grid-rows works as expected
 2
 3On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 4
 5
 6Test getting -webkit-grid-columns and -webkit-grid-rows set through CSS
 7PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first 10px"
 8PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "first 15px"
 9PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "53% last"
 10PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "27% last"
 11PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first auto"
 12PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "auto last"
 13PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first minmax(10%, 15px)"
 14PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "minmax(20px, 50%) last"
 15PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "nav first 10px last"
 16PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "nav first 15px last"
 17PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "nav first 10% nav 15% last"
 18PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "first nav2 25% nav2 75% last"
 19
 20Test getting and setting -webkit-grid-columns and -webkit-grid-rows through JS
 21PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first 18px"
 22PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "66px last"
 23PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first 55%"
 24PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "40% last"
 25PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first auto"
 26PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "auto last"
 27PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first -webkit-min-content"
 28PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "-webkit-min-content last"
 29PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first -webkit-max-content"
 30PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "-webkit-max-content last"
 31PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first minmax(55%, 45px)"
 32PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "minmax(30px, 40%) last"
 33PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first minmax(220px, -webkit-max-content)"
 34PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "minmax(-webkit-max-content, 50px) last"
 35PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first minmax(220px, -webkit-max-content)"
 36PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "minmax(-webkit-max-content, 50px) last"
 37PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "first minmax(-webkit-min-content, -webkit-max-content)"
 38PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "minmax(-webkit-max-content, -webkit-min-content) last"
 39PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "nav first minmax(-webkit-min-content, -webkit-max-content) last"
 40PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "nav first minmax(-webkit-max-content, -webkit-min-content) last"
 41PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "nav first minmax(-webkit-min-content, -webkit-max-content) nav auto last"
 42PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last"
 43PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "foo bar auto foo auto bar"
 44PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "foo bar auto foo auto bar"
 45
 46Test getting and setting invalid -webkit-grid-columns and -webkit-grid-rows through JS
 47PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns') is "none"
 48PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows') is "none"
 49PASS successfullyParsed is true
 50
 51TEST COMPLETE
 52

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

 1<!DOCTYPE HTML>
 2<html>
 3<head>
 4<script>
 5if (window.testRunner)
 6 testRunner.overridePreference("WebKitCSSGridLayoutEnabled", 1);
 7</script>
 8<link href="resources/grid.css" rel="stylesheet">
 9<style>
 10.gridWithFixed {
 11 -webkit-grid-columns: "first" 10px;
 12 -webkit-grid-rows: "first" 15px;
 13}
 14.gridWithPercent {
 15 -webkit-grid-columns: 53% "last";
 16 -webkit-grid-rows: 27% "last";
 17}
 18.gridWithAuto {
 19 -webkit-grid-columns: "first" auto;
 20 -webkit-grid-rows: auto "last";
 21}
 22.gridWithMinMax {
 23 -webkit-grid-columns: "first" minmax(10%, 15px);
 24 -webkit-grid-rows: minmax(20px, 50%) "last";
 25}
 26.gridWithFixedMultiple {
 27 -webkit-grid-columns: "first" "nav" 10px "last";
 28 -webkit-grid-rows: "first" "nav" 15px "last";
 29}
 30.gridWithPercentageSameStringMultipleTimes {
 31 -webkit-grid-columns: "first" "nav" 10% "nav" 15% "last";
 32 -webkit-grid-rows: "first" "nav2" 25% "nav2" 75% "last";
 33}
 34</style>
 35<script src="../js/resources/js-test-pre.js"></script>
 36</head>
 37<body>
 38<div class="grid gridWithFixed" id="gridWithFixedElement"></div>
 39<div class="grid gridWithPercent" id="gridWithPercentElement"></div>
 40<div class="grid gridWithAuto" id="gridWithAutoElement"></div>
 41<div class="grid gridWithMinMax" id="gridWithMinMax"></div>
 42<div class="grid gridWithFixedMultiple" id="gridWithFixedMultiple"></div>
 43<div class="grid gridWithPercentageSameStringMultipleTimes" id="gridWithPercentageSameStringMultipleTimes"></div>
 44<script>
 45 description('Test that setting and getting grid-columns and grid-rows works as expected');
 46
 47 function testValue(gridElement, namedGridColumns, namedGridRows)
 48 {
 49 this.gridElement = gridElement;
 50 shouldBeEqualToString("getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-columns')", namedGridColumns);
 51 shouldBeEqualToString("getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-rows')", namedGridRows);
 52 }
 53
 54 function testCSSValue(gridElementId, namedGridColumns, namedGridRows)
 55 {
 56 testValue(document.getElementById(gridElementId), namedGridColumns, namedGridRows);
 57 }
 58
 59 debug("Test getting -webkit-grid-columns and -webkit-grid-rows set through CSS");
 60 testCSSValue("gridWithFixedElement", "first 10px", "first 15px");
 61 testCSSValue("gridWithPercentElement", "53% last", "27% last");
 62 testCSSValue("gridWithAutoElement", "first auto", "auto last");
 63 testCSSValue("gridWithMinMax", "first minmax(10%, 15px)", "minmax(20px, 50%) last");
 64 testCSSValue("gridWithFixedMultiple", "nav first 10px last", "nav first 15px last");
 65 testCSSValue("gridWithPercentageSameStringMultipleTimes", "nav first 10% nav 15% last", "first nav2 25% nav2 75% last");
 66
 67 debug("");
 68 debug("Test getting and setting -webkit-grid-columns and -webkit-grid-rows through JS");
 69 var element = document.createElement("div");
 70 document.body.appendChild(element);
 71 element.style.webkitGridColumns = "'first' 18px";
 72 element.style.webkitGridRows = "66px 'last'";
 73 testValue(element, "first 18px", "66px last");
 74
 75 element = document.createElement("div");
 76 document.body.appendChild(element);
 77 element.style.webkitGridColumns = "'first' 55%";
 78 element.style.webkitGridRows = "40% 'last'";
 79 testValue(element, "first 55%", "40% last");
 80
 81 element = document.createElement("div");
 82 document.body.appendChild(element);
 83 element.style.webkitGridColumns = "'first' auto";
 84 element.style.webkitGridRows = "auto 'last'";
 85 testValue(element, "first auto", "auto last");
 86
 87 element = document.createElement("div");
 88 document.body.appendChild(element);
 89 element.style.webkitGridColumns = "'first' -webkit-min-content";
 90 element.style.webkitGridRows = "-webkit-min-content 'last'";
 91 testValue(element, "first -webkit-min-content", "-webkit-min-content last");
 92
 93 element = document.createElement("div");
 94 document.body.appendChild(element);
 95 element.style.webkitGridColumns = "'first' -webkit-max-content";
 96 element.style.webkitGridRows = "-webkit-max-content 'last'";
 97 testValue(element, "first -webkit-max-content", "-webkit-max-content last");
 98
 99 element = document.createElement("div");
 100 document.body.appendChild(element);
 101 element.style.webkitGridColumns = "'first' minmax(55%, 45px)";
 102 element.style.webkitGridRows = "minmax(30px, 40%) 'last'";
 103 testValue(element, "first minmax(55%, 45px)", "minmax(30px, 40%) last");
 104
 105 element = document.createElement("div");
 106 document.body.appendChild(element);
 107 element.style.font = "10px Ahem";
 108 element.style.webkitGridColumns = "'first' minmax(22em, -webkit-max-content)";
 109 element.style.webkitGridRows = "minmax(-webkit-max-content, 5em) 'last'";
 110 testValue(element, "first minmax(220px, -webkit-max-content)", "minmax(-webkit-max-content, 50px) last");
 111
 112 element = document.createElement("div");
 113 document.body.appendChild(element);
 114 element.style.font = "10px Ahem";
 115 element.style.webkitGridColumns = "'first' minmax(22em, -webkit-max-content)";
 116 element.style.webkitGridRows = "minmax(-webkit-max-content, 5em) 'last'";
 117 testValue(element, "first minmax(220px, -webkit-max-content)", "minmax(-webkit-max-content, 50px) last");
 118
 119 element = document.createElement("div");
 120 document.body.appendChild(element);
 121 element.style.webkitGridColumns = "'first' minmax(-webkit-min-content, -webkit-max-content)";
 122 element.style.webkitGridRows = "minmax(-webkit-max-content, -webkit-min-content) 'last'";
 123 testValue(element, "first minmax(-webkit-min-content, -webkit-max-content)", "minmax(-webkit-max-content, -webkit-min-content) last");
 124
 125 element = document.createElement("div");
 126 document.body.appendChild(element);
 127 element.style.webkitGridColumns = "'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'last'";
 128 element.style.webkitGridRows = "'first' 'nav' minmax(-webkit-max-content, -webkit-min-content) 'last'";
 129 testValue(element, "nav first minmax(-webkit-min-content, -webkit-max-content) last", "nav first minmax(-webkit-max-content, -webkit-min-content) last");
 130
 131 element = document.createElement("div");
 132 document.body.appendChild(element);
 133 element.style.webkitGridColumns = "'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'nav' auto 'last'";
 134 element.style.webkitGridRows = "'first' 'nav2' minmax(-webkit-max-content, -webkit-min-content) 'nav2' minmax(10px, 15px) 'last'";
 135 testValue(element, "nav first minmax(-webkit-min-content, -webkit-max-content) nav auto last", "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last");
 136
 137 element = document.createElement("div");
 138 document.body.appendChild(element);
 139 element.style.webkitGridColumns = "'foo' 'bar' auto 'foo' auto 'bar'";
 140 element.style.webkitGridRows = "'foo' 'bar' auto 'foo' auto 'bar'";
 141 testValue(element, "foo bar auto foo auto bar", "foo bar auto foo auto bar");
 142
 143 debug("");
 144 debug("Test getting and setting invalid -webkit-grid-columns and -webkit-grid-rows through JS");
 145 element = document.createElement("div");
 146 document.body.appendChild(element);
 147 element.style.webkitGridColumns = "'foo'";
 148 element.style.webkitGridRows = "'bar";
 149 testValue(element, "none", "none");
 150</script>
 151<script src="../js/resources/js-test-post.js"></script>
 152</body>
 153</html>