Closed Bug 419416 Opened 13 years ago Closed 13 years ago

ARIA properties must work with <frame> or <iframe>

Categories

(Core :: Disability Access APIs, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: aaronlev, Assigned: aaronlev)

References

(Blocks 1 open bug, )

Details

(Keywords: access, Whiteboard: Needed for mashup use cases of ARIA)

Attachments

(1 file, 3 obsolete files)

We need to investigate this. An <iframe> could represent an AJAX widget. The author of the widget may have put in some ARIA, but the user of the widgets may also wish to set them (e.g. labelledby). Possibly the properties should be combined or the outer properties should override the inner properties.
Attached patch WIP (obsolete) — Splinter Review
Feedback on the rules I'm implementing would be great -- section 11.3.17 at:
http://developer.mozilla.org/en/docs/ARIA_UA_Best_Practices#11.3.17_Documents.2C_Handling_.3Cframe.3Es_and_.3Ciframe.3Es
In addition the listbox ends up in the tab order twice -- I need to work on that in a separate bug.
Attached patch Described in comment (obsolete) — Splinter Review
Changes by file:

Index: accessible/public/nsPIAccessible.idl
Add getARIAState() so that we can independently override built-in states after they have been calculated. First we will use the states from the <body> and then from the owner node on the outer doc.

Index: accessible/src/base/nsAccessibilityService.cpp
Use the ARIA role for document nodes

Index: accessible/src/base/nsAccessibilityUtils.cpp
New method to set container-foo object attributes appropriately for a parent chain within a single document.

Index: accessible/src/base/nsAccessible.cpp
1) GetRoleContent() -- only use <body>/<frameset> for HTML -- never the doc element
2) GetAttributes() -- allow array of preexisting attributes to be passed in as a starting point so that we can override doc accessible object attributes with that from frame/iframe. 
3) GetAttributesInternal() -- move GetLastEventAttributes() here. It doesn't need to be calculated twice. Also move container-foo object attribute calc here. We need special rules to deal with full parent chain, because outer docs override. Within the same doc inner nodes override.
4) GetARIAState() -- pass in previous state so we can modify and override states

Index: accessible/src/base/nsDocAccessible.cpp
1) GetName() -- Prefer name from outer node
2) GetValue() -- this is an MSAA hack -- move to MSAA code
3) SetRoleMapEntry() -- prefer role from outer node
4) GetDescription() -- prefer from outer node
5) GetARIAState() -- prefer ARIA state from outer node
6) GetAttributes() -- prefer ARIA object props from outer node
7) Init() -- ensure creation of parent and don't restrict role used by iframe

Index: accessible/src/base/nsOuterDocAccessible.cpp
Override GetAttributesInternal() so that only ARIA attributes done in nsAccessible::GetAttributes() get overriden

Index: accessible/src/base/nsRootAccessible.cpp
Allow aria-activedescendant on <body>

Index: accessible/src/msaa/nsAccessibleWrap.cpp
Return NULL and PR_FALSE if no value. This is what IE does -- we have that wrong.

Index: accessible/src/msaa/nsDocAccessibleWrap.cpp
Check for actual accessible value. If no value and we're some kind of doc, then use URL value hack.
Attachment #308684 - Attachment is obsolete: true
Attachment #308937 - Flags: review?(surkov.alexander)
Flags: blocking1.9?
Whiteboard: Needed for mashup use cases of ARIA
Attachment #308937 - Attachment is obsolete: true
Attachment #309171 - Flags: superreview?(ginn.chen)
Attachment #309171 - Flags: review?(surkov.alexander)
Attachment #308937 - Flags: review?(surkov.alexander)
Attachment #309171 - Attachment is obsolete: true
Attachment #309182 - Flags: review?(surkov.alexander)
Attachment #309182 - Flags: review?(ginn.chen)
Attachment #309171 - Flags: superreview?(ginn.chen)
Attachment #309171 - Flags: review?(surkov.alexander)
Attachment #309182 - Flags: review?(ginn.chen) → review+
Attachment #309182 - Flags: review?(surkov.alexander) → approval1.9?
Comment on attachment 309182 [details] [diff] [review]
1)Move class object attr impl so doc can have it's own, 2) Fix DOCUMENT -> DIALOG in nsDocAccessibleWrap::get_accValue()

a1.9+=damons
Attachment #309182 - Flags: approval1.9? → approval1.9+
Status: NEW → RESOLVED
Closed: 13 years ago
Resolution: --- → FIXED
Depends on: 425125

The behaviour where outer documents can override live region markup on inner iframe documents is being removed in bug 1572860.

See Also: → 1572860
You need to log in before you can comment on or make changes to this bug.