Changeset 166712 in webkit


Ignore:
Timestamp:
Apr 3, 2014 3:15:55 AM (10 years ago)
Author:
svillar@igalia.com
Message:

[CSS Grid Layout] <string> not allowed in grid-{area | row | column} syntax
https://bugs.webkit.org/show_bug.cgi?id=129713

Reviewed by Darin Adler.

Source/WebCore:

Grid positioning properties no longer accept <string> values for
named grid lines as they did in previous versions of the specs. They
were first replaced by <ident> and since the beginning of 2014 they
should only accept <custom-ident>.

Updated the parser and the style resolver to this new syntax. Also
updated the tests accordingly.

Test: fast/css-grid-layout/grid-container-change-named-grid-lines-recompute-child.html

  • css/CSSParser.cpp:

(WebCore::isValidCustomIdent): New function that checks that the
<custom-ident> is valid.
(WebCore::CSSParser::parseIntegerOrCustomIdentFromGridPosition):
(WebCore::CSSParser::parseGridPosition):
(WebCore::CSSParser::parseIntegerOrStringFromGridPosition):
Replaced by WebCore::CSSParser::parseIntegerOrCustomIdentFromGridPosition.

  • css/CSSParser.h:
  • css/StyleResolver.cpp:

(WebCore::createGridPosition):

LayoutTests:

Replaced <string> by <custom-ident> in the tests. Also added a new
one to check that children are properly layed out after changes in
the grid line names.

  • fast/css-grid-layout/grid-container-change-named-grid-lines-recompute-child-expected.txt: Added.
  • fast/css-grid-layout/grid-container-change-named-grid-lines-recompute-child.html: Added.
  • fast/css-grid-layout/grid-item-area-get-set.html:
  • fast/css-grid-layout/grid-item-bad-named-area-auto-placement.html:
  • fast/css-grid-layout/grid-item-bad-resolution-double-span.html:
  • fast/css-grid-layout/grid-item-column-row-get-set-expected.txt:
  • fast/css-grid-layout/grid-item-column-row-get-set.html:
  • fast/css-grid-layout/grid-item-end-after-get-set-expected.txt:
  • fast/css-grid-layout/grid-item-end-after-get-set.html:
  • fast/css-grid-layout/grid-item-named-grid-area-resolution.html:
  • fast/css-grid-layout/grid-item-named-grid-line-resolution-expected.txt:
  • fast/css-grid-layout/grid-item-named-grid-line-resolution.html:
  • fast/css-grid-layout/grid-item-negative-position-resolution.html:
  • fast/css-grid-layout/grid-item-position-changed-dynamic.html:
  • fast/css-grid-layout/grid-item-start-before-get-set-expected.txt:
  • fast/css-grid-layout/grid-item-start-before-get-set.html:
