Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(547)

Unified Diff: content/browser/accessibility/browser_accessibility_manager_mac.mm

Issue 1057083002: Fix menu list and list box screen reader accessibility. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Mac test Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/accessibility/browser_accessibility_manager_mac.mm
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm b/content/browser/accessibility/browser_accessibility_manager_mac.mm
index 1361164af50e99f5959471dad1462b147ec576d6..8f6b21854c5f35cdc3c91512b94f533cdbd21275 100644
--- a/content/browser/accessibility/browser_accessibility_manager_mac.mm
+++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm
@@ -44,8 +44,14 @@ ui::AXTreeUpdate BrowserAccessibilityManagerMac::GetEmptyDocument() {
BrowserAccessibility* BrowserAccessibilityManagerMac::GetFocus(
BrowserAccessibility* root) {
- BrowserAccessibility* node = GetActiveDescendantFocus(root);
- return node;
+ // On Mac, list boxes should always get focus on the whole list, otherwise
+ // information about the number of selected items will never be reported.
+ BrowserAccessibility* node = BrowserAccessibilityManager::GetFocus(root);
+ if (node && node->GetRole() == ui::AX_ROLE_LIST_BOX)
+ return node;
+
+ // For other roles, follow the active descendant.
+ return GetActiveDescendantFocus(root);
}
void BrowserAccessibilityManagerMac::NotifyAccessibilityEvent(
@@ -54,6 +60,15 @@ void BrowserAccessibilityManagerMac::NotifyAccessibilityEvent(
if (!node->IsNative())
return;
+ if (event_type == ui::AX_EVENT_FOCUS &&
+ node->GetRole() == ui::AX_ROLE_LIST_BOX_OPTION &&
+ node->HasState(ui::AX_STATE_SELECTED) &&
+ node->GetParent() &&
+ node->GetParent()->GetRole() == ui::AX_ROLE_LIST_BOX) {
+ node = node->GetParent();
+ SetFocus(node, false);
+ }
+
// Refer to AXObjectCache.mm (webkit).
NSString* event_id = @"";
switch (event_type) {
@@ -139,6 +154,7 @@ void BrowserAccessibilityManagerMac::NotifyAccessibilityEvent(
LOG(WARNING) << "Unknown accessibility event: " << event_type;
return;
}
+
BrowserAccessibilityCocoa* native_node = node->ToBrowserAccessibilityCocoa();
DCHECK(native_node);
NSAccessibilityPostNotification(native_node, event_id);

Powered by Google App Engine
This is Rietveld 408576698