Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit f3de40b

Browse files
committed
Bug 1956415 part 1: Add Compatibility::IsUiaEnabled. r=morgan
Initially, this just checks the accessibility.uia.enable pref. Other checks will be added in subsequent patches. All callers which previously checked the pref directly now call this function. Differential Revision: https://phabricator.services.mozilla.com/D243244
1 parent 3d23681 commit f3de40b

File tree

9 files changed

+27
-16
lines changed

9 files changed

+27
-16
lines changed

accessible/windows/ia2/ia2Accessible.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include "nsCoreUtils.h"
2121
#include "nsIAccessibleTypes.h"
2222
#include "mozilla/a11y/PDocAccessible.h"
23-
#include "mozilla/StaticPrefs_accessibility.h"
2423
#include "Relation.h"
2524
#include "TextRange-inl.h"
2625
#include "nsAccessibilityService.h"
@@ -355,7 +354,7 @@ ia2Accessible::get_windowHandle(HWND* aWindowHandle) {
355354
if (!acc) return CO_E_OBJNOTCONNECTED;
356355

357356
*aWindowHandle = MsaaAccessible::GetHWNDFor(acc);
358-
if (!*aWindowHandle && !StaticPrefs::accessibility_uia_enable()) {
357+
if (!*aWindowHandle && !Compatibility::IsUiaEnabled()) {
359358
// Bug 1890155: This can happen if a document is detached from its embedder.
360359
// The document might be about to die or it might be moving to a different
361360
// embedder; e.g. a tab in a different window. The IA2 -> UIA proxy may

accessible/windows/msaa/Compatibility.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,3 +214,9 @@ SuppressionReasons Compatibility::A11ySuppressionReasons() {
214214
}
215215
return reasons;
216216
}
217+
218+
/* static */
219+
bool Compatibility::IsUiaEnabled() {
220+
// This is the only function which should call the UIA pref function directly.
221+
return StaticPrefs::accessibility_uia_enable_DoNotUseDirectly();
222+
}

accessible/windows/msaa/Compatibility.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,14 @@ class Compatibility {
9898
}
9999
static SuppressionReasons A11ySuppressionReasons();
100100

101+
/**
102+
* Returns true if Gecko's native UI Automation implementation is enabled.
103+
* This is primarily configured via the accessibility.uia.enable pref.
104+
* However, it might be disabled if Gecko detects known incompatible clients
105+
* which would otherwise break.
106+
*/
107+
static bool IsUiaEnabled();
108+
101109
private:
102110
Compatibility();
103111
Compatibility(const Compatibility&);

accessible/windows/msaa/LazyInstantiator.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include "mozilla/a11y/Platform.h"
1313
#include "mozilla/Assertions.h"
1414
#include "mozilla/mscom/ProcessRuntime.h"
15-
#include "mozilla/StaticPrefs_accessibility.h"
1615
#include "mozilla/UniquePtr.h"
1716
#include "mozilla/WinHeaderOnlyUtils.h"
1817
#include "MsaaRootAccessible.h"
@@ -111,7 +110,7 @@ already_AddRefed<IAccessible> LazyInstantiator::GetRootAccessible(HWND aHwnd) {
111110
/* static */
112111
already_AddRefed<IRawElementProviderSimple> LazyInstantiator::GetRootUia(
113112
HWND aHwnd) {
114-
if (!StaticPrefs::accessibility_uia_enable()) {
113+
if (!Compatibility::IsUiaEnabled()) {
115114
return nullptr;
116115
}
117116
return GetRoot<IRawElementProviderSimple>(aHwnd);
@@ -381,7 +380,7 @@ LazyInstantiator::MaybeResolveRoot() {
381380
}
382381
// mWeakAccessible is weak, so don't hold a strong ref
383382
mWeakAccessible->Release();
384-
if (StaticPrefs::accessibility_uia_enable()) {
383+
if (Compatibility::IsUiaEnabled()) {
385384
hr = mRealRootUnk->QueryInterface(IID_IRawElementProviderSimple,
386385
(void**)&mWeakUia);
387386
if (FAILED(hr)) {
@@ -418,7 +417,7 @@ IMPL_IUNKNOWN_QUERY_IFACE_AMBIGIOUS(IUnknown, IAccessible)
418417
IMPL_IUNKNOWN_QUERY_IFACE(IAccessible)
419418
IMPL_IUNKNOWN_QUERY_IFACE(IDispatch)
420419
IMPL_IUNKNOWN_QUERY_IFACE(IServiceProvider)
421-
if (StaticPrefs::accessibility_uia_enable()) {
420+
if (Compatibility::IsUiaEnabled()) {
422421
IMPL_IUNKNOWN_QUERY_IFACE(IRawElementProviderSimple)
423422
}
424423
// See EnableBlindAggregation for comments.

accessible/windows/msaa/MsaaAccessible.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#include "mozilla/a11y/AccessibleWrap.h"
1515
#include "mozilla/a11y/Compatibility.h"
1616
#include "mozilla/a11y/DocAccessibleParent.h"
17-
#include "mozilla/StaticPrefs_accessibility.h"
1817
#include "MsaaAccessible.h"
1918
#include "MsaaDocAccessible.h"
2019
#include "MsaaRootAccessible.h"
@@ -518,7 +517,7 @@ MsaaAccessible::QueryInterface(REFIID iid, void** ppv) {
518517
if (SUCCEEDED(hr)) {
519518
return hr;
520519
}
521-
if (StaticPrefs::accessibility_uia_enable()) {
520+
if (Compatibility::IsUiaEnabled()) {
522521
hr = uiaRawElmProvider::QueryInterface(iid, ppv);
523522
if (SUCCEEDED(hr)) {
524523
return hr;

accessible/windows/msaa/MsaaRootAccessible.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
* License, v. 2.0. If a copy of the MPL was not distributed with this
44
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
55

6+
#include "mozilla/a11y/Compatibility.h"
67
#include "mozilla/a11y/DocAccessibleParent.h"
78
#include "mozilla/dom/BrowserParent.h"
8-
#include "mozilla/StaticPrefs_accessibility.h"
99
#include "mozilla/WindowsVersion.h"
1010
#include "MsaaRootAccessible.h"
1111
#include "Relation.h"
@@ -43,7 +43,7 @@ MsaaRootAccessible::InternalQueryInterface(REFIID aIid, void** aOutInterface) {
4343
return S_OK;
4444
}
4545

46-
if (StaticPrefs::accessibility_uia_enable() &&
46+
if (Compatibility::IsUiaEnabled() &&
4747
aIid == IID_IRawElementProviderFragmentRoot) {
4848
RefPtr<IRawElementProviderFragmentRoot> root = this;
4949
root.forget(aOutInterface);

accessible/windows/msaa/ServiceProvider.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
#include "RootAccessible.h"
1616
#include "uiaRawElmProvider.h"
1717

18+
#include "mozilla/a11y/Compatibility.h"
1819
#include "mozilla/a11y/DocAccessibleChild.h"
19-
#include "mozilla/StaticPrefs_accessibility.h"
2020

2121
#include "ISimpleDOM.h"
2222

@@ -87,8 +87,7 @@ ServiceProvider::QueryService(REFGUID aGuidService, REFIID aIID,
8787
aGuidService == IID_SimpleDOMDeprecated ||
8888
aGuidService == IID_IAccessible || aGuidService == IID_IAccessible2 ||
8989
// UIA IAccessibleEx
90-
(aGuidService == IID_IAccessibleEx &&
91-
StaticPrefs::accessibility_uia_enable())) {
90+
(aGuidService == IID_IAccessibleEx && Compatibility::IsUiaEnabled())) {
9291
return mMsaa->QueryInterface(aIID, aInstancePtr);
9392
}
9493

accessible/windows/uia/uiaRawElmProvider.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
#include "ia2AccessibleTable.h"
1818
#include "ia2AccessibleTableCell.h"
1919
#include "LocalAccessible-inl.h"
20+
#include "mozilla/a11y/Compatibility.h"
2021
#include "mozilla/a11y/RemoteAccessible.h"
21-
#include "mozilla/StaticPrefs_accessibility.h"
2222
#include "MsaaAccessible.h"
2323
#include "MsaaRootAccessible.h"
2424
#include "nsAccessibilityService.h"
@@ -140,7 +140,7 @@ Accessible* uiaRawElmProvider::Acc() const {
140140
/* static */
141141
void uiaRawElmProvider::RaiseUiaEventForGeckoEvent(Accessible* aAcc,
142142
uint32_t aGeckoEvent) {
143-
if (!StaticPrefs::accessibility_uia_enable()) {
143+
if (!Compatibility::IsUiaEnabled()) {
144144
return;
145145
}
146146
auto* uia = MsaaAccessible::GetFrom(aAcc);
@@ -220,7 +220,7 @@ void uiaRawElmProvider::RaiseUiaEventForGeckoEvent(Accessible* aAcc,
220220
void uiaRawElmProvider::RaiseUiaEventForStateChange(Accessible* aAcc,
221221
uint64_t aState,
222222
bool aEnabled) {
223-
if (!StaticPrefs::accessibility_uia_enable()) {
223+
if (!Compatibility::IsUiaEnabled()) {
224224
return;
225225
}
226226
auto* uia = MsaaAccessible::GetFrom(aAcc);

modules/libpref/init/StaticPrefList.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@
293293
type: bool
294294
value: false
295295
mirror: always
296+
do_not_use_directly: true
296297

297298
# Whether to avoid accessibility activation on Windows shortly after clipboard
298299
# copy.

0 commit comments

Comments
 (0)