Closed Bug 377891 Opened 17 years ago Closed 17 years ago

Extra a11y cache invalidations when user selects new combobox option

Categories

(Core :: Disability Access APIs, defect)

defect
Not set
normal

Tracking

()

RESOLVED DUPLICATE of bug 371394

People

(Reporter: aaronlev, Assigned: aaronlev)

References

(Blocks 1 open bug)

Details

(Keywords: access)

Spun off from bug 376468. 

We shouldn't be invalidating the combobox list accessible just because the text field is changing.

nsHTMLComboboxAccessible::InvalidateChildren(this = 0x930ac40), line 956 in "nsHTMLSelectAccessible.cpp"
nsDocAccessible::InvalidateCacheSubtree(this = 0x8fca358, aChild = 0x9313fe8, aChangeEventType = 5U), line 1414 in "nsDocAccessible.cpp"
nsDocAccessible::CharacterDataChanged(this = 0x8fca358, aDocument = 0x8da75f8, aContent = 0x9313fe8, aInfo = 0x8046334), line 1107 in "nsDocAccessible.cpp"
nsBindingManager::CharacterDataChanged(this = 0x8ff1740, aDocument = 0x8da75f8, aContent = 0x9313fe8, aInfo = 0x8046334), line 1162 in "nsBindingManager.cpp"
nsNodeUtils::CharacterDataChanged(aContent = 0x9313fe8, aInfo = 0x8046334), line 89 in "nsNodeUtils.cpp"
nsGenericDOMDataNode::SetTextInternal(this = 0x9313fe8, aOffset = 0, aCount = 2U, aBuffer = 0x9310a00, aLength = 3U, aNotify = 1), line 483 in "nsGenericDOMDataNode.cpp"
nsGenericDOMDataNode::SetText(this = 0x9313fe8, aBuffer = 0x9310a00, aLength = 3U, aNotify = 1), line 893 in "nsGenericDOMDataNode.cpp"
nsIContent::SetText(this = 0x9313fe8, aStr = CLASS, aNotify = 1), line 425 in "nsIContent.h"
nsComboboxControlFrame::ActuallyDisplayText(this = 0x931540c, aNotify = 1), line 822 in "nsComboboxControlFrame.cpp"
nsComboboxControlFrame::HandleRedisplayTextEvent(this = 0x931540c), line 804 in "nsComboboxControlFrame.cpp"
nsComboboxControlFrame::RedisplayTextEvent::Run(this = 0x924b5a0), line 99 in "nsComboboxControlFrame.cpp"
In principle this might not be hurting anything -- even perf may not really be affected.

We do it because as text changes, the child accessibles for it may need to change. For example, when going from 0 to some chars, or vice-versa, it changes whether a textfield will need an accessible child. But if going from say, 2 to 3 chars in a textfield, it's not really necessary to invalidate. Comboboxes don't have have an accessible text child anymore, so they really don't need to invalidate.

Is it worth finding all the CharacterDataChanged() cases and deciding when to invalidate and when not to?
We have "#ifdef COMBO_BOX_WITH_THREE_CHILDREN" in nsHTMLSelectAccessible.cpp. With that macro define, combo box accessible would have a child of text field accessible.

Although I'm not sure whether that macro has ever been used, it may need the CharacterDataChanged() things.

I think maybe we can just live with the CharacterDataChanged() things until we get problem on it.
nsDocAccessible::CharacterDataModified() should try to fire fire text change events instead of REORDER.

It could use aInfo to create the event with this info:
  nsCOMPtr<nsIAccessibleTextChangeEvent> event =
    new nsAccTextChangeEvent(this, start, length, isInserted);

Often it's a replace, not just an addition or removal. In that case I think we need to fire both a removal and insertion.
Status: NEW → RESOLVED
Closed: 17 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.