Closed Bug 482258 Opened 15 years ago Closed 15 years ago

ARIA controls with STATE_MIXED must not have STATE_CHECKED set also

Categories

(Core :: Disability Access APIs, defect)

defect
Not set
major

Tracking

()

RESOLVED FIXED

People

(Reporter: MarcoZ, Assigned: davidb)

References

(Blocks 1 open bug)

Details

(Keywords: access)

Attachments

(1 file, 2 obsolete files)

Right now, ARIA controls with aria-checked="mixed" get STATE_CHECKED set. This was uncovered in fix for bug 477975 through the change in nsAccessible::GetActionName, where "uncheck" would be exposed on something that was "only" aria-checked="mixed".
Attached patch Mochitest (obsolete) — Splinter Review
Attached patch patch 1 (obsolete) — Splinter Review
Marco, thanks for the tests, which pass now. I think this is the right fix. An alternative would be to check for ! "true", but that would miss some common (mis)use cases like checked="checked" etc. This fix is slightly less performant, but more robust.
Assignee: nobody → david.bolter
Status: NEW → ASSIGNED
Attachment #366325 - Flags: review?(marco.zehe)
Comment on attachment 366325 [details] [diff] [review]
patch 1

r=me, thanks!
Attachment #366325 - Flags: review?(marco.zehe) → review+
Marco, push at will :)  (Suite passes for me)
Attachment #366323 - Attachment is obsolete: true
Attachment #366325 - Attachment is obsolete: true
Comment on attachment 366332 [details] [diff] [review]
patch to go in (includes small perf tweak for bug 477975)


>    case eCheckUncheckAction:
>-     if (states & nsIAccessibleStates::STATE_MIXED)
>+     if (states & nsIAccessibleStates::STATE_CHECKED)
>+       aName.AssignLiteral("uncheck");
>+     else if (states & nsIAccessibleStates::STATE_MIXED)
>        aName.AssignLiteral("cycle");
>-     else if (states & nsIAccessibleStates::STATE_CHECKED)
>-       aName.AssignLiteral("uncheck");

if I get right this is perf twak, what is this more performant?
Comment on attachment 366332 [details] [diff] [review]
patch to go in (includes small perf tweak for bug 477975)


>     if (aStateMapEntry->attributeValue == kBoolState) {
>       // No attribute value map specified in state map entry indicates state cleared
>-      if (attribValue.EqualsLiteral("false")) {
>+      if (attribValue.EqualsLiteral("false") ||
>+          attribValue.EqualsLiteral("mixed")) {
>         *aStateInOut &= ~aStateMapEntry->state;

it doesn't go well with ARIAMap:

{&nsAccessibilityAtoms::aria_checked, kBoolState, nsIAccessibleStates::STATE_CHECKED},
{&nsAccessibilityAtoms::aria_checked, "mixed", nsIAccessibleStates::STATE_MIXED},

I would suggest to rethink this approach.

Btw, who set STATE_CHECKED so that we are forced to remove this state?
Pushed on Davidb's behalf in changeset:
http://hg.mozilla.org/mozilla-central/rev/9e485bb3604e
Status: ASSIGNED → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: