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 0edf58462263566159a3d559878d465bf3d0764e..a20578b0393985619e22e9cc3026f7c1516eaf6d 100644 |
--- a/content/browser/accessibility/browser_accessibility_manager_mac.mm |
+++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm |
@@ -58,6 +58,8 @@ NSString* const NSAccessibilityLiveRegionChangedNotification = |
@"AXLiveRegionChanged"; |
NSString* const NSAccessibilityMenuItemSelectedNotification = |
@"AXMenuItemSelected"; |
+ |
+// Attributes used for NSAccessibilitySelectedTextChangedNotification. |
NSString* const NSAccessibilityTextStateChangeTypeKey = |
@"AXTextStateChangeType"; |
NSString* const NSAccessibilityTextStateSyncKey = @"AXTextStateSync"; |
@@ -67,8 +69,9 @@ NSString* const NSAccessibilityTextSelectionGranularity = |
@"AXTextSelectionGranularity"; |
NSString* const NSAccessibilityTextSelectionChangedFocus = |
@"AXTextSelectionChangedFocus"; |
-NSString* const NSAccessibilityTextChangeElement = |
- @"AXAccessibilityTextChangeElement"; |
+NSString* const NSAccessibilitySelectedTextMarkerRangeAttribute = |
+ @"AXSelectedTextMarkerRange"; |
+NSString* const NSAccessibilityTextChangeElement = @"AXTextChangeElement"; |
} // namespace |
@@ -187,10 +190,21 @@ void BrowserAccessibilityManagerMac::NotifyAccessibilityEvent( |
// 10.11 or later to notify Voiceover about text selection changes. This |
// API has been present on versions of OS X since 10.7 but doesn't |
// appear to be needed by Voiceover before version 10.11. |
+ // WebKit fires a notification both on the focused object and the root. |
NSDictionary* user_info = |
GetUserInfoForSelectedTextChangedNotification(); |
+ |
+ BrowserAccessibility* focus = GetFocus(); |
+ if (!focus) |
+ return; |
NSAccessibilityPostNotificationWithUserInfo( |
- native_node, mac_notification, user_info); |
+ focus->ToBrowserAccessibilityCocoa(), mac_notification, user_info); |
+ |
+ BrowserAccessibility* root = GetRoot(); |
+ if (!root) |
+ return; |
+ NSAccessibilityPostNotificationWithUserInfo( |
+ root->ToBrowserAccessibilityCocoa(), mac_notification, user_info); |
return; |
} |
break; |
@@ -282,8 +296,8 @@ void BrowserAccessibilityManagerMac::OnAtomicUpdateFinished( |
} |
// Returns an autoreleased object. |
-NSDictionary* BrowserAccessibilityManagerMac:: |
- GetUserInfoForSelectedTextChangedNotification() { |
+NSDictionary* |
+BrowserAccessibilityManagerMac::GetUserInfoForSelectedTextChangedNotification() { |
NSMutableDictionary* user_info = [[[NSMutableDictionary alloc] init] |
autorelease]; |
[user_info setObject:[NSNumber numberWithBool:YES] |
@@ -298,16 +312,19 @@ NSDictionary* BrowserAccessibilityManagerMac:: |
forKey:NSAccessibilityTextSelectionGranularity]; |
[user_info setObject:[NSNumber numberWithBool:YES] |
forKey:NSAccessibilityTextSelectionChangedFocus]; |
- // TODO(nektar): Set selected text marker range. |
int32_t focus_id = GetTreeData().sel_focus_object_id; |
BrowserAccessibility* focus_object = GetFromID(focus_id); |
if (focus_object) { |
focus_object = focus_object->GetClosestPlatformObject(); |
auto native_focus_object = focus_object->ToBrowserAccessibilityCocoa(); |
- if (native_focus_object) |
+ if (native_focus_object) { |
+ LOG(ERROR) << "Marker range " << ([native_focus_object selectedTextMarkerRange] == nil) << " " << [[native_focus_object role] UTF8String]; |
Mark Mentovai
2016/02/19 00:33:29
Remove this LOG.
|
+ [user_info setObject:[native_focus_object selectedTextMarkerRange] |
+ forKey:NSAccessibilitySelectedTextMarkerRangeAttribute]; |
[user_info setObject:native_focus_object |
forKey:NSAccessibilityTextChangeElement]; |
+ } |
} |
return user_info; |