Commit Graph

274 Commits

Author SHA1 Message Date
Nathan LaPre
8a253fd1ef Bug 1901461: Implement UIA_StyleIdAttributeId, r=Jamie
This revision implements supportable styles covered by
UIA_StyleIdAttributeId. Namely, this includes the heading levels,
quotes, and emphasis. These are implemented with Accessible role checks.
To get the levels, this revision makes GetLevel a public function. It
also adds constant definitions for MinGW builds. Finally, this revision
adds tests to the existing GetAttributeValue tests.

Differential Revision: https://phabricator.services.mozilla.com/D229082
2024-11-15 19:36:43 +00:00
Vincent Hilla
d3c8be80cd Bug 1694789 - Map accessible value for input type color and password. r=dom-core,sefeng,Jamie,bolsson
Differential Revision: https://phabricator.services.mozilla.com/D216042
2024-10-22 13:23:18 +00:00
Nathan LaPre
82e1685960 Bug 1901463: Implement UIA ITextProvider::RangeFromPoint, r=Jamie
This revision implements RangeFromPoint by hittesting the screen location with
ChildAtPoint. Though the UIA documentation suggests that it may be correct to
find the closest text leaf to the screen coordinate, this revision restricts the
search to nodes under the screen coordinate directly. To accomplish this, it
creates two new functions: TextLeafPointAtScreenPoint, which manages the logic for
hit testing within a TextLeafRange, and FromAccessible, which creates a
TextLeafRange spanning the entire text leaf. Finally, this revision adds Windows
platform tests for the new functionality.

Differential Revision: https://phabricator.services.mozilla.com/D221902
2024-09-17 21:38:26 +00:00
Eitan Isaacson
dfeb809e68 Bug 1911518 - Don't use mozTextAccessible on container comboboxes. r=Jamie
This still does not resolve ARIA 1.0 styled boxes where the entry aria-owns the list.

Differential Revision: https://phabricator.services.mozilla.com/D218983
2024-09-03 19:23:15 +00:00
James Teh
7075505067 Bug 1901459 fixup: Cosmetic changes from code review that I applied locally and somehow neglected to push to Phabricator. r=morgan
Differential Revision: https://phabricator.services.mozilla.com/D216131
2024-07-11 23:28:17 +00:00
James Teh
2451b5f8bb Bug 1901459 part 2: Implement ITextRangeProvider::GetEnclosingElement. r=nlapre
Differential Revision: https://phabricator.services.mozilla.com/D215758
2024-07-09 02:52:15 +00:00
James Teh
d8a12f0303 Bug 1901457 part 2: Refactor TextLeafPoint caret retrieval so that the end of line insertion point can be stored without being tied to the current caret position. r=nlapre
Previously, TextLeafPoint::GetCaret() returned a placeholder representation of the caret.
ActualizeCaret() was then used to get the real caret position, optionally adjusting for the line end depending on the caller's needs.
This causes problems when we need to store the TextLeafPoint information in a UIA text range object because the only way to indicate the line end insertion point is to use the GetCaret() placeholder, but that also means the stored position changes if the caret moves.
For example, if you disabled NVDA's "caret moves review cursor" setting and then moved the caret, the review cursor should stay at the old position, but it didn't previously.

To fix this:

1. TextLeafPoint now has a new mIsEndOfLineInsertionPoint flag which is set to true by GetCaret() if appropriate.
2. GetCaret() sets mAcc and mOffset immediately, rather than needing to call ActualizeCaret() later.
3. TextLeafPoint methods still need to adjust the point to correctly handle the line end insertion point in some cases, but that is now handled by the private TextLeafPoint::AdjustEndOfLine method.
4. FindBoundary now correctly returns the previous character/cluster when requested for this end of line insertion point. Strictly speaking, this bug always existed, but no existing callers ever triggered it.

Differential Revision: https://phabricator.services.mozilla.com/D214342
2024-06-26 10:15:43 +00:00
James Teh
94794e02dc Bug 1887789 part 1: Fixes to Accessible::LandmarkRole. r=morgan
1. The ARIA role should take precedence over the HTML tag.
2. The ARIA region role should only be conditionally treated as a landmark. Use the Gecko role to determine this.
3. Change some other cases to use the Gecko role instead of directly checking the name for consistency and to avoid duplicated logic.

