<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <window title="Mozilla Bug 449780" onload="setTimeout(doTheTest, 0);" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <hbox id="parent"> </hbox> <!-- test code goes here --> <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js" /> <script type="application/javascript" src="docshell_helpers.js" /> <script type="application/javascript"><![CDATA[ function addBrowser(parent, width, height) { var b = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "browser"); b.setAttribute("type", "content"); b.setAttribute("id", "content"); b.setAttribute("width", width); b.setAttribute("height", height); b.setAttribute("remote", SpecialPowers.Services.appinfo.sessionHistoryInParent); if (SpecialPowers.Services.appinfo.sessionHistoryInParent) { b.setAttribute("maychangeremoteness", "true"); } document.getElementById("parent").appendChild(b); return b; } let f1 = addBrowser("parent", 300, 200); /** Test for Bug 449780 */ var doc1 = "data:text/html,<html><body>This is a test</body></html>"; var doc2 = "data:text/html,<html><body>This is a second test</body></html>"; async function doTheTest() { await promisePageNavigation({ uri: doc1, }); let { origDOM, modifiedDOM } = await SpecialPowers.spawn(f1, [], () => { var origDOM = content.document.documentElement.innerHTML; content.document.body.textContent = "Modified"; var modifiedDOM = content.document.documentElement.innerHTML; isnot(origDOM, modifiedDOM, "DOM should be different"); return { origDOM, modifiedDOM }; }); await promisePageNavigation({ uri: doc2, }); await promisePageNavigation({ back: true, }); await SpecialPowers.spawn(f1, [modifiedDOM], (modifiedDOM) => { is(content.document.documentElement.innerHTML, modifiedDOM, "Should have been bfcached"); }); await promisePageNavigation({ forward: true, }); f1.removeAttribute("id"); let f2 = addBrowser("parent", 300, 200); // Make sure there's a document or the swap will fail. await promisePageNavigation({ uri: "about:blank", }); f1.swapDocShells(f2); await promisePageNavigation({ back: true, }); await SpecialPowers.spawn(f2, [origDOM], (origDOM) => { is(content.document.documentElement.innerHTML, origDOM, "Should not have been bfcached"); }); finish(); } ]]></script> </window>