diff --git a/accessible/src/base/nsARIAMap.cpp b/accessible/src/base/nsARIAMap.cpp index 00b1a14d856d..57c5cae39469 100644 --- a/accessible/src/base/nsARIAMap.cpp +++ b/accessible/src/base/nsARIAMap.cpp @@ -65,21 +65,24 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] = {"alertdialog", nsIAccessibleRole::ROLE_ALERT, eNameOkFromChildren, eNoValue, kNoReqStates, kEndEntry}, {"application", nsIAccessibleRole::ROLE_APPLICATION, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, {"button", nsIAccessibleRole::ROLE_PUSHBUTTON, eNameOkFromChildren, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"pressed", kBoolState, nsIAccessibleStates::STATE_PRESSED}, kEndEntry}, - {"buttonsubmit", nsIAccessibleRole::ROLE_PUSHBUTTON, eNameOkFromChildren, eNoValue, nsIAccessibleStates::STATE_DEFAULT, kEndEntry}, - {"buttoncancel", nsIAccessibleRole::ROLE_PUSHBUTTON, eNameOkFromChildren, eNoValue, kNoReqStates, kEndEntry}, {"checkbox", nsIAccessibleRole::ROLE_CHECKBUTTON, eNameOkFromChildren, eNoValue, nsIAccessibleStates::STATE_CHECKABLE, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"checked", kBoolState, nsIAccessibleStates::STATE_CHECKED}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, {"checkboxtristate", nsIAccessibleRole::ROLE_CHECKBUTTON, eNameOkFromChildren, eNoValue, nsIAccessibleStates::STATE_CHECKABLE, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"checked", kBoolState, nsIAccessibleStates::STATE_CHECKED}, {"checked", "mixed", nsIAccessibleStates::STATE_MIXED}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, {"columnheader", nsIAccessibleRole::ROLE_COLUMNHEADER, eNameOkFromChildren, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"selected", kBoolState, nsIAccessibleStates::STATE_SELECTED | nsIAccessibleStates::STATE_SELECTABLE}, {"selected", "false", nsIAccessibleStates::STATE_SELECTABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, {"combobox", nsIAccessibleRole::ROLE_COMBOBOX, eNameLabelOrTitle, eHasValueMinMax, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, {"expanded", kBoolState, nsIAccessibleStates::STATE_EXPANDED}, {"multiselectable", kBoolState, nsIAccessibleStates::STATE_MULTISELECTABLE | nsIAccessibleStates::STATE_EXTSELECTABLE}, kEndEntry}, @@ -87,9 +90,11 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] = {"dialog", nsIAccessibleRole::ROLE_DIALOG, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, {"document", nsIAccessibleRole::ROLE_DOCUMENT, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, {"grid", nsIAccessibleRole::ROLE_TABLE, eNameLabelOrTitle, eNoValue, nsIAccessibleStates::STATE_FOCUSABLE, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"multiselectable", kBoolState, nsIAccessibleStates::STATE_MULTISELECTABLE | nsIAccessibleStates::STATE_EXTSELECTABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, {"gridcell", nsIAccessibleRole::ROLE_CELL, eNameOkFromChildren, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"expanded", kBoolState, nsIAccessibleStates::STATE_EXPANDED}, {"expanded", "false", nsIAccessibleStates::STATE_COLLAPSED}, {"selected", kBoolState, nsIAccessibleStates::STATE_SELECTED | nsIAccessibleStates::STATE_SELECTABLE}, @@ -97,11 +102,13 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] = {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, {"group", nsIAccessibleRole::ROLE_GROUPING, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, {"label", nsIAccessibleRole::ROLE_LABEL, eNameOkFromChildren, eNoValue, kNoReqStates, kEndEntry}, - {"link", nsIAccessibleRole::ROLE_LINK, eNameOkFromChildren, eNoValue, nsIAccessibleStates::STATE_LINKED, kEndEntry}, + {"link", nsIAccessibleRole::ROLE_LINK, eNameOkFromChildren, eNoValue, nsIAccessibleStates::STATE_LINKED, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry}, {"list", nsIAccessibleRole::ROLE_LIST, eNameLabelOrTitle, eNoValue, kNoReqStates, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, {"multiselectable", kBoolState, nsIAccessibleStates::STATE_MULTISELECTABLE | nsIAccessibleStates::STATE_EXTSELECTABLE}, kEndEntry}, {"listbox", nsIAccessibleRole::ROLE_LIST, eNameLabelOrTitle, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, {"multiselectable", kBoolState, nsIAccessibleStates::STATE_MULTISELECTABLE | nsIAccessibleStates::STATE_EXTSELECTABLE}, kEndEntry}, {"listitem", nsIAccessibleRole::ROLE_LISTITEM, eNameOkFromChildren, eNoValue, kNoReqStates, @@ -109,59 +116,76 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] = {"selected", "false", nsIAccessibleStates::STATE_SELECTABLE}, {"checked", kBoolState, nsIAccessibleStates::STATE_CHECKED | nsIAccessibleStates::STATE_CHECKABLE}, {"checked", "false", nsIAccessibleStates::STATE_CHECKABLE}, kEndEntry}, - {"menu", nsIAccessibleRole::ROLE_MENUPOPUP, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, - {"menubar", nsIAccessibleRole::ROLE_MENUBAR, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, + {"menu", nsIAccessibleRole::ROLE_MENUPOPUP, eNameLabelOrTitle, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry}, + {"menubar", nsIAccessibleRole::ROLE_MENUBAR, eNameLabelOrTitle, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry}, {"menuitem", nsIAccessibleRole::ROLE_MENUITEM, eNameOkFromChildren, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"checked", kBoolState, nsIAccessibleStates::STATE_CHECKED | nsIAccessibleStates::STATE_CHECKABLE}, {"checked", "mixed", nsIAccessibleStates::STATE_MIXED}, {"checked", "false", nsIAccessibleStates::STATE_CHECKABLE}, kEndEntry}, {"menuitemcheckbox", nsIAccessibleRole::ROLE_MENUITEM, eNameOkFromChildren, eNoValue, nsIAccessibleStates::STATE_CHECKABLE, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"checked", kBoolState, nsIAccessibleStates::STATE_CHECKED }, kEndEntry}, {"menuitemradio", nsIAccessibleRole::ROLE_MENUITEM, eNameOkFromChildren, eNoValue, nsIAccessibleStates::STATE_CHECKABLE, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"checked", kBoolState, nsIAccessibleStates::STATE_CHECKED }, kEndEntry}, {"option", nsIAccessibleRole::ROLE_LISTITEM, eNameOkFromChildren, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"selected", kBoolState, nsIAccessibleStates::STATE_SELECTED | nsIAccessibleStates::STATE_SELECTABLE}, {"selected", "false", nsIAccessibleStates::STATE_SELECTABLE}, {"checked", kBoolState, nsIAccessibleStates::STATE_CHECKED | nsIAccessibleStates::STATE_CHECKABLE}, {"checked", "false", nsIAccessibleStates::STATE_CHECKABLE}, kEndEntry}, - {"progressbar", nsIAccessibleRole::ROLE_PROGRESSBAR, eNameLabelOrTitle, eHasValueMinMax, nsIAccessibleStates::STATE_READONLY, kEndEntry}, + {"progressbar", nsIAccessibleRole::ROLE_PROGRESSBAR, eNameLabelOrTitle, eHasValueMinMax, nsIAccessibleStates::STATE_READONLY, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry}, {"radio", nsIAccessibleRole::ROLE_RADIOBUTTON, eNameOkFromChildren, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"checked", kBoolState, nsIAccessibleStates::STATE_CHECKED}, kEndEntry}, - {"radiogroup", nsIAccessibleRole::ROLE_GROUPING, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, + {"radiogroup", nsIAccessibleRole::ROLE_GROUPING, eNameLabelOrTitle, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry}, {"row", nsIAccessibleRole::ROLE_ROW, eNameOkFromChildren, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"selected", kBoolState, nsIAccessibleStates::STATE_SELECTED | nsIAccessibleStates::STATE_SELECTABLE}, {"selected", "false", nsIAccessibleStates::STATE_SELECTABLE}, {"expanded", kBoolState, nsIAccessibleStates::STATE_EXPANDED}, {"expanded", "false", nsIAccessibleStates::STATE_COLLAPSED}, kEndEntry}, {"rowheader", nsIAccessibleRole::ROLE_ROWHEADER, eNameOkFromChildren, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"selected", kBoolState, nsIAccessibleStates::STATE_SELECTED | nsIAccessibleStates::STATE_SELECTABLE}, {"selected", "false", nsIAccessibleStates::STATE_SELECTABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, {"secret", nsIAccessibleRole::ROLE_PASSWORD_TEXT, eNameLabelOrTitle, eNoValue, nsIAccessibleStates::STATE_PROTECTED, - kEndEntry}, // nsIAccessibleStates::EXT_STATE_SINGLE_LINE manually supported in code + // Manually map EXT_STATE_SINGLE_LINE and EXT_STATE_MULTI_LINE FROM aaa:multiline + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry}, {"separator", nsIAccessibleRole::ROLE_SEPARATOR, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, {"slider", nsIAccessibleRole::ROLE_SLIDER, eNameLabelOrTitle, eHasValueMinMax, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, {"spinbutton", nsIAccessibleRole::ROLE_SPINBUTTON, eNameLabelOrTitle, eHasValueMinMax, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, - {"spreadsheet", nsIAccessibleRole::ROLE_TABLE, eNameLabelOrTitle, eNoValue, nsIAccessibleStates::STATE_MULTISELECTABLE | nsIAccessibleStates::STATE_EXTSELECTABLE | nsIAccessibleStates::STATE_FOCUSABLE, - {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, // Still supported, but deprecated in favor of grid {"status", nsIAccessibleRole::ROLE_STATUSBAR, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, - {"tab", nsIAccessibleRole::ROLE_PAGETAB, eNameOkFromChildren, eNoValue, kNoReqStates, kEndEntry}, + {"tab", nsIAccessibleRole::ROLE_PAGETAB, eNameOkFromChildren, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry}, {"tablist", nsIAccessibleRole::ROLE_PAGETABLIST, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, {"tabpanel", nsIAccessibleRole::ROLE_PROPERTYPAGE, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, - {"textarea", nsIAccessibleRole::ROLE_ENTRY, eNameLabelOrTitle, eHasValueMinMax, kNoReqStates, - {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, // XXX nsIAccessibleStates::EXT_STATE_MULTI_LINE supported in code - {"textfield", nsIAccessibleRole::ROLE_ENTRY, eNameLabelOrTitle, eHasValueMinMax, kNoReqStates, - {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, // XXX nsIAccessibleStates::EXT_STATE_SINGLE_LINE supported in code - {"toolbar", nsIAccessibleRole::ROLE_TOOLBAR, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, + {"textbox", nsIAccessibleRole::ROLE_ENTRY, eNameLabelOrTitle, eHasValueMinMax, kNoReqStates, + // Manually map EXT_STATE_SINGLE_LINE and EXT_STATE_MULTI_LINE FROM aaa:multiline + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, + {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, + {"toolbar", nsIAccessibleRole::ROLE_TOOLBAR, eNameLabelOrTitle, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, kEndEntry}, {"tree", nsIAccessibleRole::ROLE_OUTLINE, eNameLabelOrTitle, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, {"multiselectable", kBoolState, nsIAccessibleStates::STATE_MULTISELECTABLE | nsIAccessibleStates::STATE_EXTSELECTABLE}, kEndEntry}, {"treegrid", nsIAccessibleRole::ROLE_TREE_TABLE, eNameLabelOrTitle, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, {"multiselectable", kBoolState, nsIAccessibleStates::STATE_MULTISELECTABLE | nsIAccessibleStates::STATE_EXTSELECTABLE}, kEndEntry}, {"treeitem", nsIAccessibleRole::ROLE_OUTLINEITEM, eNameOkFromChildren, eNoValue, kNoReqStates, + {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"selected", kBoolState, nsIAccessibleStates::STATE_SELECTED | nsIAccessibleStates::STATE_SELECTABLE}, {"selected", "false", nsIAccessibleStates::STATE_SELECTABLE}, {"expanded", kBoolState, nsIAccessibleStates::STATE_EXPANDED}, @@ -169,7 +193,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] = {"checked", kBoolState, nsIAccessibleStates::STATE_CHECKED | nsIAccessibleStates::STATE_CHECKABLE}, {"checked", "mixed", nsIAccessibleStates::STATE_MIXED}, {"checked", "false", nsIAccessibleStates::STATE_CHECKABLE},}, - {"treegroup", nsIAccessibleRole::ROLE_GROUPING, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, {nsnull, nsIAccessibleRole::ROLE_NOTHING, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry} // Last item }; @@ -179,7 +202,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] = * whether there is an ARIA role or not: */ nsStateMapEntry nsARIAMap::gWAIUnivStateMap[] = { - {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"required", kBoolState, nsIAccessibleStates::STATE_REQUIRED}, {"invalid", kBoolState, nsIAccessibleStates::STATE_INVALID}, {"haspopup", kBoolState, nsIAccessibleStates::STATE_HASPOPUP}, diff --git a/accessible/src/base/nsARIAMap.h b/accessible/src/base/nsARIAMap.h index 9ac3f30ab463..b03a222ca260 100644 --- a/accessible/src/base/nsARIAMap.h +++ b/accessible/src/base/nsARIAMap.h @@ -114,6 +114,7 @@ struct nsRoleMapEntry nsStateMapEntry attributeMap5; nsStateMapEntry attributeMap6; nsStateMapEntry attributeMap7; + nsStateMapEntry attributeMap8; }; /** diff --git a/accessible/src/base/nsAccessible.cpp b/accessible/src/base/nsAccessible.cpp index 570b1c5b7618..906392b54967 100644 --- a/accessible/src/base/nsAccessible.cpp +++ b/accessible/src/base/nsAccessible.cpp @@ -1077,9 +1077,8 @@ nsAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState) // XXX We can remove this hack once we support RDF-based role & state maps if (mRoleMapEntry && (mRoleMapEntry->role == nsIAccessibleRole::ROLE_ENTRY || mRoleMapEntry->role == nsIAccessibleRole::ROLE_PASSWORD_TEXT)) { - PRBool isEqual = - NS_LITERAL_CSTRING("textarea").Equals(mRoleMapEntry->roleString); - if (isEqual) { + if (content->AttrValueIs(kNameSpaceID_WAIProperties , nsAccessibilityAtoms::multiline, + nsAccessibilityAtoms::_true, eCaseMatters)) { *aExtraState |= nsIAccessibleStates::EXT_STATE_MULTI_LINE; } else { @@ -2293,8 +2292,9 @@ nsAccessible::GetARIAState(PRUint32 *aState) MappedAttrState(content, aState, &mRoleMapEntry->attributeMap3) && MappedAttrState(content, aState, &mRoleMapEntry->attributeMap4) && MappedAttrState(content, aState, &mRoleMapEntry->attributeMap5) && - MappedAttrState(content, aState, &mRoleMapEntry->attributeMap6)) { - MappedAttrState(content, aState, &mRoleMapEntry->attributeMap7); + MappedAttrState(content, aState, &mRoleMapEntry->attributeMap6) && + MappedAttrState(content, aState, &mRoleMapEntry->attributeMap7)) { + MappedAttrState(content, aState, &mRoleMapEntry->attributeMap8); } return NS_OK;