"image-src" support is missing. We only support "-webkit-image-src"
authordino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 2 Jul 2016 00:22:15 +0000 (00:22 +0000)
committerdino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 2 Jul 2016 00:22:15 +0000 (00:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=159373
<rdar://problem/27140443>

Patch by Brent Fulgham and Dean Jackson.
Reviewed by Dean Jackson and Brent Fulgham.

Source/WebCore:

Support unprefixed image-set.

Test: fast/css/image-set-unprefixed.html

* css/CSSImageSetValue.cpp:
(WebCore::CSSImageSetValue::customCSSText):
* css/CSSParser.cpp:
(WebCore::isImageSetFunctionValue): New helper function
that checks prefixed and unprefixed form.
(WebCore::CSSParser::parseValue): Use the helper.
(WebCore::CSSParser::parseContent):
(WebCore::CSSParser::parseFillImage):
(WebCore::CSSParser::parseBorderImage):

LayoutTests:

Convert some existing tests to use the unprefixed form,
and add a test that checks we are compatible with
the prefixed form.

* cssom/cssvalue-comparison-expected.txt:
* cssom/cssvalue-comparison.html:
* fast/css/cursor-parsing-image-set-expected.txt:
* fast/css/cursor-parsing-image-set.html:
* fast/css/image-set-setting-expected.txt:
* fast/css/image-set-unprefixed-expected.txt: Added.
* fast/css/image-set-unprefixed.html: Added.
* fast/css/script-tests/image-set-setting.js:
(testImageSetRule):

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

12 files changed:
LayoutTests/ChangeLog
LayoutTests/cssom/cssvalue-comparison-expected.txt
LayoutTests/cssom/cssvalue-comparison.html
LayoutTests/fast/css/cursor-parsing-image-set-expected.txt
LayoutTests/fast/css/cursor-parsing-image-set.html
LayoutTests/fast/css/image-set-setting-expected.txt
LayoutTests/fast/css/image-set-unprefixed-expected.txt [new file with mode: 0644]
LayoutTests/fast/css/image-set-unprefixed.html [new file with mode: 0644]
LayoutTests/fast/css/script-tests/image-set-setting.js
Source/WebCore/ChangeLog
Source/WebCore/css/CSSImageSetValue.cpp
Source/WebCore/css/CSSParser.cpp

index da3a886..742c775 100644 (file)
@@ -1,3 +1,26 @@
+2016-07-01  Dean Jackson  <dino@apple.com>
+
+        "image-src" support is missing. We only support "-webkit-image-src"
+        https://bugs.webkit.org/show_bug.cgi?id=159373
+        <rdar://problem/27140443>
+
+        Patch by Brent Fulgham and Dean Jackson.
+        Reviewed by Dean Jackson and Brent Fulgham.
+
+        Convert some existing tests to use the unprefixed form,
+        and add a test that checks we are compatible with
+        the prefixed form.
+
+        * cssom/cssvalue-comparison-expected.txt:
+        * cssom/cssvalue-comparison.html:
+        * fast/css/cursor-parsing-image-set-expected.txt:
+        * fast/css/cursor-parsing-image-set.html:
+        * fast/css/image-set-setting-expected.txt:
+        * fast/css/image-set-unprefixed-expected.txt: Added.
+        * fast/css/image-set-unprefixed.html: Added.
+        * fast/css/script-tests/image-set-setting.js:
+        (testImageSetRule):
+
 2016-07-01  Ryan Haddad  <ryanhaddad@apple.com>
 
         Land test expectations for rdar://problem/27141291.
index 831cf1e..d1db1e3 100644 (file)
@@ -98,6 +98,9 @@ PASS Two CSSValues "inline-box" and "font" for property "-webkit-line-box-contai
 PASS Two CSSValues "-webkit-image-set(url(dummy://test.png) 1x, url(dummy://test.png) 2x)" for property "background-image" are equal. 
 PASS Two CSSValues "-webkit-image-set(url(dummy://small.png) 2x, url(dummy://big.png) 3x)" for property "background-image" are equal. 
 PASS Two CSSValues "-webkit-image-set(url(dummy://test.png) 1x, url(dummy://test.png) 2x)" and "-webkit-image-set(url(dummy://small.png) 2x, url(dummy://big.png) 3x)" for property "background-image" are not equal. 
+PASS Two CSSValues "image-set(url(dummy://test.png) 1x, url(dummy://test.png) 2x)" for property "background-image" are equal. 
+PASS Two CSSValues "image-set(url(dummy://small.png) 2x, url(dummy://big.png) 3x)" for property "background-image" are equal. 
+PASS Two CSSValues "image-set(url(dummy://test.png) 1x, url(dummy://test.png) 2x)" and "image-set(url(dummy://small.png) 2x, url(dummy://big.png) 3x)" for property "background-image" are not equal. 
 PASS Two CSSValues "grayscale(100%) sepia(100%)" for property "-webkit-filter" are equal. 
 PASS Two CSSValues "sepia(10%) grayscale(50%)" for property "-webkit-filter" are equal. 
 PASS Two CSSValues "grayscale(100%) sepia(100%)" and "sepia(10%) grayscale(50%)" for property "-webkit-filter" are not equal. 
index db26591..34e532d 100644 (file)
@@ -59,6 +59,7 @@ function run() {
                   {"-webkit-transform" : ["rotate(30deg)", "translate(50px,50px)", "scale(2,4)", "skew(30deg,20deg)", "matrix(0.4,0.5,-0.5,0.4,0,0)"]}, // transforms
                   {"-webkit-line-box-contain" : ["inline-box", "font", "glyphs", "replaced"]}, // line-box-contain
                   {"background-image" : ["-webkit-image-set(url(dummy://test.png) 1x, url(dummy://test.png) 2x)", "-webkit-image-set(url(dummy://small.png) 2x, url(dummy://big.png) 3x)"]}, // image set
+                  {"background-image" : ["image-set(url(dummy://test.png) 1x, url(dummy://test.png) 2x)", "image-set(url(dummy://small.png) 2x, url(dummy://big.png) 3x)"]}, // image set
                   {"-webkit-filter" : ["grayscale(100%) sepia(100%)", "sepia(10%) grayscale(50%)"]}, // filter
                   {"-webkit-dashboard-region" : ["dashboard-region(label circle)", "dashboard-region(label circle 1px 2px 3px 4px) dashboard-region(label rectangle 5px 6px 7px 8px)"]} // dashboard region
                 ];
index 72643c6..dd03b66 100644 (file)
@@ -6,10 +6,10 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 Bug 99493
 
 Test a bunch of cursor rules which should round-trip exactly.
-PASS roundtripCssRule("cursor: -webkit-image-set(url(file:///foo.png) 1x), auto;") is "cursor: -webkit-image-set(url(file:///foo.png) 1x), auto;"
-PASS roundtripCssRule("cursor: -webkit-image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x), auto;") is "cursor: -webkit-image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x), auto;"
-PASS roundtripCssRule("cursor: -webkit-image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x) 2 3, auto;") is "cursor: -webkit-image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x) 2 3, auto;"
-PASS roundtripCssRule("cursor: -webkit-image-set(url(file:///foo03.png) 0.3x, url(file:///foo5x.png) 5x) 6 5, url(file:///foo.png) 12 3, pointer;") is "cursor: -webkit-image-set(url(file:///foo03.png) 0.3x, url(file:///foo5x.png) 5x) 6 5, url(file:///foo.png) 12 3, pointer;"
+PASS roundtripCssRule("cursor: image-set(url(file:///foo.png) 1x), auto;") is "cursor: image-set(url(file:///foo.png) 1x), auto;"
+PASS roundtripCssRule("cursor: image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x), auto;") is "cursor: image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x), auto;"
+PASS roundtripCssRule("cursor: image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x) 2 3, auto;") is "cursor: image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x) 2 3, auto;"
+PASS roundtripCssRule("cursor: image-set(url(file:///foo03.png) 0.3x, url(file:///foo5x.png) 5x) 6 5, url(file:///foo.png) 12 3, pointer;") is "cursor: image-set(url(file:///foo03.png) 0.3x, url(file:///foo5x.png) 5x) 6 5, url(file:///foo.png) 12 3, pointer;"
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 2cda46f..b360e22 100644 (file)
@@ -36,10 +36,10 @@ function roundtripCssRule(cssText)
 // to avoid triggering any network activity.
 
 debug('Test a bunch of cursor rules which should round-trip exactly.');
-testCursorRule('-webkit-image-set(url(file:///foo.png) 1x), auto');
-testCursorRule('-webkit-image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x), auto');
-testCursorRule('-webkit-image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x) 2 3, auto');
-testCursorRule('-webkit-image-set(url(file:///foo03.png) 0.3x, url(file:///foo5x.png) 5x) 6 5, url(file:///foo.png) 12 3, pointer');
+testCursorRule('image-set(url(file:///foo.png) 1x), auto');
+testCursorRule('image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x), auto');
+testCursorRule('image-set(url(file:///foo.png) 1x, url(file:///foo2x.png) 2x) 2 3, auto');
+testCursorRule('image-set(url(file:///foo03.png) 0.3x, url(file:///foo5x.png) 5x) 6 5, url(file:///foo.png) 12 3, pointer');
 
 successfullyParsed = true;
 </script>
index 7f503f3..041e725 100644 (file)
@@ -1,23 +1,23 @@
-Test the setting of the -webkit-image-set function.
+Test the setting of the image-set function.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
 
 Single value for background-image : url(http://www.webkit.org/a) 1x
-PASS testComputedStyle("background-image", "-webkit-image-set(url(http://www.webkit.org/a) 1x)") is "-webkit-image-set(url(http://www.webkit.org/a) 1x)"
+PASS testComputedStyle("background-image", "image-set(url(http://www.webkit.org/a) 1x)") is "image-set(url(http://www.webkit.org/a) 1x)"
 
 Multiple values for background-image : url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x
-PASS testComputedStyle("background-image", "-webkit-image-set(url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x)") is "-webkit-image-set(url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x)"
+PASS testComputedStyle("background-image", "image-set(url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x)") is "image-set(url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x)"
 
 Multiple values for background-image, out of order : url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x
-PASS testComputedStyle("background-image", "-webkit-image-set(url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x)") is "-webkit-image-set(url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x)"
+PASS testComputedStyle("background-image", "image-set(url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x)") is "image-set(url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x)"
 
 Duplicate values for background-image : url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x
-PASS testComputedStyle("background-image", "-webkit-image-set(url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x)") is "-webkit-image-set(url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x)"
+PASS testComputedStyle("background-image", "image-set(url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x)") is "image-set(url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x)"
 
 Fractional values for background-image : url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x
-PASS testComputedStyle("background-image", "-webkit-image-set(url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x)") is "-webkit-image-set(url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x)"
+PASS testComputedStyle("background-image", "image-set(url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x)") is "image-set(url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x)"
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/LayoutTests/fast/css/image-set-unprefixed-expected.txt b/LayoutTests/fast/css/image-set-unprefixed-expected.txt
new file mode 100644 (file)
index 0000000..288b486
--- /dev/null
@@ -0,0 +1,81 @@
+
+Single value for background-image : url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Multiple values for background-image : url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x
+Unprefixed: PASS
+Prefixed: PASS
+
+Multiple values for background-image, out of order : url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Duplicate values for background-image : url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Fractional values for background-image : url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x
+Unprefixed: PASS
+Prefixed: PASS
+
+Single value for cursor : url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Multiple values for cursor : url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x
+Unprefixed: PASS
+Prefixed: PASS
+
+Multiple values for cursor, out of order : url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Duplicate values for cursor : url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Fractional values for cursor : url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x
+Unprefixed: PASS
+Prefixed: PASS
+
+Single value for list-style-image : url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Multiple values for list-style-image : url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x
+Unprefixed: PASS
+Prefixed: PASS
+
+Multiple values for list-style-image, out of order : url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Duplicate values for list-style-image : url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Fractional values for list-style-image : url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x
+Unprefixed: PASS
+Prefixed: PASS
+
+Single value for content : url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Multiple values for content : url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x
+Unprefixed: PASS
+Prefixed: PASS
+
+Multiple values for content, out of order : url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Duplicate values for content : url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x
+Unprefixed: PASS
+Prefixed: PASS
+
+Fractional values for content : url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x
+Unprefixed: PASS
+Prefixed: PASS
+
diff --git a/LayoutTests/fast/css/image-set-unprefixed.html b/LayoutTests/fast/css/image-set-unprefixed.html
new file mode 100644 (file)
index 0000000..f2e2d0b
--- /dev/null
@@ -0,0 +1,120 @@
+<pre id="output"></pre>
+<script>
+function debug(msg)
+{
+    var output = document.getElementById("output");
+    output.appendChild(document.createTextNode(msg + "\n"));
+}
+
+function testComputedStyle(property, fullRule)
+{
+    var div = document.createElement("div");
+    document.body.appendChild(div);
+    div.setAttribute("style", property + ": " + fullRule);
+    var computedValue = div.style[property];
+    document.body.removeChild(div);
+    return computedValue;
+}
+
+function testImageSetRule(description, property, rule, expected)
+{
+    debug("");
+    debug(`${description} : ${rule}`);
+
+    var rule = `image-set(${rule})`;
+    if (testComputedStyle(property, rule) == rule)
+        debug("Unprefixed: PASS");
+    else
+        debug("Unprefixed: FAIL");
+
+    if (testComputedStyle(property, "-webkit-" + rule) == rule)
+        debug("Prefixed: PASS");
+    else
+        debug("Prefixed: FAIL");
+}
+
+if (window.testRunner)
+    window.testRunner.dumpAsText();
+
+testImageSetRule("Single value for background-image",
+                "background-image",
+                "url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Multiple values for background-image",
+                "background-image",
+                "url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x");
+
+testImageSetRule("Multiple values for background-image, out of order",
+                "background-image",
+                "url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Duplicate values for background-image",
+                "background-image",
+                "url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Fractional values for background-image",
+                "background-image",
+                "url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x");
+
+testImageSetRule("Single value for cursor",
+                "cursor",
+                "url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Multiple values for cursor",
+                "cursor",
+                "url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x");
+
+testImageSetRule("Multiple values for cursor, out of order",
+                "cursor",
+                "url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Duplicate values for cursor",
+                "cursor",
+                "url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Fractional values for cursor",
+                "cursor",
+                "url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x");
+
+testImageSetRule("Single value for list-style-image",
+                "list-style-image",
+                "url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Multiple values for list-style-image",
+                "list-style-image",
+                "url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x");
+
+testImageSetRule("Multiple values for list-style-image, out of order",
+                "list-style-image",
+                "url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Duplicate values for list-style-image",
+                "list-style-image",
+                "url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Fractional values for list-style-image",
+                "list-style-image",
+                "url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x");
+
+testImageSetRule("Single value for content",
+                "content",
+                "url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Multiple values for content",
+                "content",
+                "url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x");
+
+testImageSetRule("Multiple values for content, out of order",
+                "content",
+                "url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Duplicate values for content",
+                "content",
+                "url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");
+
+testImageSetRule("Fractional values for content",
+                "content",
+                "url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x");
+
+
+</script>
index 1488e25..099dd26 100644 (file)
@@ -1,4 +1,4 @@
-description("Test the setting of the -webkit-image-set function.");
+description("Test the setting of the image-set function.");
 
 function testComputedStyle(property, fullRule)
 {
@@ -15,7 +15,7 @@ function testImageSetRule(description, property, rule, expected)
     debug("");
     debug(description + " : " + rule);
 
-    var fullRule = "-webkit-image-set(" + rule + ")";
+    var fullRule = "image-set(" + rule + ")";
     shouldBeEqualToString('testComputedStyle("' + property + '", "' + fullRule + '")', fullRule);
 }
 
index bc92b83..6a94c6c 100644 (file)
@@ -1,3 +1,26 @@
+2016-07-01  Dean Jackson  <dino@apple.com>
+
+        "image-src" support is missing. We only support "-webkit-image-src"
+        https://bugs.webkit.org/show_bug.cgi?id=159373
+        <rdar://problem/27140443>
+
+        Patch by Brent Fulgham and Dean Jackson.
+        Reviewed by Dean Jackson and Brent Fulgham.
+
+        Support unprefixed image-set.
+
+        Test: fast/css/image-set-unprefixed.html
+
+        * css/CSSImageSetValue.cpp:
+        (WebCore::CSSImageSetValue::customCSSText):
+        * css/CSSParser.cpp:
+        (WebCore::isImageSetFunctionValue): New helper function
+        that checks prefixed and unprefixed form.
+        (WebCore::CSSParser::parseValue): Use the helper.
+        (WebCore::CSSParser::parseContent):
+        (WebCore::CSSParser::parseFillImage):
+        (WebCore::CSSParser::parseBorderImage):
+
 2016-07-01  Chris Dumez  <cdumez@apple.com>
 
         Possible null Range dereference under AXObjectCache::visiblePositionFromCharacterOffset()
index 0d50ffd..5966861 100644 (file)
@@ -154,7 +154,7 @@ StyleImage* CSSImageSetValue::cachedOrPendingImageSet(const Document& document)
 String CSSImageSetValue::customCSSText() const
 {
     StringBuilder result;
-    result.appendLiteral("-webkit-image-set(");
+    result.appendLiteral("image-set(");
 
     size_t length = this->length();
     size_t i = 0;
index 8bc4993..2d72232 100644 (file)
@@ -1876,6 +1876,11 @@ RefPtr<CSSValue> CSSParser::parseVariableDependentValue(CSSPropertyID propID, co
     return nullptr;
 }
 
+static bool isImageSetFunctionValue(const CSSParserValue& value)
+{
+    return value.unit == CSSParserValue::Function && (equalLettersIgnoringASCIICase(value.function->name, "image-set(") || equalLettersIgnoringASCIICase(value.function->name, "-webkit-image-set("));
+}
+
 bool CSSParser::parseValue(CSSPropertyID propId, bool important)
 {
     if (!m_valueList || !m_valueList->current())
@@ -2092,7 +2097,7 @@ bool CSSParser::parseValue(CSSPropertyID propId, bool important)
                 if (!uri.isNull())
                     image = CSSImageValue::create(completeURL(uri));
 #if ENABLE(CSS_IMAGE_SET) && ENABLE(MOUSE_CURSOR_SCALE)
-            } else if (value->unit == CSSParserValue::Function && equalLettersIgnoringASCIICase(value->function->name, "-webkit-image-set(")) {
+            } else if (isImageSetFunctionValue(*value)) {
                 image = parseImageSet();
                 if (!image)
                     break;
@@ -2225,7 +2230,7 @@ bool CSSParser::parseValue(CSSPropertyID propId, bool important)
                 return false;
         }
 #if ENABLE(CSS_IMAGE_SET)
-        else if (valueWithCalculation.value().unit == CSSParserValue::Function && equalLettersIgnoringASCIICase(valueWithCalculation.value().function->name, "-webkit-image-set(")) {
+        else if (isImageSetFunctionValue(valueWithCalculation.value())) {
             parsedValue = parseImageSet();
             if (!parsedValue)
                 return false;
@@ -4254,7 +4259,7 @@ bool CSSParser::parseContent(CSSPropertyID propId, bool important)
                 if (!parsedValue)
                     return false;
 #if ENABLE(CSS_IMAGE_SET)
-            } else if (equalLettersIgnoringASCIICase(value->function->name, "-webkit-image-set(")) {
+            } else if (isImageSetFunctionValue(*value)) {
                 parsedValue = parseImageSet();
                 if (!parsedValue)
                     return false;
@@ -4352,7 +4357,7 @@ bool CSSParser::parseFillImage(CSSParserValueList& valueList, RefPtr<CSSValue>&
         return parseGeneratedImage(valueList, value);
     
 #if ENABLE(CSS_IMAGE_SET)
-    if (valueList.current()->unit == CSSParserValue::Function && equalLettersIgnoringASCIICase(valueList.current()->function->name, "-webkit-image-set(")) {
+    if (isImageSetFunctionValue(*valueList.current())) {
         value = parseImageSet();
         if (value)
             return true;
@@ -8302,7 +8307,7 @@ bool CSSParser::parseBorderImage(CSSPropertyID propId, RefPtr<CSSValue>& result,
                 else
                     return false;
 #if ENABLE(CSS_IMAGE_SET)
-            } else if (currentValue->unit == CSSParserValue::Function && equalLettersIgnoringASCIICase(currentValue->function->name, "-webkit-image-set(")) {
+            } else if (isImageSetFunctionValue(*currentValue)) {
                 RefPtr<CSSValue> value = parseImageSet();
                 if (value)
                     context.commitImage(value.releaseNonNull());