tor-browser

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

test_flushing_frame.html (1905B)


      1 <!doctype html>
      2 <meta charset="utf-8">
      3 <title>
      4  Test for bug 1545516: We don't flush layout unnecessarily on the parent
      5  document when the frame is already disconnected.
      6 </title>
      7 <link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
      8 <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9 <div id="content"></div>
     10 <script>
     11  SimpleTest.waitForExplicitFinish();
     12  const iframe = document.createElement("iframe");
     13  const content = document.querySelector("#content");
     14  const parentUtils = SpecialPowers.getDOMWindowUtils(window);
     15  iframe.onload = function() {
     16    const win = iframe.contentWindow;
     17    iframe.offsetTop; // flush layout
     18    content.style.display = "inline"; // Dirty style with something that will reframe.
     19 
     20    const previousConstructCount = parentUtils.framesConstructed;
     21    let pagehideRan = false;
     22    win.addEventListener("pagehide", function() {
     23      pagehideRan = true;
     24      win.foo = win.innerWidth;
     25      is(parentUtils.framesConstructed, previousConstructCount, "innerWidth shouldn't have flushed parent document layout")
     26      win.bar = win.document.documentElement.offsetHeight;
     27      is(parentUtils.framesConstructed, previousConstructCount, "offsetHeight shouldn't have flushed parent document layout")
     28      win.baz = win.getComputedStyle(win.document.documentElement).color;
     29      is(parentUtils.framesConstructed, previousConstructCount, "getComputedStyle shouldn't have flushed parent document layout")
     30    });
     31 
     32    iframe.remove(); // Remove the iframe
     33    is(pagehideRan, true, "pagehide handler should've ran");
     34    is(parentUtils.framesConstructed, previousConstructCount, "Nothing should've flushed the parent document layout yet");
     35    content.offsetTop;
     36    isnot(parentUtils.framesConstructed, previousConstructCount, "We should've flushed layout now");
     37    SimpleTest.finish();
     38  };
     39  document.body.appendChild(iframe);
     40 </script>