These fixes are tested in the next patch.

Differential Revision: https://phabricator.services.mozilla.com/D209099
2024-05-08 06:04:47 +00:00
Cristian Tuns
61fc92dc45 Backed out 3 changesets (bug 1887789) for causing wpt failures in form-roles.html CLOSED TREE
Backed out changeset 7b0ce9557ebf (bug 1887789)
Backed out changeset c39acac075fa (bug 1887789)
Backed out changeset 670a7e6fd98d (bug 1887789)
2024-05-07 03:25:18 -04:00
James Teh
75a487a75d Bug 1887789 part 1: Fixes to Accessible::LandmarkRole. r=morgan
1. The ARIA role should take precedence over the HTML tag.
2. The ARIA region role should only be conditionally treated as a landmark. Use the Gecko role to determine this.
3. Change some other cases to use the Gecko role instead of directly checking the name for consistency and to avoid duplicated logic.

These fixes are tested in the next patch.

Differential Revision: https://phabricator.services.mozilla.com/D209099
2024-05-07 02:54:00 +00:00
James Teh
76cf2fa9f9 Bug 1894436: Only expose an implicit selected state for focused option, tab and treeitem Accessibles. r=morgan
Previously, we did this for any focused, selectable item.
However, the ARIA spec says we should only do this for option, tab and treeitem.
In particular, we shouldn't do this for gridcell, as this can expose gridcells as selected when they aren't.

Differential Revision: https://phabricator.services.mozilla.com/D209132
2024-05-03 10:47:59 +00:00
Thomas Wisniewski
8b3a691117 Bug 1892349 - add doc-pageheader and doc-pagefooter ARIA DPUB roles, and have all DPUB roles return the expected computed rule; r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D207946
2024-04-19 04:23:25 +00:00
James Teh
869842129f Bug 1887788 part 1: Add Accessible::DOMNodeClass to get the DOM class without all the other work in Accessible::Attributes. r=nlapre
Differential Revision: https://phabricator.services.mozilla.com/D207512
2024-04-17 03:32:16 +00:00
Nathan LaPre
e9a44ec52c Bug 1849160 - Part 2: Add Accessible::FindAncestorIf, r=Jamie
This revision adds a utility function to find the nearest non-generic ancestor
for which a given predicate returns AncestorSearchOption::Found. The goal of
this function is to enable searching through ancestors, stopping when
appropriate. This is useful in a follow-up patch for finding requisite ancestors
of child role accessibility nodes.

Differential Revision: https://phabricator.services.mozilla.com/D205672
2024-04-10 17:22:13 +00:00
Nathan LaPre
71fd3eb9cb Bug 1849160 - Part 1: Implement rowgroup role, r=Jamie
This revision implements the ARIA rowgroup role in Gecko. Previously, Gecko was
using roles::GROUPING for multiple types of groups and disambiguating them
in various places. This revision unwinds that while maintaining present
functionality.

Differential Revision: https://phabricator.services.mozilla.com/D205671
2024-04-10 17:22:12 +00:00
Norisz Fay
9115fe463b Backed out 4 changesets (bug 1849160) for causing gv-junit failure on AccessibilityTest#testSelectable CLOSED TREE
Backed out changeset 0fb937f8c362 (bug 1849160)
Backed out changeset fe5651e406e5 (bug 1849160)
Backed out changeset 8f14ad3ed8b4 (bug 1849160)
Backed out changeset 9a745f454db2 (bug 1849160)
2024-04-02 07:32:11 +03:00
Nathan LaPre
69764d5ef9 Bug 1849160 - Part 2: Add Accessible::FindAncestorIf, r=Jamie
This revision adds a utility function to find the nearest non-generic ancestor
for which a given predicate returns AncestorSearchOption::Found. The goal of
this function is to enable searching through ancestors, stopping when
appropriate. This is useful in a follow-up patch for finding requisite ancestors
of child role accessibility nodes.

