Title: [160322] trunk
Revision
160322
Author
[email protected]
Date
2013-12-09 11:45:21 -0800 (Mon, 09 Dec 2013)

Log Message

Fix handling of 'inherit' and 'initial' for grid lines.
https://bugs.webkit.org/show_bug.cgi?id=125223

Patch by Peter Molnar <[email protected]> on 2013-12-09
Reviewed by Darin Adler.

'initial' and 'inherit' are always allowed values for CSS properties.
As the CSSParser handles them automatically, those 2 values were never
taken care of in StyleResolver, leading to crashes.

Source/WebCore:

Added tests cases for 'inherit' and 'initial' to the following tests:

fast/css-grid-layout/grid-item-column-row-get-set.html
fast/css-grid-layout/grid-item-end-after-get-set.html
fast/css-grid-layout/grid-item-start-before-get-set.html

Patch backported from Blink: https://src.chromium.org/viewvc/blink?revision=149257&view=revision

* css/StyleResolver.cpp:
(WebCore::StyleResolver::applyProperty):
* rendering/style/RenderStyle.h:
* rendering/style/StyleGridItemData.cpp:
(WebCore::StyleGridItemData::StyleGridItemData):

LayoutTests:

Patch backported from Blink: https://src.chromium.org/viewvc/blink?revision=149257&view=revision

* 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-start-before-get-set-expected.txt:
* fast/css-grid-layout/grid-item-start-before-get-set.html:
* fast/css-grid-layout/resources/grid-item-column-row-parsing-utils.js:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (160321 => 160322)


--- trunk/LayoutTests/ChangeLog	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/LayoutTests/ChangeLog	2013-12-09 19:45:21 UTC (rev 160322)
@@ -1,3 +1,24 @@
+2013-12-09  Peter Molnar  <[email protected]>
+
+        Fix handling of 'inherit' and 'initial' for grid lines.
+        https://bugs.webkit.org/show_bug.cgi?id=125223
+
+        Reviewed by Darin Adler.
+
+        'initial' and 'inherit' are always allowed values for CSS properties.
+        As the CSSParser handles them automatically, those 2 values were never
+        taken care of in StyleResolver, leading to crashes.
+
+        Patch backported from Blink: https://src.chromium.org/viewvc/blink?revision=149257&view=revision
+
+        * 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-start-before-get-set-expected.txt:
+        * fast/css-grid-layout/grid-item-start-before-get-set.html:
+        * fast/css-grid-layout/resources/grid-item-column-row-parsing-utils.js:
+
 2013-12-09  Ryosuke Niwa  <[email protected]>
 
         Add a test for style sharing if grandparents matches different rule chain and nth-last child

Modified: trunk/LayoutTests/fast/css-grid-layout/grid-item-column-row-get-set-expected.txt (160321 => 160322)


--- trunk/LayoutTests/fast/css-grid-layout/grid-item-column-row-get-set-expected.txt	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-item-column-row-get-set-expected.txt	2013-12-09 19:45:21 UTC (rev 160322)
@@ -227,6 +227,46 @@
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-row-start') is 'auto'
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-row-end') is 'auto'
 
+Test getting and setting 'initial' grid-column and grid-row through JS
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "1 / span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 3 / 5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 3"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 3 / 5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 3"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "auto / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
+
+Test getting and setting 'inherit' grid-column and grid-row through JS
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "1 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 1 / 7"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "7"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "6 / span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "6"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "1 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "6 / span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "6"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 1 / 7"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "7"
+
 Test getting and setting invalid grid-column and grid-row through JS
 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / auto"
 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"

Modified: trunk/LayoutTests/fast/css-grid-layout/grid-item-column-row-get-set.html (160321 => 160322)


--- trunk/LayoutTests/fast/css-grid-layout/grid-item-column-row-get-set.html	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-item-column-row-get-set.html	2013-12-09 19:45:21 UTC (rev 160322)
@@ -173,6 +173,16 @@
     shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-row-end')", "'auto'");
 
     debug("");
