tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });