[CSS Shaders] Make CSS Shaders compile on Chromium
authorachicu@adobe.com <achicu@adobe.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 21 Mar 2012 22:28:53 +0000 (22:28 +0000)
committerachicu@adobe.com <achicu@adobe.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 21 Mar 2012 22:28:53 +0000 (22:28 +0000)
https://bugs.webkit.org/show_bug.cgi?id=81435

Source/WebCore:

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.

Source/WebKit/chromium:

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):

Tools:

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):

LayoutTests:

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.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@111610 268f45cc-cd09-0410-ab3c-d52691b4dbfc

54 files changed:
LayoutTests/ChangeLog
LayoutTests/css3/filters/custom/custom-filter-shader-cache.html
LayoutTests/css3/filters/custom/effect-custom-combined-missing.html
LayoutTests/css3/filters/custom/effect-custom-parameters.html
LayoutTests/css3/filters/custom/effect-custom.html
LayoutTests/css3/filters/custom/missing-custom-filter-shader.html
LayoutTests/css3/filters/script-tests/custom-filter-property-computed-style.js
LayoutTests/css3/filters/script-tests/custom-filter-property-parsing-invalid.js
LayoutTests/css3/filters/script-tests/custom-filter-property-parsing.js
LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-property-computed-style-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-property-parsing-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-property-parsing-invalid-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-combined-missing-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-combined-missing-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-disabled-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-parameters-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-parameters-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/missing-custom-filter-shader-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-linux/css3/filters/custom/missing-custom-filter-shader-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/custom-filter-shader-cache-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/custom-filter-shader-cache-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-combined-missing-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-combined-missing-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-parameters-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-parameters-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/filter-repaint-shaders-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/filter-repaint-shaders-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/missing-custom-filter-shader-expected.png [new file with mode: 0644]
LayoutTests/platform/chromium-mac/css3/filters/custom/missing-custom-filter-shader-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium/css3/filters/custom/custom-filter-property-computed-style-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium/css3/filters/custom/custom-filter-property-parsing-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium/css3/filters/custom/custom-filter-property-parsing-invalid-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium/css3/filters/custom/effect-custom-disabled-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium/test_expectations.txt
Source/WebCore/ChangeLog
Source/WebCore/loader/cache/CachedResource.cpp
Source/WebCore/platform/graphics/filters/FECustomFilter.cpp
Source/WebCore/platform/graphics/filters/FECustomFilter.h
Source/WebCore/rendering/FilterEffectRenderer.cpp
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/features.gypi
Source/WebKit/chromium/public/WebSettings.h
Source/WebKit/chromium/src/WebSettingsImpl.cpp
Source/WebKit/chromium/src/WebSettingsImpl.h
Tools/ChangeLog
Tools/DumpRenderTree/chromium/LayoutTestController.cpp
Tools/DumpRenderTree/chromium/WebPreferences.cpp
Tools/DumpRenderTree/chromium/WebPreferences.h

index e40e19419ff6373f9644339374a57d993575bdd9..9149eebcbf1f8aa97c34dea9664252b23ef4bc58 100644 (file)
@@ -1,3 +1,58 @@
+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.
index 59d1e4665f48ef82bac1f8cc26788bd9f989bc68..4968607a42ceba0d2c532ddb1217df4f959298b0 100644 (file)
@@ -5,6 +5,7 @@
         <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();
index ed5c86c5f27dea17e9ab0eb4c0e6df8840108259..0ca95341ed3e5fe067b51181195718d9308fb71c 100644 (file)
@@ -4,9 +4,8 @@
         <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();
             }
index cd69aed344457b4fb8382b96e0c80fcade7654aa..4975c79f3a5fc40a491f849984bac195e0339330 100644 (file)
@@ -4,9 +4,8 @@
         <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();
             }
index 19c6e02b6ee822e86d4c1ebfb9b50b5f275999a0..9bc91ec673c709214f4b80710f22a86a1d892d9e 100644 (file)
@@ -4,9 +4,8 @@
         <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();
             }
index acbc948a03190cc8844d0a5dfecb54247d70a85f..ba227bec3c759c09a7cb6cf85159d2b46a89b5cb 100644 (file)
@@ -5,6 +5,7 @@
         <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();
index 071fa0603d53698944f31d05d40355427f6aa864..16560a829aba0aa185e2aab376a01807c397fcc9 100644 (file)
@@ -1,5 +1,10 @@
 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)
index 8666fde40e710cbbbd09007793b0b1c641083895..c800b3c4554c67bb7a2c7637dee91747975547bd 100644 (file)
@@ -1,5 +1,10 @@
 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;
 
