Closed Bug 146065 Opened 22 years ago Closed 20 years ago

Accessibility module assumes HTML, does not work with XHTML


(Core :: Disability Access APIs, defect, P1)






(Reporter: hjtoi-bugzilla, Assigned: aaronlev)



(Keywords: xhtml)


(1 file)

For example, in nsHTMLGroupboxAccessible::GetAccName() there is a call to
GetElementsByTagName() which does not work as you'd expect in XHTML documents.
Please see bug 133654 on how to detect when you are in HTML and when you are in
XHTML, and what methods to use etc.
-> Jgaunt
Assignee: aaronl → jgaunt
heikki, are you saying all calls to GetElementsByTagName need to be split into
cases where we test for XHTML? The bug linked doesn't go into much discussion
about the issue, and only deals with the PARAM tags.
Yes, unless you know for a fact it won't be used for XHTML or arbitrary XML.
There are probably other functions that are equally bad (basically all
methods/code that deal with element names), but I have not looked at those yet. 

Regarding bug 133654, I should have mentioned to look at the patch...
-> aaron
Assignee: jgaunt → aaronl
Priority: -- → P1
Target Milestone: --- → mozilla1.8alpha
Heikki, is there a way to simplify this to use GetElementsByTagNameNS for both

   nsCOMPtr<nsIDOMNodeList> allParams; 
-  mydomElement->GetElementsByTagName(NS_LITERAL_STRING("PARAM"),
+  nsCOMPtr<nsINodeInfo> ni;
+  content->GetNodeInfo(*getter_AddRefs(ni));
+  if (ni->NamespaceEquals(kNameSpaceID_XHTML)) {
+    // For XHTML elements we need to take the namespace URI into
+    // account when looking for param elements.
+    NS_NAMED_LITERAL_STRING(xhtml_ns, "");
+    mydomElement->GetElementsByTagNameNS(xhtml_ns, NS_LITERAL_STRING("param"),
+                                         getter_AddRefs(allParams));
+  } else {
+    // If content is not XHTML, it must be HTML, no need to worry
+    // about namespaces then...
+    mydomElement->GetElementsByTagName(NS_LITERAL_STRING("param"),
+                                       getter_AddRefs(allParams));
+  }    
I saved some code by just asking that the namespace be the same as the parent
element. This should be okay, I think. Right?
I should mention that I tested the patch and it works.
Attachment #147412 - Flags: superreview?(jst)
Attachment #147412 - Flags: review?(kyle.yuan)
Well, it's slightly different from the original but I think it might still be
wrong. Think about arbitrary XML. If you had an element whose name matched an
XHTML element name but the namespace was something completely different,
accessibility code specific to XHTML elements should not be executed. This patch
does not seem to protect against that, but is there some code earlier in the
flow of execution that is taking care of that?
Heikki, I thought about that too. Hmm... okay, I'll come up with a new patch.
But aren't the name spaces available in a .h file somewhere?
Heikki, I think I want to stand by the original patch right now.

There are 4 cases:
GetXULName -- only gets called on XUL namespace elements
XUL groupbox - only for XUL groupboxes
nsHTMLGroupboxAccessible - no way to create this except for HTML and XHTML
nsHTMLTableAccessible - this could be created in XML via CSS display: table. In
that case I'm not actually sure it would be bad to treat a <caption> tag of the
same namespace as the caption for the table.

All of our HTML accessibility objects are not designed for arbitrary styled XML
at all. It assumes certain tag and attribute names. In the future we'll
hopefully do a better job, but right now there's no way in markup to specify
some things without [x]html.

So, really the idea of making styled generic XML accessible is a way off, but
it's something we're not ignoring. A proposal is underway for that.
Comment on attachment 147412 [details] [diff] [review]
Use GetElementsByTagNameNS

Attachment #147412 - Flags: superreview?(jst) → superreview+
Attachment #147412 - Flags: review?(kyle.yuan) → review?(pkw)
Comment on attachment 147412 [details] [diff] [review]
Use GetElementsByTagNameNS

Looks ok to me.
Attachment #147412 - Flags: review?(pkw) → review+
Closed: 20 years ago
Resolution: --- → FIXED
Heikki, Jst -- 

Technically shouldn't I also be checking the namespace for all the
GetAttribute() and HasAttribute() calls in mozilla/accessibility?

For example, I check the readonly attribute for html form controls, but someone
could do:
<input type="text" xpq:readonly="true" />

Or is it going overboard for mozilla/accessible to check the namespace in places
like that. After all, a readonly attribute of any kind probably indicates that
the thing is readonly, and should be exposed as such to screen readers etc.

You need to log in before you can comment on or make changes to this bug.