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 d4a8d1fa4c3d11eaf568b897239c305326c4c4c1..87ae27f257e71819e8db89a87f66b70b16191302 100644 |
--- a/content/browser/accessibility/browser_accessibility_win.cc |
+++ b/content/browser/accessibility/browser_accessibility_win.cc |
@@ -495,13 +495,12 @@ STDMETHODIMP BrowserAccessibilityWin::accNavigate(LONG nav_dir, |
if (!target) |
return E_INVALIDARG; |
- if ((nav_dir == NAVDIR_LASTCHILD || nav_dir == NAVDIR_FIRSTCHILD) && |
- start.lVal != CHILDID_SELF) { |
- // MSAA states that navigating to first/last child can only be from self. |
- return E_INVALIDARG; |
+ // Forward all directions but NAVDIR_ to the platform node implementation. |
+ if (nav_dir != NAVDIR_DOWN && nav_dir != NAVDIR_UP && |
+ nav_dir != NAVDIR_LEFT && nav_dir != NAVDIR_RIGHT) { |
+ return target->GetPlatformNodeWin()->accNavigate(nav_dir, start, end); |
} |
- uint32_t child_count = target->PlatformChildCount(); |
BrowserAccessibility* result = nullptr; |
switch (nav_dir) { |
case NAVDIR_DOWN: |
@@ -518,20 +517,6 @@ STDMETHODIMP BrowserAccessibilityWin::accNavigate(LONG nav_dir, |
result = target->GetTableCell(GetTableRow(), |
GetTableColumn() + GetTableColumnSpan()); |
break; |
- case NAVDIR_FIRSTCHILD: |
- if (child_count > 0) |
- result = target->PlatformGetChild(0); |
- break; |
- case NAVDIR_LASTCHILD: |
- if (child_count > 0) |
- result = target->PlatformGetChild(child_count - 1); |
- break; |
- case NAVDIR_NEXT: |
- result = target->GetNextSibling(); |
- break; |
- case NAVDIR_PREVIOUS: |
- result = target->GetPreviousSibling(); |
- break; |
} |
if (!result) { |