Chromium Code Reviews| 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; |