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 792adc4440d08fa643c148f700ed9353ac1d041c..df048d5ab18734eebb9a30913f5479872198aafa 100644 |
| --- a/content/browser/accessibility/browser_accessibility_win.cc |
| +++ b/content/browser/accessibility/browser_accessibility_win.cc |
| @@ -457,7 +457,8 @@ STDMETHODIMP BrowserAccessibilityWin::get_accName(VARIANT var_id, BSTR* name) { |
| if (!target) |
| return E_INVALIDARG; |
| - string16 name_str = target->name_; |
| + std::string name_str; |
| + target->GetStringAttribute(AccessibilityNodeData::ATTR_NAME, &name_str); |
| // If the name is empty, see if it's labeled by another element. |
| if (name_str.empty()) { |
| @@ -474,7 +475,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_accName(VARIANT var_id, BSTR* name) { |
| if (name_str.empty()) |
| return S_FALSE; |
| - *name = SysAllocString(name_str.c_str()); |
| + *name = SysAllocString(UTF8ToUTF16(name_str).c_str()); |
| DCHECK(*name); |
| return S_OK; |
| @@ -557,10 +558,32 @@ STDMETHODIMP BrowserAccessibilityWin::get_accValue(VARIANT var_id, |
| if (!target) |
| return E_INVALIDARG; |
| - *value = SysAllocString(target->value_.c_str()); |
| + if (ia_role_ == ROLE_SYSTEM_PROGRESSBAR || |
| + ia_role_ == ROLE_SYSTEM_SCROLLBAR || |
| + ia_role_ == ROLE_SYSTEM_SLIDER) { |
| + string16 value_text = GetValueText(); |
| + *value = SysAllocString(value_text.c_str()); |
| + DCHECK(*value); |
| + return S_OK; |
| + } |
| - DCHECK(*value); |
| - return S_OK; |
| + // Expose color well value. |
| + if (ia2_role_ == IA2_ROLE_COLOR_CHOOSER) { |
|
aboxhall
2013/08/07 17:16:09
Does this block belong in GetValueText() as well?
dmazzoni
2013/08/07 17:48:18
Possibly, but that would be a change in functional
|
| + int r, g, b; |
| + GetIntAttribute(AccessibilityNodeData::ATTR_COLOR_VALUE_RED, &r); |
| + GetIntAttribute(AccessibilityNodeData::ATTR_COLOR_VALUE_GREEN, &g); |
| + GetIntAttribute(AccessibilityNodeData::ATTR_COLOR_VALUE_BLUE, &b); |
| + string16 value_text; |
| + value_text = base::IntToString16((r * 100) / 255) + L"% red " + |
| + base::IntToString16((g * 100) / 255) + L"% green " + |
| + base::IntToString16((b * 100) / 255) + L"% blue"; |
| + *value = SysAllocString(value_text.c_str()); |
| + DCHECK(*value); |
| + return S_OK; |
| + } |
| + |
| + return target->GetStringAttributeAsBstr( |
| + AccessibilityNodeData::ATTR_VALUE, value); |
| } |
| STDMETHODIMP BrowserAccessibilityWin::get_accHelpTopic(BSTR* help_file, |
| @@ -1014,9 +1037,11 @@ STDMETHODIMP BrowserAccessibilityWin::get_accessibleAt( |
| if (row < 0 || row >= rows || column < 0 || column >= columns) |
| return E_INVALIDARG; |
| - DCHECK_EQ(columns * rows, static_cast<int>(cell_ids_.size())); |
| + const std::vector<int32>& cell_ids = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_CELL_IDS); |
| + DCHECK_EQ(columns * rows, static_cast<int>(cell_ids.size())); |
| - int cell_id = cell_ids_[row * columns + column]; |
| + int cell_id = cell_ids[row * columns + column]; |
| BrowserAccessibilityWin* cell = GetFromRendererID(cell_id); |
| if (cell) { |
| *accessible = static_cast<IAccessible*>(cell->NewReference()); |
| @@ -1061,10 +1086,14 @@ STDMETHODIMP BrowserAccessibilityWin::get_childIndex(long row, |
| if (row < 0 || row >= rows || column < 0 || column >= columns) |
| return E_INVALIDARG; |
| - DCHECK_EQ(columns * rows, static_cast<int>(cell_ids_.size())); |
| - int cell_id = cell_ids_[row * columns + column]; |
| - for (size_t i = 0; i < unique_cell_ids_.size(); ++i) { |
| - if (unique_cell_ids_[i] == cell_id) { |
| + const std::vector<int32>& cell_ids = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_CELL_IDS); |
| + const std::vector<int32>& unique_cell_ids = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); |
| + DCHECK_EQ(columns * rows, static_cast<int>(cell_ids.size())); |
| + int cell_id = cell_ids[row * columns + column]; |
| + for (size_t i = 0; i < unique_cell_ids.size(); ++i) { |
| + if (unique_cell_ids[i] == cell_id) { |
| *cell_index = (long)i; |
| return S_OK; |
| } |
| @@ -1094,13 +1123,17 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnDescription(long column, |
| if (column < 0 || column >= columns) |
| return E_INVALIDARG; |
| + const std::vector<int32>& cell_ids = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_CELL_IDS); |
| for (int i = 0; i < rows; ++i) { |
| - int cell_id = cell_ids_[i * columns + column]; |
| + int cell_id = cell_ids[i * columns + column]; |
| BrowserAccessibilityWin* cell = static_cast<BrowserAccessibilityWin*>( |
| manager_->GetFromRendererID(cell_id)); |
| if (cell && cell->role_ == AccessibilityNodeData::ROLE_COLUMN_HEADER) { |
| - if (cell->name_.size() > 0) { |
| - *description = SysAllocString(cell->name_.c_str()); |
| + string16 cell_name; |
| + cell->GetStringAttribute(AccessibilityNodeData::ATTR_NAME, &cell_name); |
| + if (cell_name.size() > 0) { |
| + *description = SysAllocString(cell_name.c_str()); |
| return S_OK; |
| } |
| @@ -1135,7 +1168,9 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnExtentAt( |
| if (row < 0 || row >= rows || column < 0 || column >= columns) |
| return E_INVALIDARG; |
| - int cell_id = cell_ids_[row * columns + column]; |
| + const std::vector<int32>& cell_ids = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_CELL_IDS); |
| + int cell_id = cell_ids[row * columns + column]; |
| BrowserAccessibilityWin* cell = static_cast<BrowserAccessibilityWin*>( |
| manager_->GetFromRendererID(cell_id)); |
| int colspan; |
| @@ -1165,13 +1200,15 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnIndex(long cell_index, |
| if (!column_index) |
| return E_INVALIDARG; |
| - int cell_id_count = static_cast<int>(unique_cell_ids_.size()); |
| + const std::vector<int32>& unique_cell_ids = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); |
| + int cell_id_count = static_cast<int>(unique_cell_ids.size()); |
| if (cell_index < 0) |
| return E_INVALIDARG; |
| if (cell_index >= cell_id_count) |
| return S_FALSE; |
| - int cell_id = unique_cell_ids_[cell_index]; |
| + int cell_id = unique_cell_ids[cell_index]; |
| BrowserAccessibilityWin* cell = |
| manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| int col_index; |
| @@ -1273,13 +1310,17 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowDescription(long row, |
| if (row < 0 || row >= rows) |
| return E_INVALIDARG; |
| + const std::vector<int32>& cell_ids = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_CELL_IDS); |
| for (int i = 0; i < columns; ++i) { |
| - int cell_id = cell_ids_[row * columns + i]; |
| + int cell_id = cell_ids[row * columns + i]; |
| BrowserAccessibilityWin* cell = |
| manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| if (cell && cell->role_ == AccessibilityNodeData::ROLE_ROW_HEADER) { |
| - if (cell->name_.size() > 0) { |
| - *description = SysAllocString(cell->name_.c_str()); |
| + string16 cell_name; |
| + cell->GetStringAttribute(AccessibilityNodeData::ATTR_NAME, &cell_name); |
| + if (cell_name.size() > 0) { |
| + *description = SysAllocString(cell_name.c_str()); |
| return S_OK; |
| } |
| @@ -1313,7 +1354,9 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowExtentAt(long row, |
| if (row < 0 || row >= rows || column < 0 || column >= columns) |
| return E_INVALIDARG; |
| - int cell_id = cell_ids_[row * columns + column]; |
| + const std::vector<int32>& cell_ids = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_CELL_IDS); |
| + int cell_id = cell_ids[row * columns + column]; |
| BrowserAccessibilityWin* cell = |
| manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| int rowspan; |
| @@ -1343,13 +1386,15 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowIndex(long cell_index, |
| if (!row_index) |
| return E_INVALIDARG; |
| - int cell_id_count = static_cast<int>(unique_cell_ids_.size()); |
| + const std::vector<int32>& unique_cell_ids = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); |
| + int cell_id_count = static_cast<int>(unique_cell_ids.size()); |
| if (cell_index < 0) |
| return E_INVALIDARG; |
| if (cell_index >= cell_id_count) |
| return S_FALSE; |
| - int cell_id = unique_cell_ids_[cell_index]; |
| + int cell_id = unique_cell_ids[cell_index]; |
| BrowserAccessibilityWin* cell = |
| manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| int cell_row_index; |
| @@ -1470,13 +1515,15 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowColumnExtentsAtIndex( |
| if (!row || !column || !row_extents || !column_extents || !is_selected) |
| return E_INVALIDARG; |
| - int cell_id_count = static_cast<int>(unique_cell_ids_.size()); |
| + const std::vector<int32>& unique_cell_ids = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); |
| + int cell_id_count = static_cast<int>(unique_cell_ids.size()); |
| if (index < 0) |
| return E_INVALIDARG; |
| if (index >= cell_id_count) |
| return S_FALSE; |
| - int cell_id = unique_cell_ids_[index]; |
| + int cell_id = unique_cell_ids[index]; |
| BrowserAccessibilityWin* cell = |
| manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| int rowspan; |
| @@ -1610,8 +1657,11 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnHeaderCells( |
| if (columns <= 0 || rows <= 0 || column < 0 || column >= columns) |
| return S_FALSE; |
| + const std::vector<int32>& cell_ids = table->GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_CELL_IDS); |
| + |
| for (int i = 0; i < rows; ++i) { |
| - int cell_id = table->cell_ids()[i * columns + column]; |
| + int cell_id = cell_ids[i * columns + column]; |
| BrowserAccessibilityWin* cell = |
| manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| if (cell && cell->role_ == AccessibilityNodeData::ROLE_COLUMN_HEADER) |
| @@ -1622,7 +1672,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnHeaderCells( |
| (*n_column_header_cells) * sizeof(cell_accessibles[0]))); |
| int index = 0; |
| for (int i = 0; i < rows; ++i) { |
| - int cell_id = table->cell_ids()[i * columns + column]; |
| + int cell_id = cell_ids[i * columns + column]; |
| BrowserAccessibilityWin* cell = |
| manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| if (cell && cell->role_ == AccessibilityNodeData::ROLE_COLUMN_HEADER) { |
| @@ -1706,8 +1756,11 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowHeaderCells( |
| if (columns <= 0 || rows <= 0 || row < 0 || row >= rows) |
| return S_FALSE; |
| + const std::vector<int32>& cell_ids = table->GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_CELL_IDS); |
| + |
| for (int i = 0; i < columns; ++i) { |
| - int cell_id = table->cell_ids()[row * columns + i]; |
| + int cell_id = cell_ids[row * columns + i]; |
| BrowserAccessibilityWin* cell = |
| manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| if (cell && cell->role_ == AccessibilityNodeData::ROLE_ROW_HEADER) |
| @@ -1718,7 +1771,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowHeaderCells( |
| (*n_row_header_cells) * sizeof(cell_accessibles[0]))); |
| int index = 0; |
| for (int i = 0; i < columns; ++i) { |
| - int cell_id = table->cell_ids()[row * columns + i]; |
| + int cell_id = cell_ids[row * columns + i]; |
| BrowserAccessibilityWin* cell = |
| manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| if (cell && cell->role_ == AccessibilityNodeData::ROLE_ROW_HEADER) { |
| @@ -2340,7 +2393,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_nodeInfo( |
| *node_name = NULL; |
| *name_space_id = 0; |
| - *node_value = SysAllocString(value_.c_str()); |
| + GetStringAttributeAsBstr(AccessibilityNodeData::ATTR_VALUE, node_value); |
| *num_children = children_.size(); |
| *unique_id = unique_id_win_; |
| @@ -2373,9 +2426,11 @@ STDMETHODIMP BrowserAccessibilityWin::get_attributes( |
| *num_attribs = html_attributes_.size(); |
| for (unsigned short i = 0; i < *num_attribs; ++i) { |
| - attrib_names[i] = SysAllocString(html_attributes_[i].first.c_str()); |
| + attrib_names[i] = SysAllocString( |
| + UTF8ToUTF16(html_attributes_[i].first).c_str()); |
| name_space_id[i] = 0; |
| - attrib_values[i] = SysAllocString(html_attributes_[i].second.c_str()); |
| + attrib_values[i] = SysAllocString( |
| + UTF8ToUTF16(html_attributes_[i].second).c_str()); |
| } |
| return S_OK; |
| } |
| @@ -2394,10 +2449,11 @@ STDMETHODIMP BrowserAccessibilityWin::get_attributesForNames( |
| for (unsigned short i = 0; i < num_attribs; ++i) { |
| name_space_id[i] = 0; |
| bool found = false; |
| - string16 name = (LPCWSTR)attrib_names[i]; |
| + std::string name = UTF16ToUTF8((LPCWSTR)attrib_names[i]); |
| for (unsigned int j = 0; j < html_attributes_.size(); ++j) { |
| if (html_attributes_[j].first == name) { |
| - attrib_values[i] = SysAllocString(html_attributes_[j].second.c_str()); |
| + attrib_values[i] = SysAllocString( |
| + UTF8ToUTF16(html_attributes_[j].second).c_str()); |
| found = true; |
| break; |
| } |
| @@ -2579,12 +2635,8 @@ STDMETHODIMP BrowserAccessibilityWin::get_domText(BSTR* dom_text) { |
| if (!dom_text) |
| return E_INVALIDARG; |
| - if (name_.empty()) |
| - return S_FALSE; |
| - |
| - *dom_text = SysAllocString(name_.c_str()); |
| - DCHECK(*dom_text); |
| - return S_OK; |
| + return GetStringAttributeAsBstr( |
| + AccessibilityNodeData::ATTR_NAME, dom_text); |
| } |
| // |
| @@ -2773,24 +2825,7 @@ void BrowserAccessibilityWin::PreInitialize() { |
| if (ia_role_ == ROLE_SYSTEM_PROGRESSBAR || |
| ia_role_ == ROLE_SYSTEM_SCROLLBAR || |
| ia_role_ == ROLE_SYSTEM_SLIDER) { |
| - float fval; |
| - if (value_.empty() && |
| - GetFloatAttribute(AccessibilityNodeData::ATTR_VALUE_FOR_RANGE, &fval)) { |
| - // TODO(dmazzoni): Use ICU to localize this? |
| - value_ = UTF8ToUTF16(base::DoubleToString(fval)); |
| - } |
| - ia2_attributes_.push_back(L"valuetext:" + value_); |
| - } |
| - |
| - // Expose color well value. |
| - if (ia2_role_ == IA2_ROLE_COLOR_CHOOSER) { |
|
aboxhall
2013/08/07 17:16:09
I guess this was never doing anything, but should
dmazzoni
2013/08/07 17:48:18
It's just being moved.
The main reason I moved it
|
| - int r, g, b; |
| - GetIntAttribute(AccessibilityNodeData::ATTR_COLOR_VALUE_RED, &r); |
| - GetIntAttribute(AccessibilityNodeData::ATTR_COLOR_VALUE_GREEN, &g); |
| - GetIntAttribute(AccessibilityNodeData::ATTR_COLOR_VALUE_BLUE, &b); |
| - value_ = base::IntToString16((r * 100) / 255) + L"% red " + |
| - base::IntToString16((g * 100) / 255) + L"% green " + |
| - base::IntToString16((b * 100) / 255) + L"% blue"; |
| + ia2_attributes_.push_back(L"valuetext:" + GetValueText()); |
| } |
| // Expose table cell index. |
| @@ -2799,7 +2834,8 @@ void BrowserAccessibilityWin::PreInitialize() { |
| while (table && table->role() != AccessibilityNodeData::ROLE_TABLE) |
| table = table->parent(); |
| if (table) { |
| - const std::vector<int32>& unique_cell_ids = table->unique_cell_ids(); |
| + const std::vector<int32>& unique_cell_ids = table->GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); |
| for (size_t i = 0; i < unique_cell_ids.size(); ++i) { |
| if (unique_cell_ids[i] == renderer_id_) { |
| ia2_attributes_.push_back( |
| @@ -2830,11 +2866,12 @@ void BrowserAccessibilityWin::PreInitialize() { |
| // always returns the primary name in "name" and the secondary name, |
| // if any, in "description". |
| - string16 description, help, title_attr; |
| + std::string name, value, description, help, title_attr; |
| int title_elem_id = 0; |
| - GetIntAttribute(AccessibilityNodeData::ATTR_TITLE_UI_ELEMENT, &title_elem_id); |
| + GetStringAttribute(AccessibilityNodeData::ATTR_NAME, &name); |
| GetStringAttribute(AccessibilityNodeData::ATTR_DESCRIPTION, &description); |
| GetStringAttribute(AccessibilityNodeData::ATTR_HELP, &help); |
| + GetIntAttribute(AccessibilityNodeData::ATTR_TITLE_UI_ELEMENT, &title_elem_id); |
| // WebKit annoyingly puts the title in the description if there's no other |
| // description, which just confuses the rest of the logic. Put it back. |
| @@ -2844,42 +2881,40 @@ void BrowserAccessibilityWin::PreInitialize() { |
| help.empty()) { |
| help = description; |
| description.clear(); |
| - string_attributes_[AccessibilityNodeData::ATTR_DESCRIPTION].clear(); |
| - string_attributes_[AccessibilityNodeData::ATTR_HELP] = help; |
| } |
| // Now implement the main logic: the descripion should become the name if |
| // it's nonempty, and the help should become the description if |
| // there's no description - or the name if there's no name or description. |
| if (!description.empty()) { |
| - name_ = description; |
| + name = description; |
| description.clear(); |
| - string_attributes_[AccessibilityNodeData::ATTR_DESCRIPTION] = description; |
| } |
| if (!help.empty() && description.empty()) { |
| description = help; |
| - string_attributes_[AccessibilityNodeData::ATTR_DESCRIPTION] = help; |
| - string_attributes_[AccessibilityNodeData::ATTR_HELP].clear(); |
| + help.clear(); |
| } |
| if (!description.empty() && name_.empty() && !title_elem_id) { |
| - name_ = description; |
| + name = description; |
| description.clear(); |
| - string_attributes_[AccessibilityNodeData::ATTR_DESCRIPTION].clear(); |
| } |
| // If it's a text field, also consider the placeholder. |
| - string16 placeholder; |
| + std::string placeholder; |
| if (role_ == AccessibilityNodeData::ROLE_TEXT_FIELD && |
| HasState(AccessibilityNodeData::STATE_FOCUSABLE) && |
| GetHtmlAttribute("placeholder", &placeholder)) { |
| if (name_.empty() && !title_elem_id) { |
| - name_ = placeholder; |
| + name = placeholder; |
| } else if (description.empty()) { |
| description = placeholder; |
| - string_attributes_[AccessibilityNodeData::ATTR_DESCRIPTION] = description; |
| } |
| } |
| + SetStringAttribute(AccessibilityNodeData::ATTR_NAME, name); |
| + SetStringAttribute(AccessibilityNodeData::ATTR_DESCRIPTION, description); |
| + SetStringAttribute(AccessibilityNodeData::ATTR_HELP, help); |
| + |
| // On Windows, the value of a document should be its url. |
| if (role_ == AccessibilityNodeData::ROLE_ROOT_WEB_AREA || |
| role_ == AccessibilityNodeData::ROLE_WEB_AREA) { |
| @@ -2931,7 +2966,9 @@ void BrowserAccessibilityWin::PostInitialize() { |
| for (unsigned int i = 0; i < children().size(); ++i) { |
| BrowserAccessibility* child = children()[i]; |
| if (child->role() == AccessibilityNodeData::ROLE_STATIC_TEXT) { |
| - hypertext_ += child->name(); |
| + string16 name; |
| + child->GetStringAttribute(AccessibilityNodeData::ATTR_NAME, &name); |
| + hypertext_ += name; |
| } else { |
| hyperlink_offset_to_index_[hypertext_.size()] = hyperlinks_.size(); |
| hypertext_ += kEmbeddedCharacter; |
| @@ -3074,11 +3111,25 @@ void BrowserAccessibilityWin::IntAttributeToIA2( |
| base::IntToString16(value)); |
| } |
| -const string16& BrowserAccessibilityWin::TextForIAccessibleText() { |
| +string16 BrowserAccessibilityWin::GetValueText() { |
|
aboxhall
2013/07/31 18:34:47
Where is this method used?
dmazzoni
2013/08/06 17:36:34
It's private, it's called by both get_accValue, an
|
| + float fval; |
| + string16 value; |
| + GetStringAttribute(AccessibilityNodeData::ATTR_VALUE, &value); |
| + if (value.empty() && |
| + GetFloatAttribute(AccessibilityNodeData::ATTR_VALUE_FOR_RANGE, &fval)) { |
| + value = UTF8ToUTF16(base::DoubleToString(fval)); |
| + } |
| + return value; |
| +} |
| + |
| +string16 BrowserAccessibilityWin::TextForIAccessibleText() { |
| + string16 name, value; |
| + GetStringAttribute(AccessibilityNodeData::ATTR_NAME, &name); |
| + GetStringAttribute(AccessibilityNodeData::ATTR_VALUE, &value); |
| if (IsEditableText()) |
| - return value_; |
| + return value; |
| return (role_ == AccessibilityNodeData::ROLE_STATIC_TEXT) ? |
| - name_ : hypertext_; |
| + name : hypertext_; |
| } |
| void BrowserAccessibilityWin::HandleSpecialTextOffset(const string16& text, |
| @@ -3111,8 +3162,10 @@ LONG BrowserAccessibilityWin::FindBoundary( |
| ui::TextBoundaryDirection direction) { |
| HandleSpecialTextOffset(text, &start_offset); |
| ui::TextBoundaryType boundary = IA2TextBoundaryToTextBoundary(ia2_boundary); |
| + const std::vector<int32>& line_breaks = GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_LINE_BREAKS); |
| return ui::FindAccessibleTextBoundary( |
| - text, line_breaks_, boundary, start_offset, direction); |
| + text, line_breaks, boundary, start_offset, direction); |
| } |
| BrowserAccessibilityWin* BrowserAccessibilityWin::GetFromRendererID( |