#include "ui/accessibility/ax_text_utils.h"
#include "ui/base/win/accessibility_ids_win.h"
#include "ui/base/win/accessibility_misc_utils.h"
+#include "ui/base/win/atl_module.h"
namespace content {
BrowserAccessibilityManager* manager = owner_->manager();
for (long i = *n_targets - 1; i >= 0; --i) {
- BrowserAccessibility* result = manager->GetFromRendererID(target_ids_[i]);
+ BrowserAccessibility* result = manager->GetFromID(target_ids_[i]);
if (!result || !result->instance_active()) {
*n_targets = 0;
break;
BrowserAccessibilityManager* manager = owner_->manager();
BrowserAccessibility* result =
- manager->GetFromRendererID(target_ids_[target_index]);
+ manager->GetFromID(target_ids_[target_index]);
if (!result || !result->instance_active())
return E_FAIL;
// static
BrowserAccessibility* BrowserAccessibility::Create() {
+ ui::win::CreateATLModuleIfNeeded();
CComObject<BrowserAccessibilityWin>* instance;
HRESULT hr = CComObject<BrowserAccessibilityWin>::CreateInstance(&instance);
DCHECK(SUCCEEDED(hr));
if (target->GetIntAttribute(ui::AX_ATTR_TITLE_UI_ELEMENT,
&title_elem_id)) {
BrowserAccessibility* title_elem =
- manager()->GetFromRendererID(title_elem_id);
+ manager()->GetFromID(title_elem_id);
if (title_elem)
name_str = title_elem->GetTextRecursive();
}
if (!disp_parent)
return E_INVALIDARG;
- IAccessible* parent_obj = parent()->ToBrowserAccessibilityWin();
+ IAccessible* parent_obj = GetParent()->ToBrowserAccessibilityWin();
if (parent_obj == NULL) {
// This happens if we're the root of the tree;
// return the IAccessible for the window.
parent_obj =
- manager()->ToBrowserAccessibilityManagerWin()->parent_iaccessible();
+ manager()->ToBrowserAccessibilityManagerWin()->GetParentIAccessible();
// |parent| can only be NULL if the manager was created before the parent
// IAccessible was known and it wasn't subsequently set before a client
// requested it. This has been fixed. |parent| may also be NULL during
if (!instance_active())
return E_FAIL;
- if (blink_role() != ui::AX_ROLE_LIST_BOX)
+ if (GetRole() != ui::AX_ROLE_LIST_BOX)
return E_NOTIMPL;
unsigned long selected_count = 0;
- for (size_t i = 0; i < children().size(); ++i) {
- if (children()[i]->HasState(ui::AX_STATE_SELECTED))
+ for (size_t i = 0; i < InternalChildCount(); ++i) {
+ if (InternalGetChild(i)->HasState(ui::AX_STATE_SELECTED))
++selected_count;
}
}
if (selected_count == 1) {
- for (size_t i = 0; i < children().size(); ++i) {
- if (children()[i]->HasState(ui::AX_STATE_SELECTED)) {
+ for (size_t i = 0; i < InternalChildCount(); ++i) {
+ if (InternalGetChild(i)->HasState(ui::AX_STATE_SELECTED)) {
selected->vt = VT_DISPATCH;
selected->pdispVal =
- children()[i]->ToBrowserAccessibilityWin()->NewReference();
+ InternalGetChild(i)->ToBrowserAccessibilityWin()->NewReference();
return S_OK;
}
}
new base::win::EnumVariant(selected_count);
enum_variant->AddRef();
unsigned long index = 0;
- for (size_t i = 0; i < children().size(); ++i) {
- if (children()[i]->HasState(ui::AX_STATE_SELECTED)) {
+ for (size_t i = 0; i < InternalChildCount(); ++i) {
+ if (InternalGetChild(i)->HasState(ui::AX_STATE_SELECTED)) {
enum_variant->ItemAt(index)->vt = VT_DISPATCH;
enum_variant->ItemAt(index)->pdispVal =
- children()[i]->ToBrowserAccessibilityWin()->NewReference();
+ InternalGetChild(i)->ToBrowserAccessibilityWin()->NewReference();
++index;
}
}
if (!window_handle)
return E_INVALIDARG;
- *window_handle = manager()->ToBrowserAccessibilityManagerWin()->parent_hwnd();
+ *window_handle =
+ manager()->ToBrowserAccessibilityManagerWin()->GetParentHWND();
+ if (!*window_handle)
+ return E_FAIL;
+
return S_OK;
}
if (!index_in_parent)
return E_INVALIDARG;
- *index_in_parent = this->index_in_parent();
+ *index_in_parent = this->GetIndexInParent();
return S_OK;
}
if (!instance_active())
return E_FAIL;
- gfx::Rect r = location();
+ gfx::Rect r = GetLocation();
switch(scroll_type) {
case IA2_SCROLL_TYPE_TOP_LEFT:
manager()->ScrollToMakeVisible(*this, gfx::Rect(r.x(), r.y(), 0, 0));
if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) {
scroll_to -= manager()->GetViewBounds().OffsetFromOrigin();
} else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) {
- if (parent())
- scroll_to += parent()->location().OffsetFromOrigin();
+ if (GetParent())
+ scroll_to += GetParent()->GetLocation().OffsetFromOrigin();
} else {
return E_INVALIDARG;
}
if (!group_level || !similar_items_in_group || !position_in_group)
return E_INVALIDARG;
- if (blink_role() == ui::AX_ROLE_LIST_BOX_OPTION &&
- parent() &&
- parent()->role() == ui::AX_ROLE_LIST_BOX) {
+ if (GetRole() == ui::AX_ROLE_LIST_BOX_OPTION &&
+ GetParent() &&
+ GetParent()->GetRole() == ui::AX_ROLE_LIST_BOX) {
*group_level = 0;
- *similar_items_in_group = parent()->PlatformChildCount();
- *position_in_group = index_in_parent() + 1;
+ *similar_items_in_group = GetParent()->PlatformChildCount();
+ *position_in_group = GetIndexInParent() + 1;
return S_OK;
}
if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) {
HWND parent_hwnd =
- manager()->ToBrowserAccessibilityManagerWin()->parent_hwnd();
+ manager()->ToBrowserAccessibilityManagerWin()->GetParentHWND();
+ if (!parent_hwnd)
+ return E_FAIL;
POINT top_left = {0, 0};
::ClientToScreen(parent_hwnd, &top_left);
- *x = location().x() + top_left.x;
- *y = location().y() + top_left.y;
+ *x = GetLocation().x() + top_left.x;
+ *y = GetLocation().y() + top_left.y;
} else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) {
- *x = location().x();
- *y = location().y();
- if (parent()) {
- *x -= parent()->location().x();
- *y -= parent()->location().y();
+ *x = GetLocation().x();
+ *y = GetLocation().y();
+ if (GetParent()) {
+ *x -= GetParent()->GetLocation().x();
+ *y -= GetParent()->GetLocation().y();
}
} else {
return E_INVALIDARG;
if (!height || !width)
return E_INVALIDARG;
- *height = location().height();
- *width = location().width();
+ *height = GetLocation().height();
+ *width = GetLocation().width();
return S_OK;
}
DCHECK_EQ(columns * rows, static_cast<int>(cell_ids.size()));
int cell_id = cell_ids[row * columns + column];
- BrowserAccessibilityWin* cell = GetFromRendererID(cell_id);
+ BrowserAccessibilityWin* cell = GetFromID(cell_id);
if (cell) {
*accessible = static_cast<IAccessible*>(cell->NewReference());
return S_OK;
for (int i = 0; i < rows; ++i) {
int cell_id = cell_ids[i * columns + column];
BrowserAccessibilityWin* cell = static_cast<BrowserAccessibilityWin*>(
- manager()->GetFromRendererID(cell_id));
- if (cell && cell->blink_role() == ui::AX_ROLE_COLUMN_HEADER) {
+ manager()->GetFromID(cell_id));
+ if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) {
base::string16 cell_name = cell->GetString16Attribute(
ui::AX_ATTR_NAME);
if (cell_name.size() > 0) {
ui::AX_ATTR_CELL_IDS);
int cell_id = cell_ids[row * columns + column];
BrowserAccessibilityWin* cell = static_cast<BrowserAccessibilityWin*>(
- manager()->GetFromRendererID(cell_id));
+ manager()->GetFromID(cell_id));
int colspan;
if (cell &&
cell->GetIntAttribute(
int cell_id = unique_cell_ids[cell_index];
BrowserAccessibilityWin* cell =
- manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
+ manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
int col_index;
if (cell &&
cell->GetIntAttribute(
for (int i = 0; i < columns; ++i) {
int cell_id = cell_ids[row * columns + i];
BrowserAccessibilityWin* cell =
- manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
- if (cell && cell->blink_role() == ui::AX_ROLE_ROW_HEADER) {
+ manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
+ if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) {
base::string16 cell_name = cell->GetString16Attribute(
ui::AX_ATTR_NAME);
if (cell_name.size() > 0) {
ui::AX_ATTR_CELL_IDS);
int cell_id = cell_ids[row * columns + column];
BrowserAccessibilityWin* cell =
- manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
+ manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
int rowspan;
if (cell &&
cell->GetIntAttribute(
int cell_id = unique_cell_ids[cell_index];
BrowserAccessibilityWin* cell =
- manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
+ manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
int cell_row_index;
if (cell &&
cell->GetIntAttribute(
int cell_id = unique_cell_ids[index];
BrowserAccessibilityWin* cell =
- manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
+ manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
int rowspan;
int colspan;
if (cell &&
return S_FALSE;
}
- BrowserAccessibility* table = parent();
- while (table && table->role() != ui::AX_ROLE_TABLE)
- table = table->parent();
+ BrowserAccessibility* table = GetParent();
+ while (table && table->GetRole() != ui::AX_ROLE_TABLE)
+ table = table->GetParent();
if (!table) {
NOTREACHED();
return S_FALSE;
for (int i = 0; i < rows; ++i) {
int cell_id = cell_ids[i * columns + column];
BrowserAccessibilityWin* cell =
- manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
- if (cell && cell->blink_role() == ui::AX_ROLE_COLUMN_HEADER)
+ manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
+ if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER)
(*n_column_header_cells)++;
}
int index = 0;
for (int i = 0; i < rows; ++i) {
int cell_id = cell_ids[i * columns + column];
- BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id);
- if (cell && cell->role() == ui::AX_ROLE_COLUMN_HEADER) {
+ BrowserAccessibility* cell = manager()->GetFromID(cell_id);
+ if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) {
(*cell_accessibles)[index] = static_cast<IAccessible*>(
cell->ToBrowserAccessibilityWin()->NewReference());
++index;
return S_FALSE;
}
- BrowserAccessibility* table = parent();
- while (table && table->role() != ui::AX_ROLE_TABLE)
- table = table->parent();
+ BrowserAccessibility* table = GetParent();
+ while (table && table->GetRole() != ui::AX_ROLE_TABLE)
+ table = table->GetParent();
if (!table) {
NOTREACHED();
return S_FALSE;
for (int i = 0; i < columns; ++i) {
int cell_id = cell_ids[row * columns + i];
- BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id);
- if (cell && cell->role() == ui::AX_ROLE_ROW_HEADER)
+ BrowserAccessibility* cell = manager()->GetFromID(cell_id);
+ if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER)
(*n_row_header_cells)++;
}
int index = 0;
for (int i = 0; i < columns; ++i) {
int cell_id = cell_ids[row * columns + i];
- BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id);
- if (cell && cell->role() == ui::AX_ROLE_ROW_HEADER) {
+ BrowserAccessibility* cell = manager()->GetFromID(cell_id);
+ if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) {
(*cell_accessibles)[index] = static_cast<IAccessible*>(
cell->ToBrowserAccessibilityWin()->NewReference());
++index;
GetIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_INDEX, &row);
GetIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, &column);
- BrowserAccessibility* find_table = parent();
- while (find_table && find_table->role() != ui::AX_ROLE_TABLE)
- find_table = find_table->parent();
+ BrowserAccessibility* find_table = GetParent();
+ while (find_table && find_table->GetRole() != ui::AX_ROLE_TABLE)
+ find_table = find_table->GetParent();
if (!find_table) {
NOTREACHED();
return S_FALSE;
return E_INVALIDARG;
*offset = 0;
- if (blink_role() == ui::AX_ROLE_TEXT_FIELD ||
- blink_role() == ui::AX_ROLE_TEXT_AREA) {
+ if (GetRole() == ui::AX_ROLE_TEXT_FIELD ||
+ GetRole() == ui::AX_ROLE_TEXT_AREA) {
int sel_start = 0;
if (GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START,
&sel_start))
character_bounds = GetGlobalBoundsForRange(offset, 1);
} else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) {
character_bounds = GetLocalBoundsForRange(offset, 1);
- character_bounds -= location().OffsetFromOrigin();
+ character_bounds -= GetLocation().OffsetFromOrigin();
} else {
return E_INVALIDARG;
}
return E_INVALIDARG;
*n_selections = 0;
- if (blink_role() == ui::AX_ROLE_TEXT_FIELD ||
- blink_role() == ui::AX_ROLE_TEXT_AREA) {
+ if (GetRole() == ui::AX_ROLE_TEXT_FIELD ||
+ GetRole() == ui::AX_ROLE_TEXT_AREA) {
int sel_start = 0;
int sel_end = 0;
if (GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START,
*start_offset = 0;
*end_offset = 0;
- if (blink_role() == ui::AX_ROLE_TEXT_FIELD ||
- blink_role() == ui::AX_ROLE_TEXT_AREA) {
+ if (GetRole() == ui::AX_ROLE_TEXT_FIELD ||
+ GetRole() == ui::AX_ROLE_TEXT_AREA) {
int sel_start = 0;
int sel_end = 0;
if (GetIntAttribute(
}
BrowserAccessibilityWin* child =
- children()[hyperlinks_[index]]->ToBrowserAccessibilityWin();
+ InternalGetChild(hyperlinks_[index])->ToBrowserAccessibilityWin();
*hyperlink = static_cast<IAccessibleHyperlink*>(child->NewReference());
return S_OK;
}
return E_INVALIDARG;
*num_attribs = max_attribs;
- if (*num_attribs > html_attributes().size())
- *num_attribs = html_attributes().size();
+ if (*num_attribs > GetHtmlAttributes().size())
+ *num_attribs = GetHtmlAttributes().size();
for (unsigned short i = 0; i < *num_attribs; ++i) {
attrib_names[i] = SysAllocString(
- base::UTF8ToUTF16(html_attributes()[i].first).c_str());
+ base::UTF8ToUTF16(GetHtmlAttributes()[i].first).c_str());
name_space_id[i] = 0;
attrib_values[i] = SysAllocString(
- base::UTF8ToUTF16(html_attributes()[i].second).c_str());
+ base::UTF8ToUTF16(GetHtmlAttributes()[i].second).c_str());
}
return S_OK;
}
name_space_id[i] = 0;
bool found = false;
std::string name = base::UTF16ToUTF8((LPCWSTR)attrib_names[i]);
- for (unsigned int j = 0; j < html_attributes().size(); ++j) {
- if (html_attributes()[j].first == name) {
+ for (unsigned int j = 0; j < GetHtmlAttributes().size(); ++j) {
+ if (GetHtmlAttributes()[j].first == name) {
attrib_values[i] = SysAllocString(
- base::UTF8ToUTF16(html_attributes()[j].second).c_str());
+ base::UTF8ToUTF16(GetHtmlAttributes()[j].second).c_str());
found = true;
break;
}
for (unsigned short i = 0; i < num_style_properties; ++i) {
base::string16 name = (LPCWSTR)style_properties[i];
- StringToLowerASCII(&name);
+ base::StringToLowerASCII(&name);
if (name == L"display") {
base::string16 display = GetString16Attribute(
ui::AX_ATTR_DISPLAY);
if (!node)
return E_INVALIDARG;
- *node = parent()->ToBrowserAccessibilityWin()->NewReference();
+ *node = GetParent()->ToBrowserAccessibilityWin()->NewReference();
return S_OK;
}
if (!node)
return E_INVALIDARG;
- if (!parent() || index_in_parent() <= 0) {
+ if (!GetParent() || GetIndexInParent() <= 0) {
*node = NULL;
return S_FALSE;
}
- *node = parent()->children()[index_in_parent() - 1]->
+ *node = GetParent()->InternalGetChild(GetIndexInParent() - 1)->
ToBrowserAccessibilityWin()->NewReference();
return S_OK;
}
if (!node)
return E_INVALIDARG;
- if (!parent() ||
- index_in_parent() < 0 ||
- index_in_parent() >= static_cast<int>(parent()->children().size()) - 1) {
+ if (!GetParent() ||
+ GetIndexInParent() < 0 ||
+ GetIndexInParent() >= static_cast<int>(
+ GetParent()->InternalChildCount()) - 1) {
*node = NULL;
return S_FALSE;
}
- *node = parent()->children()[index_in_parent() + 1]->
+ *node = GetParent()->InternalGetChild(GetIndexInParent() + 1)->
ToBrowserAccessibilityWin()->NewReference();
return S_OK;
}
<< id;
if (id == UIA_ValuePatternId || id == UIA_TextPatternId) {
if (IsEditableText()) {
- // The BrowserAccessibilityManager keeps track of instances when
- // we don't want to show the on-screen keyboard.
- if (!manager()->IsOSKAllowed(GetGlobalBoundsRect()))
- return E_NOTIMPL;
-
DVLOG(1) << "Returning UIA text provider";
- base::win::UIATextProvider::CreateTextProvider(true, provider);
+ base::win::UIATextProvider::CreateTextProvider(
+ GetValueText(), true, provider);
return S_OK;
}
}
// CComObjectRootEx methods.
//
+// static
HRESULT WINAPI BrowserAccessibilityWin::InternalQueryInterface(
void* this_ptr,
const _ATL_INTMAP_ENTRY* entries,
REFIID iid,
void** object) {
+ int32 ia_role =
+ reinterpret_cast<BrowserAccessibilityWin*>(this_ptr)->ia_role_;
if (iid == IID_IAccessibleImage) {
- if (ia_role_ != ROLE_SYSTEM_GRAPHIC) {
+ if (ia_role != ROLE_SYSTEM_GRAPHIC) {
*object = NULL;
return E_NOINTERFACE;
}
} else if (iid == IID_IAccessibleTable || iid == IID_IAccessibleTable2) {
- if (ia_role_ != ROLE_SYSTEM_TABLE) {
+ if (ia_role != ROLE_SYSTEM_TABLE) {
*object = NULL;
return E_NOINTERFACE;
}
} else if (iid == IID_IAccessibleTableCell) {
- if (ia_role_ != ROLE_SYSTEM_CELL) {
+ if (ia_role != ROLE_SYSTEM_CELL) {
*object = NULL;
return E_NOINTERFACE;
}
} else if (iid == IID_IAccessibleValue) {
- if (ia_role_ != ROLE_SYSTEM_PROGRESSBAR &&
- ia_role_ != ROLE_SYSTEM_SCROLLBAR &&
- ia_role_ != ROLE_SYSTEM_SLIDER) {
+ if (ia_role != ROLE_SYSTEM_PROGRESSBAR &&
+ ia_role != ROLE_SYSTEM_SCROLLBAR &&
+ ia_role != ROLE_SYSTEM_SLIDER) {
*object = NULL;
return E_NOINTERFACE;
}
} else if (iid == IID_ISimpleDOMDocument) {
- if (ia_role_ != ROLE_SYSTEM_DOCUMENT) {
+ if (ia_role != ROLE_SYSTEM_DOCUMENT) {
*object = NULL;
return E_NOINTERFACE;
}
// Private methods.
//
-// Initialize this object and mark it as active.
-void BrowserAccessibilityWin::PreInitialize() {
- BrowserAccessibility::PreInitialize();
+// Called every time this node's data changes.
+void BrowserAccessibilityWin::OnDataChanged() {
+ BrowserAccessibility::OnDataChanged();
InitRoleAndState();
// Expose the "display" and "tag" attributes.
StringAttributeToIA2(ui::AX_ATTR_DISPLAY, "display");
+ StringAttributeToIA2(ui::AX_ATTR_TEXT_INPUT_TYPE, "text-input-type");
StringAttributeToIA2(ui::AX_ATTR_HTML_TAG, "tag");
StringAttributeToIA2(ui::AX_ATTR_ROLE, "xml-roles");
IntAttributeToIA2(ui::AX_ATTR_HIERARCHICAL_LEVEL, "level");
// Expose the set size and position in set for listbox options.
- if (blink_role() == ui::AX_ROLE_LIST_BOX_OPTION &&
- parent() &&
- parent()->role() == ui::AX_ROLE_LIST_BOX) {
+ if (GetRole() == ui::AX_ROLE_LIST_BOX_OPTION &&
+ GetParent() &&
+ GetParent()->GetRole() == ui::AX_ROLE_LIST_BOX) {
ia2_attributes_.push_back(
- L"setsize:" + base::IntToString16(parent()->PlatformChildCount()));
+ L"setsize:" + base::IntToString16(GetParent()->PlatformChildCount()));
ia2_attributes_.push_back(
- L"setsize:" + base::IntToString16(index_in_parent() + 1));
+ L"setsize:" + base::IntToString16(GetIndexInParent() + 1));
}
if (ia_role_ == ROLE_SYSTEM_CHECKBUTTON ||
ia_role_ == ROLE_SYSTEM_RADIOBUTTON ||
+ ia2_role_ == IA2_ROLE_CHECK_MENU_ITEM ||
+ ia2_role_ == IA2_ROLE_RADIO_MENU_ITEM ||
ia2_role_ == IA2_ROLE_TOGGLE_BUTTON) {
ia2_attributes_.push_back(L"checkable:true");
}
// Expose table cell index.
if (ia_role_ == ROLE_SYSTEM_CELL) {
- BrowserAccessibility* table = parent();
- while (table && table->role() != ui::AX_ROLE_TABLE)
- table = table->parent();
+ BrowserAccessibility* table = GetParent();
+ while (table && table->GetRole() != ui::AX_ROLE_TABLE)
+ table = table->GetParent();
if (table) {
const std::vector<int32>& unique_cell_ids = table->GetIntListAttribute(
ui::AX_ATTR_UNIQUE_CELL_IDS);
for (size_t i = 0; i < unique_cell_ids.size(); ++i) {
- if (unique_cell_ids[i] == renderer_id()) {
+ if (unique_cell_ids[i] == GetId()) {
ia2_attributes_.push_back(
base::string16(L"table-cell-index:") + base::IntToString16(i));
}
// If it's a text field, also consider the placeholder.
std::string placeholder;
- if (blink_role() == ui::AX_ROLE_TEXT_FIELD &&
+ if (GetRole() == ui::AX_ROLE_TEXT_FIELD &&
HasState(ui::AX_STATE_FOCUSABLE) &&
GetHtmlAttribute("placeholder", &placeholder)) {
if (name().empty() && !title_elem_id) {
SetStringAttribute(ui::AX_ATTR_HELP, help);
// On Windows, the value of a document should be its url.
- if (blink_role() == ui::AX_ROLE_ROOT_WEB_AREA ||
- blink_role() == ui::AX_ROLE_WEB_AREA) {
+ if (GetRole() == ui::AX_ROLE_ROOT_WEB_AREA ||
+ GetRole() == ui::AX_ROLE_WEB_AREA) {
set_value(GetStringAttribute(ui::AX_ATTR_DOC_URL));
}
// WebKit stores the main accessible text in the "value" - swap it so
// that it's the "name".
if (name().empty() &&
- (blink_role() == ui::AX_ROLE_LIST_BOX_OPTION ||
- blink_role() == ui::AX_ROLE_STATIC_TEXT ||
- blink_role() == ui::AX_ROLE_LIST_MARKER)) {
+ (GetRole() == ui::AX_ROLE_LIST_BOX_OPTION ||
+ GetRole() == ui::AX_ROLE_STATIC_TEXT ||
+ GetRole() == ui::AX_ROLE_LIST_MARKER)) {
std::string tmp = value();
set_value(name());
set_name(tmp);
}
}
-void BrowserAccessibilityWin::PostInitialize() {
- BrowserAccessibility::PostInitialize();
-
+void BrowserAccessibilityWin::OnUpdateFinished() {
// Construct the hypertext for this node.
hyperlink_offset_to_index_.clear();
hyperlinks_.clear();
hypertext_.clear();
for (unsigned int i = 0; i < PlatformChildCount(); ++i) {
BrowserAccessibility* child = PlatformGetChild(i);
- if (child->role() == ui::AX_ROLE_STATIC_TEXT) {
+ if (child->GetRole() == ui::AX_ROLE_STATIC_TEXT) {
hypertext_ += base::UTF8ToUTF16(child->name());
} else {
hyperlink_offset_to_index_[hypertext_.size()] = hyperlinks_.size();
DCHECK_EQ(hyperlink_offset_to_index_.size(), hyperlinks_.size());
// Fire an event when an alert first appears.
- if (blink_role() == ui::AX_ROLE_ALERT && first_time_)
+ if (GetRole() == ui::AX_ROLE_ALERT && first_time_)
manager()->NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, this);
// Fire events if text has changed.
// focus for managed descendants is platform-specific.
// Fire a focus event if the focused descendant in a multi-select
// list box changes.
- if (blink_role() == ui::AX_ROLE_LIST_BOX_OPTION &&
+ if (GetRole() == ui::AX_ROLE_LIST_BOX_OPTION &&
(ia_state_ & STATE_SYSTEM_FOCUSABLE) &&
(ia_state_ & STATE_SYSTEM_SELECTABLE) &&
(ia_state_ & STATE_SYSTEM_FOCUSED) &&
return true;
}
-void BrowserAccessibilityWin::SetLocation(const gfx::Rect& new_location) {
- BrowserAccessibility::SetLocation(new_location);
+void BrowserAccessibilityWin::OnLocationChanged() {
manager()->ToBrowserAccessibilityManagerWin()->MaybeCallNotifyWinEvent(
EVENT_OBJECT_LOCATIONCHANGE, unique_id_win());
}
base::string16 BrowserAccessibilityWin::TextForIAccessibleText() {
if (IsEditableText())
return base::UTF8ToUTF16(value());
- return (blink_role() == ui::AX_ROLE_STATIC_TEXT) ?
+ return (GetRole() == ui::AX_ROLE_STATIC_TEXT) ?
base::UTF8ToUTF16(name()) : hypertext_;
}
text, line_breaks, boundary, start_offset, direction);
}
-BrowserAccessibilityWin* BrowserAccessibilityWin::GetFromRendererID(
- int32 renderer_id) {
- return manager()->GetFromRendererID(renderer_id)->ToBrowserAccessibilityWin();
+BrowserAccessibilityWin* BrowserAccessibilityWin::GetFromID(int32 id) {
+ return manager()->GetFromID(id)->ToBrowserAccessibilityWin();
}
void BrowserAccessibilityWin::InitRoleAndState() {
ui::AX_ATTR_HTML_TAG);
ia_role_ = 0;
ia2_role_ = 0;
- switch (blink_role()) {
+ switch (GetRole()) {
case ui::AX_ROLE_ALERT:
ia_role_ = ROLE_SYSTEM_ALERT;
break;
ia_role_ = ROLE_SYSTEM_APPLICATION;
break;
case ui::AX_ROLE_ARTICLE:
+ ia_role_ = ROLE_SYSTEM_DOCUMENT;
+ ia_state_ |= STATE_SYSTEM_READONLY;
+ break;
+ case ui::AX_ROLE_BANNER:
ia_role_ = ROLE_SYSTEM_GROUPING;
+ ia2_role_ = IA2_ROLE_HEADER;
+ break;
+ case ui::AX_ROLE_BLOCKQUOTE:
+ role_name_ = html_tag;
ia2_role_ = IA2_ROLE_SECTION;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_BUSY_INDICATOR:
ia_role_ = ROLE_SYSTEM_ANIMATION;
break;
case ui::AX_ROLE_CHECK_BOX:
ia_role_ = ROLE_SYSTEM_CHECKBUTTON;
+ ia2_state_ |= IA2_STATE_CHECKABLE;
break;
case ui::AX_ROLE_COLOR_WELL:
ia_role_ = ROLE_SYSTEM_CLIENT;
break;
case ui::AX_ROLE_COLUMN:
ia_role_ = ROLE_SYSTEM_COLUMN;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_COLUMN_HEADER:
ia_role_ = ROLE_SYSTEM_COLUMNHEADER;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_COMBO_BOX:
ia_role_ = ROLE_SYSTEM_COMBOBOX;
break;
+ case ui::AX_ROLE_COMPLEMENTARY:
+ ia_role_ = ROLE_SYSTEM_GROUPING;
+ ia2_role_ = IA2_ROLE_NOTE;
+ break;
+ case ui::AX_ROLE_CONTENT_INFO:
+ ia_role_ = ROLE_SYSTEM_TEXT;
+ ia2_role_ = IA2_ROLE_PARAGRAPH;
+ break;
+ case ui::AX_ROLE_DATE:
+ ia_role_ = ROLE_SYSTEM_DROPLIST;
+ ia2_role_ = IA2_ROLE_DATE_EDITOR;
+ break;
+ case ui::AX_ROLE_DATE_TIME:
+ ia_role_ = ROLE_SYSTEM_DROPLIST;
+ ia2_role_ = IA2_ROLE_DATE_EDITOR;
+ break;
case ui::AX_ROLE_DIV:
role_name_ = L"div";
+ ia_role_ = ROLE_SYSTEM_GROUPING;
ia2_role_ = IA2_ROLE_SECTION;
break;
case ui::AX_ROLE_DEFINITION:
ia2_role_ = IA2_ROLE_PARAGRAPH;
ia_state_ |= STATE_SYSTEM_READONLY;
break;
+ case ui::AX_ROLE_DESCRIPTION_LIST:
+ role_name_ = html_tag;
+ ia_role_ = ROLE_SYSTEM_LIST;
+ ia_state_ |= STATE_SYSTEM_READONLY;
+ break;
case ui::AX_ROLE_DESCRIPTION_LIST_TERM:
ia_role_ = ROLE_SYSTEM_LISTITEM;
ia_state_ |= STATE_SYSTEM_READONLY;
break;
+ case ui::AX_ROLE_DETAILS:
+ role_name_ = html_tag;
+ ia_role_ = ROLE_SYSTEM_GROUPING;
+ break;
case ui::AX_ROLE_DIALOG:
ia_role_ = ROLE_SYSTEM_DIALOG;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_DISCLOSURE_TRIANGLE:
- ia_role_ = ROLE_SYSTEM_OUTLINEBUTTON;
- ia_state_ |= STATE_SYSTEM_READONLY;
+ ia_role_ = ROLE_SYSTEM_PUSHBUTTON;
break;
case ui::AX_ROLE_DOCUMENT:
case ui::AX_ROLE_ROOT_WEB_AREA:
ia2_state_ |= IA2_STATE_SINGLE_LINE;
ia2_state_ |= IA2_STATE_EDITABLE;
break;
+ case ui::AX_ROLE_FIGCAPTION:
+ role_name_ = html_tag;
+ ia2_role_ = IA2_ROLE_CAPTION;
+ break;
+ case ui::AX_ROLE_FIGURE:
+ role_name_ = html_tag;
+ ia_role_ = ROLE_SYSTEM_GROUPING;
+ ia2_role_ = IA2_ROLE_SECTION;
+ break;
case ui::AX_ROLE_FORM:
role_name_ = L"form";
ia2_role_ = IA2_ROLE_FORM;
ia_role_ = ROLE_SYSTEM_GROUPING;
} else if (html_tag == L"li") {
ia_role_ = ROLE_SYSTEM_LISTITEM;
+ ia_state_ |= STATE_SYSTEM_READONLY;
} else {
if (html_tag.empty())
role_name_ = L"div";
role_name_ = html_tag;
ia2_role_ = IA2_ROLE_SECTION;
}
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
}
case ui::AX_ROLE_GROW_AREA:
case ui::AX_ROLE_HEADING:
role_name_ = html_tag;
ia2_role_ = IA2_ROLE_HEADING;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_HORIZONTAL_RULE:
ia_role_ = ROLE_SYSTEM_SEPARATOR;
break;
+ case ui::AX_ROLE_IFRAME:
+ ia_role_ = ROLE_SYSTEM_DOCUMENT;
+ ia2_role_ = IA2_ROLE_INTERNAL_FRAME;
+ ia_state_ = STATE_SYSTEM_READONLY;
+ break;
case ui::AX_ROLE_IMAGE:
ia_role_ = ROLE_SYSTEM_GRAPHIC;
ia_state_ |= STATE_SYSTEM_READONLY;
ia_role_ = ROLE_SYSTEM_TEXT;
ia2_role_ = IA2_ROLE_LABEL;
break;
- case ui::AX_ROLE_BANNER:
- case ui::AX_ROLE_COMPLEMENTARY:
- case ui::AX_ROLE_CONTENT_INFO:
- case ui::AX_ROLE_MAIN:
- case ui::AX_ROLE_NAVIGATION:
case ui::AX_ROLE_SEARCH:
ia_role_ = ROLE_SYSTEM_GROUPING;
ia2_role_ = IA2_ROLE_SECTION;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_LINK:
ia_role_ = ROLE_SYSTEM_LINK;
ia_role_ = ROLE_SYSTEM_LISTITEM;
ia_state_ |= STATE_SYSTEM_READONLY;
break;
- case ui::AX_ROLE_MATH_ELEMENT:
+ case ui::AX_ROLE_MAIN:
+ ia_role_ = ROLE_SYSTEM_GROUPING;
+ ia2_role_ = IA2_ROLE_PARAGRAPH;
+ break;
+ case ui::AX_ROLE_MARQUEE:
+ ia_role_ = ROLE_SYSTEM_ANIMATION;
+ break;
+ case ui::AX_ROLE_MATH:
ia_role_ = ROLE_SYSTEM_EQUATION;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_MENU:
case ui::AX_ROLE_MENU_BUTTON:
case ui::AX_ROLE_MENU_ITEM:
ia_role_ = ROLE_SYSTEM_MENUITEM;
break;
+ case ui::AX_ROLE_MENU_ITEM_CHECK_BOX:
+ ia_role_ = ROLE_SYSTEM_MENUITEM;
+ ia2_role_ = IA2_ROLE_CHECK_MENU_ITEM;
+ ia2_state_ |= IA2_STATE_CHECKABLE;
+ break;
+ case ui::AX_ROLE_MENU_ITEM_RADIO:
+ ia_role_ = ROLE_SYSTEM_MENUITEM;
+ ia2_role_ = IA2_ROLE_RADIO_MENU_ITEM;
+ break;
case ui::AX_ROLE_MENU_LIST_POPUP:
ia_role_ = ROLE_SYSTEM_CLIENT;
break;
ia_state_ |= STATE_SYSTEM_FOCUSED;
}
break;
+ case ui::AX_ROLE_METER:
+ role_name_ = html_tag;
+ ia_role_ = ROLE_SYSTEM_PROGRESSBAR;
+ break;
+ case ui::AX_ROLE_NAVIGATION:
+ ia_role_ = ROLE_SYSTEM_GROUPING;
+ ia2_role_ = IA2_ROLE_SECTION;
+ break;
case ui::AX_ROLE_NOTE:
ia_role_ = ROLE_SYSTEM_GROUPING;
ia2_role_ = IA2_ROLE_NOTE;
break;
case ui::AX_ROLE_OUTLINE:
ia_role_ = ROLE_SYSTEM_OUTLINE;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_PARAGRAPH:
role_name_ = L"P";
ia_role_ = ROLE_SYSTEM_BUTTONMENU;
}
break;
+ case ui::AX_ROLE_PRE:
+ role_name_ = html_tag;
+ ia_role_ = ROLE_SYSTEM_TEXT;
+ ia2_role_ = IA2_ROLE_PARAGRAPH;
+ break;
case ui::AX_ROLE_PROGRESS_INDICATOR:
ia_role_ = ROLE_SYSTEM_PROGRESSBAR;
ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_RADIO_GROUP:
ia_role_ = ROLE_SYSTEM_GROUPING;
- ia2_role_ = IA2_ROLE_SECTION;
break;
case ui::AX_ROLE_REGION:
- ia_role_ = ROLE_SYSTEM_GROUPING;
- ia2_role_ = IA2_ROLE_SECTION;
- ia_state_ |= STATE_SYSTEM_READONLY;
+ if (html_tag == L"section") {
+ ia_role_ = ROLE_SYSTEM_GROUPING;
+ ia2_role_ = IA2_ROLE_SECTION;
+ } else {
+ ia_role_ = ROLE_SYSTEM_PANE;
+ }
break;
case ui::AX_ROLE_ROW:
ia_role_ = ROLE_SYSTEM_ROW;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_ROW_HEADER:
ia_role_ = ROLE_SYSTEM_ROWHEADER;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_RULER:
ia_role_ = ROLE_SYSTEM_CLIENT;
ia_role_ = ROLE_SYSTEM_CLIENT;
ia2_role_ = IA2_ROLE_SCROLL_PANE;
ia_state_ |= STATE_SYSTEM_READONLY;
+ ia2_state_ &= ~(IA2_STATE_EDITABLE);
break;
case ui::AX_ROLE_SCROLL_BAR:
ia_role_ = ROLE_SYSTEM_SCROLLBAR;
ia_role_ = ROLE_SYSTEM_OUTLINE;
} else {
ia_role_ = ROLE_SYSTEM_TABLE;
- ia_state_ |= STATE_SYSTEM_READONLY;
}
break;
}
ia2_state_ |= IA2_STATE_EDITABLE;
ia2_state_ |= IA2_STATE_SELECTABLE_TEXT;
break;
+ case ui::AX_ROLE_TIME:
+ ia_role_ = ROLE_SYSTEM_SPINBUTTON;
+ break;
case ui::AX_ROLE_TIMER:
ia_role_ = ROLE_SYSTEM_CLOCK;
ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_TREE:
ia_role_ = ROLE_SYSTEM_OUTLINE;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_TREE_GRID:
ia_role_ = ROLE_SYSTEM_OUTLINE;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_TREE_ITEM:
ia_role_ = ROLE_SYSTEM_OUTLINEITEM;
- ia_state_ |= STATE_SYSTEM_READONLY;
break;
case ui::AX_ROLE_WINDOW:
ia_role_ = ROLE_SYSTEM_WINDOW;
case ui::AX_ROLE_IGNORED:
case ui::AX_ROLE_INCREMENTOR:
case ui::AX_ROLE_LOG:
- case ui::AX_ROLE_MARQUEE:
case ui::AX_ROLE_MATTE:
+ case ui::AX_ROLE_NONE:
case ui::AX_ROLE_PRESENTATIONAL:
case ui::AX_ROLE_RULER_MARKER:
case ui::AX_ROLE_SHEET: