forked from mirrors/gecko-dev
72 lines
1.8 KiB
JavaScript
72 lines
1.8 KiB
JavaScript
"use strict";
|
|
|
|
add_task(async function webnav_test_eventpage() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["extensions.eventPages.enabled", true]],
|
|
});
|
|
|
|
let extension = ExtensionTestUtils.loadExtension({
|
|
manifest: {
|
|
permissions: ["webNavigation", "*://mochi.test/*"],
|
|
background: { persistent: false },
|
|
},
|
|
background() {
|
|
const EVENTS = [
|
|
"onTabReplaced",
|
|
"onBeforeNavigate",
|
|
"onCommitted",
|
|
"onDOMContentLoaded",
|
|
"onCompleted",
|
|
"onErrorOccurred",
|
|
"onReferenceFragmentUpdated",
|
|
"onHistoryStateUpdated",
|
|
];
|
|
|
|
for (let event of EVENTS) {
|
|
browser.webNavigation[event].addListener(() => {});
|
|
}
|
|
browser.test.sendMessage("ready");
|
|
},
|
|
});
|
|
|
|
// onTabReplaced is never persisted, it is an empty event handler.
|
|
const EVENTS = [
|
|
"onBeforeNavigate",
|
|
"onCommitted",
|
|
"onDOMContentLoaded",
|
|
"onCompleted",
|
|
"onErrorOccurred",
|
|
"onReferenceFragmentUpdated",
|
|
"onHistoryStateUpdated",
|
|
];
|
|
|
|
await extension.startup();
|
|
await extension.awaitMessage("ready");
|
|
for (let event of EVENTS) {
|
|
assertPersistentListeners(extension, "webNavigation", event, {
|
|
primed: false,
|
|
});
|
|
}
|
|
|
|
await extension.terminateBackground();
|
|
for (let event of EVENTS) {
|
|
assertPersistentListeners(extension, "webNavigation", event, {
|
|
primed: true,
|
|
});
|
|
}
|
|
|
|
// wake up the background, we don't really care which event does it,
|
|
// we're just verifying the state after.
|
|
let newWin = await BrowserTestUtils.openNewBrowserWindow();
|
|
await extension.awaitMessage("ready");
|
|
for (let event of EVENTS) {
|
|
assertPersistentListeners(extension, "webNavigation", event, {
|
|
primed: false,
|
|
});
|
|
}
|
|
|
|
await BrowserTestUtils.closeWindow(newWin);
|
|
|
|
await extension.unload();
|
|
await SpecialPowers.popPrefEnv();
|
|
});
|