Bug 1033283 - Expose STATE_PRESSED on menu buttons, r=surkov
authorMarco Zehe <mzehe@mozilla.com>
Fri, 04 Jul 2014 09:51:54 +0200
changeset 192388 62eec1dede8972969c5cab54ada40abe5dc31672
parent 192358 0bcf1102e943e4adb091a9d3956a6d0819436d7e
child 192389 ad3f139baca57b9e5f2d6258e080276bbca11636
push id27086
push userttaubert@mozilla.com
push dateSun, 06 Jul 2014 16:11:25 +0000
treeherdermozilla-central@9f59e39f70a5 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssurkov
bugs1033283
milestone33.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 1033283 - Expose STATE_PRESSED on menu buttons, r=surkov
accessible/generic/Accessible.cpp
accessible/tests/mochitest/role/test_aria.xul
accessible/tests/mochitest/states/a11y.ini
accessible/tests/mochitest/states/test_aria.xul
--- a/accessible/generic/Accessible.cpp
+++ b/accessible/generic/Accessible.cpp
@@ -1577,17 +1577,18 @@ Accessible::ApplyARIAState(uint64_t* aSt
           // ancestor has aria-disabled property, this is disabled
         *aState |= states::UNAVAILABLE;
         break;
       }
     }
   }
 
   // special case: A native button element whose role got transformed by ARIA to a toggle button
-  if (IsButton())
+  // Also applies to togglable button menus, like in the Dev Tools Web Console.
+  if (IsButton() || IsMenuButton())
     aria::MapToState(aria::eARIAPressed, element, aState);
 
   if (!mRoleMapEntry)
     return;
 
   *aState |= mRoleMapEntry->state;
 
   if (aria::MapToState(mRoleMapEntry->attributeMap1, element, aState) &&
--- a/accessible/tests/mochitest/role/test_aria.xul
+++ b/accessible/tests/mochitest/role/test_aria.xul
@@ -6,50 +6,67 @@
 <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 type="application/javascript">
   <![CDATA[
     function doTest()
     {
       ok(!isAccessible("presentation_label"),
                       "Presentation label shouldn't be accessible.");
       ok(!isAccessible("presentation_descr"),
                       "Presentation description shouldn't be accessible.");
 
+      // aria-pressed
+      testRole("pressed_button", ROLE_TOGGLE_BUTTON);
+      testRole("pressed_menu_button", ROLE_TOGGLE_BUTTON);
+
       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=494345"
        title="Do not create accessibles for XUL label or description having a role of 'presentation'">
       Mozilla Bug 494345
     </a>
-  <p id="display"></p>
+    <a target="_blank"
+        href="https://bugzilla.mozilla.org/show_bug.cgi?id=1033283"
+        title="Expose pressed state on XUL menu toggle buttons">
+       Mozilla Bug 1033283
+    </a>
+    <p id="display"></p>
     <div id="content" style="display: none">
     </div>
     <pre id="test">
     </pre>
   </body>
 
   <vbox flex="1">
     <label id="presentation_label" role="presentation" value="label"/>
     <description id="presentation_descr" role="presentation" value="description"/>
+    <button id="pressed_button" aria-pressed="true" label="I am pressed" />
+    <button id="pressed_menu_button" aria-pressed="true" label="I am pressed" type="menu-button">
+      <menupopup>
+        <menuitem label="I am a menu item" />
+      </menupopup>
+    </button>
   </vbox>
 
   
   </hbox>  
 </window>
 
--- a/accessible/tests/mochitest/states/a11y.ini
+++ b/accessible/tests/mochitest/states/a11y.ini
@@ -2,16 +2,17 @@
 support-files =
   z_frames.html
   z_frames_article.html
   z_frames_checkbox.html
   z_frames_textbox.html
   z_frames_update.html
 
 [test_aria.html]
+[test_aria.xul]
 [test_aria_imgmap.html]
 [test_aria_widgetitems.html]
 [test_buttons.html]
 [test_controls.html]
 [test_controls.xul]
 [test_doc.html]
 [test_doc_busy.html]
 [test_docarticle.html]
new file mode 100644
--- /dev/null
+++ b/accessible/tests/mochitest/states/test_aria.xul
@@ -0,0 +1,60 @@
+<?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"?>
+
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        title="Accessible XUL ARIA state tests">
+
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
+
+  <script type="application/javascript"
+          src="../common.js" />
+  <script type="application/javascript"
+          src="../role.js" />
+  <script type="application/javascript"
+          src="../states.js" />
+
+  <script type="application/javascript">
+  <![CDATA[
+    function doTest()
+    {
+      // aria-pressed
+      testStates("pressed_button", STATE_PRESSED, 0, STATE_CHECKABLE);
+      testStates("pressed_menu_button", STATE_PRESSED | STATE_HASPOPUP, 0, STATE_CHECKABLE);
+
+      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=1033283"
+         title="Expose pressed state on XUL menu toggle buttons">
+        Mozilla Bug 1033283
+     </a>
+      <p id="display"></p>
+      <div id="content" style="display: none">
+      </div>
+      <pre id="test">
+      </pre>
+    </body>
+
+    <vbox flex="1">
+      <button id="pressed_button" aria-pressed="true" label="I am pressed" />
+      <button id="pressed_menu_button" aria-pressed="true" label="I am pressed" type="menu-button">
+        <menupopup>
+          <menuitem label="I am a menu item" />
+        </menupopup>
+      </button>
+    </vbox>
+  </hbox>
+
+</window>
+