Accessibility/DOMTreeMapping
From MozillaWiki
Contents
What is this
This document describes the mapping between DOM and accessibles trees.
Current state
Existing problems are:
- Tree update bugs
- imagemap
- listbox
- Unoptimal tree update
- Due to coalescence tree may be not shutdown (cycle collector works)
Details
What we need that for?
The mapping of DOM tree to accessible tree is performed for following proposes:
- content insertion
- find insertion point
- traverse extended DOM tree
- content removal
- find removal point or find removed accessible
- DOM point to offset
- convert DOM selection into accessible text selection and caret
Accessible tree
Accessible object manages its children. There are several types of accessibles:
- Extended DOM tree traversal
- Not based on DOM tree traversal
- outerdoc accessible
- leaf accessibles
- HTML combobox (combobox list accessible)
- XUL trees
- DOM nodes adoption
- imagemap
- HTML selects, get accessible from optgroups
- change insertion point relative DOM tree order
- HTML table moves HTML caption
- Based on DOM tree traversal and own accessible
- listitem (listbullet and listitem content)
Notifications
- standard notifications (standard processing)
- XUL menu notifications (standard processing)
- XUL listbox notifications (needs to implement)
- XUL tree notifications (processed by XUL tree accessible)
- imagemap notification (needs to implement)
Algorithms
Content insertion
Each accessible is responsible for their children.
- How to find insertion point of the inserted subtree (DOM tree and accessible tree ordering is different)
- How to find adopted DOM nodes in the inserted subtree (DOM nodes adoption)
- Fire related events like menupopup_start/alert when tree is created
Content removal
- Traverse whole removed subtree to find adopted case? Should they have own mechanism to handle adopted things?
- Find root accessibles within removed subtree, unattach from tree, and shutdown (don't rely on events in this). Fire related events like menupopup_end, alert, hide, reorder events.
DOM point to text offset
How we should proceed the case of adopted children and changed order?