Skip to content
Snippets Groups Projects
Commit ee3a14d6 authored by henry's avatar henry Committed by Pier Angelo Vendrame
Browse files

Bug 43072: Add aria label and description to moz-message-bar.

Ensures that moz-message-bar, including notifications, are announced on
Orca.

This addresses upstream bugzilla bug 1895857 and should likely be
replaced when it is fixed.
parent 4b821ccd
No related branches found
No related tags found
1 merge request!1462BB/TB 43584: Rebased stable again onto 128.9.0esr build2
......@@ -62,6 +62,7 @@ export default class MozMessageBar extends MozLitElement {
dismissable: { type: Boolean },
messageL10nId: { type: String },
messageL10nArgs: { type: String },
useAlertRole: { type: Boolean },
};
constructor() {
......@@ -69,6 +70,7 @@ export default class MozMessageBar extends MozLitElement {
window.MozXULElement?.insertFTLIfNeeded("toolkit/global/mozMessageBar.ftl");
this.type = "info";
this.dismissable = false;
this.useAlertRole = true;
}
onSlotchange() {
......@@ -76,11 +78,6 @@ export default class MozMessageBar extends MozLitElement {
this.actionsEl.classList.toggle("active", actions.length);
}
connectedCallback() {
super.connectedCallback();
this.setAttribute("role", "alert");
}
disconnectedCallback() {
super.disconnectedCallback();
this.dispatchEvent(new CustomEvent("message-bar:close"));
......@@ -90,6 +87,17 @@ export default class MozMessageBar extends MozLitElement {
return this.supportLinkSlot.assignedElements();
}
setAlertRole() {
// Wait a little for this to render before setting the role for more
// consistent alerts to screen readers.
this.useAlertRole = false;
window.requestAnimationFrame(() => {
window.requestAnimationFrame(() => {
this.useAlertRole = true;
});
});
}
iconTemplate() {
let iconData = messageTypeToIconData[this.type];
if (iconData) {
......@@ -110,7 +118,9 @@ export default class MozMessageBar extends MozLitElement {
headingTemplate() {
if (this.heading) {
return html`<strong class="heading">${this.heading}</strong>`;
return html`
<strong id="heading" class="heading">${this.heading}</strong>
`;
}
return "";
}
......@@ -136,13 +146,18 @@ export default class MozMessageBar extends MozLitElement {
rel="stylesheet"
href="chrome://global/content/elements/moz-message-bar.css"
/>
<div class="container">
<div
class="container"
role=${ifDefined(this.useAlertRole ? "alert" : undefined)}
aria-labelledby=${this.heading ? "heading" : "content"}
aria-describedby=${ifDefined(this.heading ? "content" : undefined)}
>
<div class="content">
<div class="text-container">
${this.iconTemplate()}
<div class="text-content">
${this.headingTemplate()}
<div>
<div id="content">
<span
class="message"
data-l10n-id=${ifDefined(this.messageL10nId)}
......
......@@ -729,17 +729,6 @@
}
}
setAlertRole() {
// Wait a little for this to render before setting the role for more
// consistent alerts to screen readers.
this.removeAttribute("role");
window.requestAnimationFrame(() => {
window.requestAnimationFrame(() => {
this.setAttribute("role", "alert");
});
});
}
handleEvent(e) {
// If clickjacking delay is active, prevent any "click"/"command" from
// going through. Also restart the delay if the user tries to click too early.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment