Bug 786566 - ARIA menuitem acting as submenu should have PARENT_MENUITEM role, r=tbsaunde
authorJames Kitchener <jkitch.bug@gmail.com>
Thu, 08 Nov 2012 08:58:22 +0900
changeset 112636 b029a90619f5d7eab88e7e1b0aef3a9d7296a18f
parent 112635 ed74314b44d5fcc1f86970237fd43250e6ebef13
child 112637 222f4185ecb56970684e04adcb3237f0065b4b3c
push id23833
push useremorley@mozilla.com
push dateThu, 08 Nov 2012 10:20:57 +0000
treeherdermozilla-central@e0d7b394462b [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerstbsaunde
bugs786566
milestone19.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 786566 - ARIA menuitem acting as submenu should have PARENT_MENUITEM role, r=tbsaunde
accessible/src/generic/Accessible.cpp
accessible/tests/mochitest/tree/Makefile.in
accessible/tests/mochitest/tree/test_aria_menu.html
--- a/accessible/src/generic/Accessible.cpp
+++ b/accessible/src/generic/Accessible.cpp
@@ -1729,16 +1729,23 @@ Accessible::ARIATransformRole(role aRole
       while ((targetAcc = rel.Next()))
         if (targetAcc->Role() == roles::COMBOBOX)
           return roles::COMBOBOX_LIST;
     }
 
   } else if (aRole == roles::OPTION) {
     if (mParent && mParent->Role() == roles::COMBOBOX_LIST)
       return roles::COMBOBOX_OPTION;
+
+  } else if (aRole == roles::MENUITEM) {
+    // Menuitem has a submenu.
+    if (mContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::aria_haspopup,
+                              nsGkAtoms::_true, eCaseMatters)) {
+      return roles::PARENT_MENUITEM;
+    }
   }
 
   return aRole;
 }
 
 role
 Accessible::NativeRole()
 {
--- a/accessible/tests/mochitest/tree/Makefile.in
+++ b/accessible/tests/mochitest/tree/Makefile.in
@@ -11,16 +11,17 @@ relativesrcdir  = accessible/tree
 
 include $(DEPTH)/config/autoconf.mk
 
 MOCHITEST_A11Y_FILES =\
 		dockids.html \
 	$(warning test_applicationacc.xul temporarily disabled, see bug 561508) \
 		test_aria_globals.html \
 		test_aria_imgmap.html \
+		test_aria_menu.html \
 		test_aria_presentation.html \
 		test_brokencontext.html \
 		test_button.xul \
 		test_canvas.html \
 		test_combobox.xul \
 		test_cssoverflow.html \
 		test_dochierarchy.html \
 		test_dockids.html \
new file mode 100644
--- /dev/null
+++ b/accessible/tests/mochitest/tree/test_aria_menu.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Test accessible tree when ARIA role menuitem is used</title>
+  <link rel="stylesheet" type="text/css"
+        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
+
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+  <script type="application/javascript"
+          src="../common.js"></script>
+  <script type="application/javascript"
+          src="../role.js"></script>
+
+  <script type="application/javascript">
+  function doTest()
+  {
+    // Menuitem with no popup.
+    tree =
+      { SECTION: [ // container
+        { MENUPOPUP: [ // menu
+          { MENUITEM: [
+            { STATICTEXT: [] }, // bullet
+            { TEXT_LEAF: [] }
+          ] }
+        ] }
+      ] }
+    testAccessibleTree("menu", tree);
+
+    // Menuitem with explicit no popup.
+    tree =
+      { SECTION: [ // container
+        { MENUPOPUP: [ // menu
+          { MENUITEM: [
+            { STATICTEXT: [] }, // bullet
+            { TEXT_LEAF: [] }
+          ] }
+        ] }
+      ] }
+    testAccessibleTree("menu_nopopup", tree);
+
+    // Menuitem with popup.
+    tree =
+      { SECTION: [ // container
+        { MENUPOPUP: [ // menu
+          { PARENT_MENUITEM: [ // menuitem with aria-haspopup="true"
+            { STATICTEXT: [] }, // bullet
+            { TEXT_LEAF: [] }
+          ] }
+        ] }
+      ] }
+    testAccessibleTree("menu_popup", tree);
+
+    SimpleTest.finish();
+  }
+
+  SimpleTest.waitForExplicitFinish();
+  addA11yLoadEvent(doTest);
+  </script>
+</head>
+<body>
+
+  <a target="_blank"
+     href="https://bugzilla.mozilla.org/show_bug.cgi?id=786566"
+     title="ARIA menuitem acting as submenu should have PARENT_MENUITEM role">
+    Mozilla Bug 786566
+  </a>
+  <p id="display"></p>
+  <div id="content" style="display: none"></div>
+  <pre id="test">
+  </pre>
+
+  <div id="menu">
+    <ul role="menu">
+      <li role="menuitem">Normal Menu</li>
+    </ul>
+  </div>
+
+  <div id="menu_nopopup">
+    <ul role="menu">
+      <li role="menuitem" aria-haspopup="false">Menu with explicit no popup</li>
+    </ul>
+  </div>
+
+  <div id="menu_popup">
+    <ul role="menu">
+      <li role="menuitem" aria-haspopup="true">Menu with popup</li>
+    </ul>
+  </div>
+
+</body>
+</html>