4 Test for bug
1545516: We don't flush layout unnecessarily on the parent
5 document when the frame is already disconnected.
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>
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() {
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")
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");
36 isnot(parentUtils
.framesConstructed
, previousConstructCount
, "We should've flushed layout now");
39 document
.body
.appendChild(iframe
);