Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* 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
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
// This tests the SitePermissions.getAllPermissionDetailsForBrowser function.
add_task(async function testGetAllPermissionDetailsForBrowser() {
let principal =
Services.scriptSecurityManager.createContentPrincipalFromOrigin(
);
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
principal.spec
);
Services.prefs.setIntPref("permissions.default.shortcuts", 2);
let browser = tab.linkedBrowser;
SitePermissions.setForPrincipal(principal, "camera", SitePermissions.ALLOW);
SitePermissions.setForPrincipal(
principal,
"cookie",
SitePermissions.ALLOW_COOKIES_FOR_SESSION
);
SitePermissions.setForPrincipal(principal, "popup", SitePermissions.BLOCK);
SitePermissions.setForPrincipal(
principal,
"geo",
SitePermissions.ALLOW,
SitePermissions.SCOPE_SESSION
);
SitePermissions.setForPrincipal(
principal,
"shortcuts",
SitePermissions.ALLOW
);
SitePermissions.setForPrincipal(principal, "xr", SitePermissions.ALLOW);
let permissions = SitePermissions.getAllPermissionDetailsForBrowser(browser);
let camera = permissions.find(({ id }) => id === "camera");
Assert.deepEqual(camera, {
id: "camera",
label: "Use the camera",
state: SitePermissions.ALLOW,
scope: SitePermissions.SCOPE_PERSISTENT,
});
// Check that removed permissions (State.UNKNOWN) are skipped.
SitePermissions.removeFromPrincipal(principal, "camera");
permissions = SitePermissions.getAllPermissionDetailsForBrowser(browser);
camera = permissions.find(({ id }) => id === "camera");
Assert.equal(camera, undefined);
let cookie = permissions.find(({ id }) => id === "cookie");
Assert.deepEqual(cookie, {
id: "cookie",
label: "Set cookies",
state: SitePermissions.ALLOW_COOKIES_FOR_SESSION,
scope: SitePermissions.SCOPE_PERSISTENT,
});
let popup = permissions.find(({ id }) => id === "popup");
Assert.deepEqual(popup, {
id: "popup",
label: "Open pop-up windows",
state: SitePermissions.BLOCK,
scope: SitePermissions.SCOPE_PERSISTENT,
});
let geo = permissions.find(({ id }) => id === "geo");
Assert.deepEqual(geo, {
id: "geo",
label: "Access your location",
state: SitePermissions.ALLOW,
scope: SitePermissions.SCOPE_SESSION,
});
let shortcuts = permissions.find(({ id }) => id === "shortcuts");
Assert.deepEqual(shortcuts, {
id: "shortcuts",
label: "Override keyboard shortcuts",
state: SitePermissions.ALLOW,
scope: SitePermissions.SCOPE_PERSISTENT,
});
let xr = permissions.find(({ id }) => id === "xr");
Assert.deepEqual(xr, {
id: "xr",
label: "Access virtual reality devices",
state: SitePermissions.ALLOW,
scope: SitePermissions.SCOPE_PERSISTENT,
});
SitePermissions.removeFromPrincipal(principal, "cookie");
SitePermissions.removeFromPrincipal(principal, "popup");
SitePermissions.removeFromPrincipal(principal, "geo");
SitePermissions.removeFromPrincipal(principal, "shortcuts");
SitePermissions.removeFromPrincipal(principal, "xr");
Services.prefs.clearUserPref("permissions.default.shortcuts");
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
add_task(async function testTemporaryChangeEvent() {
let principal =
Services.scriptSecurityManager.createContentPrincipalFromOrigin(
);
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
principal.spec
);
let browser = tab.linkedBrowser;
let changeEventCount = 0;
function listener() {
changeEventCount++;
}
browser.addEventListener("PermissionStateChange", listener);
// Test browser-specific permissions.
SitePermissions.setForPrincipal(
browser.contentPrincipal,
"autoplay-media",
SitePermissions.BLOCK,
SitePermissions.SCOPE_GLOBAL,
browser
);
is(changeEventCount, 1, "Should've changed");
// Setting the same value shouldn't dispatch a change event.
SitePermissions.setForPrincipal(
browser.contentPrincipal,
"autoplay-media",
SitePermissions.BLOCK,
SitePermissions.SCOPE_GLOBAL,
browser
);
is(changeEventCount, 1, "Shouldn't have changed");
browser.removeEventListener("PermissionStateChange", listener);
BrowserTestUtils.removeTab(tab);
});
add_task(async function testInvalidPrincipal() {
// Check that an error is thrown when an invalid principal argument is passed.
try {
SitePermissions.isSupportedPrincipal("file:///example.js");
} catch (e) {
Assert.equal(
e.message,
"Argument passed as principal is not an instance of Ci.nsIPrincipal"
);
}
try {
SitePermissions.removeFromPrincipal(null, "canvas");
} catch (e) {
Assert.equal(
e.message,
"Atleast one of the arguments, either principal or browser should not be null."
);
}
try {
SitePermissions.setForPrincipal(
"blah",
"camera",
SitePermissions.ALLOW,
SitePermissions.SCOPE_PERSISTENT,
gBrowser.selectedBrowser
);
} catch (e) {
Assert.equal(
e.message,
"Argument passed as principal is not an instance of Ci.nsIPrincipal"
);
}
try {
SitePermissions.getAllByPrincipal("blah");
} catch (e) {
Assert.equal(
e.message,
"Argument passed as principal is not an instance of Ci.nsIPrincipal"
);
}
try {
SitePermissions.getAllByPrincipal(null);
} catch (e) {
Assert.equal(e.message, "principal argument cannot be null.");
}
try {
SitePermissions.getForPrincipal(5, "camera");
} catch (e) {
Assert.equal(
e.message,
"Argument passed as principal is not an instance of Ci.nsIPrincipal"
);
}
// Check that no error is thrown when passing valid principal and browser arguments.
Assert.deepEqual(
SitePermissions.getForPrincipal(gBrowser.contentPrincipal, "camera"),
{
state: SitePermissions.UNKNOWN,
scope: SitePermissions.SCOPE_PERSISTENT,
}
);
Assert.deepEqual(
SitePermissions.getForPrincipal(null, "camera", gBrowser.selectedBrowser),
{
state: SitePermissions.UNKNOWN,
scope: SitePermissions.SCOPE_PERSISTENT,
}
);
});