Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
const { AddonManager } = ChromeUtils.importESModule(
"resource://gre/modules/AddonManager.sys.mjs"
);
const { AddonTestUtils } = ChromeUtils.importESModule(
);
AddonTestUtils.init(this);
AddonTestUtils.overrideCertDB();
AddonTestUtils.appInfo = getAppInfo();
AddonTestUtils.usePrivilegedSignatures = false;
ExtensionTestUtils.init(this);
add_setup(async function setup() {
await AddonTestUtils.promiseStartupManager();
});
add_task(async function test_private_browsing() {
async function assertPrivateBrowsingAccess({
addonId,
extensionSettings,
extensionManifest = {},
expectedPrivateBrowsingAccess,
message,
}) {
await setupPolicyEngineWithJson({
policies: {
ExtensionSettings: {
[addonId]: { ...extensionSettings },
},
},
});
let ext = ExtensionTestUtils.loadExtension({
manifest: {
browser_specific_settings: {
gecko: { id: addonId },
},
...extensionManifest,
},
useAddonManager: "temporary",
background() {
browser.test.onMessage.addListener(async msg => {
switch (msg) {
case "checkPrivateBrowsing": {
let isAllowed =
await browser.extension.isAllowedIncognitoAccess();
browser.test.sendMessage("privateBrowsing", isAllowed);
break;
}
}
});
},
});
await ext.startup();
ext.sendMessage("checkPrivateBrowsing");
let isAllowedIncognitoAccess = await ext.awaitMessage("privateBrowsing");
Assert.equal(
isAllowedIncognitoAccess,
expectedPrivateBrowsingAccess,
message
);
let addon = await AddonManager.getAddonByID(ext.id);
// Sanity check (to ensure the test extension used in this test are not privileged).
ok(!addon.isPrivileged, "Addon should not be privileged");
let expectLocked = typeof extensionSettings?.private_browsing === "boolean";
Assert.equal(
!(
addon.permissions & AddonManager.PERM_CAN_CHANGE_PRIVATEBROWSING_ACCESS
),
expectLocked,
`Addon should ${expectLocked ? "NOT" : ""} be able to change private browsing setting.`
);
await ext.unload();
}
await assertPrivateBrowsingAccess({
addonId: "privatebrowsing-granted-nonprivileged@test",
extensionSettings: { private_browsing: true },
expectedPrivateBrowsingAccess: true,
message:
"Should have access to private browsing (set to true in policy extension setting)",
});
await assertPrivateBrowsingAccess({
addonId: "privatebrowsing-revoked-nonprivileged@test",
extensionSettings: { private_browsing: false },
expectedPrivateBrowsingAccess: false,
message:
"Should NOT have access to private browsing (set to false in policy extension setting)",
});
await assertPrivateBrowsingAccess({
addonId: "privatebrowsing-nosetting-nonprivileged@test",
extensionSettings: {},
expectedPrivateBrowsingAccess: false,
message:
"Should NOT have access to private browsing (NOT set in policy extension setting)",
});
await assertPrivateBrowsingAccess({
addonId: "privatebrowsing-notallowed-nonprivileged@test",
extensionSettings: { private_browsing: true },
extensionManifest: {
incognito: "not_allowed",
},
expectedPrivateBrowsingAccess: false,
message:
"incognito 'not_allowed' extensions should NOT have access to private browser",
});
});