Re: Agenda+ CSS Namespaces implementation report

(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