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>