[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

jchaffraix at webkit.org jchaffraix at webkit.org
Wed Dec 22 13:26:54 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit edabf3cbedb7269464311b4fb914c29aadb5aefa
Author: jchaffraix at webkit.org <jchaffraix at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Sep 15 22:31:49 2010 +0000

    WebCore: Parse system colors in the HTML5 canvas context.
    https://bugs.webkit.org/show_bug.cgi?id=39168
    
    Reviewed by Andreas Kling.
    
    Test: fast/css/test-setting-canvas-color.html
    
    Based on previous work by Jan Erik Hanssen  <jhanssen at codeaurora.org>
    
    * css/CSSParser.cpp:
    (WebCore::CSSParser::parseColor): Changed the function to better match our
    early return policy. Also we now return false when we don't parse the color.
    This is needed for createFromString to fallback to using parseSystemColor.
    
    (WebCore::CSSParser::parseSystemColor): Made use of the RenderTheme to get
    the system colors.
    
    * css/CSSParser.h: Added the new parseSystemColor method.
    
    * html/canvas/CanvasRenderingContext2D.cpp:
    (WebCore::CanvasRenderingContext2D::setStrokeColor): Pass the document to createFromString.
    (WebCore::CanvasRenderingContext2D::setFillColor): Ditto.
    * html/canvas/CanvasStyle.cpp:
    (WebCore::CanvasStyle::createFromString): Try to parse the color using CSSParser::parseColor
    and fall back to parseSystemColor if it did not work.
    
    * html/canvas/CanvasStyle.h: Added the new Document* parameter to createFromString.
    
    LayoutTests: Test for: Parse system colors in the HTML5 canvas context.
    https://bugs.webkit.org/show_bug.cgi?id=39168
    
    Reviewed by Andreas Kling.
    
    This tests that svg color, deprecated system color and different
    type of colors and invalid inputs are still parsed as such.
    
    * fast/css/test-setting-canvas-color-expected.txt: Added.
    * fast/css/test-setting-canvas-color.html: Added.
    * platform/mac/Skipped:
    * platform/qt/Skipped:
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@67570 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index a1249e3..ba5e57b 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,18 @@
+2010-09-15  Julien Chaffraix  <jchaffraix at codeaurora.org>
+
+        Reviewed by Andreas Kling.
+
+        Test for: Parse system colors in the HTML5 canvas context.
+        https://bugs.webkit.org/show_bug.cgi?id=39168
+
+        This tests that svg color, deprecated system color and different
+        type of colors and invalid inputs are still parsed as such.
+
+        * fast/css/test-setting-canvas-color-expected.txt: Added.
+        * fast/css/test-setting-canvas-color.html: Added.
+        * platform/mac/Skipped:
+        * platform/qt/Skipped:
+
 2010-09-14  Erik Arvidsson  <arv at chromium.org>
 
         Reviewed by Darin Adler.
diff --git a/LayoutTests/fast/css/test-setting-canvas-color-expected.txt b/LayoutTests/fast/css/test-setting-canvas-color-expected.txt
new file mode 100644
index 0000000..aa2b89d
--- /dev/null
+++ b/LayoutTests/fast/css/test-setting-canvas-color-expected.txt
@@ -0,0 +1,221 @@
+Test case for bug 39168. This tests the CSS color parsing code using <canvas>.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Setting color to ActiveBorder was successfully set.
+PASS Setting color to activeborder was successfully set.
+PASS Setting color to ActiveCaption was successfully set.
+PASS Setting color to activecaption was successfully set.
+PASS Setting color to AppWorkspace was successfully set.
+PASS Setting color to appworkspace was successfully set.
+PASS Setting color to Background was successfully set.
+PASS Setting color to background was successfully set.
+PASS Setting color to ButtonFace was successfully set.
+PASS Setting color to buttonface was successfully set.
+PASS Setting color to ButtonHighlight was successfully set.
+PASS Setting color to buttonhighlight was successfully set.
+PASS Setting color to ButtonShadow was successfully set.
+PASS Setting color to buttonshadow was successfully set.
+PASS Setting color to ButtonText was successfully set.
+PASS Setting color to buttontext was successfully set.
+PASS Setting color to CaptionText was successfully set.
+PASS Setting color to captiontext was successfully set.
+PASS Setting color to GrayText was successfully set.
+PASS Setting color to graytext was successfully set.
+PASS Setting color to Highlight was successfully set.
+PASS Setting color to highlight was successfully set.
+PASS Setting color to HighlightText was successfully set.
+PASS Setting color to highlighttext was successfully set.
+PASS Setting color to InactiveBorder was successfully set.
+PASS Setting color to inactiveborder was successfully set.
+PASS Setting color to InactiveCaption was successfully set.
+PASS Setting color to inactivecaption was successfully set.
+PASS Setting color to InactiveCaptionText was successfully set.
+PASS Setting color to inactivecaptiontext was successfully set.
+PASS Setting color to InfoBackground was successfully set.
+PASS Setting color to infobackground was successfully set.
+PASS Setting color to InfoText was successfully set.
+PASS Setting color to infotext was successfully set.
+PASS Setting color to Menu was successfully set.
+PASS Setting color to menu was successfully set.
+PASS Setting color to MenuText was successfully set.
+PASS Setting color to menutext was successfully set.
+PASS Setting color to Scrollbar was successfully set.
+PASS Setting color to scrollbar was successfully set.
+PASS Setting color to ThreeDDarkShadow was successfully set.
+PASS Setting color to threeddarkshadow was successfully set.
+PASS Setting color to ThreeDFace was successfully set.
+PASS Setting color to threedface was successfully set.
+PASS Setting color to ThreeDHighlight was successfully set.
+PASS Setting color to threedhighlight was successfully set.
+PASS Setting color to ThreeDLightShadow was successfully set.
+PASS Setting color to threedlightshadow was successfully set.
+PASS Setting color to ThreeDShadow was successfully set.
+PASS Setting color to threedshadow was successfully set.
+PASS Setting color to Window was successfully set.
+PASS Setting color to window was successfully set.
+PASS Setting color to WindowFrame was successfully set.
+PASS Setting color to windowframe was successfully set.
+PASS Setting color to WindowText was successfully set.
+PASS Setting color to windowtext was successfully set.
+PASS Setting color to aliceblue was successfully set.
+PASS Setting color to antiquewhite was successfully set.
+PASS Setting color to aqua was successfully set.
+PASS Setting color to aquamarine was successfully set.
+PASS Setting color to azure was successfully set.
+PASS Setting color to beige was successfully set.
+PASS Setting color to bisque was successfully set.
+PASS Setting color to black was successfully set.
+PASS Setting color to blanchedalmond was successfully set.
+PASS Setting color to blue was successfully set.
+PASS Setting color to blueviolet was successfully set.
+PASS Setting color to brown was successfully set.
+PASS Setting color to burlywood was successfully set.
+PASS Setting color to cadetblue was successfully set.
+PASS Setting color to chartreuse was successfully set.
+PASS Setting color to chocolate was successfully set.
+PASS Setting color to coral was successfully set.
+PASS Setting color to cornflowerblue was successfully set.
+PASS Setting color to cornsilk was successfully set.
+PASS Setting color to crimson was successfully set.
+PASS Setting color to cyan was successfully set.
+PASS Setting color to darkblue was successfully set.
+PASS Setting color to darkcyan was successfully set.
+PASS Setting color to darkgoldenrod was successfully set.
+PASS Setting color to darkgray was successfully set.
+PASS Setting color to darkgreen was successfully set.
+PASS Setting color to darkgrey was successfully set.
+PASS Setting color to darkkhaki was successfully set.
+PASS Setting color to darkmagenta was successfully set.
+PASS Setting color to darkolivegreen was successfully set.
+PASS Setting color to darkorange was successfully set.
+PASS Setting color to darkorchid was successfully set.
+PASS Setting color to darkred was successfully set.
+PASS Setting color to darksalmon was successfully set.
+PASS Setting color to darkseagreen was successfully set.
+PASS Setting color to darkslateblue was successfully set.
+PASS Setting color to darkslategray was successfully set.
+PASS Setting color to darkslategrey was successfully set.
+PASS Setting color to darkturquoise was successfully set.
+PASS Setting color to darkviolet was successfully set.
+PASS Setting color to deeppink was successfully set.
+PASS Setting color to deepskyblue was successfully set.
+PASS Setting color to dimgray was successfully set.
+PASS Setting color to dimgrey was successfully set.
+PASS Setting color to dodgerblue was successfully set.
+PASS Setting color to firebrick was successfully set.
+PASS Setting color to floralwhite was successfully set.
+PASS Setting color to forestgreen was successfully set.
+PASS Setting color to fuchsia was successfully set.
+PASS Setting color to gainsboro was successfully set.
+PASS Setting color to ghostwhite was successfully set.
+PASS Setting color to gold was successfully set.
+PASS Setting color to goldenrod was successfully set.
+PASS Setting color to gray was successfully set.
+PASS Setting color to green was successfully set.
+PASS Setting color to greenyellow was successfully set.
+PASS Setting color to grey was successfully set.
+PASS Setting color to honeydew was successfully set.
+PASS Setting color to hotpink was successfully set.
+PASS Setting color to indianred was successfully set.
+PASS Setting color to indigo was successfully set.
+PASS Setting color to ivory was successfully set.
+PASS Setting color to khaki was successfully set.
+PASS Setting color to lavender was successfully set.
+PASS Setting color to lavenderblush was successfully set.
+PASS Setting color to lawngreen was successfully set.
+PASS Setting color to lemonchiffon was successfully set.
+PASS Setting color to lightblue was successfully set.
+PASS Setting color to lightcoral was successfully set.
+PASS Setting color to lightcyan was successfully set.
+PASS Setting color to lightgoldenrodyellow was successfully set.
+PASS Setting color to lightgray was successfully set.
+PASS Setting color to lightgreen was successfully set.
+PASS Setting color to lightgrey was successfully set.
+PASS Setting color to lightpink was successfully set.
+PASS Setting color to lightsalmon was successfully set.
+PASS Setting color to lightseagreen was successfully set.
+PASS Setting color to lightskyblue was successfully set.
+PASS Setting color to lightslategray was successfully set.
+PASS Setting color to lightslategrey was successfully set.
+PASS Setting color to lightsteelblue was successfully set.
+PASS Setting color to lightyellow was successfully set.
+PASS Setting color to lime was successfully set.
+PASS Setting color to limegreen was successfully set.
+PASS Setting color to linen was successfully set.
+PASS Setting color to magenta was successfully set.
+PASS Setting color to maroon was successfully set.
+PASS Setting color to mediumaquamarine was successfully set.
+PASS Setting color to mediumblue was successfully set.
+PASS Setting color to mediumorchid was successfully set.
+PASS Setting color to mediumpurple was successfully set.
+PASS Setting color to mediumseagreen was successfully set.
+PASS Setting color to mediumslateblue was successfully set.
+PASS Setting color to mediumspringgreen was successfully set.
+PASS Setting color to mediumturquoise was successfully set.
+PASS Setting color to mediumvioletred was successfully set.
+PASS Setting color to midnightblue was successfully set.
+PASS Setting color to mintcream was successfully set.
+PASS Setting color to mistyrose was successfully set.
+PASS Setting color to moccasin was successfully set.
+PASS Setting color to navajowhite was successfully set.
+PASS Setting color to navy was successfully set.
+PASS Setting color to oldlace was successfully set.
+PASS Setting color to olive was successfully set.
+PASS Setting color to olivedrab was successfully set.
+PASS Setting color to orange was successfully set.
+PASS Setting color to orangered was successfully set.
+PASS Setting color to orchid was successfully set.
+PASS Setting color to palegoldenrod was successfully set.
+PASS Setting color to palegreen was successfully set.
+PASS Setting color to paleturquoise was successfully set.
+PASS Setting color to palevioletred was successfully set.
+PASS Setting color to papayawhip was successfully set.
+PASS Setting color to peachpuff was successfully set.
+PASS Setting color to peru was successfully set.
+PASS Setting color to pink was successfully set.
+PASS Setting color to plum was successfully set.
+PASS Setting color to powderblue was successfully set.
+PASS Setting color to purple was successfully set.
+PASS Setting color to rosybrown was successfully set.
+PASS Setting color to royalblue was successfully set.
+PASS Setting color to saddlebrown was successfully set.
+PASS Setting color to salmon was successfully set.
+PASS Setting color to sandybrown was successfully set.
+PASS Setting color to seagreen was successfully set.
+PASS Setting color to seashell was successfully set.
+PASS Setting color to sienna was successfully set.
+PASS Setting color to silver was successfully set.
+PASS Setting color to skyblue was successfully set.
+PASS Setting color to slateblue was successfully set.
+PASS Setting color to slategray was successfully set.
+PASS Setting color to slategrey was successfully set.
+PASS Setting color to snow was successfully set.
+PASS Setting color to springgreen was successfully set.
+PASS Setting color to steelblue was successfully set.
+PASS Setting color to tan was successfully set.
+PASS Setting color to teal was successfully set.
+PASS Setting color to thistle was successfully set.
+PASS Setting color to tomato was successfully set.
+PASS Setting color to turquoise was successfully set.
+PASS Setting color to violet was successfully set.
+PASS Setting color to wheat was successfully set.
+PASS Setting color to white was successfully set.
+PASS Setting color to whitesmoke was successfully set.
+PASS Setting color to yellow was successfully set.
+PASS Setting color to yellowgreen was successfully set.
+PASS Setting color to #0f0 was successfully set.
+FAIL Setting color to #0f0, #f00 was not set but should!
+PASS Setting color to hsl(120, 100%, 50%) was successfully set.
+PASS Setting color to foobar was not set (as expected).
+PASS Setting color to counter(foobar) was not set (as expected).
+PASS Setting color to url(http://127.0.0.1:8080/) was not set (as expected).
+PASS Setting color to inherited was not set (as expected).
+PASS Setting color to #100% was not set (as expected).
+PASS Setting color to #100px was not set (as expected).
+PASS Setting color to -webkit-var("test") was not set (as expected).
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/css/test-setting-canvas-color.html b/LayoutTests/fast/css/test-setting-canvas-color.html
new file mode 100644
index 0000000..d1bb23f
--- /dev/null
+++ b/LayoutTests/fast/css/test-setting-canvas-color.html
@@ -0,0 +1,253 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="stylesheet" href="../js/resources/js-test-style.css">
+<script src="../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<canvas id="canvas">
+<script>
+description("Test case for bug 39168. This tests the CSS color parsing code using &lt;canvas&gt;.");
+
+function log(message) {
+    var console = document.getElementById("console");
+    console.appendChild(document.createTextNode(message));
+    console.appendChild(document.createElement("BR"));
+}
+
+var canvas = document.getElementById("canvas");
+var ctx = canvas.getContext("2d");
+
+function shouldSuccessfullyParse(color) {
+    ctx.fillStyle = "#f00";
+    ctx.fillStyle = color;
+    // Check that there is no red.
+    if (ctx.fillStyle.match(/^#(?!(FF0000|ff0000|f00)$)/))
+        testPassed("Setting color to " + color + " was successfully set.");
+    else
+        testFailed("Setting color to " + color + " was not set but should!");
+}
+
+function shouldNotSuccessfullyParse(color) {
+    ctx.fillStyle = "#0f0";
+    ctx.fillStyle = color;
+    // Check that the color is still green.
+    if (ctx.fillStyle.match(/^#(00FF00|00ff00|0f0)$/))
+        testPassed("Setting color to " + color + " was not set (as expected).");
+    else
+        testFailed("Setting color to " + color + " was successfully set but should not!");
+}
+
+// Taken from CSS 3 color.
+var deprecatedSystemColors = [
+    "ActiveBorder",
+    "ActiveCaption",
+    "AppWorkspace",
+    "Background",
+    "ButtonFace",
+    "ButtonHighlight",
+    "ButtonShadow",
+    "ButtonText",
+    "CaptionText",
+    "GrayText",
+    "Highlight",
+    "HighlightText",
+    "InactiveBorder",
+    "InactiveCaption",
+    "InactiveCaptionText",
+    "InfoBackground",
+    "InfoText",
+    "Menu",
+    "MenuText",
+    "Scrollbar",
+    "ThreeDDarkShadow",
+    "ThreeDFace",
+    "ThreeDHighlight",
+    "ThreeDLightShadow",
+    "ThreeDShadow",
+    "Window",
+    "WindowFrame",
+    "WindowText"
+];
+
+// Valid values passed in color matching.
+for (var i = 0; i < deprecatedSystemColors.length; ++i) {
+    shouldSuccessfullyParse(deprecatedSystemColors[i]);
+    shouldSuccessfullyParse(deprecatedSystemColors[i].toLowerCase());
+}
+
+// Taken from CSS 3 color.
+var svgColors = [
+    "aliceblue",
+    "antiquewhite",
+    "aqua",
+    "aquamarine",
+    "azure",
+    "beige",
+    "bisque",
+    "black",
+    "blanchedalmond",
+    "blue",
+    "blueviolet",
+    "brown",
+    "burlywood",
+    "cadetblue",
+    "chartreuse",
+    "chocolate",
+    "coral",
+    "cornflowerblue",
+    "cornsilk",
+    "crimson",
+    "cyan",
+    "darkblue",
+    "darkcyan",
+    "darkgoldenrod",
+    "darkgray",
+    "darkgreen",
+    "darkgrey",
+    "darkkhaki",
+    "darkmagenta",
+    "darkolivegreen",
+    "darkorange",
+    "darkorchid",
+    "darkred",
+    "darksalmon",
+    "darkseagreen",
+    "darkslateblue",
+    "darkslategray",
+    "darkslategrey",
+    "darkturquoise",
+    "darkviolet",
+    "deeppink",
+    "deepskyblue",
+    "dimgray",
+    "dimgrey",
+    "dodgerblue",
+    "firebrick",
+    "floralwhite",
+    "forestgreen",
+    "fuchsia",
+    "gainsboro",
+    "ghostwhite",
+    "gold",
+    "goldenrod",
+    "gray",
+    "green",
+    "greenyellow",
+    "grey",
+    "honeydew",
+    "hotpink",
+    "indianred",
+    "indigo",
+    "ivory",
+    "khaki",
+    "lavender",
+    "lavenderblush",
+    "lawngreen",
+    "lemonchiffon",
+    "lightblue",
+    "lightcoral",
+    "lightcyan",
+    "lightgoldenrodyellow",
+    "lightgray",
+    "lightgreen",
+    "lightgrey",
+    "lightpink",
+    "lightsalmon",
+    "lightseagreen",
+    "lightskyblue",
+    "lightslategray",
+    "lightslategrey",
+    "lightsteelblue",
+    "lightyellow",
+    "lime",
+    "limegreen",
+    "linen",
+    "magenta",
+    "maroon",
+    "mediumaquamarine",
+    "mediumblue",
+    "mediumorchid",
+    "mediumpurple",
+    "mediumseagreen",
+    "mediumslateblue",
+    "mediumspringgreen",
+    "mediumturquoise",
+    "mediumvioletred",
+    "midnightblue",
+    "mintcream",
+    "mistyrose",
+    "moccasin",
+    "navajowhite",
+    "navy",
+    "oldlace",
+    "olive",
+    "olivedrab",
+    "orange",
+    "orangered",
+    "orchid",
+    "palegoldenrod",
+    "palegreen",
+    "paleturquoise",
+    "palevioletred",
+    "papayawhip",
+    "peachpuff",
+    "peru",
+    "pink",
+    "plum",
+    "powderblue",
+    "purple",
+    // We do not test red.
+    "rosybrown",
+    "royalblue",
+    "saddlebrown",
+    "salmon",
+    "sandybrown",
+    "seagreen",
+    "seashell",
+    "sienna",
+    "silver",
+    "skyblue",
+    "slateblue",
+    "slategray",
+    "slategrey",
+    "snow",
+    "springgreen",
+    "steelblue",
+    "tan",
+    "teal",
+    "thistle",
+    "tomato",
+    "turquoise",
+    "violet",
+    "wheat",
+    "white",
+    "whitesmoke",
+    "yellow",
+    "yellowgreen"
+];
+
+// Valid values passed in color matching.
+for (var i = 0; i < svgColors.length; ++i)
+    shouldSuccessfullyParse(svgColors[i]);
+
+
+shouldSuccessfullyParse("#0f0");
+shouldSuccessfullyParse("#0f0, #f00");
+shouldSuccessfullyParse("hsl(120, 100%, 50%)"); // Green HSL
+
+// Invalid values.
+shouldNotSuccessfullyParse("foobar");
+shouldNotSuccessfullyParse("counter(foobar)");
+shouldNotSuccessfullyParse("url(http://127.0.0.1:8080/)");
+shouldNotSuccessfullyParse("inherited");
+shouldNotSuccessfullyParse("#100%");
+shouldNotSuccessfullyParse("#100px");
+shouldNotSuccessfullyParse('-webkit-var("test")');
+
+successfullyParsed = true;
+</script>
+<script src="../js/resources/js-test-post.js"></script>
+</html>
diff --git a/LayoutTests/platform/mac/Skipped b/LayoutTests/platform/mac/Skipped
index b8ca528..888b7b0 100644
--- a/LayoutTests/platform/mac/Skipped
+++ b/LayoutTests/platform/mac/Skipped
@@ -188,7 +188,6 @@ canvas/philip/tests/2d.drawImage.null.html
 canvas/philip/tests/2d.fillStyle.parse.current.basic.html
 canvas/philip/tests/2d.fillStyle.parse.current.changed.html
 canvas/philip/tests/2d.fillStyle.parse.current.removed.html
-canvas/philip/tests/2d.fillStyle.parse.system.html
 canvas/philip/tests/2d.gradient.radial.cone.front.html
 canvas/philip/tests/2d.gradient.radial.cone.top.html
 canvas/philip/tests/2d.gradient.radial.inside2.html
diff --git a/LayoutTests/platform/qt/Skipped b/LayoutTests/platform/qt/Skipped
index 102ff7d..3d6c20c 100644
--- a/LayoutTests/platform/qt/Skipped
+++ b/LayoutTests/platform/qt/Skipped
@@ -5223,7 +5223,6 @@ canvas/philip/tests/2d.drawImage.null.html
 canvas/philip/tests/2d.fillStyle.parse.current.basic.html
 canvas/philip/tests/2d.fillStyle.parse.current.changed.html
 canvas/philip/tests/2d.fillStyle.parse.current.removed.html
-canvas/philip/tests/2d.fillStyle.parse.system.html
 canvas/philip/tests/2d.gradient.radial.cone.behind.html
 canvas/philip/tests/2d.gradient.radial.cone.beside.html
 canvas/philip/tests/2d.gradient.radial.cone.bottom.html
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 03d5890..03e4af1 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,33 @@
+2010-09-15  Julien Chaffraix  <jchaffraix at codeaurora.org>
+
+        Reviewed by Andreas Kling.
+
+        Parse system colors in the HTML5 canvas context.
+        https://bugs.webkit.org/show_bug.cgi?id=39168
+
+        Test: fast/css/test-setting-canvas-color.html
+
+        Based on previous work by Jan Erik Hanssen  <jhanssen at codeaurora.org>
+
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::parseColor): Changed the function to better match our
+        early return policy. Also we now return false when we don't parse the color.
+        This is needed for createFromString to fallback to using parseSystemColor.
+
+        (WebCore::CSSParser::parseSystemColor): Made use of the RenderTheme to get
+        the system colors.
+
+        * css/CSSParser.h: Added the new parseSystemColor method.
+
+        * html/canvas/CanvasRenderingContext2D.cpp:
+        (WebCore::CanvasRenderingContext2D::setStrokeColor): Pass the document to createFromString.
+        (WebCore::CanvasRenderingContext2D::setFillColor): Ditto.
+        * html/canvas/CanvasStyle.cpp:
+        (WebCore::CanvasStyle::createFromString): Try to parse the color using CSSParser::parseColor
+        and fall back to parseSystemColor if it did not work.
+
+        * html/canvas/CanvasStyle.h: Added the new Document* parameter to createFromString.
+
 2010-09-14  Erik Arvidsson  <arv at chromium.org>
 
         Reviewed by Darin Adler.
diff --git a/WebCore/css/CSSParser.cpp b/WebCore/css/CSSParser.cpp
index 7c35739..2745660 100644
--- a/WebCore/css/CSSParser.cpp
+++ b/WebCore/css/CSSParser.cpp
@@ -63,8 +63,10 @@
 #include "FontValue.h"
 #include "MediaList.h"
 #include "MediaQueryExp.h"
+#include "Page.h"
 #include "Pair.h"
 #include "Rect.h"
+#include "RenderTheme.h"
 #include "ShadowValue.h"
 #include "WebKitCSSKeyframeRule.h"
 #include "WebKitCSSKeyframesRule.h"
@@ -293,12 +295,15 @@ bool CSSParser::parseColor(RGBA32& color, const String& string, bool strict)
         return false;
 
     CSSValue* value = parser.m_parsedProperties[0]->value();
-    if (value->cssValueType() == CSSValue::CSS_PRIMITIVE_VALUE) {
-        CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+    if (value->cssValueType() != CSSValue::CSS_PRIMITIVE_VALUE)
+        return false;
+
+    CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+    if (primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_RGBCOLOR) {
         color = primitiveValue->getRGBA32Value();
+        return true;
     }
-
-    return true;
+    return false;
 }
 
 bool CSSParser::parseColor(CSSMutableStyleDeclaration* declaration, const String& string)
@@ -313,6 +318,22 @@ bool CSSParser::parseColor(CSSMutableStyleDeclaration* declaration, const String
     return (m_numParsedProperties && m_parsedProperties[0]->m_id == CSSPropertyColor);
 }
 
+bool CSSParser::parseSystemColor(RGBA32& color, const String& string, Document* document)
+{
+    if (!document || !document->page())
+        return false;
+
+    CSSParserString cssColor;
+    cssColor.characters = const_cast<UChar*>(string.characters());
+    cssColor.length = string.length();
+    int id = cssValueKeywordID(cssColor);
+    if (id <= 0)
+        return false;
+
+    color = document->page()->theme()->systemColor(id).rgb();
+    return true;
+}
+
 void CSSParser::parseSelector(const String& string, Document* doc, CSSSelectorList& selectorList)
 {
     RefPtr<CSSStyleSheet> dummyStyleSheet = CSSStyleSheet::create(doc);
diff --git a/WebCore/css/CSSParser.h b/WebCore/css/CSSParser.h
index 47f0bed..fff4efe 100644
--- a/WebCore/css/CSSParser.h
+++ b/WebCore/css/CSSParser.h
@@ -65,6 +65,7 @@ namespace WebCore {
         PassRefPtr<CSSRule> parseKeyframeRule(CSSStyleSheet*, const String&);
         bool parseValue(CSSMutableStyleDeclaration*, int propId, const String&, bool important);
         static bool parseColor(RGBA32& color, const String&, bool strict = false);
+        static bool parseSystemColor(RGBA32& color, const String&, Document*);
         bool parseColor(CSSMutableStyleDeclaration*, const String&);
         bool parseDeclaration(CSSMutableStyleDeclaration*, const String&);
         bool parseMediaQuery(MediaList*, const String&);
diff --git a/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/WebCore/html/canvas/CanvasRenderingContext2D.cpp
index 0fb7ed5..4822596 100644
--- a/WebCore/html/canvas/CanvasRenderingContext2D.cpp
+++ b/WebCore/html/canvas/CanvasRenderingContext2D.cpp
@@ -53,6 +53,7 @@
 #include "KURL.h"
 #include "Page.h"
 #include "RenderHTMLCanvas.h"
+#include "RenderTheme.h"
 #include "SecurityOrigin.h"
 #include "Settings.h"
 #include "StrokeStyleApplier.h"
@@ -569,7 +570,7 @@ void CanvasRenderingContext2D::setStrokeColor(const String& color)
 {
     if (color == state().m_unparsedStrokeColor)
         return;
-    setStrokeStyle(CanvasStyle::createFromString(color));
+    setStrokeStyle(CanvasStyle::createFromString(color, canvas()->document()));
     state().m_unparsedStrokeColor = color;
 }
 
@@ -610,7 +611,7 @@ void CanvasRenderingContext2D::setFillColor(const String& color)
 {
     if (color == state().m_unparsedFillColor)
         return;
-    setFillStyle(CanvasStyle::createFromString(color));
+    setFillStyle(CanvasStyle::createFromString(color, canvas()->document()));
     state().m_unparsedFillColor = color;
 }
 
diff --git a/WebCore/html/canvas/CanvasStyle.cpp b/WebCore/html/canvas/CanvasStyle.cpp
index fd3c6e5..0b139a4 100644
--- a/WebCore/html/canvas/CanvasStyle.cpp
+++ b/WebCore/html/canvas/CanvasStyle.cpp
@@ -86,12 +86,16 @@ CanvasStyle::CanvasStyle(PassRefPtr<CanvasPattern> pattern)
 {
 }
 
-PassRefPtr<CanvasStyle> CanvasStyle::createFromString(const String& color)
+PassRefPtr<CanvasStyle> CanvasStyle::createFromString(const String& color, Document* document)
 {
     RGBA32 rgba;
-    if (!CSSParser::parseColor(rgba, color))
-        return 0;
-    return adoptRef(new CanvasStyle(rgba));
+    if (CSSParser::parseColor(rgba, color))
+        return adoptRef(new CanvasStyle(rgba));
+
+    if (CSSParser::parseSystemColor(rgba, color, document))
+        return adoptRef(new CanvasStyle(rgba));
+
+    return 0;
 }
 
 PassRefPtr<CanvasStyle> CanvasStyle::createFromStringWithOverrideAlpha(const String& color, float alpha)
diff --git a/WebCore/html/canvas/CanvasStyle.h b/WebCore/html/canvas/CanvasStyle.h
index 3ca760a..b463c3f 100644
--- a/WebCore/html/canvas/CanvasStyle.h
+++ b/WebCore/html/canvas/CanvasStyle.h
@@ -34,12 +34,13 @@ namespace WebCore {
 
     class CanvasGradient;
     class CanvasPattern;
+    class Document;
     class GraphicsContext;
 
     class CanvasStyle : public RefCounted<CanvasStyle> {
     public:
         static PassRefPtr<CanvasStyle> createFromRGBA(RGBA32 rgba) { return adoptRef(new CanvasStyle(rgba)); }
-        static PassRefPtr<CanvasStyle> createFromString(const String& color);
+        static PassRefPtr<CanvasStyle> createFromString(const String& color, Document* = 0);
         static PassRefPtr<CanvasStyle> createFromStringWithOverrideAlpha(const String& color, float alpha);
         static PassRefPtr<CanvasStyle> createFromGrayLevelWithAlpha(float grayLevel, float alpha) { return adoptRef(new CanvasStyle(grayLevel, alpha)); }
         static PassRefPtr<CanvasStyle> createFromRGBAChannels(float r, float g, float b, float a) { return adoptRef(new CanvasStyle(r, g, b, a)); }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list