Index: content/browser/accessibility/browser_accessibility_win.cc |
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc |
index 816aa2bf3ff8f229fc121d7438d08909061a22cb..76060e0aea5844a84f4339c729524cb365abf298 100644 |
--- a/content/browser/accessibility/browser_accessibility_win.cc |
+++ b/content/browser/accessibility/browser_accessibility_win.cc |
@@ -3604,6 +3604,18 @@ |
if (ia_state() != old_win_attributes_->ia_state) |
FireNativeEvent(EVENT_OBJECT_STATECHANGE); |
+ // Normally focus events are handled elsewhere, however |
+ // focus for managed descendants is platform-specific. |
+ // Fire a focus event if the focused descendant in a multi-select |
+ // list box changes. |
+ if (GetRole() == ui::AX_ROLE_LIST_BOX_OPTION && |
+ (ia_state() & STATE_SYSTEM_FOCUSABLE) && |
+ (ia_state() & STATE_SYSTEM_SELECTABLE) && |
+ (ia_state() & STATE_SYSTEM_FOCUSED) && |
+ !(old_win_attributes_->ia_state & STATE_SYSTEM_FOCUSED)) { |
+ FireNativeEvent(EVENT_OBJECT_FOCUS); |
+ } |
+ |
// Handle selection being added or removed. |
bool is_selected_now = (ia_state() & STATE_SYSTEM_SELECTED) != 0; |
bool was_selected_before = |