<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TREVOR</id>
	<title>MozillaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TREVOR"/>
	<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/Special:Contributions/TREVOR"/>
	<updated>2026-06-12T15:55:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Platform/2012-Q3-Goals&amp;diff=454322</id>
		<title>Platform/2012-Q3-Goals</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Platform/2012-Q3-Goals&amp;diff=454322"/>
		<updated>2012-07-25T13:42:19Z</updated>

		<summary type="html">&lt;p&gt;TREVOR: /* Accessibility */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== General Goals ===&lt;br /&gt;
&lt;br /&gt;
=== GFX ===&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
* {{ok|stop using Java screenshotting in Fennec for Android}}&lt;br /&gt;
** we agree that we want to do this, but we have concerns that the pieces will be there, but we&#039;ll still be unable to turn off java screenshotting because of performance problems.&lt;br /&gt;
** alternative: &amp;quot;implement multi-resolution tiles&amp;quot;&lt;br /&gt;
* {{ok|complete asynchronous panning and zooming with OMTC for B2G/gonk}}&lt;br /&gt;
* {{ok|Ship OMTC on B2G/gonk for basecamp}}&lt;br /&gt;
* {{ok|Be able to use Skia for canvas drawing on non-accelerated Windows computers}} &lt;br /&gt;
** gw280 to gather skia software-only performance numbers by Tuesday 3 July to help make a decision&lt;br /&gt;
** carryover - do we care at this point, given the below item?&lt;br /&gt;
* {{ok|Be able to use Skia for content drawing on Android}}&lt;br /&gt;
* {{ok|Remove the non-Azure canvas implementation}}&lt;br /&gt;
** Use the Cairo Azure backend everywhere there isn&#039;t a more specific backend&lt;br /&gt;
* {{ok|OMTC cross-platform refactor}}&lt;br /&gt;
** Risky!&lt;br /&gt;
** Not back-outable. No OMTC or &amp;quot;New OMTC&amp;quot; only.&lt;br /&gt;
** Needed so we can enable OMTC everywhere.&lt;br /&gt;
* {{ok|Have a clean, dependable, extensible, all-platform, free-of-adverse-cache-effects driver blacklisting solution.}}&lt;br /&gt;
* Other important Q3 work&lt;br /&gt;
** WebGL work. bjacob to fill in what this means.&lt;br /&gt;
** Enable Azure for content everywhere&lt;br /&gt;
** Snappy work&lt;br /&gt;
** Other B2G work as required&lt;br /&gt;
** Moving other pieces of work off the main thread&lt;br /&gt;
** BugKill - ???&lt;br /&gt;
** Increase number of regular contributors&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Layout ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
* {{ok|Readability 2.0}}&lt;br /&gt;
* {{ok|Complete Graphite Fonts Project}} ({{bug|631479}})&lt;br /&gt;
* {{ok|Invalidation via DisplayList Analysis ({{bug|539356}})}}&lt;br /&gt;
* {{ok|CSS Flexbox feature/spec}} ({{bug|666041}})&lt;br /&gt;
* {{ok|Add image visibility API ({{bug|689623}})}}&lt;br /&gt;
* {{risk|Continue View class removal ({{bug|337801}})}}&lt;br /&gt;
* {{ok|CSS}} [[Platform/Features/Vertical_text|Vertical Text]] ({{bug|145503}})&lt;br /&gt;
* {{ok|CSS Pagination}} ({{bug|775628}})&lt;br /&gt;
* {{ok|CSS Variables}} ({{bug|773296}})&lt;br /&gt;
* {{ok|Implement the auto value for the HTML dir attribute ({{bug|548206}})}}&lt;br /&gt;
* {{ok|CSS 2.1 Test Suite v.2}}&lt;br /&gt;
* {{ok|CSS Spec, Unprefixing &amp;amp; Testing}} ({{bug|775235}})&lt;br /&gt;
* {{ok|Conditional Rules feature &amp;amp; spec}} ({{bug|649740}})&lt;br /&gt;
* {{ok|Scoped Style Sheets}} ({{bug|508725}})&lt;br /&gt;
* {{ok|SVG Text}} ({{bug|655877}})&lt;br /&gt;
* {{ok|Off Main Thread Animations}} ({{bug|755084}}, {{bug|706179}})&lt;br /&gt;
* {{risk|Layout Azure Conversion}} ({{bug|776197}} - needs staffing)&lt;br /&gt;
* {{prev|Support for Complex Scripts on Mobile}}&lt;br /&gt;
** Example bugs: {{bug|619521}}, {{bug|619524}}, {{bug|676068}}, {{bug|631159}}&lt;br /&gt;
* Specs:&lt;br /&gt;
** Web Animations (FPWD)&lt;br /&gt;
** CSS3 Text&lt;br /&gt;
** CSS4 Selectors&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
* {{ok|WebRTC (tracking the W3C and IETF webrtc/rtcweb specs) landed for desktop in mozilla-central. (This includes both PeerConnection and full getUserMedia, but not UI.)}}&lt;br /&gt;
* {{ok|Platform decoders running on the Otoro device will playback videos at a similar performance metric to the equivalent android player}}&lt;br /&gt;
* {{ok|For a specific list of Android phones  (the list will be the &amp;quot;first phase&amp;quot; of Android phones), platform decoders running in Firefox will playback videos at a similar performance metric to the videos playing back in the default browser on the same phone}}&lt;br /&gt;
* {{ok|Publish (to one or more of our newsgroups) a plan for supporting the Web Audio API.  (We&#039;re still hoping to make improvements to the spec.)}}&lt;br /&gt;
&lt;br /&gt;
Mission Note: The media team will support B2G&#039;s efforts to ship B2G version 1 above any goals for this quarter.&lt;br /&gt;
&lt;br /&gt;
=== DOM ===&lt;br /&gt;
* {{ok|Stop leaks by adding purple buffer support for cycle collected non-nsISupports objects.}}&lt;br /&gt;
* {{ok|Speed up cycle collection by representing a DOM tree as a single node in the cycle collector graph.}}&lt;br /&gt;
* {{ok|New DOM bindings for a HTML Element.}}&lt;br /&gt;
&lt;br /&gt;
=== WebAPI ===&lt;br /&gt;
* {{ok|Implement cookie-jars for cookies, IndexedDB, localStorage, permission manager and appcache ({{bug|756644}})}}&lt;br /&gt;
* {{ok|Implement app:// protocol (part of implementing trusted apps, {{bug|756729}})}}&lt;br /&gt;
* {{ok|Finalize multiprocess blob support for IndexedDB, DeviceStorage and Message Manager ({{bug|759427}})}}&lt;br /&gt;
* {{ok|Implement unified offline storage quota system, putting IndexedDB and localStorage under this quota system ({{bug|767944}})}}&lt;br /&gt;
* {{ok|Zip file contents support using blobs ({{bug|772434}})}}&lt;br /&gt;
* {{ok|DeviceStorage improvements (expose available (free) size for each device storage, storage[x].removable ({{bug|765498}})}}&lt;br /&gt;
* {{ok|FileHandle [[WebAPI/FileHandleAPI#ToDo | improvements]]}}&lt;br /&gt;
* {{ok|DeviceStorage onchange notifications ({{bug|763976}})}}&lt;br /&gt;
* {{ok|DeviceStorage editable features ({{bug|752724}})}}&lt;br /&gt;
* {{ok|String encoding/decoding API ({{bug|764234}})}}&lt;br /&gt;
&lt;br /&gt;
=== JS  ===&lt;br /&gt;
&lt;br /&gt;
=== Accessibility ===&lt;br /&gt;
* {{ok| Preliminary AccessFu support in B2G.}}&lt;br /&gt;
* {{ok| TTS Web API &amp;amp; implementation.}}&lt;br /&gt;
* {{ add 2 additional measures of a11y&#039;s effect on perf, and show measurable perf increase of atleast 5% on three measures}}&lt;br /&gt;
&lt;br /&gt;
=== Perf ===&lt;br /&gt;
* {{prev|{{nbug|736144}}: Async local storage via blocking pageload}}&lt;br /&gt;
* {{prev|{{nbug|563742}}: provide js file api (in workers) for all supported platforms.}}&lt;br /&gt;
* {{prev|{{nbug|662397}}: Reorder xul.dll on windows to speed up startup}}&lt;br /&gt;
* {{prev|{{nbug|662444}}: call exit(0) on shutdown}}&lt;br /&gt;
* {{prev|{{nbug|661881}}: Bundle about-telemetry extension to ship with Firefox}}&lt;br /&gt;
* {{ok|{{nbug|769241}}: Make libunwind work on ARM}}&lt;br /&gt;
* {{prev|Prevent, to a reasonable extent, background tabs from starving the main thread}}&lt;br /&gt;
* {{ok|{{nbug|770317}}: Track disk + network by thread on testing infrastructure}}&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
&lt;br /&gt;
* {{ok|Remove all synchronous disk cache APIs, or at least disable their use on the main thread, on mozilla-central.}}&lt;br /&gt;
** Nick Hurley and Michal Novotny will lead this effort.&lt;br /&gt;
* {{ok|{{nbug|766973}}: Don&#039;t allow synchronous DNS resolution from the main thread.}}&lt;br /&gt;
** Josh Aas will lead this effort.&lt;br /&gt;
* {{ok|{{nbug|105843}}: Land code to not necessarily delete the cache after unclean shut-down on mozilla-central.}}&lt;br /&gt;
** Nick Hurley and Michal Novotny will lead this effort.&lt;br /&gt;
* {{ok|Have Stone Ridge reliably reporting basic performance results to graph server for all three top-tier platforms.}}&lt;br /&gt;
** Nick Hurley will lead this effort.&lt;br /&gt;
* {{ok|{{nbug|768705}}, {{nbug|704447}}, {{nbug|766817}}: Fix some remaining significant WebSockets bugs.}}&lt;br /&gt;
** Jason Duell will lead this effort.&lt;br /&gt;
* {{ok|{{nbug|702122}}: Land a DASH for WebM implementation in mozilla-central.}}&lt;br /&gt;
** Steve Workman will lead this effort.&lt;br /&gt;
* {{ok|{{nbug|737470}}: Ship SPDY v3 on by default.}}&lt;br /&gt;
** Patrick McManus will lead this effort.&lt;br /&gt;
* {{ok|Resolve all networking security bugs that received a designation of sg:moderate or higher more than six weeks ago. This is a permanent goal for the group.}}&lt;br /&gt;
** Brian Smith will lead this effort.&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
&lt;br /&gt;
=== Mobile  ===&lt;br /&gt;
&lt;br /&gt;
=== B2G ===&lt;br /&gt;
&lt;br /&gt;
=== Research ===&lt;/div&gt;</summary>
		<author><name>TREVOR</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Accessibility/People&amp;diff=377364</id>
		<title>Accessibility/People</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Accessibility/People&amp;diff=377364"/>
		<updated>2011-12-09T19:25:28Z</updated>

		<summary type="html">&lt;p&gt;TREVOR: add myself&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello! We&#039;d love you to add your name here so be sure to meet us and find out how you can help us move accessibility at internet speed.&lt;br /&gt;
&lt;br /&gt;
= David Bolter =&lt;br /&gt;
{|&lt;br /&gt;
|rowspan=&amp;quot;0&amp;quot;|[[File:Davidb.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
|IRC:&lt;br /&gt;
|davidb&lt;br /&gt;
|-&lt;br /&gt;
|Bugzilla:&lt;br /&gt;
|:davidb (in other words, just type colon davidb and it will resolve)&lt;br /&gt;
|-&lt;br /&gt;
|Bio:&lt;br /&gt;
|Mozilla employee based in Toronto, Canada&lt;br /&gt;
|-&lt;br /&gt;
|Speaks:&lt;br /&gt;
|English, a little French, and even less Korean.&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Knows:&lt;br /&gt;
* Cross-platform accessibility gecko code.&lt;br /&gt;
* WAI-ARIA and HTML accessibility specifications and implementation.&lt;br /&gt;
* Who does what.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Trevor Saunders =&lt;br /&gt;
|{&lt;br /&gt;
|IRC  / internets:&lt;br /&gt;
|tbsaunde&lt;br /&gt;
|-&lt;br /&gt;
|bugzilla:&lt;br /&gt;
|:TBSAUNDE&lt;br /&gt;
|-&lt;br /&gt;
|LANGUAGES:&lt;br /&gt;
|english, epsilon spanish&lt;br /&gt;
|-&lt;br /&gt;
|BIO:&lt;br /&gt;
|senior at CMU in cs,  mozilla contractor / former intern&lt;br /&gt;
|knows:&lt;br /&gt;
| * cross platform code&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TREVOR</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Accessibility/SoftFocus&amp;diff=370560</id>
		<title>Accessibility/SoftFocus</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Accessibility/SoftFocus&amp;diff=370560"/>
		<updated>2011-11-17T09:45:41Z</updated>

		<summary type="html">&lt;p&gt;TREVOR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Background ==&lt;br /&gt;
It is useful to have a focus-like state that is exclusive to accessibility and is independant of the DOM state. From the user&#039;s perspective this allows reviewing a document or web application without directly affecting its state, like moving the caret or cycling through focusable elements. This is useful in mobile, for example a user could navigate to a text entry without having it capture input. Only if the user chooses to enter text they would &amp;quot;activate&amp;quot; the text entry which would bring up an on screen keyboard, etc. This feature would also allow easier navigation of content.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039; From what I gathered from Alex&#039;s input in Toronto, he thinks it would be useful to not limit this to a single node at a time, but to allow multiple focal points. It might pay off in the long term as this would be more future proof, and allow other use cases such as multi-region magnifier or interesting features in cognitive disablity ATs. This introduces a layer of complexity (pivots); nonetheles, the usage should not get complicated, we would just always used a pivot index of 0.&lt;br /&gt;
&lt;br /&gt;
== Pivots ==&lt;br /&gt;
A pivot (working title) is a focal point. Typically you would only have one pivot that would change depending on where the user is exploring. But you could have multiple pivots each pointing to something else and changing independantly.&lt;br /&gt;
&lt;br /&gt;
== nsIAccessible ==&lt;br /&gt;
&lt;br /&gt;
 interface nsIAccessible : nsISupports&lt;br /&gt;
 {&lt;br /&gt;
   ...&lt;br /&gt;
   /***&lt;br /&gt;
    * Take the given pivot&#039;s soft focus.&lt;br /&gt;
    *&lt;br /&gt;
    * @param pivotIndex  The pivot of which to take focus. If the given index is -1 or out&lt;br /&gt;
    *                    of range (pivotIndex &amp;gt;= number of pivots), create a new pivot.&lt;br /&gt;
    * @return            The index of the affected pivot.&lt;br /&gt;
    */&lt;br /&gt;
   long takeSoftFocus(in long pivotIndex);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== State ===&lt;br /&gt;
&lt;br /&gt;
An accessible that is soft focused would have a state of &amp;lt;tt&amp;gt;EXT_STATE_SOFT_FOCUSED&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Event ===&lt;br /&gt;
&lt;br /&gt;
When an accessible gets or loses focus, an &amp;lt;tt&amp;gt;EVENT_STATE_CHANGED&amp;lt;/tt&amp;gt; is fired.&lt;br /&gt;
&lt;br /&gt;
it seems like it is important for event consumer to know which pivit changed, but I&#039;m not really sure how to comunicate this best.&lt;br /&gt;
&lt;br /&gt;
== nsIAccessibleDocument ==&lt;br /&gt;
&lt;br /&gt;
 interface nsIAccessibleDocument : nsISupports&lt;br /&gt;
 {&lt;br /&gt;
   ...&lt;br /&gt;
   /***&lt;br /&gt;
    * The collection of tracked soft focuses. The index in the array matches the pivot&#039;s&lt;br /&gt;
    * index.&lt;br /&gt;
    */&lt;br /&gt;
   readonly attribute nsIArray softFocusPivots;&lt;br /&gt;
 &lt;br /&gt;
   /***&lt;br /&gt;
    * Remove soft focus state from accessible on the given pivot. No-op if no&lt;br /&gt;
    * accessible is focused on that pivot. On a successful call the&lt;br /&gt;
    * nsIAccessibleDocument.softFocusPivots element at the given pivot index will&lt;br /&gt;
    * be set to null.&lt;br /&gt;
    *&lt;br /&gt;
    * @param pivotIndex  The pivot of which to blur focus.&lt;br /&gt;
    */&lt;br /&gt;
   void blurSoftFocus(in PRInt32 pivotIndex);&lt;br /&gt;
&lt;br /&gt;
does a negative index make sense?&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== nsIAccessibleText ==&lt;br /&gt;
&lt;br /&gt;
In addition to soft focus, an accessible that supports nsIAccessibleText could have a soft text selection that is independant of any actual selection in the document.&lt;br /&gt;
&lt;br /&gt;
 interface nsIAccessibleText : nsISupports&lt;br /&gt;
 {&lt;br /&gt;
   ...&lt;br /&gt;
   /***&lt;br /&gt;
    * Set the soft selection to the given range.&lt;br /&gt;
    *&lt;br /&gt;
    * @param startOffset  Start index of text to soft select.&lt;br /&gt;
    * @param endOffset    End index of text to soft select.&lt;br /&gt;
    */&lt;br /&gt;
   void setSoftSelection (in long startOffset, in long endOffset);&lt;br /&gt;
 &lt;br /&gt;
   /***&lt;br /&gt;
    * Clear the soft selection in this accessible.&lt;br /&gt;
    */&lt;br /&gt;
   void clearSoftSelection ();&lt;br /&gt;
 &lt;br /&gt;
   /***&lt;br /&gt;
    * Get the soft selection range in this accessible.&lt;br /&gt;
    *&lt;br /&gt;
    * @param startOffset  [out] Start index of soft selected text.&lt;br /&gt;
    * @param endOffset    [out] End index of soft selected text.&lt;br /&gt;
    * @return             false if no range is selected.&lt;br /&gt;
    */&lt;br /&gt;
   boolean getSoftSelection (out long startOffset, out long endOffset);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Event ===&lt;br /&gt;
When the soft selection changes an &amp;lt;tt&amp;gt;EVENT_SOFT_TEXT_SELECTION_CHANGED&amp;lt;/tt&amp;gt; event is fired. This event is only emitted if the accessible already has &amp;lt;tt&amp;gt;EXT_STATE_SOFT_FOCUSED&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Example Usage ==&lt;br /&gt;
&lt;br /&gt;
=== Setting Soft Focus ===&lt;br /&gt;
An input event handler that changes the soft focus.&lt;br /&gt;
&lt;br /&gt;
 function inputEventHandler(event) {&lt;br /&gt;
   ...&lt;br /&gt;
   let currNode = docAcc.softFocusPivots[0];&lt;br /&gt;
   if (currNode.nextSibling)&lt;br /&gt;
     currNode.nextSibling.takeSoftFocus(0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Presenting Soft Focus ===&lt;br /&gt;
An event listener that highlights the bounds of a soft focus. &amp;lt;tt&amp;gt;drawRect()&amp;lt;/tt&amp;gt; is left to your imagination.&lt;br /&gt;
&lt;br /&gt;
 function handleEvent(aEvent) {&lt;br /&gt;
   if (aEvent.type == EVENT_STATE_CHANGED) {&lt;br /&gt;
     let event = aEvent.QueryInterface(nsIAccessibleStateChangeEvent);&lt;br /&gt;
     if (event.state == EXT_STATE_SOFT_FOCUSED &amp;amp;&amp;amp; event.isExtraState()) {&lt;br /&gt;
       if (event.isEnabled())&lt;br /&gt;
         showSoftFocus(aEvent.accessible);&lt;br /&gt;
       else&lt;br /&gt;
         hideSoftFocus();&lt;br /&gt;
     }&lt;br /&gt;
   } else if (aEvent.type == EVENT_SOFT_TEXT_SELECTION_CHANGED) {&lt;br /&gt;
         showSoftFocus(aEvent.accessible);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function showSoftFocus (aAccessible) {&lt;br /&gt;
   // Only interested in pivot index 0&lt;br /&gt;
   if (accDoc.softFocusPivots[0] != aAccessible)&lt;br /&gt;
     return;&lt;br /&gt;
 &lt;br /&gt;
   let x = {};&lt;br /&gt;
   let y = {};&lt;br /&gt;
   let w = {};&lt;br /&gt;
   let h = {};&lt;br /&gt;
 &lt;br /&gt;
   try {&lt;br /&gt;
     let textAcc = aAccessible.QueryInterface(nsIAccessibleText);&lt;br /&gt;
     let start = {};&lt;br /&gt;
     let end = {};&lt;br /&gt;
     if (textAcc.getSoftSelection(start, end)) {&lt;br /&gt;
       textAcc.getRangeExtents(start.value, end.value, x, y, w, h,&lt;br /&gt;
                               COORDTYPE_SCREEN_RELATIVE);&lt;br /&gt;
       drawRect(x.value, y.value, w.value, h.value);&lt;br /&gt;
       return;&lt;br /&gt;
     }&lt;br /&gt;
   catch (e) {&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   aAccessible.getBounds(x, y, w, h);&lt;br /&gt;
   drawRect(x.value, y.value, w.value, h.value);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>TREVOR</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Accessibility/B2G&amp;diff=334522</id>
		<title>Accessibility/B2G</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Accessibility/B2G&amp;diff=334522"/>
		<updated>2011-07-29T07:12:07Z</updated>

		<summary type="html">&lt;p&gt;TREVOR: /* Boot2Gecko Accessibility, AKA B2AW (Boot 2 Accessible Web) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Boot2Gecko Accessibility, AKA B2AW (Boot 2 Accessible Web) =&lt;br /&gt;
&lt;br /&gt;
This is a collection of ideas and requirements for the [[B2G]] project from the accessibility standpoint.&lt;br /&gt;
&lt;br /&gt;
== Output via Speech ==&lt;br /&gt;
&lt;br /&gt;
Speech output can be done through either the Android accessibility/TTS framework or &lt;br /&gt;
&lt;br /&gt;
huh, why would we use the android stuff??? its just some java goo around espeak svox pico and whatever other tts&#039;s they support now.  Since we&#039;ll only care about the freely redistributable ones anyway, it seems to make a lot more sense to just directly  use the respective libraries api and expose some reasonable abstraction to js through ctypes / xpcom&lt;br /&gt;
&lt;br /&gt;
through writing an engine ourselves in JavaScript. The latter has the advantage that we have it under our control what we include and don&#039;t have to rely on possibly closed-sourced parts of the Android infrastructure. The things to consider are:&lt;br /&gt;
&lt;br /&gt;
* Multilingual support. We don&#039;t want something that speaks only English.&lt;br /&gt;
* Speech quality: We don&#039;t want something that sounds like it was built on a Votrax chip in the early 1980s.&lt;br /&gt;
&lt;br /&gt;
== Speech recognition ==&lt;br /&gt;
&lt;br /&gt;
A solution that, like Nuance does it, sends stuff to a server to be recognized, since the speech rec process requires processing power that is not really available on mobile devices today. Speech recognition consumes considerably more CPU power than TTS.&lt;br /&gt;
&lt;br /&gt;
== Navigation ==&lt;br /&gt;
&lt;br /&gt;
First, have Legal check whether we can sort of copy Apple&#039;s gesture-based interaction model or if they have patented it. It is a sophisticated gesturing model that allows blind users to do virtually everything without requiring a physical keyboard:&lt;br /&gt;
&lt;br /&gt;
* Touch something: Speak what&#039;s under the finger.&lt;br /&gt;
* Double tap the last touched item: Activate it if possible (e. g. activate a link, set focus to an input etc.)&lt;br /&gt;
* Swipe left and right: Move from item to item. Not just tabbable ones, but everything, so the page can be explored element by element.&lt;br /&gt;
* Two finger dial gesture: Set the rotor (see next gesture) to a certain element. Elements can be links, headers, landmarks, form elements, lists, graphics, tables, and others we think are useful. Turn the dialer counterclock wise and the selection moves in the opposite direction.&lt;br /&gt;
* Swipe up and down: Move to the previous resp. next element of a given type.&lt;br /&gt;
* Two finger swipe up: Read from beginning of page to currently touched element.&lt;br /&gt;
* Two finger Swipe down: Read from current location to end of page continuously.&lt;br /&gt;
* Three finger swipe down/up: Move to next/previous visible part of page (like what fits on the touchscreen)&lt;br /&gt;
* Tap with three fingers: Say which page, of how many, one is on. Gives the user an idea on how long the page actually is.&lt;br /&gt;
&lt;br /&gt;
== Physical Keyboard input ==&lt;br /&gt;
&lt;br /&gt;
This could be tailored to what NVDA is doing: In browse situations, allow to jump to headings, landmarks, links, form fields, graphics, and others. When inside an editable field, type into the field. Make it transparent to users whether they&#039;re browsing or filling out a form (the Orca/VoiceOver transparency model).&lt;br /&gt;
&lt;br /&gt;
== Zoom ==&lt;br /&gt;
&lt;br /&gt;
Provide Zoom features.&lt;/div&gt;</summary>
		<author><name>TREVOR</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Accessibility/Planning/Android&amp;diff=314574</id>
		<title>Accessibility/Planning/Android</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Accessibility/Planning/Android&amp;diff=314574"/>
		<updated>2011-06-01T16:39:13Z</updated>

		<summary type="html">&lt;p&gt;TREVOR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note there is a recent Google IO [http://www.youtube.com/watch?v=BPXqsPeCneA video] on Android Accessibility. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Questions&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*What is the Google approach for Android browser accessibility? (Talkback vs ChromeVox)  (Trev we know its all chromvox now don&#039;t we?)&lt;br /&gt;
*Are new API planned that would allow non focused elements to send AccessibleEvent or query information about arbitrary Views?  (presumably the android fork david mentioned in passing would have these?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation ideas&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*We can use two different approaches:&lt;br /&gt;
**Inject ChromeVox into firefox mobile, which directly uses Android framework TTS to do selfvoicing (Both, Chrome OS and Android native browser does this way)&lt;br /&gt;
**Inject FireVox&lt;br /&gt;
**Use our own accessibility layer and based on our accesible events fire AccesibilityEvent (so Talkback would speak)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to evaluate both options, we need to figure out some stuff:&lt;br /&gt;
*Check if we can easily expose Java objects from the main application to our js engine (for TTS calls inside ChromeVox)  This fits nicely with the TTS in java script using native apis project, but would be a dependancy of this.&lt;br /&gt;
*Check if the interation model of ChromeVox works ok with us (does it speak mostly when something is focused? if so, are we moving focus in the same way as WebKit does, allowing all elements to be focused?)  Does it use DOM or other apis that we also provide?&lt;br /&gt;
*Explore if we can achieve similar results using our accesible code firing AccesibilityEvent&lt;br /&gt;
*Check accessibility of Firefox chrome widgets (dialogs, preferences, etc...)  Are these native android widgets or are they ours?  If they&#039;re ours then it sounds like we&#039;ll have to deal with coordinating the firevoxen in two processes (how would this work)?&lt;/div&gt;</summary>
		<author><name>TREVOR</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Accessibility/Intern.Next&amp;diff=314187</id>
		<title>Accessibility/Intern.Next</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Accessibility/Intern.Next&amp;diff=314187"/>
		<updated>2011-05-31T17:58:07Z</updated>

		<summary type="html">&lt;p&gt;TREVOR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projects for accessibility engineering interns: &lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;HTML Speech&#039;&#039;&#039;. Add text to speech capability for the Firefox platform. The implementation will use whatever text to speech engine is provided by the platform, for example VoiceOver on OSX.&lt;br /&gt;
#&#039;&#039;&#039;Mobile Accessibility&#039;&#039;&#039;. Improve eyes-free browsing on Android. Improve the FireVox Firefox add-on such that it is a favorable alternative to desktop screen readers. Collaborate with the mobile and accessibility teams.&lt;br /&gt;
#&#039;&#039;&#039;Browser Accessibility Verification Tooling&#039;&#039;&#039;. Design and implement DOM API such that browser accessibility capabilities can be tested at runtime. This ground breaking work would allow browser compatibility efforts like quirksmode.org to include accessibility.&lt;br /&gt;
#&#039;&#039;&#039;Caret Navigation&#039;&#039;&#039;. Dive into an under resourced area of the Firefox (gecko) platform code to design solutions to priority issues. The caret codeprovides an indication of the current selection  position in the document to accessibility technologies.  This is a critical piece ofreading,  editing and selecting text on the web page, important to many web apps. Additionally, and importantly, the work will allow screen readers to provide an even better experience with Firefox.&lt;/div&gt;</summary>
		<author><name>TREVOR</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Accessibility/Intern.Next&amp;diff=314159</id>
		<title>Accessibility/Intern.Next</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Accessibility/Intern.Next&amp;diff=314159"/>
		<updated>2011-05-31T17:08:20Z</updated>

		<summary type="html">&lt;p&gt;TREVOR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projects for accessibility engineering interns: &lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;HTML Speech&#039;&#039;&#039;. Add text to speech capability for the Firefox platform. The implementation will use whatever text to speech engine is provided by the platform, for example VoiceOver on OSX.&lt;br /&gt;
#&#039;&#039;&#039;Mobile Accessibility&#039;&#039;&#039;. Improve eyes-free browsing on Android. Improve the FireVox Firefox add-on such that it is a favorable alternative to desktop screen readers. Collaborate with the mobile and accessibility teams.&lt;br /&gt;
#&#039;&#039;&#039;Browser Accessibility Verification Tooling&#039;&#039;&#039;. Design and implement DOM API such that browser accessibility capabilities can be tested at runtime. This ground breaking work would allow browser compatibility efforts like quirksmode.org to include accessibility.&lt;br /&gt;
#&#039;&#039;&#039;Caret Navigation&#039;&#039;&#039;. Dive into an under resourced area of the Firefox (gecko) platform code to design solutions to priority issues. The caret code is a critical piece of editing and selecting text on the web page, important to many web apps. Additionally, and importantly, the work will allow screen readers to provide an even better experience with Firefox.&lt;/div&gt;</summary>
		<author><name>TREVOR</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Accessibility/NewArchitecture&amp;diff=303154</id>
		<title>Accessibility/NewArchitecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Accessibility/NewArchitecture&amp;diff=303154"/>
		<updated>2011-04-27T12:11:55Z</updated>

		<summary type="html">&lt;p&gt;TREVOR: /* accessible objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Summary=&lt;br /&gt;
The page describes proposed Gecko a11y architectural changes.&lt;br /&gt;
&lt;br /&gt;
=Folders=&lt;br /&gt;
&lt;br /&gt;
#build - accessibility service factory&lt;br /&gt;
#idl&lt;br /&gt;
##ia2 - IAccessible2 interfaces&lt;br /&gt;
##msaa - ISimpleDOM interfaces&lt;br /&gt;
##xpcom - XPCOM interfaces&lt;br /&gt;
#public - exported a11y headers&lt;br /&gt;
#src&lt;br /&gt;
##base - common files&lt;br /&gt;
##generic - generic accessible classes&lt;br /&gt;
##html - HTML accessible classes&lt;br /&gt;
##xul - XUL accessible classes&lt;br /&gt;
##xforms - XForms accessible classes&lt;br /&gt;
##atk - ATK implementation (Linux)&lt;br /&gt;
##windows - MSAA/IAccessible2/SimpleDOM interfaces implementation (Windows)&lt;br /&gt;
##mac - NSAccessibility protocol implementation (OS X)&lt;br /&gt;
##others - other platforms&lt;br /&gt;
##xpcom - XPCOM interfaces implementation&lt;br /&gt;
#tests&lt;br /&gt;
##crashtests&lt;br /&gt;
##mochitest&lt;br /&gt;
&lt;br /&gt;
=&#039;public&#039; folder=&lt;br /&gt;
# No excess dependences. All inline methods that requires extra includes are prototyped here and defined in implementation classes.&lt;br /&gt;
# Defined inside mozilla::a11y namespace&lt;br /&gt;
&lt;br /&gt;
==accessible objects==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * The existing base/nsAccessNode.&lt;br /&gt;
 */&lt;br /&gt;
class DOMNodeAccessible;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * The existing base/nsAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class Accessible : public DOMNodeAccessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing html/nsHyperTextAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class HyperTextAccessible : public Accessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing base/nsDocAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class DocAccessible : public HyperTextAccessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing base/nsRootAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class RootAccessible : public DocAccessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing base/nsApplicationAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class AppAccessible : public Accessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * New interface classes based on nsIAccessibleTable and nsIAccessibleTableCell.&lt;br /&gt;
 */&lt;br /&gt;
class TableAccessible : public Accessible {&lt;br /&gt;
 int32 GetIndx(row, col);&lt;br /&gt;
 void GetPositionFromIndex(index, row, col);&lt;br /&gt;
 tableCellAccessible* GetTableCellAt(row, col);&lt;br /&gt;
 void GetExtents(row, col, rowExtent, colExtent);&lt;br /&gt;
 int getRows()&lt;br /&gt;
  int getCols()&lt;br /&gt;
Accessible* Caption()&lt;br /&gt;
//  these might be faster if on table cell not the table not sure though&lt;br /&gt;
  Accessible* array getRowHeadercells(int row)&lt;br /&gt;
  Accessible* array getColHeadercells(int col )&lt;br /&gt;
  string Summary()&lt;br /&gt;
  bool forLayout()&lt;br /&gt;
// who uses these?&lt;br /&gt;
  selectRow(int row)&lt;br /&gt;
selectCol(int col)&lt;br /&gt;
  unselectRow(int row)&lt;br /&gt;
  unselectCol(int col)&lt;br /&gt;
// seems somewhat reduntant with geting header cells, but maybe we need it&lt;br /&gt;
  string  rowDescription(int row)&lt;br /&gt;
  string colDescription(int col)&lt;br /&gt;
// are these useful?&lt;br /&gt;
 bool isRowSelected(row)&lt;br /&gt;
 bool isColSelected(col);&lt;br /&gt;
 GetSelectedCells(array&amp;lt;accessible&amp;gt;&amp;amp; cells);&lt;br /&gt;
 void GetSelectedRows(array&amp;lt;int&amp;gt;&amp;amp; rows);&lt;br /&gt;
 void GetSelectedCols(array&amp;lt;int32&amp;gt;&amp;amp; cols);&lt;br /&gt;
};&lt;br /&gt;
class TableCellAccessible : public HyperTextAccessible {&lt;br /&gt;
 int GetIndex();&lt;br /&gt;
 void Getposition(row, col);&lt;br /&gt;
 void GetExtents(rowExtent, colExtent);&lt;br /&gt;
 bool isSelected();&lt;br /&gt;
TableAccessible* getTable()&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==accessibility service==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing nsDocAccManager and nsAccessibilityService&lt;br /&gt;
 */&lt;br /&gt;
class DocAccessibleMgr {};&lt;br /&gt;
class AccService : public DocAccessibleMgr {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=src/generic folder=&lt;br /&gt;
&lt;br /&gt;
[approach shouldn&#039;t work because of multiple inheritance from non abstract classes]&lt;br /&gt;
&lt;br /&gt;
is this supposed to be where the implementation of accessible objects goes?&lt;br /&gt;
&lt;br /&gt;
class GenericAccessible : public Accessible; (nsAccessible)&lt;br /&gt;
&lt;br /&gt;
class ApplicationAccessible : public Accessible; (nsApplicationAccessible)&lt;br /&gt;
&lt;br /&gt;
class ARIAGridAccessible (nsARIAGridAccessible)&lt;br /&gt;
&lt;br /&gt;
class DocAccessible : public GenericAccessible, DocAccessible; (nsDocAccessible)&lt;br /&gt;
&lt;br /&gt;
class HyperTextAccessible&lt;br /&gt;
&lt;br /&gt;
=src platforms folders=&lt;br /&gt;
&lt;br /&gt;
Every platform defines AccServiceWrap used for initialization (currently done by nsAccessNodeWrap classes).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class AccServiceWrap : public AccService {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==atk==&lt;br /&gt;
&lt;br /&gt;
==windows==&lt;br /&gt;
&lt;br /&gt;
A generic class that used as a bridge to gecko accessible.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class NativeObject&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  NativeObject(DOMNodeAccessible* aGeckoAcc) : mGeckoAcc(aGeckoAcc) { }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
  DOMNodeAccessible* mGeckoAcc;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classes that implement IAccessible2 interfaces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class ia2Accessible : virtual public NativeObject,&lt;br /&gt;
                      public IAccessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  // IAccessible&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
hresult&lt;br /&gt;
ia2Accessible::IAccessible2Method()&lt;br /&gt;
{&lt;br /&gt;
  Accessible* geckoAcc = mGeckoAcc-&amp;gt;AsAccessible();&lt;br /&gt;
  geckoAcc-&amp;gt;AccessibleMethod();&lt;br /&gt;
  return S_OK;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class ia2TableAccessible : virtual public NativeObject,&lt;br /&gt;
                           public IAccessibleTable&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  // IAccessibleTable&lt;br /&gt;
  // IAccessibleTable2&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
hresult&lt;br /&gt;
ia2TableAccessible::IATableMethod()&lt;br /&gt;
{&lt;br /&gt;
  TableAccessible* geckoAcc = mGeckoObj-&amp;gt;AsTable();&lt;br /&gt;
  geckoAcc-&amp;gt;TableMethod();&lt;br /&gt;
  return S_OK;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Final classes that implements native interfaces for specific Gecko accessible classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class NativeDOMNodeAccessible : virtual public NativeObject,&lt;br /&gt;
                                public ISimpleDOMNode&lt;br /&gt;
                                public IServiceProvider&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  // IUknown&lt;br /&gt;
  // IServiceProvider&lt;br /&gt;
  // ISimpleDOMNode&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class NativeAccessible : public NativeDOMNodeAccessible,&lt;br /&gt;
                         public IAccessible,&lt;br /&gt;
                         public IEnumVARIANT,&lt;br /&gt;
                         public ia2Accessible&lt;br /&gt;
{&lt;br /&gt;
  // IDispatch&lt;br /&gt;
  // IAccessible&lt;br /&gt;
  // IEnumVariant&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class NativeTableAccessible : public NativeAccessible,&lt;br /&gt;
                              public ia2TableAccessible&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class NativeDocAccessible : public NativeAccessible,&lt;br /&gt;
                            public ISimpleDOMDocument&lt;br /&gt;
{&lt;br /&gt;
  // ISimpleDOMDocument&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wrappers for Gecko classes that are used to create proper native class.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class AccessibleWrap: public Accessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  inline NativeObject* AsNativeObject()&lt;br /&gt;
  {&lt;br /&gt;
    if (!mNativeObj || !IsDefunct())&lt;br /&gt;
      mNativeObj = CreateNativeAccessible();&lt;br /&gt;
    return mNativeObj;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
  virtual NativeObject* CreateNativeAccessible()&lt;br /&gt;
  {&lt;br /&gt;
    return new NativeAccessible(this);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class HTMLTableAccessibleWrap : public HTMLTableAccessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  virtual NativeObject* CreateNativeAccessible()&lt;br /&gt;
  {&lt;br /&gt;
    return new NativeTableAccessible(this);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class DocAccessibleWrap : public DocAccessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  virtual NativeObject* CreateNativeAccessible()&lt;br /&gt;
  {&lt;br /&gt;
    return new NativeDocAccessible(this);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==mac==&lt;br /&gt;
NSAccessibility protocol implementation.&lt;br /&gt;
&lt;br /&gt;
==&#039;xpcom&#039; folder==&lt;br /&gt;
&lt;br /&gt;
Classes are prefixed by &#039;xp&#039;. Each xp class holds weak pointer to internal accessible object. All xp objects are contained in hash, when xp object is requested for internal object then hash is checked and new one is created if it doesn&#039;t have existing object. The xp objects creation is based on checking the supported interface (see Accessible downcasting methods).&lt;br /&gt;
&lt;br /&gt;
===accessible objects===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template&amp;lt;class T&amp;gt;&lt;br /&gt;
class xpTAccessible : public nsIAccessible,&lt;br /&gt;
                      public nsIHyperLinkAccessible,&lt;br /&gt;
                      public nsISelectableAccessible&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  T* mInternalObj;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
typedef xpTAccessible&amp;lt;Accessible&amp;gt; xpAccessible;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template&amp;lt;class T&amp;gt;&lt;br /&gt;
class xpTHyperTextAccessible : public xpTAccessible&amp;lt;T&amp;gt;,&lt;br /&gt;
                               public nsIAccessibleText,&lt;br /&gt;
                               public nsIAccessibleEdtiableText,&lt;br /&gt;
                               public nsIAccessibleHypertext&lt;br /&gt;
{};&lt;br /&gt;
&lt;br /&gt;
typedef xpTHyperTextAccessible&amp;lt;HyperTextAccessible&amp;gt; xpHyperTextAccessible;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpImageAccessible : public xpTAccessible&amp;lt;ImageAccessible&amp;gt;,&lt;br /&gt;
                          public nsIAccessibleImage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpTableAccessible : public xpTAccessible&amp;lt;TableAccessible&amp;gt;,&lt;br /&gt;
                          public nsIAccessibleTable&lt;br /&gt;
{};&lt;br /&gt;
class xpTableCellAccessible : public xpTHyperTextAccessible&amp;lt;TableCellAccessible&amp;gt;,&lt;br /&gt;
                              public nsIAccessibleTableCell&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpDocumentAccessible : public xpTHyperTextAccessible&amp;lt;DocAccessible&amp;gt;,&lt;br /&gt;
                             public nsIAccessibleDocument&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpApplicationAccessible : public xpTAccessible&amp;lt;AppAccessible&amp;gt;,&lt;br /&gt;
                                public nsIApplicationAccessible&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===accessible relations===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpRelation : public nsIAccessibleRelation&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===accessibility service===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpAccService : public AccServiceWrap,&lt;br /&gt;
                     public nsIAccessibleProvider&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TREVOR</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Accessibility/NewArchitecture&amp;diff=301431</id>
		<title>Accessibility/NewArchitecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Accessibility/NewArchitecture&amp;diff=301431"/>
		<updated>2011-04-21T14:27:23Z</updated>

		<summary type="html">&lt;p&gt;TREVOR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Summary=&lt;br /&gt;
The page describes proposed Gecko a11y architectural changes.&lt;br /&gt;
&lt;br /&gt;
=Folders=&lt;br /&gt;
&lt;br /&gt;
#build - accessibility service factory&lt;br /&gt;
#idl&lt;br /&gt;
##ia2 - IAccessible2 interfaces&lt;br /&gt;
##msaa - ISimpleDOM interfaces&lt;br /&gt;
##xpcom - XPCOM interfaces&lt;br /&gt;
#public - exported a11y headers&lt;br /&gt;
#src&lt;br /&gt;
##base - common files&lt;br /&gt;
##generic - generic accessible classes&lt;br /&gt;
##html - HTML accessible classes&lt;br /&gt;
##xul - XUL accessible classes&lt;br /&gt;
##xforms - XForms accessible classes&lt;br /&gt;
##atk - ATK implementation (Linux)&lt;br /&gt;
##windows - MSAA/IAccessible2/SimpleDOM interfaces implementation (Windows)&lt;br /&gt;
##mac - NSAccessibility protocol implementation (OS X)&lt;br /&gt;
##others - other platforms&lt;br /&gt;
##xpcom - XPCOM interfaces implementation&lt;br /&gt;
#tests&lt;br /&gt;
##crashtests&lt;br /&gt;
##mochitest&lt;br /&gt;
&lt;br /&gt;
=&#039;public&#039; folder=&lt;br /&gt;
# No excess dependences. All inline methods that requires extra includes are prototyped here and defined in implementation classes.&lt;br /&gt;
# Defined inside mozilla::a11y namespace&lt;br /&gt;
&lt;br /&gt;
==accessible objects==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * The existing base/nsAccessNode.&lt;br /&gt;
 */&lt;br /&gt;
class DOMNodeAccessible;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * The existing base/nsAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class Accessible : public DOMNodeAccessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing html/nsHyperTextAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class HyperTextAccessible : public Accessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing base/nsDocAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class DocAccessible : public HyperTextAccessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing base/nsRootAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class RootAccessible : public DocAccessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing base/nsApplicationAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class AppAccessible : public Accessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * New interface classes based on nsIAccessibleTable and nsIAccessibleTableCell.&lt;br /&gt;
 */&lt;br /&gt;
class TableAccessible : public Accessible {&lt;br /&gt;
 int32 GetIndx(row, col);&lt;br /&gt;
 void GetPositionFromIndex(index, row, col);&lt;br /&gt;
 tableCellAccessible* GetTableCellAt(row, col);&lt;br /&gt;
 void GetExtents(row, col, rowExtent, colExtent);&lt;br /&gt;
// are these useful?&lt;br /&gt;
 bool isRowSelected(row)&lt;br /&gt;
 bool isColSelected(col);&lt;br /&gt;
 GetSelectedCells(array&amp;lt;accessible&amp;gt;&amp;amp; cells);&lt;br /&gt;
 void GetSelectedRows(array&amp;lt;int&amp;gt;&amp;amp; rows);&lt;br /&gt;
 void GetSelectedCols(array&amp;lt;int32&amp;gt;&amp;amp; cols);&lt;br /&gt;
};&lt;br /&gt;
class TableCellAccessible : public HyperTextAccessible {&lt;br /&gt;
 int GetIndex();&lt;br /&gt;
 void Getposition(row, col);&lt;br /&gt;
 void GetExtents(rowExtent, colExtent);&lt;br /&gt;
 bool isSelected();&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==accessibility service==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing nsDocAccManager and nsAccessibilityService&lt;br /&gt;
 */&lt;br /&gt;
class DocAccessibleMgr {};&lt;br /&gt;
class AccService : public DocAccessibleMgr {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=src/generic folder=&lt;br /&gt;
&lt;br /&gt;
[approach shouldn&#039;t work because of multiple inheritance from non abstract classes]&lt;br /&gt;
&lt;br /&gt;
is this supposed to be where the implementation of accessible objects goes?&lt;br /&gt;
&lt;br /&gt;
class GenericAccessible : public Accessible; (nsAccessible)&lt;br /&gt;
&lt;br /&gt;
class ApplicationAccessible : public Accessible; (nsApplicationAccessible)&lt;br /&gt;
&lt;br /&gt;
class ARIAGridAccessible (nsARIAGridAccessible)&lt;br /&gt;
&lt;br /&gt;
class DocAccessible : public GenericAccessible, DocAccessible; (nsDocAccessible)&lt;br /&gt;
&lt;br /&gt;
class HyperTextAccessible&lt;br /&gt;
&lt;br /&gt;
=src platforms folders=&lt;br /&gt;
&lt;br /&gt;
Every platform defines AccServiceWrap used for initialization (currently done by nsAccessNodeWrap classes).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class AccServiceWrap : public AccService {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==atk==&lt;br /&gt;
&lt;br /&gt;
==windows==&lt;br /&gt;
&lt;br /&gt;
A generic class that used as a bridge to gecko accessible.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class NativeObject&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  NativeObject(DOMNodeAccessible* aGeckoAcc) : mGeckoAcc(aGeckoAcc) { }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
  DOMNodeAccessible* mGeckoAcc;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classes that implement IAccessible2 interfaces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class ia2Accessible : virtual public NativeObject,&lt;br /&gt;
                      public IAccessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  // IAccessible&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
hresult&lt;br /&gt;
ia2Accessible::IAccessible2Method()&lt;br /&gt;
{&lt;br /&gt;
  Accessible* geckoAcc = mGeckoAcc-&amp;gt;AsAccessible();&lt;br /&gt;
  geckoAcc-&amp;gt;AccessibleMethod();&lt;br /&gt;
  return S_OK;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class ia2TableAccessible : virtual public NativeObject,&lt;br /&gt;
                           public IAccessibleTable&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  // IAccessibleTable&lt;br /&gt;
  // IAccessibleTable2&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
hresult&lt;br /&gt;
ia2TableAccessible::IATableMethod()&lt;br /&gt;
{&lt;br /&gt;
  TableAccessible* geckoAcc = mGeckoObj-&amp;gt;AsTable();&lt;br /&gt;
  geckoAcc-&amp;gt;TableMethod();&lt;br /&gt;
  return S_OK;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Final classes that implements native interfaces for specific Gecko accessible classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class NativeDOMNodeAccessible : virtual public NativeObject,&lt;br /&gt;
                                public ISimpleDOMNode&lt;br /&gt;
                                public IServiceProvider&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  // IUknown&lt;br /&gt;
  // IServiceProvider&lt;br /&gt;
  // ISimpleDOMNode&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class NativeAccessible : public NativeDOMNodeAccessible,&lt;br /&gt;
                         public IAccessible,&lt;br /&gt;
                         public IEnumVARIANT,&lt;br /&gt;
                         public ia2Accessible&lt;br /&gt;
{&lt;br /&gt;
  // IDispatch&lt;br /&gt;
  // IAccessible&lt;br /&gt;
  // IEnumVariant&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class NativeTableAccessible : public NativeAccessible,&lt;br /&gt;
                              public ia2TableAccessible&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class NativeDocAccessible : public NativeAccessible,&lt;br /&gt;
                            public ISimpleDOMDocument&lt;br /&gt;
{&lt;br /&gt;
  // ISimpleDOMDocument&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wrappers for Gecko classes that are used to create proper native class.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class AccessibleWrap: public Accessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  inline NativeObject* AsNativeObject()&lt;br /&gt;
  {&lt;br /&gt;
    if (!mNativeObj || !IsDefunct())&lt;br /&gt;
      mNativeObj = CreateNativeAccessible();&lt;br /&gt;
    return mNativeObj;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
  virtual NativeObject* CreateNativeAccessible()&lt;br /&gt;
  {&lt;br /&gt;
    return new NativeAccessible(this);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class HTMLTableAccessibleWrap : public HTMLTableAccessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  virtual NativeObject* CreateNativeAccessible()&lt;br /&gt;
  {&lt;br /&gt;
    return new NativeTableAccessible(this);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class DocAccessibleWrap : public DocAccessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  virtual NativeObject* CreateNativeAccessible()&lt;br /&gt;
  {&lt;br /&gt;
    return new NativeDocAccessible(this);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==mac==&lt;br /&gt;
NSAccessibility protocol implementation.&lt;br /&gt;
&lt;br /&gt;
==&#039;xpcom&#039; folder==&lt;br /&gt;
&lt;br /&gt;
Classes are prefixed by &#039;xp&#039;. Each xp class holds weak pointer to internal accessible object. All xp objects are contained in hash, when xp object is requested for internal object then hash is checked and new one is created if it doesn&#039;t have existing object. The xp objects creation is based on checking the supported interface (see Accessible downcasting methods).&lt;br /&gt;
&lt;br /&gt;
===accessible objects===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template&amp;lt;class T&amp;gt;&lt;br /&gt;
class xpTAccessible : public nsIAccessible,&lt;br /&gt;
                      public nsIHyperLinkAccessible,&lt;br /&gt;
                      public nsISelectableAccessible&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  T* mInternalObj;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
typedef xpTAccessible&amp;lt;Accessible&amp;gt; xpAccessible;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template&amp;lt;class T&amp;gt;&lt;br /&gt;
class xpTHyperTextAccessible : public xpTAccessible&amp;lt;T&amp;gt;,&lt;br /&gt;
                               public nsIAccessibleText,&lt;br /&gt;
                               public nsIAccessibleEdtiableText,&lt;br /&gt;
                               public nsIAccessibleHypertext&lt;br /&gt;
{};&lt;br /&gt;
&lt;br /&gt;
typedef xpTHyperTextAccessible&amp;lt;HyperTextAccessible&amp;gt; xpHyperTextAccessible;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpImageAccessible : public xpTAccessible&amp;lt;ImageAccessible&amp;gt;,&lt;br /&gt;
                          public nsIAccessibleImage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpTableAccessible : public xpTAccessible&amp;lt;TableAccessible&amp;gt;,&lt;br /&gt;
                          public nsIAccessibleTable&lt;br /&gt;
{};&lt;br /&gt;
class xpTableCellAccessible : public xpTHyperTextAccessible&amp;lt;TableCellAccessible&amp;gt;,&lt;br /&gt;
                              public nsIAccessibleTableCell&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpDocumentAccessible : public xpTHyperTextAccessible&amp;lt;DocAccessible&amp;gt;,&lt;br /&gt;
                             public nsIAccessibleDocument&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpApplicationAccessible : public xpTAccessible&amp;lt;AppAccessible&amp;gt;,&lt;br /&gt;
                                public nsIApplicationAccessible&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===accessible relations===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpRelation : public nsIAccessibleRelation&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===accessibility service===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpAccService : public AccServiceWrap,&lt;br /&gt;
                     public nsIAccessibleProvider&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TREVOR</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Accessibility/NewArchitecture&amp;diff=301425</id>
		<title>Accessibility/NewArchitecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Accessibility/NewArchitecture&amp;diff=301425"/>
		<updated>2011-04-21T14:07:50Z</updated>

		<summary type="html">&lt;p&gt;TREVOR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Summary=&lt;br /&gt;
The page describes proposed Gecko a11y architectural changes.&lt;br /&gt;
&lt;br /&gt;
=Folders=&lt;br /&gt;
&lt;br /&gt;
#build - accessibility service factory&lt;br /&gt;
#idl&lt;br /&gt;
##ia2 - IAccessible2 interfaces&lt;br /&gt;
##msaa - ISimpleDOM interfaces&lt;br /&gt;
##xpcom - XPCOM interfaces&lt;br /&gt;
#public - exported a11y headers&lt;br /&gt;
#src&lt;br /&gt;
##base - common files&lt;br /&gt;
##generic - generic accessible classes&lt;br /&gt;
##html - HTML accessible classes&lt;br /&gt;
##xul - XUL accessible classes&lt;br /&gt;
##xforms - XForms accessible classes&lt;br /&gt;
##atk - ATK implementation (Linux)&lt;br /&gt;
##windows - MSAA/IAccessible2/SimpleDOM interfaces implementation (Windows)&lt;br /&gt;
##mac - NSAccessibility protocol implementation (OS X)&lt;br /&gt;
##others - other platforms&lt;br /&gt;
##xpcom - XPCOM interfaces implementation&lt;br /&gt;
#tests&lt;br /&gt;
##crashtests&lt;br /&gt;
##mochitest&lt;br /&gt;
&lt;br /&gt;
=&#039;public&#039; folder=&lt;br /&gt;
# No excess dependences. All inline methods that requires extra includes are prototyped here and defined in implementation classes.&lt;br /&gt;
# Defined inside mozilla::a11y namespace&lt;br /&gt;
&lt;br /&gt;
==accessible objects==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * The existing base/nsAccessNode.&lt;br /&gt;
 */&lt;br /&gt;
class DOMNodeAccessible;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * The existing base/nsAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class Accessible : public DOMNodeAccessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing html/nsHyperTextAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class HyperTextAccessible : public Accessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing base/nsDocAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class DocAccessible : public HyperTextAccessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing base/nsRootAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class RootAccessible : public DocAccessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing base/nsApplicationAccessible.&lt;br /&gt;
 */&lt;br /&gt;
class AppAccessible : public Accessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * New interface classes based on nsIAccessibleTable and nsIAccessibleTableCell.&lt;br /&gt;
 */&lt;br /&gt;
class TableAccessible : public Accessible {&lt;br /&gt;
};&lt;br /&gt;
class TableCellAccessible : public HyperTextAccessible {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==accessibility service==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Existing nsDocAccManager and nsAccessibilityService&lt;br /&gt;
 */&lt;br /&gt;
class DocAccessibleMgr {};&lt;br /&gt;
class AccService : public DocAccessibleMgr {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=src/generic folder=&lt;br /&gt;
&lt;br /&gt;
[approach shouldn&#039;t work because of multiple inheritance from non abstract classes]&lt;br /&gt;
class GenericAccessible : public Accessible; (nsAccessible)&lt;br /&gt;
&lt;br /&gt;
class ApplicationAccessible : public Accessible; (nsApplicationAccessible)&lt;br /&gt;
&lt;br /&gt;
class ARIAGridAccessible (nsARIAGridAccessible)&lt;br /&gt;
&lt;br /&gt;
class DocAccessible : public GenericAccessible, DocAccessible; (nsDocAccessible)&lt;br /&gt;
&lt;br /&gt;
class HyperTextAccessible&lt;br /&gt;
&lt;br /&gt;
=src platforms folders=&lt;br /&gt;
&lt;br /&gt;
Every platform defines AccServiceWrap used for initialization (currently done by nsAccessNodeWrap classes).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class AccServiceWrap : public AccService {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==atk==&lt;br /&gt;
&lt;br /&gt;
==windows==&lt;br /&gt;
&lt;br /&gt;
A generic class that used as a bridge to gecko accessible.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class NativeObject&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  NativeObject(DOMNodeAccessible* aGeckoAcc) : mGeckoAcc(aGeckoAcc) { }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
  DOMNodeAccessible* mGeckoAcc;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classes that implement IAccessible2 interfaces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class ia2Accessible : virtual public NativeObject,&lt;br /&gt;
                      public IAccessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  // IAccessible&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
hresult&lt;br /&gt;
ia2Accessible::IAccessible2Method()&lt;br /&gt;
{&lt;br /&gt;
  Accessible* geckoAcc = mGeckoAcc-&amp;gt;AsAccessible();&lt;br /&gt;
  geckoAcc-&amp;gt;AccessibleMethod();&lt;br /&gt;
  return S_OK;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class ia2TableAccessible : virtual public NativeObject,&lt;br /&gt;
                           public IAccessibleTable&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  // IAccessibleTable&lt;br /&gt;
  // IAccessibleTable2&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
hresult&lt;br /&gt;
ia2TableAccessible::IATableMethod()&lt;br /&gt;
{&lt;br /&gt;
  TableAccessible* geckoAcc = mGeckoObj-&amp;gt;AsTable();&lt;br /&gt;
  geckoAcc-&amp;gt;TableMethod();&lt;br /&gt;
  return S_OK;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Final classes that implements native interfaces for specific Gecko accessible classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class NativeDOMNodeAccessible : virtual public NativeObject,&lt;br /&gt;
                                public ISimpleDOMNode&lt;br /&gt;
                                public IServiceProvider&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  // IUknown&lt;br /&gt;
  // IServiceProvider&lt;br /&gt;
  // ISimpleDOMNode&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class NativeAccessible : public NativeDOMNodeAccessible,&lt;br /&gt;
                         public IAccessible,&lt;br /&gt;
                         public IEnumVARIANT,&lt;br /&gt;
                         public ia2Accessible&lt;br /&gt;
{&lt;br /&gt;
  // IDispatch&lt;br /&gt;
  // IAccessible&lt;br /&gt;
  // IEnumVariant&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class NativeTableAccessible : public NativeAccessible,&lt;br /&gt;
                              public ia2TableAccessible&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class NativeDocAccessible : public NativeAccessible,&lt;br /&gt;
                            public ISimpleDOMDocument&lt;br /&gt;
{&lt;br /&gt;
  // ISimpleDOMDocument&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wrappers for Gecko classes that are used to create proper native class.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class AccessibleWrap: public Accessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  inline NativeObject* AsNativeObject()&lt;br /&gt;
  {&lt;br /&gt;
    if (!mNativeObj || !IsDefunct())&lt;br /&gt;
      mNativeObj = CreateNativeAccessible();&lt;br /&gt;
    return mNativeObj;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
  virtual NativeObject* CreateNativeAccessible()&lt;br /&gt;
  {&lt;br /&gt;
    return new NativeAccessible(this);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class HTMLTableAccessibleWrap : public HTMLTableAccessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  virtual NativeObject* CreateNativeAccessible()&lt;br /&gt;
  {&lt;br /&gt;
    return new NativeTableAccessible(this);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class DocAccessibleWrap : public DocAccessible&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  virtual NativeObject* CreateNativeAccessible()&lt;br /&gt;
  {&lt;br /&gt;
    return new NativeDocAccessible(this);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==mac==&lt;br /&gt;
NSAccessibility protocol implementation.&lt;br /&gt;
&lt;br /&gt;
==&#039;xpcom&#039; folder==&lt;br /&gt;
&lt;br /&gt;
Classes are prefixed by &#039;xp&#039;. Each xp class holds weak pointer to internal accessible object. All xp objects are contained in hash, when xp object is requested for internal object then hash is checked and new one is created if it doesn&#039;t have existing object. The xp objects creation is based on checking the supported interface (see Accessible downcasting methods).&lt;br /&gt;
&lt;br /&gt;
===accessible objects===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template&amp;lt;class T&amp;gt;&lt;br /&gt;
class xpTAccessible : public nsIAccessible,&lt;br /&gt;
                      public nsIHyperLinkAccessible,&lt;br /&gt;
                      public nsISelectableAccessible&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  T* mInternalObj;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
typedef xpTAccessible&amp;lt;Accessible&amp;gt; xpAccessible;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template&amp;lt;class T&amp;gt;&lt;br /&gt;
class xpTHyperTextAccessible : public xpTAccessible&amp;lt;T&amp;gt;,&lt;br /&gt;
                               public nsIAccessibleText,&lt;br /&gt;
                               public nsIAccessibleEdtiableText,&lt;br /&gt;
                               public nsIAccessibleHypertext&lt;br /&gt;
{};&lt;br /&gt;
&lt;br /&gt;
typedef xpTHyperTextAccessible&amp;lt;HyperTextAccessible&amp;gt; xpHyperTextAccessible;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpImageAccessible : public xpTAccessible&amp;lt;ImageAccessible&amp;gt;,&lt;br /&gt;
                          public nsIAccessibleImage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpTableAccessible : public xpTAccessible&amp;lt;TableAccessible&amp;gt;,&lt;br /&gt;
                          public nsIAccessibleTable&lt;br /&gt;
{};&lt;br /&gt;
class xpTableCellAccessible : public xpTHyperTextAccessible&amp;lt;TableCellAccessible&amp;gt;,&lt;br /&gt;
                              public nsIAccessibleTableCell&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpDocumentAccessible : public xpTHyperTextAccessible&amp;lt;DocAccessible&amp;gt;,&lt;br /&gt;
                             public nsIAccessibleDocument&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpApplicationAccessible : public xpTAccessible&amp;lt;AppAccessible&amp;gt;,&lt;br /&gt;
                                public nsIApplicationAccessible&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===accessible relations===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpRelation : public nsIAccessibleRelation&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===accessibility service===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class xpAccService : public AccServiceWrap,&lt;br /&gt;
                     public nsIAccessibleProvider&lt;br /&gt;
{};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TREVOR</name></author>
	</entry>
</feed>