Closed Bug 1730096 Opened 3 years ago Closed 3 years ago

TextLeafPoint/Range: Implement support for format boundaries


(Core :: Disability Access APIs, task)




96 Branch
Tracking Status
firefox96 --- fixed


(Reporter: Jamie, Assigned: Jamie)


(Blocks 1 open bug)



(9 files)

Clients need to be able to get a range of text with the same formatting. TextLeafPoint/Range needs to support this. Perhaps we could add a BOUNDARY_FORMAT or similar which is supported by TextLeafPoint::FindBoundary.

Depends on: 1729407
No longer depends on: 1730087

Most formatting spans an entire DOM element, so we can cache it by just caching the formatting attributes on each text leaf. To find the format boundary, we can search the tree looking for changes in the attributes. However, spelling errors (and eventually grammar errors) are more complicated because they can span just part of a text leaf. The same will be true for the upcoming CSS Custom Highlight API.

For spelling errors, I'm thinking it probably makes sense to cache the spelling error selection ranges on the document. We're probably going to have to do similarly for normal text selection. When searching for format boundaries, we'd then tweak the returned range if it overlapped any spelling error range.

No longer blocks: a11y-ctw

This will be used later to check whether text attributes are different between two Accessibles.
I added this as a method instead of operator== because callers always hold a pointer to AccAttributes, and *a1 == *a2 is weird and will probably lead to mistakes.
This required adding operator== for our value structs.

Assignee: nobody → jteh

This supports both fetching text attributes and finding the start of attribute runs, but only for LocalAccessible.
Support for RemoteAccessible will be added in a subsequent patch.

This uses TextLeafPoint.
This patch includes support for ATK, IA2 and XPCOM.
As with TextAtOffset, HyperTextAccessible calls the base implementation if the cache is enabled, but otherwise uses the old implementation for now.

This will be used to include text attributes as part of the cache for an Accessible.

This is necessary for two reasons:

  1. Leaf text attributes and default text attributes are cached separately, since the caller can choose whether to include defaults or not. This means merging them together.
  2. Methods for retrieving attributes currently return a non-const AccAttributes. We might be able to change this in future for some of them, but I didn't want to deal with that in this work.
Blocks: 1737919
Pushed by
part 1: Add AccAttributes::Equal to compare attributes in two instances. r=eeejay
part 2: Implement support for text attributes in TextLeafPoint. r=eeejay
part 3: Add HyperTextAccessibleBase::TextAttributes. r=eeejay
part 4: Support AccAttributes as a value inside an AccAttributes. r=eeejay
part 5: Push text attributes to the cache. r=eeejay
part 6: Add AccAttributes::CopyTo to copy an AccAttributes. r=eeejay
part 7: Support cached remote text attributes in TextLeafPoint. r=eeejay
part 8: Move DefaultTextAttributes to HyperTextAccessibleBase and implement it for RemoteAccessible. r=eeejay
part 9: Add tests for cached text attributes. r=eeejay
Blocks: 1739559
Regressions: 1744150
Regressions: 1754675
Regressions: 1756730
You need to log in before you can comment on or make changes to this bug.