summaryrefslogtreecommitdiffstats
path: root/views/accessibility/view_accessibility_wrapper.cc
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-10 05:41:23 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-10 05:41:23 +0000
commita64f3390904e06e4ee06203bcd03055e77dbde12 (patch)
tree09686f3874743f0e1ee5c6e027f48a31da4d5735 /views/accessibility/view_accessibility_wrapper.cc
parentb5f4cc278286dd1b0f7d9fb98d2c3554de325f0c (diff)
downloadchromium_src-a64f3390904e06e4ee06203bcd03055e77dbde12.zip
chromium_src-a64f3390904e06e4ee06203bcd03055e77dbde12.tar.gz
chromium_src-a64f3390904e06e4ee06203bcd03055e77dbde12.tar.bz2
Accessibility information from the renderer was not being returned to tools like screen readers, etc.
This was because the object implementing the root IAccessible interface did not know how to navigate a native render view. To work around this, we now check if the underlying view is a native view in our root IAccessible::get_accChild function and if yes we send the WM_GETOBJECT message to the corresponding RenderWidgetHostViewWin class, which returns an IAccessible interface which then can expose information from the renderer. The other changes in the accessibility code are for some crashes I observed while testing the screen readers like nvda, the Windows screen reader which send a flurry of WM_GETOBJECT messages leading to some race conditions. We also ensure that the accessibility information for a view is torn down when the view is destroyed. Fixes portions of http://code.google.com/p/chromium/issues/detail?id=13291 Bug=13291 Review URL: http://codereview.chromium.org/261044 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28655 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/accessibility/view_accessibility_wrapper.cc')
-rw-r--r--views/accessibility/view_accessibility_wrapper.cc14
1 files changed, 14 insertions, 0 deletions
diff --git a/views/accessibility/view_accessibility_wrapper.cc b/views/accessibility/view_accessibility_wrapper.cc
index 7e7f5a6..989c90a 100644
--- a/views/accessibility/view_accessibility_wrapper.cc
+++ b/views/accessibility/view_accessibility_wrapper.cc
@@ -4,6 +4,8 @@
#include "views/accessibility/view_accessibility_wrapper.h"
+#include "base/scoped_variant_win.h"
+
#include "views/accessibility/view_accessibility.h"
////////////////////////////////////////////////////////////////////////////////
@@ -43,6 +45,18 @@ STDMETHODIMP ViewAccessibilityWrapper::CreateDefaultInstance(REFIID iid) {
return E_NOINTERFACE;
}
+HRESULT ViewAccessibilityWrapper::Uninitialize() {
+ view_ = NULL;
+ if (accessibility_info_.get()) {
+ accessibility_info_->put_accValue(
+ ScopedVariant(kViewsUninitializeAccessibilityInstance), NULL);
+ ::CoDisconnectObject(accessibility_info_.get(), 0);
+ accessibility_info_ = NULL;
+ }
+
+ return S_OK;
+}
+
STDMETHODIMP ViewAccessibilityWrapper::GetInstance(REFIID iid,
void** interface_ptr) {
if (IID_IUnknown == iid || IID_IDispatch == iid || IID_IAccessible == iid) {