Source code
Revision control
Copy as Markdown
Other Tools
const { PermissionTestUtils } = ChromeUtils.importESModule(
);
SpecialPowers.addTaskImport(
"E10SUtils",
"resource://gre/modules/E10SUtils.sys.mjs"
);
function openPermissionPopup() {
let promise = BrowserTestUtils.waitForEvent(
gBrowser.documentGlobal,
"popupshown",
true,
event => event.target == gPermissionPanel._permissionPopup
);
gPermissionPanel._identityPermissionBox.click();
return promise;
}
function closePermissionPopup() {
let promise = BrowserTestUtils.waitForEvent(
gPermissionPanel._permissionPopup,
"popuphidden"
);
gPermissionPanel._permissionPopup.hidePopup();
return promise;
}
// Helpers for testing browser-scoped temporary permissions via the
// Permissions API in a content tab.
async function queryPermissionInTab(browser, permName) {
return SpecialPowers.spawn(browser, [permName], async name => {
let status = await content.navigator.permissions.query({ name });
return status.state;
});
}
// Browser-scoped permissions are forwarded to the content process via PContent
// IPC, which may arrive after SpecialPowers messages (different protocol).
// Poll the Permissions API until the expected state is visible.
async function waitForPermissionState(browser, permName, expectedState) {
await TestUtils.waitForCondition(
() =>
queryPermissionInTab(browser, permName).then(s => s === expectedState),
`Waiting for ${permName} to become "${expectedState}"`
);
}
// Install an onchange listener in the content process. Resolves once the
// listener is installed. The caller should then trigger the permission change,
// and call waitForPermissionChange() to get the resulting state.
async function installOnChangeListener(browser, permName) {
await SpecialPowers.spawn(browser, [permName], async name => {
let status = await content.navigator.permissions.query({ name });
content._permChangePromise = new Promise(resolve => {
status.onchange = () => resolve(status.state);
});
});
}
async function waitForPermissionChange(browser) {
return SpecialPowers.spawn(browser, [], () => content._permChangePromise);
}