Location:
trunk
Files:
2 added
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r166706 r166712  
     12014-03-27  Sergio Villar Senin  <svillar@igalia.com>
     2
     3        [CSS Grid Layout] <string> not allowed in grid-{area | row | column} syntax
     4        https://bugs.webkit.org/show_bug.cgi?id=129713
     5
     6        Reviewed by Darin Adler.
     7
     8        Replaced <string> by <custom-ident> in the tests. Also added a new
     9        one to check that children are properly layed out after changes in
     10        the grid line names.
     11
     12        * fast/css-grid-layout/grid-container-change-named-grid-lines-recompute-child-expected.txt: Added.
     13        * fast/css-grid-layout/grid-container-change-named-grid-lines-recompute-child.html: Added.
     14        * fast/css-grid-layout/grid-item-area-get-set.html:
     15        * fast/css-grid-layout/grid-item-bad-named-area-auto-placement.html:
     16        * fast/css-grid-layout/grid-item-bad-resolution-double-span.html:
     17        * fast/css-grid-layout/grid-item-column-row-get-set-expected.txt:
     18        * fast/css-grid-layout/grid-item-column-row-get-set.html:
     19        * fast/css-grid-layout/grid-item-end-after-get-set-expected.txt:
     20        * fast/css-grid-layout/grid-item-end-after-get-set.html:
     21        * fast/css-grid-layout/grid-item-named-grid-area-resolution.html:
     22        * fast/css-grid-layout/grid-item-named-grid-line-resolution-expected.txt:
     23        * fast/css-grid-layout/grid-item-named-grid-line-resolution.html:
     24        * fast/css-grid-layout/grid-item-negative-position-resolution.html:
     25        * fast/css-grid-layout/grid-item-position-changed-dynamic.html:
     26        * fast/css-grid-layout/grid-item-start-before-get-set-expected.txt:
     27        * fast/css-grid-layout/grid-item-start-before-get-set.html:
     28
    1292014-04-03  Antti Koivisto  <antti@apple.com>
    230
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-area-get-set.html

    r166299 r166712  
    3838
    3939#fourValueMixedGridArea {
    40     -webkit-grid-area: firstArea / span / nonexistent / "foobar";
     40    -webkit-grid-area: firstArea / span / nonexistent / 1 foobar;
    4141}
    4242</style>
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-bad-named-area-auto-placement.html

    r163625 r166712  
    2424
    2525.namedGridLineSpanRow {
    26     -webkit-grid-row: nonExistentArea / span 5 "firstRow";
     26    -webkit-grid-row: nonExistentArea / span 5 firstRow;
    2727    -webkit-grid-column: 1;
    2828}
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-bad-resolution-double-span.html

    r166157 r166712  
    1616.bothSpanRow {
    1717    -webkit-grid-column: 1;
    18     -webkit-grid-row: span 5 "firstRow" / span 1;
     18    -webkit-grid-row: span 5 firstRow / span 1;
    1919}
    2020
     
    2626.spanAutoRow {
    2727    -webkit-grid-column: 1;
    28     -webkit-grid-row: span 5 "firstRow" / auto;
     28    -webkit-grid-row: span 5 firstRow / auto;
    2929}
    3030
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-column-row-get-set-expected.txt

    r166299 r166712  
    7777PASS getComputedStyle(gridItemWithNoSpaceElement, '').getPropertyValue('-webkit-grid-row-start') is "5"
    7878PASS getComputedStyle(gridItemWithNoSpaceElement, '').getPropertyValue('-webkit-grid-row-end') is "auto"
    79 PASS getComputedStyle(gridItemWithString, '').getPropertyValue('-webkit-grid-column') is "1 first / auto"
    80 PASS getComputedStyle(gridItemWithString, '').getPropertyValue('-webkit-grid-column-start') is "1 first"
    81 PASS getComputedStyle(gridItemWithString, '').getPropertyValue('-webkit-grid-column-end') is "auto"
    82 PASS getComputedStyle(gridItemWithString, '').getPropertyValue('-webkit-grid-row') is "1 last / auto"
    83 PASS getComputedStyle(gridItemWithString, '').getPropertyValue('-webkit-grid-row-start') is "1 last"
    84 PASS getComputedStyle(gridItemWithString, '').getPropertyValue('-webkit-grid-row-end') is "auto"
    85 PASS getComputedStyle(gridItemWithSpanString, '').getPropertyValue('-webkit-grid-column') is "1 / span 1 first"
    86 PASS getComputedStyle(gridItemWithSpanString, '').getPropertyValue('-webkit-grid-column-start') is "1"
    87 PASS getComputedStyle(gridItemWithSpanString, '').getPropertyValue('-webkit-grid-column-end') is "span 1 first"
    88 PASS getComputedStyle(gridItemWithSpanString, '').getPropertyValue('-webkit-grid-row') is "-1 / span 1 last"
    89 PASS getComputedStyle(gridItemWithSpanString, '').getPropertyValue('-webkit-grid-row-start') is "-1"
    90 PASS getComputedStyle(gridItemWithSpanString, '').getPropertyValue('-webkit-grid-row-end') is "span 1 last"
    91 PASS getComputedStyle(gridItemWithSpanNumberString, '').getPropertyValue('-webkit-grid-column') is "1 / span 3 first"
    92 PASS getComputedStyle(gridItemWithSpanNumberString, '').getPropertyValue('-webkit-grid-column-start') is "1"
    93 PASS getComputedStyle(gridItemWithSpanNumberString, '').getPropertyValue('-webkit-grid-column-end') is "span 3 first"
    94 PASS getComputedStyle(gridItemWithSpanNumberString, '').getPropertyValue('-webkit-grid-row') is "-1 / span 2 last"
    95 PASS getComputedStyle(gridItemWithSpanNumberString, '').getPropertyValue('-webkit-grid-row-start') is "-1"
    96 PASS getComputedStyle(gridItemWithSpanNumberString, '').getPropertyValue('-webkit-grid-row-end') is "span 2 last"
     79PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-column') is "first / first"
     80PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-column-start') is "first"
     81PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-column-end') is "first"
     82PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-row') is "last / last"
     83PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-row-start') is "last"
     84PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-row-end') is "last"
     85PASS getComputedStyle(gridItemWithNonExistingCustomIdent, '').getPropertyValue('-webkit-grid-column') is "nav / nav"
     86PASS getComputedStyle(gridItemWithNonExistingCustomIdent, '').getPropertyValue('-webkit-grid-column-start') is "nav"
     87PASS getComputedStyle(gridItemWithNonExistingCustomIdent, '').getPropertyValue('-webkit-grid-column-end') is "nav"
     88PASS getComputedStyle(gridItemWithNonExistingCustomIdent, '').getPropertyValue('-webkit-grid-row') is "foo / foo"
     89PASS getComputedStyle(gridItemWithNonExistingCustomIdent, '').getPropertyValue('-webkit-grid-row-start') is "foo"
     90PASS getComputedStyle(gridItemWithNonExistingCustomIdent, '').getPropertyValue('-webkit-grid-row-end') is "foo"
     91PASS getComputedStyle(gridItemWithSpanCustomIdent, '').getPropertyValue('-webkit-grid-column') is "1 / span 1 first"
     92PASS getComputedStyle(gridItemWithSpanCustomIdent, '').getPropertyValue('-webkit-grid-column-start') is "1"
     93PASS getComputedStyle(gridItemWithSpanCustomIdent, '').getPropertyValue('-webkit-grid-column-end') is "span 1 first"
     94PASS getComputedStyle(gridItemWithSpanCustomIdent, '').getPropertyValue('-webkit-grid-row') is "-1 / span 1 last"
     95PASS getComputedStyle(gridItemWithSpanCustomIdent, '').getPropertyValue('-webkit-grid-row-start') is "-1"
     96PASS getComputedStyle(gridItemWithSpanCustomIdent, '').getPropertyValue('-webkit-grid-row-end') is "span 1 last"
     97PASS getComputedStyle(gridItemWithSpanNumberCustomIdent, '').getPropertyValue('-webkit-grid-column') is "1 / span 3 first"
     98PASS getComputedStyle(gridItemWithSpanNumberCustomIdent, '').getPropertyValue('-webkit-grid-column-start') is "1"
     99PASS getComputedStyle(gridItemWithSpanNumberCustomIdent, '').getPropertyValue('-webkit-grid-column-end') is "span 3 first"
     100PASS getComputedStyle(gridItemWithSpanNumberCustomIdent, '').getPropertyValue('-webkit-grid-row') is "-1 / span 2 last"
     101PASS getComputedStyle(gridItemWithSpanNumberCustomIdent, '').getPropertyValue('-webkit-grid-row-start') is "-1"
     102PASS getComputedStyle(gridItemWithSpanNumberCustomIdent, '').getPropertyValue('-webkit-grid-row-end') is "span 2 last"
    97103PASS getComputedStyle(gridItemWithSingleNamedGridArea, '').getPropertyValue('-webkit-grid-column') is "thirdArea / thirdArea"
    98104PASS getComputedStyle(gridItemWithSingleNamedGridArea, '').getPropertyValue('-webkit-grid-column-start') is "thirdArea"
     
    177183PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "5"
    178184PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "span 1 last"
    179 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "1 first / 1 last"
    180 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "1 first"
    181 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "1 last"
    182 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "1 nav / span 1 last"
    183 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "1 nav"
     185PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "first / last"
     186PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "first"
     187PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "last"
     188PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "nav / span 1 last"
     189PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "nav"
    184190PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "span 1 last"
    185191PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "3 first / 2 last"
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-column-row-get-set.html

    r166299 r166712  
    1111    -webkit-grid-template-areas: "firstArea secondArea"
    1212                                 "thirdArea thirdArea";
     13
     14    -webkit-grid-template-columns: (first nav) 10px 10px;
     15    -webkit-grid-template-rows: (last) 10px 10px;
    1316}
    1417
     
    5760    -webkit-grid-row: 5/auto;
    5861}
    59 .gridItemWithString {
    60     -webkit-grid-column: "first";
    61     -webkit-grid-row: "last";
    62 }
    63 .gridItemWithSpanString {
    64     -webkit-grid-column: 1 /span "first";
    65     -webkit-grid-row: -1 / span "last";
    66 }
    67 .gridItemWithSpanNumberString {
    68     -webkit-grid-column: 1 /span 3 "first";
    69     -webkit-grid-row: -1 / "last" 2 span ;
     62.gridItemWithCustomIdent {
     63    -webkit-grid-column: first;
     64    -webkit-grid-row: last;
     65}
     66.gridItemWithNonExistingCustomIdent {
     67    -webkit-grid-column: nav;
     68    -webkit-grid-row: foo;
     69}
     70.gridItemWithSpanCustomIdent {
     71    -webkit-grid-column: 1 /span first;
     72    -webkit-grid-row: -1 / span last;
     73}
     74.gridItemWithSpanNumberCustomIdent {
     75    -webkit-grid-column: 1 /span 3 first;
     76    -webkit-grid-row: -1 / last 2 span ;
    7077}
    7178.gridItemWithSingleNamedGridArea {
     
    95102    <div class="gridItemWithNegativePositiveInteger gridItemWithBothLongHand" id="gridItemWithBothShortLongHandElement"></div>
    96103    <div class="gridItemWithNoSpace" id="gridItemWithNoSpaceElement"></div>
    97     <div class="gridItemWithString" id="gridItemWithString"></div>
    98     <div class="gridItemWithSpanString" id="gridItemWithSpanString"></div>
    99     <div class="gridItemWithSpanNumberString" id="gridItemWithSpanNumberString"></div>
     104    <div class="gridItemWithCustomIdent" id="gridItemWithCustomIdent"></div>
     105    <div class="gridItemWithNonExistingCustomIdent" id="gridItemWithNonExistingCustomIdent"></div>
     106    <div class="gridItemWithSpanCustomIdent" id="gridItemWithSpanCustomIdent"></div>
     107    <div class="gridItemWithSpanNumberCustomIdent" id="gridItemWithSpanNumberCustomIdent"></div>
    100108    <div class="gridItemWithSingleNamedGridArea" id="gridItemWithSingleNamedGridArea"></div>
    101109    <div class="gridItemWithNamedGridAreaAndSpan" id="gridItemWithNamedGridAreaAndSpan"></div>
     
    117125    testColumnRowCSSParsing("gridItemWithBothShortLongHandElement", "10 / 11", "4 / 5");
    118126    testColumnRowCSSParsing("gridItemWithNoSpaceElement", "auto / 1", "5 / auto");
    119     testColumnRowCSSParsing("gridItemWithString", "1 first / auto", "1 last / auto");
    120     testColumnRowCSSParsing("gridItemWithSpanString", "1 / span 1 first", "-1 / span 1 last");
    121     testColumnRowCSSParsing("gridItemWithSpanNumberString", "1 / span 3 first", "-1 / span 2 last");
     127    testColumnRowCSSParsing("gridItemWithCustomIdent", "first / first", "last / last");
     128    testColumnRowCSSParsing("gridItemWithNonExistingCustomIdent", "nav / nav", "foo / foo");
     129    testColumnRowCSSParsing("gridItemWithSpanCustomIdent", "1 / span 1 first", "-1 / span 1 last");
     130    testColumnRowCSSParsing("gridItemWithSpanNumberCustomIdent", "1 / span 3 first", "-1 / span 2 last");
    122131    testColumnRowCSSParsing("gridItemWithSingleNamedGridArea", "thirdArea / thirdArea", "firstArea / firstArea");
    123132    testColumnRowCSSParsing("gridItemWithNamedGridAreaAndSpan", "thirdArea / span 1", "firstArea / span 2");
     
    145154    testColumnRowJSParsing("auto / 5", "auto / 8");
    146155    testColumnRowJSParsing("span / 3", "5 / span", "span 1 / 3", "5 / span 1");
    147     testColumnRowJSParsing("'first' span / 3", "5 / 'last' span", "span 1 first / 3", "5 / span 1 last");
    148     testColumnRowJSParsing("'first' / 'last'", "'nav' / 'last' span", "1 first / 1 last", "1 nav / span 1 last");
    149     testColumnRowJSParsing("3 'first' / 2 'last'", "5 'nav' / 'last' 7 span", "3 first / 2 last", "5 nav / span 7 last");
    150     testColumnRowJSParsing("3 'first' span / -3 'last'", "'last' 2 span / -1 'nav'", "span 3 first / -3 last", "span 2 last / -1 nav");
     156    testColumnRowJSParsing("first span / 3", "5 / last span", "span 1 first / 3", "5 / span 1 last");
     157    testColumnRowJSParsing("first / last", "nav / last span", "first / last", "nav / span 1 last");
     158    testColumnRowJSParsing("3 first / 2 last", "5 nav / last 7 span", "3 first / 2 last", "5 nav / span 7 last");
     159    testColumnRowJSParsing("3 first span / -3 last", "last 2 span / -1 nav", "span 3 first / -3 last", "span 2 last / -1 nav");
    151160    testColumnRowJSParsing("5 / none", "8 / foobar");
    152161    testColumnRowJSParsing("nonExistent / none", "nonExistent / foobar");
    153     testColumnRowJSParsing("span 'first' 3 / none", "'last' span / foobar", "span 3 first / none", "span 1 last / foobar");
    154     testColumnRowJSParsing("5 span / span 2", "span 'first' / 'last' span", "span 5 / span 2", "span 1 first / span 1 last");
    155     testColumnRowJSParsing("span 5 'first' / span 'last' 2", "3 'first' span / 'last' 7 span", "span 5 first / span 2 last", "span 3 first / span 7 last");
     162    testColumnRowJSParsing("span first 3 / none", "last span / foobar", "span 3 first / none", "span 1 last / foobar");
     163    testColumnRowJSParsing("5 span / span 2", "span first / last span", "span 5 / span 2", "span 1 first / span 1 last");
     164    testColumnRowJSParsing("span 5 first / span last 2", "3 first span / last 7 span", "span 5 first / span 2 last", "span 3 first / span 7 last");
    156165
    157166    debug("");
     
    201210    // More than 1 <integer> and / or <string>.
    202211    testColumnRowInvalidJSParsing("5 5 / span 2", "4 4 / 3 span");
    203     testColumnRowInvalidJSParsing("5 'first' 'last' / span 2", "'first' 4 'last' / 3 span");
    204     testColumnRowInvalidJSParsing("5 / 'first' 'last' 2", "4 / 'first' 3 'last'");
    205     testColumnRowInvalidJSParsing("'first' 'last' / span 2", "'first' 'last' / 3 span");
    206     testColumnRowInvalidJSParsing("5 / 'first' 'last'", "4 / 'first' 'last'");
     212    testColumnRowInvalidJSParsing("5 first last / span 2", "first 4 last / 3 span");
     213    testColumnRowInvalidJSParsing("5 / first last 2", "4 / first 3 last");
     214    testColumnRowInvalidJSParsing("first last / span 2", "first last / 3 span");
     215    testColumnRowInvalidJSParsing("5 / first last", "4 / first last");
    207216    testColumnRowInvalidJSParsing("5 5 span / 2", "span 4 4 / 3");
    208217    testColumnRowInvalidJSParsing("span 3 5 / 1", "5 span 4 / 3");
    209     testColumnRowInvalidJSParsing("span 'last' 'first' / 1", "span 'first' 'last' / 3");
    210     testColumnRowInvalidJSParsing("2 / span 'last' 'first'", "3 / span 'first' 'last'");
    211     testColumnRowInvalidJSParsing("span 1 'last' 'first' / 1", "span 'first' 'last' 7 / 3");
    212     testColumnRowInvalidJSParsing("2 / span 'last' 3 'first'", "3 / span 'first' 5 'last'");
    213     testColumnRowInvalidJSParsing("1 span 2 'first' / 1", "1 span 'last' 7 / 3");
    214     testColumnRowInvalidJSParsing("2 / 3 span 3 'first'", "3 / 5 span 'first' 5");
     218    testColumnRowInvalidJSParsing("span last first / 1", "span first last / 3");
     219    testColumnRowInvalidJSParsing("2 / span last first", "3 / span first last");
     220    testColumnRowInvalidJSParsing("span 1 last first / 1", "span first last 7 / 3");
     221    testColumnRowInvalidJSParsing("2 / span last 3 first", "3 / span first 5 last");
     222    testColumnRowInvalidJSParsing("1 span 2 first / 1", "1 span last 7 / 3");
     223    testColumnRowInvalidJSParsing("2 / 3 span 3 first", "3 / 5 span first 5");
    215224
    216225    // Negative integer or 0 are invalid for spans.
     
    219228    testColumnRowInvalidJSParsing("0 span / 0", "span 0 / 0");
    220229    testColumnRowInvalidJSParsing("0 / span 0", "0 / 0 span");
    221     testColumnRowInvalidJSParsing("span -3 'first' / 3 'last'", "'last' -2 span / 1 'nav'");
     230    testColumnRowInvalidJSParsing("span -3 'first' / 3 last", "last -2 span / 1 nav");
    222231
    223232    // We don't allow span to be between the <integer> and the <string>.
    224     testColumnRowInvalidJSParsing("'first' span 1 / 'last'", "2 span 'first' / 'last'");
    225     testColumnRowInvalidJSParsing("3 'first' / 2 span 'last'", "5 'nav' / 'last' span 7");
     233    testColumnRowInvalidJSParsing("first span 1 / last", "2 span first / last");
     234    testColumnRowInvalidJSParsing("3 first / 2 span last", "5 nav / last span 7");
    226235    testColumnRowInvalidJSParsing("3 / 1 span 2", "5 / 3 span 3");
    227236</script>
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-end-after-get-set-expected.txt

    r166299 r166712  
    4747PASS getComputedStyle(gridItemWithAutoElement, '').getPropertyValue('-webkit-grid-row-start') is "auto"
    4848PASS getComputedStyle(gridItemWithAutoElement, '').getPropertyValue('-webkit-grid-row-end') is "auto"
     49PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-column') is "auto / first"
     50PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-column-start') is "auto"
     51PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-column-end') is "first"
     52PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-row') is "auto / last"
     53PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-row-start') is "auto"
     54PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-row-end') is "last"
     55PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-column') is "auto / 2 first"
     56PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-column-start') is "auto"
     57PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-column-end') is "2 first"
     58PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-row') is "auto / 3 last"
     59PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-row-start') is "auto"
     60PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-row-end') is "3 last"
     61PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-column') is "auto / span 1 first"
     62PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-column-start') is "auto"
     63PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-column-end') is "span 1 first"
     64PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-row') is "auto / span 1 last"
     65PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-row-start') is "auto"
     66PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-row-end') is "span 1 last"
     67PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-column') is "auto / span 2 first"
     68PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-column-start') is "auto"
     69PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-column-end') is "span 2 first"
     70PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-row') is "auto / span 3 last"
     71PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-row-start') is "auto"
     72PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-row-end') is "span 3 last"
    4973PASS getComputedStyle(gridItemWithArea, '').getPropertyValue('-webkit-grid-column') is "auto / firstArea"
    5074PASS getComputedStyle(gridItemWithArea, '').getPropertyValue('-webkit-grid-column-start') is "auto"
     
    7397PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
    7498PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "-40"
     99PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / first"
     100PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
     101PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "first"
     102PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "auto / last"
     103PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
     104PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "last"
    75105PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / span 7"
    76106PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
     
    79109PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
    80110PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "span 2"
     111PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / span 1 first"
     112PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
     113PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "span 1 first"
     114PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "auto / span 1 last"
     115PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
     116PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "span 1 last"
    81117PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / auto"
    82118PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-end-after-get-set.html

    r166299 r166712  
    3737    -webkit-grid-row-end: auto;
    3838}
     39.gridItemWithCustomIdent {
     40    -webkit-grid-column-end: first;
     41    -webkit-grid-row-end: last;
     42}
     43.gridItemWithNumberCustomIdent {
     44    -webkit-grid-column-end: first 2;
     45    -webkit-grid-row-end: 3 last;
     46}
     47.gridItemWithSpanCustomIdent {
     48    -webkit-grid-column-end: first span;
     49    -webkit-grid-row-end: span last;
     50}
     51.gridItemWithSpanNumberCustomIdent {
     52    -webkit-grid-column-end: 2 first span;
     53    -webkit-grid-row-end: last 3 span;
     54}
    3955.gridItemWithArea {
    4056    -webkit-grid-column-end: firstArea;
     
    5571    <div class="gridItemWithOnlySpan" id="gridItemWithOnlySpan"></div>
    5672    <div class="gridItemWithAuto" id="gridItemWithAutoElement"></div>
     73    <div class="gridItemWithCustomIdent" id="gridItemWithCustomIdent"></div>
     74    <div class="gridItemWithNumberCustomIdent" id="gridItemWithNumberCustomIdent"></div>
     75    <div class="gridItemWithSpanCustomIdent" id="gridItemWithSpanCustomIdentElement"></div>
     76    <div class="gridItemWithSpanNumberCustomIdent" id="gridItemWithSpanNumberCustomIdentElement"></div>
    5777    <div class="gridItemWithArea" id="gridItemWithArea"></div>
    5878</div>
     
    6888    testColumnRowCSSParsing("gridItemWithOnlySpan", "auto / span 1", "auto / span 1");
    6989    testColumnRowCSSParsing("gridItemWithAutoElement", "auto / auto", "auto / auto");
     90    testColumnRowCSSParsing("gridItemWithCustomIdent", "auto / first", "auto / last");
     91    testColumnRowCSSParsing("gridItemWithNumberCustomIdent", "auto / 2 first", "auto / 3 last");
     92    testColumnRowCSSParsing("gridItemWithSpanCustomIdentElement", "auto / span 1 first", "auto / span 1 last");
     93    testColumnRowCSSParsing("gridItemWithSpanNumberCustomIdentElement", "auto / span 2 first", "auto / span 3 last");
    7094    testColumnRowCSSParsing("gridItemWithArea", "auto / firstArea", "auto / thirdArea");
    7195
     
    83107    testColumnEndRowEndJSParsing("18", "66");
    84108    testColumnEndRowEndJSParsing("-55", "-40");
     109    testColumnEndRowEndJSParsing("first", "last", "first", "last");
    85110    testColumnEndRowEndJSParsing("span 7", "span 2");
     111    testColumnEndRowEndJSParsing("span first", "span last", "span 1 first", "span 1 last");
    86112    testColumnEndRowEndJSParsing("auto", "auto");
    87113    testColumnEndRowEndJSParsing("thirdArea", "secondArea");
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-named-grid-area-resolution.html

    r166157 r166712  
    5353
    5454.gridItemNamedGridLineWithArea {
    55     -webkit-grid-row: third / "after";
     55    -webkit-grid-row: third / after;
    5656    -webkit-grid-column: 1;
    5757}
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-named-grid-line-resolution-expected.txt

    r165612 r166712  
    2424PASS
    2525PASS
    26 PASS
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-named-grid-line-resolution.html

    r166157 r166712  
    2424
    2525.gridItemBToD {
    26     -webkit-grid-column: 'b' / 'd';
     26    -webkit-grid-column: b / d;
    2727    -webkit-grid-row: 1;
    2828}
     
    3030.gridItemGToH {
    3131    -webkit-grid-column: 1;
    32     -webkit-grid-row: 'g' / 'h';
     32    -webkit-grid-row: g / h;
    3333}
    3434
    3535.gridItemInvalidPositiveGridLine {
    36     -webkit-grid-column: "nonexistent" / span 2;
    37     -webkit-grid-row: span 2 / "nonexistent";
     36    -webkit-grid-column: nonexistent / span 2;
     37    -webkit-grid-row: span 2 / nonexistent;
    3838}
    3939
    4040.gridItemInvalidNegativeGridLine {
    41     -webkit-grid-column: 1 / -1 "nonexistent";
    42     -webkit-grid-row: span 2 / -10 "nonexistent";
     41    -webkit-grid-column: 1 / -1 nonexistent;
     42    -webkit-grid-row: span 2 / -10 nonexistent;
    4343}
    4444
    4545.gridItemAToSpanC {
    46     -webkit-grid-column: 'a' / span 'c';
     46    -webkit-grid-column: a / span c;
    4747    -webkit-grid-row: 1;
    4848}
     
    5050.gridItemFToSpanH {
    5151    -webkit-grid-column: 1;
    52     -webkit-grid-row: 'f' span / 'h';
     52    -webkit-grid-row: f span / h;
    5353}
    5454
    5555.gridItem2BSpan2B {
    56     -webkit-grid-column: 2 'b' / span 2 'b';
     56    -webkit-grid-column: 2 b / span 2 b;
    5757    -webkit-grid-row: 1;
    5858}
     
    6060.gridItemSpan2GNegativeG {
    6161    -webkit-grid-column: 1;
    62     -webkit-grid-row: span 2 'g' / -1 'g';
     62    -webkit-grid-row: span 2 g / -1 g;
    6363}
    6464</style>
     
    9494</div>
    9595
    96 
     96<!-- FIXME: this needs span working for autoplacement as the syntax is no longer invalid -->
     97<!--
    9798<div style="position: relative">
    9899    <div class="grid gridWithoutRepeat">
     
    101102</div>
    102103</div>
     104-->
    103105
    104106<div style="position: relative">
     
    177179<div style="position: relative">
    178180    <div class="grid gridFromSpecs">
    179       <div class="sizedToGridArea" style="-webkit-grid-column: 'C' / 'C' -1;" data-offset-x="30px" data-expected-width="330px"></div>
    180     </div>
    181 </div>
    182 
    183 <div style="position: relative">
    184     <div class="grid gridFromSpecs">
    185       <div class="sizedToGridArea" style="-webkit-grid-column: 'C' / span 'C';" data-offset-x="30px" data-expected-width="120px"></div>
    186     </div>
    187 </div>
    188 
    189 <div style="position: relative">
    190     <div class="grid gridFromSpecs">
    191       <div class="sizedToGridArea" style="-webkit-grid-column: span 'C' / 'C' -1;" data-offset-x="150px" data-expected-width="210px"></div>
    192     </div>
    193 </div>
    194 
    195 <div style="position: relative">
    196     <div class="grid gridFromSpecs">
    197       <div class="sizedToGridArea" style="-webkit-grid-column: span 'C' / span 'C';" data-offset-x="0px" data-expected-width="10px"></div>
    198     </div>
    199 </div>
    200 
    201 <div style="position: relative">
    202     <div class="grid gridFromSpecs">
    203       <div class="sizedToGridArea" style="-webkit-grid-column: 5 / 'C' -1;" data-offset-x="100px" data-expected-width="260px"></div>
    204     </div>
    205 </div>
    206 
    207 <div style="position: relative">
    208     <div class="grid gridFromSpecs">
    209       <div class="sizedToGridArea" style="-webkit-grid-column: 5 / span 'C';" data-offset-x="100px" data-expected-width="50px"></div>
     181      <div class="sizedToGridArea" style="-webkit-grid-column: C / C -1;" data-offset-x="30px" data-expected-width="330px"></div>
     182    </div>
     183</div>
     184
     185<div style="position: relative">
     186    <div class="grid gridFromSpecs">
     187      <div class="sizedToGridArea" style="-webkit-grid-column: C / span C;" data-offset-x="30px" data-expected-width="120px"></div>
     188    </div>
     189</div>
     190
     191<div style="position: relative">
     192    <div class="grid gridFromSpecs">
     193      <div class="sizedToGridArea" style="-webkit-grid-column: span C / C -1;" data-offset-x="150px" data-expected-width="210px"></div>
     194    </div>
     195</div>
     196
     197<div style="position: relative">
     198    <div class="grid gridFromSpecs">
     199      <div class="sizedToGridArea" style="-webkit-grid-column: span C / span C;" data-offset-x="0px" data-expected-width="10px"></div>
     200    </div>
     201</div>
     202
     203<div style="position: relative">
     204    <div class="grid gridFromSpecs">
     205      <div class="sizedToGridArea" style="-webkit-grid-column: 5 / C -1;" data-offset-x="100px" data-expected-width="260px"></div>
     206    </div>
     207</div>
     208
     209<div style="position: relative">
     210    <div class="grid gridFromSpecs">
     211      <div class="sizedToGridArea" style="-webkit-grid-column: 5 / span C;" data-offset-x="100px" data-expected-width="50px"></div>
    210212    </div>
    211213</div>
     
    219221<div style="position: relative">
    220222    <div class="grid gridFromSpecs">
    221       <div class="sizedToGridArea" style="-webkit-grid-column: 'B' 2 / span 1;" data-offset-x="100px" data-expected-width="50px"></div>
     223      <div class="sizedToGridArea" style="-webkit-grid-column: B 2 / span 1;" data-offset-x="100px" data-expected-width="50px"></div>
    222224    </div>
    223225</div>
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-negative-position-resolution.html

    r166157 r166712  
    3434
    3535.lastNamedGridLineStartPositionGrowGridInColumnDirection {
    36     -webkit-grid-column: "last" / auto;
     36    -webkit-grid-column: last / auto;
    3737    -webkit-grid-row: 1;
    3838}
     
    4040.negativeStartPositionGrowGridInRowDirection {
    4141    -webkit-grid-column: 1;
    42     -webkit-grid-row: "last" / auto;
     42    -webkit-grid-row: last / auto;
    4343}
    4444
     
    5454
    5555.namedEndSpanGrowGridInColumnDirection {
    56     -webkit-grid-column: -1 "middle" / span 3;
     56    -webkit-grid-column: -1 middle / span 3;
    5757    -webkit-grid-row: 1;
    5858}
     
    6060.namedEndSpanGrowGridInRowDirection {
    6161    -webkit-grid-column: 1;
    62     -webkit-grid-row: 2 "middle" / span 3;
     62    -webkit-grid-row: 2 middle / span 3;
    6363}
    6464
     
    7474
    7575.negativeNamedGridLineEndPositionStartSpanInColumnDirection {
    76     -webkit-grid-column: span / "last";
     76    -webkit-grid-column: span / last;
    7777    -webkit-grid-row: 1;
    7878}
     
    8080.negativeNamedGridLineEndPositionStartSpanInRowDirection {
    8181    -webkit-grid-column: 1;
    82     -webkit-grid-row: span 5 / "last";
     82    -webkit-grid-row: span 5 / last;
    8383}
    8484
     
    9494
    9595.namedGridLineEndPositionStartNegativeInColumnDirection {
    96     -webkit-grid-column: -3 / 10 "last";
     96    -webkit-grid-column: -3 / 10 last;
    9797    -webkit-grid-row: 1;
    9898}
    9999
    100100.namedGridLineEndPositionStartNegativeInRowDirection {
    101     -webkit-grid-column: -5 / -2 "middle";
     101    -webkit-grid-column: -5 / -2 middle;
    102102    -webkit-grid-row: 1;
    103103}
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-position-changed-dynamic.html

    r166157 r166712  
    5858
    5959    // 3. Named grid lines, changing the explicit position.
    60     testPosition({ 'column': '1 / 2 "col"', 'row': '1 / 2 "row"' }, { 'width': '50', 'height': '70' });
    61     testPosition({ 'column': '1 / 3 "col"', 'row': '1 / 2 "row"' }, { 'width': '150', 'height': '70' });
     60    testPosition({ 'column': '1 / 2 col', 'row': '1 / 2 row' }, { 'width': '50', 'height': '70' });
     61    testPosition({ 'column': '1 / 3 col', 'row': '1 / 2 row' }, { 'width': '150', 'height': '70' });
    6262
    63     testPosition({ 'column': '1 / 2 "col"', 'row': '1 / 3 "row"' }, { 'width': '50', 'height': '210' });
    64     testPosition({ 'column': '1 / 2 "col"', 'row': '1 / 2 "row"' }, { 'width': '50', 'height': '70' });
     63    testPosition({ 'column': '1 / 2 col', 'row': '1 / 3 row' }, { 'width': '50', 'height': '210' });
     64    testPosition({ 'column': '1 / 2 col', 'row': '1 / 2 row' }, { 'width': '50', 'height': '70' });
    6565
    66     testPosition({ 'column': '1 "col" / 4', 'row': '1 "row" / 4' }, { 'width': '350', 'height': '490' });
    67     testPosition({ 'column': '2 "col" / 4', 'row': '1 "row" / 4' }, { 'width': '300', 'height': '490' });
     66    testPosition({ 'column': '1 col / 4', 'row': '1 row / 4' }, { 'width': '350', 'height': '490' });
     67    testPosition({ 'column': '2 col / 4', 'row': '1 row / 4' }, { 'width': '300', 'height': '490' });
    6868
    69     testPosition({ 'column': '2 "col" / 4', 'row': '2 "row" / 4' }, { 'width': '300', 'height': '420' });
    70     testPosition({ 'column': '2 "col" / 4', 'row': '1 "row" / 4' }, { 'width': '300', 'height': '490' });
     69    testPosition({ 'column': '2 col / 4', 'row': '2 row / 4' }, { 'width': '300', 'height': '420' });
     70    testPosition({ 'column': '2 col / 4', 'row': '1 row / 4' }, { 'width': '300', 'height': '490' });
    7171
    7272    // 4. Named grid lines, changing the name of the grid lines.
    73     testPosition({ 'column': '1 / 3 "col"', 'row': '1 / 2 "row"' }, { 'width': '150', 'height': '70' });
    74     testPosition({ 'column': '1 / 3 "invalid"', 'row': '1 / 2 "row"' }, { 'width': '50', 'height': '70' });
     73    testPosition({ 'column': '1 / 3 col', 'row': '1 / 2 row' }, { 'width': '150', 'height': '70' });
     74    testPosition({ 'column': '1 / 3 invalid', 'row': '1 / 2 row' }, { 'width': '50', 'height': '70' });
    7575
    76     testPosition({ 'column': '1 / 4 "col"', 'row': '1 / 4 "invalid"' }, { 'width': '350', 'height': '70' });
    77     testPosition({ 'column': '1 / 4 "col"', 'row': '1 / 4 "row"' }, { 'width': '350', 'height': '490' });
     76    testPosition({ 'column': '1 / 4 col', 'row': '1 / 4 invalid' }, { 'width': '350', 'height': '70' });
     77    testPosition({ 'column': '1 / 4 col', 'row': '1 / 4 row' }, { 'width': '350', 'height': '490' });
    7878
    79     testPosition({ 'column': '2 "invalid" / 4', 'row': '1 "row" / 4' }, { 'width': '350', 'height': '490' });
    80     testPosition({ 'column': '2 "col" / 4', 'row': '1 "row" / 4' }, { 'width': '300', 'height': '490' });
     79    testPosition({ 'column': '2 invalid / 4', 'row': '1 row / 4' }, { 'width': '350', 'height': '490' });
     80    testPosition({ 'column': '2 col / 4', 'row': '1 row / 4' }, { 'width': '300', 'height': '490' });
    8181
    82     testPosition({ 'column': '2 "col" / 4', 'row': '2 "row" / 4' }, { 'width': '300', 'height': '420' });
    83     testPosition({ 'column': '2 "col" / 4', 'row': '2 "invalid" / 4' }, { 'width': '300', 'height': '490' });
     82    testPosition({ 'column': '2 col / 4', 'row': '2 row / 4' }, { 'width': '300', 'height': '420' });
     83    testPosition({ 'column': '2 col / 4', 'row': '2 invalid / 4' }, { 'width': '300', 'height': '490' });
    8484
    8585    // 5. Span named grid lines, changing the grid line number.
    86     testPosition({ 'column': '1 / span 3 "col"', 'row': '1 / span 2 "row"' }, { 'width': '350', 'height': '210' });
    87     testPosition({ 'column': '1 / span 2 "col"', 'row': '1 / span 2 "row"' }, { 'width': '150', 'height': '210' });
     86    testPosition({ 'column': '1 / span 3 col', 'row': '1 / span 2 row' }, { 'width': '350', 'height': '210' });
     87    testPosition({ 'column': '1 / span 2 col', 'row': '1 / span 2 row' }, { 'width': '150', 'height': '210' });
    8888
    89     testPosition({ 'column': '2 / span 3 "col"', 'row': '1 / span 2 "row"' }, { 'width': '300', 'height': '210' });
    90     testPosition({ 'column': '2 / span 3 "col"', 'row': '1 / span 1 "row"' }, { 'width': '300', 'height': '70' });
     89    testPosition({ 'column': '2 / span 3 col', 'row': '1 / span 2 row' }, { 'width': '300', 'height': '210' });
     90    testPosition({ 'column': '2 / span 3 col', 'row': '1 / span 1 row' }, { 'width': '300', 'height': '70' });
    9191
    92     testPosition({ 'column': 'span 2 "col" / 3', 'row': 'span 2 "row" / 4' }, { 'width': '150', 'height': '420' });
    93     testPosition({ 'column': 'span 1 "col" / 3', 'row': 'span 2 "row" / 4' }, { 'width': '100', 'height': '420' });
     92    testPosition({ 'column': 'span 2 col / 3', 'row': 'span 2 row / 4' }, { 'width': '150', 'height': '420' });
     93    testPosition({ 'column': 'span 1 col / 3', 'row': 'span 2 row / 4' }, { 'width': '100', 'height': '420' });
    9494
    95     testPosition({ 'column': 'span 2 "col" / 3', 'row': 'span 2 "row" / 4' }, { 'width': '150', 'height': '420' });
    96     testPosition({ 'column': 'span 2 "col" / 3', 'row': 'span 3 "row" / 4' }, { 'width': '150', 'height': '490' });
     95    testPosition({ 'column': 'span 2 col / 3', 'row': 'span 2 row / 4' }, { 'width': '150', 'height': '420' });
     96    testPosition({ 'column': 'span 2 col / 3', 'row': 'span 3 row / 4' }, { 'width': '150', 'height': '490' });
    9797
    9898    // Test transition across grid lines types.
     
    111111
    112112    // 2. Span <-> named grid lines.
    113     testPosition({ 'column': '1 / "col" 3', 'row': '1 / span 4' }, { 'width': '150', 'height': '490' });
     113    testPosition({ 'column': '1 / col 3', 'row': '1 / span 4' }, { 'width': '150', 'height': '490' });
    114114    testPosition({ 'column': '1 / span 3', 'row': '1 / span 4' }, { 'width': '350', 'height': '490' });
    115115
    116     testPosition({ 'column': '1 / "col" 3', 'row': '1 / span 3' }, { 'width': '150', 'height': '490' });
    117     testPosition({ 'column': '1 / "col" 3', 'row': '1 / "row" 3' }, { 'width': '150', 'height': '210' });
     116    testPosition({ 'column': '1 / col 3', 'row': '1 / span 3' }, { 'width': '150', 'height': '490' });
     117    testPosition({ 'column': '1 / col 3', 'row': '1 / row 3' }, { 'width': '150', 'height': '210' });
    118118
    119119    testPosition({ 'column': 'span 1 / 3', 'row': 'span 2 / 4' }, { 'width': '100', 'height': '420' });
    120     testPosition({ 'column': '1 "col" / 3', 'row': 'span 2 / 4' }, { 'width': '150', 'height': '420' });
     120    testPosition({ 'column': '1 col / 3', 'row': 'span 2 / 4' }, { 'width': '150', 'height': '420' });
    121121
    122     testPosition({ 'column': 'span 1 / 3', 'row': '"col" 1 / 4' }, { 'width': '100', 'height': '490' });
     122    testPosition({ 'column': 'span 1 / 3', 'row': 'col 1 / 4' }, { 'width': '100', 'height': '490' });
    123123    testPosition({ 'column': 'span 1 / 3', 'row': 'span 1 / 4' }, { 'width': '100', 'height': '280' });
    124124
    125125    // 3. Named grid lines to span named grid line.
    126     testPosition({ 'column': '1 / "col" 3', 'row': '1 / span 4' }, { 'width': '150', 'height': '490' });
    127     testPosition({ 'column': '1 / span "col" 3', 'row': '1 / span 4' }, { 'width': '350', 'height': '490' });
     126    testPosition({ 'column': '1 / col 3', 'row': '1 / span 4' }, { 'width': '150', 'height': '490' });
     127    testPosition({ 'column': '1 / span col 3', 'row': '1 / span 4' }, { 'width': '350', 'height': '490' });
    128128
    129     testPosition({ 'column': '1 / "col" 3', 'row': '1 / span "row" 3' }, { 'width': '150', 'height': '490' });
    130     testPosition({ 'column': '1 / "col" 3', 'row': '1 / "row" 3' }, { 'width': '150', 'height': '210' });
     129    testPosition({ 'column': '1 / col 3', 'row': '1 / span row 3' }, { 'width': '150', 'height': '490' });
     130    testPosition({ 'column': '1 / col 3', 'row': '1 / row 3' }, { 'width': '150', 'height': '210' });
    131131
    132     testPosition({ 'column': 'span "col" 1 / 3', 'row': 'span 2 / 4' }, { 'width': '100', 'height': '420' });
    133     testPosition({ 'column': '1 "col" / 3', 'row': 'span 2 / 4' }, { 'width': '150', 'height': '420' });
     132    testPosition({ 'column': 'span col 1 / 3', 'row': 'span 2 / 4' }, { 'width': '100', 'height': '420' });
     133    testPosition({ 'column': '1 col / 3', 'row': 'span 2 / 4' }, { 'width': '150', 'height': '420' });
    134134
    135     testPosition({ 'column': 'span "col" 1 / 3', 'row': '"col" 1 / 4' }, { 'width': '100', 'height': '490' });
    136     testPosition({ 'column': 'span "col" 1 / 3', 'row': 'span "col" 1 / 4' }, { 'width': '100', 'height': '280' });
     135    testPosition({ 'column': 'span col 1 / 3', 'row': 'col 1 / 4' }, { 'width': '100', 'height': '490' });
     136    testPosition({ 'column': 'span col 1 / 3', 'row': 'span col 1 / 4' }, { 'width': '100', 'height': '280' });
    137137
    138138    // 4. Explicit <-> named grid lines.
     
    141141    gridElement.classList.add("differentNamedGridLines");
    142142
    143     testPosition({ 'column': '1 / "col4" 3', 'row': '1 / 4' }, { 'width': '350', 'height': '490' });
     143    testPosition({ 'column': '1 / col4 3', 'row': '1 / 4' }, { 'width': '350', 'height': '490' });
    144144    testPosition({ 'column': '1 / 3', 'row': '1 / 4' }, { 'width': '150', 'height': '490' });
    145145
    146     testPosition({ 'column': '1 / "col4" 3', 'row': '1 / 4' }, { 'width': '350', 'height': '490' });
    147     testPosition({ 'column': '1 / "col4" 3', 'row': '1 / "row3" 4' }, { 'width': '350', 'height': '210' });
     146    testPosition({ 'column': '1 / col4 3', 'row': '1 / 4' }, { 'width': '350', 'height': '490' });
     147    testPosition({ 'column': '1 / col4 3', 'row': '1 / row3 4' }, { 'width': '350', 'height': '210' });
    148148
    149     testPosition({ 'column': '"col2" 1 / 4', 'row': '1 "row2" / 4' }, { 'width': '300', 'height': '420' });
    150     testPosition({ 'column': '1 / 4', 'row': '1 "row2" / 4' }, { 'width': '350', 'height': '420' });
     149    testPosition({ 'column': 'col2 1 / 4', 'row': '1 row2 / 4' }, { 'width': '300', 'height': '420' });
     150    testPosition({ 'column': '1 / 4', 'row': '1 row2 / 4' }, { 'width': '350', 'height': '420' });
    151151
    152     testPosition({ 'column': '"col2" 1 / 4', 'row': '1 / 4' }, { 'width': '300', 'height': '490' });
    153     testPosition({ 'column': '"col2" 1 / 4', 'row': '1 "row2" / 4' }, { 'width': '300', 'height': '420' });
     152    testPosition({ 'column': 'col2 1 / 4', 'row': '1 / 4' }, { 'width': '300', 'height': '490' });
     153    testPosition({ 'column': 'col2 1 / 4', 'row': '1 row2 / 4' }, { 'width': '300', 'height': '420' });
    154154
    155155    // 5. Span <-> span named grid lines.
    156     testPosition({ 'column': '1 / span "col4" 2', 'row': '3 / span 1' }, { 'width': '350', 'height': '280' });
     156    testPosition({ 'column': '1 / span col4 2', 'row': '3 / span 1' }, { 'width': '350', 'height': '280' });
    157157    testPosition({ 'column': '1 / span 2', 'row': '3 / span 1' }, { 'width': '150', 'height': '280' });
    158158
    159     testPosition({ 'column': '1 / span "col4" 3', 'row': '1 / span 4' }, { 'width': '350', 'height': '490' });
    160     testPosition({ 'column': '1 / span "col4" 3', 'row': '1 / span "row3" 4' }, { 'width': '350', 'height': '210' });
     159    testPosition({ 'column': '1 / span col4 3', 'row': '1 / span 4' }, { 'width': '350', 'height': '490' });
     160    testPosition({ 'column': '1 / span col4 3', 'row': '1 / span row3 4' }, { 'width': '350', 'height': '210' });
    161161
    162162    testPosition({ 'column': 'span 2 / 4', 'row': 'span 1 / 4' }, { 'width': '300', 'height': '280' });
    163     testPosition({ 'column': 'span "col1" 2 / 4', 'row': 'span 1 / 4' }, { 'width': '350', 'height': '280' });
     163    testPosition({ 'column': 'span col1 2 / 4', 'row': 'span 1 / 4' }, { 'width': '350', 'height': '280' });
    164164
    165165    testPosition({ 'column': 'span 2 / 4', 'row': 'span 1 / 4' }, { 'width': '300', 'height': '280' });
    166     testPosition({ 'column': 'span 2 / 4', 'row': 'span "row2" 1 / 4' }, { 'width': '300', 'height': '420' });
     166    testPosition({ 'column': 'span 2 / 4', 'row': 'span row2 1 / 4' }, { 'width': '300', 'height': '420' });
    167167
    168168    // 6. Explicit to span named grid line.
    169     testPosition({ 'column': '1 / 2', 'row': '2 / span "row3" 1' }, { 'width': '50', 'height': '140' });
    170     testPosition({ 'column': '1 / span "col3" 2', 'row': '2 / span "row3" 1' }, { 'width': '150', 'height': '140' });
     169    testPosition({ 'column': '1 / 2', 'row': '2 / span row3 1' }, { 'width': '50', 'height': '140' });
     170    testPosition({ 'column': '1 / span col3 2', 'row': '2 / span row3 1' }, { 'width': '150', 'height': '140' });
    171171
    172     testPosition({ 'column': '1 / 2', 'row': '2 / span "row3" 4' }, { 'width': '50', 'height': '140' });
     172    testPosition({ 'column': '1 / 2', 'row': '2 / span row3 4' }, { 'width': '50', 'height': '140' });
    173173    testPosition({ 'column': '1 / 2', 'row': '2 / 4' }, { 'width': '50', 'height': '420' });
    174174
    175     testPosition({ 'column': 'span "col2" 1 / 4', 'row': 'span "row1" 3 / 4' }, { 'width': '300', 'height': '490' });
    176     testPosition({ 'column': '1 / 4', 'row': 'span "row1" 3 / 4' }, { 'width': '350', 'height': '490' });
     175    testPosition({ 'column': 'span col2 1 / 4', 'row': 'span row1 3 / 4' }, { 'width': '300', 'height': '490' });
     176    testPosition({ 'column': '1 / 4', 'row': 'span row1 3 / 4' }, { 'width': '350', 'height': '490' });
    177177
    178     testPosition({ 'column': 'span "col2" 1 / 4', 'row': 'span "row1" 3 / 4' }, { 'width': '300', 'height': '490' });
    179     testPosition({ 'column': 'span "col2" 1 / 4', 'row': '3 / 4' }, { 'width': '300', 'height': '280' });
     178    testPosition({ 'column': 'span col2 1 / 4', 'row': 'span row1 3 / 4' }, { 'width': '300', 'height': '490' });
     179    testPosition({ 'column': 'span col2 1 / 4', 'row': '3 / 4' }, { 'width': '300', 'height': '280' });
    180180}
    181181window.addEventListener("load", updateGridItemPosition, false);
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-start-before-get-set-expected.txt

    r166299 r166712  
    4545PASS getComputedStyle(gridItemWithAutoElement, '').getPropertyValue('-webkit-grid-row-start') is "auto"
    4646PASS getComputedStyle(gridItemWithAutoElement, '').getPropertyValue('-webkit-grid-row-end') is "auto"
     47PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-column') is "first / auto"
     48PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-column-start') is "first"
     49PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-column-end') is "auto"
     50PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-row') is "last / auto"
     51PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-row-start') is "last"
     52PASS getComputedStyle(gridItemWithCustomIdent, '').getPropertyValue('-webkit-grid-row-end') is "auto"
     53PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-column') is "2 first / auto"
     54PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-column-start') is "2 first"
     55PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-column-end') is "auto"
     56PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-row') is "3 last / auto"
     57PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-row-start') is "3 last"
     58PASS getComputedStyle(gridItemWithNumberCustomIdent, '').getPropertyValue('-webkit-grid-row-end') is "auto"
     59PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-column') is "span 1 first / auto"
     60PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-column-start') is "span 1 first"
     61PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-column-end') is "auto"
     62PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-row') is "span 1 last / auto"
     63PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-row-start') is "span 1 last"
     64PASS getComputedStyle(gridItemWithSpanCustomIdentElement, '').getPropertyValue('-webkit-grid-row-end') is "auto"
     65PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-column') is "span 2 first / auto"
     66PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-column-start') is "span 2 first"
     67PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-column-end') is "auto"
     68PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-row') is "span 3 last / auto"
     69PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-row-start') is "span 3 last"
     70PASS getComputedStyle(gridItemWithSpanNumberCustomIdentElement, '').getPropertyValue('-webkit-grid-row-end') is "auto"
    4771PASS getComputedStyle(gridItemWithArea, '').getPropertyValue('-webkit-grid-column') is "firstArea / auto"
    4872PASS getComputedStyle(gridItemWithArea, '').getPropertyValue('-webkit-grid-column-start') is "firstArea"
     
    7195PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "-40"
    7296PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
     97PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "nav / auto"
     98PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "nav"
     99PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "auto"
     100PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "last / auto"
     101PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "last"
     102PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
    73103PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "span 3 / auto"
    74104PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "span 3"
     
    76106PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 20 / auto"
    77107PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 20"
     108PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
     109PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "span 1 nav / auto"
     110PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "span 1 nav"
     111PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "auto"
     112PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 1 last / auto"
     113PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 1 last"
    78114PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
    79115PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / auto"
  • trunk/LayoutTests/fast/css-grid-layout/grid-item-start-before-get-set.html

    r166299 r166712  
    3737    -webkit-grid-row-start: auto;
    3838}
     39.gridItemWithCustomIdent {
     40    -webkit-grid-column-start: first;
     41    -webkit-grid-row-start: last;
     42}
     43.gridItemWithNumberCustomIdent {
     44    -webkit-grid-column-start: first 2;
     45    -webkit-grid-row-start: 3 last;
     46}
     47.gridItemWithSpanCustomIdent {
     48    -webkit-grid-column-start: first span;
     49    -webkit-grid-row-start: span last;
     50}
     51.gridItemWithSpanNumberCustomIdent {
     52    -webkit-grid-column-start: 2 first span;
     53    -webkit-grid-row-start: last 3 span;
     54}
    3955.gridItemWithArea {
    4056    -webkit-grid-column-start: firstArea;
     
    5571    <div class="gridItemWithOnlySpan" id="gridItemWithOnlySpan"></div>
    5672    <div class="gridItemWithAuto" id="gridItemWithAutoElement"></div>
     73    <div class="gridItemWithCustomIdent" id="gridItemWithCustomIdent"></div>
     74    <div class="gridItemWithNumberCustomIdent" id="gridItemWithNumberCustomIdent"></div>
     75    <div class="gridItemWithSpanCustomIdent" id="gridItemWithSpanCustomIdentElement"></div>
     76    <div class="gridItemWithSpanNumberCustomIdent" id="gridItemWithSpanNumberCustomIdentElement"></div>
    5777    <div class="gridItemWithArea" id="gridItemWithArea"></div>
    5878</div>
     
    7393    testColumnRowCSSParsing("gridItemWithOnlySpan", "span 1 / auto", "span 1 / auto");
    7494    testColumnRowCSSParsing("gridItemWithAutoElement", "auto / auto", "auto / auto");
     95    testColumnRowCSSParsing("gridItemWithCustomIdent", "first / auto", "last / auto");
     96    testColumnRowCSSParsing("gridItemWithNumberCustomIdent", "2 first / auto", "3 last / auto");
     97    testColumnRowCSSParsing("gridItemWithSpanCustomIdentElement", "span 1 first / auto", "span 1 last / auto");
     98    testColumnRowCSSParsing("gridItemWithSpanNumberCustomIdentElement", "span 2 first / auto", "span 3 last / auto");
    7599    testColumnRowCSSParsing("gridItemWithArea", "firstArea / auto", "thirdArea / auto");
    76100
     
    88112    testColumnStartRowStartJSParsing("18", "66");
    89113    testColumnStartRowStartJSParsing("-55", "-40");
     114    testColumnStartRowStartJSParsing("nav", "last", "nav", "last");
    90115    testColumnStartRowStartJSParsing("span 3", "span 20");
     116    testColumnStartRowStartJSParsing("span nav", "span last", "span 1 nav", "span 1 last");
    91117    testColumnStartRowStartJSParsing("auto", "auto");
    92118    testColumnStartRowStartJSParsing("thirdArea", "secondArea");
  • trunk/Source/WebCore/ChangeLog

    r166706 r166712  
     12014-03-27  Sergio Villar Senin  <svillar@igalia.com>
     2
     3        [CSS Grid Layout] <string> not allowed in grid-{area | row | column} syntax
     4        https://bugs.webkit.org/show_bug.cgi?id=129713
     5
     6        Reviewed by Darin Adler.
     7
     8        Grid positioning properties no longer accept <string> values for
     9        named grid lines as they did in previous versions of the specs. They
     10        were first replaced by <ident> and since the beginning of 2014 they
     11        should only accept <custom-ident>.
     12
     13        Updated the parser and the style resolver to this new syntax. Also
     14        updated the tests accordingly.
     15
     16        Test: fast/css-grid-layout/grid-container-change-named-grid-lines-recompute-child.html
     17
     18        * css/CSSParser.cpp:
     19        (WebCore::isValidCustomIdent): New function that checks that the
     20        <custom-ident> is valid.
     21        (WebCore::CSSParser::parseIntegerOrCustomIdentFromGridPosition):
     22        (WebCore::CSSParser::parseGridPosition):
     23        (WebCore::CSSParser::parseIntegerOrStringFromGridPosition):
     24        Replaced by WebCore::CSSParser::parseIntegerOrCustomIdentFromGridPosition.
     25        * css/CSSParser.h:
     26        * css/StyleResolver.cpp:
     27        (WebCore::createGridPosition):
     28
    1292014-04-03  Antti Koivisto  <antti@apple.com>
    230
  • trunk/Source/WebCore/css/CSSParser.cpp

    r166618 r166712  
    46754675
    46764676#if ENABLE(CSS_GRID_LAYOUT)
    4677 // The function parses [ <integer> || <string> ] in <grid-line> (which can be stand alone or with 'span').
    4678 bool CSSParser::parseIntegerOrStringFromGridPosition(RefPtr<CSSPrimitiveValue>& numericValue, RefPtr<CSSPrimitiveValue>& gridLineName)
     4677static inline bool isValidCustomIdent(const CSSParserValue& value)
     4678{
     4679    return value.unit == CSSPrimitiveValue::CSS_IDENT && value.id != CSSValueSpan && value.id != CSSValueAuto;
     4680}
     4681
     4682// The function parses [ <integer> || <custom-ident> ] in <grid-line> (which can be stand alone or with 'span').
     4683bool CSSParser::parseIntegerOrCustomIdentFromGridPosition(RefPtr<CSSPrimitiveValue>& numericValue, RefPtr<CSSPrimitiveValue>& gridLineName)
    46794684{
    46804685    CSSParserValue* value = m_valueList->current();
     
    46824687        numericValue = createPrimitiveNumericValue(value);
    46834688        value = m_valueList->next();
    4684         if (value && value->unit == CSSPrimitiveValue::CSS_STRING) {
     4689        if (value && isValidCustomIdent(*value)) {
    46854690            gridLineName = createPrimitiveStringValue(m_valueList->current());
    46864691            m_valueList->next();
     
    46894694    }
    46904695
    4691     if (value->unit == CSSPrimitiveValue::CSS_STRING) {
     4696    if (isValidCustomIdent(*value)) {
    46924697        gridLineName = createPrimitiveStringValue(m_valueList->current());
    46934698        value = m_valueList->next();
     
    47104715    }
    47114716
    4712     if (value->id != CSSValueSpan && value->unit == CSSPrimitiveValue::CSS_IDENT) {
    4713         m_valueList->next();
    4714         return cssValuePool().createValue(value->string, CSSPrimitiveValue::CSS_STRING);
    4715     }
    4716 
    47174717    RefPtr<CSSPrimitiveValue> numericValue;
    47184718    RefPtr<CSSPrimitiveValue> gridLineName;
    47194719    bool hasSeenSpanKeyword = false;
    47204720
    4721     if (parseIntegerOrStringFromGridPosition(numericValue, gridLineName)) {
     4721    if (value->id == CSSValueSpan) {
     4722        hasSeenSpanKeyword = true;
     4723        if (auto* nextValue = m_valueList->next()) {
     4724            if (!isForwardSlashOperator(nextValue) && !parseIntegerOrCustomIdentFromGridPosition(numericValue, gridLineName))
     4725                    return nullptr;
     4726        }
     4727    } else if (parseIntegerOrCustomIdentFromGridPosition(numericValue, gridLineName)) {
    47224728        value = m_valueList->current();
    47234729        if (value && value->id == CSSValueSpan) {
     
    47254731            m_valueList->next();
    47264732        }
    4727     } else if (value->id == CSSValueSpan) {
    4728         hasSeenSpanKeyword = true;
    4729         if (m_valueList->next())
    4730             parseIntegerOrStringFromGridPosition(numericValue, gridLineName);
    47314733    }
    47324734
     
    47344736    // the whole value list (including the opposite position).
    47354737    if (m_valueList->current() && !isForwardSlashOperator(m_valueList->current()))
    4736         return 0;
     4738        return nullptr;
    47374739
    47384740    // If we didn't parse anything, this is not a valid grid position.
    47394741    if (!hasSeenSpanKeyword && !gridLineName && !numericValue)
    4740         return 0;
     4742        return nullptr;
    47414743
    47424744    // Negative numbers are not allowed for span (but are for <integer>).
    47434745    if (hasSeenSpanKeyword && numericValue && numericValue->getIntValue() < 0)
    4744         return 0;
     4746        return nullptr;
     4747
     4748    // For the <custom-ident> case.
     4749    if (gridLineName && !numericValue && !hasSeenSpanKeyword)
     4750        return cssValuePool().createValue(gridLineName->getStringValue(), CSSPrimitiveValue::CSS_STRING);
    47454751
    47464752    RefPtr<CSSValueList> values = CSSValueList::createSpaceSeparated();
  • trunk/Source/WebCore/css/CSSParser.h

    r166157 r166712  
    522522
    523523#if ENABLE(CSS_GRID_LAYOUT)
    524     bool parseIntegerOrStringFromGridPosition(RefPtr<CSSPrimitiveValue>& numericValue, RefPtr<CSSPrimitiveValue>& gridLineName);
     524    bool parseIntegerOrCustomIdentFromGridPosition(RefPtr<CSSPrimitiveValue>& numericValue, RefPtr<CSSPrimitiveValue>& gridLineName);
    525525#endif
    526526
  • trunk/Source/WebCore/css/StyleResolver.cpp

    r166618 r166712  
    19421942{
    19431943    // We accept the specification's grammar:
    1944     // 'auto' | [ <integer> || <string> ] | [ span && [ <integer> || string ] ] | <ident>
     1944    // auto | <custom-ident> | [ <integer> && <custom-ident>? ] | [ span && [ <integer> || <custom-ident> ] ]
    19451945    if (value->isPrimitiveValue()) {
    19461946        CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
     
    19591959
    19601960    bool isSpanPosition = false;
    1961     // The specification makes the <integer> optional, in which case it default to '1'.
    1962     int gridLineNumber = 1;
     1961    int gridLineNumber = 0;
    19631962    String gridLineName;
    19641963
     
    19841983    ASSERT(!it.hasMore());
    19851984    if (isSpanPosition)
    1986         position.setSpanPosition(gridLineNumber, gridLineName);
     1985        position.setSpanPosition(gridLineNumber ? gridLineNumber : 1, gridLineName);
    19871986    else
    19881987        position.setExplicitPosition(gridLineNumber, gridLineName);
Note: See TracChangeset for help on using the changeset viewer.