| Index: chrome/browser/ui/views/accessibility/accessibility_event_router_views.cc
|
| diff --git a/chrome/browser/ui/views/accessibility/accessibility_event_router_views.cc b/chrome/browser/ui/views/accessibility/accessibility_event_router_views.cc
|
| index 233de2937e04f2d2063586e7147d061cccc62f33..17a915a8daf29f9f34494850a9c20e7ba704e4cb 100644
|
| --- a/chrome/browser/ui/views/accessibility/accessibility_event_router_views.cc
|
| +++ b/chrome/browser/ui/views/accessibility/accessibility_event_router_views.cc
|
| @@ -18,6 +18,7 @@
|
| #include "ui/base/accessibility/accessible_view_state.h"
|
| #include "ui/views/controls/menu/menu_item_view.h"
|
| #include "ui/views/controls/menu/submenu_view.h"
|
| +#include "ui/views/controls/tree/tree_view.h"
|
| #include "ui/views/focus/view_storage.h"
|
| #include "ui/views/view.h"
|
| #include "ui/views/widget/widget.h"
|
| @@ -208,6 +209,12 @@ void AccessibilityEventRouterViews::DispatchAccessibilityEvent(
|
| case ui::AccessibilityTypes::ROLE_SLIDER:
|
| SendSliderNotification(view, type, profile);
|
| break;
|
| + case ui::AccessibilityTypes::ROLE_OUTLINE:
|
| + SendTreeNotification(view, type, profile);
|
| + break;
|
| + case ui::AccessibilityTypes::ROLE_OUTLINEITEM:
|
| + SendTreeItemNotification(view, type, profile);
|
| + break;
|
| default:
|
| // If this is encountered, please file a bug with the role that wasn't
|
| // caught so we can add accessibility extension API support.
|
| @@ -274,6 +281,60 @@ void AccessibilityEventRouterViews::SendMenuItemNotification(
|
| }
|
|
|
| // static
|
| +void AccessibilityEventRouterViews::SendTreeNotification(
|
| + views::View* view,
|
| + ui::AccessibilityTypes::Event event,
|
| + Profile* profile) {
|
| + AccessibilityTreeInfo info(profile, GetViewName(view));
|
| + SendControlAccessibilityNotification(event, &info);
|
| +}
|
| +
|
| +// static
|
| +void AccessibilityEventRouterViews::SendTreeItemNotification(
|
| + views::View* view,
|
| + ui::AccessibilityTypes::Event event,
|
| + Profile* profile) {
|
| + std::string name = GetViewName(view);
|
| + std::string context = GetViewContext(view);
|
| +
|
| + if (strcmp(view->GetClassName(), views::TreeView::kViewClassName) != 0) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| +
|
| + views::TreeView* tree = static_cast<views::TreeView*>(view);
|
| + ui::TreeModelNode* selected_node = tree->GetSelectedNode();
|
| + ui::TreeModel* model = tree->model();
|
| +
|
| + int siblings_count = model->GetChildCount(model->GetRoot());
|
| + int children_count = -1;
|
| + int index = -1;
|
| + int depth = -1;
|
| + bool is_expanded = false;
|
| +
|
| + if (selected_node) {
|
| + children_count = model->GetChildCount(selected_node);
|
| + is_expanded = tree->IsExpanded(selected_node);
|
| + ui::TreeModelNode* parent_node = model->GetParent(selected_node);
|
| + if (parent_node) {
|
| + index = model->GetIndexOf(parent_node, selected_node);
|
| + siblings_count = model->GetChildCount(parent_node);
|
| + }
|
| + // Get node depth.
|
| + depth = 0;
|
| + while (parent_node) {
|
| + depth++;
|
| + parent_node = model->GetParent(parent_node);
|
| + }
|
| + }
|
| +
|
| + AccessibilityTreeItemInfo info(
|
| + profile, name, context, depth, index, siblings_count, children_count,
|
| + is_expanded);
|
| + SendControlAccessibilityNotification(event, &info);
|
| +}
|
| +
|
| +// static
|
| void AccessibilityEventRouterViews::SendTextfieldNotification(
|
| views::View* view,
|
| ui::AccessibilityTypes::Event event,
|
|
|