Bug 1839315: part 4) Link from `SheetLoadData::mWasAlternate` to spec. r=emilio DONTBUILD
[gecko.git] / layout / style / test / test_flushing_frame.html
blobfa6d75164721debb995fdd8c70e6307b7fd67648
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.
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 });
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();
39 document.body.appendChild(iframe);
40 </script>