+    debug("Test getting and setting 'initial' grid-column and grid-row through JS");
+    testColumnRowInitialJSParsing();
+
+    debug("");
+    debug("Test getting and setting 'inherit' grid-column and grid-row through JS");
+    testColumnRowInheritJSParsing("1 / auto", "inherit");
+    testColumnRowInheritJSParsing("inherit", "1 / auto");
+    testColumnRowInheritJSParsing("inherit", "inherit");
+
+    debug("");
     debug("Test getting and setting invalid grid-column and grid-row through JS");
     testColumnRowInvalidJSParsing("4 5", "5 8");
     testColumnRowInvalidJSParsing("4 /", "5 /");

Modified: trunk/LayoutTests/fast/css-grid-layout/grid-item-end-after-get-set-expected.txt (160321 => 160322)


--- trunk/LayoutTests/fast/css-grid-layout/grid-item-end-after-get-set-expected.txt	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-item-end-after-get-set-expected.txt	2013-12-09 19:45:21 UTC (rev 160322)
@@ -103,6 +103,46 @@
 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
 
+Test setting grid-start and grid-before to 'inherit' through JS
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "auto / 18"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "18"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "auto / 7"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "7"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "auto / 7"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "7"
+
+Test setting grid-start and grid-before to 'initial' through JS
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "1 / span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 3 / 5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 3"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "1 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 3 / 5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 3"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "1 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 3 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 3"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
+
 Test setting grid-column-end and grid-row-end back to 'auto' through JS
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-column-end') is '18'
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-column') is 'auto / 18'

Modified: trunk/LayoutTests/fast/css-grid-layout/grid-item-end-after-get-set.html (160321 => 160322)


--- trunk/LayoutTests/fast/css-grid-layout/grid-item-end-after-get-set.html	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-item-end-after-get-set.html	2013-12-09 19:45:21 UTC (rev 160322)
@@ -89,6 +89,16 @@
     testColumnEndRowEndJSParsing("secondArea", "nonExistentArea", "secondArea", "auto");
 
     debug("");
+    debug("Test setting grid-start and grid-before to 'inherit' through JS");
+    testEndAfterInheritJSParsing("inherit", "18");
+    testEndAfterInheritJSParsing("2", "inherit");
+    testEndAfterInheritJSParsing("inherit", "inherit");
+
+    debug("");
+    debug("Test setting grid-start and grid-before to 'initial' through JS");
+    testEndAfterInitialJSParsing();
+
+    debug("");
     debug("Test setting grid-column-end and grid-row-end back to 'auto' through JS");
     element.style.webkitGridColumnEnd = "18";
     element.style.webkitGridRowEnd = "66";

Modified: trunk/LayoutTests/fast/css-grid-layout/grid-item-start-before-get-set-expected.txt (160321 => 160322)


--- trunk/LayoutTests/fast/css-grid-layout/grid-item-start-before-get-set-expected.txt	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-item-start-before-get-set-expected.txt	2013-12-09 19:45:21 UTC (rev 160322)
@@ -101,6 +101,46 @@
 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
 PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
 
+Test setting grid-start and grid-before to 'inherit' through JS
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "6 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "6"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "18 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "18"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "2 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 1 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "6 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "6"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 1 / auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "auto"
+
+Test setting grid-start and grid-before to 'initial' through JS
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "1 / span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "1"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 3 / 5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 3"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "span 3 / 5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "span 3"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column') is "auto / span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-column-end') is "span 2"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row') is "auto / 5"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-start') is "auto"
+PASS getComputedStyle(gridItem, '').getPropertyValue('-webkit-grid-row-end') is "5"
+
 Test setting grid-column-start and grid-row-start back to 'auto' through JS
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-column-start') is '18'
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-column') is '18 / auto'

Modified: trunk/LayoutTests/fast/css-grid-layout/grid-item-start-before-get-set.html (160321 => 160322)


