diff --git a/src/core/qtwebengine_extras.gypi b/src/core/qtwebengine_extras.gypi index c0f4ce2319e8bc76d5fcaba86b00b509afe6b46a..d6c116bf343f9a6c533ec848ec1b58ce1a7f0d6b 100644 --- a/src/core/qtwebengine_extras.gypi +++ b/src/core/qtwebengine_extras.gypi @@ -37,11 +37,9 @@ ['exclude', 'browser/accessibility/browser_accessibility_cocoa\\.(cc|h)$'], ['exclude', 'browser/accessibility/browser_accessibility_gtk\\.(cc|h)$'], ['exclude', 'browser/accessibility/browser_accessibility_mac\\.(cc|h)$'], - ['exclude', 'browser/accessibility/browser_accessibility_win\\.(cc|h)$'], ['exclude', 'browser/accessibility/browser_accessibility_manager_android\\.(cc|h)$'], ['exclude', 'browser/accessibility/browser_accessibility_manager_gtk\\.(cc|h)$'], ['exclude', 'browser/accessibility/browser_accessibility_manager_mac\\.(cc|h)$'], - ['exclude', 'browser/accessibility/browser_accessibility_manager_win\\.(cc|h)$'], ], 'defines': [ 'TOOLKIT_QT', diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 76d599ea213cb5f2b15972265d5a51b7d04cdd1a..6b52e9314ba5522d4f00614405765e6bb0a59c66 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -41,8 +41,13 @@ #include "render_widget_host_view_qt.h" +#ifdef OS_WIN +#include "content/browser/accessibility/browser_accessibility_manager_win.h" +#include "content/browser/accessibility/browser_accessibility_win.h" +#else #include "browser_accessibility_manager_qt.h" #include "browser_accessibility_qt.h" +#endif #include "chromium_overrides.h" #include "delegated_frame_node.h" #include "render_widget_host_view_qt_delegate.h" @@ -264,8 +269,21 @@ gfx::NativeViewId RenderWidgetHostViewQt::GetNativeViewId() const gfx::NativeViewAccessible RenderWidgetHostViewQt::GetNativeViewAccessible() { - CreateBrowserAccessibilityManagerIfNeeded(); - return GetBrowserAccessibilityManager()->GetRoot(); +#ifdef OS_WIN + // keep in sync with render_widget_host_view_win.cpp + if (render_widget_host_ && + !BrowserAccessibilityState::GetInstance()->IsAccessibleBrowser()) { + // Attempt to detect screen readers by sending an event with our custom id. + NotifyWinEvent(EVENT_SYSTEM_ALERT, m_hWnd, kIdCustom, CHILDID_SELF); + } + + CreateBrowserAccessibilityManagerIfNeeded(); + + return GetBrowserAccessibilityManager()->GetRoot()-> + ToBrowserAccessibilityWin(); +#else + return 0; +#endif } void RenderWidgetHostViewQt::CreateBrowserAccessibilityManagerIfNeeded() @@ -273,10 +291,24 @@ void RenderWidgetHostViewQt::CreateBrowserAccessibilityManagerIfNeeded() if (GetBrowserAccessibilityManager()) return; +#ifdef OS_WIN + HRESULT hr = ::CreateStdAccessibleObject( + m_hWnd, OBJID_WINDOW, IID_IAccessible, + reinterpret_cast<void **>(&window_iaccessible_)); + DCHECK(SUCCEEDED(hr)); + + SetBrowserAccessibilityManager( + new BrowserAccessibilityManagerWin( + m_hWnd, + window_iaccessible_.get(), + BrowserAccessibilityManagerWin::GetEmptyDocument(), + this)); +#else SetBrowserAccessibilityManager(new content::BrowserAccessibilityManagerQt( m_adapterClient->accessibilityParentObject(), content::BrowserAccessibilityManagerQt::GetEmptyDocument(), this)); +#endif } // Set focus to the associated View component.