Title: [149581] trunk
Revision
149581
Author
cfleiz...@apple.com
Date
2013-05-05 16:25:46 -0700 (Sun, 05 May 2013)

Log Message

AX: aria-checked not exposed correctly on menuitemcheckbox or menuitemradio roles
https://bugs.webkit.org/show_bug.cgi?id=115499

Reviewed by Tim Horton.

Source/WebCore:

Expose isChecked() for menu item objects.
Return the Mac-platform specific value that you find on menu items for "checked" menu items.

Test: platform/mac/accessibility/aria-menuitem-checked-value.html

* accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::isChecked):
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

LayoutTests:

* platform/mac/accessibility/aria-menuitem-checked-value-expected.txt: Added.
* platform/mac/accessibility/aria-menuitem-checked-value.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (149580 => 149581)


--- trunk/LayoutTests/ChangeLog	2013-05-05 22:11:53 UTC (rev 149580)
+++ trunk/LayoutTests/ChangeLog	2013-05-05 23:25:46 UTC (rev 149581)
@@ -1,3 +1,13 @@
+2013-05-05  Chris Fleizach  <cfleiz...@apple.com>
+
+        AX: aria-checked not exposed correctly on menuitemcheckbox or menuitemradio roles
+        https://bugs.webkit.org/show_bug.cgi?id=115499
+
+        Reviewed by Tim Horton.
+
+        * platform/mac/accessibility/aria-menuitem-checked-value-expected.txt: Added.
+        * platform/mac/accessibility/aria-menuitem-checked-value.html: Added.
+
 2013-05-04  Dean Jackson  <d...@apple.com>
 
         Animations and Transitions should not start when globally suspended

Added: trunk/LayoutTests/platform/mac/accessibility/aria-menuitem-checked-value-expected.txt (0 => 149581)


--- trunk/LayoutTests/platform/mac/accessibility/aria-menuitem-checked-value-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/mac/accessibility/aria-menuitem-checked-value-expected.txt	2013-05-05 23:25:46 UTC (rev 149581)
@@ -0,0 +1,13 @@
+This tests that the right Mac attribute for conveying 'checked' states works on menu items
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Item 1 Mark: ✓
+PASS !item2mark || item2mark == '' is true
+Item 3 Mark: ✓
+PASS !item4mark || item4mark == '' is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/platform/mac/accessibility/aria-menuitem-checked-value.html (0 => 149581)


--- trunk/LayoutTests/platform/mac/accessibility/aria-menuitem-checked-value.html	                        (rev 0)
+++ trunk/LayoutTests/platform/mac/accessibility/aria-menuitem-checked-value.html	2013-05-05 23:25:46 UTC (rev 149581)
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+</head>
+<body id="body">
+
+<div id="menu" role="menu">
+
+<div role="menuitemcheckbox" id="menuitem1" aria-checked="true">test</div>
+<div role="menuitemcheckbox" id="menuitem2" aria-checked="false">test</div>
+
+<div role="menuitemradio" id="menuitem3" aria-checked="true">test</div>
+<div role="menuitemradio" id="menuitem4" aria-checked="false">test</div>
+
+</div>
+
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+
+    description("This tests that the right Mac attribute for conveying 'checked' states works on menu items");
+
+    if (window.accessibilityController) {
+
+         var item1 = accessibilityController.accessibleElementById("menuitem1");
+         debug("Item 1 Mark: " + item1.stringAttributeValue('AXMenuItemMarkChar'));
+
+         var item2 = accessibilityController.accessibleElementById("menuitem2");
+         var item2mark = item2.stringAttributeValue('AXMenuItemMarkChar');
+         shouldBeTrue("!item2mark || item2mark == ''");
+
+         var item3 = accessibilityController.accessibleElementById("menuitem3");
+         debug("Item 3 Mark: " + item3.stringAttributeValue('AXMenuItemMarkChar'));
+
+         var item4 = accessibilityController.accessibleElementById("menuitem4");
+         var item4mark = item4.stringAttributeValue('AXMenuItemMarkChar');
+         shouldBeTrue("!item4mark || item4mark == ''");
+
+         document.getElementById("menu").style.visibility = "hidden";
+    }
+
+</script>
+
+<script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (149580 => 149581)


--- trunk/Source/WebCore/ChangeLog	2013-05-05 22:11:53 UTC (rev 149580)
+++ trunk/Source/WebCore/ChangeLog	2013-05-05 23:25:46 UTC (rev 149581)
@@ -1,3 +1,20 @@
+2013-05-05  Chris Fleizach  <cfleiz...@apple.com>
+
+        AX: aria-checked not exposed correctly on menuitemcheckbox or menuitemradio roles
+        https://bugs.webkit.org/show_bug.cgi?id=115499
+
+        Reviewed by Tim Horton.
+
+        Expose isChecked() for menu item objects.
+        Return the Mac-platform specific value that you find on menu items for "checked" menu items.
+
+        Test: platform/mac/accessibility/aria-menuitem-checked-value.html
+
+        * accessibility/AccessibilityNodeObject.cpp:
+        (WebCore::AccessibilityNodeObject::isChecked):
+        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+
 2013-05-05  Tim Horton  <timothy_hor...@apple.com>
 
         [wk2] Page Overlays: deviceScaleFactor doesn't update when the display changes

Modified: trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp (149580 => 149581)


--- trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp	2013-05-05 22:11:53 UTC (rev 149580)
+++ trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp	2013-05-05 23:25:46 UTC (rev 149581)
@@ -649,14 +649,20 @@
         return inputElement->shouldAppearChecked();
 
     // Else, if this is an ARIA checkbox or radio, respect the aria-checked attribute
-    AccessibilityRole ariaRole = ariaRoleAttribute();
-    if (ariaRole == RadioButtonRole || ariaRole == CheckBoxRole) {
-        if (equalIgnoringCase(getAttribute(aria_checkedAttr), "true"))
-            return true;
-        return false;
+    bool validRole = false;
+    switch (ariaRoleAttribute()) {
+    case RadioButtonRole:
+    case CheckBoxRole:
+    case MenuItemRole:
+        validRole = true;
+        break;
+    default:
+        break;
     }
+    
+    if (validRole && equalIgnoringCase(getAttribute(aria_checkedAttr), "true"))
+        return true;
 
-    // Otherwise it's not checked
     return false;
 }
 

Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (149580 => 149581)


--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2013-05-05 22:11:53 UTC (rev 149580)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2013-05-05 23:25:46 UTC (rev 149581)
@@ -2296,7 +2296,12 @@
         
         return m_object->stringValue();
     }
-    
+
+    if ([attributeName isEqualToString:(NSString *)kAXMenuItemMarkCharAttribute]) {
+        const unichar ch = 0x2713; // ✓ used on Mac for selected menu items.
+        return (m_object->isChecked()) ? [NSString stringWithCharacters:&ch length:1] : nil;
+    }
+
     if ([attributeName isEqualToString: NSAccessibilityMinValueAttribute])
         return [NSNumber numberWithFloat:m_object->minValueForRange()];
     
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to