diff options
author | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-06 17:10:07 +0000 |
---|---|---|
committer | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-06 17:10:07 +0000 |
commit | 95b3f544eae3f1de91d29d0f4e1abef05592bd86 (patch) | |
tree | d311ee75208f1dba65bcf8116d568a6fd251af04 /content/browser/accessibility/browser_accessibility_win.cc | |
parent | ca2f7f1069844f6274008209473c2db7fff4bbf4 (diff) | |
download | chromium_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.cc | 99 |
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() { |