Differential Revision: https://phabricator.services.mozilla.com/D205672
2024-04-02 02:17:38 +00:00
Nathan LaPre
dcf1ffa60a Bug 1849160 - Part 1: Implement rowgroup role, r=Jamie
This revision implements the ARIA rowgroup role in Gecko. Previously, Gecko was
using roles::GROUPING for multiple types of groups and disambiguating them
in various places. This revision unwinds that while maintaining present
functionality.

Differential Revision: https://phabricator.services.mozilla.com/D205671
2024-04-02 02:17:38 +00:00
James Teh
55684ad8e9 Bug 1886371 part 6: Add UIA control types to RoleMap. r=nlapre
The actual ControlType property implementation is the subject of a subsequent patch.

Differential Revision: https://phabricator.services.mozilla.com/D205184
2024-03-25 03:28:05 +00:00
Eitan Isaacson
49fbd63cf8 Bug 1861211 - Make isAccessibilityElement conditional on a per-role basis. r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D191882
2024-03-04 21:19:09 +00:00
Eitan Isaacson
ce4f836785 Bug 1851273 - P2: Add accessible NSObject wrappers to gecko accessibles. r=Jamie,morgan,nlapre,nika
Also create common protocol for the stub UIKit view to delegate a11y calls to the root
gecko accessible.

Differential Revision: https://phabricator.services.mozilla.com/D187329
2024-03-04 21:11:49 +00:00
James Teh
5ea5ad1b92 Bug 1881195: Implement IsControlElement and IsContentElement UIA properties. r=nlapre
Exactly what should be a control element on the web and what shouldn't isn't really documented anywhere.
So, this is a little based on ideas from Chromium and a little based on my own understanding of how this should ideally work.
This will definitely need to be tweaked as we further develop UIA.
For now, the primary aim is to avoid the performance cliff caused by the UIA -> IA2 proxy's suboptimal implementation of IsControlElement.
We map IsContentElement to IsControlElement, just as Chromium does.

Differential Revision: https://phabricator.services.mozilla.com/D202923
2024-03-04 11:36:15 +00:00
Nathan LaPre
dbe5ffd60b Bug 1778795: role="form" with empty accessible name returns native role, r=Jamie
The ARIA spec requires that, for certain landmark roles with no author-specified
names, user agents must treat such elements as if no role had been provided.
This revision accomplishes that task by carving out an exception in
ARIATransformRole and ComputeARIARole for roles::FORM, similar to the existing
carveout for roles::REGION. This revision also implements a NameIsEmpty function
which is helpful for checking name emptiness (since we do this in a few places)
without leaving a "name" variable on the stack. Finally, this revision updates a
expected WPT failure (by removing it).

Differential Revision: https://phabricator.services.mozilla.com/D202778
2024-02-29 00:33:10 +00:00
Nathan LaPre
a2b1bf3551 Bug 1858051: Fix ComputedARIARole for <input type="search">, r=Jamie
The markup <input type="search"> will report a ComputedARIARole of "textbox,"
which isn't correct - it should return "searchbox." To address this issue, this
revision implements a change to ComputedARIARole for searchboxes, checking
IsSearchbox() and returning the searchbox atom if so. This revision also enables
the previously expected-failure relevant web platform test, since we now pass it.

Differential Revision: https://phabricator.services.mozilla.com/D200235
2024-02-02 18:23:21 +00:00
James Teh
378e556724 Bug 1372296: Unify ScrollSubstringToPoint for local and remote Accessibles, thus enabling support for RemoteAccessible on Windows. r=eeejay
Eventually, the bulk of this functionality should be moved to TextLeafRange.
In the meantime, let's get rid of the platform specific ugliness here.

Differential Revision: https://phabricator.services.mozilla.com/D185263
2023-08-08 05:18:55 +00:00
Narcis Beleuzu
7fcb244e50 Backed out changeset 270594af44f1 (bug 1372296) for bustages on ia2AccessibleText.cpp 2023-08-08 07:44:53 +03:00
James Teh
0a2d00604f Bug 1372296: Unify ScrollSubstringToPoint for local and remote Accessibles, thus enabling support for RemoteAccessible on Windows. r=eeejay
Eventually, the bulk of this functionality should be moved to TextLeafRange.
In the meantime, let's get rid of the platform specific ugliness here.

