| 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 76d15c781ee1483f5875d06a18d728e1b57ece95..74e7f11e9007eb663a1439485e688d45cbe89219 100644
|
| --- a/content/browser/accessibility/browser_accessibility_win.cc
|
| +++ b/content/browser/accessibility/browser_accessibility_win.cc
|
| @@ -2648,10 +2648,10 @@ STDMETHODIMP BrowserAccessibilityWin::get_nodeInfo(
|
| *num_children = PlatformChildCount();
|
| *unique_id = unique_id_win_;
|
|
|
| - if (ia_role() == ROLE_SYSTEM_DOCUMENT) {
|
| + if (GetRole() == ui::AX_ROLE_ROOT_WEB_AREA ||
|
| + GetRole() == ui::AX_ROLE_WEB_AREA) {
|
| *node_type = NODETYPE_DOCUMENT;
|
| - } else if (ia_role() == ROLE_SYSTEM_TEXT &&
|
| - ((ia2_state() & IA2_STATE_EDITABLE) == 0)) {
|
| + } else if (IsTextOnlyObject()) {
|
| *node_type = NODETYPE_TEXT;
|
| } else {
|
| *node_type = NODETYPE_ELEMENT;
|
| @@ -3753,7 +3753,8 @@ void BrowserAccessibilityWin::GetSelectionOffsets(
|
| int* selection_start, int* selection_end) const {
|
| DCHECK(selection_start && selection_end);
|
|
|
| - if (GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START, selection_start) &&
|
| + if (IsEditableText() && !HasState(ui::AX_STATE_RICHLY_EDITABLE) &&
|
| + GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START, selection_start) &&
|
| GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, selection_end)) {
|
| return;
|
| }
|
| @@ -3767,8 +3768,11 @@ void BrowserAccessibilityWin::GetSelectionOffsets(
|
| std::swap(*selection_start, *selection_end);
|
|
|
| // IA2 Spec says that the end of the selection should be after the last
|
| - // embedded object character that is part of the selection.
|
| - ++(*selection_end);
|
| + // embedded object character that is part of the selection, if there is one.
|
| + if (hyperlink_offset_to_index().find(*selection_end) !=
|
| + hyperlink_offset_to_index().end()) {
|
| + ++(*selection_end);
|
| + }
|
| }
|
|
|
| base::string16 BrowserAccessibilityWin::GetNameRecursive() const {
|
| @@ -4012,10 +4016,7 @@ void BrowserAccessibilityWin::InitRoleAndState() {
|
| ia_state |= STATE_SYSTEM_HOTTRACKED;
|
| }
|
|
|
| - // WebKit marks everything as readonly unless it's editable text, so if it's
|
| - // not readonly, mark it as editable now. The final computation of the
|
| - // READONLY state for MSAA is below, after the switch.
|
| - if (!HasState(ui::AX_STATE_READ_ONLY))
|
| + if (IsEditableText())
|
| ia2_state |= IA2_STATE_EDITABLE;
|
|
|
| if (GetBoolAttribute(ui::AX_ATTR_BUTTON_MIXED))
|
| @@ -4427,7 +4428,6 @@ void BrowserAccessibilityWin::InitRoleAndState() {
|
| ia2_state |= IA2_STATE_MULTI_LINE;
|
| else
|
| ia2_state |= IA2_STATE_SINGLE_LINE;
|
| - ia2_state |= IA2_STATE_EDITABLE;
|
| ia2_state |= IA2_STATE_SELECTABLE_TEXT;
|
| break;
|
| case ui::AX_ROLE_TIME:
|
|
|