Bug 1260450 - about:performance should not offer to disable or uninstall hidden or non-removable add-ons r?Yoric
MozReview-Commit-ID: JR4Oce9yPmr
--- a/toolkit/components/aboutperformance/content/aboutPerformance.js
+++ b/toolkit/components/aboutperformance/content/aboutPerformance.js
@@ -754,54 +754,66 @@ var View = {
eltDetails.classList.add("hidden");
eltShowMore.textContent = "more";
}
});
// Add buttons
if (nature == "addons") {
eltSpan.appendChild(document.createElement("br"));
- let eltDisable = document.createElement("button");
- eltDisable.textContent = "Disable";
- eltSpan.appendChild(eltDisable);
- let eltUninstall = document.createElement("button");
- eltUninstall.textContent = "Uninstall";
- eltSpan.appendChild(eltUninstall);
+ AddonManager.getAddonByID(delta.diff.addonId, addon => {
+ if (addon.hidden) {
+ // Hidden add-ons should not be disabled,
+ // for example temporary and system add-ons.
+ return;
+ }
- let eltRestart = document.createElement("button");
- eltRestart.textContent = `Restart ${BRAND_NAME} to apply your changes.`
- eltRestart.classList.add("hidden");
- eltSpan.appendChild(eltRestart);
+ let eltRestart = document.createElement("button");
+ eltRestart.textContent = `Restart ${BRAND_NAME} to apply your changes.`
+ eltRestart.classList.add("hidden");
+ eltSpan.appendChild(eltRestart);
- eltRestart.addEventListener("click", () => {
- Services.startup.quit(Services.startup.eForceQuit | Services.startup.eRestart);
- });
- AddonManager.getAddonByID(delta.diff.addonId, addon => {
+ eltRestart.addEventListener("click", () => {
+ Services.startup.quit(Services.startup.eForceQuit | Services.startup.eRestart);
+ });
+
+ let eltDisable = document.createElement("button");
+ eltDisable.textContent = "Disable";
+ eltSpan.appendChild(eltDisable);
+
eltDisable.addEventListener("click", () => {
addon.userDisabled = true;
if (addon.pendingOperations == addon.PENDING_NONE) {
// Restartless add-on is now disabled.
return;
}
eltDisable.classList.add("hidden");
eltUninstall.classList.add("hidden");
eltRestart.classList.remove("hidden");
});
- eltUninstall.addEventListener("click", () => {
- addon.uninstall();
- if (addon.pendingOperations == addon.PENDING_NONE) {
- // Restartless add-on is now disabled.
- return;
- }
- eltDisable.classList.add("hidden");
- eltUninstall.classList.add("hidden");
- eltRestart.classList.remove("hidden");
- });
+ if (addon.permissions & AddonManager.PERM_CAN_UNINSTALL) {
+ // Some add-ons cannot be uninstalled, for instance if the
+ // install location is not user-writable.
+ let eltUninstall = document.createElement("button");
+ eltUninstall.textContent = "Uninstall";
+ eltSpan.appendChild(eltUninstall);
+
+ eltUninstall.addEventListener("click", () => {
+ addon.uninstall();
+ if (addon.pendingOperations == addon.PENDING_NONE) {
+ // Restartless add-on is now disabled.
+ return;
+ }
+ eltDisable.classList.add("hidden");
+ eltUninstall.classList.add("hidden");
+ eltRestart.classList.remove("hidden");
+ });
+ }
});
} else if (nature == "webpages") {
eltSpan.appendChild(document.createElement("br"));
let eltCloseTab = document.createElement("button");
eltCloseTab.textContent = "Close tab";
eltSpan.appendChild(eltCloseTab);
let windowIds = delta.diff.windowIds;