[whatwg] Question about gradient stops in canvas and parsing as CSS colors
bzbarsky at MIT.EDU
Wed Sep 22 07:47:02 PDT 2010
Consider this code:
gradient.addColorStop("1.0","rgba( 0, 0, 0, 0");
where |gradient| is a canvas radial gradient. Note the lack of ')' at
the end of the rgba string there.
What's the correct behavior? The spec says:
If the color cannot be parsed as a CSS color, then a SYNTAX_ERR
exception must be raised.
However an actual CSS parser parsing that string as a color would infer
the closing ')' per CSS 2.1 section 4.2 the item about "unexpected EOF".
Note that this is a tokenization-level requirement, as far as I can
tell, so this happens before the syntax rules for productions like
<color> are applied.
Observed behavior in UAs is:
* Webkit simply doesn't implement CSS 2.1 section 4.2 correctly
* Opera throws an exception from the addColorStop call above, but shows
lime text if loading this:
data:text/html,<span style="color: rgb(0, 255, 0">Lime</span>
* Gecko shows lime text in the HTML testcase and treats the color stop
above as valid rgba(0, 0, 0, 0).
Clearly I happen to think Gecko's behavior is the sane one here, but
there's a clear interoperability problem either way. Certainly Opera
and Gecko interpreted the spec differently.
More information about the whatwg