forked from mirrors/gecko-dev
144 lines
4.1 KiB
JavaScript
144 lines
4.1 KiB
JavaScript
/* 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 function applies combinations of different permissions and
|
|
// checks how they override each other.
|
|
async function checkPermissionCombinations(combinations) {
|
|
let principal =
|
|
Services.scriptSecurityManager.createContentPrincipalFromOrigin(
|
|
"https://example.com"
|
|
);
|
|
|
|
await BrowserTestUtils.withNewTab(principal.spec, function (browser) {
|
|
let id = "geo";
|
|
for (let { reverse, states, result } of combinations) {
|
|
let loop = () => {
|
|
for (let [state, scope] of states) {
|
|
SitePermissions.setForPrincipal(principal, id, state, scope, browser);
|
|
}
|
|
Assert.deepEqual(
|
|
SitePermissions.getForPrincipal(principal, id, browser),
|
|
result
|
|
);
|
|
SitePermissions.removeFromPrincipal(principal, id, browser);
|
|
};
|
|
|
|
loop();
|
|
|
|
if (reverse) {
|
|
states.reverse();
|
|
loop();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Test that passing null as scope becomes SCOPE_PERSISTENT.
|
|
add_task(async function testDefaultScope() {
|
|
await checkPermissionCombinations([
|
|
{
|
|
states: [[SitePermissions.ALLOW, null]],
|
|
result: {
|
|
state: SitePermissions.ALLOW,
|
|
scope: SitePermissions.SCOPE_PERSISTENT,
|
|
},
|
|
},
|
|
]);
|
|
});
|
|
|
|
// Test that "wide" scopes like PERSISTENT always override "narrower" ones like TAB.
|
|
add_task(async function testScopeOverrides() {
|
|
await checkPermissionCombinations([
|
|
{
|
|
// The behavior of SCOPE_SESSION is not in line with the general behavior
|
|
// because of the legacy nsIPermissionManager implementation.
|
|
states: [
|
|
[SitePermissions.ALLOW, SitePermissions.SCOPE_PERSISTENT],
|
|
[SitePermissions.BLOCK, SitePermissions.SCOPE_SESSION],
|
|
],
|
|
result: {
|
|
state: SitePermissions.BLOCK,
|
|
scope: SitePermissions.SCOPE_SESSION,
|
|
},
|
|
},
|
|
{
|
|
states: [
|
|
[SitePermissions.BLOCK, SitePermissions.SCOPE_SESSION],
|
|
[SitePermissions.ALLOW, SitePermissions.SCOPE_PERSISTENT],
|
|
],
|
|
result: {
|
|
state: SitePermissions.ALLOW,
|
|
scope: SitePermissions.SCOPE_PERSISTENT,
|
|
},
|
|
},
|
|
{
|
|
reverse: true,
|
|
states: [
|
|
[SitePermissions.BLOCK, SitePermissions.SCOPE_TEMPORARY],
|
|
[SitePermissions.ALLOW, SitePermissions.SCOPE_SESSION],
|
|
],
|
|
result: {
|
|
state: SitePermissions.ALLOW,
|
|
scope: SitePermissions.SCOPE_SESSION,
|
|
},
|
|
},
|
|
{
|
|
reverse: true,
|
|
states: [
|
|
[SitePermissions.BLOCK, SitePermissions.SCOPE_TEMPORARY],
|
|
[SitePermissions.ALLOW, SitePermissions.SCOPE_PERSISTENT],
|
|
],
|
|
result: {
|
|
state: SitePermissions.ALLOW,
|
|
scope: SitePermissions.SCOPE_PERSISTENT,
|
|
},
|
|
},
|
|
]);
|
|
});
|
|
|
|
// Test that clearing a temporary permission also removes a
|
|
// persistent permission that was set for the same URL.
|
|
add_task(async function testClearTempPermission() {
|
|
await checkPermissionCombinations([
|
|
{
|
|
states: [
|
|
[SitePermissions.BLOCK, SitePermissions.SCOPE_TEMPORARY],
|
|
[SitePermissions.ALLOW, SitePermissions.SCOPE_PERSISTENT],
|
|
[SitePermissions.UNKNOWN, SitePermissions.SCOPE_TEMPORARY],
|
|
],
|
|
result: {
|
|
state: SitePermissions.UNKNOWN,
|
|
scope: SitePermissions.SCOPE_PERSISTENT,
|
|
},
|
|
},
|
|
]);
|
|
});
|
|
|
|
// Test that states override each other when applied with the same scope.
|
|
add_task(async function testStateOverride() {
|
|
await checkPermissionCombinations([
|
|
{
|
|
states: [
|
|
[SitePermissions.ALLOW, SitePermissions.SCOPE_PERSISTENT],
|
|
[SitePermissions.BLOCK, SitePermissions.SCOPE_PERSISTENT],
|
|
],
|
|
result: {
|
|
state: SitePermissions.BLOCK,
|
|
scope: SitePermissions.SCOPE_PERSISTENT,
|
|
},
|
|
},
|
|
{
|
|
states: [
|
|
[SitePermissions.BLOCK, SitePermissions.SCOPE_PERSISTENT],
|
|
[SitePermissions.ALLOW, SitePermissions.SCOPE_PERSISTENT],
|
|
],
|
|
result: {
|
|
state: SitePermissions.ALLOW,
|
|
scope: SitePermissions.SCOPE_PERSISTENT,
|
|
},
|
|
},
|
|
]);
|
|
});
|