Source code
Revision control
Copy as Markdown
Other Tools
/* 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
import { AddonManagerListenerHandler } from "../aboutaddons-utils.mjs";
import { MessageBarStackElement } from "./message-bar-stack.mjs";
const { AddonManager, AMBrowserExtensionsImport } = ChromeUtils.importESModule(
"resource://gre/modules/AddonManager.sys.mjs"
);
class GlobalWarnings extends MessageBarStackElement {
constructor() {
super();
// This won't change at runtime, but we'll want to fake it in tests.
this.inSafeMode = Services.appinfo.inSafeMode;
this.globalWarning = null;
}
connectedCallback() {
this.refresh();
this.addEventListener("click", this);
AddonManagerListenerHandler.addListener(this);
}
disconnectedCallback() {
this.removeEventListener("click", this);
AddonManagerListenerHandler.removeListener(this);
}
refresh() {
if (this.inSafeMode) {
this.setWarning("safe-mode", {
supportPage: "diagnose-firefox-issues-using-troubleshoot-mode",
});
} else if (
AddonManager.checkUpdateSecurityDefault &&
!AddonManager.checkUpdateSecurity
) {
this.setWarning("update-security", { action: true });
} else if (!AddonManager.checkCompatibility) {
this.setWarning("check-compatibility", { action: true });
} else if (AMBrowserExtensionsImport.canCompleteOrCancelInstalls) {
this.setWarning("imported-addons", { action: true });
} else {
this.removeWarning();
}
}
setWarning(type, { action, supportPage }) {
if (
this.globalWarning &&
this.globalWarning.getAttribute("warning-type") !== type
) {
this.removeWarning();
}
if (!this.globalWarning) {
this.globalWarning = document.createElement("moz-message-bar");
this.globalWarning.setAttribute("warning-type", type);
let { messageId, buttonId } = this.getGlobalWarningL10nIds(type);
document.l10n.setAttributes(this.globalWarning, messageId);
this.globalWarning.setAttribute("data-l10n-attrs", "message");
if (supportPage) {
let link = document.createElement("a", { is: "moz-support-link" });
link.setAttribute("slot", "support-link");
link.setAttribute("support-page", supportPage);
this.globalWarning.appendChild(link);
}
if (action) {
let button = document.createElement("button");
document.l10n.setAttributes(button, buttonId);
button.setAttribute("action", type);
button.setAttribute("slot", "actions");
this.globalWarning.appendChild(button);
}
this.appendChild(this.globalWarning);
}
}
getGlobalWarningL10nIds(type) {
const WARNING_TYPE_TO_L10NID_MAPPING = {
"safe-mode": {
messageId: "extensions-warning-safe-mode3",
},
"update-security": {
messageId: "extensions-warning-update-security2",
buttonId: "extensions-warning-update-security-button",
},
"check-compatibility": {
messageId: "extensions-warning-check-compatibility2",
buttonId: "extensions-warning-check-compatibility-button",
},
"imported-addons": {
messageId: "extensions-warning-imported-addons2",
buttonId: "extensions-warning-imported-addons-button",
},
};
return WARNING_TYPE_TO_L10NID_MAPPING[type];
}
removeWarning() {
if (this.globalWarning) {
this.globalWarning.remove();
this.globalWarning = null;
}
}
handleEvent(e) {
if (e.type === "click") {
switch (e.target.getAttribute("action")) {
case "update-security":
AddonManager.checkUpdateSecurity = true;
break;
case "check-compatibility":
AddonManager.checkCompatibility = true;
break;
case "imported-addons":
AMBrowserExtensionsImport.completeInstalls();
break;
}
}
}
/**
* AddonManager listener events.
*/
onCompatibilityModeChanged() {
this.refresh();
}
onCheckUpdateSecurityChanged() {
this.refresh();
}
onBrowserExtensionsImportChanged() {
this.refresh();
}
}
customElements.define("global-warnings", GlobalWarnings);