Accessibility/CacheTheWorld: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(Added Roadmap.)
(Fix backlog query so it doesn't include resolved bugs.)
Line 81: Line 81:
<bugzilla>
<bugzilla>
     {
     {
         "quicksearch": "ALL blocked:1694563,1733486,1735970,1733417 -whiteboard:[ctw-m",
         "quicksearch": "blocked:1694563,1733486,1735970,1733417 -whiteboard:[ctw-m",
         "include_fields": "id, summary, assigned_to, status"
         "include_fields": "id, summary, assigned_to, status"
     }
     }
</bugzilla>
</bugzilla>

Revision as of 02:49, 22 December 2021

About

Firefox's current architecture for multi-process accessibility suffers from severe performance issues and is costly and difficult to maintain due to the massively different and specialised approaches necessary on different operating systems. In addition, it is currently impossible to support builtin Windows accessibility tools such as Narrator and Windows Speech Recognition. This project aims to re-architect our multi-process accessibility support to cache the entire accessibility trees for all content processes within the parent process.

Meeting Notes

Jamie, Morgan, and Eitan meet weekly to discuss this project. You can find the meeting notes in this google doc.

Roadmap

Given the large scope of the project, we are breaking the project down into quarterly milestones. Each milestone will aim to support a set of user scenarios. This roadmap is in the early stages and subject to significant change. It will be updated as milestones become clearer, with future milestones being less well defined than earlier ones.

Milestone 0: December 2021

Initial proof of concept.

All testing will be performed with the NVDA screen reader, for two reasons:

  1. Cache the World is all or nothing on Windows. That makes it easy to determine where we're at regarding real world usage.
  2. The performance benefits are most necessary and noticeable on Windows.

In milestone 0, the following capabilities will be provided:

  1. Reading and navigating a page with text, links and headings.
  2. Plain text editing: reading the line of text when focused; backspacing; moving the caret by line, word and character.
  3. Access to formatting information: font, bold/italic, etc.
  4. Access to screen coordinates on simple pages.
  5. Loading very large pages will be at least 10x faster with the cache than without.

Test Scenarios

  1. Do a Google search, navigate the results using heading navigation and follow a result link.
  2. Fill out the form for a Google Advanced Search.
  3. Go to https://www.reaper.fm. Check the formatting of the “This is REAPER.” text (which isn’t a heading even though it should be) and confirm that the font size is reported as bigger than the paragraph of text below it.
  4. Build Gecko in the background. Do a Google search. Verify that the browser does not become unresponsive.
  5. Load https://searchfox.org/mozilla-central/source/layout/base/nsCSSFrameConstructor.cpp. Page should take < 10 sec to be usable.
  6. Open Gmail, find a message in the inbox, open it, read it, return to the inbox.
  7. Compose a message in Gmail containing text, a link, a bulleted list and a block quote. Read back through the message.
  8. Open Slack, use the quick switcher to switch to a channel, read some messages, write a message.

Bugzilla

Note that the roadmap wasn't created until late in milestone 0, so many bugs are missing below.

Full Query
ID Summary Assigned to Status
1735955 Cached bounds all 0s for many (most?) elements on Google search James Teh [:Jamie] RESOLVED
1739050 If the focused Accessible is moved, the RemoteAccessible is recreated but focus isn't fired on it (AKA broken Google Search box on Windows + CTW) James Teh [:Jamie] RESOLVED
1741792 Cache the caret James Teh [:Jamie] RESOLVED
1742902 Fix window emulation when the cache is enabled James Teh [:Jamie] RESOLVED
1742915 Cache tag object attribute James Teh [:Jamie] RESOLVED
1742917 Implement StartOffset for RemoteAccessible and LinkIndexAtOffset for HyperTextAccessibleBase James Teh [:Jamie] RESOLVED
1746827 Crash in [@ PLDHashTable::Search | mozilla::a11y::RemoteAccessibleBase<T>::MinValue] James Teh [:Jamie] RESOLVED

7 Total; 0 Open (0%); 7 Resolved (100%); 0 Verified (0%);


Milestone 1: March 2022

Android.

The primary focus of this milestone is getting the cache working for Android. Mozilla aims to implement Fission for Android in 2022h1. Modifying the existing multi-process architecture to support Fission on Android will require significant engineering effort. Rather than investing in a solution which we will be throwing away once the cache is implemented, we will instead switch Android to use the cache and extend the cache to include functionality required by Android.

In milestone 1, the following capabilities will be provided:

  1. The cache will support GroupPosition.
  2. TextLeafRange will support word end and line end boundaries, which are needed for Android text navigation.
  3. Pivot will support navigating text using TextLeafRange, which is needed for Android text navigation.
  4. Cached screen bounds will be updated appropriately when scrolling.
  5. Android will use the cache for all functionality except hit testing.
  6. As an interim solution, Android will use the existing async IPDL mechanism for hit testing, updated to target the call at the correct document to handle OOP iframes. (Synchronous hit testing in the core cache will take longer to implement and will be done in a future milestone.)

Test Scenarios

  1. TBD: simple website reading. News site?
  2. TBD: filling a form.
  3. TBD: character/word/line navigation.
  4. With Talkback, load https://www.nvaccess.org/. Navigate to the embedded video in four different ways: item navigation, explore by touch, controls navigation and Talkback search. Activate the Play button to play the video.

Bugzilla

Full Query
ID Summary Assigned to Status
1730085 TextLeafPoint: Implement BOUNDARY_WORD_END and BOUNDARY_LINE_END James Teh [:Jamie] RESOLVED
1730086 TextLeafPoint: Implement HyperTextAccessible::TextBefore/AfterOffset using TextLeafPoint James Teh [:Jamie] RESOLVED
1730090 TextLeafPoint: Implement BOUNDARY_PARAGRAPH James Teh [:Jamie] RESOLVED
1733268 Cache OPAQUE1 state (no state change event) Morgan Reschenberg [:morgan] RESOLVED
1735970 New table implementation which can work with the cache James Teh [:Jamie] RESOLVED
1737944 Implement GroupPosition for cached RemoteAccessibles Eitan Isaacson [:eeejay] RESOLVED
1741793 Cache text selection James Teh [:Jamie] RESOLVED
1746833 Implement textual value for cached RemoteAccessibles Eitan Isaacson [:eeejay] RESOLVED
1747172 Make Pivot text functions use HyperTextAccessibleBase James Teh [:Jamie] RESOLVED
1747835 Cache text input type Eitan Isaacson [:eeejay] RESOLVED
1748749 Cache ActionCount/ActionNameAt Eitan Isaacson [:eeejay] RESOLVED
1749828 Support cached grouppos in windows and xpcom Eitan Isaacson [:eeejay] RESOLVED
1752380 Support actions in linkable accessible's indirect actions Eitan Isaacson [:eeejay] RESOLVED
1754360 Move EndOffset to base Accessible James Teh [:Jamie] RESOLVED
1755420 Clean up HyperTextAccessible methods now that all boundaries are supported by TextLeafPoint James Teh [:Jamie] RESOLVED
1755817 Implement cached version of LandmarkRole Eitan Isaacson [:eeejay] RESOLVED
1756229 Cache scroll offset Morgan Reschenberg [:morgan] RESOLVED
1756528 TextRange::Crop doesn't crop siblings James Teh [:Jamie] RESOLVED
1757812 Make android pivot traversal rules remote friendly. Eitan Isaacson [:eeejay] RESOLVED
1758009 Description is not proxied in RemoteAccessibleWrap Eitan Isaacson [:eeejay] RESOLVED
1758540 Pref on a11y.cache.enabled in Android Eitan Isaacson [:eeejay] RESOLVED
1758559 Add cross domain iframe tests to Android a11y tests Eitan Isaacson [:eeejay] RESOLVED
1758592 Use pivot result to determine boundaries in parent-side traversal Eitan Isaacson [:eeejay] RESOLVED
1758811 Stop using java cache when gecko a11y cache is enabled Eitan Isaacson [:eeejay] RESOLVED
1760735 Support TableAccessibleBase in AccGroupInfo James Teh [:Jamie] RESOLVED
1765430 Remove RemoteAccessibleWrap and map accessibles to their IDs in SessionAccessibility. Eitan Isaacson [:eeejay] RESOLVED
1765433 Make GetNodeInfo and Pivot methods run safely in Android UI thread Eitan Isaacson [:eeejay] RESOLVED
1768726 Make RemoteAccessibleBase::BoundsWithOffset thread safe for Android Eitan Isaacson [:eeejay] RESOLVED
1768913 Don't send WINDOW_CONTENT_CHANGED when about:blank loads Eitan Isaacson [:eeejay] RESOLVED
1768927 Don't use StringBundle off main thread Eitan Isaacson [:eeejay] RESOLVED
1768972 DocAccessibleParent::AddChildDoc calls RecvEvent causing monitor lock reentry Eitan Isaacson [:eeejay] RESOLVED
1769640 Cache AppUnitsPerDevPixel in top DocAccessibleParents Eitan Isaacson [:eeejay] RESOLVED
1771271 102.0a1 Crash Report PLDHashTable::Search | mozilla::a11y::RemoteAccessibleBase<T>::RetrieveCachedBounds Eitan Isaacson [:eeejay] RESOLVED
1771931 Crash in [@ OOM | large | NS_ABORT_OOM | nsTArray_base<T>::EnsureCapacity<T> | mozilla::a11y::CachedTableAccessible::EnsureRowCol] James Teh [:Jamie] RESOLVED
1771934 Crash in [@ mozilla::a11y::AccessibleWrap::GetVirtualViewID] James Teh [:Jamie] RESOLVED
1772019 Delay WillRefresh until PresShell is initialized Eitan Isaacson [:eeejay] RESOLVED
1772032 Crash in [@ nsContentUtils::GetLinkLocation] Eitan Isaacson [:eeejay] RESOLVED
1772165 Turn off ctw on Android Beta/Release Eitan Isaacson [:eeejay] RESOLVED
1772170 Crash in [@ mozilla::a11y::TextRange::CommonParent] James Teh [:Jamie] RESOLVED
1773260 Crash in [@ mozilla::a11y::SessionAccessibility::PopulateNodeInfo] RESOLVED

40 Total; 0 Open (0%); 40 Resolved (100%); 0 Verified (0%);


Milestone 2: June 2022

TBD. Opt-in user preview. Enable in Nightly?

Milestone 3: September 2022

TBD. Beta experiment? Release experiment?

Backlog

Full Query
ID Summary Assigned to Status
1730868 TextLeafPoint: Better handling for inline-block for line boundaries NEW
1739559 Cache isn't updated when text attributes change NEW
1757260 Cache initial focus, caret and text selection NEW
1768951 Some text bounds are incorrectly calculated within iframes NEW
1769165 Make CharBounds handle embedded characters NEW
1771429 [CTW] Consider caching for RemoteAccessibleBase::EmbeddedChildAt NEW
1774785 [CTW] Cache math attributes NEW
1796731 [CTW] Name is incorrect for initial aria-owns NEW
1809699 [CTW] Consider simplifying char rect caching by using a line iterator NEW
1812165 Assertion failure: false (MOZ_ASSERT_UNREACHABLE: No remote found!), at /builds/worker/checkouts/gecko/accessible/ipc/DocAccessibleParent.cpp:639 NEW
1816514 [CTW] Can't focus some elements when scrolling UNCONFIRMED
1822443 [CTW] TextLeafPoint::FindTextAttrsStart should walk into the next/previous container NEW
1822457 [CTW] Use the cached focus instead of PDocAccessible::RestoreFocus NEW
1825085 cached LINKS_TO relation is slow NEW
1825172 Consider whether TextLeafPoint::FindBoundary should return an invalid point when it can't move any further NEW
1846186 [meta] Bounds and hittesting incorrect for multiple elements on db.msin.jp NEW
1852865 MaybeInitWindowEmulation calls RemoteAccessible::Bounds before cache is received NEW
1861026 AT-SPI2 cannot be used to modify text UNCONFIRMED
1862805 Remove MozMouseExploreByTouch event James Teh [:Jamie] NEW

19 Total; 19 Open (100%); 0 Resolved (0%); 0 Verified (0%);