Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test that temp permissions are persisted through moving tabs to new windows.
add_task(async function testTempPermissionOnTabMove() {
let principal =
Services.scriptSecurityManager.createContentPrincipalFromOrigin(origin);
let id = "geo";
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin);
SitePermissions.setForPrincipal(
principal,
id,
SitePermissions.BLOCK,
SitePermissions.SCOPE_TEMPORARY,
tab.linkedBrowser
);
Assert.deepEqual(
SitePermissions.getForPrincipal(principal, id, tab.linkedBrowser),
{
state: SitePermissions.BLOCK,
scope: SitePermissions.SCOPE_TEMPORARY,
}
);
let promiseWin = BrowserTestUtils.waitForNewWindow();
gBrowser.replaceTabWithWindow(tab);
let win = await promiseWin;
tab = win.gBrowser.selectedTab;
Assert.deepEqual(
SitePermissions.getForPrincipal(principal, id, tab.linkedBrowser),
{
state: SitePermissions.BLOCK,
scope: SitePermissions.SCOPE_TEMPORARY,
}
);
SitePermissions.removeFromPrincipal(principal, id, tab.linkedBrowser);
await BrowserTestUtils.closeWindow(win);
});
// Test that temp permissions don't affect other tabs of the same URI.
add_task(async function testTempPermissionMultipleTabs() {
let principal =
Services.scriptSecurityManager.createContentPrincipalFromOrigin(origin);
let id = "geo";
let tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin);
let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin);
SitePermissions.setForPrincipal(
principal,
id,
SitePermissions.BLOCK,
SitePermissions.SCOPE_TEMPORARY,
tab2.linkedBrowser
);
Assert.deepEqual(
SitePermissions.getForPrincipal(principal, id, tab2.linkedBrowser),
{
state: SitePermissions.BLOCK,
scope: SitePermissions.SCOPE_TEMPORARY,
}
);
Assert.deepEqual(
SitePermissions.getForPrincipal(principal, id, tab1.linkedBrowser),
{
state: SitePermissions.UNKNOWN,
scope: SitePermissions.SCOPE_PERSISTENT,
}
);
let geoIcon = document.querySelector(
".blocked-permission-icon[data-permission-id=geo]"
);
Assert.notEqual(
geoIcon.getBoundingClientRect().width,
0,
"geo anchor should be visible"
);
await BrowserTestUtils.switchTab(gBrowser, tab1);
Assert.equal(
geoIcon.getBoundingClientRect().width,
0,
"geo anchor should not be visible"
);
SitePermissions.removeFromPrincipal(principal, id, tab2.linkedBrowser);
BrowserTestUtils.removeTab(tab1);
BrowserTestUtils.removeTab(tab2);
});
// Test that temp permissions are cleared when closing tabs.
add_task(async function testTempPermissionOnTabClose() {
let principal =
Services.scriptSecurityManager.createContentPrincipalFromOrigin(origin);
let id = "geo";
ok(
!SitePermissions._temporaryPermissions._stateByBrowser.size,
"Temporary permission map should be empty initially."
);
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin);
SitePermissions.setForPrincipal(
principal,
id,
SitePermissions.BLOCK,
SitePermissions.SCOPE_TEMPORARY,
tab.linkedBrowser
);
Assert.deepEqual(
SitePermissions.getForPrincipal(principal, id, tab.linkedBrowser),
{
state: SitePermissions.BLOCK,
scope: SitePermissions.SCOPE_TEMPORARY,
}
);
ok(
SitePermissions._temporaryPermissions._stateByBrowser.has(
tab.linkedBrowser
),
"Temporary permission map should have an entry for the browser."
);
BrowserTestUtils.removeTab(tab);
ok(
!SitePermissions._temporaryPermissions._stateByBrowser.size,
"Temporary permission map should be empty after closing the tab."
);
});