зеркало из https://github.com/mozilla/gecko-dev.git
Bug 453591 - reorganize nsAccessible::GetName to handle ARIA for non XUL/HTML elements, r=marcoz, aaronlev
This commit is contained in:
Родитель
5985c7379d
Коммит
cd94beaab7
|
@ -220,6 +220,12 @@ nsresult nsAccessible::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
if (aIID.Equals(NS_GET_IID(nsAccessible))) {
|
||||
*aInstancePtr = static_cast<nsAccessible*>(this);
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (aIID.Equals(NS_GET_IID(nsIAccessibleSelectable))) {
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
if (!content) {
|
||||
|
@ -301,26 +307,19 @@ NS_IMETHODIMP nsAccessible::SetRoleMapEntry(nsRoleMapEntry* aRoleMapEntry)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAccessible::GetName(nsAString& aName)
|
||||
NS_IMETHODIMP
|
||||
nsAccessible::GetName(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
if (!content) {
|
||||
return NS_ERROR_FAILURE; // Node shut down
|
||||
}
|
||||
|
||||
PRBool canAggregateName = mRoleMapEntry &&
|
||||
mRoleMapEntry->nameRule == eNameOkFromChildren;
|
||||
if (IsDefunct())
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (content->IsNodeOfType(nsINode::eHTML)) {
|
||||
return GetHTMLName(aName, canAggregateName);
|
||||
}
|
||||
GetARIAName(aName);
|
||||
if (!aName.IsEmpty())
|
||||
return NS_OK;
|
||||
|
||||
if (content->IsNodeOfType(nsINode::eXUL)) {
|
||||
return GetXULName(aName, canAggregateName);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
return GetNameInternal(aName);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAccessible::GetDescription(nsAString& aDescription)
|
||||
|
@ -1816,15 +1815,13 @@ nsresult nsAccessible::GetTextFromRelationID(nsIAtom *aIDProperty, nsString &aNa
|
|||
return NS_OK;
|
||||
|
||||
nsAutoString ids;
|
||||
if (!content->GetAttr(kNameSpaceID_None, aIDProperty, ids)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
if (!content->GetAttr(kNameSpaceID_None, aIDProperty, ids))
|
||||
return NS_OK;
|
||||
|
||||
ids.CompressWhitespace(PR_TRUE, PR_TRUE);
|
||||
|
||||
nsCOMPtr<nsIDOMDocument> domDoc = do_QueryInterface(content->GetOwnerDoc());
|
||||
NS_ENSURE_TRUE(domDoc, NS_ERROR_FAILURE);
|
||||
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
// Support idlist as in aria-labelledby="id1 id2 id3"
|
||||
while (!ids.IsEmpty()) {
|
||||
|
@ -1849,13 +1846,13 @@ nsresult nsAccessible::GetTextFromRelationID(nsIAtom *aIDProperty, nsString &aNa
|
|||
return NS_OK;
|
||||
}
|
||||
// We have a label content
|
||||
rv = AppendFlatStringFromSubtree(content, &aName);
|
||||
nsresult rv = AppendFlatStringFromSubtree(content, &aName);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
aName.CompressWhitespace();
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1865,27 +1862,13 @@ nsresult nsAccessible::GetTextFromRelationID(nsIAtom *aIDProperty, nsString &aNa
|
|||
*/
|
||||
nsresult nsAccessible::GetHTMLName(nsAString& aLabel, PRBool aCanAggregateSubtree)
|
||||
{
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
if (!content) {
|
||||
return NS_ERROR_FAILURE; // Node shut down
|
||||
}
|
||||
|
||||
// Check for aria-label property
|
||||
nsAutoString label;
|
||||
if (content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::aria_label, label)) {
|
||||
aLabel = label;
|
||||
nsCOMPtr<nsIContent> content = GetRoleContent(mDOMNode);
|
||||
if (!content)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Check for aria-labelledby relationship property
|
||||
nsresult rv = GetTextFromRelationID(nsAccessibilityAtoms::aria_labelledby, label);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
aLabel = label;
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsIContent *labelContent = GetHTMLLabelContent(content);
|
||||
if (labelContent) {
|
||||
nsAutoString label;
|
||||
AppendFlatStringFromSubtree(labelContent, &label);
|
||||
label.CompressWhitespace();
|
||||
if (!label.IsEmpty()) {
|
||||
|
@ -1924,24 +1907,10 @@ nsresult nsAccessible::GetHTMLName(nsAString& aLabel, PRBool aCanAggregateSubtre
|
|||
*/
|
||||
nsresult nsAccessible::GetXULName(nsAString& aLabel, PRBool aCanAggregateSubtree)
|
||||
{
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
NS_ASSERTION(content, "No nsIContent for DOM node");
|
||||
|
||||
// First check for label override via aria-label property
|
||||
nsAutoString label;
|
||||
if (content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::aria_label, label)) {
|
||||
aLabel = label;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Second check for label override via aria-labelledby relationship
|
||||
nsresult rv = GetTextFromRelationID(nsAccessibilityAtoms::aria_labelledby, label);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
aLabel = label;
|
||||
return rv;
|
||||
}
|
||||
|
||||
// CASE #1 (via label attribute) -- great majority of the cases
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
nsAutoString label;
|
||||
nsCOMPtr<nsIDOMXULLabeledControlElement> labeledEl(do_QueryInterface(mDOMNode));
|
||||
if (labeledEl) {
|
||||
rv = labeledEl->GetLabel(label);
|
||||
|
@ -1965,6 +1934,10 @@ nsresult nsAccessible::GetXULName(nsAString& aLabel, PRBool aCanAggregateSubtree
|
|||
}
|
||||
|
||||
// CASES #2 and #3 ------ label as a child or <label control="id" ... > </label>
|
||||
nsCOMPtr<nsIContent> content = GetRoleContent(mDOMNode);
|
||||
if (!content)
|
||||
return NS_OK;
|
||||
|
||||
if (NS_FAILED(rv) || label.IsEmpty()) {
|
||||
label.Truncate();
|
||||
nsIContent *labelContent =
|
||||
|
@ -3580,6 +3553,53 @@ nsAccessible::AppendTextTo(nsAString& aText, PRUint32 aStartOffset, PRUint32 aLe
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// nsAccessible public methods
|
||||
|
||||
nsresult
|
||||
nsAccessible::GetARIAName(nsAString& aName)
|
||||
{
|
||||
nsCOMPtr<nsIContent> content = GetRoleContent(mDOMNode);
|
||||
if (!content)
|
||||
return NS_OK;
|
||||
|
||||
// First check for label override via aria-label property
|
||||
nsAutoString label;
|
||||
if (content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::aria_label, label)) {
|
||||
aName = label;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Second check for label override via aria-labelledby relationship
|
||||
nsresult rv = GetTextFromRelationID(nsAccessibilityAtoms::aria_labelledby, label);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
aName = label;
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
PRBool canAggregateName = mRoleMapEntry &&
|
||||
mRoleMapEntry->nameRule == eNameOkFromChildren;
|
||||
|
||||
nsCOMPtr<nsIContent> content = GetRoleContent(mDOMNode);
|
||||
if (!content)
|
||||
return NS_OK;
|
||||
|
||||
if (content->IsNodeOfType(nsINode::eHTML))
|
||||
return GetHTMLName(aName, canAggregateName);
|
||||
|
||||
if (content->IsNodeOfType(nsINode::eXUL))
|
||||
return GetXULName(aName, canAggregateName);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// nsAccessible private methods
|
||||
|
||||
already_AddRefed<nsIAccessible>
|
||||
nsAccessible::GetFirstAvailableAccessible(nsIDOMNode *aStartNode, PRBool aRequireLeaf)
|
||||
{
|
||||
|
|
|
@ -91,6 +91,14 @@ private:
|
|||
};
|
||||
|
||||
|
||||
#define NS_ACCESSIBLE_IMPL_CID \
|
||||
{ /* 4E36C7A8-9203-4ef9-B619-271DDF6BB839 */ \
|
||||
0x4e36c7a8, \
|
||||
0x9203, \
|
||||
0x4ef9, \
|
||||
{ 0xb6, 0x19, 0x27, 0x1d, 0xdf, 0x6b, 0xb8, 0x39 } \
|
||||
}
|
||||
|
||||
class nsAccessible : public nsAccessNodeWrap,
|
||||
public nsIAccessible,
|
||||
public nsPIAccessible,
|
||||
|
@ -110,15 +118,32 @@ public:
|
|||
NS_DECL_NSIACCESSIBLEHYPERLINK
|
||||
NS_DECL_NSIACCESSIBLESELECTABLE
|
||||
NS_DECL_NSIACCESSIBLEVALUE
|
||||
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ACCESSIBLE_IMPL_CID)
|
||||
|
||||
// nsIAccessNode
|
||||
NS_IMETHOD Shutdown();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* Returns the accessible name specified by ARIA.
|
||||
*/
|
||||
nsresult GetARIAName(nsAString& aName);
|
||||
|
||||
/**
|
||||
* Returns the accessible name provided by native markup. It doesn't take
|
||||
* into account ARIA stuffs used to specify the name.
|
||||
*/
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
|
||||
/**
|
||||
* Return the state of accessible that doesn't take into account ARIA states.
|
||||
* Use nsIAccessible::finalState() to get all states for accessible. If
|
||||
* second argument is omitted then second bit field of accessible state won't
|
||||
* be calculated.
|
||||
*
|
||||
* XXX: should be renamed into GetStateInternal
|
||||
*/
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
|
||||
|
@ -128,6 +153,11 @@ public:
|
|||
*/
|
||||
virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Helper methods
|
||||
//
|
||||
// XXX: should be moved into utility class
|
||||
|
||||
#ifdef DEBUG_A11Y
|
||||
static PRBool IsTextInterfaceSupportCorrect(nsIAccessible *aAccessible);
|
||||
#endif
|
||||
|
@ -286,6 +316,8 @@ protected:
|
|||
PRInt32 mAccChildCount;
|
||||
};
|
||||
|
||||
NS_DEFINE_STATIC_IID_ACCESSOR(nsAccessible,
|
||||
NS_ACCESSIBLE_IMPL_CID)
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -176,7 +176,8 @@ NS_INTERFACE_MAP_END_INHERITING(nsHyperTextAccessible)
|
|||
NS_IMPL_ADDREF_INHERITED(nsDocAccessible, nsHyperTextAccessible)
|
||||
NS_IMPL_RELEASE_INHERITED(nsDocAccessible, nsHyperTextAccessible)
|
||||
|
||||
NS_IMETHODIMP nsDocAccessible::GetName(nsAString& aName)
|
||||
NS_IMETHODIMP
|
||||
nsDocAccessible::GetName(nsAString& aName)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
aName.Truncate();
|
||||
|
@ -184,7 +185,8 @@ NS_IMETHODIMP nsDocAccessible::GetName(nsAString& aName)
|
|||
rv = mParent->GetName(aName); // Allow owning iframe to override the name
|
||||
}
|
||||
if (aName.IsEmpty()) {
|
||||
rv = nsAccessible::GetName(aName); // Allow name via aria-labelledby or title attribute
|
||||
// Allow name via aria-labelledby or title attribute
|
||||
rv = nsAccessible::GetName(aName);
|
||||
}
|
||||
if (aName.IsEmpty()) {
|
||||
rv = GetTitle(aName); // Try title element
|
||||
|
|
|
@ -58,21 +58,14 @@ nsHTMLAreaAccessible::
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
// nsIAccessible
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLAreaAccessible::GetName(nsAString & aName)
|
||||
nsresult
|
||||
nsHTMLAreaAccessible::GetNameInternal(nsAString & aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
nsresult rv = nsAccessible::GetNameInternal(aName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (IsDefunct())
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (mRoleMapEntry) {
|
||||
nsresult rv = nsAccessible::GetName(aName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!aName.IsEmpty())
|
||||
return NS_OK;
|
||||
}
|
||||
if (!aName.IsEmpty())
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
if (!content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::alt,
|
||||
|
|
|
@ -52,7 +52,6 @@ public:
|
|||
nsIWeakReference* aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetName(nsAString & aName);
|
||||
NS_IMETHOD GetDescription(nsAString& aDescription);
|
||||
|
||||
NS_IMETHOD GetFirstChild(nsIAccessible **_retval);
|
||||
|
@ -62,6 +61,9 @@ public:
|
|||
NS_IMETHOD GetBounds(PRInt32 *x, PRInt32 *y, PRInt32 *width, PRInt32 *height);
|
||||
NS_IMETHOD GetChildAtPoint(PRInt32 aX, PRInt32 aY, nsIAccessible **aAccessible)
|
||||
{ NS_ENSURE_ARG_POINTER(aAccessible); NS_ADDREF(*aAccessible = this); return NS_OK; } // Don't walk into these
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -275,27 +275,15 @@ NS_IMETHODIMP nsHTMLButtonAccessible::GetRole(PRUint32 *_retval)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLButtonAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsHTMLButtonAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
if (!content) {
|
||||
return NS_ERROR_FAILURE; // Node shut down
|
||||
}
|
||||
|
||||
nsAutoString name;
|
||||
// Prefer aria-labelledby attribute for name
|
||||
if (content->HasAttr(kNameSpaceID_None,
|
||||
nsAccessibilityAtoms::aria_label) ||
|
||||
content->HasAttr(kNameSpaceID_None,
|
||||
nsAccessibilityAtoms::aria_labelledby)) {
|
||||
GetHTMLName(name, PR_FALSE);
|
||||
}
|
||||
GetHTMLName(name, PR_FALSE);
|
||||
|
||||
if (name.IsEmpty()) {
|
||||
// no label from HTML or ARIA
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
if (!content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::value,
|
||||
name) &&
|
||||
!content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::alt,
|
||||
|
@ -408,11 +396,17 @@ nsHTMLTextFieldAccessible::GetName(nsAString& aName)
|
|||
{
|
||||
aName.Truncate();
|
||||
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(mDOMNode);
|
||||
if (!content) {
|
||||
if (IsDefunct())
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
nsresult rv = GetHTMLName(aName, PR_FALSE);
|
||||
|
||||
nsresult rv = GetARIAName(aName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!aName.IsEmpty())
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(mDOMNode);
|
||||
rv = nsAccessible::GetHTMLName(aName, PR_FALSE);
|
||||
if (NS_FAILED(rv) || !aName.IsEmpty() || !content->GetBindingParent()) {
|
||||
return rv;
|
||||
}
|
||||
|
@ -614,20 +608,14 @@ nsIContent* nsHTMLGroupboxAccessible::GetLegend()
|
|||
return nsnull;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLGroupboxAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsHTMLGroupboxAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
nsresult rv = nsAccessible::GetNameInternal(aName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!mDOMNode) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
if (mRoleMapEntry) {
|
||||
nsAccessible::GetName(aName);
|
||||
if (!aName.IsEmpty()) {
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
if (!aName.IsEmpty())
|
||||
return NS_OK;
|
||||
|
||||
nsIContent *legendContent = GetLegend();
|
||||
if (legendContent) {
|
||||
|
|
|
@ -73,12 +73,16 @@ public:
|
|||
enum { eAction_Click = 0 };
|
||||
|
||||
nsHTMLButtonAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
NS_IMETHOD GetNumActions(PRUint8 *_retval);
|
||||
NS_IMETHOD GetActionName(PRUint8 aIndex, nsAString& aName);
|
||||
NS_IMETHOD DoAction(PRUint8 index);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
class nsHTML4ButtonAccessible : public nsHyperTextAccessibleWrap
|
||||
|
@ -88,12 +92,19 @@ public:
|
|||
enum { eAction_Click = 0 };
|
||||
|
||||
nsHTML4ButtonAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetName(nsAString& aName) { aName.Truncate(); return GetHTMLName(aName, PR_TRUE); }
|
||||
NS_IMETHOD GetNumActions(PRUint8 *_retval);
|
||||
NS_IMETHOD GetActionName(PRUint8 aIndex, nsAString& aName);
|
||||
NS_IMETHOD DoAction(PRUint8 index);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName)
|
||||
{
|
||||
return GetHTMLName(aName, PR_TRUE);
|
||||
}
|
||||
};
|
||||
|
||||
class nsHTMLTextFieldAccessible : public nsHyperTextAccessibleWrap
|
||||
|
@ -106,6 +117,7 @@ public:
|
|||
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetValue(nsAString& _retval);
|
||||
|
@ -122,9 +134,14 @@ class nsHTMLGroupboxAccessible : public nsHyperTextAccessibleWrap
|
|||
{
|
||||
public:
|
||||
nsHTMLGroupboxAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetAccessibleRelated(PRUint32 aRelationType, nsIAccessible **aRelated);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
|
||||
protected:
|
||||
nsIContent* GetLegend();
|
||||
};
|
||||
|
|
|
@ -126,16 +126,15 @@ nsHTMLImageAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/* wstring getName (); */
|
||||
NS_IMETHODIMP nsHTMLImageAccessible::GetName(nsAString& aName)
|
||||
NS_IMETHODIMP
|
||||
nsHTMLImageAccessible::GetName(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
if (IsDefunct())
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
NS_ASSERTION(content, "Image node always supports nsIContent");
|
||||
|
||||
// No alt attribute means AT can repair if there is no accessible name
|
||||
// alt="" with no title or aria-labelledby means image is presentational and
|
||||
|
@ -147,8 +146,16 @@ NS_IMETHODIMP nsHTMLImageAccessible::GetName(nsAString& aName)
|
|||
content->HasAttr(kNameSpaceID_None, nsAccessibilityAtoms::aria_labelledby)) {
|
||||
// Use HTML label or DHTML accessibility's label or labelledby attribute for name
|
||||
// GetHTMLName will also try title attribute as a last resort
|
||||
GetHTMLName(aName, PR_FALSE);
|
||||
nsresult rv = GetARIAName(aName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!aName.IsEmpty())
|
||||
return NS_OK;
|
||||
|
||||
rv = GetHTMLName(aName, PR_FALSE);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
if (aName.IsEmpty()) { // No name from alt or aria-labelledby
|
||||
content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::title, aName);
|
||||
if (!hasAltAttrib && aName.IsEmpty()) {
|
||||
|
|
|
@ -58,9 +58,9 @@ public:
|
|||
nsHTMLImageAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetNumActions(PRUint8 *aNumActions);
|
||||
NS_IMETHOD GetActionName(PRUint8 aIndex, nsAString& aName);
|
||||
NS_IMETHOD DoAction(PRUint8 index);
|
||||
|
|
|
@ -57,14 +57,9 @@ NS_IMPL_ISUPPORTS_INHERITED1(nsHTMLLinkAccessible, nsHyperTextAccessibleWrap,
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
// nsIAccessible
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLLinkAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsHTMLLinkAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
if (IsDefunct())
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
nsresult rv = AppendFlatStringFromSubtree(content, &aName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
|
|
@ -50,7 +50,6 @@ public:
|
|||
NS_DECL_ISUPPORTS_INHERITED
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetValue(nsAString& aValue);
|
||||
|
@ -62,6 +61,9 @@ public:
|
|||
// nsIAccessibleHyperLink
|
||||
NS_IMETHOD GetURI(PRInt32 aIndex, nsIURI **aURI);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
|
||||
protected:
|
||||
enum { eAction_Jump = 0 };
|
||||
|
||||
|
|
|
@ -510,45 +510,33 @@ NS_IMETHODIMP nsHTMLSelectOptionAccessible::GetRole(PRUint32 *aRole)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get our Name from our Content's subtree
|
||||
*/
|
||||
NS_IMETHODIMP
|
||||
nsHTMLSelectOptionAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsHTMLSelectOptionAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
// CASE #1 -- great majority of the cases
|
||||
// find the label attribute - this is what the W3C says we should use
|
||||
nsCOMPtr<nsIDOMElement> domElement(do_QueryInterface(mDOMNode));
|
||||
if (!domElement)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsresult rv = domElement->GetAttribute(NS_LITERAL_STRING("label"), aName) ;
|
||||
if (NS_SUCCEEDED(rv) && !aName.IsEmpty()) {
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::label, aName);
|
||||
if (!aName.IsEmpty())
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// CASE #2 -- no label parameter, get the first child,
|
||||
// use it if it is a text node
|
||||
nsCOMPtr<nsIDOMNode> child;
|
||||
mDOMNode->GetFirstChild(getter_AddRefs(child));
|
||||
nsCOMPtr<nsIContent> text = content->GetChildAt(0);
|
||||
if (!text)
|
||||
return NS_OK;
|
||||
|
||||
if (child) {
|
||||
nsCOMPtr<nsIContent> text = do_QueryInterface(child);
|
||||
if (text && text->IsNodeOfType(nsINode::eTEXT)) {
|
||||
nsAutoString txtValue;
|
||||
rv = AppendFlatStringFromContentNode(text, &txtValue);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (text->IsNodeOfType(nsINode::eTEXT)) {
|
||||
nsAutoString txtValue;
|
||||
nsresult rv = AppendFlatStringFromContentNode(text, &txtValue);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// Temp var (txtValue) needed until CompressWhitespace built for nsAString
|
||||
txtValue.CompressWhitespace();
|
||||
aName.Assign(txtValue);
|
||||
return NS_OK;
|
||||
}
|
||||
// Temp var (txtValue) needed until CompressWhitespace built for nsAString
|
||||
txtValue.CompressWhitespace();
|
||||
aName.Assign(txtValue);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
aName.Truncate();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -1383,14 +1371,11 @@ NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetParent(nsIAccessible **aParent)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name from GetActionName()
|
||||
*/
|
||||
NS_IMETHODIMP
|
||||
nsHTMLComboboxButtonAccessible::GetName(nsAString& aName)
|
||||
{
|
||||
// Native anonymous content, no way to use ARIA here.
|
||||
aName.Truncate();
|
||||
|
||||
return GetActionName(eAction_Click, aName);
|
||||
}
|
||||
|
||||
|
|
|
@ -84,7 +84,11 @@ public:
|
|||
nsHTMLSelectableAccessible(nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||
virtual ~nsHTMLSelectableAccessible() {}
|
||||
|
||||
NS_IMETHOD GetName(nsAString &aName) { return GetHTMLName(aName, PR_FALSE); }
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString &aName)
|
||||
{
|
||||
return GetHTMLName(aName, PR_FALSE);
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -156,13 +160,15 @@ public:
|
|||
nsHTMLSelectOptionAccessible(nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||
virtual ~nsHTMLSelectOptionAccessible() {}
|
||||
|
||||
/* ----- nsIAccessible ----- */
|
||||
// nsIAccessible
|
||||
NS_IMETHOD DoAction(PRUint8 index);
|
||||
NS_IMETHOD GetActionName(PRUint8 aIndex, nsAString& aName);
|
||||
NS_IMETHOD GetNumActions(PRUint8 *_retval);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
|
||||
|
||||
nsIFrame* GetBoundsFrame();
|
||||
|
@ -268,18 +274,22 @@ public:
|
|||
nsHTMLComboboxButtonAccessible(nsIAccessible* aParent, nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||
virtual ~nsHTMLComboboxButtonAccessible() {}
|
||||
|
||||
/* ----- nsIAccessible ----- */
|
||||
// nsIAccessible
|
||||
NS_IMETHOD DoAction(PRUint8 index);
|
||||
NS_IMETHOD GetNumActions(PRUint8 *_retval);
|
||||
NS_IMETHOD GetActionName(PRUint8 aIndex, nsAString& aName);
|
||||
NS_IMETHOD GetParent(nsIAccessible **_retval);
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
|
||||
// nsIAccessNode
|
||||
NS_IMETHOD GetUniqueID(void **aUniqueID);
|
||||
|
||||
protected:
|
||||
virtual void GetBoundsRect(nsRect& aBounds, nsIFrame** aBoundingFrame);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -204,11 +204,11 @@ nsHTMLTableAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsHTMLTableAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsHTMLTableAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate(); // Default name is blank
|
||||
nsAccessible::GetNameInternal(aName);
|
||||
|
||||
nsAccessible::GetName(aName);
|
||||
if (aName.IsEmpty()) {
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
if (content) {
|
||||
|
|
|
@ -67,17 +67,23 @@ class nsHTMLTableAccessible : public nsAccessibleWrap,
|
|||
public nsIAccessibleTable
|
||||
{
|
||||
public:
|
||||
nsHTMLTableAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_NSIACCESSIBLETABLE
|
||||
|
||||
nsHTMLTableAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *aResult);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetName(nsAString& aResult);
|
||||
virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
|
||||
NS_IMETHOD GetDescription(nsAString& aDescription);
|
||||
NS_IMETHOD GetAccessibleRelated(PRUint32 aRelationType, nsIAccessible **aRelated);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
|
||||
|
||||
// nsHTMLTableAccessible
|
||||
|
||||
/**
|
||||
* Returns true if the column index is in the valid column range.
|
||||
*
|
||||
|
|
|
@ -53,8 +53,10 @@ nsTextAccessibleWrap(aDomNode, aShell)
|
|||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsHTMLTextAccessible::GetName(nsAString& aName)
|
||||
NS_IMETHODIMP
|
||||
nsHTMLTextAccessible::GetName(nsAString& aName)
|
||||
{
|
||||
// Text node, ARIA can't be used.
|
||||
aName.Truncate();
|
||||
return AppendTextTo(aName, 0, PR_UINT32_MAX);
|
||||
}
|
||||
|
@ -143,7 +145,8 @@ nsHTMLBRAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsHTMLBRAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsHTMLBRAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName = static_cast<PRUnichar>('\n'); // Newline char
|
||||
return NS_OK;
|
||||
|
@ -158,7 +161,8 @@ nsTextAccessible(aDomNode, aShell)
|
|||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsHTMLLabelAccessible::GetName(nsAString& aReturn)
|
||||
nsresult
|
||||
nsHTMLLabelAccessible::GetNameInternal(nsAString& aReturn)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
|
@ -312,6 +316,7 @@ nsHTMLListBulletAccessible::Shutdown()
|
|||
NS_IMETHODIMP
|
||||
nsHTMLListBulletAccessible::GetName(nsAString &aName)
|
||||
{
|
||||
// Native anonymous content, ARIA can't be used.
|
||||
aName = mBulletText;
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -52,9 +52,11 @@ public:
|
|||
nsHTMLTextAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
|
||||
};
|
||||
|
||||
|
@ -69,22 +71,31 @@ class nsHTMLBRAccessible : public nsLeafAccessible
|
|||
{
|
||||
public:
|
||||
nsHTMLBRAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
class nsHTMLLabelAccessible : public nsTextAccessible
|
||||
{
|
||||
public:
|
||||
nsHTMLLabelAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetFirstChild(nsIAccessible **aFirstChild);
|
||||
NS_IMETHOD GetLastChild(nsIAccessible **aLastChild);
|
||||
NS_IMETHOD GetChildCount(PRInt32 *aAccChildCount);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
class nsHTMLListBulletAccessible : public nsLeafAccessible
|
||||
|
@ -100,8 +111,8 @@ public:
|
|||
NS_IMETHOD Shutdown();
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
|
||||
// Don't cache via unique ID -- bullet accessible shares the same dom node as
|
||||
|
@ -138,13 +149,18 @@ class nsHTMLLIAccessible : public nsLinkableAccessible
|
|||
public:
|
||||
nsHTMLLIAccessible(nsIDOMNode *aDOMNode, nsIWeakReference* aShell,
|
||||
const nsAString& aBulletText);
|
||||
NS_IMETHOD Shutdown();
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole) { *aRole = nsIAccessibleRole::ROLE_LISTITEM; return NS_OK; }
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetName(nsAString& aName) { aName.SetIsVoid(PR_TRUE); return mRoleMapEntry ? nsAccessible::GetName(aName) : NS_OK; }
|
||||
NS_IMETHOD GetBounds(PRInt32 *x, PRInt32 *y, PRInt32 *width, PRInt32 *height);
|
||||
void CacheChildren(); // Include bullet accessible
|
||||
|
||||
// nsPIAccessNode
|
||||
NS_IMETHOD Shutdown();
|
||||
|
||||
protected:
|
||||
void CacheChildren(); // Include bullet accessible
|
||||
|
||||
nsRefPtr<nsHTMLListBulletAccessible> mBulletAccessible;
|
||||
};
|
||||
|
||||
|
|
|
@ -49,7 +49,8 @@ nsXULMenuitemAccessible(aDOMNode, aShell)
|
|||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsXULMenuitemAccessibleWrap::GetName(nsAString& aName)
|
||||
NS_IMETHODIMP
|
||||
nsXULMenuitemAccessibleWrap::GetName(nsAString& aName)
|
||||
{
|
||||
// XXX This should be done in get_accName() so that nsIAccessible::GetName()]
|
||||
// provides the same results on all platforms
|
||||
|
|
|
@ -45,6 +45,8 @@ class nsXULMenuitemAccessibleWrap : public nsXULMenuitemAccessible
|
|||
public:
|
||||
nsXULMenuitemAccessibleWrap(nsIDOMNode *aDOMNode, nsIWeakReference *aShell);
|
||||
virtual ~nsXULMenuitemAccessibleWrap() {}
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
};
|
||||
|
||||
|
|
|
@ -113,7 +113,8 @@ NS_IMETHODIMP nsXULTreeitemAccessibleWrap::GetBounds(PRInt32 *x, PRInt32 *y, PRI
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsXULTreeitemAccessibleWrap::GetName(nsAString& aName)
|
||||
NS_IMETHODIMP
|
||||
nsXULTreeitemAccessibleWrap::GetName(nsAString& aName)
|
||||
{
|
||||
NS_ENSURE_STATE(mTree);
|
||||
nsCOMPtr<nsITreeColumns> cols;
|
||||
|
|
|
@ -221,28 +221,9 @@ nsXFormsAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXFormsAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXFormsAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
if (!content) {
|
||||
return NS_ERROR_FAILURE; // Node shut down
|
||||
}
|
||||
|
||||
// Check for ARIA label property
|
||||
nsAutoString name;
|
||||
if (content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::aria_label, name)) {
|
||||
aName = name;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Check for ARIA labelledby relationship property
|
||||
nsresult rv = GetTextFromRelationID(nsAccessibilityAtoms::aria_labelledby, name);
|
||||
if (NS_SUCCEEDED(rv) && !name.IsEmpty()) {
|
||||
aName = name;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// search the xforms:label element
|
||||
return GetBoundChildElementValue(NS_LITERAL_STRING("label"), aName);
|
||||
}
|
||||
|
|
|
@ -79,12 +79,12 @@ public:
|
|||
// that it is bound to.
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
|
||||
// Returns value of child xforms 'label' element.
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
|
||||
// Returns value of child xforms 'hint' element.
|
||||
NS_IMETHOD GetDescription(nsAString& aDescription);
|
||||
|
||||
// Returns value of child xforms 'label' element.
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
|
||||
// Appends ARIA 'datatype' property based on datatype of instance node that
|
||||
// element is bound to.
|
||||
virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
|
||||
|
|
|
@ -55,14 +55,11 @@ nsXFormsLabelAccessible::GetRole(PRUint32 *aRole)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXFormsLabelAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXFormsLabelAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
// XXX Correct name calculation for this, see bug 453594.
|
||||
nsAutoString name;
|
||||
nsresult rv = GetTextFromRelationID(nsAccessibilityAtoms::aria_labelledby, name);
|
||||
aName = name;
|
||||
return rv;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -50,9 +50,12 @@ class nsXFormsLabelAccessible : public nsXFormsAccessible
|
|||
public:
|
||||
nsXFormsLabelAccessible(nsIDOMNode *aNode, nsIWeakReference *aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetDescription(nsAString& aDescription);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -186,10 +186,11 @@ nsXFormsComboboxPopupWidgetAccessible::GetValue(nsAString& aValue)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXFormsComboboxPopupWidgetAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXFormsComboboxPopupWidgetAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
// Override nsXFormsAccessible::GetName() to prevent name calculation by
|
||||
// XForms rules.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -85,12 +85,15 @@ public:
|
|||
nsXFormsComboboxPopupWidgetAccessible(nsIDOMNode *aNode,
|
||||
nsIWeakReference *aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetValue(nsAString& aValue);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetDescription(nsAString& aDescription);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
protected:
|
||||
void CacheChildren();
|
||||
};
|
||||
|
||||
|
|
|
@ -92,11 +92,9 @@ nsXULColorPickerTileAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULColorPickerTileAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULColorPickerTileAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
return GetXULName(aName);
|
||||
}
|
||||
|
||||
|
|
|
@ -46,10 +46,14 @@ class nsXULColorPickerTileAccessible : public nsFormControlAccessible
|
|||
{
|
||||
public:
|
||||
nsXULColorPickerTileAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
NS_IMETHOD GetValue(nsAString& _retval);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
class nsXULColorPickerAccessible : public nsXULColorPickerTileAccessible
|
||||
|
|
|
@ -417,11 +417,9 @@ NS_IMETHODIMP nsXULGroupboxAccessible::GetRole(PRUint32 *aRole)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULGroupboxAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULGroupboxAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
nsCOMPtr<nsIAccessible> label;
|
||||
GetAccessibleRelated(nsIAccessibleRelation::RELATION_LABELLED_BY,
|
||||
getter_AddRefs(label));
|
||||
|
|
|
@ -91,9 +91,13 @@ class nsXULGroupboxAccessible : public nsAccessibleWrap
|
|||
{
|
||||
public:
|
||||
nsXULGroupboxAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
NS_IMETHOD GetAccessibleRelated(PRUint32 aRelationType, nsIAccessible **aRelated);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
class nsXULProgressMeterAccessible : public nsFormControlAccessible
|
||||
|
|
|
@ -389,17 +389,11 @@ nsXULMenuitemAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULMenuitemAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULMenuitemAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
nsCOMPtr<nsIDOMElement> element(do_QueryInterface(mDOMNode));
|
||||
if (!element) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
element->GetAttribute(NS_LITERAL_STRING("label"), aName);
|
||||
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::label, aName);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -581,11 +575,9 @@ nsXULMenuSeparatorAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULMenuSeparatorAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULMenuSeparatorAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -696,14 +688,9 @@ void nsXULMenupopupAccessible::GenerateMenu(nsIDOMNode *aNode)
|
|||
}
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULMenupopupAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULMenupopupAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
if (!mDOMNode)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
while (content && aName.IsEmpty()) {
|
||||
content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::label, aName);
|
||||
|
@ -757,11 +744,10 @@ nsXULMenubarAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState)
|
|||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULMenubarAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULMenubarAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.AssignLiteral("Application");
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -76,8 +76,8 @@ public:
|
|||
enum { eAction_Click = 0 };
|
||||
|
||||
nsXULMenuitemAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
NS_IMETHOD Init();
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetDescription(nsAString& aDescription);
|
||||
NS_IMETHOD GetKeyboardShortcut(nsAString& _retval);
|
||||
NS_IMETHOD GetDefaultKeyBinding(nsAString& aKeyBinding);
|
||||
|
@ -86,7 +86,14 @@ public:
|
|||
NS_IMETHOD DoAction(PRUint8 index);
|
||||
NS_IMETHOD GetActionName(PRUint8 aIndex, nsAString& aName);
|
||||
NS_IMETHOD GetNumActions(PRUint8 *_retval);
|
||||
|
||||
// nsPIAccessNode
|
||||
NS_IMETHOD Init();
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
|
||||
|
||||
NS_IMETHOD GetAllowsAnonChildAccessibles(PRBool *aAllowsAnonChildren);
|
||||
};
|
||||
|
||||
|
@ -94,21 +101,31 @@ class nsXULMenuSeparatorAccessible : public nsXULMenuitemAccessible
|
|||
{
|
||||
public:
|
||||
nsXULMenuSeparatorAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD DoAction(PRUint8 index);
|
||||
NS_IMETHOD GetActionName(PRUint8 aIndex, nsAString& aName);
|
||||
NS_IMETHOD GetNumActions(PRUint8 *_retval);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
class nsXULMenupopupAccessible : public nsXULSelectableAccessible
|
||||
{
|
||||
public:
|
||||
nsXULMenupopupAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
|
||||
// nsXULMenupopupAccessible
|
||||
static already_AddRefed<nsIDOMNode> FindInNodeList(nsIDOMNodeList *aNodeList,
|
||||
nsIAtom *aAtom, PRUint32 aNameSpaceID);
|
||||
static void GenerateMenu(nsIDOMNode *aNode);
|
||||
|
@ -118,9 +135,13 @@ class nsXULMenubarAccessible : public nsAccessibleWrap
|
|||
{
|
||||
public:
|
||||
nsXULMenubarAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -107,11 +107,9 @@ nsXULColumnItemAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULColumnItemAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULColumnItemAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
return GetXULName(aName);
|
||||
}
|
||||
|
||||
|
@ -859,14 +857,9 @@ nsXULListitemAccessible::GetListAccessible()
|
|||
* If there is a Listcell as a child ( not anonymous ) use it, otherwise
|
||||
* default to getting the name from GetXULName
|
||||
*/
|
||||
NS_IMETHODIMP
|
||||
nsXULListitemAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULListitemAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
if (!mDOMNode)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIDOMNode> child;
|
||||
if (NS_SUCCEEDED(mDOMNode->GetFirstChild(getter_AddRefs(child)))) {
|
||||
nsCOMPtr<nsIDOMElement> childElement (do_QueryInterface(child));
|
||||
|
|
|
@ -71,13 +71,15 @@ public:
|
|||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
|
||||
NS_IMETHOD GetNumActions(PRUint8 *aNumActions);
|
||||
NS_IMETHOD GetActionName(PRUint8 aIndex, nsAString& aName);
|
||||
NS_IMETHOD DoAction(PRUint8 aIndex);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
|
||||
enum { eAction_Click = 0 };
|
||||
};
|
||||
|
||||
|
@ -135,8 +137,7 @@ public:
|
|||
nsXULListitemAccessible(nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||
virtual ~nsXULListitemAccessible() {}
|
||||
|
||||
/* ----- nsIAccessible ----- */
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetActionName(PRUint8 index, nsAString& aName);
|
||||
|
@ -144,6 +145,8 @@ public:
|
|||
NS_IMETHOD GetDescription(nsAString& aDesc) { return nsAccessibleWrap::GetDescription(aDesc); }
|
||||
NS_IMETHOD GetAllowsAnonChildAccessibles(PRBool *aAllowsAnonChildren);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
|
||||
|
||||
protected:
|
||||
|
|
|
@ -296,12 +296,10 @@ NS_IMETHODIMP nsXULTabsAccessible::GetValue(nsAString& _retval)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
/** no name*/
|
||||
NS_IMETHODIMP
|
||||
nsXULTabsAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULTabsAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
// no name
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -85,10 +85,14 @@ class nsXULTabsAccessible : public nsXULSelectableAccessible
|
|||
{
|
||||
public:
|
||||
nsXULTabsAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetNumActions(PRUint8 *_retval);
|
||||
NS_IMETHOD GetValue(nsAString& _retval);
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -55,19 +55,15 @@ nsHyperTextAccessibleWrap(aDomNode, aShell)
|
|||
{
|
||||
}
|
||||
|
||||
/* wstring getName (); */
|
||||
NS_IMETHODIMP
|
||||
nsXULTextAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULTextAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
if (!content) {
|
||||
return NS_ERROR_FAILURE; // Node shut down
|
||||
}
|
||||
|
||||
// if the value attr doesn't exist, the screen reader must get the accessible text
|
||||
// from the accessible text interface or from the children
|
||||
return content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::value, aName);
|
||||
content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::value, aName);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -120,11 +116,9 @@ nsLeafAccessible(aDomNode, aShell)
|
|||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULTooltipAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULTooltipAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
return GetXULName(aName, PR_TRUE);
|
||||
}
|
||||
|
||||
|
@ -174,14 +168,9 @@ nsXULLinkAccessible::GetValue(nsAString& aValue)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULLinkAccessible::GetName(nsAString& aName)
|
||||
nsresult
|
||||
nsXULLinkAccessible::GetNameInternal(nsAString& aName)
|
||||
{
|
||||
aName.Truncate();
|
||||
|
||||
if (IsDefunct())
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
|
||||
content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::value, aName);
|
||||
if (!aName.IsEmpty())
|
||||
|
|
|
@ -51,11 +51,15 @@ class nsXULTextAccessible : public nsHyperTextAccessibleWrap
|
|||
|
||||
public:
|
||||
nsXULTextAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole) { *aRole = nsIAccessibleRole::ROLE_LABEL; return NS_OK; }
|
||||
NS_IMETHOD GetAccessibleRelated(PRUint32 aRelationType,
|
||||
nsIAccessible **aRelated);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
class nsXULTooltipAccessible : public nsLeafAccessible
|
||||
|
@ -63,9 +67,13 @@ class nsXULTooltipAccessible : public nsLeafAccessible
|
|||
|
||||
public:
|
||||
nsXULTooltipAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
};
|
||||
|
||||
class nsXULLinkAccessible : public nsHyperTextAccessibleWrap
|
||||
|
@ -77,7 +85,6 @@ public:
|
|||
NS_DECL_ISUPPORTS_INHERITED
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetRole(PRUint32 *aRole);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetValue(nsAString& aValue);
|
||||
|
@ -89,6 +96,9 @@ public:
|
|||
// nsIAccessibleHyperLink
|
||||
NS_IMETHOD GetURI(PRInt32 aIndex, nsIURI **aURI);
|
||||
|
||||
// nsAccessible
|
||||
virtual nsresult GetNameInternal(nsAString& aName);
|
||||
|
||||
protected:
|
||||
enum { eAction_Jump = 0 };
|
||||
|
||||
|
|
|
@ -795,6 +795,7 @@ NS_IMETHODIMP nsXULTreeitemAccessible::Shutdown()
|
|||
NS_IMETHODIMP
|
||||
nsXULTreeitemAccessible::GetName(nsAString& aName)
|
||||
{
|
||||
// XXX: we should take into account ARIA usage for content tree.
|
||||
aName.Truncate();
|
||||
|
||||
if (IsDefunct())
|
||||
|
|
|
@ -111,7 +111,7 @@ public:
|
|||
NS_IMETHOD Shutdown();
|
||||
|
||||
// nsIAccessible
|
||||
NS_IMETHOD GetName(nsAString& _retval);
|
||||
NS_IMETHOD GetName(nsAString& aName);
|
||||
NS_IMETHOD GetRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
|
||||
NS_IMETHOD GetNumActions(PRUint8 *_retval);
|
||||
|
|
|
@ -5,6 +5,10 @@ function testName(aID, aName)
|
|||
ok(false, "No accessible for " + aID + "!");
|
||||
}
|
||||
|
||||
is(acc.name, aName, "Wrong name of the accessible for " + aID);
|
||||
try {
|
||||
is(acc.name, aName, "Wrong name of the accessible for " + aID);
|
||||
} catch (e) {
|
||||
ok(false, "Can't get name of the accessible for " + aID);
|
||||
}
|
||||
return acc;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче