Chromium Code Reviews| Index: chrome/browser/ui/views/accessibility_event_router_views.cc |
| =================================================================== |
| --- chrome/browser/ui/views/accessibility_event_router_views.cc (revision 112880) |
| +++ chrome/browser/ui/views/accessibility_event_router_views.cc (working copy) |
| @@ -175,6 +175,7 @@ |
| int type, |
| Profile* profile) { |
| AccessibilityButtonInfo info(profile, GetViewName(view)); |
| + AddContextInfo(view, &info); |
| SendAccessibilityNotification(type, &info); |
| } |
| @@ -183,6 +184,7 @@ |
| int type, |
| Profile* profile) { |
| AccessibilityLinkInfo info(profile, GetViewName(view)); |
| + AddContextInfo(view, &info); |
| SendAccessibilityNotification(type, &info); |
| } |
| @@ -191,6 +193,7 @@ |
| int type, |
| Profile* profile) { |
| AccessibilityMenuInfo info(profile, GetViewName(view)); |
| + AddContextInfo(view, &info); |
| SendAccessibilityNotification(type, &info); |
| } |
| @@ -218,6 +221,7 @@ |
| } |
| AccessibilityMenuItemInfo info(profile, name, has_submenu, index, count); |
| + AddContextInfo(view, &info); |
| SendAccessibilityNotification(type, &info); |
| } |
| @@ -233,6 +237,7 @@ |
| AccessibilityTextBoxInfo info(profile, name, password); |
| std::string value = UTF16ToUTF8(state.value); |
| info.SetValue(value, state.selection_start, state.selection_end); |
| + AddContextInfo(view, &info); |
| SendAccessibilityNotification(type, &info); |
| } |
| @@ -246,6 +251,7 @@ |
| std::string value = UTF16ToUTF8(state.value); |
| AccessibilityComboBoxInfo info( |
| profile, name, value, state.index, state.count); |
| + AddContextInfo(view, &info); |
| SendAccessibilityNotification(type, &info); |
| } |
| @@ -259,6 +265,7 @@ |
| std::string value = UTF16ToUTF8(state.value); |
| AccessibilityCheckboxInfo info( |
| profile, name, state.state == ui::AccessibilityTypes::STATE_CHECKED); |
| + AddContextInfo(view, &info); |
| SendAccessibilityNotification(type, &info); |
| } |
| @@ -289,6 +296,59 @@ |
| return UTF16ToUTF8(state.name); |
| } |
| +void AccessibilityEventRouterViews::AddContextInfo( |
|
sky
2011/12/07 22:01:55
Order should match header.
dmazzoni
2011/12/07 23:13:49
Done.
|
| + views::View* view, AccessibilityControlInfo* info) { |
| + for (views::View* parent = view->parent(); |
| + parent; |
| + parent = parent->parent()) { |
| + ui::AccessibleViewState state; |
| + parent->GetAccessibleState(&state); |
| + |
| + // Two cases are handled right now. More could be added in the future |
| + // depending on how the UI evolves. |
| + |
| + // A control in a toolbar should use the toolbar's accessible name |
| + // as the context. |
| + if (state.role == ui::AccessibilityTypes::ROLE_TOOLBAR && |
| + !state.name.empty()) { |
| + info->set_context(UTF16ToUTF8(state.name)); |
| + return; |
| + } |
| + |
| + // A control inside of an alert (like an infobar) should grab the |
| + // first static text descendant as the context; that's the prompt. |
| + if (state.role == ui::AccessibilityTypes::ROLE_ALERT) { |
| + views::View* static_text_child = FindDescendantWithAccessibleRole( |
| + parent, ui::AccessibilityTypes::ROLE_STATICTEXT); |
| + if (static_text_child) { |
|
sky
2011/12/07 22:01:55
I don't know this code well enough, so this might
dmazzoni
2011/12/07 23:13:49
That should never happen (multiple ALERTs in the p
|
| + ui::AccessibleViewState state; |
| + static_text_child->GetAccessibleState(&state); |
| + if (!state.name.empty()) { |
| + info->set_context(UTF16ToUTF8(state.name)); |
| + return; |
| + } |
| + } |
| + } |
| + } |
| +} |
| + |
| +views::View* AccessibilityEventRouterViews::FindDescendantWithAccessibleRole( |
|
sky
2011/12/07 22:01:55
Neither of these methods look like they need any s
dmazzoni
2011/12/07 23:13:49
Done - made a few more methods static too.
|
| + views::View* view, ui::AccessibilityTypes::Role role) { |
| + ui::AccessibleViewState state; |
| + view->GetAccessibleState(&state); |
| + if (state.role == role) |
| + return view; |
| + |
| + for (int i = 0; i < view->child_count(); i++) { |
| + views::View* child = view->child_at(i); |
| + views::View* result = FindDescendantWithAccessibleRole(child, role); |
| + if (result) |
| + return result; |
| + } |
| + |
| + return NULL; |
| +} |
| + |
| bool AccessibilityEventRouterViews::IsMenuEvent( |
| views::View* view, |
| int type) { |