browser_bug2007897.js (1753B)
1 /* Any copyright is dedicated to the Public Domain. 2 https://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const { TabStateFlusher } = ChromeUtils.importESModule( 7 "resource:///modules/sessionstore/TabStateFlusher.sys.mjs" 8 ); 9 10 // Restore a page containing a cross-origin about:blank iframe 11 add_task(async function test_restore_with_cross_origin_blank_iframe() { 12 const tab = await BrowserTestUtils.openNewForegroundTab( 13 gBrowser, 14 "https://example.com/browser/docshell/test/browser/file_2007897.html" 15 ); 16 17 const blankLoaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, { 18 wantLoad: "about:blank", 19 includeSubFrames: true, 20 }); 21 await SpecialPowers.spawn(tab.linkedBrowser, [], async () => { 22 const ifr = content.document.querySelector("iframe"); 23 await SpecialPowers.spawn(ifr, [], () => { 24 // Must use wrappedJSObject so we use the right content principal 25 content.wrappedJSObject.location = "about:blank"; 26 }); 27 }); 28 await blankLoaded; 29 30 await TabStateFlusher.flush(tab.linkedBrowser); 31 32 const sessionStoreClosedObjectsChanged = TestUtils.topicObserved( 33 "sessionstore-closed-objects-changed" 34 ); 35 gBrowser.removeTab(tab); 36 await sessionStoreClosedObjectsChanged; 37 const restoredTab = SessionStore.undoCloseTab(window, 0); 38 await BrowserTestUtils.waitForEvent(restoredTab, "SSTabRestored"); 39 40 // The crash doesn't cause the test to fail, so check if the iframe was restored 41 await SpecialPowers.spawn(restoredTab.linkedBrowser, [], async () => { 42 const ifr = content.document.querySelector("iframe"); 43 Assert.ok(ifr, "did not crash"); 44 Assert.ok(!ifr.contentDocument && !ifr.document, "iframe is restricted"); 45 }); 46 47 BrowserTestUtils.removeTab(restoredTab); 48 });