Bug 1686820 [wpt PR 27193] - Origin-keyed agent clusters: make COI imply origin-keyin...
[gecko.git] / docshell / test / browser / browser_browsing_context_discarded.js
blob7c6e1e7b7fb6c4840284c916242e401e2485215c
1 "use strict";
3 const TOPIC = "browsing-context-discarded";
5 async function observeDiscarded(browsingContexts, callback) {
6   let discarded = [];
8   let promise = BrowserUtils.promiseObserved(TOPIC, subject => {
9     ok(subject instanceof BrowsingContext, "subject to be a BrowsingContext");
10     discarded.push(subject);
12     return browsingContexts.every(item => discarded.includes(item));
13   });
14   await callback();
15   await promise;
17   return discarded;
20 add_task(async function toplevelForNewWindow() {
21   let win = await BrowserTestUtils.openNewBrowserWindow();
22   let browsingContext = win.gBrowser.selectedBrowser.browsingContext;
24   await observeDiscarded([win.browsingContext, browsingContext], async () => {
25     await BrowserTestUtils.closeWindow(win);
26   });
27 });
29 add_task(async function toplevelForNewTab() {
30   let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
31   let browsingContext = tab.linkedBrowser.browsingContext;
33   let discarded = await observeDiscarded([browsingContext], () => {
34     BrowserTestUtils.removeTab(tab);
35   });
37   ok(
38     !discarded.includes(window.browsingContext),
39     "no notification for the current window's chrome browsing context"
40   );
41 });
43 add_task(async function subframe() {
44   let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
45   let browsingContext = await SpecialPowers.spawn(tab.linkedBrowser, [], () => {
46     let iframe = content.document.createElement("iframe");
47     content.document.body.appendChild(iframe);
48     iframe.contentWindow.location = "https://example.com/";
49     return iframe.browsingContext;
50   });
52   let discarded = await observeDiscarded([browsingContext], async () => {
53     await SpecialPowers.spawn(tab.linkedBrowser, [], () => {
54       let iframe = content.document.querySelector("iframe");
55       iframe.remove();
56     });
57   });
59   ok(
60     !discarded.includes(tab.browsingContext),
61     "no notification for toplevel browsing context"
62   );
64   BrowserTestUtils.removeTab(tab);
65 });