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

Unified Diff: chrome/browser/renderer_host/render_widget_host_view_win.cc

Issue 1637018: Reimplement web content accessibility by caching in browser process (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 7 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/renderer_host/render_widget_host_view_win.cc
===================================================================
--- chrome/browser/renderer_host/render_widget_host_view_win.cc (revision 46908)
+++ chrome/browser/renderer_host/render_widget_host_view_win.cc (working copy)
@@ -13,6 +13,7 @@
#include "base/process_util.h"
#include "base/thread.h"
#include "base/win_util.h"
+#include "chrome/browser/browser_accessibility.h"
#include "chrome/browser/browser_accessibility_manager.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_trial.h"
@@ -26,6 +27,7 @@
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/native_web_keyboard_event.h"
+#include "chrome/common/notification_service.h"
#include "chrome/common/plugin_messages.h"
#include "chrome/common/render_messages.h"
#include "gfx/canvas.h"
@@ -285,6 +287,9 @@
renderer_accessible_ =
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableRendererAccessibility);
+ registrar_.Add(this,
+ NotificationType::RENDERER_PROCESS_TERMINATED,
+ NotificationService::AllSources());
}
RenderWidgetHostViewWin::~RenderWidgetHostViewWin() {
@@ -1472,40 +1477,64 @@
return MA_ACTIVATE;
}
+void RenderWidgetHostViewWin::UpdateAccessibilityTree(
+ const webkit_glue::WebAccessibility& tree) {
+ browser_accessibility_manager_.reset(
+ new BrowserAccessibilityManager(m_hWnd, tree));
+}
+
+void RenderWidgetHostViewWin::OnAccessibilityFocusChange(int acc_obj_id) {
+ if (browser_accessibility_manager_.get()) {
+ browser_accessibility_manager_->OnAccessibilityFocusChange(acc_obj_id);
+ }
+}
+
+void RenderWidgetHostViewWin::OnAccessibilityObjectStateChange(int acc_obj_id) {
+ if (browser_accessibility_manager_.get()) {
+ browser_accessibility_manager_->OnAccessibilityObjectStateChange(
+ acc_obj_id);
+ }
+}
+
+void RenderWidgetHostViewWin::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ DCHECK(type == NotificationType::RENDERER_PROCESS_TERMINATED);
+
+ // Get the RenderProcessHost that posted this notification, and exit
+ // if it's not the one associated with this host view.
+ RenderProcessHost* render_process_host =
+ Source<RenderProcessHost>(source).ptr();
+ DCHECK(render_process_host);
+ if (!render_widget_host_ ||
+ render_process_host != render_widget_host_->process())
+ return;
+
+ // If it was our RenderProcessHost that posted the notification,
+ // clear the BrowserAccessibilityManager, because the renderer is
+ // dead and any accessibility information we have is now stale.
+ browser_accessibility_manager_.reset(NULL);
+}
+
LRESULT RenderWidgetHostViewWin::OnGetObject(UINT message, WPARAM wparam,
LPARAM lparam, BOOL& handled) {
- LRESULT reference_result = static_cast<LRESULT>(0L);
- // TODO(jcampan): http://b/issue?id=1432077 Disabling accessibility in the
+ // TODO(dmazzoni): http://crbug.com/25564 Disabling accessibility in the
// renderer is a temporary work-around until that bug is fixed.
- if (!renderer_accessible_)
- return reference_result;
+ if (!renderer_accessible_) {
+ handled = false;
+ return 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_) {
- // Create a new instance of IAccessible. Root id is 1000, to avoid
- // conflicts with the ids used by MSAA.
- BrowserAccessibilityManager::GetInstance()->CreateAccessibilityInstance(
- IID_IAccessible, 1000,
- render_widget_host_->routing_id(),
- render_widget_host_->process()->id(),
- m_hWnd,
- reinterpret_cast<void **>(browser_accessibility_root_.Receive()));
-
- if (!browser_accessibility_root_) {
- // No valid root found, return with failure.
- return static_cast<LRESULT>(0L);
- }
+ if (lparam == OBJID_CLIENT && browser_accessibility_manager_.get()) {
+ BrowserAccessibility* root = browser_accessibility_manager_->GetRoot();
+ if (root) {
+ return LresultFromObject(IID_IAccessible, wparam,
+ static_cast<IAccessible*>(root->NewReference()));
}
+ }
- // Create a reference to BrowserAccessibility which MSAA will marshall to
- // the client.
- reference_result = LresultFromObject(IID_IAccessible, wparam,
- static_cast<IAccessible*>(browser_accessibility_root_));
- }
- return reference_result;
+ handled = false;
+ return static_cast<LRESULT>(0L);
}
void RenderWidgetHostViewWin::OnFinalMessage(HWND window) {
« no previous file with comments | « chrome/browser/renderer_host/render_widget_host_view_win.h ('k') | chrome/browser/tab_contents/tab_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698