Bug 1480058 part 2: Add nsAccUtils::IsARIAMultiSelectable and make nsAccUtils::ISARIASelected const. r?surkov
We need to be able to call these methods from const methods, so they must take a const Accessible*.
MozReview-Commit-ID: CDsWZG1ik31
--- a/accessible/base/nsAccUtils.cpp
+++ b/accessible/base/nsAccUtils.cpp
@@ -239,23 +239,21 @@ nsAccUtils::GetSelectableContainer(Acces
while ((parent = parent->Parent()) && !parent->IsSelect()) {
if (parent->Role() == roles::PANE)
return nullptr;
}
return parent;
}
bool
-nsAccUtils::IsARIASelected(Accessible* aAccessible)
+nsAccUtils::IsDOMAttrTrue(const Accessible* aAccessible, nsAtom* aAttr)
{
- if (!aAccessible->GetContent()->IsElement())
- return false;
- return aAccessible->GetContent()->AsElement()->
- AttrValueIs(kNameSpaceID_None, nsGkAtoms::aria_selected,
- nsGkAtoms::_true, eCaseMatters);
+ dom::Element* el = aAccessible->Elm();
+ return el && el->AttrValueIs(kNameSpaceID_None, aAttr, nsGkAtoms::_true,
+ eCaseMatters);
}
Accessible*
nsAccUtils::TableFor(Accessible* aRow)
{
if (aRow) {
Accessible* table = aRow->Parent();
if (table) {
--- a/accessible/base/nsAccUtils.h
+++ b/accessible/base/nsAccUtils.h
@@ -133,20 +133,36 @@ public:
/**
* Return a text container accessible for the given node.
*/
static HyperTextAccessible* GetTextContainer(nsINode* aNode);
static Accessible* TableFor(Accessible* aRow);
/**
+ * Return true if the DOM node of a given accessible has a given attribute
+ * with a value of "true".
+ */
+ static bool IsDOMAttrTrue(const Accessible* aAccessible, nsAtom* aAttr);
+
+ /**
* Return true if the DOM node of given accessible has aria-selected="true"
* attribute.
*/
- static bool IsARIASelected(Accessible* aAccessible);
+ static inline bool IsARIASelected(const Accessible* aAccessible) {
+ return IsDOMAttrTrue(aAccessible, nsGkAtoms::aria_selected);
+ }
+
+ /**
+ * Return true if the DOM node of given accessible has
+ * aria-multiselectable="true" attribute.
+ */
+ static inline bool IsARIAMultiSelectable(const Accessible* aAccessible) {
+ return IsDOMAttrTrue(aAccessible, nsGkAtoms::aria_multiselectable);
+ }
/**
* Converts the given coordinates to coordinates relative screen.
*
* @param aX [in] the given x coord
* @param aY [in] the given y coord
* @param aCoordinateType [in] specifies coordinates origin (refer to
* nsIAccessibleCoordinateType)