index 9b88587a36bfcfd88823937a982eb8561d22a488..3cab463d67e182e2e0d59e376745ce1efd87b82b 100644 (file)
@@ -1,5 +1,10 @@
 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)
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-property-computed-style-expected.txt b/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-property-computed-style-expected.txt
new file mode 100644 (file)
index 0000000..e82c08f
--- /dev/null
@@ -0,0 +1,193 @@
+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
+
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-property-parsing-expected.txt b/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-property-parsing-expected.txt
new file mode 100644 (file)
index 0000000..d893b7d
--- /dev/null
@@ -0,0 +1,134 @@
+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
+
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-property-parsing-invalid-expected.txt b/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-property-parsing-invalid-expected.txt
new file mode 100644 (file)
index 0000000..3444226
--- /dev/null
@@ -0,0 +1,154 @@
+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
+
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.png b/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.png
new file mode 100644 (file)
index 0000000..6997214
Binary files /dev/null and b/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.png differ
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.txt b/LayoutTests/platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.txt
new file mode 100644 (file)
index 0000000..cdc595d
--- /dev/null
@@ -0,0 +1,4 @@
+     
+     
+     
+    
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-combined-missing-expected.png b/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-combined-missing-expected.png
new file mode 100644 (file)
index 0000000..4a09c24
Binary files /dev/null and b/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-combined-missing-expected.png differ
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-combined-missing-expected.txt b/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-combined-missing-expected.txt
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-disabled-expected.txt b/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-disabled-expected.txt
new file mode 100644 (file)
index 0000000..413ce66
--- /dev/null
@@ -0,0 +1,17 @@
+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
+
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-expected.png b/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-expected.png
new file mode 100644 (file)
index 0000000..09b46fd
Binary files /dev/null and b/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-expected.png differ
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-expected.txt b/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-expected.txt
new file mode 100644 (file)
index 0000000..51f8a36
--- /dev/null
@@ -0,0 +1 @@
+       
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-parameters-expected.png b/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-parameters-expected.png
new file mode 100644 (file)
index 0000000..8f93ede
Binary files /dev/null and b/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-parameters-expected.png differ
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-parameters-expected.txt b/LayoutTests/platform/chromium-linux/css3/filters/custom/effect-custom-parameters-expected.txt
new file mode 100644 (file)
index 0000000..1b6ad6c
--- /dev/null
@@ -0,0 +1 @@
+      
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/missing-custom-filter-shader-expected.png b/LayoutTests/platform/chromium-linux/css3/filters/custom/missing-custom-filter-shader-expected.png
new file mode 100644 (file)
index 0000000..45b3dff
Binary files /dev/null and b/LayoutTests/platform/chromium-linux/css3/filters/custom/missing-custom-filter-shader-expected.png differ
diff --git a/LayoutTests/platform/chromium-linux/css3/filters/custom/missing-custom-filter-shader-expected.txt b/LayoutTests/platform/chromium-linux/css3/filters/custom/missing-custom-filter-shader-expected.txt
new file mode 100644 (file)
index 0000000..51f8a36
--- /dev/null
@@ -0,0 +1 @@
+       
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/custom-filter-shader-cache-expected.png b/LayoutTests/platform/chromium-mac/css3/filters/custom/custom-filter-shader-cache-expected.png
new file mode 100644 (file)
index 0000000..91652d5
Binary files /dev/null and b/LayoutTests/platform/chromium-mac/css3/filters/custom/custom-filter-shader-cache-expected.png differ
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/custom-filter-shader-cache-expected.txt b/LayoutTests/platform/chromium-mac/css3/filters/custom/custom-filter-shader-cache-expected.txt
new file mode 100644 (file)
index 0000000..cdc595d
--- /dev/null
@@ -0,0 +1,4 @@
+     
+     
+     
+    
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-combined-missing-expected.png b/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-combined-missing-expected.png
new file mode 100644 (file)
index 0000000..41fa60b
Binary files /dev/null and b/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-combined-missing-expected.png differ
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-combined-missing-expected.txt b/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-combined-missing-expected.txt
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-expected.png b/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-expected.png
new file mode 100644 (file)
index 0000000..9ed5df7
Binary files /dev/null and b/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-expected.png differ
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-expected.txt b/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-expected.txt
new file mode 100644 (file)
index 0000000..51f8a36
--- /dev/null
@@ -0,0 +1 @@
+       
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-parameters-expected.png b/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-parameters-expected.png
new file mode 100644 (file)
index 0000000..4abf9de
Binary files /dev/null and b/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-parameters-expected.png differ
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-parameters-expected.txt b/LayoutTests/platform/chromium-mac/css3/filters/custom/effect-custom-parameters-expected.txt
new file mode 100644 (file)
index 0000000..1b6ad6c
--- /dev/null
@@ -0,0 +1 @@
+      
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/filter-repaint-shaders-expected.png b/LayoutTests/platform/chromium-mac/css3/filters/custom/filter-repaint-shaders-expected.png
new file mode 100644 (file)
index 0000000..6ed3eb1
Binary files /dev/null and b/LayoutTests/platform/chromium-mac/css3/filters/custom/filter-repaint-shaders-expected.png differ
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/filter-repaint-shaders-expected.txt b/LayoutTests/platform/chromium-mac/css3/filters/custom/filter-repaint-shaders-expected.txt
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/missing-custom-filter-shader-expected.png b/LayoutTests/platform/chromium-mac/css3/filters/custom/missing-custom-filter-shader-expected.png
new file mode 100644 (file)
index 0000000..8805a66
Binary files /dev/null and b/LayoutTests/platform/chromium-mac/css3/filters/custom/missing-custom-filter-shader-expected.png differ
diff --git a/LayoutTests/platform/chromium-mac/css3/filters/custom/missing-custom-filter-shader-expected.txt b/LayoutTests/platform/chromium-mac/css3/filters/custom/missing-custom-filter-shader-expected.txt
new file mode 100644 (file)
index 0000000..51f8a36
--- /dev/null
@@ -0,0 +1 @@
+       
diff --git a/LayoutTests/platform/chromium/css3/filters/custom/custom-filter-property-computed-style-expected.txt b/LayoutTests/platform/chromium/css3/filters/custom/custom-filter-property-computed-style-expected.txt
new file mode 100644 (file)
index 0000000..e82c08f
--- /dev/null
@@ -0,0 +1,193 @@
+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
+
diff --git a/LayoutTests/platform/chromium/css3/filters/custom/custom-filter-property-parsing-expected.txt b/LayoutTests/platform/chromium/css3/filters/custom/custom-filter-property-parsing-expected.txt
new file mode 100644 (file)
index 0000000..d893b7d
--- /dev/null
@@ -0,0 +1,134 @@
+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
+
diff --git a/LayoutTests/platform/chromium/css3/filters/custom/custom-filter-property-parsing-invalid-expected.txt b/LayoutTests/platform/chromium/css3/filters/custom/custom-filter-property-parsing-invalid-expected.txt
new file mode 100644 (file)
index 0000000..3444226
--- /dev/null
@@ -0,0 +1,154 @@
+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
+
diff --git a/LayoutTests/platform/chromium/css3/filters/custom/effect-custom-disabled-expected.txt b/LayoutTests/platform/chromium/css3/filters/custom/effect-custom-disabled-expected.txt
new file mode 100644 (file)
index 0000000..413ce66
--- /dev/null
@@ -0,0 +1,17 @@
+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
+
index 99914ac065b9992492b67d780280578b53467f4d..e30bdbe8636f7828dffe8f1834e2d1bb1bc0739a 100644 (file)
@@ -3330,7 +3330,7 @@ BUGWK74137 : fast/regions/webkit-flow-inlines-inside-regions-bounds-vertical.htm
 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
