Source code
Revision control
Copy as Markdown
Other Tools
<?xml version="1.0"?>
<hbox id="parent">
</hbox>
<!-- test code goes here -->
<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);
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>