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