Bug 1216478 - prefer tooltiptext on a XUL element over title attribute on a containing toolbaritem when determining accessible name, r?surkov draft
authorGijs Kruitbosch <gijskruitbosch@gmail.com>
Wed, 20 Jan 2016 13:47:42 +0000
changeset 330650 40ff881eabb42579a25e22c6c290ce3c5d0e7634
parent 330639 8ef5ae38d41074ec2dbc73cd4a6ca8d1a695468c
child 514212 1e8d2f3e65e031d380073445774ab83908be5e0c
push id10799
push usergijskruitbosch@gmail.com
push dateFri, 12 Feb 2016 13:09:39 +0000
reviewerssurkov
bugs1216478
milestone47.0a1
Bug 1216478 - prefer tooltiptext on a XUL element over title attribute on a containing toolbaritem when determining accessible name, r?surkov MozReview-Commit-ID: Cv0Kl5U02jy
accessible/generic/Accessible.cpp
accessible/tests/mochitest/name/a11y.ini
accessible/tests/mochitest/name/test_toolbaritem.xul
--- a/accessible/generic/Accessible.cpp
+++ b/accessible/generic/Accessible.cpp
@@ -816,19 +816,27 @@ Accessible::XULElmName(DocAccessible* aD
   aName.CompressWhitespace();
   if (!aName.IsEmpty())
     return;
 
   // Can get text from title of <toolbaritem> if we're a child of a <toolbaritem>
   nsIContent *bindingParent = aElm->GetBindingParent();
   nsIContent* parent =
     bindingParent? bindingParent->GetParent() : aElm->GetParent();
+  nsAutoString ancestorTitle;
   while (parent) {
     if (parent->IsXULElement(nsGkAtoms::toolbaritem) &&
-        parent->GetAttr(kNameSpaceID_None, nsGkAtoms::title, aName)) {
+        parent->GetAttr(kNameSpaceID_None, nsGkAtoms::title, ancestorTitle)) {
+      // Before returning this, check if the element itself has a tooltip:
+      if (aElm->GetAttr(kNameSpaceID_None, nsGkAtoms::tooltiptext, aName)) {
+        aName.CompressWhitespace();
+        return;
+      }
+
+      aName.Assign(ancestorTitle);
       aName.CompressWhitespace();
       return;
     }
     parent = parent->GetParent();
   }
 }
 
 nsresult
--- a/accessible/tests/mochitest/name/a11y.ini
+++ b/accessible/tests/mochitest/name/a11y.ini
@@ -8,9 +8,10 @@ support-files =
 [test_browserui.xul]
 [test_counterstyle.html]
 [test_general.html]
 [test_general.xul]
 [test_link.html]
 [test_list.html]
 [test_markup.html]
 [test_svg.html]
+[test_toolbaritem.xul]
 [test_tree.xul]
new file mode 100644
--- /dev/null
+++ b/accessible/tests/mochitest/name/test_toolbaritem.xul
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
+                 type="text/css"?>
+<?xml-stylesheet href="general.css"
+                 type="text/css"?>
+
+
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        title="Accessibility Name Calculating Test.">
+
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
+
+  <script type="application/javascript"
+          src="../common.js"></script>
+  <script type="application/javascript"
+          src="../role.js"></script>
+  <script type="application/javascript"
+          src="../name.js"></script>
+  <script type="application/javascript">
+  <![CDATA[
+    var gQueue = null;
+    function doTest() {
+      let ids = [];
+      for (let item of ["button", "textbox"]) {
+        ids.push(item + "withtooltip");
+        ids.push(item + "withouttooltip");
+        ids.push("nested" + item + "withtooltip");
+        ids.push("nested" + item + "withouttooltip");
+      }
+
+      for (let id of ids) {
+        if (id.endsWith("withtooltip")) {
+          testName(id, id, id + " should have individual name from its tooltip - ");
+        } else {
+          testName(id, "Toolbaritem title", id + " should have toolbaritem's title for a name - ");
+        }
+      }
+      SimpleTest.finish();
+    }
+
+    SimpleTest.waitForExplicitFinish();
+    addA11yLoadEvent(doTest);
+  ]]>
+  </script>
+
+  <hbox flex="1" style="overflow: auto;">
+
+  <body xmlns="http://www.w3.org/1999/xhtml">
+    <a target="_blank"
+       href="https://bugzilla.mozilla.org/show_bug.cgi?id=1216478"
+       title="Items with tooltips inside items with a label should use their own tooltip as an accessible name, not the ancestor's label">
+      Mozilla Bug 1216478
+    </a>
+    <p id="display"></p>
+    <div id="content" style="display: none">
+    </div>
+    <pre id="test">
+    </pre>
+  </body>
+
+  <vbox flex="1">
+    <toolbox>
+      <toolbar>
+        <toolbaritem title="Toolbaritem title">
+          <toolbarbutton id="buttonwithtooltip" tooltiptext="buttonwithtooltip"/>
+          <toolbarbutton id="buttonwithouttooltip"/>
+          <textbox id="textboxwithtooltip" tooltiptext="textboxwithtooltip"/>
+          <textbox id="textboxwithouttooltip"/>
+          <vbox>
+            <toolbarbutton id="nestedbuttonwithtooltip" tooltiptext="nestedbuttonwithtooltip"/>
+            <toolbarbutton id="nestedbuttonwithouttooltip"/>
+            <textbox id="nestedtextboxwithtooltip" tooltiptext="nestedtextboxwithtooltip"/>
+            <textbox id="nestedtextboxwithouttooltip"/>
+          </vbox>
+        </toolbaritem>
+      </toolbar>
+    </toolbox>
+
+
+  </vbox> <!-- close tests area -->
+  </hbox> <!-- close main area -->
+</window>