summaryrefslogtreecommitdiffstats
path: root/chrome/browser/accessibility/browser_accessibility_win.cc
diff options
context:
space:
mode:
authordmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-08 19:26:24 +0000
committerdmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-08 19:26:24 +0000
commit8368e3c097978a1424e13786efceead3ffc6c385 (patch)
tree388a0a7d01f15a992a097ec92bad7727f17a9f92 /chrome/browser/accessibility/browser_accessibility_win.cc
parentf74252d3754d1d58b6f97cb3cd89b47d151cd88d (diff)
downloadchromium_src-8368e3c097978a1424e13786efceead3ffc6c385.zip
chromium_src-8368e3c097978a1424e13786efceead3ffc6c385.tar.gz
chromium_src-8368e3c097978a1424e13786efceead3ffc6c385.tar.bz2
Browser accessibility improvements so that screen readers can access more
complicated webpages without problems. First, WebAccessibility now works around a "multiple inheritance problem" in WebCore::AccessibilityObject where the same node appears as a child of multiple parents. For example, a table cell appears as a child of both a row and a column. This is solved by having each WebAccessibility parent check whether the child lists itself as an ancestor. If not, it notes the child's id only in a separate vector, so each child appears fully only once. Second, BrowserAccessibility now has internal reference counting, which allows BrowserAccessibilityManager to update any subtree while maximally reusing as many objects as possible. This fixes many screen reader interaction problems! All of this new functionality is tested with new cross-platform tests. BUG=67192 BUG=67620 TEST=Adds new unit tests and a browser test. Review URL: http://codereview.chromium.org/6625042 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77316 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility/browser_accessibility_win.cc')
-rw-r--r--chrome/browser/accessibility/browser_accessibility_win.cc27
1 files changed, 7 insertions, 20 deletions
diff --git a/chrome/browser/accessibility/browser_accessibility_win.cc b/chrome/browser/accessibility/browser_accessibility_win.cc
index 050cea0..5b17979 100644
--- a/chrome/browser/accessibility/browser_accessibility_win.cc
+++ b/chrome/browser/accessibility/browser_accessibility_win.cc
@@ -34,15 +34,13 @@ BrowserAccessibilityWin* BrowserAccessibility::toBrowserAccessibilityWin() {
}
BrowserAccessibilityWin::BrowserAccessibilityWin()
- : instance_active_(false),
- ia_role_(0),
+ : ia_role_(0),
ia_state_(0),
ia2_role_(0),
ia2_state_(0) {
}
BrowserAccessibilityWin::~BrowserAccessibilityWin() {
- ReleaseTree();
}
//
@@ -391,7 +389,7 @@ STDMETHODIMP BrowserAccessibilityWin::accSelect(
return E_FAIL;
if (flags_sel & SELFLAG_TAKEFOCUS) {
- manager_->SetFocus(*this);
+ manager_->SetFocus(this, true);
return S_OK;
}
@@ -1125,6 +1123,8 @@ HRESULT WINAPI BrowserAccessibilityWin::InternalQueryInterface(
// Initialize this object and mark it as active.
void BrowserAccessibilityWin::Initialize() {
+ BrowserAccessibility::Initialize();
+
InitRoleAndState();
// Expose headings levels to NVDA with the "level" object attribute.
@@ -1147,29 +1147,16 @@ void BrowserAccessibilityWin::Initialize() {
// announce the name.
if (name_.empty() && HasAttribute(WebAccessibility::ATTR_DESCRIPTION))
GetAttribute(WebAccessibility::ATTR_DESCRIPTION, &name_);
-
- instance_active_ = true;
}
-// Mark this object as inactive, and remove references to all children.
-// When no other clients hold any references to this object it will be
-// deleted, and in the meantime, calls to any methods will return E_FAIL.
-void BrowserAccessibilityWin::ReleaseTree() {
- if (!instance_active_)
- return;
-
- // Mark this object as inactive, so calls to all COM methods will return
- // failure.
- instance_active_ = false;
-
- BrowserAccessibility::ReleaseTree();
+void BrowserAccessibilityWin::NativeAddReference() {
+ AddRef();
}
-void BrowserAccessibilityWin::ReleaseReference() {
+void BrowserAccessibilityWin::NativeReleaseReference() {
Release();
}
-
BrowserAccessibilityWin* BrowserAccessibilityWin::NewReference() {
AddRef();
return this;