diff --git a/mozilla/accessible/src/base/nsDocAccessible.cpp b/mozilla/accessible/src/base/nsDocAccessible.cpp index eee97f10cb4..2c80f9861ea 100644 --- a/mozilla/accessible/src/base/nsDocAccessible.cpp +++ b/mozilla/accessible/src/base/nsDocAccessible.cpp @@ -1142,7 +1142,7 @@ nsDocAccessible::ARIAAttributeChanged(nsIContent* aContent, nsIAtom* aAttribute) // The activedescendant universal property redirects accessible focus events // to the element with the id that activedescendant points to nsCOMPtr currentFocus = GetCurrentFocus(); - if (currentFocus == targetNode) { + if (SameCOMIdentity(GetRoleContent(currentFocus), targetNode)) { nsRefPtr rootAcc = GetRootAccessible(); if (rootAcc) rootAcc->FireAccessibleFocusEvent(nsnull, currentFocus, nsnull, PR_TRUE); diff --git a/mozilla/accessible/src/base/nsRootAccessible.cpp b/mozilla/accessible/src/base/nsRootAccessible.cpp index 97d8d6df920..ccde5254599 100644 --- a/mozilla/accessible/src/base/nsRootAccessible.cpp +++ b/mozilla/accessible/src/base/nsRootAccessible.cpp @@ -463,7 +463,9 @@ PRBool nsRootAccessible::FireAccessibleFocusEvent(nsIAccessible *aAccessible, domDoc->GetElementById(id, getter_AddRefs(relatedEl)); finalFocusNode = do_QueryInterface(relatedEl); if (!finalFocusNode) { - return PR_FALSE; + // If aria-activedescendant is set to nonextistant ID, then treat as focus + // on the activedescendant container (which has real DOM focus) + finalFocusNode = aNode; } finalFocusAccessible = nsnull; }