Gecko is the rendering engine for Firefox, Thunderbird, Nvu, Mozilla Seamonkey and other applications. Gecko is the internal engine that Mozilla uses to render any kind of web content. It supports HTML, XHTML, Cascading Style Sheets (CSS), the Document Object Model (DOM) and many more. The content of markup languages supported by Gecko is exposed to assistive technologies (AT). This page is designated to provide information how Gecko maps these languages to AT.
Accessible tree vs. DOM tree - what's the relation?
The accessible tree and the DOM tree are parallel structures. Accessible objects are created in the accessible tree for every DOM element that should be exposed to AT. Neither accessible tree nor DOM tree are subsets of each other. However you can suppose roughly the accessible tree is a subset of the DOM tree. There are several exceptions. For example, anonymous content might be presented in accessible tree but might be missed in DOM tree like textfield and submit button of HTML file control. In general the following rules are applied to define whether DOM element is exposed to AT.
- Is focusable
- Is formatted with a blank line before and after (display:block in web jargon)
- Conveys important information about the structure of the document, such as a heading
- Contains a value that can change
- Uses a ARIA role attribute that is not equal to "presentation"
- Uses one of the universal ARIA attributes, which are currently:
- aria-datatype (obsolete as of FF 3.2)
- Is pointed to by another element with an ARIA relation (aria-controls, aria-describedby, aria-flowto, aria-labelledby or aria-owns)
- Uses an onclick handler
- Is in list of accessible elements in the role table
Accessible Web Specifications
The following markup languages are exposed to AT.
ARIA (Accessible Rich Internet Applications) is W3C's specification. Originally ARIA was designed to bring accessibility into dynamic web pages, to provide markup to add make accessible custom DHTML widgets which can be used to create the appearance of desktop-style widgets like menus, spreadsheets and tree views which HTML lacks. Or, it can be used to completely change content on the fly, without loading a new page. ARIA is solution to make this accessible. However ARIA usage area isn't restricted by HTML, for example, in Gecko it is used in XUL as well.
Strongly speaking ARIA specification provides an ontology of roles, states, and properties that set out an abstract model for accessible interfaces and can be used to improve the accessibility and interoperability of Web Content and Applications. This information is mapped to accessibility frameworks that use this information to provide alternative access solutions. You can follow ARIA page link to get more information.
W3C provides documentation how ARIA markup is exposed to AT API. Gecko implementation follows it.
HTML (Hyper Text Markup Language) is W3C's specification. HTML is most widely used markup language in the web today. Currently Gecko supports HTML 4.01 version. However partial implementation of HTML 5 takes a place in Firefox 3.6 (Gecko 1.9.1). See Gecko's HTML documentation for more information.
Currently there is no specification how HTML should be mapped into AT APIs. In the meantime refer to documentation how HTML markup is exposed to AT in Gecko.
Refer to documentation how Gecko exposes XUL markup to AT.
XForms is W3C specification. Drawing on other W3C standards like XML Schema, XPath, and XML Events, XForms tries to address some of the limitations with the current HTML forms model. One of the key features of XForms is accessibility. XForms accessibility support was introduced for Gecko 1.9 (Firefox 3.0). Also see Gecko's XForms page for more information.
Refer to documentation how XForms is exposed to AT in Gecko.
MathML is an XML dialect used to display full math notation on web pages. MathML is supported in Gecko starting from Gecko 1.8.0 (Firefox 1.5). See Gecko's MathML page for more information. However Gecko doesn't expose MathML content to AT. We plan to support it in the future but the current phase is discussions still. We keep an eye on work activity of expert handlers group of Linux Foundation which develops an approach how to make MathML accessible. Currently MathML accessibility is implemented by MathPlayer which works with JAWS. MathPlayer uses a trick to achieve this, MathML content is not exposed as hierarchical accessible tree, instead they provide accessible names for MathML content which are very descriptive and this allows to be read by JAWS. We look for full-pledged solution which will allow AT navigation through MathML content.
SVG (Scalable Vector Graphics) is essentially W3C's XML-based version of Flash - mixes well with other markup based content, supports the DOM and has accessibility features. SVG is implemented starting from Gecko 1.8.0 (Firefox 1.5). See Gecko's SVG page for more information. In the meantime SVG is not accessible. Potentially it can make use of ARIA role and states, but it may require more powerful author-definable relationships.