--- trunk/LayoutTests/fast/css-grid-layout/grid-item-start-before-get-set.html	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-item-start-before-get-set.html	2013-12-09 19:45:21 UTC (rev 160322)
@@ -94,6 +94,16 @@
     testColumnStartRowStartJSParsing("secondArea", "nonExistentArea", "secondArea", "auto");
 
     debug("");
+    debug("Test setting grid-start and grid-before to 'inherit' through JS");
+    testStartBeforeInheritJSParsing("inherit", "18");
+    testStartBeforeInheritJSParsing("2", "inherit");
+    testStartBeforeInheritJSParsing("inherit", "inherit");
+
+    debug("");
+    debug("Test setting grid-start and grid-before to 'initial' through JS");
+    testStartBeforeInitialJSParsing();
+
+    debug("");
     debug("Test setting grid-column-start and grid-row-start back to 'auto' through JS");
     element.style.webkitGridColumnStart = "18";
     element.style.webkitGridRowStart = "66";

Modified: trunk/LayoutTests/fast/css-grid-layout/resources/grid-item-column-row-parsing-utils.js (160321 => 160322)


--- trunk/LayoutTests/fast/css-grid-layout/resources/grid-item-column-row-parsing-utils.js	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/LayoutTests/fast/css-grid-layout/resources/grid-item-column-row-parsing-utils.js	2013-12-09 19:45:21 UTC (rev 160322)
@@ -88,4 +88,122 @@
     gridElement.removeChild(gridItem);
 }
 
