Changeset 142440 in webkit


Ignore:
Timestamp:
Feb 11, 2013 1:39:32 AM (11 years ago)
Author:
commit-queue@webkit.org
Message:

Web Inspector: Don't throw exceptions in WebInspector.Color
https://bugs.webkit.org/show_bug.cgi?id=104835

Source/WebCore:

Patch by John J. Barton <johnjbarton@chromium.org> on 2013-02-11
Reviewed by Vsevolod Vlasov.

WebInspector.Color.parse() returns a Color from a string, or null;
Ctor calls now call parse();
In the StylesSideBarPane, test null rather than catch(e).

Added case to inspector/styles/styles-invalid-color-values.html

  • inspector/front-end/Color.js:

(WebInspector.Color):
(WebInspector.Color.parse):
(WebInspector.Color.fromRGBA):
(WebInspector.Color.fromRGB):
(WebInspector.Color.prototype.toString):
(WebInspector.Color.prototype._parse.this.alpha.set 0):
(WebInspector.Color.prototype._parse.this.nickname.set 2):
(WebInspector.Color.prototype._parse.this.hsla.set 1):
(WebInspector.Color.prototype._parse.this.rgba.set 0):
(WebInspector.Color.prototype._parse.set WebInspector):
(WebInspector.Color.prototype._parse):

  • inspector/front-end/Spectrum.js:

(WebInspector.Spectrum.prototype.get color):

  • inspector/front-end/StylesSidebarPane.js:

LayoutTests:

Patch by John J. Barton <johnjbarton@chromium.org> on 2013-02-11
Reviewed by Vsevolod Vlasov.

