65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
"use strict";
|
|
|
|
const TOPIC = "browsing-context-discarded";
|
|
|
|
async function observeDiscarded(browsingContexts, callback) {
|
|
let discarded = [];
|
|
|
|
let promise = BrowserUtils.promiseObserved(TOPIC, subject => {
|
|
ok(BrowsingContext.isInstance(subject), "subject to be a BrowsingContext");
|
|
discarded.push(subject);
|
|
|
|
return browsingContexts.every(item => discarded.includes(item));
|
|
});
|
|
await callback();
|
|
await promise;
|
|
|
|
return discarded;
|
|
}
|
|
|
|
add_task(async function toplevelForNewWindow() {
|
|
let win = await BrowserTestUtils.openNewBrowserWindow();
|
|
let browsingContext = win.gBrowser.selectedBrowser.browsingContext;
|
|
|
|
await observeDiscarded([win.browsingContext, browsingContext], async () => {
|
|
await BrowserTestUtils.closeWindow(win);
|
|
});
|
|
});
|
|
|
|
add_task(async function toplevelForNewTab() {
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
|
let browsingContext = tab.linkedBrowser.browsingContext;
|
|
|
|
let discarded = await observeDiscarded([browsingContext], () => {
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|
|
|
|
ok(
|
|
!discarded.includes(window.browsingContext),
|
|
"no notification for the current window's chrome browsing context"
|
|
);
|
|
});
|
|
|
|
add_task(async function subframe() {
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
|
let browsingContext = await SpecialPowers.spawn(tab.linkedBrowser, [], () => {
|
|
let iframe = content.document.createElement("iframe");
|
|
content.document.body.appendChild(iframe);
|
|
iframe.contentWindow.location = "https://example.com/";
|
|
return iframe.browsingContext;
|
|
});
|
|
|
|
let discarded = await observeDiscarded([browsingContext], async () => {
|
|
await SpecialPowers.spawn(tab.linkedBrowser, [], () => {
|
|
let iframe = content.document.querySelector("iframe");
|
|
iframe.remove();
|
|
});
|
|
});
|
|
|
|
ok(
|
|
!discarded.includes(tab.browsingContext),
|
|
"no notification for toplevel browsing context"
|
|
);
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|