+var placeholderParentStartValueForInherit = "6";
+var placeholderParentEndValueForInherit = "span 2";
+var placeholderParentColumnValueForInherit = placeholderParentStartValueForInherit + " / " + placeholderParentEndValueForInherit;
+var placeholderParentBeforeValueForInherit = "span 1";
+var placeholderParentAfterValueForInherit = "7";
+var placeholderParentRowValueForInherit = placeholderParentBeforeValueForInherit + " / " + placeholderParentAfterValueForInherit;
+
+var placeholderStartValueForInitial = "1";
+var placeholderEndValueForInitial = "span 2";
+var placeholderColumnValueForInitial = placeholderStartValueForInitial + " / " + placeholderEndValueForInitial;
+var placeholderBeforeValueForInitial = "span 3";
+var placeholderAfterValueForInitial = "5";
+var placeholderRowValueForInitial = placeholderBeforeValueForInitial + " / " + placeholderAfterValueForInitial;
+
+function setupInheritTest()
+{
+    var parentElement = document.createElement("div");
+    document.body.appendChild(parentElement);
+    parentElement.style.webkitGridColumn = placeholderParentColumnValueForInherit;
+    parentElement.style.webkitGridRow = placeholderParentRowValueForInherit;
+
+    var gridItem = document.createElement("div");
+    parentElement.appendChild(gridItem);
+    return parentElement;
+}
+
+function setupInitialTest()
+{
+    var gridItem = document.createElement("div");
+    document.body.appendChild(gridItem);
+    gridItem.style.webkitGridColumn = placeholderColumnValueForInitial;
+    gridItem.style.webkitGridRow = placeholderRowValueForInitial;
+
+    checkColumnRowValues(gridItem, placeholderColumnValueForInitial, placeholderRowValueForInitial);
+    return gridItem;
+}
+
+window.testColumnRowInheritJSParsing = function(columnValue, rowValue)
+{
+    var parentElement = setupInheritTest();
+    var gridItem = parentElement.firstChild;
+    gridItem.style.webkitGridColumn = columnValue;
+    gridItem.style.webkitGridRow = rowValue;
+
+    checkColumnRowValues(gridItem, columnValue !== "inherit" ? columnValue : placeholderParentColumnValueForInherit, rowValue !== "inherit" ? rowValue : placeholderParentRowValueForInherit);
+
+    document.body.removeChild(parentElement);
+}
+
+window.testStartBeforeInheritJSParsing = function(startValue, beforeValue)
+{
+    var parentElement = setupInheritTest();
+    var gridItem = parentElement.firstChild;
+    gridItem.style.webkitGridColumnStart = startValue;
+    gridItem.style.webkitGridRowStart = beforeValue;
+
+    // Initial value is 'auto' but we shouldn't touch the opposite grid line.
+    var columnValueForInherit = (startValue !== "inherit" ? startValue : placeholderParentStartValueForInherit) + " / auto";
+    var rowValueForInherit = (beforeValue !== "inherit" ? beforeValue : placeholderParentBeforeValueForInherit) + " / auto";
+    checkColumnRowValues(parentElement.firstChild, columnValueForInherit, rowValueForInherit);
+
+    document.body.removeChild(parentElement);
+}
+
+window.testEndAfterInheritJSParsing = function(endValue, afterValue)
+{
+    var parentElement = setupInheritTest();
+    var gridItem = parentElement.firstChild;
+    gridItem.style.webkitGridColumnEnd = endValue;
+    gridItem.style.webkitGridRowEnd = afterValue;
+
+    // Initial value is 'auto' but we shouldn't touch the opposite grid line.
+    var columnValueForInherit = "auto / " + (endValue !== "inherit" ? endValue : placeholderParentEndValueForInherit);
+    var rowValueForInherit = "auto / " + (afterValue !== "inherit" ? afterValue : placeholderParentAfterValueForInherit);
+    checkColumnRowValues(parentElement.firstChild, columnValueForInherit, rowValueForInherit);
+
+    document.body.removeChild(parentElement);
+}
+
+window.testColumnRowInitialJSParsing = function()
+{
+    var gridItem = setupInitialTest();
+
+    gridItem.style.webkitGridColumn = "initial";
+    checkColumnRowValues(gridItem, "auto / auto", placeholderRowValueForInitial);
+
+    gridItem.style.webkitGridRow = "initial";
+    checkColumnRowValues(gridItem, "auto / auto", "auto / auto");
+
+    document.body.removeChild(gridItem);
+}
+
+window.testStartBeforeInitialJSParsing = function()
+{
+    var gridItem = setupInitialTest();
+
+    gridItem.style.webkitGridColumnStart = "initial";
+    checkColumnRowValues(gridItem, "auto / " + placeholderEndValueForInitial, placeholderRowValueForInitial);
+
+    gridItem.style.webkitGridRowStart = "initial";
+    checkColumnRowValues(gridItem,  "auto / " + placeholderEndValueForInitial, "auto / " + placeholderAfterValueForInitial);
+
+    document.body.removeChild(gridItem);
+}
+
+window.testEndAfterInitialJSParsing = function()
+{
+    var gridItem = setupInitialTest();
+
+    gridItem.style.webkitGridColumnEnd = "initial";
+    checkColumnRowValues(gridItem, placeholderStartValueForInitial + " / auto", placeholderRowValueForInitial);
+
+    gridItem.style.webkitGridRowEnd = "initial";
+    checkColumnRowValues(gridItem, placeholderStartValueForInitial + " / auto", placeholderBeforeValueForInitial + " / auto");
+
+    document.body.removeChild(gridItem);
+}
+
 })();

Modified: trunk/Source/WebCore/ChangeLog (160321 => 160322)


--- trunk/Source/WebCore/ChangeLog	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/Source/WebCore/ChangeLog	2013-12-09 19:45:21 UTC (rev 160322)
@@ -1,3 +1,28 @@
+2013-12-09  Peter Molnar  <[email protected]>
+
+        Fix handling of 'inherit' and 'initial' for grid lines.
+        https://bugs.webkit.org/show_bug.cgi?id=125223
+
+        Reviewed by Darin Adler.
+
+        'initial' and 'inherit' are always allowed values for CSS properties.
+        As the CSSParser handles them automatically, those 2 values were never
+        taken care of in StyleResolver, leading to crashes.
+
+        Added tests cases for 'inherit' and 'initial' to the following tests:
+
+        fast/css-grid-layout/grid-item-column-row-get-set.html
+        fast/css-grid-layout/grid-item-end-after-get-set.html
+        fast/css-grid-layout/grid-item-start-before-get-set.html
+
+        Patch backported from Blink: https://src.chromium.org/viewvc/blink?revision=149257&view=revision
+
+        * css/StyleResolver.cpp:
+        (WebCore::StyleResolver::applyProperty):
+        * rendering/style/RenderStyle.h:
+        * rendering/style/StyleGridItemData.cpp:
+        (WebCore::StyleGridItemData::StyleGridItemData):
+
 2013-12-09  Joseph Pecoraro  <[email protected]>
 
         Web Inspector: Inspector.json and CodeGenerator tweaks

