Chromium Code Reviews| 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 87ae27f257e71819e8db89a87f66b70b16191302..49c17a19ea686892a49d41ee3631f0b21145885f 100644 |
| --- a/content/browser/accessibility/browser_accessibility_win.cc |
| +++ b/content/browser/accessibility/browser_accessibility_win.cc |
| @@ -5418,9 +5418,12 @@ void BrowserAccessibilityWin::InitRoleAndState() { |
| ia_role = ROLE_SYSTEM_PANE; |
| } |
| break; |
| - case ui::AX_ROLE_ROW: |
| - ia_role = ROLE_SYSTEM_ROW; |
| + case ui::AX_ROLE_ROW: { |
| + // Role changes depending on whether row is inside a treegrid |
| + // https://www.w3.org/TR/core-aam-1.1/#role-map-row |
| + ia_role = IsInTreeGrid(this) ? ROLE_SYSTEM_OUTLINEITEM : ROLE_SYSTEM_ROW; |
| break; |
| + } |
| case ui::AX_ROLE_ROW_HEADER: |
| ia_role = ROLE_SYSTEM_ROWHEADER; |
| break; |
| @@ -5596,6 +5599,23 @@ void BrowserAccessibilityWin::InitRoleAndState() { |
| win_attributes_->ia2_state = ia2_state; |
| } |
| +bool BrowserAccessibilityWin::IsInTreeGrid(const BrowserAccessibility* item) { |
| + BrowserAccessibility* container = item->PlatformGetParent(); |
| + if (container && container->GetRole() == ui::AX_ROLE_GROUP) { |
| + // If parent was a rowgroup, we need to look at the grandparent |
| + container = container->PlatformGetParent(); |
| + } |
| + |
| + if (!container) { |
| + return false; |
| + } |
| + |
| + const ui::AXRole role = container->GetRole(); |
| + return role == ui::AX_ROLE_TREE_GRID || |
| + (role == ui::AX_ROLE_TABLE && |
|
dmazzoni
2017/04/12 20:35:12
Can you add a comment explaining why we'd have som
aleventhal
2017/04/17 22:06:42
I was following the code in InitRoleAndState() her
|
| + container->GetString16Attribute(ui::AX_ATTR_ROLE) == L"treegrid"); |
|
dmazzoni
2017/04/12 20:35:12
nit: call GetStringAttribute(ui::AX_ATTR_ROLE) ==
aleventhal
2017/04/17 22:06:42
Assuming we keep this code, should I change it in
|
| +} |
| + |
| BrowserAccessibilityWin* ToBrowserAccessibilityWin(BrowserAccessibility* obj) { |
| DCHECK(!obj || obj->IsNative()); |
| return static_cast<BrowserAccessibilityWin*>(obj); |