Differential Revision: https://phabricator.services.mozilla.com/D185263
2023-08-08 00:59:25 +00:00
CanadaHonk
a117230132 Bug 1824121 - Implement the <search> element r=hsivonen,Jamie,emilio
Implemented the new <search> HTML element.
All WPT tests for it now pass (except one for iso-8859-8, not done generally).

A11y role uses just landmark as recommended instead of a new search role (for now).

Co-authored-by: Henri Sivonen <hsivonen@mozilla.com>

Differential Revision: https://phabricator.services.mozilla.com/D176967
2023-08-07 22:11:05 +00:00
Stanca Serban
183a888a39 Backed out 3 changesets (bug 1824121) for causing wpt failures in html5lib_search-element.html. CLOSED TREE
Backed out changeset e3aec91d79e4 (bug 1824121)
Backed out changeset e3a3324b1732 (bug 1824121)
Backed out changeset 6ff5c272ab8e (bug 1824121)
2023-08-07 21:20:18 +03:00
CanadaHonk
631b819e14 Bug 1824121 - Implement the <search> element r=hsivonen,Jamie,emilio
Implemented the new <search> HTML element.
All WPT tests for it now pass (except one for iso-8859-8, not done generally).

A11y role uses just landmark as recommended instead of a new search role (for now).

Co-authored-by: Henri Sivonen <hsivonen@mozilla.com>

Differential Revision: https://phabricator.services.mozilla.com/D176967
2023-08-07 14:05:32 +00:00
Cosmin Sabou
b0f9a6e63d Backed out changeset c309e9b48aec (bug 1824121) for causing element related mochitest failures. CLOSED TREE 2023-08-07 16:05:13 +03:00
CanadaHonk
23a0c9beff Bug 1824121 - Implement the <search> element r=hsivonen,Jamie,emilio
Implemented the new <search> HTML element.
All WPT tests for it now pass (except one for iso-8859-8, not done generally).

A11y role uses just landmark as recommended instead of a new search role (for now).

Co-authored-by: Henri Sivonen <hsivonen@mozilla.com>

Differential Revision: https://phabricator.services.mozilla.com/D176967
2023-08-07 12:30:50 +00:00
Masayuki Nakano
0f39d7eda7 Bug 1266437 - Drop "OS" modifier r=smaug,m_kato,karlt,Gijs
On Windows, Windows logo key was mapped to "OS" modifier, and on Linux,
it's same and the key is called "Super" and "Hyper".  That conformed to the
older UI Events spec.

However, UI Events declares that they should be mapped to "Meta" now and Chrome
handles it as the spec in Windows and Linux.  Therefore, we should align the
behavior to them.

Note that we've treated the legacy "Meta" modifier on Linux as DOM "Meta"
modifier state, and we'll keep this as-is because in Sun/Solaris keyboard
layout, they keys are mapped to the legacy "Meta".

Finally, the following check only `IsMeta()` but not `IsOS()`.  I think that
they should've checked `IsOS()` too.  Therefore, they will behave differently
in Windows and Linux.
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/base/Element.cpp#3287-3288
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/html/HTMLInputElement.cpp#3762-3764
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/html/HTMLInputElement.cpp#3796-3806
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/html/HTMLLabelElement.cpp#127-128
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/widget/gtk/nsGtkKeyUtils.cpp#1461-1462

Note that `KEY_NAME_INDEX_OS` will be removed in the patch for bug 1232918.

Differential Revision: https://phabricator.services.mozilla.com/D183480
2023-08-07 01:03:58 +00:00
Cristian Tuns
f5572b469f Backed out 2 changesets (bug 1266437, bug 1232918) for causing mochitest failures in test_autoplay_policy_key_blacklist.html CLOSED TREE
Backed out changeset 33e3c6593d4b (bug 1232918)
Backed out changeset 1b56e99dd221 (bug 1266437)
2023-08-03 23:29:52 -04:00
James Teh
4286f529f3 Bug 1846660 part 4: Implement IAccessibleTextSelectionContainer interface. r=nlapre
get_selections is largely based on the old IAccessible2_3::get_selectionRanges method.
However, this makes use of HyperTextAccessibleBase::CroppedSelectionRanges, which didn't exist before.
It has also been updated to return IAccessibleText pointers as required by the new interface.