Modified: trunk/Source/WebCore/css/StyleResolver.cpp (160321 => 160322)


--- trunk/Source/WebCore/css/StyleResolver.cpp	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/Source/WebCore/css/StyleResolver.cpp	2013-12-09 19:45:21 UTC (rev 160322)
@@ -2711,6 +2711,7 @@
     }
 
     case CSSPropertyWebkitGridColumnStart: {
+        HANDLE_INHERIT_AND_INITIAL(gridItemColumnStart, GridItemColumnStart);
         GridPosition columnStartPosition;
         if (!createGridPosition(value, columnStartPosition))
             return;
@@ -2718,6 +2719,7 @@
         return;
     }
     case CSSPropertyWebkitGridColumnEnd: {
+        HANDLE_INHERIT_AND_INITIAL(gridItemColumnEnd, GridItemColumnEnd);
         GridPosition columnEndPosition;
         if (!createGridPosition(value, columnEndPosition))
             return;
@@ -2726,6 +2728,7 @@
     }
 
     case CSSPropertyWebkitGridRowStart: {
+        HANDLE_INHERIT_AND_INITIAL(gridItemRowStart, GridItemRowStart);
         GridPosition rowStartPosition;
         if (!createGridPosition(value, rowStartPosition))
             return;
@@ -2733,6 +2736,7 @@
         return;
     }
     case CSSPropertyWebkitGridRowEnd: {
+        HANDLE_INHERIT_AND_INITIAL(gridItemRowEnd, GridItemRowEnd);
         GridPosition rowEndPosition;
         if (!createGridPosition(value, rowEndPosition))
             return;

Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (160321 => 160322)


--- trunk/Source/WebCore/rendering/style/RenderStyle.h	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h	2013-12-09 19:45:21 UTC (rev 160322)
@@ -1794,7 +1794,10 @@
     static NamedGridLinesMap initialNamedGridRowLines() { return NamedGridLinesMap(); }
 
     // 'auto' is the default.
-    static GridPosition initialGridPosition() { return GridPosition(); }
+    static GridPosition initialGridItemColumnStart() { return GridPosition(); }
+    static GridPosition initialGridItemColumnEnd() { return GridPosition(); }
+    static GridPosition initialGridItemRowStart() { return GridPosition(); }
+    static GridPosition initialGridItemRowEnd() { return GridPosition(); }
 
     static unsigned initialTabSize() { return 8; }
 

Modified: trunk/Source/WebCore/rendering/style/StyleGridItemData.cpp (160321 => 160322)


--- trunk/Source/WebCore/rendering/style/StyleGridItemData.cpp	2013-12-09 19:30:40 UTC (rev 160321)
+++ trunk/Source/WebCore/rendering/style/StyleGridItemData.cpp	2013-12-09 19:45:21 UTC (rev 160322)
@@ -35,10 +35,10 @@
 namespace WebCore {
 
 StyleGridItemData::StyleGridItemData()
-    : m_gridColumnStart(RenderStyle::initialGridPosition())
-    , m_gridColumnEnd(RenderStyle::initialGridPosition())
-    , m_gridRowStart(RenderStyle::initialGridPosition())
-    , m_gridRowEnd(RenderStyle::initialGridPosition())
+    : m_gridColumnStart(RenderStyle::initialGridItemColumnStart())
+    , m_gridColumnEnd(RenderStyle::initialGridItemColumnEnd())
+    , m_gridRowStart(RenderStyle::initialGridItemRowStart())
+    , m_gridRowEnd(RenderStyle::initialGridItemRowEnd())
 {
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to