- From: Chris Lilley <chris@w3.org>
- Date: Tue, 1 Dec 2009 22:34:04 +0100
- To: David Hyatt <hyatt@apple.com>
- CC: www-style@w3.org
(redirecting to www-style)
On Tuesday, December 1, 2009, 7:58:58 PM, David wrote:
DH> On Dec 1, 2009, at 4:30 AM, Chris Lilley wrote:
CL> Of the four implementations I tested, we have two passes for all
CL> tests except one, which tests @namespace error handling
DH> I looked at this test and am confused about it. Can you explain why:
DH> <style id="a">@namespace x "test</style>
DH> <script>
DH> document.getElementById("a").sheet.insertRule("x|t2 {background:lime }", 1)
DH> </script>
DH> is supposed to work for the second line in the test case?
I didn't write it but yes, it seems odd to me also.
The content for the second subtest is
<p><t2 xmlns="test">This sentence should have a green background.</t2></p>
The following will make it red:
<style>
t, t2, t3, t4, t5 { background:red }
</style>
Now we have
<style id="a">@namespace x "test</style>
which is syntactically invalid. The spec says (section 3.1):
A syntactically invalid @namespace rule (whether malformed or misplaced) must be ignored. A CSS style sheet containing an invalid @namespace rule is itself invalid.
So, there is no namespace prefix "x" in scope as the rule is ignored; and the entire style sheet (the style element) is invalid. Now we have
<script>
document.getElementById("a").sheet.insertRule("x|t2 {background:lime }", 1)
</script>
which appends a rule, which should not be applied because x|t2 does not match anything.
Unless the stylesheet processor is required to magically fix up the missing closing quote. But I can't see anything to support this.
Firefox applies the rule so has the lime colour. I think this is wrong.
If you agree, the way to fix this test would be to flip the colours for this subtest. Keep this, so implementations with no @namespace support fail:
<style>
t, t2, t3, t4, t5 { background:red }
</style>
add this, so @namespace implementations pass
<style>
@namespace "test" {}
t2 { background:lime }
</style>
and set the colour to red in the script-injected style rule
<script>
document.getElementById("a").sheet.insertRule("x|t2 {background:red }", 1)
</script>
so that implementations which fail to discard the malformed @namespace rule fail.
--
Chris Lilley mailto:chris@w3.org
Technical Director, Interaction Domain
W3C Graphics Activity Lead
Co-Chair, W3C Hypertext CG
Received on Tuesday, 1 December 2009 21:34:54 UTC