| Index: content/browser/renderer_host/legacy_render_widget_host_win.cc
|
| diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.cc b/content/browser/renderer_host/legacy_render_widget_host_win.cc
|
| index e4f603f0feb475c100332a997c237ef4be2fdb9e..84d95aced8ba6c667138154caec7a8c9a6e2a6e5 100644
|
| --- a/content/browser/renderer_host/legacy_render_widget_host_win.cc
|
| +++ b/content/browser/renderer_host/legacy_render_widget_host_win.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/win/windows_version.h"
|
| #include "content/browser/accessibility/browser_accessibility_manager_win.h"
|
| #include "content/browser/accessibility/browser_accessibility_win.h"
|
| +#include "content/public/browser/browser_accessibility_state.h"
|
| #include "content/public/common/content_switches.h"
|
| #include "ui/base/touch/touch_enabled.h"
|
| #include "ui/base/view_prop.h"
|
| @@ -18,6 +19,11 @@
|
|
|
| namespace content {
|
|
|
| +// A custom MSAA object id used to determine if a screen reader or some
|
| +// other client is listening on MSAA events - if so, we enable full web
|
| +// accessibility support.
|
| +const int kIdScreenReaderHoneyPot = 1;
|
| +
|
| LegacyRenderWidgetHostHWND::~LegacyRenderWidgetHostHWND() {
|
| ::DestroyWindow(hwnd());
|
| }
|
| @@ -100,6 +106,14 @@ bool LegacyRenderWidgetHostHWND::Init() {
|
| hwnd(), OBJID_WINDOW, IID_IAccessible,
|
| reinterpret_cast<void **>(window_accessible_.Receive()));
|
| DCHECK(SUCCEEDED(hr));
|
| +
|
| + if (!BrowserAccessibilityState::GetInstance()->IsAccessibleBrowser()) {
|
| + // Attempt to detect screen readers or other clients who want full
|
| + // accessibility support, by seeing if they respond to this event.
|
| + NotifyWinEvent(EVENT_SYSTEM_ALERT, hwnd(), kIdScreenReaderHoneyPot,
|
| + CHILDID_SELF);
|
| + }
|
| +
|
| return !!SUCCEEDED(hr);
|
| }
|
|
|
| @@ -119,6 +133,13 @@ LRESULT LegacyRenderWidgetHostHWND::OnEraseBkGnd(UINT message,
|
| LRESULT LegacyRenderWidgetHostHWND::OnGetObject(UINT message,
|
| WPARAM w_param,
|
| LPARAM l_param) {
|
| + if (kIdScreenReaderHoneyPot == l_param) {
|
| + // When an MSAA client has responded to our fake event on this id,
|
| + // enable screen reader support.
|
| + BrowserAccessibilityState::GetInstance()->OnScreenReaderDetected();
|
| + return static_cast<LRESULT>(0L);
|
| + }
|
| +
|
| if (OBJID_CLIENT != l_param || !manager_)
|
| return static_cast<LRESULT>(0L);
|
|
|
| @@ -303,4 +324,4 @@ LRESULT LegacyRenderWidgetHostHWND::OnSize(UINT message,
|
| return 0;
|
| }
|
|
|
| -} // namespace content
|
| +} // namespace content
|
|
|