Bug 1813108 - Add support for pinning to ExtensionSettings policy. r=willdurand

Differential Revision: https://phabricator.services.mozilla.com/D170949
This commit is contained in:
Mike Kaply 2023-03-15 19:18:44 +00:00
parent fb4b7b9935
commit a9973a08c2
3 changed files with 80 additions and 1 deletions

View file

@ -566,6 +566,10 @@
}, },
"updates_disabled": { "updates_disabled": {
"type": "boolean" "type": "boolean"
},
"default_area": {
"type": "string",
"enum": ["navbar", "menupanel"]
} }
} }
} }

View file

@ -52,3 +52,75 @@ add_task(async function testBrowserActionInTabStrip() {
add_task(async function testBrowserActionInPersonalToolbar() { add_task(async function testBrowserActionInPersonalToolbar() {
await testInArea("personaltoolbar"); await testInArea("personaltoolbar");
}); });
add_task(async function testPolicyOverridesBrowserActionToNavbar() {
const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
"resource://testing-common/EnterprisePolicyTesting.sys.mjs"
);
await EnterprisePolicyTesting.setupPolicyEngineWithJson({
policies: {
ExtensionSettings: {
"policyBrowserActionAreaNavBarTest@mozilla.com": {
default_area: "navbar",
},
},
},
});
let manifest = {
browser_action: {},
browser_specific_settings: {
gecko: {
id: "policyBrowserActionAreaNavBarTest@mozilla.com",
},
},
};
let extension = ExtensionTestUtils.loadExtension({
manifest,
});
await extension.startup();
let widget = getBrowserActionWidget(extension);
let placement = CustomizableUI.getPlacementOfWidget(widget.id);
is(
placement && placement.area,
CustomizableUI.AREA_NAVBAR,
`widget located in nav bar`
);
await extension.unload();
});
add_task(async function testPolicyOverridesBrowserActionToMenuPanel() {
const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
"resource://testing-common/EnterprisePolicyTesting.sys.mjs"
);
await EnterprisePolicyTesting.setupPolicyEngineWithJson({
policies: {
ExtensionSettings: {
"policyBrowserActionAreaMenuPanelTest@mozilla.com": {
default_area: "menupanel",
},
},
},
});
let manifest = {
browser_action: {
default_area: "navbar",
},
browser_specific_settings: {
gecko: {
id: "policyBrowserActionAreaMenuPanelTest@mozilla.com",
},
},
};
let extension = ExtensionTestUtils.loadExtension({
manifest,
});
await extension.startup();
let widget = getBrowserActionWidget(extension);
let placement = CustomizableUI.getPlacementOfWidget(widget.id);
is(
placement && placement.area,
getCustomizableUIPanelID(),
`widget located in extensions menu`
);
await extension.unload();
});

View file

@ -513,7 +513,10 @@ class BrowserActionBase extends PanelActionBase {
extension.manifest.browser_action || extension.manifest.action; extension.manifest.browser_action || extension.manifest.action;
super(options, tabContext, extension); super(options, tabContext, extension);
let default_area = options.default_area || "menupanel"; let default_area =
Services.policies.getExtensionSettings(extension.id)?.default_area ||
options.default_area ||
"menupanel";
this.defaults = { this.defaults = {
...this.defaults, ...this.defaults,