Skip to content

Commit

Permalink
Bug 1910581 - Context menu doesn't respect the add-on permissions/pre…
Browse files Browse the repository at this point in the history
…fs. r=sidebar-reviewers,nsharpley

Differential Revision: https://phabricator.services.mozilla.com/D220397
  • Loading branch information
rpl committed Aug 28, 2024
1 parent a38bbc2 commit 33a0b2a
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 0 deletions.
22 changes: 22 additions & 0 deletions browser/components/sidebar/sidebar-main.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,33 @@ export default class SidebarMain extends MozLitElement {
this.contextMenuTarget.getAttribute("extensionId") ||
this.contextMenuTarget.className.includes("tab")
) {
this.updateExtensionContextMenuItems();
return;
}
event.preventDefault();
}

async updateExtensionContextMenuItems() {
const extensionId = this.contextMenuTarget.getAttribute("extensionId");
if (!extensionId) {
return;
}
const addon = await window.AddonManager?.getAddonByID(extensionId);
if (!addon) {
// Disable all context menus items if the addon doesn't
// exist anymore from the AddonManager perspective.
this._manageExtensionMenuItem.disabled = true;
this._removeExtensionMenuItem.disabled = true;
this._reportExtensionMenuItem.disabled = true;
} else {
this._manageExtensionMenuItem.disabled = false;
this._removeExtensionMenuItem.disabled = !(
addon.permissions & AddonManager.PERM_CAN_UNINSTALL
);
this._reportExtensionMenuItem.disabled = !window.gAddonAbuseReportEnabled;
}
}

async manageExtension() {
await window.BrowserAddonUI.manageAddon(
this.contextMenuTarget.getAttribute("extensionId"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,85 @@ add_task(async function test_sidebar_extension_context_menu() {
);
ok(removeStub.called, "Remove Extension called");

info(
"Verify report context menu disabled/enabled based on about:config pref"
);
await SpecialPowers.pushPrefEnv({
set: [["extensions.abuseReport.enabled", false]],
});
await openAndWaitForContextMenu(
contextMenu,
sidebar.extensionButtons[0],
() => {
const reportExtensionButtonEl = document.getElementById(
"sidebar-context-menu-report-extension"
);
is(
reportExtensionButtonEl.disabled,
true,
"Expect report item to be disabled"
);
}
);
await SpecialPowers.popPrefEnv();
await openAndWaitForContextMenu(
contextMenu,
sidebar.extensionButtons[0],
() => {
const reportExtensionButtonEl = document.getElementById(
"sidebar-context-menu-report-extension"
);
is(
reportExtensionButtonEl.disabled,
false,
"Expect report item to be enabled"
);
}
);

info(
"Verify remove context menu disabled/enabled based on addon uninstall permission"
);
const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
"resource://testing-common/EnterprisePolicyTesting.sys.mjs"
);
await EnterprisePolicyTesting.setupPolicyEngineWithJson({
policies: {
Extensions: {
Locked: [extension.id],
},
},
});
await openAndWaitForContextMenu(
contextMenu,
sidebar.extensionButtons[0],
() => {
const removeExtensionButtonEl = document.getElementById(
"sidebar-context-menu-remove-extension"
);
is(
removeExtensionButtonEl.disabled,
true,
"Expect remove item to be disabled"
);
}
);
await EnterprisePolicyTesting.setupPolicyEngineWithJson("");
await openAndWaitForContextMenu(
contextMenu,
sidebar.extensionButtons[0],
() => {
const removeExtensionButtonEl = document.getElementById(
"sidebar-context-menu-remove-extension"
);
is(
removeExtensionButtonEl.disabled,
false,
"Expect remove item to be enabled"
);
}
);

sinon.restore();
await extension.unload();
await BrowserTestUtils.closeWindow(win);
Expand Down

0 comments on commit 33a0b2a

Please sign in to comment.