зеркало из https://github.com/mozilla/gecko-dev.git
Bug 467139 - NameFromSubtree rule should be based on role, r=aaronlev, marcoz, davidb, sr=neil
This commit is contained in:
Родитель
2272dd26f2
Коммит
7310d2896f
|
@ -81,6 +81,7 @@ CPPSRCS = \
|
|||
nsAccessibilityAtoms.cpp \
|
||||
nsCoreUtils.cpp \
|
||||
nsAccUtils.cpp \
|
||||
nsNameUtils.cpp \
|
||||
nsAccessibilityService.cpp \
|
||||
nsAccessible.cpp \
|
||||
nsAccessibleRelation.cpp \
|
||||
|
|
|
@ -63,7 +63,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"alert",
|
||||
nsIAccessibleRole::ROLE_ALERT,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -72,7 +71,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"alertdialog",
|
||||
nsIAccessibleRole::ROLE_ALERT,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -81,7 +79,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"application",
|
||||
nsIAccessibleRole::ROLE_APPLICATION,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -90,7 +87,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"article",
|
||||
nsIAccessibleRole::ROLE_DOCUMENT,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -99,7 +95,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"button",
|
||||
nsIAccessibleRole::ROLE_PUSHBUTTON,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eClickAction,
|
||||
kNoReqStates,
|
||||
|
@ -110,7 +105,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"checkbox",
|
||||
nsIAccessibleRole::ROLE_CHECKBUTTON,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eCheckUncheckAction,
|
||||
nsIAccessibleStates::STATE_CHECKABLE,
|
||||
|
@ -122,7 +116,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"columnheader",
|
||||
nsIAccessibleRole::ROLE_COLUMNHEADER,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -134,7 +127,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"combobox",
|
||||
nsIAccessibleRole::ROLE_COMBOBOX,
|
||||
eNameLabelOrTitle,
|
||||
eHasValueMinMax,
|
||||
eOpenCloseAction,
|
||||
nsIAccessibleStates::STATE_COLLAPSED | nsIAccessibleStates::STATE_HASPOPUP,
|
||||
|
@ -146,7 +138,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"description",
|
||||
nsIAccessibleRole::ROLE_TEXT_CONTAINER,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -155,7 +146,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"dialog",
|
||||
nsIAccessibleRole::ROLE_DIALOG,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -164,7 +154,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"document",
|
||||
nsIAccessibleRole::ROLE_DOCUMENT,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -173,7 +162,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"grid",
|
||||
nsIAccessibleRole::ROLE_TABLE,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
nsIAccessibleStates::STATE_FOCUSABLE,
|
||||
|
@ -184,7 +172,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"gridcell",
|
||||
nsIAccessibleRole::ROLE_CELL,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -198,7 +185,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"group",
|
||||
nsIAccessibleRole::ROLE_GROUPING,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -207,7 +193,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"heading",
|
||||
nsIAccessibleRole::ROLE_HEADING,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -216,7 +201,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"img",
|
||||
nsIAccessibleRole::ROLE_GRAPHIC,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -225,7 +209,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"label",
|
||||
nsIAccessibleRole::ROLE_LABEL,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -234,7 +217,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"link",
|
||||
nsIAccessibleRole::ROLE_LINK,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eJumpAction,
|
||||
nsIAccessibleStates::STATE_LINKED,
|
||||
|
@ -243,7 +225,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"list",
|
||||
nsIAccessibleRole::ROLE_LIST,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
nsIAccessibleStates::STATE_READONLY,
|
||||
|
@ -253,7 +234,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"listbox",
|
||||
nsIAccessibleRole::ROLE_LISTBOX,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -264,7 +244,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"listitem",
|
||||
nsIAccessibleRole::ROLE_LISTITEM,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eNoAction, // XXX: should depend on state, parent accessible
|
||||
nsIAccessibleStates::STATE_READONLY,
|
||||
|
@ -278,7 +257,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"math",
|
||||
nsIAccessibleRole::ROLE_FLAT_EQUATION,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -287,7 +265,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"menu",
|
||||
nsIAccessibleRole::ROLE_MENUPOPUP,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction, // XXX: technically accessibles of menupopup role haven't
|
||||
// any action, but menu can be open or close.
|
||||
|
@ -297,7 +274,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"menubar",
|
||||
nsIAccessibleRole::ROLE_MENUBAR,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -306,7 +282,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"menuitem",
|
||||
nsIAccessibleRole::ROLE_MENUITEM,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eClickAction,
|
||||
kNoReqStates,
|
||||
|
@ -318,7 +293,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"menuitemcheckbox",
|
||||
nsIAccessibleRole::ROLE_CHECK_MENU_ITEM,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eClickAction,
|
||||
nsIAccessibleStates::STATE_CHECKABLE,
|
||||
|
@ -329,7 +303,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"menuitemradio",
|
||||
nsIAccessibleRole::ROLE_RADIO_MENU_ITEM,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eClickAction,
|
||||
nsIAccessibleStates::STATE_CHECKABLE,
|
||||
|
@ -339,7 +312,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"option",
|
||||
nsIAccessibleRole::ROLE_OPTION,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eSelectAction,
|
||||
kNoReqStates,
|
||||
|
@ -353,7 +325,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"presentation",
|
||||
nsIAccessibleRole::ROLE_NOTHING,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -362,7 +333,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"progressbar",
|
||||
nsIAccessibleRole::ROLE_PROGRESSBAR,
|
||||
eNameLabelOrTitle,
|
||||
eHasValueMinMax,
|
||||
eNoAction,
|
||||
nsIAccessibleStates::STATE_READONLY,
|
||||
|
@ -371,7 +341,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"radio",
|
||||
nsIAccessibleRole::ROLE_RADIOBUTTON,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eSelectAction,
|
||||
kNoReqStates,
|
||||
|
@ -381,7 +350,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"radiogroup",
|
||||
nsIAccessibleRole::ROLE_GROUPING,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -390,7 +358,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"region",
|
||||
nsIAccessibleRole::ROLE_PANE,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -399,7 +366,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"row",
|
||||
nsIAccessibleRole::ROLE_ROW,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -412,7 +378,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"rowheader",
|
||||
nsIAccessibleRole::ROLE_ROWHEADER,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -424,7 +389,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"section",
|
||||
nsIAccessibleRole::ROLE_SECTION,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -433,7 +397,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"separator",
|
||||
nsIAccessibleRole::ROLE_SEPARATOR,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -442,7 +405,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"slider",
|
||||
nsIAccessibleRole::ROLE_SLIDER,
|
||||
eNameLabelOrTitle,
|
||||
eHasValueMinMax,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -452,7 +414,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"spinbutton",
|
||||
nsIAccessibleRole::ROLE_SPINBUTTON,
|
||||
eNameLabelOrTitle,
|
||||
eHasValueMinMax,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -462,7 +423,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"status",
|
||||
nsIAccessibleRole::ROLE_STATUSBAR,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -471,7 +431,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"tab",
|
||||
nsIAccessibleRole::ROLE_PAGETAB,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eSwitchAction,
|
||||
kNoReqStates,
|
||||
|
@ -480,7 +439,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"tablist",
|
||||
nsIAccessibleRole::ROLE_PAGETABLIST,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -489,7 +447,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"tabpanel",
|
||||
nsIAccessibleRole::ROLE_PROPERTYPAGE,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -498,7 +455,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"textbox",
|
||||
nsIAccessibleRole::ROLE_ENTRY,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eActivateAction,
|
||||
kNoReqStates,
|
||||
|
@ -512,7 +468,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"toolbar",
|
||||
nsIAccessibleRole::ROLE_TOOLBAR,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -521,7 +476,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"tooltip",
|
||||
nsIAccessibleRole::ROLE_TOOLTIP,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -530,7 +484,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"tree",
|
||||
nsIAccessibleRole::ROLE_OUTLINE,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -541,7 +494,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"treegrid",
|
||||
nsIAccessibleRole::ROLE_TREE_TABLE,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -552,7 +504,6 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] =
|
|||
{
|
||||
"treeitem",
|
||||
nsIAccessibleRole::ROLE_OUTLINEITEM,
|
||||
eNameOkFromChildren,
|
||||
eNoValue,
|
||||
eActivateAction, // XXX: should expose second 'expand/collapse' action based
|
||||
// on states
|
||||
|
@ -572,7 +523,6 @@ PRUint32 nsARIAMap::gWAIRoleMapLength = NS_ARRAY_LENGTH(nsARIAMap::gWAIRoleMap);
|
|||
nsRoleMapEntry nsARIAMap::gLandmarkRoleMap = {
|
||||
"",
|
||||
nsIAccessibleRole::ROLE_NOTHING,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
@ -582,7 +532,6 @@ nsRoleMapEntry nsARIAMap::gLandmarkRoleMap = {
|
|||
nsRoleMapEntry nsARIAMap::gEmptyRoleMap = {
|
||||
"",
|
||||
nsIAccessibleRole::ROLE_NOTHING,
|
||||
eNameLabelOrTitle,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
kNoReqStates,
|
||||
|
|
|
@ -43,26 +43,6 @@
|
|||
#include "prtypes.h"
|
||||
#include "nsAccessibilityAtoms.h"
|
||||
|
||||
// Name mapping rule: can the name be computed from descendants?
|
||||
enum ENameRule
|
||||
{
|
||||
// eNameLabelOrTitle:
|
||||
// Collect name from:
|
||||
// 1) The content subtrees pointed to by labelledby
|
||||
// which contains the IDs for the label content, or if unspecified
|
||||
// 2) The title attribute if specified
|
||||
eNameLabelOrTitle,
|
||||
|
||||
// eNameOkFromChildren
|
||||
// Collect name from:
|
||||
// 1) The content subtrees pointed to by labelledby
|
||||
// which contains the IDs for the label content, or if un specified
|
||||
// 2) The text and text equivalents from descendents,
|
||||
// as well as the value of controls, collected in depth-first order, or if empty
|
||||
// 3) The title attribute if specified
|
||||
eNameOkFromChildren
|
||||
};
|
||||
|
||||
// Is nsIAccessible value supported for this role or not?
|
||||
enum EValueRule
|
||||
{
|
||||
|
@ -107,9 +87,6 @@ struct nsRoleMapEntry
|
|||
// Role mapping rule: maps to this nsIAccessibleRole
|
||||
PRUint32 role;
|
||||
|
||||
// Name mapping rule: how to compute nsIAccessible name
|
||||
ENameRule nameRule;
|
||||
|
||||
// Value mapping rule: how to compute nsIAccessible value
|
||||
EValueRule valueRule;
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include "nsAccessible.h"
|
||||
#include "nsAccessibleRelation.h"
|
||||
#include "nsHyperTextAccessibleWrap.h"
|
||||
#include "nsNameUtils.h"
|
||||
|
||||
#include "nsIAccessibleDocument.h"
|
||||
#include "nsIAccessibleHyperText.h"
|
||||
|
@ -1716,12 +1717,8 @@ nsresult nsAccessible::GetTextFromRelationID(nsIAtom *aIDProperty, nsString &aNa
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Only called if the element is not a nsIDOMXULControlElement. Initially walks up
|
||||
* the DOM tree to the form, concatonating label elements as it goes. Then checks for
|
||||
* labels with the for="controlID" property.
|
||||
*/
|
||||
nsresult nsAccessible::GetHTMLName(nsAString& aLabel, PRBool aCanAggregateSubtree)
|
||||
nsresult
|
||||
nsAccessible::GetHTMLName(nsAString& aLabel)
|
||||
{
|
||||
nsCOMPtr<nsIContent> content = nsCoreUtils::GetRoleContent(mDOMNode);
|
||||
if (!content) {
|
||||
|
@ -1742,9 +1739,10 @@ nsresult nsAccessible::GetHTMLName(nsAString& aLabel, PRBool aCanAggregateSubtre
|
|||
}
|
||||
}
|
||||
|
||||
PRBool canAggregateName = mRoleMapEntry ?
|
||||
mRoleMapEntry->nameRule == eNameOkFromChildren :
|
||||
aCanAggregateSubtree;
|
||||
PRUint32 role = nsAccUtils::Role(this);
|
||||
PRUint32 canAggregateName =
|
||||
nsNameUtils::gRoleToNameRulesMap[role] & eFromSubtree;
|
||||
|
||||
if (canAggregateName) {
|
||||
// Don't use AppendFlatStringFromSubtree for container widgets like menulist
|
||||
nsresult rv = AppendFlatStringFromSubtree(content, &aLabel);
|
||||
|
@ -1775,7 +1773,8 @@ nsresult nsAccessible::GetHTMLName(nsAString& aLabel, PRBool aCanAggregateSubtre
|
|||
* the control that uses the control="controlID" syntax will use
|
||||
* the child label for its Name.
|
||||
*/
|
||||
nsresult nsAccessible::GetXULName(nsAString& aLabel, PRBool aCanAggregateSubtree)
|
||||
nsresult
|
||||
nsAccessible::GetXULName(nsAString& aLabel)
|
||||
{
|
||||
// CASE #1 (via label attribute) -- great majority of the cases
|
||||
nsresult rv = NS_OK;
|
||||
|
@ -1851,9 +1850,9 @@ nsresult nsAccessible::GetXULName(nsAString& aLabel, PRBool aCanAggregateSubtree
|
|||
parent = parent->GetParent();
|
||||
}
|
||||
|
||||
PRBool canAggregateName = mRoleMapEntry ?
|
||||
mRoleMapEntry->nameRule == eNameOkFromChildren :
|
||||
aCanAggregateSubtree;
|
||||
PRUint32 role = nsAccUtils::Role(this);
|
||||
PRUint32 canAggregateName =
|
||||
nsNameUtils::gRoleToNameRulesMap[role] & eFromSubtree;
|
||||
|
||||
return canAggregateName ?
|
||||
AppendFlatStringFromSubtree(content, &aLabel) : NS_OK;
|
||||
|
@ -3421,10 +3420,10 @@ nsAccessible::GetNameInternal(nsAString& aName)
|
|||
return NS_OK;
|
||||
|
||||
if (content->IsNodeOfType(nsINode::eHTML))
|
||||
return GetHTMLName(aName, PR_FALSE);
|
||||
return GetHTMLName(aName);
|
||||
|
||||
if (content->IsNodeOfType(nsINode::eXUL))
|
||||
return GetXULName(aName, PR_FALSE);
|
||||
return GetXULName(aName);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -180,9 +180,19 @@ protected:
|
|||
*/
|
||||
nsresult GetTextFromRelationID(nsIAtom *aIDProperty, nsString &aName);
|
||||
|
||||
// Name helpers
|
||||
nsresult GetHTMLName(nsAString& _retval, PRBool aCanAggregateSubtree = PR_TRUE);
|
||||
nsresult GetXULName(nsAString& aName, PRBool aCanAggregateSubtree = PR_TRUE);
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Name helpers.
|
||||
|
||||
/**
|
||||
* Compute the name of HTML node.
|
||||
*/
|
||||
nsresult GetHTMLName(nsAString& aName);
|
||||
|
||||
/**
|
||||
* Compute the name for XUL node.
|
||||
*/
|
||||
nsresult GetXULName(nsAString& aName);
|
||||
|
||||
// For accessibles that are not lists of choices, the name of the subtree should be the
|
||||
// sum of names in the subtree
|
||||
nsresult AppendFlatStringFromSubtree(nsIContent *aContent, nsAString *aFlatString);
|
||||
|
|
|
@ -0,0 +1,168 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim:expandtab:shiftwidth=2:tabstop=2:
|
||||
*/
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Mozilla Foundation
|
||||
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Alexander Surkov <surkov.alexander@gmail.com> (original author)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsNameUtils.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Name rules to role map.
|
||||
|
||||
PRUint32 nsNameUtils::gRoleToNameRulesMap[] =
|
||||
{
|
||||
eNoRule, // ROLE_NOTHING
|
||||
eNoRule, // ROLE_TITLEBAR
|
||||
eNoRule, // ROLE_MENUBAR
|
||||
eNoRule, // ROLE_SCROLLBAR
|
||||
eNoRule, // ROLE_GRIP
|
||||
eNoRule, // ROLE_SOUND
|
||||
eNoRule, // ROLE_CURSOR
|
||||
eNoRule, // ROLE_CARET
|
||||
eNoRule, // ROLE_ALERT
|
||||
eNoRule, // ROLE_WINDOW
|
||||
eNoRule, // ROLE_INTERNAL_FRAME
|
||||
eNoRule, // ROLE_MENUPOPUP
|
||||
eFromSubtree, // ROLE_MENUITEM
|
||||
eFromSubtree, // ROLE_TOOLTIP
|
||||
eNoRule, // ROLE_APPLICATION
|
||||
eNoRule, // ROLE_DOCUMENT
|
||||
eNoRule, // ROLE_PANE
|
||||
eNoRule, // ROLE_CHART
|
||||
eNoRule, // ROLE_DIALOG
|
||||
eNoRule, // ROLE_BORDER
|
||||
eNoRule, // ROLE_GROUPING
|
||||
eNoRule, // ROLE_SEPARATOR
|
||||
eNoRule, // ROLE_TOOLBAR
|
||||
eNoRule, // ROLE_STATUSBAR
|
||||
eNoRule, // ROLE_TABLE
|
||||
eFromSubtree, // ROLE_COLUMNHEADER
|
||||
eFromSubtree, // ROLE_ROWHEADER
|
||||
eFromSubtree, // ROLE_COLUMN
|
||||
eFromSubtree, // ROLE_ROW
|
||||
eFromSubtree, // ROLE_CELL
|
||||
eFromSubtree, // ROLE_LINK
|
||||
eFromSubtree, // ROLE_HELPBALLOON
|
||||
eNoRule, // ROLE_CHARACTER
|
||||
eNoRule, // ROLE_LIST
|
||||
eFromSubtree, // ROLE_LISTITEM
|
||||
eNoRule, // ROLE_OUTLINE
|
||||
eFromSubtree, // ROLE_OUTLINEITEM
|
||||
eFromSubtree, // ROLE_PAGETAB
|
||||
eNoRule, // ROLE_PROPERTYPAGE
|
||||
eNoRule, // ROLE_INDICATOR
|
||||
eNoRule, // ROLE_GRAPHIC
|
||||
eNoRule, // ROLE_STATICTEXT
|
||||
eNoRule, // ROLE_TEXT_LEAF
|
||||
eFromSubtree, // ROLE_PUSHBUTTON
|
||||
eFromSubtree, // ROLE_CHECKBUTTON
|
||||
eFromSubtree, // ROLE_RADIOBUTTON
|
||||
eNoRule, // ROLE_COMBOBOX
|
||||
eNoRule, // ROLE_DROPLIST
|
||||
eNoRule, // ROLE_PROGRESSBAR
|
||||
eNoRule, // ROLE_DIAL
|
||||
eNoRule, // ROLE_HOTKEYFIELD
|
||||
eNoRule, // ROLE_SLIDER
|
||||
eNoRule, // ROLE_SPINBUTTON
|
||||
eNoRule, // ROLE_DIAGRAM
|
||||
eNoRule, // ROLE_ANIMATION
|
||||
eNoRule, // ROLE_EQUATION
|
||||
eFromSubtree, // ROLE_BUTTONDROPDOWN
|
||||
eFromSubtree, // ROLE_BUTTONMENU
|
||||
eFromSubtree, // ROLE_BUTTONDROPDOWNGRID
|
||||
eNoRule, // ROLE_WHITESPACE
|
||||
eNoRule, // ROLE_PAGETABLIST
|
||||
eNoRule, // ROLE_CLOCK
|
||||
eNoRule, // ROLE_SPLITBUTTON
|
||||
eNoRule, // ROLE_IPADDRESS
|
||||
eNoRule, // ROLE_ACCEL_LABEL
|
||||
eNoRule, // ROLE_ARROW
|
||||
eNoRule, // ROLE_CANVAS
|
||||
eFromSubtree, // ROLE_CHECK_MENU_ITEM
|
||||
eNoRule, // ROLE_COLOR_CHOOSER
|
||||
eNoRule, // ROLE_DATE_EDITOR
|
||||
eNoRule, // ROLE_DESKTOP_ICON
|
||||
eNoRule, // ROLE_DESKTOP_FRAME
|
||||
eNoRule, // ROLE_DIRECTORY_PANE
|
||||
eNoRule, // ROLE_FILE_CHOOSER
|
||||
eNoRule, // ROLE_FONT_CHOOSER
|
||||
eNoRule, // ROLE_CHROME_WINDOW
|
||||
eNoRule, // ROLE_GLASS_PANE
|
||||
eNoRule, // ROLE_HTML_CONTAINER
|
||||
eNoRule, // ROLE_ICON
|
||||
eNoRule, // ROLE_LABEL
|
||||
eNoRule, // ROLE_LAYERED_PANE
|
||||
eNoRule, // ROLE_OPTION_PANE
|
||||
eNoRule, // ROLE_PASSWORD_TEXT
|
||||
eNoRule, // ROLE_POPUP_MENU
|
||||
eFromSubtree, // ROLE_RADIO_MENU_ITEM
|
||||
eNoRule, // ROLE_ROOT_PANE
|
||||
eNoRule, // ROLE_SCROLL_PANE
|
||||
eNoRule, // ROLE_SPLIT_PANE
|
||||
eFromSubtree, // ROLE_TABLE_COLUMN_HEADER
|
||||
eFromSubtree, // ROLE_TABLE_ROW_HEADER
|
||||
eFromSubtree, // ROLE_TEAR_OFF_MENU_ITEM
|
||||
eNoRule, // ROLE_TERMINAL
|
||||
eNoRule, // ROLE_TEXT_CONTAINER
|
||||
eFromSubtree, // ROLE_TOGGLE_BUTTON
|
||||
eNoRule, // ROLE_TREE_TABLE
|
||||
eNoRule, // ROLE_VIEWPORT
|
||||
eNoRule, // ROLE_HEADER
|
||||
eNoRule, // ROLE_FOOTER
|
||||
eNoRule, // ROLE_PARAGRAPH
|
||||
eNoRule, // ROLE_RULER
|
||||
eNoRule, // ROLE_AUTOCOMPLETE
|
||||
eNoRule, // ROLE_EDITBAR
|
||||
eNoRule, // ROLE_ENTRY
|
||||
eNoRule, // ROLE_CAPTION
|
||||
eNoRule, // ROLE_DOCUMENT_FRAME
|
||||
eNoRule, // ROLE_HEADING
|
||||
eNoRule, // ROLE_PAGE
|
||||
eNoRule, // ROLE_SECTION
|
||||
eNoRule, // ROLE_REDUNDANT_OBJECT
|
||||
eNoRule, // ROLE_FORM
|
||||
eNoRule, // ROLE_IME
|
||||
eNoRule, // ROLE_APP_ROOT
|
||||
eFromSubtree, // ROLE_PARENT_MENUITEM
|
||||
eNoRule, // ROLE_CALENDAR
|
||||
eNoRule, // ROLE_COMBOBOX_LIST
|
||||
eFromSubtree, // ROLE_COMBOBOX_OPTION
|
||||
eNoRule, // ROLE_IMAGE_MAP
|
||||
eFromSubtree, // ROLE_OPTION
|
||||
eFromSubtree, // ROLE_RICH_OPTION
|
||||
eNoRule, // ROLE_LISTBOX
|
||||
eNoRule // ROLE_FLAT_EQUATION
|
||||
};
|
|
@ -0,0 +1,71 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim:expandtab:shiftwidth=2:tabstop=2:
|
||||
*/
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Mozilla Foundation
|
||||
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Alexander Surkov <surkov.alexander@gmail.com> (original author)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef _nsNameUtils_H_
|
||||
#define _nsNameUtils_H_
|
||||
|
||||
#include "prtypes.h"
|
||||
|
||||
/**
|
||||
* Name from subtree calculation rules.
|
||||
*/
|
||||
enum ENameFromSubtreeRule
|
||||
{
|
||||
// do not walk into subtree to compute the name
|
||||
eNoRule = 0x00,
|
||||
|
||||
// compute the name from the subtree
|
||||
eFromSubtree = 0x01
|
||||
};
|
||||
|
||||
/**
|
||||
* The class provides utils methods to compute the accessible name and
|
||||
* description.
|
||||
*/
|
||||
class nsNameUtils
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Map array from roles to name rules (bit state of ENameFromSubtreeRule).
|
||||
*/
|
||||
static PRUint32 gRoleToNameRulesMap[];
|
||||
};
|
||||
|
||||
#endif
|
|
@ -369,12 +369,6 @@ nsHTML4ButtonAccessible::GetStateInternal(PRUint32 *aState,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsHTML4ButtonAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
return GetHTMLName(aName, PR_TRUE);
|
||||
}
|
||||
|
||||
// --- textfield -----
|
||||
|
||||
nsHTMLTextFieldAccessible::nsHTMLTextFieldAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell):
|
||||
|
|
|
@ -86,7 +86,7 @@ public:
|
|||
NS_IMETHOD DoAction(PRUint8 index);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetStateInternal(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
};
|
||||
|
||||
|
@ -105,7 +105,6 @@ public:
|
|||
NS_IMETHOD DoAction(PRUint8 index);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetStateInternal(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
};
|
||||
|
||||
|
|
|
@ -57,12 +57,6 @@ NS_IMPL_ISUPPORTS_INHERITED1(nsHTMLLinkAccessible, nsHyperTextAccessibleWrap,
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
// nsIAccessible
|
||||
|
||||
nsresult
|
||||
nsHTMLLinkAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
return GetHTMLName(aName, PR_TRUE);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLLinkAccessible::GetRole(PRUint32 *aRole)
|
||||
{
|
||||
|
|
|
@ -61,7 +61,6 @@ public:
|
|||
NS_IMETHOD GetURI(PRInt32 aIndex, nsIURI **aURI);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetStateInternal(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
|
||||
protected:
|
||||
|
|
|
@ -91,12 +91,6 @@ nsXULColorPickerTileAccessible::GetStateInternal(PRUint32 *aState,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsXULColorPickerTileAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
return GetXULName(aName);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsXULColorPickerTileAccessible::GetValue(nsAString& _retval)
|
||||
{
|
||||
if (!mDOMNode)
|
||||
|
|
|
@ -52,7 +52,6 @@ public:
|
|||
NS_IMETHOD GetValue(nsAString& _retval);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetStateInternal(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
};
|
||||
|
||||
|
|
|
@ -127,12 +127,6 @@ nsXULColumnItemAccessible::GetStateInternal(PRUint32 *aState,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsXULColumnItemAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
return GetXULName(aName);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULColumnItemAccessible::GetNumActions(PRUint8 *aNumActions)
|
||||
{
|
||||
|
|
|
@ -79,7 +79,6 @@ public:
|
|||
NS_IMETHOD DoAction(PRUint8 aIndex);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetStateInternal(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
|
||||
enum { eAction_Click = 0 };
|
||||
|
|
|
@ -117,12 +117,6 @@ nsLeafAccessible(aDomNode, aShell)
|
|||
{
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsXULTooltipAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
return GetXULName(aName, PR_TRUE);
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsXULTooltipAccessible::GetStateInternal(PRUint32 *aState,
|
||||
PRUint32 *aExtraState)
|
||||
|
|
|
@ -72,7 +72,6 @@ public:
|
|||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetStateInternal(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче