summaryrefslogtreecommitdiffstats
path: root/content/browser/accessibility/browser_accessibility_win.cc
diff options
context:
space:
mode:
authordmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-06 17:10:07 +0000
committerdmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-06 17:10:07 +0000
commit95b3f544eae3f1de91d29d0f4e1abef05592bd86 (patch)
treed311ee75208f1dba65bcf8116d568a6fd251af04 /content/browser/accessibility/browser_accessibility_win.cc
parentca2f7f1069844f6274008209473c2db7fff4bbf4 (diff)
downloadchromium_src-95b3f544eae3f1de91d29d0f4e1abef05592bd86.zip
chromium_src-95b3f544eae3f1de91d29d0f4e1abef05592bd86.tar.gz
chromium_src-95b3f544eae3f1de91d29d0f4e1abef05592bd86.tar.bz2
Revert 135593 - Add initial GTK web accessibility framework (new with valgrind fix).
This is the same as http://codereview.chromium.org/9839069/ which was landed but reverted due to a valgrind failure in content_unittests. The valgrind failure was because browser_accessibility_manager_unittest.cc is constructing its own subclass of BrowserAccessibility (for testing), but BrowserAccessibilityManagerGtk was assuming that any BrowserAccessibility could be static_casted to a BrowserAccessibilityGtk. I fixed this by making ToBrowserAccessibilityGtk() a virtual method with a default impl that returns NULL. Original change: This enables Linux desktop assistive technology such as the Orca screen reader to access the web contents. Builds on the same accessibility stack used by Mac & Windows already. This change works with Orca now, but it's minimal: all that works is getting the correct feedback when you tab through focusable links and controls in a webpage. Future changes will add the rest of the support. BUG=24585 TEST=Run Chrome on desktop Linux with Orca turned on, tab through links. TBR=darin,sky Review URL: https://chromiumcodereview.appspot.com/10381010 TBR=dmazzoni@chromium.org Review URL: https://chromiumcodereview.appspot.com/10379029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@135595 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/accessibility/browser_accessibility_win.cc')
-rw-r--r--content/browser/accessibility/browser_accessibility_win.cc99
1 files changed, 49 insertions, 50 deletions
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc
index a0b1aa0..8d38e01 100644
--- a/content/browser/accessibility/browser_accessibility_win.cc
+++ b/content/browser/accessibility/browser_accessibility_win.cc
@@ -135,7 +135,7 @@ STDMETHODIMP BrowserAccessibilityRelation::get_target(
return E_FAIL;
*target = static_cast<IAccessible*>(
- result->ToBrowserAccessibilityWin()->NewReference());
+ result->toBrowserAccessibilityWin()->NewReference());
return S_OK;
}
@@ -176,8 +176,8 @@ BrowserAccessibility* BrowserAccessibility::Create() {
return instance->NewReference();
}
-BrowserAccessibilityWin* BrowserAccessibilityWin::ToBrowserAccessibilityWin() {
- return this;
+BrowserAccessibilityWin* BrowserAccessibility::toBrowserAccessibilityWin() {
+ return static_cast<BrowserAccessibilityWin*>(this);
}
BrowserAccessibilityWin::BrowserAccessibilityWin()
@@ -238,7 +238,7 @@ STDMETHODIMP BrowserAccessibilityWin::accHitTest(LONG x_left,
child->lVal = CHILDID_SELF;
} else {
child->vt = VT_DISPATCH;
- child->pdispVal = result->ToBrowserAccessibilityWin()->NewReference();
+ child->pdispVal = result->toBrowserAccessibilityWin()->NewReference();
}
return S_OK;
}
@@ -307,7 +307,7 @@ STDMETHODIMP BrowserAccessibilityWin::accNavigate(
}
end->vt = VT_DISPATCH;
- end->pdispVal = result->ToBrowserAccessibilityWin()->NewReference();
+ end->pdispVal = result->toBrowserAccessibilityWin()->NewReference();
return S_OK;
}
@@ -465,13 +465,11 @@ STDMETHODIMP BrowserAccessibilityWin::get_accParent(IDispatch** disp_parent) {
if (!disp_parent)
return E_INVALIDARG;
- IAccessible* parent;
- if (parent_) {
- parent = parent_->ToBrowserAccessibilityWin();
- } else {
+ IAccessible* parent = parent_->toBrowserAccessibilityWin();
+ if (parent == NULL) {
// This happens if we're the root of the tree;
// return the IAccessible for the window.
- parent = manager_->ToBrowserAccessibilityManagerWin()->
+ parent = manager_->toBrowserAccessibilityManagerWin()->
GetParentWindowIAccessible();
}
@@ -568,7 +566,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_accSelection(VARIANT* selected) {
if (children_[i]->HasState(WebAccessibility::STATE_SELECTED)) {
selected->vt = VT_DISPATCH;
selected->pdispVal =
- children_[i]->ToBrowserAccessibilityWin()->NewReference();
+ children_[i]->toBrowserAccessibilityWin()->NewReference();
return S_OK;
}
}
@@ -583,7 +581,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_accSelection(VARIANT* selected) {
if (children_[i]->HasState(WebAccessibility::STATE_SELECTED)) {
enum_variant->ItemAt(index)->vt = VT_DISPATCH;
enum_variant->ItemAt(index)->pdispVal =
- children_[i]->ToBrowserAccessibilityWin()->NewReference();
+ children_[i]->toBrowserAccessibilityWin()->NewReference();
++index;
}
}
@@ -1074,7 +1072,8 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnIndex(
return S_FALSE;
int cell_id = unique_cell_ids_[cell_index];
- BrowserAccessibility* cell = manager_->GetFromRendererID(cell_id);
+ BrowserAccessibilityWin* cell =
+ manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin();
int col_index;
if (cell &&
cell->GetIntAttribute(
@@ -1180,14 +1179,15 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowDescription(
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() == WebAccessibility::ROLE_ROW_HEADER) {
- if (cell->name().size() > 0) {
- *description = SysAllocString(cell->name().c_str());
+ BrowserAccessibilityWin* cell =
+ manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin();
+ if (cell && cell->role_ == WebAccessibility::ROLE_ROW_HEADER) {
+ if (cell->name_.size() > 0) {
+ *description = SysAllocString(cell->name_.c_str());
return S_OK;
}
- return cell->ToBrowserAccessibilityWin()->GetStringAttributeAsBstr(
+ return cell->GetStringAttributeAsBstr(
WebAccessibility::ATTR_DESCRIPTION, description);
}
}
@@ -1218,7 +1218,8 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowExtentAt(
return E_INVALIDARG;
int cell_id = cell_ids_[row * columns + column];
- BrowserAccessibility* cell = manager_->GetFromRendererID(cell_id);
+ BrowserAccessibilityWin* cell =
+ manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin();
int rowspan;
if (cell &&
cell->GetIntAttribute(
@@ -1254,7 +1255,8 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowIndex(
return S_FALSE;
int cell_id = unique_cell_ids_[cell_index];
- BrowserAccessibility* cell = manager_->GetFromRendererID(cell_id);
+ BrowserAccessibilityWin* cell =
+ manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin();
int cell_row_index;
if (cell &&
cell->GetIntAttribute(
@@ -1386,7 +1388,8 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowColumnExtentsAtIndex(
return S_FALSE;
int cell_id = unique_cell_ids_[index];
- BrowserAccessibility* cell = manager_->GetFromRendererID(cell_id);
+ BrowserAccessibilityWin* cell =
+ manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin();
int rowspan;
int colspan;
if (cell &&
@@ -1523,8 +1526,9 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnHeaderCells(
for (int i = 0; i < rows; ++i) {
int cell_id = table->cell_ids()[i * columns + column];
- BrowserAccessibility* cell = manager_->GetFromRendererID(cell_id);
- if (cell && cell->role() == WebAccessibility::ROLE_COLUMN_HEADER)
+ BrowserAccessibilityWin* cell =
+ manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin();
+ if (cell && cell->role_ == WebAccessibility::ROLE_COLUMN_HEADER)
(*n_column_header_cells)++;
}
@@ -1533,11 +1537,11 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnHeaderCells(
int index = 0;
for (int i = 0; i < rows; ++i) {
int cell_id = table->cell_ids()[i * columns + column];
- BrowserAccessibility* cell = manager_->GetFromRendererID(cell_id);
- if (cell && cell->role() == WebAccessibility::ROLE_COLUMN_HEADER) {
+ BrowserAccessibilityWin* cell =
+ manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin();
+ if (cell && cell->role_ == WebAccessibility::ROLE_COLUMN_HEADER) {
(*cell_accessibles)[index] =
- static_cast<IAccessible*>(
- cell->ToBrowserAccessibilityWin()->NewReference());
+ static_cast<IAccessible*>(cell->NewReference());
++index;
}
}
@@ -1620,8 +1624,9 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowHeaderCells(
for (int i = 0; i < columns; ++i) {
int cell_id = table->cell_ids()[row * columns + i];
- BrowserAccessibility* cell = manager_->GetFromRendererID(cell_id);
- if (cell && cell->role() == WebAccessibility::ROLE_ROW_HEADER)
+ BrowserAccessibilityWin* cell =
+ manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin();
+ if (cell && cell->role_ == WebAccessibility::ROLE_ROW_HEADER)
(*n_row_header_cells)++;
}
@@ -1630,11 +1635,11 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowHeaderCells(
int index = 0;
for (int i = 0; i < columns; ++i) {
int cell_id = table->cell_ids()[row * columns + i];
- BrowserAccessibility* cell = manager_->GetFromRendererID(cell_id);
- if (cell && cell->role() == WebAccessibility::ROLE_ROW_HEADER) {
+ BrowserAccessibilityWin* cell =
+ manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin();
+ if (cell && cell->role_ == WebAccessibility::ROLE_ROW_HEADER) {
(*cell_accessibles)[index] =
- static_cast<IAccessible*>(
- cell->ToBrowserAccessibilityWin()->NewReference());
+ static_cast<IAccessible*>(cell->NewReference());
++index;
}
}
@@ -1732,7 +1737,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_table(
}
*table = static_cast<IAccessibleTable*>(
- find_table->ToBrowserAccessibilityWin()->NewReference());
+ find_table->toBrowserAccessibilityWin()->NewReference());
return S_OK;
}
@@ -2090,7 +2095,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_hyperlink(
}
BrowserAccessibilityWin* child =
- children_[hyperlinks_[index]]->ToBrowserAccessibilityWin();
+ children_[hyperlinks_[index]]->toBrowserAccessibilityWin();
*hyperlink = static_cast<IAccessibleHyperlink*>(child->NewReference());
return S_OK;
}
@@ -2392,12 +2397,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_parentNode(ISimpleDOMNode** node) {
if (!node)
return E_INVALIDARG;
- if (!parent_) {
- *node = NULL;
- return S_FALSE;
- }
-
- *node = parent_->ToBrowserAccessibilityWin()->NewReference();
+ *node = parent_->toBrowserAccessibilityWin()->NewReference();
return S_OK;
}
@@ -2409,7 +2409,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_firstChild(ISimpleDOMNode** node) {
return E_INVALIDARG;
if (children_.size()) {
- *node = children_[0]->ToBrowserAccessibilityWin()->NewReference();
+ *node = children_[0]->toBrowserAccessibilityWin()->NewReference();
return S_OK;
} else {
*node = NULL;
@@ -2425,7 +2425,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_lastChild(ISimpleDOMNode** node) {
return E_INVALIDARG;
if (children_.size()) {
- *node = children_[children_.size() - 1]->ToBrowserAccessibilityWin()->
+ *node = children_[children_.size() - 1]->toBrowserAccessibilityWin()->
NewReference();
return S_OK;
} else {
@@ -2444,7 +2444,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_previousSibling(
if (parent_ && index_in_parent_ > 0) {
*node = parent_->children()[index_in_parent_ - 1]->
- ToBrowserAccessibilityWin()->NewReference();
+ toBrowserAccessibilityWin()->NewReference();
return S_OK;
} else {
*node = NULL;
@@ -2463,7 +2463,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_nextSibling(ISimpleDOMNode** node) {
index_in_parent_ >= 0 &&
index_in_parent_ < static_cast<int>(parent_->children().size()) - 1) {
*node = parent_->children()[index_in_parent_ + 1]->
- ToBrowserAccessibilityWin()->NewReference();
+ toBrowserAccessibilityWin()->NewReference();
return S_OK;
} else {
*node = NULL;
@@ -2481,7 +2481,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_childAt(
return E_INVALIDARG;
if (child_index < children_.size()) {
- *node = children_[child_index]->ToBrowserAccessibilityWin()->NewReference();
+ *node = children_[child_index]->toBrowserAccessibilityWin()->NewReference();
return S_OK;
} else {
*node = NULL;
@@ -2848,9 +2848,9 @@ BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID(
return this;
if (child_id >= 1 && child_id <= static_cast<LONG>(children_.size()))
- return children_[child_id - 1]->ToBrowserAccessibilityWin();
+ return children_[child_id - 1]->toBrowserAccessibilityWin();
- return manager_->GetFromChildID(child_id)->ToBrowserAccessibilityWin();
+ return manager_->GetFromChildID(child_id)->toBrowserAccessibilityWin();
}
HRESULT BrowserAccessibilityWin::GetStringAttributeAsBstr(
@@ -2944,8 +2944,7 @@ LONG BrowserAccessibilityWin::FindBoundary(
BrowserAccessibilityWin* BrowserAccessibilityWin::GetFromRendererID(
int32 renderer_id) {
- BrowserAccessibility* result = manager_->GetFromRendererID(renderer_id);
- return result ? result->ToBrowserAccessibilityWin() : NULL;
+ return manager_->GetFromRendererID(renderer_id)->toBrowserAccessibilityWin();
}
void BrowserAccessibilityWin::InitRoleAndState() {