tor-browser

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

browser_bug1563629.js (2168B)


      1 "use strict";
      2 
      3 const DIRPATH = getRootDirectory(gTestPath).replace(
      4  "chrome://mochitests/content/",
      5  ""
      6 );
      7 const PATH = DIRPATH + "file_postMessage_parent.html";
      8 
      9 const URL1 = `https://example.com/${PATH}`;
     10 const URL2 = `https://example.org/${PATH}`;
     11 
     12 function listenForCrash(win) {
     13  function listener() {
     14    ok(false, "a crash occurred");
     15  }
     16 
     17  win.addEventListener("oop-browser-crashed", listener);
     18  registerCleanupFunction(() => {
     19    win.removeEventListener("oop-browser-crashed", listener);
     20  });
     21 }
     22 
     23 add_task(async function () {
     24  let win = await BrowserTestUtils.openNewBrowserWindow({
     25    fission: true,
     26    private: true,
     27    remote: true,
     28  });
     29 
     30  listenForCrash(win);
     31 
     32  try {
     33    let tab = win.gBrowser.selectedTab;
     34    let browser = tab.linkedBrowser;
     35 
     36    BrowserTestUtils.startLoadingURIString(browser, URL1);
     37    await BrowserTestUtils.browserLoaded(browser, false, URL1);
     38 
     39    async function loadURL(url) {
     40      let iframe = content.document.createElement("iframe");
     41      content.document.body.appendChild(iframe);
     42 
     43      iframe.contentWindow.location = url;
     44      await new Promise(resolve =>
     45        iframe.addEventListener("load", resolve, { once: true })
     46      );
     47 
     48      return iframe.browsingContext;
     49    }
     50 
     51    function length() {
     52      return content.length;
     53    }
     54 
     55    let outer = await SpecialPowers.spawn(browser, [URL2], loadURL);
     56    let inner = await SpecialPowers.spawn(outer, [URL2], loadURL);
     57 
     58    is(await SpecialPowers.spawn(outer, [], length), 1, "have 1 inner frame");
     59    is(await SpecialPowers.spawn(browser, [], length), 1, "have 1 outer frame");
     60 
     61    // Send a message from the outer iframe to the inner one.
     62    //
     63    // This would've previously crashed the content process that URL2 is running
     64    // in.
     65    await SpecialPowers.spawn(outer, [], () => {
     66      content.frames[0].postMessage("foo", "*");
     67    });
     68 
     69    // Now send a message from the inner frame to the outer one.
     70    await SpecialPowers.spawn(inner, [], () => {
     71      content.parent.postMessage("bar", "*");
     72    });
     73 
     74    // Assert we've made it this far.
     75    ok(true, "didn't crash");
     76  } finally {
     77    await BrowserTestUtils.closeWindow(win);
     78  }
     79 });