Accessibility/Plugins

From MozillaWiki
Jump to navigation Jump to search

<< Back to Accessibility Home Page

Introduction

What is this?

This page is designed to provide specification of Mozilla plugins accessibility. This specification is intended to outline the approach how to make accessible the content exposed by plugins.

Why is it necessary?

In the meantime plugins authors are forced to care about accessibility itself. They need to implement AT API interfaces for UI interfaces of their plugins for each platform plugins are intended to work. That means plugin authors must implement MSAA/IA2 on Windows, AT/AT-SPI on Linux, Universal Access on OS X. So plugin authors need to learn different APIs for each platform and it's getting hard to share common accessibility code between platforms. As well even plugin author cares about accessibility itself he doesn't have a way to embed accessible tree of plugin's UI interface into accessible tree of Firefox (or any other Mozilla product).

What do we get?

The article subject is getting specification to allow plugin authors to embed their plugins into accessibility hierarchy of Mozilla products and write common (platform independent) code for his plugins.

Benefits are

  • plugins are embedded into Mozilla accessibility hierarchy
  • plugins have crossplatform accessibility code

Disadvantages are

  • learning specific Mozilla accessibility API

Plugin A11y SDK

Interfaces

nsIAccessibleTreeNode

This interface is intended to assign accessible parent, children and siblings.

interface nsIAccessibleTreeNode : public nsISupports
{
  setParent(nsIAccessibleTreeNode *aNode);
  setFirstChild(nsIAccessibleTreeNode *aNode);
  setNextSibling(nsIAccessibleTreeNode *aNode);
};

Embedding plugin hierarchy to Mozilla hierarchy

Extend plugin API to provide accessible object implementing nsIAccessible interfaces created for element embedding the plugin.

NPError NPN_GetPluginAccessible(NPP aInstance, nsIAccessibleTreeNode **aNode);

Create crossplatfrom code

Base classes

Plugin SDK provides set of accessible base classes. You can inherit your accessible classes from these base classes to get some accessible functionality for free.

In the meantime there are available two base accessible classes. The set of base classes can be extended on demand.

class npnAccessible : public nsIAccessible {};
class npnTextAccessible : public npnAccessible,
                          public nsIAccessibleText,
                          public nsIAccessibleEditableText {};
class npnDocAccessible : public npnTextAccessible,
                         public nsIAccessibleDocument

Interfaces

Here's the list of interfaces you might want to implement in your accessible objects.

Implementation Notes