index 766a58cc38ec9d680c49a7bfcf5cf4d6b6cb3279..b384be28c2269d5e4916abf10c6c57f8e45904c3 100644 (file)
@@ -1,3 +1,36 @@
+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
index a74dbd6aa41c51aaebc4f84c9bc927acd0e6f7a3..0368a724525fafe6490587beb2b4f6e6e9fcc6e6 100755 (executable)
@@ -106,6 +106,9 @@ static ResourceRequest::TargetType cachedResourceTypeToTargetType(CachedResource
         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)
index 9bf2495c0d92f6abd31e4f8f7e70cf39cd05125a..db8d3d91c188850816fbe063ad61a53e1d59e0d5 100644 (file)
 #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"
@@ -76,11 +72,11 @@ static void orthogonalProjectionMatrix(TransformationMatrix& matrix, float left,
     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)
@@ -90,11 +86,11 @@ FECustomFilter::FECustomFilter(Filter* filter, Document* document, PassRefPtr<Cu
 {
 }
 
-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()
@@ -145,7 +141,7 @@ void FECustomFilter::initializeContext(const IntSize& contextSize)
     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());
@@ -167,7 +163,7 @@ void FECustomFilter::resizeContext(const IntSize& newContextSize)
 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);
@@ -226,7 +222,12 @@ void FECustomFilter::bindProgramAndBuffers(ByteArray* srcPixelArray)
     
     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]);
index c977c8591c337b275924eb980cad202f88e280d9..496f044c2833e83c950c36205ebbc69fd35d5dd1 100644 (file)
@@ -48,15 +48,15 @@ class CustomFilterMesh;
 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);
 
@@ -66,7 +66,7 @@ public:
     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);
     
