gecko-dev/browser/actors/SpeechDispatcherParent.sys.mjs

91 lines
2.3 KiB
JavaScript

/* vim: set ts=2 sw=2 sts=2 et tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
export class SpeechDispatcherParent extends JSWindowActorParent {
prefName() {
return "media.webspeech.synth.dont_notify_on_error";
}
disableNotification() {
Services.prefs.setBoolPref(this.prefName(), true);
}
async receiveMessage(aMessage) {
// The top level browsing context's embedding element should be a xul browser element.
let browser = this.browsingContext.top.embedderElement;
if (!browser) {
// We don't have a browser so bail!
return;
}
let notificationId;
if (Services.prefs.getBoolPref(this.prefName(), false)) {
console.info("Opted out from speech-dispatcher error notification");
return;
}
let messageId;
switch (aMessage.data) {
case "lib-missing":
messageId = "speech-dispatcher-lib-missing";
break;
case "lib-too-old":
messageId = "speech-dispatcher-lib-too-old";
break;
case "missing-symbol":
messageId = "speech-dispatcher-missing-symbol";
break;
case "open-fail":
messageId = "speech-dispatcher-open-fail";
break;
case "no-voices":
messageId = "speech-dispatcher-no-voices";
break;
default:
break;
}
let MozXULElement = browser.ownerGlobal.MozXULElement;
MozXULElement.insertFTLIfNeeded("browser/speechDispatcher.ftl");
// Now actually create the notification
let notificationBox = browser.getTabBrowser().getNotificationBox(browser);
if (notificationBox.getNotificationWithValue(notificationId)) {
return;
}
let buttons = [
{
supportPage: "speechd-setup",
},
{
"l10n-id": "speech-dispatcher-dismiss-button",
callback: () => {
this.disableNotification();
},
},
];
let iconURL = "chrome://browser/skin/drm-icon.svg";
notificationBox.appendNotification(
notificationId,
{
label: { "l10n-id": messageId },
image: iconURL,
priority: notificationBox.PRIORITY_INFO_HIGH,
type: "warning",
},
buttons
);
}
}