Bug 1480058 part 2: Add nsAccUtils::IsARIAMultiSelectable and make nsAccUtils::ISARIASelected const. r?surkov draft
authorJames Teh <jteh@mozilla.com>
Thu, 02 Aug 2018 16:27:18 +1000
changeset 827112 011c0263f2015b267c0607d88f080629b087ae29
parent 827111 f6267cbaefca09a412bf409c7ccdb30075fe9ced
child 827113 7875e1d016115e90bd52edb01b25973b0e7530b4
push id118470
push userbmo:jteh@mozilla.com
push dateTue, 07 Aug 2018 05:07:07 +0000
reviewerssurkov
bugs1480058
milestone63.0a1
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
accessible/base/nsAccUtils.cpp
accessible/base/nsAccUtils.h
--- 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)