setSelections is entirely new, but relies on existing mechanisms to convert offsets and to add and remove selections.

Differential Revision: https://phabricator.services.mozilla.com/D185135
2023-08-04 02:51:43 +00:00
Natalia Csoregi
84729900a3 Backed out 4 changesets (bug 1846660) for causing bustage on ia2AccessibleTextSelectionContainer.h. CLOSED TREE
Backed out changeset c097c6502edc (bug 1846660)
Backed out changeset 9bf0e6ec2653 (bug 1846660)
Backed out changeset eb0515d87ee5 (bug 1846660)
Backed out changeset f12d2f98186b (bug 1846660)
2023-08-04 04:30:18 +03:00
Masayuki Nakano
0664d98bce Bug 1266437 - Drop "OS" modifier r=smaug,m_kato,karlt,Gijs
On Windows, Windows logo key was mapped to "OS" modifier, and on Linux,
it's same and the key is called "Super" and "Hyper".  That conformed to the
older UI Events spec.

However, UI Events declares that they should be mapped to "Meta" now and Chrome
handles it as the spec in Windows and Linux.  Therefore, we should align the
behavior to them.

Note that we've treated the legacy "Meta" modifier on Linux as DOM "Meta"
modifier state, and we'll keep this as-is because in Sun/Solaris keyboard
layout, they keys are mapped to the legacy "Meta".

Finally, the following check only `IsMeta()` but not `IsOS()`.  I think that
they should've checked `IsOS()` too.  Therefore, they will behave differently
in Windows and Linux.
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/base/Element.cpp#3287-3288
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/html/HTMLInputElement.cpp#3762-3764
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/html/HTMLInputElement.cpp#3796-3806
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/html/HTMLLabelElement.cpp#127-128
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/widget/gtk/nsGtkKeyUtils.cpp#1461-1462

Note that `KEY_NAME_INDEX_OS` will be removed in the patch for bug 1232918.

Differential Revision: https://phabricator.services.mozilla.com/D183480
2023-08-04 00:10:11 +00:00
James Teh
074cfeaa5f Bug 1846660 part 4: Implement IAccessibleTextSelectionContainer interface. r=nlapre
get_selections is largely based on the old IAccessible2_3::get_selectionRanges method.
However, this makes use of HyperTextAccessibleBase::CroppedSelectionRanges, which didn't exist before.
It has also been updated to return IAccessibleText pointers as required by the new interface.

setSelections is entirely new, but relies on existing mechanisms to convert offsets and to add and remove selections.

Differential Revision: https://phabricator.services.mozilla.com/D185135
2023-08-03 23:00:01 +00:00
Nathan LaPre
45c1a55d92 Bug 1840732 Part 2: Remove unnecessary includes from accessible/basetypes, r=Jamie
This revision removes unnecessary include directives from cpp files in the
accessible/basetypes directory. These suggestions came from the Include What You
Use tool.

Depends on D182288

Differential Revision: https://phabricator.services.mozilla.com/D182397
2023-07-07 03:22:07 +00:00
James Teh
ad06ac989f Bug 1840298: Unify ScrollToPoint for local and remote Accessibles, thus enabling support for RemoteAccessible on Windows. r=eeejay
Differential Revision: https://phabricator.services.mozilla.com/D181952
2023-07-04 22:25:33 +00:00
Eitan Isaacson
6998527d19 Bug 1754905 - Match Pivot API in nsIAccessiblePivot. r=Jamie
This patch does several things:
1. Remove virtual cursor doc accessible member.
2. Remove state-keeping nsAccessiblePivot implementation and replace it
   with something that is much more similar to the native Pivot
   interface.
