Diff
Modified: trunk/LayoutTests/ChangeLog (291243 => 291244)
--- trunk/LayoutTests/ChangeLog 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/LayoutTests/ChangeLog 2022-03-14 19:18:11 UTC (rev 291244)
@@ -1,3 +1,21 @@
+2022-03-14 Oriol Brufau <obru...@igalia.com>
+
+ [css] Implement 'text-decoration' as a shorthand.
+ https://bugs.webkit.org/show_bug.cgi?id=237175
+
+ Reviewed by Darin Adler.
+
+ Update tests to take into account that 'text-decoration' is a shorthand.
+
+ * fast/css/getComputedStyle/computed-style-expected.txt:
+ * fast/css/getComputedStyle/computed-style-without-renderer-expected.txt:
+ * fast/css/getComputedStyle/getComputedStyle-text-decoration-expected.txt:
+ * fast/css/getComputedStyle/getComputedStyle-text-decoration.html:
+ * fast/css/getComputedStyle/resources/property-names.js:
+ * fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand-expected.txt:
+ * fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand.html:
+ * svg/css/getComputedStyle-basic-expected.txt:
+
2022-03-14 Antoine Quint <grao...@webkit.org>
[model] model-element/model-element-camera.html fails due to `promise_rejects` being undefined
Modified: trunk/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt (291243 => 291244)
--- trunk/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt 2022-03-14 19:18:11 UTC (rev 291244)
@@ -173,7 +173,10 @@
text-align: start;
text-anchor: start;
text-combine-upright: none;
-text-decoration: none;
+text-decoration-color: rgb(0, 0, 0);
+text-decoration-line: none;
+text-decoration-style: solid;
+text-decoration-thickness: auto;
text-emphasis-color: rgb(0, 0, 0);
text-emphasis-position: over right;
text-emphasis-style: none;
Modified: trunk/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt (291243 => 291244)
--- trunk/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt 2022-03-14 19:18:11 UTC (rev 291244)
@@ -172,7 +172,10 @@
text-align: start
text-anchor: start
text-combine-upright: none
-text-decoration: none
+text-decoration-color: rgb(0, 0, 0)
+text-decoration-line: none
+text-decoration-style: solid
+text-decoration-thickness: auto
text-emphasis-color: rgb(0, 0, 0)
text-emphasis-position: over right
text-emphasis-style: none
Modified: trunk/LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-decoration-expected.txt (291243 => 291244)
--- trunk/LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-decoration-expected.txt 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-decoration-expected.txt 2022-03-14 19:18:11 UTC (rev 291244)
@@ -4,94 +4,205 @@
Initial value:
+PASS e.style.textDecoration is ''
+PASS e.style.getPropertyValue('text-decoration') is ''
PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is ''
+PASS e.style.getPropertyValue('text-decoration-line') is ''
+PASS e.style.getPropertyCSSValue('text-decoration-line') is null
PASS computedStyle.textDecoration is 'none'
+PASS computedStyle.getPropertyValue('text-decoration') is 'none'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none'
+PASS computedStyle.textDecorationLine is 'none'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'none'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none'
Initial value (explicit):
PASS e.style.textDecoration is 'initial'
-PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValue]'
-PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'initial'
+PASS e.style.getPropertyValue('text-decoration') is 'initial'
+PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is 'initial'
+PASS e.style.getPropertyValue('text-decoration-line') is 'initial'
+PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValue]'
+PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'initial'
PASS computedStyle.textDecoration is 'none'
+PASS computedStyle.getPropertyValue('text-decoration') is 'none'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none'
+PASS computedStyle.textDecorationLine is 'none'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'none'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none'
Value 'none':
PASS e.style.textDecoration is 'none'
-PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]'
-PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'none'
+PASS e.style.getPropertyValue('text-decoration') is 'none'
+PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is 'none'
+PASS e.style.getPropertyValue('text-decoration-line') is 'none'
+PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]'
+PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'none'
PASS computedStyle.textDecoration is 'none'
+PASS computedStyle.getPropertyValue('text-decoration') is 'none'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none'
+PASS computedStyle.textDecorationLine is 'none'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'none'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none'
Value 'underline':
PASS e.style.textDecoration is 'underline'
-PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
-PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'underline'
+PASS e.style.getPropertyValue('text-decoration') is 'underline'
+PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is 'underline'
+PASS e.style.getPropertyValue('text-decoration-line') is 'underline'
+PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'underline'
PASS computedStyle.textDecoration is 'underline'
+PASS computedStyle.getPropertyValue('text-decoration') is 'underline'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'underline'
+PASS computedStyle.textDecorationLine is 'underline'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'underline'
Value 'overline':
PASS e.style.textDecoration is 'overline'
-PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
-PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'overline'
+PASS e.style.getPropertyValue('text-decoration') is 'overline'
+PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is 'overline'
+PASS e.style.getPropertyValue('text-decoration-line') is 'overline'
+PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'overline'
PASS computedStyle.textDecoration is 'overline'
+PASS computedStyle.getPropertyValue('text-decoration') is 'overline'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'overline'
+PASS computedStyle.textDecorationLine is 'overline'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'overline'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'overline'
Value 'line-through':
PASS e.style.textDecoration is 'line-through'
-PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
-PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'line-through'
+PASS e.style.getPropertyValue('text-decoration') is 'line-through'
+PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is 'line-through'
+PASS e.style.getPropertyValue('text-decoration-line') is 'line-through'
+PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'line-through'
PASS computedStyle.textDecoration is 'line-through'
+PASS computedStyle.getPropertyValue('text-decoration') is 'line-through'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'line-through'
+PASS computedStyle.textDecorationLine is 'line-through'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'line-through'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'line-through'
Value 'underline overline line-through':
PASS e.style.textDecoration is 'underline overline line-through'
-PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
-PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'underline overline line-through'
+PASS e.style.getPropertyValue('text-decoration') is 'underline overline line-through'
+PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is 'underline overline line-through'
+PASS e.style.getPropertyValue('text-decoration-line') is 'underline overline line-through'
+PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'underline overline line-through'
PASS computedStyle.textDecoration is 'underline overline line-through'
+PASS computedStyle.getPropertyValue('text-decoration') is 'underline overline line-through'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'underline overline line-through'
+PASS computedStyle.textDecorationLine is 'underline overline line-through'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline overline line-through'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'underline overline line-through'
Value 'blink' (valid but ignored):
PASS e.style.textDecoration is 'blink'
-PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
-PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'blink'
+PASS e.style.getPropertyValue('text-decoration') is 'blink'
+PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is 'blink'
+PASS e.style.getPropertyValue('text-decoration-line') is 'blink'
+PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'blink'
PASS computedStyle.textDecoration is 'none'
+PASS computedStyle.getPropertyValue('text-decoration') is 'none'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none'
+PASS computedStyle.textDecorationLine is 'none'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'none'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none'
Value '':
+PASS e.style.textDecoration is ''
+PASS e.style.getPropertyValue('text-decoration') is ''
PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is ''
+PASS e.style.getPropertyValue('text-decoration-line') is ''
+PASS e.style.getPropertyCSSValue('text-decoration-line') is null
PASS computedStyle.textDecoration is 'none'
+PASS computedStyle.getPropertyValue('text-decoration') is 'none'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none'
+PASS computedStyle.textDecorationLine is 'none'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'none'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none'
Parent gets 'underline' value:
PASS e.style.textDecoration is 'underline'
-PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
-PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'underline'
+PASS e.style.getPropertyValue('text-decoration') is 'underline'
+PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is 'underline'
+PASS e.style.getPropertyValue('text-decoration-line') is 'underline'
+PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'underline'
PASS computedStyle.textDecoration is 'underline'
+PASS computedStyle.getPropertyValue('text-decoration') is 'underline'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'underline'
+PASS computedStyle.textDecorationLine is 'underline'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'underline'
Ancestor should explicitly inherit value from parent when 'inherit' value is used:
PASS e.style.textDecoration is 'inherit'
-PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValue]'
-PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'inherit'
+PASS e.style.getPropertyValue('text-decoration') is 'inherit'
+PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is 'inherit'
+PASS e.style.getPropertyValue('text-decoration-line') is 'inherit'
+PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValue]'
+PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'inherit'
PASS computedStyle.textDecoration is 'underline'
+PASS computedStyle.getPropertyValue('text-decoration') is 'underline'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'underline'
+PASS computedStyle.textDecorationLine is 'underline'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'underline'
Ancestor should not implicitly inherit value from parent (i.e. when value is void):
+PASS e.style.textDecoration is ''
+PASS e.style.getPropertyValue('text-decoration') is ''
PASS e.style.getPropertyCSSValue('text-decoration') is null
+PASS e.style.textDecorationLine is ''
+PASS e.style.getPropertyValue('text-decoration-line') is ''
+PASS e.style.getPropertyCSSValue('text-decoration-line') is null
PASS computedStyle.textDecoration is 'none'
+PASS computedStyle.getPropertyValue('text-decoration') is 'none'
PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]'
PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none'
+PASS computedStyle.textDecorationLine is 'none'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'none'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]'
+PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none'
PASS successfullyParsed is true
Modified: trunk/LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-decoration.html (291243 => 291244)
--- trunk/LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-decoration.html 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-decoration.html 2022-03-14 19:18:11 UTC (rev 291244)
@@ -5,22 +5,41 @@
</head>
<body>
<script>
-function testElementStyle(propertyJS, propertyCSS, type, value)
+function testElementStyle(type, value)
{
if (type != null) {
- shouldBe("e.style." + propertyJS, "'" + value + "'");
- shouldBe("e.style.getPropertyCSSValue('" + propertyCSS + "').toString()", "'" + type + "'");
- shouldBe("e.style.getPropertyCSSValue('" + propertyCSS + "').cssText", "'" + value + "'");
- } else
- shouldBeNull("e.style.getPropertyCSSValue('" + propertyCSS + "')");
+ shouldBe("e.style.textDecoration", "'" + value + "'");
+ shouldBe("e.style.getPropertyValue('text-decoration')", "'" + value + "'");
+ shouldBeNull("e.style.getPropertyCSSValue('text-decoration')");
+
+ shouldBe("e.style.textDecorationLine", "'" + value + "'");
+ shouldBe("e.style.getPropertyValue('text-decoration-line')", "'" + value + "'");
+ shouldBe("e.style.getPropertyCSSValue('text-decoration-line').toString()", "'" + type + "'");
+ shouldBe("e.style.getPropertyCSSValue('text-decoration-line').cssText", "'" + value + "'");
+ } else {
+ shouldBe("e.style.textDecoration", "''");
+ shouldBe("e.style.getPropertyValue('text-decoration')", "''");
+ shouldBeNull("e.style.getPropertyCSSValue('text-decoration')");
+
+ shouldBe("e.style.textDecorationLine", "''");
+ shouldBe("e.style.getPropertyValue('text-decoration-line')", "''");
+ shouldBeNull("e.style.getPropertyCSSValue('text-decoration-line')");
+ }
}
-function testComputedStyle(propertyJS, propertyCSS, type, value)
+function testComputedStyle(type, value)
{
computedStyle = window.getComputedStyle(e, null);
- shouldBe("computedStyle." + propertyJS, "'" + value + "'");
- shouldBe("computedStyle.getPropertyCSSValue('" + propertyCSS + "').toString()", "'" + type + "'");
- shouldBe("computedStyle.getPropertyCSSValue('" + propertyCSS + "').cssText", "'" + value + "'");
+
+ shouldBe("computedStyle.textDecoration", "'" + value + "'");
+ shouldBe("computedStyle.getPropertyValue('text-decoration')", "'" + value + "'");
+ shouldBe("computedStyle.getPropertyCSSValue('text-decoration').toString()", "'" + type + "'");
+ shouldBe("computedStyle.getPropertyCSSValue('text-decoration').cssText", "'" + value + "'");
+
+ shouldBe("computedStyle.textDecorationLine", "'" + value + "'");
+ shouldBe("computedStyle.getPropertyValue('text-decoration-line')", "'" + value + "'");
+ shouldBe("computedStyle.getPropertyCSSValue('text-decoration-line').toString()", "'" + type + "'");
+ shouldBe("computedStyle.getPropertyCSSValue('text-decoration-line').cssText", "'" + value + "'");
}
description("Test to make sure text-decoration property returns values properly.")
@@ -32,75 +51,75 @@
testContainer.innerHTML = '<div id="test">hello world</div>';
debug("Initial value:");
e = document.getElementById('test');
-testElementStyle("textDecoration", "text-decoration", null, '');
-testComputedStyle("textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");
+testElementStyle(null, '');
+testComputedStyle("[object CSSPrimitiveValue]", "none");
debug('');
debug("Initial value (explicit):");
e.style.textDecoration = 'initial';
-testElementStyle("textDecoration", "text-decoration", "[object CSSValue]", "initial");
-testComputedStyle("textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");
+testElementStyle("[object CSSValue]", "initial");
+testComputedStyle("[object CSSPrimitiveValue]", "none");
debug('');
debug("Value 'none':");
e.style.textDecoration = 'none';
-testElementStyle("textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");
-testComputedStyle("textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");
+testElementStyle("[object CSSPrimitiveValue]", "none");
+testComputedStyle("[object CSSPrimitiveValue]", "none");
debug('');
debug("Value 'underline':");
e.style.textDecoration = 'underline';
-testElementStyle("textDecoration", "text-decoration", "[object CSSValueList]", "underline");
-testComputedStyle("textDecoration", "text-decoration", "[object CSSValueList]", "underline");
+testElementStyle("[object CSSValueList]", "underline");
+testComputedStyle("[object CSSValueList]", "underline");
debug('');
debug("Value 'overline':");
e.style.textDecoration = 'overline';
-testElementStyle("textDecoration", "text-decoration", "[object CSSValueList]", "overline");
-testComputedStyle("textDecoration", "text-decoration", "[object CSSValueList]", "overline");
+testElementStyle("[object CSSValueList]", "overline");
+testComputedStyle("[object CSSValueList]", "overline");
debug('');
debug("Value 'line-through':");
e.style.textDecoration = 'line-through';
-testElementStyle("textDecoration", "text-decoration", "[object CSSValueList]", "line-through");
-testComputedStyle("textDecoration", "text-decoration", "[object CSSValueList]", "line-through");
+testElementStyle("[object CSSValueList]", "line-through");
+testComputedStyle("[object CSSValueList]", "line-through");
debug('');
debug("Value 'underline overline line-through':");
e.style.textDecoration = 'underline overline line-through';
-testElementStyle("textDecoration", "text-decoration", "[object CSSValueList]", "underline overline line-through");
-testComputedStyle("textDecoration", "text-decoration", "[object CSSValueList]", "underline overline line-through");
+testElementStyle("[object CSSValueList]", "underline overline line-through");
+testComputedStyle("[object CSSValueList]", "underline overline line-through");
debug('');
debug("Value 'blink' (valid but ignored):");
e.style.textDecoration = 'blink';
-testElementStyle("textDecoration", "text-decoration", "[object CSSValueList]", "blink");
-testComputedStyle("textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");
+testElementStyle("[object CSSValueList]", "blink");
+testComputedStyle("[object CSSPrimitiveValue]", "none");
debug('');
debug("Value '':");
e.style.textDecoration = '';
-testElementStyle("textDecoration", "text-decoration", null, '');
-testComputedStyle("textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");
+testElementStyle(null, '');
+testComputedStyle("[object CSSPrimitiveValue]", "none");
debug('');
testContainer.innerHTML = '<div id="test-parent" style="text-decoration: underline;">hello <span id="test-ancestor" style="text-decoration: inherit;">world</span></div>';
debug("Parent gets 'underline' value:");
e = document.getElementById('test-parent');
-testElementStyle("textDecoration", "text-decoration", "[object CSSValueList]", "underline");
-testComputedStyle("textDecoration", "text-decoration", "[object CSSValueList]", "underline");
+testElementStyle("[object CSSValueList]", "underline");
+testComputedStyle("[object CSSValueList]", "underline");
debug('');
debug("Ancestor should explicitly inherit value from parent when 'inherit' value is used:");
e = document.getElementById('test-ancestor');
-testElementStyle("textDecoration", "text-decoration", "[object CSSValue]", "inherit");
-testComputedStyle("textDecoration", "text-decoration", "[object CSSValueList]", "underline");
+testElementStyle("[object CSSValue]", "inherit");
+testComputedStyle("[object CSSValueList]", "underline");
debug('');
debug("Ancestor should not implicitly inherit value from parent (i.e. when value is void):");
e.style.textDecoration = '';
-testElementStyle("textDecoration", "text-decoration", null, '');
-testComputedStyle("textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");
+testElementStyle(null, '');
+testComputedStyle("[object CSSPrimitiveValue]", "none");
debug('');
document.body.removeChild(testContainer);
Modified: trunk/LayoutTests/fast/css/getComputedStyle/resources/property-names.js (291243 => 291244)
--- trunk/LayoutTests/fast/css/getComputedStyle/resources/property-names.js 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/LayoutTests/fast/css/getComputedStyle/resources/property-names.js 2022-03-14 19:18:11 UTC (rev 291244)
@@ -257,7 +257,10 @@
"table-layout": true,
"text-align": true,
"text-anchor": true,
- "text-decoration": true,
+ "text-decoration-color": true,
+ "text-decoration-line": true,
+ "text-decoration-style": true,
+ "text-decoration-thickness": true,
"text-indent": true,
"text-overflow": true,
"text-rendering": true,
Modified: trunk/LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand-expected.txt (291243 => 291244)
--- trunk/LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand-expected.txt 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand-expected.txt 2022-03-14 19:18:11 UTC (rev 291244)
@@ -5,29 +5,81 @@
Initial values:
PASS e.style.getPropertyCSSValue('-webkit-text-decoration') is null
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration').cssText is 'none solid rgb(0, 0, 0)'
-PASS checkComputedStyleValue() is true
+PASS computedStyle.getPropertyValue('-webkit-text-decoration') is 'none solid rgb(0, 0, 0)'
+PASS checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration') is true
CSS2.1 backwards compatibility ("-webkit-text-decoration: underline overline line-through blink;"):
-PASS e.style.getPropertyCSSValue('-webkit-text-decoration-line').cssText is 'underline overline line-through blink'
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration-line').cssText is 'underline overline line-through'
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration').cssText is 'underline overline line-through solid rgb(0, 0, 0)'
-PASS checkComputedStyleValue() is true
+PASS e.style.getPropertyValue('-webkit-text-decoration-line') is 'underline overline line-through blink'
+PASS computedStyle.getPropertyValue('-webkit-text-decoration-line') is 'underline overline line-through'
+PASS computedStyle.getPropertyValue('-webkit-text-decoration') is 'underline overline line-through solid rgb(0, 0, 0)'
+PASS checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration') is true
CSS3 Shorthand ("-webkit-text-decoration: underline overline line-through blink dashed red;"):
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration').cssText is 'underline overline line-through dashed rgb(255, 0, 0)'
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration-line').cssText is 'underline overline line-through'
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration-style').cssText is 'dashed'
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration-color').cssText is 'rgb(255, 0, 0)'
-PASS checkComputedStyleValue() is true
+PASS computedStyle.getPropertyValue('-webkit-text-decoration') is 'underline overline line-through dashed rgb(255, 0, 0)'
+PASS computedStyle.getPropertyValue('-webkit-text-decoration-line') is 'underline overline line-through'
+PASS computedStyle.getPropertyValue('-webkit-text-decoration-style') is 'dashed'
+PASS computedStyle.getPropertyValue('-webkit-text-decoration-color') is 'rgb(255, 0, 0)'
+PASS checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration') is true
Omitting text decoration line resets to its initial value "none" ("-webkit-text-decoration: navy dotted;"):
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration').cssText is 'none dotted rgb(0, 0, 128)'
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration-line').cssText is 'none'
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration-style').cssText is 'dotted'
-PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration-color').cssText is 'rgb(0, 0, 128)'
-PASS checkComputedStyleValue() is true
+PASS computedStyle.getPropertyValue('-webkit-text-decoration') is 'none dotted rgb(0, 0, 128)'
+PASS computedStyle.getPropertyValue('-webkit-text-decoration-line') is 'none'
+PASS computedStyle.getPropertyValue('-webkit-text-decoration-style') is 'dotted'
+PASS computedStyle.getPropertyValue('-webkit-text-decoration-color') is 'rgb(0, 0, 128)'
+PASS checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration') is true
+CSS2.1 backwards compatibility of non-prefixed shorthand ("text-decoration: underline overline line-through blink;"):
+PASS e.style.getPropertyValue('text-decoration') is 'underline overline line-through blink'
+PASS e.style.getPropertyValue('text-decoration-line') is 'underline overline line-through blink'
+PASS e.style.getPropertyValue('text-decoration-thickness') is ''
+PASS e.style.getPropertyValue('text-decoration-style') is ''
+PASS e.style.getPropertyValue('text-decoration-color') is ''
+PASS computedStyle.getPropertyValue('text-decoration') is 'underline overline line-through'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline overline line-through'
+PASS computedStyle.getPropertyValue('text-decoration-thickness') is 'auto'
+PASS computedStyle.getPropertyValue('text-decoration-style') is 'solid'
+PASS computedStyle.getPropertyValue('text-decoration-color') is 'rgb(0, 0, 0)'
+PASS checkComputedStyleValue('textDecoration', 'text-decoration') is true
+
+Setting CSS3 longhands to initial values ("text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;"):
+PASS e.style.getPropertyValue('text-decoration') is 'none'
+PASS e.style.getPropertyValue('text-decoration-line') is 'none'
+PASS e.style.getPropertyValue('text-decoration-thickness') is 'auto'
+PASS e.style.getPropertyValue('text-decoration-style') is 'solid'
+PASS e.style.getPropertyValue('text-decoration-color') is 'currentcolor'
+PASS computedStyle.getPropertyValue('text-decoration') is 'none'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'none'
+PASS computedStyle.getPropertyValue('text-decoration-thickness') is 'auto'
+PASS computedStyle.getPropertyValue('text-decoration-style') is 'solid'
+PASS computedStyle.getPropertyValue('text-decoration-color') is 'rgb(0, 0, 0)'
+PASS checkComputedStyleValue('textDecoration', 'text-decoration') is true
+
+Setting CSS3 longhands to values backwards compatibile with CSS2.1 ("text-decoration-line: underline overline line-through blink; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;"):
+PASS e.style.getPropertyValue('text-decoration') is 'underline overline line-through blink'
+PASS e.style.getPropertyValue('text-decoration-line') is 'underline overline line-through blink'
+PASS e.style.getPropertyValue('text-decoration-thickness') is 'auto'
+PASS e.style.getPropertyValue('text-decoration-style') is 'solid'
+PASS e.style.getPropertyValue('text-decoration-color') is 'currentcolor'
+PASS computedStyle.getPropertyValue('text-decoration') is 'underline overline line-through'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline overline line-through'
+PASS computedStyle.getPropertyValue('text-decoration-thickness') is 'auto'
+PASS computedStyle.getPropertyValue('text-decoration-style') is 'solid'
+PASS computedStyle.getPropertyValue('text-decoration-color') is 'rgb(0, 0, 0)'
+PASS checkComputedStyleValue('textDecoration', 'text-decoration') is true
+
+Setting CSS3 longhands to values not backwards compatibile with CSS2.1 ("text-decoration-line: underline overline line-through blink; text-decoration-thickness: 16px; text-decoration-style: dotted; text-decoration-color: blue;"):
+PASS e.style.getPropertyValue('text-decoration') is 'underline overline line-through blink'
+PASS e.style.getPropertyValue('text-decoration-line') is 'underline overline line-through blink'
+PASS e.style.getPropertyValue('text-decoration-thickness') is '16px'
+PASS e.style.getPropertyValue('text-decoration-style') is 'dotted'
+PASS e.style.getPropertyValue('text-decoration-color') is 'blue'
+PASS computedStyle.getPropertyValue('text-decoration') is 'underline overline line-through'
+PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline overline line-through'
+PASS computedStyle.getPropertyValue('text-decoration-thickness') is '16px'
+PASS computedStyle.getPropertyValue('text-decoration-style') is 'dotted'
+PASS computedStyle.getPropertyValue('text-decoration-color') is 'rgb(0, 0, 255)'
+PASS checkComputedStyleValue('textDecoration', 'text-decoration') is true
+
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand.html (291243 => 291244)
--- trunk/LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand.html 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand.html 2022-03-14 19:18:11 UTC (rev 291244)
@@ -7,20 +7,20 @@
<script>
function testElementStyle(propertyJS, propertyCSS, value)
{
- shouldBe("e.style.getPropertyCSSValue('" + propertyCSS + "').cssText", "'" + value + "'");
+ shouldBe("e.style.getPropertyValue('" + propertyCSS + "')", "'" + value + "'");
}
function testComputedStyle(propertyJS, propertyCSS, value)
{
computedStyle = window.getComputedStyle(e, null);
- shouldBe("computedStyle.getPropertyCSSValue('" + propertyCSS + "').cssText", "'" + value + "'");
+ shouldBe("computedStyle.getPropertyValue('" + propertyCSS + "')", "'" + value + "'");
}
- function checkComputedStyleValue() {
- var before = window.getComputedStyle(e, null).getPropertyValue('-webkit-text-decoration');
- e.style.webkitTextDecoration = 'none';
- e.style.webkitTextDecoration = before;
- return (window.getComputedStyle(e, null).getPropertyValue('-webkit-text-decoration') == before);
+ function checkComputedStyleValue(propertyJS, propertyCSS) {
+ var before = window.getComputedStyle(e, null).getPropertyValue(propertyCSS);
+ e.style[propertyJS] = 'none';
+ e.style[propertyJS] = before;
+ return (window.getComputedStyle(e, null).getPropertyValue(propertyCSS) == before);
}
description("Test to make sure -webkit-text-decoration property is backwards compatible with CSS 2.1 and CSS 3 shorthand.")
@@ -36,7 +36,7 @@
debug('Initial values:');
shouldBeNull("e.style.getPropertyCSSValue('-webkit-text-decoration')");
testComputedStyle("webkitTextDecoration", "-webkit-text-decoration", "none solid rgb(0, 0, 0)");
- shouldBe("checkComputedStyleValue()", "true");
+ shouldBe("checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration')", "true");
debug('');
debug('CSS2.1 backwards compatibility ("-webkit-text-decoration: underline overline line-through blink;"):');
@@ -44,7 +44,7 @@
testElementStyle("webkitTextDecorationLine", "-webkit-text-decoration-line", "underline overline line-through blink");
testComputedStyle("webkitTextDecorationLine", "-webkit-text-decoration-line", "underline overline line-through");
testComputedStyle("webkitTextDecoration", "-webkit-text-decoration", "underline overline line-through solid rgb(0, 0, 0)");
- shouldBe("checkComputedStyleValue()", "true");
+ shouldBe("checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration')", "true");
debug('');
debug('CSS3 Shorthand ("-webkit-text-decoration: underline overline line-through blink dashed red;"):');
@@ -53,7 +53,7 @@
testComputedStyle("webkitTextDecorationLine", "-webkit-text-decoration-line", "underline overline line-through");
testComputedStyle("webkitTextDecorationStyle", "-webkit-text-decoration-style", "dashed");
testComputedStyle("webkitTextDecorationColor", "-webkit-text-decoration-color", "rgb(255, 0, 0)");
- shouldBe("checkComputedStyleValue()", "true");
+ shouldBe("checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration')", "true");
debug('');
debug('Omitting text decoration line resets to its initial value "none" ("-webkit-text-decoration: navy dotted;"):');
@@ -62,9 +62,69 @@
testComputedStyle("webkitTextDecorationLine", "-webkit-text-decoration-line", "none");
testComputedStyle("webkitTextDecorationStyle", "-webkit-text-decoration-style", "dotted");
testComputedStyle("webkitTextDecorationColor", "-webkit-text-decoration-color", "rgb(0, 0, 128)");
- shouldBe("checkComputedStyleValue()", "true");
+ shouldBe("checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration')", "true");
debug('');
+ debug('CSS2.1 backwards compatibility of non-prefixed shorthand ("text-decoration: underline overline line-through blink;"):');
+ e.style.cssText = "text-decoration: underline overline line-through blink";
+ testElementStyle("textDecoration", "text-decoration", "underline overline line-through blink");
+ testElementStyle("textDecorationLine", "text-decoration-line", "underline overline line-through blink");
+ testElementStyle("textDecorationThickness", "text-decoration-thickness", "");
+ testElementStyle("textDecorationStyle", "text-decoration-style", "");
+ testElementStyle("textDecorationColor", "text-decoration-color", "");
+ testComputedStyle("textDecoration", "text-decoration", "underline overline line-through");
+ testComputedStyle("textDecorationLine", "text-decoration-line", "underline overline line-through");
+ testComputedStyle("textDecorationThickness", "text-decoration-thickness", "auto");
+ testComputedStyle("textDecorationStyle", "text-decoration-style", "solid");
+ testComputedStyle("textDecorationColor", "text-decoration-color", "rgb(0, 0, 0)");
+ shouldBe("checkComputedStyleValue('textDecoration', 'text-decoration')", "true");
+ debug('');
+
+ debug('Setting CSS3 longhands to initial values ("text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;"):');
+ e.style.cssText = "text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;";
+ testElementStyle("textDecoration", "text-decoration", "none");
+ testElementStyle("textDecorationLine", "text-decoration-line", "none");
+ testElementStyle("textDecorationThickness", "text-decoration-thickness", "auto");
+ testElementStyle("textDecorationStyle", "text-decoration-style", "solid");
+ testElementStyle("textDecorationColor", "text-decoration-color", "currentcolor");
+ testComputedStyle("textDecoration", "text-decoration", "none");
+ testComputedStyle("textDecorationLine", "text-decoration-line", "none");
+ testComputedStyle("textDecorationThickness", "text-decoration-thickness", "auto");
+ testComputedStyle("textDecorationStyle", "text-decoration-style", "solid");
+ testComputedStyle("textDecorationColor", "text-decoration-color", "rgb(0, 0, 0)");
+ shouldBe("checkComputedStyleValue('textDecoration', 'text-decoration')", "true");
+ debug('');
+
+ debug('Setting CSS3 longhands to values backwards compatibile with CSS2.1 ("text-decoration-line: underline overline line-through blink; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;"):');
+ e.style.cssText = "text-decoration-line: underline overline line-through blink; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;";
+ testElementStyle("textDecoration", "text-decoration", "underline overline line-through blink");
+ testElementStyle("textDecorationLine", "text-decoration-line", "underline overline line-through blink");
+ testElementStyle("textDecorationThickness", "text-decoration-thickness", "auto");
+ testElementStyle("textDecorationStyle", "text-decoration-style", "solid");
+ testElementStyle("textDecorationColor", "text-decoration-color", "currentcolor");
+ testComputedStyle("textDecoration", "text-decoration", "underline overline line-through");
+ testComputedStyle("textDecorationLine", "text-decoration-line", "underline overline line-through");
+ testComputedStyle("textDecorationThickness", "text-decoration-thickness", "auto");
+ testComputedStyle("textDecorationStyle", "text-decoration-style", "solid");
+ testComputedStyle("textDecorationColor", "text-decoration-color", "rgb(0, 0, 0)");
+ shouldBe("checkComputedStyleValue('textDecoration', 'text-decoration')", "true");
+ debug('');
+
+ debug('Setting CSS3 longhands to values not backwards compatibile with CSS2.1 ("text-decoration-line: underline overline line-through blink; text-decoration-thickness: 16px; text-decoration-style: dotted; text-decoration-color: blue;"):');
+ e.style.cssText = "text-decoration-line: underline overline line-through blink; text-decoration-thickness: 16px; text-decoration-style: dotted; text-decoration-color: blue;";
+ testElementStyle("textDecoration", "text-decoration", "underline overline line-through blink");
+ testElementStyle("textDecorationLine", "text-decoration-line", "underline overline line-through blink");
+ testElementStyle("textDecorationThickness", "text-decoration-thickness", "16px");
+ testElementStyle("textDecorationStyle", "text-decoration-style", "dotted");
+ testElementStyle("textDecorationColor", "text-decoration-color", "blue");
+ testComputedStyle("textDecoration", "text-decoration", "underline overline line-through");
+ testComputedStyle("textDecorationLine", "text-decoration-line", "underline overline line-through");
+ testComputedStyle("textDecorationThickness", "text-decoration-thickness", "16px");
+ testComputedStyle("textDecorationStyle", "text-decoration-style", "dotted");
+ testComputedStyle("textDecorationColor", "text-decoration-color", "rgb(0, 0, 255)");
+ shouldBe("checkComputedStyleValue('textDecoration', 'text-decoration')", "true");
+ debug('');
+
document.body.removeChild(testContainer);
</script>
<script src=""
Modified: trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt (291243 => 291244)
--- trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt 2022-03-14 19:18:11 UTC (rev 291244)
@@ -344,8 +344,14 @@
rect: style.getPropertyCSSValue(text-anchor) : [object CSSPrimitiveValue]
rect: style.getPropertyValue(text-combine-upright) : none
rect: style.getPropertyCSSValue(text-combine-upright) : [object CSSPrimitiveValue]
-rect: style.getPropertyValue(text-decoration) : none
-rect: style.getPropertyCSSValue(text-decoration) : [object CSSPrimitiveValue]
+rect: style.getPropertyValue(text-decoration-color) : rgb(0, 0, 0)
+rect: style.getPropertyCSSValue(text-decoration-color) : [object CSSPrimitiveValue]
+rect: style.getPropertyValue(text-decoration-line) : none
+rect: style.getPropertyCSSValue(text-decoration-line) : [object CSSPrimitiveValue]
+rect: style.getPropertyValue(text-decoration-style) : solid
+rect: style.getPropertyCSSValue(text-decoration-style) : [object CSSPrimitiveValue]
+rect: style.getPropertyValue(text-decoration-thickness) : auto
+rect: style.getPropertyCSSValue(text-decoration-thickness) : [object CSSPrimitiveValue]
rect: style.getPropertyValue(text-emphasis-color) : rgb(0, 0, 0)
rect: style.getPropertyCSSValue(text-emphasis-color) : [object CSSPrimitiveValue]
rect: style.getPropertyValue(text-emphasis-position) : over right
@@ -854,8 +860,14 @@
g: style.getPropertyCSSValue(text-anchor) : [object CSSPrimitiveValue]
g: style.getPropertyValue(text-combine-upright) : none
g: style.getPropertyCSSValue(text-combine-upright) : [object CSSPrimitiveValue]
-g: style.getPropertyValue(text-decoration) : none
-g: style.getPropertyCSSValue(text-decoration) : [object CSSPrimitiveValue]
+g: style.getPropertyValue(text-decoration-color) : rgb(0, 0, 0)
+g: style.getPropertyCSSValue(text-decoration-color) : [object CSSPrimitiveValue]
+g: style.getPropertyValue(text-decoration-line) : none
+g: style.getPropertyCSSValue(text-decoration-line) : [object CSSPrimitiveValue]
+g: style.getPropertyValue(text-decoration-style) : solid
+g: style.getPropertyCSSValue(text-decoration-style) : [object CSSPrimitiveValue]
+g: style.getPropertyValue(text-decoration-thickness) : auto
+g: style.getPropertyCSSValue(text-decoration-thickness) : [object CSSPrimitiveValue]
g: style.getPropertyValue(text-emphasis-color) : rgb(0, 0, 0)
g: style.getPropertyCSSValue(text-emphasis-color) : [object CSSPrimitiveValue]
g: style.getPropertyValue(text-emphasis-position) : over right
Modified: trunk/Source/WebCore/ChangeLog (291243 => 291244)
--- trunk/Source/WebCore/ChangeLog 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/Source/WebCore/ChangeLog 2022-03-14 19:18:11 UTC (rev 291244)
@@ -1,3 +1,64 @@
+2022-03-14 Oriol Brufau <obru...@igalia.com>
+
+ [css] Implement 'text-decoration' as a shorthand.
+ https://bugs.webkit.org/show_bug.cgi?id=237175
+
+ Reviewed by Darin Adler.
+
+ The 'text-decoration' property was considered to be a longhand, sharing
+ a computed value with 'text-decoration-line'.
+
+ This patch switches 'text-decoration' to be shorthand instead.
+ According to the CSS Text Decoration spec, the longhands should be
+ 'text-decoration-line', 'text-decoration-thickness',
+ 'text-decoration-style' and 'text-decoration-color'.
+ I tried that in https://commits.webkit.org/r290756, but it got reverted
+ because of a performance regression. So as a first step, here I'm making
+ 'text-decoration-line' be the only longhand.
+
+ There is a bunch of editing code that was getting/setting/removing
+ 'text-decoration' as a longhand, so I'm switching that to instead
+ use 'text-decoration-line'.
+
+ Tests: fast/css/getComputedStyle/computed-style.html
+ fast/css/getComputedStyle/computed-style-without-renderer.html
+ fast/css/getComputedStyle/getComputedStyle-text-decoration.html
+ fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand.html
+ imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml.html
+ imported/w3c/web-platform-tests/css/css-variables/variable-presentation-attribute.html
+ imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree.html
+ svg/css/getComputedStyle-basic.xhtml
+
+ * css/CSSProperties.json:
+ * css/StyleProperties.cpp:
+ (WebCore::StyleProperties::getPropertyValue const):
+ (WebCore::StyleProperties::asText const):
+ * css/parser/CSSPropertyParser.cpp:
+ (WebCore::CSSPropertyParser::parseSingleValue):
+ (WebCore::CSSPropertyParser::parseShorthand):
+ * editing/EditingStyle.cpp:
+ (WebCore::HTMLTextDecorationEquivalent::HTMLTextDecorationEquivalent):
+ (WebCore::EditingStyle::init):
+ (WebCore::EditingStyle::styleWithResolvedTextDecorations const):
+ (WebCore::EditingStyle::collapseTextDecorationProperties):
+ (WebCore::textDecorationValueList):
+ (WebCore::EditingStyle::conflictsWithInlineStyleOfElement const):
+ (WebCore::EditingStyle::styleIsPresentInComputedStyleOfNode const):
+ (WebCore::EditingStyle::mergeStyle):
+ (WebCore::reconcileTextDecorationProperties):
+ (WebCore::StyleChange::StyleChange):
+ (WebCore::StyleChange::extractTextStyles):
+ (WebCore::extractPropertiesNotIn):
+ * editing/cocoa/HTMLConverter.mm:
+ (HTMLConverterCaches::propertyValueForNode):
+ (HTMLConverter::computedAttributesForElement):
+ * editing/ios/EditorIOS.mm:
+ (WebCore::Editor::removeUnchangeableStyles):
+ * editing/markup.cpp:
+ (WebCore::serializePreservingVisualAppearanceInternal):
+ * style/PropertyAllowlist.cpp:
+ (WebCore::Style::isValidCueStyleProperty):
+
2022-03-14 Tim Nguyen <n...@apple.com>
REGRESSION(r289850): Bundle size has increased
Modified: trunk/Source/WebCore/css/CSSProperties.json (291243 => 291244)
--- trunk/Source/WebCore/css/CSSProperties.json 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/Source/WebCore/css/CSSProperties.json 2022-03-14 19:18:11 UTC (rev 291244)
@@ -4615,17 +4615,10 @@
}
},
"text-decoration": {
- "values": [
- "underline",
- "overline",
- "line-through",
- {
- "value": "blink",
- "status": "not considering"
- }
- ],
"codegen-properties": {
- "converter": "TextDecoration"
+ "longhands": [
+ "text-decoration-line"
+ ]
},
"specification": {
"category": "css-22",
@@ -6854,6 +6847,15 @@
"-webkit-text-decoration-line"
]
},
+ "values": [
+ "underline",
+ "overline",
+ "line-through",
+ {
+ "value": "blink",
+ "status": "not considering"
+ }
+ ],
"specification": {
"category": "css-text-decor",
"url": "https://www.w3.org/TR/css-text-decor-3/#text-decoration-line"
Modified: trunk/Source/WebCore/css/StyleProperties.cpp (291243 => 291244)
--- trunk/Source/WebCore/css/StyleProperties.cpp 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/Source/WebCore/css/StyleProperties.cpp 2022-03-14 19:18:11 UTC (rev 291244)
@@ -275,6 +275,12 @@
return fontValue();
case CSSPropertyFontVariant:
return fontVariantValue();
+ case CSSPropertyTextDecoration:
+ if (auto line = getPropertyCSSValue(CSSPropertyTextDecorationLine))
+ return line->cssText();
+ return String();
+ case CSSPropertyWebkitTextDecoration:
+ return getShorthandValue(webkitTextDecorationShorthand());
case CSSPropertyTextDecorationSkip:
return textDecorationSkipValue();
case CSSPropertyInset:
@@ -1433,6 +1439,9 @@
case CSSPropertyScrollPaddingInlineEnd:
shorthandPropertyID = CSSPropertyScrollPaddingInline;
break;
+ case CSSPropertyTextDecorationLine:
+ shorthandPropertyID = CSSPropertyTextDecoration;
+ break;
case CSSPropertyTransitionProperty:
case CSSPropertyTransitionDuration:
case CSSPropertyTransitionTimingFunction:
Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp (291243 => 291244)
--- trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp 2022-03-14 19:18:11 UTC (rev 291244)
@@ -4473,7 +4473,6 @@
if (!m_context.colorFilterEnabled)
return nullptr;
return consumeFilter(m_range, m_context, AllowedFilterFunctions::ColorFilters);
- case CSSPropertyTextDecoration:
case CSSPropertyWebkitTextDecorationsInEffect:
case CSSPropertyTextDecorationLine:
return consumeTextDecorationLine(m_range);
@@ -6285,7 +6284,13 @@
return consumeAnimationShorthand(animationShorthandForParsing(), important);
case CSSPropertyTransition:
return consumeAnimationShorthand(transitionShorthandForParsing(), important);
- case CSSPropertyTextDecoration:
+ case CSSPropertyTextDecoration: {
+ auto line = consumeTextDecorationLine(m_range);
+ if (!line || !m_range.atEnd())
+ return false;
+ addProperty(CSSPropertyTextDecorationLine, property, line.releaseNonNull(), important);
+ return true;
+ }
case CSSPropertyWebkitTextDecoration:
// FIXME-NEWPARSER: We need to unprefix -line/-style/-color ASAP and get rid
// of -webkit-text-decoration completely.
Modified: trunk/Source/WebCore/editing/EditingStyle.cpp (291243 => 291244)
--- trunk/Source/WebCore/editing/EditingStyle.cpp 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/Source/WebCore/editing/EditingStyle.cpp 2022-03-14 19:18:11 UTC (rev 291244)
@@ -94,7 +94,7 @@
// Non-inheritable properties
CSSPropertyBackgroundColor,
- CSSPropertyTextDecoration,
+ CSSPropertyTextDecorationLine,
};
const unsigned numAllEditingProperties = WTF_ARRAY_LENGTH(editingProperties);
@@ -220,7 +220,7 @@
class HTMLTextDecorationEquivalent : public HTMLElementEquivalent {
public:
HTMLTextDecorationEquivalent(CSSValueID primitiveValue, const QualifiedName& tagName)
- : HTMLElementEquivalent(CSSPropertyTextDecoration, primitiveValue, tagName)
+ : HTMLElementEquivalent(CSSPropertyTextDecorationLine, primitiveValue, tagName)
, m_isUnderline(primitiveValue == CSSValueUnderline)
{
}
@@ -235,7 +235,7 @@
auto& mutableStyle = *style.m_mutableStyle;
return mutableStyle.getPropertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect)
- || mutableStyle.getPropertyCSSValue(CSSPropertyTextDecoration);
+ || mutableStyle.getPropertyCSSValue(CSSPropertyTextDecorationLine);
}
bool valueIsPresentInStyle(Element& element, const EditingStyle& style) const override
@@ -247,7 +247,7 @@
return change == TextDecorationChange::Add;
RefPtr<CSSValue> styleValue = style.m_mutableStyle->getPropertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect);
if (!styleValue)
- styleValue = style.m_mutableStyle->getPropertyCSSValue(CSSPropertyTextDecoration);
+ styleValue = style.m_mutableStyle->getPropertyCSSValue(CSSPropertyTextDecorationLine);
return is<CSSValueList>(styleValue) && downcast<CSSValueList>(*styleValue).hasValue(m_primitiveValue.get());
}
@@ -510,7 +510,7 @@
if (RefPtr<CSSValue> value = backgroundColorInEffect(node))
m_mutableStyle->setProperty(CSSPropertyBackgroundColor, value->cssText());
if (RefPtr<CSSValue> value = computedStyleAtPosition.propertyValue(CSSPropertyWebkitTextDecorationsInEffect)) {
- m_mutableStyle->setProperty(CSSPropertyTextDecoration, value->cssText());
+ m_mutableStyle->setProperty(CSSPropertyTextDecorationLine, value->cssText());
m_mutableStyle->removeProperty(CSSPropertyWebkitTextDecorationsInEffect);
}
}
@@ -595,9 +595,9 @@
valueList->append(CSSValuePool::singleton().createIdentifierValue(CSSValueLineThrough));
if (valueList->length())
- style->setProperty(CSSPropertyTextDecoration, valueList.ptr());
+ style->setProperty(CSSPropertyTextDecorationLine, valueList.ptr());
else
- style->setProperty(CSSPropertyTextDecoration, CSSValuePool::singleton().createIdentifierValue(CSSValueNone));
+ style->setProperty(CSSPropertyTextDecorationLine, CSSValuePool::singleton().createIdentifierValue(CSSValueNone));
return style;
}
@@ -779,15 +779,15 @@
return;
if (textDecorationsInEffect->isValueList())
- m_mutableStyle->setProperty(CSSPropertyTextDecoration, textDecorationsInEffect->cssText(), m_mutableStyle->propertyIsImportant(CSSPropertyTextDecoration));
+ m_mutableStyle->setProperty(CSSPropertyTextDecorationLine, textDecorationsInEffect->cssText(), m_mutableStyle->propertyIsImportant(CSSPropertyTextDecorationLine));
else
- m_mutableStyle->removeProperty(CSSPropertyTextDecoration);
+ m_mutableStyle->removeProperty(CSSPropertyTextDecorationLine);
m_mutableStyle->removeProperty(CSSPropertyWebkitTextDecorationsInEffect);
}
// CSS properties that create a visual difference only when applied to text.
static const CSSPropertyID textOnlyProperties[] = {
- CSSPropertyTextDecoration,
+ CSSPropertyTextDecorationLine,
CSSPropertyWebkitTextDecorationsInEffect,
CSSPropertyFontStyle,
CSSPropertyFontWeight,
@@ -852,7 +852,7 @@
static RefPtr<CSSValueList> textDecorationValueList(const StyleProperties& properties)
{
- RefPtr<CSSValue> value = properties.getPropertyCSSValue(CSSPropertyTextDecoration);
+ RefPtr<CSSValue> value = properties.getPropertyCSSValue(CSSPropertyTextDecorationLine);
if (!is<CSSValueList>(value))
return nullptr;
return downcast<CSSValueList>(value.get());
@@ -896,13 +896,13 @@
if (extractedValueList->length()) {
conflicts = true;
if (newValueList->length())
- newInlineStyle->setProperty(CSSPropertyTextDecoration, WTFMove(newValueList));
+ newInlineStyle->setProperty(CSSPropertyTextDecorationLine, WTFMove(newValueList));
else
- newInlineStyle->removeProperty(CSSPropertyTextDecoration);
+ newInlineStyle->removeProperty(CSSPropertyTextDecorationLine);
if (extractedStyle) {
- bool isImportant = inlineStyle->propertyIsImportant(CSSPropertyTextDecoration);
- extractedStyle->setProperty(CSSPropertyTextDecoration, extractedValueList->cssText(), isImportant);
+ bool isImportant = inlineStyle->propertyIsImportant(CSSPropertyTextDecorationLine);
+ extractedStyle->setProperty(CSSPropertyTextDecorationLine, extractedValueList->cssText(), isImportant);
}
}
}
@@ -916,13 +916,13 @@
if (propertyID == CSSPropertyWhiteSpace && isTabSpanNode(&element))
continue;
- if (propertyID == CSSPropertyWebkitTextDecorationsInEffect && inlineStyle->getPropertyCSSValue(CSSPropertyTextDecoration)) {
+ if (propertyID == CSSPropertyWebkitTextDecorationsInEffect && inlineStyle->getPropertyCSSValue(CSSPropertyTextDecorationLine)) {
if (!newInlineStyle)
return true;
conflicts = true;
- newInlineStyle->removeProperty(CSSPropertyTextDecoration);
+ newInlineStyle->removeProperty(CSSPropertyTextDecorationLine);
if (extractedStyle)
- extractedStyle->setProperty(CSSPropertyTextDecoration, inlineStyle->getPropertyValue(CSSPropertyTextDecoration), inlineStyle->propertyIsImportant(CSSPropertyTextDecoration));
+ extractedStyle->setProperty(CSSPropertyTextDecorationLine, inlineStyle->getPropertyValue(CSSPropertyTextDecorationLine), inlineStyle->propertyIsImportant(CSSPropertyTextDecorationLine));
}
if (!inlineStyle->getPropertyCSSValue(propertyID))
@@ -1049,7 +1049,7 @@
if (shouldAddUnderline || shouldAddLineThrough) {
bool hasUnderline = false;
bool hasLineThrough = false;
- if (RefPtr<CSSValue> value = computedStyle.propertyValue(CSSPropertyTextDecoration)) {
+ if (RefPtr<CSSValue> value = computedStyle.propertyValue(CSSPropertyTextDecorationLine)) {
if (value->isValueList()) {
auto& cssValuePool = CSSValuePool::singleton();
const CSSValueList& valueList = downcast<CSSValueList>(*value);
@@ -1283,7 +1283,7 @@
RefPtr<CSSValue> value = m_mutableStyle->getPropertyCSSValue(property.id());
// text decorations never override values.
- if ((property.id() == CSSPropertyTextDecoration || property.id() == CSSPropertyWebkitTextDecorationsInEffect)
+ if ((property.id() == CSSPropertyTextDecorationLine || property.id() == CSSPropertyWebkitTextDecorationsInEffect)
&& is<CSSValueList>(*property.value()) && value) {
if (is<CSSValueList>(*value)) {
auto newValue = downcast<CSSValueList>(*value).copy();
@@ -1688,11 +1688,11 @@
static void reconcileTextDecorationProperties(MutableStyleProperties* style)
{
RefPtr<CSSValue> textDecorationsInEffect = style->getPropertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect);
- RefPtr<CSSValue> textDecoration = style->getPropertyCSSValue(CSSPropertyTextDecoration);
+ RefPtr<CSSValue> textDecoration = style->getPropertyCSSValue(CSSPropertyTextDecorationLine);
// We shouldn't have both text-decoration and -webkit-text-decorations-in-effect because that wouldn't make sense.
ASSERT(!textDecorationsInEffect || !textDecoration);
if (textDecorationsInEffect) {
- style->setProperty(CSSPropertyTextDecoration, textDecorationsInEffect->cssText());
+ style->setProperty(CSSPropertyTextDecorationLine, textDecorationsInEffect->cssText());
style->removeProperty(CSSPropertyWebkitTextDecorationsInEffect);
textDecoration = textDecorationsInEffect;
}
@@ -1699,7 +1699,7 @@
// If text-decoration is set to "none", remove the property because we don't want to add redundant "text-decoration: none".
if (textDecoration && !textDecoration->isValueList())
- style->removeProperty(CSSPropertyTextDecoration);
+ style->removeProperty(CSSPropertyTextDecorationLine);
}
StyleChange::StyleChange(EditingStyle* style, const Position& position)
@@ -1734,7 +1734,7 @@
if (shouldAddUnderline || shouldAddStrikeThrough) {
RefPtr<CSSValue> value = computedStyle.propertyValue(CSSPropertyWebkitTextDecorationsInEffect);
if (!is<CSSValueList>(value))
- value = computedStyle.propertyValue(CSSPropertyTextDecoration);
+ value = computedStyle.propertyValue(CSSPropertyTextDecorationLine);
RefPtr<CSSValueList> valueList;
if (is<CSSValueList>(value))
@@ -1753,7 +1753,7 @@
valueList->append(WTFMove(underline));
if (shouldAddStrikeThrough && !hasLineThrough)
valueList->append(WTFMove(lineThrough));
- mutableStyle->setProperty(CSSPropertyTextDecoration, valueList.get());
+ mutableStyle->setProperty(CSSPropertyTextDecorationLine, valueList.get());
} else {
m_applyUnderline = shouldAddUnderline && !hasUnderline;
m_applyLineThrough = shouldAddStrikeThrough && !hasLineThrough;
@@ -1815,7 +1815,7 @@
// Assuming reconcileTextDecorationProperties has been called, there should not be -webkit-text-decorations-in-effect
// Furthermore, text-decoration: none has been trimmed so that text-decoration property is always a CSSValueList.
- RefPtr<CSSValue> textDecoration = style.getPropertyCSSValue(CSSPropertyTextDecoration);
+ RefPtr<CSSValue> textDecoration = style.getPropertyCSSValue(CSSPropertyTextDecorationLine);
if (is<CSSValueList>(textDecoration)) {
auto& cssValuePool = CSSValuePool::singleton();
RefPtr<CSSPrimitiveValue> underline = cssValuePool.createIdentifierValue(CSSValueUnderline);
@@ -1828,7 +1828,7 @@
m_applyLineThrough = true;
// If trimTextDecorations, delete underline and line-through
- setTextDecorationProperty(style, newTextDecoration.get(), CSSPropertyTextDecoration);
+ setTextDecorationProperty(style, newTextDecoration.get(), CSSPropertyTextDecorationLine);
}
int verticalAlign = identifierForStyleProperty(style, CSSPropertyVerticalAlign);
@@ -1897,7 +1897,7 @@
Ref<MutableStyleProperties> mutableStyle = *result->style();
RefPtr<CSSValue> baseTextDecorationsInEffect = extractPropertyValue(baseStyle, CSSPropertyWebkitTextDecorationsInEffect);
- diffTextDecorations(mutableStyle, CSSPropertyTextDecoration, baseTextDecorationsInEffect.get());
+ diffTextDecorations(mutableStyle, CSSPropertyTextDecorationLine, baseTextDecorationsInEffect.get());
diffTextDecorations(mutableStyle, CSSPropertyWebkitTextDecorationsInEffect, baseTextDecorationsInEffect.get());
if (extractPropertyValue(baseStyle, CSSPropertyFontWeight) && fontWeightIsBold(mutableStyle) == fontWeightIsBold(baseStyle))
Modified: trunk/Source/WebCore/editing/cocoa/HTMLConverter.mm (291243 => 291244)
--- trunk/Source/WebCore/editing/cocoa/HTMLConverter.mm 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/Source/WebCore/editing/cocoa/HTMLConverter.mm 2022-03-14 19:18:11 UTC (rev 291244)
@@ -641,7 +641,7 @@
return "bolder";
inherit = true;
break;
- case CSSPropertyTextDecoration:
+ case CSSPropertyTextDecorationLine:
if (element.hasTagName(uTag) || element.hasTagName(insTag))
return "underline";
else if (element.hasTagName(sTag) || element.hasTagName(strikeTag) || element.hasTagName(delTag))
@@ -1037,7 +1037,7 @@
[attrs setObject:@0 forKey:NSLigatureAttributeName]; // explicitly disabled
}
- String textDecoration = _caches->propertyValueForNode(element, CSSPropertyTextDecoration);
+ String textDecoration = _caches->propertyValueForNode(element, CSSPropertyTextDecorationLine);
if (textDecoration.length()) {
if (textDecoration.contains("underline"))
[attrs setObject:[NSNumber numberWithInteger:NSUnderlineStyleSingle] forKey:NSUnderlineStyleAttributeName];
Modified: trunk/Source/WebCore/editing/ios/EditorIOS.mm (291243 => 291244)
--- trunk/Source/WebCore/editing/ios/EditorIOS.mm 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/Source/WebCore/editing/ios/EditorIOS.mm 2022-03-14 19:18:11 UTC (rev 291244)
@@ -159,7 +159,7 @@
defaultStyle->removeProperty(CSSPropertyFontStyle);
defaultStyle->removeProperty(CSSPropertyFontVariantCaps);
// FIXME: we should handle also pasted quoted text, strikethrough, etc. <rdar://problem/9255115>
- defaultStyle->removeProperty(CSSPropertyTextDecoration);
+ defaultStyle->removeProperty(CSSPropertyTextDecorationLine);
defaultStyle->removeProperty(CSSPropertyWebkitTextDecorationsInEffect); // implements underline
// FIXME add EditAction::MatchStlye <rdar://problem/9156507> Undo rich text's paste & match style should say "Undo Match Style"
Modified: trunk/Source/WebCore/editing/markup.cpp (291243 => 291244)
--- trunk/Source/WebCore/editing/markup.cpp 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/Source/WebCore/editing/markup.cpp 2022-03-14 19:18:11 UTC (rev 291244)
@@ -935,8 +935,8 @@
// Reset the CSS properties to avoid an assertion error in addStyleMarkup().
// This assertion is caused at least when we select all text of a <body> element whose
// 'text-decoration' property is "inherit", and copy it.
- if (!propertyMissingOrEqualToNone(fullySelectedRootStyle->style(), CSSPropertyTextDecoration))
- fullySelectedRootStyle->style()->setProperty(CSSPropertyTextDecoration, CSSValueNone);
+ if (!propertyMissingOrEqualToNone(fullySelectedRootStyle->style(), CSSPropertyTextDecorationLine))
+ fullySelectedRootStyle->style()->setProperty(CSSPropertyTextDecorationLine, CSSValueNone);
if (!propertyMissingOrEqualToNone(fullySelectedRootStyle->style(), CSSPropertyWebkitTextDecorationsInEffect))
fullySelectedRootStyle->style()->setProperty(CSSPropertyWebkitTextDecorationsInEffect, CSSValueNone);
accumulator.wrapWithStyleNode(fullySelectedRootStyle->style(), document, true);
Modified: trunk/Source/WebCore/style/PropertyAllowlist.cpp (291243 => 291244)
--- trunk/Source/WebCore/style/PropertyAllowlist.cpp 2022-03-14 19:11:33 UTC (rev 291243)
+++ trunk/Source/WebCore/style/PropertyAllowlist.cpp 2022-03-14 19:18:11 UTC (rev 291244)
@@ -133,7 +133,7 @@
case CSSPropertyOutlineWidth:
case CSSPropertyVisibility:
case CSSPropertyWhiteSpace:
- case CSSPropertyTextDecoration:
+ case CSSPropertyTextDecorationLine:
case CSSPropertyTextShadow:
case CSSPropertyBorderStyle:
case CSSPropertyPaintOrder: