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

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

Issue 2720003: Relanding 49339 ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 6 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 49343)
+++ chrome/browser/renderer_host/render_widget_host_view_win.cc (working copy)
@@ -252,7 +252,6 @@
paint_rect.width(), paint_rect.height());
canvas.getTopPlatformDevice().drawToHDC(paint_dc, paint_rect.x(),
paint_rect.y(), NULL);
-
}
} // namespace
@@ -284,12 +283,15 @@
is_loading_(false),
visually_deemphasized_(false) {
render_widget_host_->set_view(this);
- renderer_accessible_ =
- CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableRendererAccessibility);
registrar_.Add(this,
NotificationType::RENDERER_PROCESS_TERMINATED,
NotificationService::AllSources());
+
+ BOOL screenreader_running = FALSE;
+ if (SystemParametersInfo(SPI_GETSCREENREADER, 0, &screenreader_running, 0) &&
+ screenreader_running) {
+ render_widget_host_->EnableRendererAccessibility();
+ }
}
RenderWidgetHostViewWin::~RenderWidgetHostViewWin() {
@@ -1483,6 +1485,9 @@
const webkit_glue::WebAccessibility& tree) {
browser_accessibility_manager_.reset(
new BrowserAccessibilityManager(m_hWnd, tree, this));
+
+ ::NotifyWinEvent(
+ IA2_EVENT_DOCUMENT_LOAD_COMPLETE, m_hWnd, OBJID_CLIENT, CHILDID_SELF);
}
void RenderWidgetHostViewWin::OnAccessibilityFocusChange(int acc_obj_id) {
@@ -1542,18 +1547,46 @@
LRESULT RenderWidgetHostViewWin::OnGetObject(UINT message, WPARAM wparam,
LPARAM lparam, BOOL& handled) {
- // TODO(dmazzoni): http://crbug.com/25564 Disabling accessibility in the
- // renderer is a temporary work-around until that bug is fixed.
- if (!renderer_accessible_) {
+ if (lparam != OBJID_CLIENT) {
handled = false;
return static_cast<LRESULT>(0L);
}
- if (lparam == OBJID_CLIENT && browser_accessibility_manager_.get()) {
+ if (!browser_accessibility_manager_.get()) {
+ render_widget_host_->EnableRendererAccessibility();
+
+ if (!loading_accessible_.get()) {
+ // Create IAccessible to return while waiting for the accessibility tree
+ // from the renderer.
+ HRESULT hr = ::CreateStdAccessibleObject(
+ m_hWnd, OBJID_CLIENT, IID_IAccessible,
+ reinterpret_cast<void **>(&loading_accessible_));
+
+ // Annotate with STATE_SYSTEM_BUSY to indicate that the page is loading.
+ // We annotate the HWND, not the loading_accessible IAccessible, but the
+ // IAccessible will reflect the state annotation.
+ ScopedComPtr<IAccPropServices> pAccPropServices;
+ hr = CoCreateInstance(CLSID_AccPropServices, NULL, CLSCTX_SERVER,
+ IID_IAccPropServices, reinterpret_cast<void**>(&pAccPropServices));
+ if (SUCCEEDED(hr)) {
+ VARIANT var;
+ var.vt = VT_I4;
+ var.lVal = STATE_SYSTEM_BUSY;
+ pAccPropServices->SetHwndProp(m_hWnd, OBJID_CLIENT,
+ CHILDID_SELF, PROPID_ACC_STATE, var);
+ }
+ }
+
+ if (loading_accessible_.get()) {
+ return LresultFromObject(
+ IID_IAccessible, wparam,
+ static_cast<IAccessible*>(loading_accessible_));
+ }
+ } else {
BrowserAccessibility* root = browser_accessibility_manager_->GetRoot();
if (root) {
return LresultFromObject(IID_IAccessible, wparam,
- static_cast<IAccessible*>(root->NewReference()));
+ static_cast<IAccessible*>(root->NewReference()));
}
}
« 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