3. Move nsIAccessiblePivot implementation to xpcom and rename it
   xpcAccessiblePivot.
4. Delete mochitests and introduce browser tests.
5. Make new xpcom implementation work on remote accessibles as well.

Differential Revision: https://phabricator.services.mozilla.com/D181813
2023-06-28 21:45:16 +00:00
Iulian Moraru
98478e7490 Backed out changeset f3095da827d9 (bug 1754905) for causing build bustages on DocAccessibleWrap. CLOSED TREE 2023-06-28 03:03:37 +03:00
Eitan Isaacson
556fa1bfbb Bug 1754905 - Match Pivot API in nsIAccessiblePivot. r=Jamie
This patch does several things:
1. Remove virtual cursor doc accessible member.
2. Remove state-keeping nsAccessiblePivot implementation and replace it
   with something that is much more similar to the native Pivot
   interface.
3. Move nsIAccessiblePivot implementation to xpcom and rename it
   xpcAccessiblePivot.
4. Delete mochitests and introduce browser tests.
5. Make new xpcom implementation work on remote accessibles as well.

Differential Revision: https://phabricator.services.mozilla.com/D181813
2023-06-27 16:59:54 +00:00
Butkovits Atila
9ac839ebe2 Backed out changeset 4d92a76cedd0 (bug 1754905) for causing bustages at LocalAccessible. CLOSED TREE 2023-06-27 03:46:47 +03:00
Eitan Isaacson
87391fa922 Bug 1754905 - Match Pivot API in nsIAccessiblePivot. r=Jamie
This patch does several things:
1. Remove virtual cursor doc accessible member.
2. Remove state-keeping nsAccessiblePivot implementation and replace it
   with something that is much more similar to the native Pivot
   interface.
3. Move nsIAccessiblePivot implementation to xpcom and rename it
   xpcAccessiblePivot.
4. Delete mochitests and introduce browser tests.
5. Make new xpcom implementation work on remote accessibles as well.

Differential Revision: https://phabricator.services.mozilla.com/D181813
2023-06-27 00:05:16 +00:00
James Teh
d9633f5b97 Bug 1831035 part 5: Remove the (now empty) platform specific DocAccessibleChild classes and rename DocAccessibleChildBase to DocAccessibleChild. r=eeejay
Differential Revision: https://phabricator.services.mozilla.com/D181850
2023-06-26 21:20:13 +00:00
Stanca Serban
f0967c3305 Backed out changeset 8be4693aecbb (bug 1754905) for causing bustages in xpcAccessiblePivot.h. CLOSED TREE 2023-06-24 03:22:31 +03:00
Eitan Isaacson
f872bcc7cc Bug 1754905 - Match Pivot API in nsIAccessiblePivot. r=Jamie
This patch does several things:
1. Remove virtual cursor doc accessible member.
2. Remove state-keeping nsAccessiblePivot implementation and replace it
   with something that is much more similar to the native Pivot
   interface.
3. Move nsIAccessiblePivot implementation to xpcom and rename it
   xpcAccessiblePivot.
4. Delete mochitests and introduce browser tests.
5. Make new xpcom implementation work on remote accessibles as well.

Differential Revision: https://phabricator.services.mozilla.com/D181813
2023-06-23 23:22:34 +00:00
Nathan LaPre
04801901d1 Bug 1615972: Fire a scrolling start event for non-interactive targets, r=Jamie
This revision changes our focus event and anchor scroll handling to fire
scrolling start events for non-interactive targets, where "non-interactive" is
defined as "any generic, landmark, or region Accessible." This revision also
adds a test to verify that the scrolling start event is fired.

Differential Revision: https://phabricator.services.mozilla.com/D181329
2023-06-22 20:14:41 +00:00
James Teh
987c8e49d5 Bug 1838782: Add null checks in HyperTextAccessibleBase::OffsetAtPoint. r=morgan
1. nsAccUtils::DocumentFor might return null if the Accessible is being moved and a client queried it during the move.
2. ChildAtPoint might return null if the point can't be located at all.

Differential Revision: https://phabricator.services.mozilla.com/D181213
2023-06-20 22:02:40 +00:00