Index: content/browser/accessibility/browser_accessibility_com_win.cc |
diff --git a/content/browser/accessibility/browser_accessibility_com_win.cc b/content/browser/accessibility/browser_accessibility_com_win.cc |
index 809a6ce4770a0996dd70f6fb806fbd1f7952034a..57ff9025055e2d8197325b35ee3124ff52c63c12 100644 |
--- a/content/browser/accessibility/browser_accessibility_com_win.cc |
+++ b/content/browser/accessibility/browser_accessibility_com_win.cc |
@@ -2851,8 +2851,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_nodeInfo( |
*num_children = owner()->PlatformChildCount(); |
*unique_id = -owner()->unique_id(); |
- if (owner()->GetRole() == ui::AX_ROLE_ROOT_WEB_AREA || |
- owner()->GetRole() == ui::AX_ROLE_WEB_AREA) { |
+ if (owner()->IsDocument()) { |
*node_type = NODETYPE_DOCUMENT; |
} else if (owner()->IsTextOnlyObject()) { |
*node_type = NODETYPE_TEXT; |
@@ -3696,8 +3695,7 @@ void BrowserAccessibilityComWin::UpdateStep1ComputeWinAttributes() { |
win_attributes_->ia2_attributes.push_back(L"valuetext:" + value); |
} else { |
// On Windows, the value of a document should be its url. |
- if (owner()->GetRole() == ui::AX_ROLE_ROOT_WEB_AREA || |
- owner()->GetRole() == ui::AX_ROLE_WEB_AREA) { |
+ if (owner()->IsDocument()) { |
value = base::UTF8ToUTF16(Manager()->GetTreeData().url); |
} |
// If this doesn't have a value and is linked then set its value to the url |
@@ -4944,9 +4942,22 @@ void BrowserAccessibilityComWin::InitRoleAndState() { |
if (owner()->HasState(ui::AX_STATE_HORIZONTAL)) |
ia2_state |= IA2_STATE_HORIZONTAL; |
- if (owner()->HasState(ui::AX_STATE_EDITABLE)) |
+ const bool is_editable = owner()->HasState(ui::AX_STATE_EDITABLE); |
+ if (is_editable) |
ia2_state |= IA2_STATE_EDITABLE; |
+ if (owner()->IsRichTextControl() || owner()->IsEditField()) { |
+ // Support multi/single line states if root editable or appropriate role. |
+ // We support the edit box roles even if the area is not actually editable, |
+ // because it is technically feasible for JS to implement the edit box |
+ // by controlling selection. |
+ if (owner()->HasState(ui::AX_STATE_MULTILINE)) { |
+ ia2_state |= IA2_STATE_MULTI_LINE; |
+ } else { |
+ ia2_state |= IA2_STATE_SINGLE_LINE; |
+ } |
+ } |
+ |
if (!owner()->GetStringAttribute(ui::AX_ATTR_AUTO_COMPLETE).empty()) |
ia2_state |= IA2_STATE_SUPPORTS_AUTOCOMPLETION; |
@@ -5319,11 +5330,6 @@ void BrowserAccessibilityComWin::InitRoleAndState() { |
case ui::AX_ROLE_TEXT_FIELD: |
case ui::AX_ROLE_SEARCH_BOX: |
ia_role = ROLE_SYSTEM_TEXT; |
- if (owner()->HasState(ui::AX_STATE_MULTILINE)) { |
- ia2_state |= IA2_STATE_MULTI_LINE; |
- } else { |
- ia2_state |= IA2_STATE_SINGLE_LINE; |
- } |
ia2_state |= IA2_STATE_SELECTABLE_TEXT; |
break; |
case ui::AX_ROLE_ABBR: |