Skip to content

Commit ba3c5e3

Browse files
committed
Bug 1849398 - Gecko initiated a11y focus should not scroll. r=Jamie
If we send an Android ACCESSIBILITY_FOCUSED event because of a content update (ie. scrolling to anchor or DOM selection changes) we should not scroll the accessible into view. We should assume the content is being brought into view by itself. Testing: We already have tests to show that we scroll an accessible into view when navigating content, testing for the inverse (that the scroll is done by other means and NOT a11y) is very hard. Differential Revision: https://phabricator.services.mozilla.com/D199433
1 parent 4b439bc commit ba3c5e3

File tree

3 files changed

+10
-7
lines changed

3 files changed

+10
-7
lines changed

accessible/android/Platform.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ void a11y::PlatformEvent(Accessible* aTarget, uint32_t aEventType) {
100100
if (Accessible* result = AccessibleWrap::DoPivot(
101101
aTarget, java::SessionAccessibility::HTML_GRANULARITY_DEFAULT,
102102
true, true)) {
103-
sessionAcc->SendAccessibilityFocusedEvent(result);
103+
sessionAcc->SendAccessibilityFocusedEvent(result, false);
104104
}
105105
break;
106106
default:
@@ -167,7 +167,7 @@ void a11y::PlatformCaretMoveEvent(Accessible* aTarget, int32_t aOffset,
167167
if (Accessible* result = AccessibleWrap::DoPivot(
168168
leaf, java::SessionAccessibility::HTML_GRANULARITY_DEFAULT, true,
169169
true)) {
170-
sessionAcc->SendAccessibilityFocusedEvent(result);
170+
sessionAcc->SendAccessibilityFocusedEvent(result, false);
171171
}
172172
}
173173
}

accessible/android/SessionAccessibility.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ bool SessionAccessibility::Pivot(int32_t aID, int32_t aGranularity,
168168
MOZ_ASSERT(_acc->IsLocal());
169169
if (Accessible* result = AccessibleWrap::DoPivot(
170170
_acc, aGranularity, aForward, aInclusive)) {
171-
SendAccessibilityFocusedEvent(result);
171+
SendAccessibilityFocusedEvent(result, true);
172172
}
173173
}
174174
});
@@ -181,7 +181,7 @@ bool SessionAccessibility::Pivot(int32_t aID, int32_t aGranularity,
181181
nsAppShell::PostEvent([this, self, virtualViewID] {
182182
MonitorAutoLock mal(nsAccessibilityService::GetAndroidMonitor());
183183
if (Accessible* acc = GetAccessibleByID(virtualViewID)) {
184-
SendAccessibilityFocusedEvent(acc);
184+
SendAccessibilityFocusedEvent(acc, true);
185185
}
186186
});
187187
return true;
@@ -411,13 +411,15 @@ RefPtr<SessionAccessibility> SessionAccessibility::GetInstanceFor(
411411
}
412412

413413
void SessionAccessibility::SendAccessibilityFocusedEvent(
414-
Accessible* aAccessible) {
414+
Accessible* aAccessible, bool aScrollIntoView) {
415415
MOZ_ASSERT(NS_IsMainThread());
416416
mSessionAccessibility->SendEvent(
417417
java::sdk::AccessibilityEvent::TYPE_VIEW_ACCESSIBILITY_FOCUSED,
418418
AccessibleWrap::GetVirtualViewID(aAccessible),
419419
AccessibleWrap::AndroidClass(aAccessible), nullptr);
420-
aAccessible->ScrollTo(nsIAccessibleScrollType::SCROLL_TYPE_ANYWHERE);
420+
if (aScrollIntoView) {
421+
aAccessible->ScrollTo(nsIAccessibleScrollType::SCROLL_TYPE_ANYWHERE);
422+
}
421423
}
422424

423425
void SessionAccessibility::SendHoverEnterEvent(Accessible* aAccessible) {

accessible/android/SessionAccessibility.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ class SessionAccessibility final
6565
int32_t aScrollY, int32_t aMaxScrollX,
6666
int32_t aMaxScrollY);
6767
MOZ_CAN_RUN_SCRIPT_BOUNDARY
68-
void SendAccessibilityFocusedEvent(Accessible* aAccessible);
68+
void SendAccessibilityFocusedEvent(Accessible* aAccessible,
69+
bool aScrollIntoView);
6970
void SendHoverEnterEvent(Accessible* aAccessible);
7071
void SendTextSelectionChangedEvent(Accessible* aAccessible,
7172
int32_t aCaretOffset);

0 commit comments

Comments
 (0)