Accessibility/NewArchitecture: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
Line 123: Line 123:
NSAccessibility protocol implementation.
NSAccessibility protocol implementation.


==xpcom==
=='xpcom' folder==


===accessible classes===
Classes are prefixed by 'xp'. 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't have existing object. The xp objects creation is based on checking the supported interface (see Accessible downcasting methods).


Classes are prefixed by 'xp'.
===accessible objects===


<pre>
<pre>
Line 178: Line 178:
</pre>
</pre>


===relations===
===accessible relations===


<pre>
<pre>

Revision as of 16:47, 15 March 2011

Summary

The page describes proposed Gecko a11y architectural changes.

Folders

  1. build - accessibility service factory
  2. idl
    1. ia2 - IAccessible2 interfaces
    2. msaa - ISimpleDOM interfaces
    3. xpcom - XPCOM interfaces
  3. public - exported a11y headers
  4. src
    1. base - common files
    2. generic - generic accessible classes
    3. html - HTML accessible classes
    4. xul - XUL accessible classes
    5. xforms - XForms accessible classes
    6. atk - ATK implementation (Linux)
    7. windows - MSAA/IAccessible2/SimpleDOM interfaces implementation (Windows)
    8. mac - NSAccessibility protocol implementation (OS X)
    9. others - other platforms
    10. xpcom - XPCOM interfaces implementation
  5. tests
    1. crashtests
    2. mochitest

'public' folder

  1. No excess dependences. All inline methods that requires extra includes are prototyped here and defined in implementation classes.
  2. Defined inside mozilla::a11y namespace

accessible objects

/**
 * The existing base/nsAccessNode.
 */
class DOMNodeAccessible;
/**
 * The existing base/nsAccessible.
 */
class Accessible : public DOMNodeAccessible {};
/**
 * Existing html/nsHyperTextAccessible.
 */
class HyperTextAccessible : public Accessible {};
/**
 * Existing base/nsDocAccessible.
 */
class DocAccessible : public HyperTextAccessible {};
/**
 * Existing base/nsRootAccessible.
 */
class RootAccessible : public DocAccessible {};
/**
 * Existing base/nsApplicationAccessible.
 */
class AppAccessible : public Accessible {};
/**
 * New interface classes based on nsIAccessibleTable and nsIAccessibleTableCell.
 */
class TableAccessible : public Accessible {};
class TableCellAccessible : public HyperTextAccessible {};

accessibility service

/**
 * Existing nsDocAccManager and nsAccessibilityService
 */
class DocAccessibleMgr {};
class AccService : public DocAccessibleMgr {};

src/generic folder

class GenericAccessible : public Accessible; (nsAccessible)

class ApplicationAccessible : public Accessible; (nsApplicationAccessible)

class ARIAGridAccessible (nsARIAGridAccessible)

class DocAccessible : public GenericAccessible, DocAccessible; (nsDocAccessible)

class HyperTextAccessible

src platforms folders

Every platform defines AccServiceWrap used for initialization (currently done by nsAccessNodeWrap classes).

class AccServiceWrap : public AccService {};

atk

windows

simple DOM

ISimpleDOM interfaces implementation.

MSAA

IAccessible interface implementation.

IAccessible2

IAccessible2 interfaces implementation.

mac

NSAccessibility protocol implementation.

'xpcom' folder

Classes are prefixed by 'xp'. 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't have existing object. The xp objects creation is based on checking the supported interface (see Accessible downcasting methods).

accessible objects

template<class T>
class xpTAccessible : public nsIAccessible,
                      public nsIHyperlink
{
private:
  T* mInternalObj;
};

typedef xpTAccessible<Accessible> xpAccessible;
template<class T>
class xpTHyperTextAccessible : public xpTAccessible<T>,
                               public nsIAccessibleText,
                               public nsIAccessibleEdtiableText,
                               public nsIAccessibleHypertext
{};

typedef xpTHyperTextAccessible<HyperTextAccessible> xpHyperTextAccessible;
class xpImageAccessible : public xpTAccessible<ImageAccessible>,
                          public nsIAccessibleImage
class xpTableAccessible : public xpTAccessible<TableAccessible>,
                          public nsIAccessibleTable
{};
class xpTableCellAccessible : public xpTHyperTextAccessible<TableCellAccessible>,
                              public nsIAccessibleTableCell
{};
class xpDocumentAccessible : public xpTHyperTextAccessible<DocAccessible>,
                             public nsIAccessibleDocument
{};
class xpApplicationAccessible : public xpTAccessible<AppAccessible>,
                                public nsIApplicationAccessible
{};

accessible relations

class xpRelation : public nsIAccessibleRelation
{};

accessibility service

class xpAccService : public AccServiceWrap,
                     public nsIAccessibleProvider
{};