Added case to test parsing 'none' from border style

  • inspector/styles/styles-invalid-color-values-expected.txt:
  • inspector/styles/styles-invalid-color-values.html:
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r142439 r142440  
     12013-02-11  John J. Barton  <johnjbarton@chromium.org>
     2
     3        Web Inspector: Don't throw exceptions in WebInspector.Color
     4        https://bugs.webkit.org/show_bug.cgi?id=104835
     5
     6        Reviewed by Vsevolod Vlasov.
     7       
     8        Added case to test parsing 'none' from border style
     9
     10        * inspector/styles/styles-invalid-color-values-expected.txt:
     11        * inspector/styles/styles-invalid-color-values.html:
     12
    1132013-02-11  Andrey Lushnikov  <lushnikov@chromium.org>
    214
  • trunk/LayoutTests/inspector/styles/styles-invalid-color-values-expected.txt

    r96543 r142440  
    7474  hsla: hsla(0, 100%, 50%, 1)
    7575
     76Running: testInvalidColors
     77
     78SUCCESS: parsed invalid color none to null
     79
  • trunk/LayoutTests/inspector/styles/styles-invalid-color-values.html

    r125965 r142440  
    1818        'rgba(255, 0, 0, -5)', // clipped to rgba(255,0,0,0)
    1919        'rgba(255, 0, 0, 5)',  // clipped to rgba(255,0,0,1)
     20        ];
     21
     22    var invalidColors = [
     23        // An invalid color, eg a value for a shorthand like 'border' which can have a color
     24        'none',
    2025    ];
    2126
     
    2732            next();
    2833        },
     34        function testInvalidColors(next)
     35        {
     36            for (var i = 0; i < invalidColors.length; ++i)
     37                dumpErrorsForInvalidColor(invalidColors[i]);
     38            next();
     39        },
    2940    ]);
     41
     42    function dumpErrorsForInvalidColor(colorString)
     43    {
     44        var color = WebInspector.Color.parse(colorString);
     45        if (!color) {
     46            InspectorTest.addResult("");
     47            InspectorTest.addResult("SUCCESS: parsed invalid color " + colorString + " to null");
     48            return;
     49        } else {
     50            InspectorTest.addResult("");
     51            InspectorTest.addResult("FAIL: invalid color " + colorString + " did not parse to to null");
     52        }
     53    }
    3054
    3155    function dumpColorRepresentationsForColor(colorString)
    3256    {
    33         try {
    34             var color = new WebInspector.Color(colorString);
    35         } catch (e) {
    36             InspectorTest.addResult("FAIL: Error parsing color '" + colorString + "'.");
     57        var color = WebInspector.Color.parse(colorString);
     58        if (!color)
    3759            return;
    38         }
    3960
    4061        InspectorTest.addResult("");
  • trunk/Source/WebCore/ChangeLog

    r142439 r142440  
     12013-02-11  John J. Barton  <johnjbarton@chromium.org>
     2
     3        Web Inspector: Don't throw exceptions in WebInspector.Color
     4        https://bugs.webkit.org/show_bug.cgi?id=104835
     5
     6        Reviewed by Vsevolod Vlasov.
     7
     8        WebInspector.Color.parse() returns a Color from a string, or null;
     9        Ctor calls now call parse();
     10        In the StylesSideBarPane, test null rather than catch(e).
     11
     12        Added case to inspector/styles/styles-invalid-color-values.html
     13
     14        * inspector/front-end/Color.js:
     15        (WebInspector.Color):
     16        (WebInspector.Color.parse):
     17        (WebInspector.Color.fromRGBA):
     18        (WebInspector.Color.fromRGB):
     19        (WebInspector.Color.prototype.toString):
     20        (WebInspector.Color.prototype._parse.this.alpha.set 0):
     21        (WebInspector.Color.prototype._parse.this.nickname.set 2):
     22        (WebInspector.Color.prototype._parse.this.hsla.set 1):
     23        (WebInspector.Color.prototype._parse.this.rgba.set 0):
     24        (WebInspector.Color.prototype._parse.set WebInspector):
     25        (WebInspector.Color.prototype._parse):
     26        * inspector/front-end/Spectrum.js:
     27        (WebInspector.Spectrum.prototype.get color):
     28        * inspector/front-end/StylesSidebarPane.js:
     29
    1302013-02-11  Andrey Lushnikov  <lushnikov@chromium.org>
    231
  • trunk/Source/WebCore/inspector/front-end/Color.js

    r139334 r142440  
    2929
    3030/**
    31  * @constructor
     31 * Don't call directly, use WebInspector.Color.parse().
     32 * @constructor
    3233 */
    3334WebInspector.Color = function(str)
    3435{
    3536    this.value = str;
    36     this._parse();
    3737}
    3838
     39WebInspector.Color.parse = function(str)
     40{
     41    var maybeColor = new WebInspector.Color(str);
     42    return maybeColor._parse() ? maybeColor : null;
     43}
    3944/**
    4045 * @param {number=} a
     
    4247WebInspector.Color.fromRGBA = function(r, g, b, a)
    4348{
    44     return new WebInspector.Color("rgba(" + r + "," + g + "," + b + "," + (typeof a === "undefined" ? 1 : a) + ")");
     49    return WebInspector.Color.parse("rgba(" + r + "," + g + "," + b + "," + (typeof a === "undefined" ? 1 : a) + ")");
    4550}
    4651
    4752WebInspector.Color.fromRGB = function(r, g, b)
    4853{
    49     return new WebInspector.Color("rgb(" + r + "," + g + "," + b + ")");
     54    return WebInspector.Color.parse("rgb(" + r + "," + g + "," + b + ")");
    5055}
    5156
     
    207212        }
    208213
    209         throw "invalid color format";
     214        return "invalid color format: " + format;
    210215    },
    211216
     
    433438            this.nickname = set[2];
    434439            this.alpha = set[0][3];
    435             return;
     440            return true;
    436441        }
    437442
     
    462467                    this.hex = WebInspector.Color.Nicknames[nickname];
    463468                } else // unknown name
    464                     throw "unknown color name";
     469                    return false;
    465470            } else if (match[4]) { // hsl
    466471                this.format = "hsl";
     
    480485            }
    481486
    482             return;
     487            return true;
    483488        }
    484489
     
    500505            }
    501506
    502             return;
     507            return true;
    503508        }
    504509
    505510        // Could not parse as a valid color
    506         throw "could not parse color";
     511        return false;
    507512    }
    508513}
  • trunk/Source/WebCore/inspector/front-end/Spectrum.js

    r133582 r142440  
    282282        if (!colorValue)
    283283            colorValue = color.toString(); // this.outputColorFormat can be invalid for current color (e.g. "nickname").
    284         return new WebInspector.Color(colorValue);
     284        return WebInspector.Color.parse(colorValue);
    285285    },
    286286
  • trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js

    r142132 r142440  
    17571757            function processColor(text)
    17581758            {
    1759                 try {
    1760                     var color = new WebInspector.Color(text);
    1761                 } catch (e) {
     1759                var color = WebInspector.Color.parse(text);
     1760
     1761                // We can be called with valid non-color values of |text| (like 'none' from border style)
     1762                if (!color)
    17621763                    return document.createTextNode(text);
    1763                 }
    1764 
     1764               
    17651765                var format = getFormat();
    17661766                var hasSpectrum = self._parentPane;
Note: See TracChangeset for help on using the changeset viewer.