+2012-03-21 Alexandru Chiculita <achicu@adobe.com>
+
+ [CSS Shaders] Make CSS Shaders compile on Chromium
+ https://bugs.webkit.org/show_bug.cgi?id=81435
+
+ Reviewed by Stephen White.
+
+ I've added window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1") to force
+ enable the feature at runtime.
+
+ I've rebased the expected results for chromium. It seems like the result is a little bit lighter then the old ones.
+ Also, some tests are failing and seem to be related to differences between V8 and JSC: jsWrapperClass returns "Object" and
+ "Function", for "__proto__" and "constructor" properties of the CSSValueList objects.
+ I've let the results keep the "FAIL" status for those particular cases.
+
+ * css3/filters/custom/custom-filter-shader-cache.html:
+ * css3/filters/custom/effect-custom-combined-missing.html:
+ * css3/filters/custom/effect-custom-parameters.html:
+ * css3/filters/custom/effect-custom.html:
+ * css3/filters/custom/missing-custom-filter-shader.html:
+ * css3/filters/script-tests/custom-filter-property-computed-style.js:
+ * css3/filters/script-tests/custom-filter-property-parsing-invalid.js:
+ * css3/filters/script-tests/custom-filter-property-parsing.js:
+ * platform/chromium-linux/css3/filters/custom/custom-filter-property-computed-style-expected.txt: Added.
+ * platform/chromium-linux/css3/filters/custom/custom-filter-property-parsing-expected.txt: Added.
+ * platform/chromium-linux/css3/filters/custom/custom-filter-property-parsing-invalid-expected.txt: Added.
+ * platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.png: Added.
+ * platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.txt: Added.
+ * platform/chromium-linux/css3/filters/custom/effect-custom-combined-missing-expected.png: Added.
+ * platform/chromium-linux/css3/filters/custom/effect-custom-combined-missing-expected.txt: Added.
+ * platform/chromium-linux/css3/filters/custom/effect-custom-disabled-expected.txt: Added.
+ * platform/chromium-linux/css3/filters/custom/effect-custom-expected.png: Added.
+ * platform/chromium-linux/css3/filters/custom/effect-custom-expected.txt: Added.
+ * platform/chromium-linux/css3/filters/custom/effect-custom-parameters-expected.png: Added.
+ * platform/chromium-linux/css3/filters/custom/effect-custom-parameters-expected.txt: Added.
+ * platform/chromium-linux/css3/filters/custom/missing-custom-filter-shader-expected.png: Added.
+ * platform/chromium-linux/css3/filters/custom/missing-custom-filter-shader-expected.txt: Added.
+ * platform/chromium-mac/css3/filters/custom/custom-filter-shader-cache-expected.png: Added.
+ * platform/chromium-mac/css3/filters/custom/custom-filter-shader-cache-expected.txt: Added.
+ * platform/chromium-mac/css3/filters/custom/effect-custom-combined-missing-expected.png: Added.
+ * platform/chromium-mac/css3/filters/custom/effect-custom-combined-missing-expected.txt: Added.
+ * platform/chromium-mac/css3/filters/custom/effect-custom-expected.png: Added.
+ * platform/chromium-mac/css3/filters/custom/effect-custom-expected.txt: Added.
+ * platform/chromium-mac/css3/filters/custom/effect-custom-parameters-expected.png: Added.
+ * platform/chromium-mac/css3/filters/custom/effect-custom-parameters-expected.txt: Added.
+ * platform/chromium-mac/css3/filters/custom/filter-repaint-shaders-expected.png: Added.
+ * platform/chromium-mac/css3/filters/custom/filter-repaint-shaders-expected.txt: Added.
+ * platform/chromium-mac/css3/filters/custom/missing-custom-filter-shader-expected.png: Added.
+ * platform/chromium-mac/css3/filters/custom/missing-custom-filter-shader-expected.txt: Added.
+ * platform/chromium/css3/filters/custom/custom-filter-property-computed-style-expected.txt: Added.
+ * platform/chromium/css3/filters/custom/custom-filter-property-parsing-expected.txt: Added.
+ * platform/chromium/css3/filters/custom/custom-filter-property-parsing-invalid-expected.txt: Added.
+ * platform/chromium/css3/filters/custom/effect-custom-disabled-expected.txt: Added.
+ * platform/chromium/test_expectations.txt: I've added Mac and Linux results, so skipping the tests only on Windows.
+
2012-03-21 Philippe Normand <pnormand@igalia.com>
Unreviewed, skip some flaky tests on GTK.
<title>Testing that cached shader resources are shared correctly between elements</title>
<script>
if (window.layoutTestController) {
+ window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1");
window.layoutTestController.overridePreference("WebKitWebGLEnabled", "1");
window.layoutTestController.dumpAsText(true);
window.layoutTestController.waitUntilDone();
<title>Testing that the custom filter is applied correctly when a filter in the stack is not loaded yet.</title>
<script>
if (window.layoutTestController) {
+ window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1");
window.layoutTestController.overridePreference("WebKitWebGLEnabled", "1");
- // Force software rendering mode.
- window.layoutTestController.overridePreference("WebKitAcceleratedCompositingEnabled", "0");
window.layoutTestController.dumpAsText(true);
window.layoutTestController.waitUntilDone();
}
<title>Testing that the custom filter receives the correct number parameters.</title>
<script>
if (window.layoutTestController) {
+ window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1");
window.layoutTestController.overridePreference("WebKitWebGLEnabled", "1");
- // Force software rendering mode.
- window.layoutTestController.overridePreference("WebKitAcceleratedCompositingEnabled", "0");
window.layoutTestController.dumpAsText(true);
window.layoutTestController.waitUntilDone();
}
<title>Testing that the custom filter is applied correctly.</title>
<script>
if (window.layoutTestController) {
+ window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1");
window.layoutTestController.overridePreference("WebKitWebGLEnabled", "1");
- // Force software rendering mode.
- window.layoutTestController.overridePreference("WebKitAcceleratedCompositingEnabled", "0");
window.layoutTestController.dumpAsText(true);
window.layoutTestController.waitUntilDone();
}
<title>Testing that custom-filters do not render when shaders are missing</title>
<script>
if (window.layoutTestController) {
+ window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1");
window.layoutTestController.overridePreference("WebKitWebGLEnabled", "1");
window.layoutTestController.dumpAsText(true);
window.layoutTestController.waitUntilDone();
description("Tests the computed style of the custom() function of the -webkit-filter property.");
+if (window.layoutTestController) {
+ window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1");
+ window.layoutTestController.overridePreference("WebKitWebGLEnabled", "1");
+}
+
function jsWrapperClass(node)
{
if (!node)
description("Test the parsing of custom() function of the -webkit-filter property.");
+if (window.layoutTestController) {
+ window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1");
+ window.layoutTestController.overridePreference("WebKitWebGLEnabled", "1");
+}
+
// These have to be global for the test helpers to see them.
var stylesheet, cssRule, declaration;
description("Test the parsing of the custom() function of the -webkit-filter property.");
+if (window.layoutTestController) {
+ window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1");
+ window.layoutTestController.overridePreference("WebKitWebGLEnabled", "1");
+}
+
function jsWrapperClass(node)
{
if (!node)
--- /dev/null
+Tests the computed style of the custom() function of the -webkit-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Custom with vertex shader : custom(url(vertex.shader))
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader) none, 1 1 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader) none, 1 1 filter-box)'
+
+Custom with fragment shader : custom(none url(fragment.shader))
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box)'
+
+Custom with both shaders : custom(url(vertex.shader) url(fragment.shader))
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader) url(fragment.shader), 1 1 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader) url(fragment.shader), 1 1 filter-box)'
+
+Custom with mesh size : custom(url(vertex.shader), 10)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader) none, 10 10 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader) none, 10 10 filter-box)'
+
+Custom with both mesh sizes : custom(none url(fragment.shader), 10 20)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 filter-box)'
+
+Custom with detached mesh : custom(none url(fragment.shader), detached)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 filter-box detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box detached)'
+
+Custom with detached and mesh size : custom(none url(fragment.shader), 10 20 detached)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 filter-box detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 filter-box detached)'
+
+Custom with default filter-box : custom(none url(fragment.shader), filter-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box)'
+
+Custom with content-box : custom(none url(fragment.shader), content-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 content-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 content-box)'
+
+Custom with border-box : custom(none url(fragment.shader), border-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 border-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 border-box)'
+
+Custom with padding-box : custom(none url(fragment.shader), padding-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 padding-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 padding-box)'
+
+Custom with mesh-size and padding-box : custom(none url(fragment.shader), 10 padding-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 10 padding-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 10 padding-box)'
+
+Custom with mesh-size and padding-box : custom(none url(fragment.shader), padding-box detached)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 padding-box detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 padding-box detached)'
+
+Custom with both mesh-sizes and padding-box : custom(none url(fragment.shader), 10 20 padding-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 padding-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 padding-box)'
+
+Custom with both mesh-sizes and padding-box and detached : custom(none url(fragment.shader), 10 20 padding-box detached)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 padding-box detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 padding-box detached)'
+
+Custom with padding-box and detached : custom(none url(fragment.shader), padding-box detached)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 padding-box detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 padding-box detached)'
+
+Custom with integer parameters : custom(none url(fragment.shader), p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 filter-box, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+
+Custom with float parameters : custom(none url(fragment.shader), p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 filter-box, p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box, p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)'
+
+Custom with mesh size and number parameters : custom(none url(fragment.shader), 10 20 filter-box, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 filter-box, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 filter-box, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+
+Multiple with fragment shader : grayscale() custom(none url(fragment.shader)) sepia()
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'grayscale(1) custom(none url(fragment.shader), 1 1 filter-box) sepia(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 3
+FAIL subRule.operationType should be 2 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'grayscale(1)'
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box)'
+FAIL subRule.operationType should be 3 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'sepia(1)'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+Test the parsing of the custom() function of the -webkit-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Custom with vertex shader : custom(url(vertex.shader))
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader))'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader))'
+
+Custom with fragment shader : custom(none url(fragment.shader))
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader))'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader))'
+
+Custom with both shaders : custom(url(vertex.shader) url(fragment.shader))
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader) url(fragment.shader))'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader) url(fragment.shader))'
+
+Custom with mesh size : custom(url(vertex.shader), 10)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader), 10)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader), 10)'
+
+Custom with both mesh sizes : custom(none url(fragment.shader), 10 20)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20)'
+
+Custom with detached mesh : custom(none url(fragment.shader), detached)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), detached)'
+
+Custom with detached and mesh size : custom(none url(fragment.shader), 10 20 detached)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 detached)'
+
+Custom with number parameters : custom(none url(fragment.shader), p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+
+Custom with float parameters : custom(none url(fragment.shader), p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)'
+
+Custom with mesh size and number parameters : custom(none url(fragment.shader), 10 20, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+
+Multiple with fragment shader : grayscale() custom(none url(fragment.shader)) sepia()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'grayscale() custom(none url(fragment.shader)) sepia()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 3
+FAIL subRule.operationType should be 2 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'grayscale()'
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader))'
+FAIL subRule.operationType should be 3 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'sepia()'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+Test the parsing of custom() function of the -webkit-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Empty function : custom()
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No values 1 : custom(,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No values 2 : custom(,,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many shaders 1 : custom(url(shader1) url(shader2) url(shader2))
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many shaders 2 : custom(none none none)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many shaders 3 : custom(none url(shader1) url(shader2) url(shader2))
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No shader : custom(none, 10 20)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many mesh sizes : custom(none, 10 20 30)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Wrong mesh-box type - 'padding' : custom(url(shader), padding)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Wrong mesh-box type - 'none' : custom(url(shader), none)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+More mesh-box types : custom(url(shader), padding-box filter-box)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Wrong order for mesh-detached and mesh-box type : custom(url(shader), detached padding-box)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Wrong order for mesh size and mesh-box type : custom(url(shader), padding-box 10)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many mesh sizes with mesh-box type : custom(url(shader), 20 30 40 padding-box)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Invalid comma between mesh-sizes : custom(url(shader), 20, 40 padding-box)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Invalid comma before mesh type : custom(url(shader), 20, padding-box)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No mesh parameter : custom(url(shader), )
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Wrong mesh type - correct identifier is 'detached' : custom(url(shader), detach)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No mesh size : custom(url(shader), , p1 2)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Negative single mesh size : custom(url(shader), -10)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Negative both mesh sizes : custom(url(shader), -10 -10)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Negative and positive mesh size : custom(url(shader), -10 10)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Zero single mesh size : custom(url(shader), 0)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Zero both mesh sizes : custom(url(shader), 0 0)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+0 and 1 mesh sizes : custom(url(shader), 0 1)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many parameter values : custom(url(shader), p1 1 2 3 4 5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Invalid parameter types : custom(url(shader), p1 1.0 2.0 'text')
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No parameter value 1 : custom(url(shader), p1)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No parameter value 2 : custom(url(shader), p1, p2, p3)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+Test that the custom() function of the -webkit-filter property is not parsed when CSS Custom Filter is disabled.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Custom with vertex shader : custom(url(vertex.shader))
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+Multiple with fragment shader : grayscale() custom(none url(fragment.shader)) sepia()
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+Tests the computed style of the custom() function of the -webkit-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Custom with vertex shader : custom(url(vertex.shader))
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader) none, 1 1 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader) none, 1 1 filter-box)'
+
+Custom with fragment shader : custom(none url(fragment.shader))
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box)'
+
+Custom with both shaders : custom(url(vertex.shader) url(fragment.shader))
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader) url(fragment.shader), 1 1 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader) url(fragment.shader), 1 1 filter-box)'
+
+Custom with mesh size : custom(url(vertex.shader), 10)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader) none, 10 10 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader) none, 10 10 filter-box)'
+
+Custom with both mesh sizes : custom(none url(fragment.shader), 10 20)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 filter-box)'
+
+Custom with detached mesh : custom(none url(fragment.shader), detached)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 filter-box detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box detached)'
+
+Custom with detached and mesh size : custom(none url(fragment.shader), 10 20 detached)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 filter-box detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 filter-box detached)'
+
+Custom with default filter-box : custom(none url(fragment.shader), filter-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 filter-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box)'
+
+Custom with content-box : custom(none url(fragment.shader), content-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 content-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 content-box)'
+
+Custom with border-box : custom(none url(fragment.shader), border-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 border-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 border-box)'
+
+Custom with padding-box : custom(none url(fragment.shader), padding-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 padding-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 padding-box)'
+
+Custom with mesh-size and padding-box : custom(none url(fragment.shader), 10 padding-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 10 padding-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 10 padding-box)'
+
+Custom with mesh-size and padding-box : custom(none url(fragment.shader), padding-box detached)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 padding-box detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 padding-box detached)'
+
+Custom with both mesh-sizes and padding-box : custom(none url(fragment.shader), 10 20 padding-box)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 padding-box)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 padding-box)'
+
+Custom with both mesh-sizes and padding-box and detached : custom(none url(fragment.shader), 10 20 padding-box detached)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 padding-box detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 padding-box detached)'
+
+Custom with padding-box and detached : custom(none url(fragment.shader), padding-box detached)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 padding-box detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 padding-box detached)'
+
+Custom with integer parameters : custom(none url(fragment.shader), p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 filter-box, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+
+Custom with float parameters : custom(none url(fragment.shader), p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 1 1 filter-box, p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box, p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)'
+
+Custom with mesh size and number parameters : custom(none url(fragment.shader), 10 20 filter-box, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 filter-box, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 filter-box, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+
+Multiple with fragment shader : grayscale() custom(none url(fragment.shader)) sepia()
+PASS removeBaseURL(filterStyle.getPropertyValue('-webkit-filter')) is 'grayscale(1) custom(none url(fragment.shader), 1 1 filter-box) sepia(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 3
+FAIL subRule.operationType should be 2 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'grayscale(1)'
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 1 1 filter-box)'
+FAIL subRule.operationType should be 3 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'sepia(1)'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+Test the parsing of the custom() function of the -webkit-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Custom with vertex shader : custom(url(vertex.shader))
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader))'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader))'
+
+Custom with fragment shader : custom(none url(fragment.shader))
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader))'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader))'
+
+Custom with both shaders : custom(url(vertex.shader) url(fragment.shader))
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader) url(fragment.shader))'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader) url(fragment.shader))'
+
+Custom with mesh size : custom(url(vertex.shader), 10)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(url(vertex.shader), 10)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(url(vertex.shader), 10)'
+
+Custom with both mesh sizes : custom(none url(fragment.shader), 10 20)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20)'
+
+Custom with detached mesh : custom(none url(fragment.shader), detached)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), detached)'
+
+Custom with detached and mesh size : custom(none url(fragment.shader), 10 20 detached)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20 detached)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20 detached)'
+
+Custom with number parameters : custom(none url(fragment.shader), p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+
+Custom with float parameters : custom(none url(fragment.shader), p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), p1 1.1, p2 2.2 3.3, p3 3.1 4.1 5.1, p4 4.1 5.2 6.3 7.4)'
+
+Custom with mesh size and number parameters : custom(none url(fragment.shader), 10 20, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'custom(none url(fragment.shader), 10 20, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 1
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader), 10 20, p1 1, p2 2 3, p3 3 4 5, p4 4 5 6 7)'
+
+Multiple with fragment shader : grayscale() custom(none url(fragment.shader)) sepia()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS removeBaseURL(declaration.getPropertyValue('-webkit-filter')) is 'grayscale() custom(none url(fragment.shader)) sepia()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+FAIL jsWrapperClass(filterRule.__proto__) should be CSSValueListPrototype. Was Object.
+FAIL jsWrapperClass(filterRule.constructor) should be CSSValueListConstructor. Was Function.
+PASS filterRule.length is 3
+FAIL subRule.operationType should be 2 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'grayscale()'
+FAIL subRule.operationType should be 12 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'custom(none url(fragment.shader))'
+FAIL subRule.operationType should be 3 (of type number). Was undefined (of type undefined).
+PASS removeBaseURL(subRule.cssText) is 'sepia()'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+Test the parsing of custom() function of the -webkit-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Empty function : custom()
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No values 1 : custom(,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No values 2 : custom(,,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many shaders 1 : custom(url(shader1) url(shader2) url(shader2))
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many shaders 2 : custom(none none none)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many shaders 3 : custom(none url(shader1) url(shader2) url(shader2))
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No shader : custom(none, 10 20)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many mesh sizes : custom(none, 10 20 30)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Wrong mesh-box type - 'padding' : custom(url(shader), padding)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Wrong mesh-box type - 'none' : custom(url(shader), none)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+More mesh-box types : custom(url(shader), padding-box filter-box)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Wrong order for mesh-detached and mesh-box type : custom(url(shader), detached padding-box)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Wrong order for mesh size and mesh-box type : custom(url(shader), padding-box 10)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many mesh sizes with mesh-box type : custom(url(shader), 20 30 40 padding-box)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Invalid comma between mesh-sizes : custom(url(shader), 20, 40 padding-box)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Invalid comma before mesh type : custom(url(shader), 20, padding-box)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No mesh parameter : custom(url(shader), )
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Wrong mesh type - correct identifier is 'detached' : custom(url(shader), detach)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No mesh size : custom(url(shader), , p1 2)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Negative single mesh size : custom(url(shader), -10)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Negative both mesh sizes : custom(url(shader), -10 -10)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Negative and positive mesh size : custom(url(shader), -10 10)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Zero single mesh size : custom(url(shader), 0)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Zero both mesh sizes : custom(url(shader), 0 0)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+0 and 1 mesh sizes : custom(url(shader), 0 1)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Too many parameter values : custom(url(shader), p1 1 2 3 4 5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Invalid parameter types : custom(url(shader), p1 1.0 2.0 'text')
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No parameter value 1 : custom(url(shader), p1)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
+No parameter value 2 : custom(url(shader), p1, p2, p3)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+Test that the custom() function of the -webkit-filter property is not parsed when CSS Custom Filter is disabled.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Custom with vertex shader : custom(url(vertex.shader))
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+Multiple with fragment shader : grayscale() custom(none url(fragment.shader)) sepia()
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
BUGWK74137 : fast/regions/webkit-flow-inlines-inside-regions-bounds.html = PASS FAIL MISSING
// CSS custom() filters are not currently supported
-BUGWK71392 SKIP : css3/filters/custom = FAIL
+BUGWK71392 WIN : css3/filters/custom = FAIL
// <style scoped> not yet enabled.
BUGWK49142 SKIP : fast/css/style-scoped = PASS
+2012-03-21 Alexandru Chiculita <achicu@adobe.com>
+
+ [CSS Shaders] Make CSS Shaders compile on Chromium
+ https://bugs.webkit.org/show_bug.cgi?id=81435
+
+ Reviewed by Stephen White.
+
+ This patch enables the CSS Shaders compile time flag, but keeps the runtime flag disabled.
+ The only way to test the functionality now is to use the overridePreference from dump render tree.
+
+ Also part of this patch I fix a layering violation: I removed the "Document" reference from the FECustomFilter.cpp and passed the
+ HostWindow directly. There should be no problem when the HostWindow changes, because the RenderLayer and the FECustomFilter
+ get recreated anyway.
+
+ No new tests. I've updated the existing custom filter tests to run under Chromium and added the expected results.
+ I've just added window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1") to force
+ enable the feature at runtime.
+
+ * loader/cache/CachedResource.cpp: Made CachedResource::ShaderResource report as ResourceRequest::TargetIsSubresource for Chromium.
+ (WebCore::cachedResourceTypeToTargetType):
+
+ * platform/graphics/filters/FECustomFilter.cpp:
+ (WebCore::FECustomFilter::FECustomFilter): Removed Document and just used the HostWindow directly.
+ (WebCore::FECustomFilter::create):
+ (WebCore::FECustomFilter::initializeContext):
+ (WebCore::FECustomFilter::bindVertexAttribute): There was a typo and instead of using the "size" parameter it always used 4 component attribute.
+ Other drivers didn't complain about it, but it was clearly a bug.
+ (WebCore::FECustomFilter::bindProgramAndBuffers): Reading the image back from GPU will flip vertically the framebuffer in Chromium. I've flipped the
+ projection matrix only on Chromium, so that we get the correct result.
+
+ * rendering/FilterEffectRenderer.cpp:
+ (WebCore::FilterEffectRenderer::build): Passing the HostWindow instead of the Document.
+
2012-03-21 Mark Pilgrim <pilgrim@chromium.org>
Realphabetize about webaudio move
return ResourceRequest::TargetIsFontResource;
case CachedResource::ImageResource:
return ResourceRequest::TargetIsImage;
+#if ENABLE(CSS_SHADERS)
+ case CachedResource::ShaderResource:
+#endif
case CachedResource::RawResource:
return ResourceRequest::TargetIsSubresource;
#if ENABLE(LINK_PREFETCH)
#if ENABLE(CSS_SHADERS) && ENABLE(WEBGL)
#include "FECustomFilter.h"
-#include "CachedShader.h"
#include "CustomFilterMesh.h"
#include "CustomFilterNumberParameter.h"
#include "CustomFilterParameter.h"
#include "CustomFilterProgram.h"
#include "CustomFilterShader.h"
-#include "Document.h"
#include "DrawingBuffer.h"
-#include "FrameView.h"
#include "GraphicsContext3D.h"
#include "ImageData.h"
#include "RenderTreeAsText.h"
-#include "StyleCachedShader.h"
#include "TextStream.h"
#include "Texture.h"
#include "TilingData.h"
matrix.setM44(1.0f);
}
-FECustomFilter::FECustomFilter(Filter* filter, Document* document, PassRefPtr<CustomFilterProgram> program, const CustomFilterParameterList& parameters,
+FECustomFilter::FECustomFilter(Filter* filter, HostWindow* hostWindow, PassRefPtr<CustomFilterProgram> program, const CustomFilterParameterList& parameters,
unsigned meshRows, unsigned meshColumns, CustomFilterOperation::MeshBoxType meshBoxType,
CustomFilterOperation::MeshType meshType)
: FilterEffect(filter)
- , m_document(document)
+ , m_hostWindow(hostWindow)
, m_program(program)
, m_parameters(parameters)
, m_meshRows(meshRows)
{
}
-PassRefPtr<FECustomFilter> FECustomFilter::create(Filter* filter, Document* document, PassRefPtr<CustomFilterProgram> program, const CustomFilterParameterList& parameters,
+PassRefPtr<FECustomFilter> FECustomFilter::create(Filter* filter, HostWindow* hostWindow, PassRefPtr<CustomFilterProgram> program, const CustomFilterParameterList& parameters,
unsigned meshRows, unsigned meshColumns, CustomFilterOperation::MeshBoxType meshBoxType,
CustomFilterOperation::MeshType meshType)
{
- return adoptRef(new FECustomFilter(filter, document, program, parameters, meshRows, meshColumns, meshBoxType, meshType));
+ return adoptRef(new FECustomFilter(filter, hostWindow, program, parameters, meshRows, meshColumns, meshBoxType, meshType));
}
void FECustomFilter::platformApplySoftware()
attributes.premultipliedAlpha = false;
ASSERT(!m_context.get());
- m_context = GraphicsContext3D::create(attributes, m_document->view()->root()->hostWindow(), GraphicsContext3D::RenderOffscreen);
+ m_context = GraphicsContext3D::create(attributes, m_hostWindow, GraphicsContext3D::RenderOffscreen);
m_drawingBuffer = DrawingBuffer::create(m_context.get(), contextSize, !attributes.preserveDrawingBuffer);
m_shader = m_program->createShaderWithContext(m_context.get());
void FECustomFilter::bindVertexAttribute(int attributeLocation, unsigned size, unsigned& offset)
{
if (attributeLocation != -1) {
- m_context->vertexAttribPointer(attributeLocation, 4, GraphicsContext3D::FLOAT, false, m_mesh->bytesPerVertex(), offset);
+ m_context->vertexAttribPointer(attributeLocation, size, GraphicsContext3D::FLOAT, false, m_mesh->bytesPerVertex(), offset);
m_context->enableVertexAttribArray(attributeLocation);
}
offset += size * sizeof(float);
if (m_shader->projectionMatrixLocation() != -1) {
TransformationMatrix projectionMatrix;
+#if PLATFORM(CHROMIUM)
+ // We flip-y the projection matrix here because Chromium will flip-y the resulting image for us.
+ orthogonalProjectionMatrix(projectionMatrix, -0.5, 0.5, 0.5, -0.5);
+#else
orthogonalProjectionMatrix(projectionMatrix, -0.5, 0.5, -0.5, 0.5);
+#endif
float glProjectionMatrix[16];
projectionMatrix.toColumnMajorFloatArray(glProjectionMatrix);
m_context->uniformMatrix4fv(m_shader->projectionMatrixLocation(), 1, false, &glProjectionMatrix[0]);
class CustomFilterNumberParameter;
class CustomFilterProgram;
class CustomFilterShader;
-class Document;
class DrawingBuffer;
class GraphicsContext3D;
+class HostWindow;
class IntSize;
class Texture;
class FECustomFilter : public FilterEffect {
public:
- static PassRefPtr<FECustomFilter> create(Filter*, Document*, PassRefPtr<CustomFilterProgram>, const CustomFilterParameterList&,
+ static PassRefPtr<FECustomFilter> create(Filter*, HostWindow*, PassRefPtr<CustomFilterProgram>, const CustomFilterParameterList&,
unsigned meshRows, unsigned meshColumns, CustomFilterOperation::MeshBoxType,
CustomFilterOperation::MeshType);
virtual TextStream& externalRepresentation(TextStream&, int indention) const;
private:
- FECustomFilter(Filter*, Document*, PassRefPtr<CustomFilterProgram>, const CustomFilterParameterList&,
+ FECustomFilter(Filter*, HostWindow*, PassRefPtr<CustomFilterProgram>, const CustomFilterParameterList&,
unsigned meshRows, unsigned meshColumns, CustomFilterOperation::MeshBoxType,
CustomFilterOperation::MeshType);
void bindProgramParameters();
void bindProgramAndBuffers(ByteArray* srcPixelArray);
- Document* m_document;
+ HostWindow* m_hostWindow;
RefPtr<GraphicsContext3D> m_context;
RefPtr<DrawingBuffer> m_drawingBuffer;
#include "CustomFilterProgram.h"
#include "CustomFilterOperation.h"
#include "FECustomFilter.h"
+#include "FrameView.h"
#include "Settings.h"
#endif
cachedCustomFilterPrograms.append(program);
program->addClient(this);
if (program->isLoaded()) {
- effect = FECustomFilter::create(this, document, program, customFilterOperation->parameters(),
+ effect = FECustomFilter::create(this, document->view()->root()->hostWindow(), program, customFilterOperation->parameters(),
customFilterOperation->meshRows(), customFilterOperation->meshColumns(),
customFilterOperation->meshBoxType(), customFilterOperation->meshType());
}
+2012-03-21 Alexandru Chiculita <achicu@adobe.com>
+
+ [CSS Shaders] Make CSS Shaders compile on Chromium
+ https://bugs.webkit.org/show_bug.cgi?id=81435
+
+ Reviewed by Stephen White.
+
+ I've added the ENABLE_CSS_SHADERS flag by default, but kept CSS Shaders disabled using the runtime flag.
+
+ This change adds a new public API to WebSettings with syntax void setExperimentalCSSCustomFilterEnabled(bool).
+
+ * features.gypi:
+ * public/WebSettings.h:
+ * src/WebSettingsImpl.cpp:
+ (WebKit::WebSettingsImpl::setExperimentalCSSCustomFilterEnabled):
+ (WebKit):
+ * src/WebSettingsImpl.h:
+ (WebSettingsImpl):
+
2012-03-21 David Reveman <reveman@chromium.org>
[Chromium] GL_EXT_occlusion_query_boolean and GL_CHROMIUM_command_buffer_query support.
'ENABLE_BLOB_SLICE=1',
'ENABLE_CHANNEL_MESSAGING=1',
'ENABLE_CSS_FILTERS=1',
+ 'ENABLE_CSS_SHADERS=1',
'ENABLE_DASHBOARD_SUPPORT=0',
'ENABLE_DATA_TRANSFER_ITEMS=1',
'ENABLE_DETAILS=1',
virtual void setWebAudioEnabled(bool) = 0;
virtual void setExperimentalWebGLEnabled(bool) = 0;
virtual void setExperimentalCSSRegionsEnabled(bool) = 0;
+ virtual void setExperimentalCSSCustomFilterEnabled(bool) = 0;
virtual void setOpenGLMultisamplingEnabled(bool) = 0;
virtual void setPrivilegedWebGLExtensionsEnabled(bool) = 0;
virtual void setWebGLErrorsToConsoleEnabled(bool) = 0;
m_settings->setCSSRegionsEnabled(enabled);
}
+void WebSettingsImpl::setExperimentalCSSCustomFilterEnabled(bool enabled)
+{
+ m_settings->setCSSCustomFilterEnabled(enabled);
+}
+
void WebSettingsImpl::setOpenGLMultisamplingEnabled(bool enabled)
{
m_settings->setOpenGLMultisamplingEnabled(enabled);
virtual void setWebAudioEnabled(bool);
virtual void setExperimentalWebGLEnabled(bool);
virtual void setExperimentalCSSRegionsEnabled(bool);
+ virtual void setExperimentalCSSCustomFilterEnabled(bool);
virtual void setOpenGLMultisamplingEnabled(bool);
virtual void setPrivilegedWebGLExtensionsEnabled(bool);
virtual void setWebGLErrorsToConsoleEnabled(bool);
+2012-03-21 Alexandru Chiculita <achicu@adobe.com>
+
+ [CSS Shaders] Make CSS Shaders compile on Chromium
+ https://bugs.webkit.org/show_bug.cgi?id=81435
+
+ Reviewed by Stephen White.
+
+ I've added WebKitCSSCustomFilterEnabled support for the layoutTestController.overridePreference function.
+
+ * DumpRenderTree/chromium/LayoutTestController.cpp:
+ (LayoutTestController::overridePreference):
+ * DumpRenderTree/chromium/WebPreferences.cpp:
+ (WebPreferences::reset):
+ (WebPreferences::applyTo):
+ * DumpRenderTree/chromium/WebPreferences.h:
+ (WebPreferences):
+
2012-03-21 Dirk Pranke <dpranke@chromium.org>
webkitpy: clean up actually getting crash logs from DRT/WTR crashes
prefs->allowRunningOfInsecureContent = cppVariantToBool(value);
else if (key == "WebKitHixie76WebSocketProtocolEnabled")
prefs->hixie76WebSocketProtocolEnabled = cppVariantToBool(value);
+ else if (key == "WebKitCSSCustomFilterEnabled")
+ prefs->cssCustomFilterEnabled = cppVariantToBool(value);
else if (key == "WebKitWebAudioEnabled") {
ASSERT(cppVariantToBool(value));
} else {
hixie76WebSocketProtocolEnabled = true;
perTilePaintingEnabled = false;
mockScrollbarsEnabled = false;
+ cssCustomFilterEnabled = false;
}
static void setStandardFontFamilyWrapper(WebSettings* settings, const WebKit::WebString& font, UScriptCode script)
settings->setDeveloperExtrasEnabled(developerExtrasEnabled);
settings->setExperimentalWebGLEnabled(experimentalWebGLEnabled);
settings->setExperimentalCSSRegionsEnabled(experimentalCSSRegionsEnabled);
+ settings->setExperimentalCSSCustomFilterEnabled(cssCustomFilterEnabled);
settings->setJavaEnabled(javaEnabled);
settings->setJavaScriptCanAccessClipboard(javaScriptCanAccessClipboard);
settings->setJavaScriptCanOpenWindowsAutomatically(javaScriptCanOpenWindowsAutomatically);
bool hixie76WebSocketProtocolEnabled;
bool perTilePaintingEnabled;
bool mockScrollbarsEnabled;
+ bool cssCustomFilterEnabled;
WebPreferences() { reset(); }
void reset();