@@ -77,7 +77,7 @@ private:
     void bindProgramParameters();
     void bindProgramAndBuffers(ByteArray* srcPixelArray);
     
-    Document* m_document;
+    HostWindow* m_hostWindow;
     
     RefPtr<GraphicsContext3D> m_context;
     RefPtr<DrawingBuffer> m_drawingBuffer;
index 4a94d5dc5c915262adfd0cc70baed82fa72d4f96..259c358fc0ee1543499be68b99aa7480ff81e79f 100644 (file)
@@ -46,6 +46,7 @@
 #include "CustomFilterProgram.h"
 #include "CustomFilterOperation.h"
 #include "FECustomFilter.h"
+#include "FrameView.h"
 #include "Settings.h"
 #endif
 
@@ -258,7 +259,7 @@ void FilterEffectRenderer::build(Document* document, const FilterOperations& ope
             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());
             }
index ab9cf5ffbcf38bd72dca5ed6073d564f85bfa196..d059730f3272b95ca02e313cce2aa437494ef2e3 100644 (file)
@@ -1,3 +1,22 @@
+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.
index 1a41297329cb4eb8fd0673f362bb22311e477b3b..838bb0ab58b32ee923076dca9997363bfd9f652e 100644 (file)
@@ -37,6 +37,7 @@
       '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',
index 47aaeece0ae2098ec2a889351fac884181d97456..a619d55a9fa8bc287ae735d1c551153c29a5367a 100644 (file)
@@ -98,6 +98,7 @@ public:
     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;
index 3b3a84f98b8b94ff6a6a00ca5437002a735bfdf3..18f9ac37138eb2a132d31aaa211e6d4e00b75854 100644 (file)
@@ -298,6 +298,11 @@ void WebSettingsImpl::setExperimentalCSSRegionsEnabled(bool enabled)
     m_settings->setCSSRegionsEnabled(enabled);
 }
 
+void WebSettingsImpl::setExperimentalCSSCustomFilterEnabled(bool enabled)
+{
+    m_settings->setCSSCustomFilterEnabled(enabled);
+}
+
 void WebSettingsImpl::setOpenGLMultisamplingEnabled(bool enabled)
 {
     m_settings->setOpenGLMultisamplingEnabled(enabled);
index 7024b516439a7c9c7bfa6098e1a185bc010458fd..20b90dce7a135a54d010295cd227e103861b898a 100644 (file)
@@ -90,6 +90,7 @@ public:
     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);
index 7e6eaa39e5d0409a0645cacbb4367375611b16eb..3e0f2f191a147045a128f4d3ea3acd3d48c13997 100644 (file)
@@ -1,3 +1,20 @@
+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
index 55a1cb826428d237dacfc83698621d43ff1b38e0..0baaedeaf5fd29ff491dfa31387a2b3532ffeabd 100644 (file)
@@ -1554,6 +1554,8 @@ void LayoutTestController::overridePreference(const CppArgumentList& arguments,
         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 {
index 0e3ce6c5210b27f1fb753cf4ded800dfbcabcf37..e99c98ec1e3b3bccbca61736b1443765b2731474 100644 (file)
@@ -119,6 +119,7 @@ void WebPreferences::reset()
     hixie76WebSocketProtocolEnabled = true;
     perTilePaintingEnabled = false;
     mockScrollbarsEnabled = false;
+    cssCustomFilterEnabled = false;
 }
 
 static void setStandardFontFamilyWrapper(WebSettings* settings, const WebKit::WebString& font, UScriptCode script)
@@ -195,6 +196,7 @@ void WebPreferences::applyTo(WebView* webView)
     settings->setDeveloperExtrasEnabled(developerExtrasEnabled);
     settings->setExperimentalWebGLEnabled(experimentalWebGLEnabled);
     settings->setExperimentalCSSRegionsEnabled(experimentalCSSRegionsEnabled);
+    settings->setExperimentalCSSCustomFilterEnabled(cssCustomFilterEnabled);
     settings->setJavaEnabled(javaEnabled);
     settings->setJavaScriptCanAccessClipboard(javaScriptCanAccessClipboard);
     settings->setJavaScriptCanOpenWindowsAutomatically(javaScriptCanOpenWindowsAutomatically);
index 1cb9ab26c6fd9ddb4e52baa51037657fb3539f3a..60a57af59659bdbd225dd190d73e3a7d68691e0f 100644 (file)
@@ -112,6 +112,7 @@ struct WebPreferences {
     bool hixie76WebSocketProtocolEnabled;
     bool perTilePaintingEnabled;
     bool mockScrollbarsEnabled;
+    bool cssCustomFilterEnabled;
 
     WebPreferences() { reset(); }
     void reset();