Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1117)

Unified Diff: chrome/browser/render_widget_host_hwnd.cc

Issue 4057: Adds MSAA/IAccessible exposure of web content. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/render_widget_host_hwnd.cc
===================================================================
--- chrome/browser/render_widget_host_hwnd.cc (revision 2530)
+++ chrome/browser/render_widget_host_hwnd.cc (working copy)
@@ -9,6 +9,8 @@
#include "base/gfx/rect.h"
#include "base/histogram.h"
#include "base/win_util.h"
+#include "chrome/browser/browser_accessibility.h"
+#include "chrome/browser/browser_accessibility_manager.h"
#include "chrome/browser/render_process_host.h"
// TODO(beng): (Cleanup) we should not need to include this file... see comment
// in |DidBecomeSelected|.
@@ -747,6 +749,55 @@
}
}
+LRESULT RenderWidgetHostHWND::OnGetObject(UINT message, WPARAM wparam,
+ LPARAM lparam, BOOL& handled) {
+ LRESULT reference_result = static_cast<LRESULT>(0L);
+
+ // Accessibility readers will send an OBJID_CLIENT message.
+ if (OBJID_CLIENT == lparam) {
+ // If our MSAA DOM root is already created, reuse that pointer. Otherwise,
+ // create a new one.
+ if (!browser_accessibility_root_) {
+ CComObject<BrowserAccessibility>* accessibility = NULL;
+
+ if (!SUCCEEDED(CComObject<BrowserAccessibility>::CreateInstance(
+ &accessibility)) || !accessibility) {
+ // Return with failure.
+ return static_cast<LRESULT>(0L);
+ }
+
+ CComPtr<IAccessible> accessibility_comptr(accessibility);
+
+ // Root id is always 0, to distinguish this particular instance when
+ // mapping to the render-side IAccessible.
+ accessibility->set_iaccessible_id(0);
+
+ // Set the unique member variables of this particular process.
+ accessibility->set_instance_id(BrowserAccessibilityManager::Instance()->
+ SetMembers(accessibility, m_hWnd, render_widget_host_));
+
+ // All is well, assign the temp instance to the class smart pointer.
+ browser_accessibility_root_.Attach(accessibility_comptr.Detach());
+
+ if (!browser_accessibility_root_) {
+ // Paranoia check. Return with failure.
+ NOTREACHED();
+ return static_cast<LRESULT>(0L);
+ }
+
+ // Notify that an instance of IAccessible was allocated for m_hWnd.
+ ::NotifyWinEvent(EVENT_OBJECT_CREATE, m_hWnd, OBJID_CLIENT,
+ CHILDID_SELF);
+ }
+
+ // Create a reference to ViewAccessibility that MSAA will marshall
+ // to the client.
+ reference_result = LresultFromObject(IID_IAccessible, wparam,
+ static_cast<IAccessible*>(browser_accessibility_root_));
+ }
+ return reference_result;
+}
+
void RenderWidgetHostHWND::OnFinalMessage(HWND window) {
render_widget_host_->ViewDestroyed();
delete this;

Powered by Google App Engine
This is Rietveld 408576698