// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_STATE_IMPL_H_ #define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_STATE_IMPL_H_ #include <memory> #include <vector> #include "base/time/time.h" #include "components/metrics/metrics_provider.h" #include "content/browser/accessibility/scoped_mode_collection.h" #include "content/common/content_export.h" #include "content/public/browser/browser_accessibility_state.h" #include "content/public/browser/render_widget_host.h" #include "ui/accessibility/ax_mode.h" #include "ui/accessibility/platform/ax_platform.h" namespace content { struct FocusedNodeDetails; // The BrowserAccessibilityState class is used to determine if Chrome should be // customized for users with assistive technology, such as screen readers. We // modify the behavior of certain user interfaces to provide a better experience // for screen reader users. The way we detect a screen reader program is // different for each platform. // // Screen Reader Detection // (1) On Windows, many screen reader detection mechanisms will give false // positives, such as relying on the SPI_GETSCREENREADER system parameter. // In Chrome, we attempt to dynamically detect a MSAA client screen reader // by calling NotifyWinEvent in NativeWidgetWin with a custom ID and wait // to see if the ID is requested by a subsequent call to WM_GETOBJECT. // (2) On macOS, we dynamically detect if VoiceOver is running by Key-Value // Observing changes to the "voiceOverEnabled" property in NSWorkspace. We // also monitor the undocumented accessibility attribute // @"AXEnhancedUserInterface", which is set by other assistive // technologies. class CONTENT_EXPORT BrowserAccessibilityStateImpl : public BrowserAccessibilityState, public ui::AXPlatform::Delegate, public content::RenderWidgetHost::InputEventObserver { … }; } // namespace content #endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_STATE_IMPL_H_