/* Any copyright is dedicated to the Public Domain.
https://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const { TabStateFlusher } = ChromeUtils.importESModule(
"resource:///modules/sessionstore/TabStateFlusher.sys.mjs"
);
// Restore a page containing a cross-origin about:blank iframe
add_task(async
function test_restore_with_cross_origin_blank_iframe() {
const tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"https://example.com/browser/docshell/test/browser/file_2007897.html"
);
const blankLoaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, {
wantLoad:
"about:blank",
includeSubFrames:
true,
});
await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
const ifr = content.document.querySelector(
"iframe");
await SpecialPowers.spawn(ifr, [], () => {
// Must use wrappedJSObject so we use the right content principal
content.wrappedJSObject.location =
"about:blank";
});
});
await blankLoaded;
await TabStateFlusher.flush(tab.linkedBrowser);
const sessionStoreClosedObjectsChanged = TestUtils.topicObserved(
"sessionstore-closed-objects-changed"
);
gBrowser.removeTab(tab);
await sessionStoreClosedObjectsChanged;
const restoredTab = SessionStore.undoCloseTab(window,
0);
await BrowserTestUtils.waitForEvent(restoredTab,
"SSTabRestored");
// The crash doesn't cause the test to fail, so check if the iframe was restored
await SpecialPowers.spawn(restoredTab.linkedBrowser, [], async () => {
const ifr = content.document.querySelector(
"iframe");
Assert.ok(ifr,
"did not crash");
Assert.ok(!ifr.contentDocument && !ifr.document,
"iframe is restricted");
});
BrowserTestUtils.removeTab(restoredTab);
});