Accessibility/DOMTreeMapping

From MozillaWiki
Jump to: navigation, search

What is this

This document describes the mapping between DOM and accessibles trees.

Current state

Existing problems are:

  1. Tree update bugs
    1. imagemap
    2. listbox
  2. Unoptimal tree update
  3. 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:

  1. content insertion
    1. find insertion point
    2. traverse extended DOM tree
  2. content removal
    1. find removal point or find removed accessible
  3. DOM point to offset
    1. convert DOM selection into accessible text selection and caret

Accessible tree

Accessible object manages its children. There are several types of accessibles:

  1. Extended DOM tree traversal
  2. Not based on DOM tree traversal
    1. outerdoc accessible
    2. leaf accessibles
    3. HTML combobox (combobox list accessible)
    4. XUL trees
  3. DOM nodes adoption
    1. imagemap
    2. HTML selects, get accessible from optgroups
  4. change insertion point relative DOM tree order
    1. HTML table moves HTML caption
  5. Based on DOM tree traversal and own accessible
    1. listitem (listbullet and listitem content)

Notifications

  1. standard notifications (standard processing)
  2. XUL menu notifications (standard processing)
  3. XUL listbox notifications (needs to implement)
  4. XUL tree notifications (processed by XUL tree accessible)
  5. imagemap notification (needs to implement)

Algorithms

Content insertion

Each accessible is responsible for their children.

  1. How to find insertion point of the inserted subtree (DOM tree and accessible tree ordering is different)
  2. How to find adopted DOM nodes in the inserted subtree (DOM nodes adoption)
  3. Fire related events like menupopup_start/alert when tree is created

Content removal

  1. Traverse whole removed subtree to find adopted case? Should they have own mechanism to handle adopted things?
  2. 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?