зеркало из https://github.com/mozilla/pjs.git
Bug 390280. Add missing ARIA roles. r=ginn.chen, a=dsicore
This commit is contained in:
Родитель
d229841f8d
Коммит
1382eff4f0
|
@ -44,7 +44,7 @@
|
|||
* @note - When adding a new role, be sure to also add it to nsRoleMap.h for
|
||||
* each platform.
|
||||
*/
|
||||
[scriptable, uuid(d6d73bc4-0fe9-46a1-a8dd-6d93b041e54b)]
|
||||
[scriptable, uuid(31685b85-36a3-448c-99ed-b034a198e303)]
|
||||
interface nsIAccessibleRole : nsISupports
|
||||
{
|
||||
/**
|
||||
|
@ -743,10 +743,15 @@ interface nsIAccessibleRole : nsISupports
|
|||
*/
|
||||
const unsigned long ROLE_COMBOBOX_LISTITEM = 115;
|
||||
|
||||
/**
|
||||
* An image map -- has child links representing the areas
|
||||
*/
|
||||
const unsigned long ROLE_IMAGE_MAP = 116;
|
||||
|
||||
/**
|
||||
* It's not role actually. This contanst is important to help ensure
|
||||
* nsRoleMap's are synchronized.
|
||||
*/
|
||||
const unsigned long ROLE_LAST_ENTRY = 116;
|
||||
const unsigned long ROLE_LAST_ENTRY = 117;
|
||||
};
|
||||
|
||||
|
|
|
@ -427,7 +427,7 @@ nsAccessibleWrap::CreateMaiInterfaces(void)
|
|||
|
||||
PRUint32 accRole;
|
||||
GetRole(&accRole);
|
||||
|
||||
|
||||
//nsIAccessibleText
|
||||
nsCOMPtr<nsIAccessibleText> accessInterfaceText;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleText),
|
||||
|
@ -444,14 +444,6 @@ nsAccessibleWrap::CreateMaiInterfaces(void)
|
|||
interfacesBits |= 1 << MAI_INTERFACE_EDITABLE_TEXT;
|
||||
}
|
||||
|
||||
//nsIAccessibleSelection
|
||||
nsCOMPtr<nsIAccessibleSelectable> accessInterfaceSelection;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleSelectable),
|
||||
getter_AddRefs(accessInterfaceSelection));
|
||||
if (accessInterfaceSelection) {
|
||||
interfacesBits |= 1 << MAI_INTERFACE_SELECTION;
|
||||
}
|
||||
|
||||
//nsIAccessibleValue
|
||||
nsCOMPtr<nsIAccessibleValue> accessInterfaceValue;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleValue),
|
||||
|
@ -460,34 +452,6 @@ nsAccessibleWrap::CreateMaiInterfaces(void)
|
|||
interfacesBits |= 1 << MAI_INTERFACE_VALUE;
|
||||
}
|
||||
|
||||
//nsIAccessibleHypertext
|
||||
PRInt32 linkCount = 0;
|
||||
nsCOMPtr<nsIAccessibleHyperText> accessInterfaceHypertext;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleHyperText),
|
||||
getter_AddRefs(accessInterfaceHypertext));
|
||||
if (accessInterfaceHypertext) {
|
||||
nsresult rv = accessInterfaceHypertext->GetLinks(&linkCount);
|
||||
if (NS_SUCCEEDED(rv) && (linkCount > 0)) {
|
||||
interfacesBits |= 1 << MAI_INTERFACE_HYPERTEXT;
|
||||
}
|
||||
}
|
||||
|
||||
//nsIAccessibleHyperLink
|
||||
nsCOMPtr<nsIAccessibleHyperLink> accessInterfaceHyperlink;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleHyperLink),
|
||||
getter_AddRefs(accessInterfaceHyperlink));
|
||||
if (accessInterfaceHyperlink) {
|
||||
interfacesBits |= 1 << MAI_INTERFACE_HYPERLINK_IMPL;
|
||||
}
|
||||
|
||||
//nsIAccessibleTable
|
||||
nsCOMPtr<nsIAccessibleTable> accessInterfaceTable;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleTable),
|
||||
getter_AddRefs(accessInterfaceTable));
|
||||
if (accessInterfaceTable) {
|
||||
interfacesBits |= 1 << MAI_INTERFACE_TABLE;
|
||||
}
|
||||
|
||||
//nsIAccessibleDocument
|
||||
nsCOMPtr<nsIAccessibleDocument> accessInterfaceDocument;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleDocument),
|
||||
|
@ -504,6 +468,44 @@ nsAccessibleWrap::CreateMaiInterfaces(void)
|
|||
interfacesBits |= 1 << MAI_INTERFACE_IMAGE;
|
||||
}
|
||||
|
||||
//nsIAccessibleHyperLink
|
||||
nsCOMPtr<nsIAccessibleHyperLink> accessInterfaceHyperlink;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleHyperLink),
|
||||
getter_AddRefs(accessInterfaceHyperlink));
|
||||
if (accessInterfaceHyperlink) {
|
||||
interfacesBits |= 1 << MAI_INTERFACE_HYPERLINK_IMPL;
|
||||
}
|
||||
|
||||
if (!MustPrune(this)) { // These interfaces require children
|
||||
//nsIAccessibleHypertext
|
||||
PRInt32 linkCount = 0;
|
||||
nsCOMPtr<nsIAccessibleHyperText> accessInterfaceHypertext;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleHyperText),
|
||||
getter_AddRefs(accessInterfaceHypertext));
|
||||
if (accessInterfaceHypertext) {
|
||||
nsresult rv = accessInterfaceHypertext->GetLinks(&linkCount);
|
||||
if (NS_SUCCEEDED(rv) && (linkCount > 0)) {
|
||||
interfacesBits |= 1 << MAI_INTERFACE_HYPERTEXT;
|
||||
}
|
||||
}
|
||||
|
||||
//nsIAccessibleTable
|
||||
nsCOMPtr<nsIAccessibleTable> accessInterfaceTable;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleTable),
|
||||
getter_AddRefs(accessInterfaceTable));
|
||||
if (accessInterfaceTable) {
|
||||
interfacesBits |= 1 << MAI_INTERFACE_TABLE;
|
||||
}
|
||||
|
||||
//nsIAccessibleSelection
|
||||
nsCOMPtr<nsIAccessibleSelectable> accessInterfaceSelection;
|
||||
QueryInterface(NS_GET_IID(nsIAccessibleSelectable),
|
||||
getter_AddRefs(accessInterfaceSelection));
|
||||
if (accessInterfaceSelection) {
|
||||
interfacesBits |= 1 << MAI_INTERFACE_SELECTION;
|
||||
}
|
||||
}
|
||||
|
||||
return interfacesBits;
|
||||
}
|
||||
|
||||
|
@ -872,7 +874,7 @@ gint
|
|||
getChildCountCB(AtkObject *aAtkObj)
|
||||
{
|
||||
nsAccessibleWrap *accWrap = GetAccessibleWrap(aAtkObj);
|
||||
if (!accWrap) {
|
||||
if (!accWrap || nsAccessibleWrap::MustPrune(accWrap)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -906,7 +908,7 @@ refChildCB(AtkObject *aAtkObj, gint aChildIndex)
|
|||
// or we should cache an array of children in each nsAccessible
|
||||
// (instead of mNextSibling on the children)
|
||||
nsAccessibleWrap *accWrap = GetAccessibleWrap(aAtkObj);
|
||||
if (!accWrap) {
|
||||
if (!accWrap || nsAccessibleWrap::MustPrune(accWrap)) {
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
|
@ -1551,3 +1553,8 @@ nsAccessibleWrap::FireAtkShowHideEvent(nsIAccessibleEvent *aEvent,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
PRBool nsAccessibleWrap::MustPrune(nsIAccessible *aAccessible)
|
||||
{
|
||||
PRUint32 role = Role(aAccessible);
|
||||
return role == nsIAccessibleRole::ROLE_GRAPHIC;
|
||||
}
|
||||
|
|
|
@ -127,6 +127,9 @@ protected:
|
|||
|
||||
AtkObject *mAtkObject;
|
||||
|
||||
// Should this accessible be allowed to have any ATK children
|
||||
static PRBool MustPrune(nsIAccessible *aAccessible);
|
||||
|
||||
private:
|
||||
PRUint16 CreateMaiInterfaces(void);
|
||||
};
|
||||
|
|
|
@ -69,7 +69,7 @@ refAccessibleAtPointCB(AtkComponent *aComponent,
|
|||
AtkCoordType aCoordType)
|
||||
{
|
||||
nsAccessibleWrap *accWrap = GetAccessibleWrap(ATK_OBJECT(aComponent));
|
||||
if (!accWrap)
|
||||
if (!accWrap || nsAccessibleWrap::MustPrune(accWrap))
|
||||
return nsnull;
|
||||
|
||||
// or ATK_XY_SCREEN what is definition this in nsIAccessible ???
|
||||
|
|
|
@ -162,6 +162,7 @@ static const PRUint32 atkRoleMap[] = {
|
|||
ATK_ROLE_CALENDAR, // nsIAccessibleRole::ROLE_CALENDAR 113
|
||||
ATK_ROLE_MENU, // nsIAccessibleRole::ROLE_COMBOBOX_LIST 114
|
||||
ATK_ROLE_MENU_ITEM, // nsIAccessibleRole::ROLE_COMBOBOX_LISTITEM 115
|
||||
ATK_ROLE_IMAGE, // nsIAccessibleRole::ROLE_IMAGE_MAP 116
|
||||
kROLE_ATK_LAST_ENTRY // nsIAccessibleRole::ROLE_LAST_ENTRY
|
||||
};
|
||||
|
||||
|
|
|
@ -100,6 +100,8 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{"selected", "false", nsIAccessibleStates::STATE_SELECTABLE},
|
||||
{"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry},
|
||||
{"group", nsIAccessibleRole::ROLE_GROUPING, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry},
|
||||
{"heading", nsIAccessibleRole::ROLE_HEADING, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry},
|
||||
{"img", nsIAccessibleRole::ROLE_GRAPHIC, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry},
|
||||
{"label", nsIAccessibleRole::ROLE_LABEL, eNameOkFromChildren, eNoValue, kNoReqStates, kEndEntry},
|
||||
{"link", nsIAccessibleRole::ROLE_LINK, eNameOkFromChildren, eNoValue, nsIAccessibleStates::STATE_LINKED,
|
||||
{"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry},
|
||||
|
@ -143,6 +145,7 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{"checked", kBoolState, nsIAccessibleStates::STATE_CHECKED}, kEndEntry},
|
||||
{"radiogroup", nsIAccessibleRole::ROLE_GROUPING, eNameLabelOrTitle, eNoValue, kNoReqStates,
|
||||
{"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry},
|
||||
{"region", nsIAccessibleRole::ROLE_PANE, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry},
|
||||
{"row", nsIAccessibleRole::ROLE_ROW, eNameOkFromChildren, eNoValue, kNoReqStates,
|
||||
{"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE},
|
||||
{"selected", kBoolState, nsIAccessibleStates::STATE_SELECTED | nsIAccessibleStates::STATE_SELECTABLE},
|
||||
|
@ -157,6 +160,7 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{"secret", nsIAccessibleRole::ROLE_PASSWORD_TEXT, eNameLabelOrTitle, eNoValue, nsIAccessibleStates::STATE_PROTECTED,
|
||||
// Manually map EXT_STATE_SINGLE_LINE and EXT_STATE_MULTI_LINE FROM aaa:multiline
|
||||
{"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry},
|
||||
{"section", nsIAccessibleRole::ROLE_SECTION, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry},
|
||||
{"separator", nsIAccessibleRole::ROLE_SEPARATOR, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry},
|
||||
{"slider", nsIAccessibleRole::ROLE_SLIDER, eNameLabelOrTitle, eHasValueMinMax, kNoReqStates,
|
||||
{"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE},
|
||||
|
@ -175,6 +179,7 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry},
|
||||
{"toolbar", nsIAccessibleRole::ROLE_TOOLBAR, eNameLabelOrTitle, eNoValue, kNoReqStates,
|
||||
{"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry},
|
||||
{"tooltip", nsIAccessibleRole::ROLE_TOOLTIP, eNameOkFromChildren, eNoValue, kNoReqStates, kEndEntry},
|
||||
{"tree", nsIAccessibleRole::ROLE_OUTLINE, eNameLabelOrTitle, eNoValue, kNoReqStates,
|
||||
{"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE},
|
||||
{"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY},
|
||||
|
|
|
@ -168,7 +168,8 @@ static const char kRoleNames[][20] = {
|
|||
"parent menuitem", //ROLE_PARENT_MENUITEM
|
||||
"calendar", //ROLE_CALENDAR
|
||||
"combobox list", //ROLE_COMBOBOX_LIST
|
||||
"combobox listitem" //ROLE_COMBOBOX_LISTITEM
|
||||
"combobox listitem", //ROLE_COMBOBOX_LISTITEM
|
||||
"image map" //ROLE_IMAGE_MAP
|
||||
};
|
||||
|
||||
class nsAccessibilityService : public nsIAccessibilityService,
|
||||
|
|
|
@ -144,7 +144,10 @@ NS_IMETHODIMP nsHTMLImageAccessible::GetName(nsAString& aName)
|
|||
/* wstring getRole (); */
|
||||
NS_IMETHODIMP nsHTMLImageAccessible::GetRole(PRUint32 *_retval)
|
||||
{
|
||||
*_retval = nsIAccessibleRole::ROLE_GRAPHIC;
|
||||
PRInt32 numChildren;
|
||||
GetChildCount(&numChildren);
|
||||
*_retval = (numChildren > 0) ? nsIAccessibleRole::ROLE_IMAGE_MAP :
|
||||
nsIAccessibleRole::ROLE_GRAPHIC;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -81,13 +81,15 @@ class nsAccessibleWrap : public nsAccessible
|
|||
|
||||
// we'll flatten buttons and checkboxes. usually they have a text node
|
||||
// child, that is their title. Works in conjunction with IsPruned() below.
|
||||
// XXX There is no IsPruned() method, so what does that comment mean?
|
||||
PRBool IsFlat() {
|
||||
PRUint32 role = Role(this);
|
||||
return (role == nsIAccessibleRole::ROLE_CHECKBUTTON ||
|
||||
role == nsIAccessibleRole::ROLE_PUSHBUTTON ||
|
||||
role == nsIAccessibleRole::ROLE_TOGGLE_BUTTON ||
|
||||
role == nsIAccessibleRole::ROLE_SPLITBUTTON ||
|
||||
role == nsIAccessibleRole::ROLE_ENTRY);
|
||||
role == nsIAccessibleRole::ROLE_ENTRY ||
|
||||
role == nsIAccessibleRole::ROLE_IMAGE);
|
||||
}
|
||||
|
||||
// ignored means that the accessible might still have children, but is not displayed
|
||||
|
|
|
@ -158,5 +158,6 @@ static const NSString* AXRoles [] = {
|
|||
NSAccessibilityGroupRole, // ROLE_CALENDAR
|
||||
NSAccessibilityMenuRole, // ROLE_COMBOBOX_LIST
|
||||
NSAccessibilityMenuItemRole, // ROLE_COMBOBOX_LISTITEM
|
||||
NSAccessibilityImageRole, // ROLE_IMAGE_MAP
|
||||
@"ROLE_LAST_ENTRY" // ROLE_LAST_ENTRY. bogus role that will never be shown (just marks the end of this array)!
|
||||
};
|
||||
|
|
|
@ -1712,3 +1712,13 @@ void nsAccessibleWrap::UpdateSystemCaret()
|
|||
}
|
||||
}
|
||||
|
||||
PRBool nsAccessibleWrap::MustPrune(nsIAccessible *aAccessible)
|
||||
{
|
||||
PRUint32 role = Role(aAccessible);
|
||||
return role == nsIAccessibleRole::ROLE_MENUITEM ||
|
||||
role == nsIAccessibleRole::ROLE_ENTRY ||
|
||||
role == nsIAccessibleRole::ROLE_PASSWORD_TEXT ||
|
||||
role == nsIAccessibleRole::ROLE_PUSHBUTTON ||
|
||||
role == nsIAccessibleRole::ROLE_TOGGLE_BUTTON ||
|
||||
role == nsIAccessibleRole::ROLE_GRAPHIC;
|
||||
}
|
||||
|
|
|
@ -323,14 +323,7 @@ protected:
|
|||
PRUint16 mEnumVARIANTPosition;
|
||||
|
||||
// Should this accessible be allowed to have any MSAA children
|
||||
static PRBool MustPrune(nsIAccessible *accessible)
|
||||
{
|
||||
PRUint32 role = Role(accessible);
|
||||
return role == nsIAccessibleRole::ROLE_MENUITEM ||
|
||||
role == nsIAccessibleRole::ROLE_ENTRY ||
|
||||
role == nsIAccessibleRole::ROLE_PASSWORD_TEXT ||
|
||||
role == nsIAccessibleRole::ROLE_PUSHBUTTON;
|
||||
}
|
||||
static PRBool MustPrune(nsIAccessible *aAccessible);
|
||||
|
||||
enum navRelations {
|
||||
NAVRELATION_CONTROLLED_BY = 0x1000,
|
||||
|
|
|
@ -422,6 +422,9 @@ static const WindowsRoleMapItem gWindowsRoleMap[] = {
|
|||
// nsIAccessibleRole::ROLE_COMBOBOX_LISTITEM
|
||||
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
|
||||
|
||||
// nsIAccessibleRole::ROLE_IMAGE_MAP
|
||||
{ ROLE_SYSTEM_GRAPHIC, ROLE_SYSTEM_GRAPHIC },
|
||||
|
||||
// nsIAccessibleRole::ROLE_LAST_ENTRY
|
||||
{ ROLE_WINDOWS_LAST_ENTRY, ROLE_WINDOWS_LAST_ENTRY }
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче