diff --git a/mozilla/accessible/src/base/nsAccessibilityAtomList.h b/mozilla/accessible/src/base/nsAccessibilityAtomList.h index b482c285596..d7cafc80010 100755 --- a/mozilla/accessible/src/base/nsAccessibilityAtomList.h +++ b/mozilla/accessible/src/base/nsAccessibilityAtomList.h @@ -103,6 +103,7 @@ ACCESSIBILITY_ATOM(input, "input") ACCESSIBILITY_ATOM(label, "label") ACCESSIBILITY_ATOM(li, "li") ACCESSIBILITY_ATOM(link, "link") +ACCESSIBILITY_ATOM(map, "map") ACCESSIBILITY_ATOM(math, "math") ACCESSIBILITY_ATOM(menu, "menu") // XUL ACCESSIBILITY_ATOM(object, "object") diff --git a/mozilla/accessible/src/base/nsAccessibilityService.cpp b/mozilla/accessible/src/base/nsAccessibilityService.cpp index 4515a8a6482..ee93eec048b 100644 --- a/mozilla/accessible/src/base/nsAccessibilityService.cpp +++ b/mozilla/accessible/src/base/nsAccessibilityService.cpp @@ -1698,6 +1698,15 @@ NS_IMETHODIMP nsAccessibilityService::GetAccessible(nsIDOMNode *aNode, } #endif + nsCOMPtr content(do_QueryInterface(aNode)); + if (content && content->Tag() == nsAccessibilityAtoms::map) { + // Don't walk into maps, they take up no space. + // The nsHTMLAreaAccessible's they contain are attached as + // children of the appropriate nsHTMLImageAccessible. + *aIsHidden = PR_TRUE; + return NS_ERROR_FAILURE; + } + // Check to see if we already have an accessible for this // node in the cache nsCOMPtr accessNode; @@ -1717,7 +1726,6 @@ NS_IMETHODIMP nsAccessibilityService::GetAccessible(nsIDOMNode *aNode, // No cache entry, so we must create the accessible // Check to see if hidden first - nsCOMPtr content(do_QueryInterface(aNode)); nsCOMPtr nodeIsDoc; if (!content) { nodeIsDoc = do_QueryInterface(aNode); diff --git a/mozilla/accessible/src/html/nsHTMLAreaAccessible.cpp b/mozilla/accessible/src/html/nsHTMLAreaAccessible.cpp index e1823c91aa8..b3f40fccfeb 100644 --- a/mozilla/accessible/src/html/nsHTMLAreaAccessible.cpp +++ b/mozilla/accessible/src/html/nsHTMLAreaAccessible.cpp @@ -51,8 +51,6 @@ nsHTMLAreaAccessible::nsHTMLAreaAccessible(nsIDOMNode *aDomNode, nsIAccessible *aParent, nsIWeakReference* aShell): nsLinkableAccessible(aDomNode, aShell) { - Init(); // Make sure we're in cache - mParent = aParent; } /* wstring getName (); */ diff --git a/mozilla/accessible/src/html/nsHTMLImageAccessible.cpp b/mozilla/accessible/src/html/nsHTMLImageAccessible.cpp index 0e7ffb3adbf..f21cbd02d90 100644 --- a/mozilla/accessible/src/html/nsHTMLImageAccessible.cpp +++ b/mozilla/accessible/src/html/nsHTMLImageAccessible.cpp @@ -156,6 +156,10 @@ already_AddRefed nsHTMLImageAccessible::CreateAreaAccessible(PRIn accService->GetCachedAccessible(domNode, mWeakShell, &acc); if (!acc) { accService->CreateHTMLAreaAccessible(mWeakShell, domNode, this, &acc); + nsCOMPtr accessNode(do_QueryInterface(acc)); + if (accessNode) { + accessNode->Init(); + } } return acc; } @@ -202,6 +206,7 @@ void nsHTMLImageAccessible::CacheChildren(PRBool aWalkAnonContent) privatePrevAccessible = do_QueryInterface(areaAccessible); NS_ASSERTION(privatePrevAccessible, "nsIAccessible impl's should always support nsPIAccessible as well"); + privatePrevAccessible->SetParent(this); } } diff --git a/mozilla/accessible/src/xul/nsXULSelectAccessible.h b/mozilla/accessible/src/xul/nsXULSelectAccessible.h index 2d8544ab07f..09a8eb6beba 100644 --- a/mozilla/accessible/src/xul/nsXULSelectAccessible.h +++ b/mozilla/accessible/src/xul/nsXULSelectAccessible.h @@ -154,6 +154,8 @@ public: NS_IMETHOD GetRole(PRUint32 *_retval); NS_IMETHOD GetState(PRUint32 *_retval); NS_IMETHOD GetActionName(PRUint8 index, nsAString& _retval); + // Don't use XUL menu's special child aggregator, this can be a rich list item + NS_IMETHOD GetChildCount(PRInt32 *aAccChildCount) { return nsAccessibleWrap::GetChildCount(aAccChildCount); } private: PRBool mIsCheckbox; diff --git a/mozilla/accessible/src/xul/nsXULTextAccessible.cpp b/mozilla/accessible/src/xul/nsXULTextAccessible.cpp index 7ae7d8fb0ae..f168d3233e2 100644 --- a/mozilla/accessible/src/xul/nsXULTextAccessible.cpp +++ b/mozilla/accessible/src/xul/nsXULTextAccessible.cpp @@ -123,6 +123,21 @@ NS_IMETHODIMP nsXULLinkAccessible::GetValue(nsAString& aValue) return NS_ERROR_NOT_IMPLEMENTED; } +NS_IMETHODIMP nsXULLinkAccessible::GetName(nsAString& aName) +{ + nsCOMPtr content(do_QueryInterface(mDOMNode)); + if (!content) { + return NS_ERROR_FAILURE; // Node shut down + } + if (!content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::value, + aName)) { + // if the value doesn't exist, flatten the inner content as the name (for descriptions) + return AppendFlatStringFromSubtree(content, &aName); + } + // otherwise, use the value attribute as the name (for labels) + return NS_OK; +} + NS_IMETHODIMP nsXULLinkAccessible::GetRole(PRUint32 *aRole) { if (mIsLink) { diff --git a/mozilla/accessible/src/xul/nsXULTextAccessible.h b/mozilla/accessible/src/xul/nsXULTextAccessible.h index e4945215a0f..48d87f81cfb 100644 --- a/mozilla/accessible/src/xul/nsXULTextAccessible.h +++ b/mozilla/accessible/src/xul/nsXULTextAccessible.h @@ -71,6 +71,7 @@ class nsXULLinkAccessible : public nsLinkableAccessible public: nsXULLinkAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell); + NS_IMETHOD GetName(nsAString& _retval); NS_IMETHOD GetRole(PRUint32 *aRole); NS_IMETHOD GetValue(nsAString& _retval);