2 <?xml-stylesheet href=
"chrome://global/skin" type=
"text/css"?>
3 <?xml-stylesheet href=
"chrome://mochikit/content/tests/SimpleTest/test.css" type=
"text/css"?>
5 https://bugzilla.mozilla.org/show_bug.cgi?id=311681
7 <window title=
"Mozilla Bug 311681"
8 xmlns:
html=
"http://www.w3.org/1999/xhtml"
9 xmlns=
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
11 <script src=
"chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
13 <body xmlns=
"http://www.w3.org/1999/xhtml">
14 <a target=
"_blank" href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=311681">Mozilla Bug
311681</a>
15 <script class=
"testbody" type=
"text/javascript">
18 SimpleTest.waitForExplicitFinish();
20 // Make sure to trigger the hashtable case by asking for enough elements
22 for (var i =
0; i <
256; ++i) {
23 var x = document.getElementById(i);
26 // save off the document.getElementById function, since getting it as a
27 // property off the document it causes a content flush.
28 var fun = document.getElementById;
30 // Slot for our initial element with id
"content"
34 return fun.call(document,
"content");
37 function testClone() {
38 // Test to make sure that if we have multiple nodes with the same ID in
39 // a document we don't forget about one of them when the other is
41 var newParent = $(
"display");
42 var node = testNode.cloneNode(true);
43 isnot(node, testNode,
"Clone should be a different node");
45 newParent.appendChild(node);
47 // Check what getElementById returns, no flushing
48 is(getCont(), node,
"Should be getting new node pre-flush 1")
50 // Trigger a layout flush, just in case.
51 let itemHeight = newParent.offsetHeight/
10;
53 // Check what getElementById returns now.
54 is(getCont(), node,
"Should be getting new node post-flush 1")
58 // Check what getElementById returns, no flushing
59 is(getCont(), testNode,
"Should be getting orig node pre-flush 2");
61 // Trigger a layout flush, just in case.
62 itemHeight = newParent.offsetHeight/
10;
64 // Check what getElementById returns now.
65 is(getCont(), testNode,
"Should be getting orig node post-flush 2");
67 node = testNode.cloneNode(true);
68 newParent.appendChild(node);
71 // Check what getElementById returns, no flushing
72 is(getCont(), node,
"Should be getting clone pre-flush");
74 // Trigger a layout flush, just in case.
75 // eslint-disable-next-line no-unused-vars
76 itemHeight = newParent.offsetHeight/
10;
78 // Check what getElementById returns now.
79 is(getCont(), node,
"Should be getting clone post-flush");
83 function clear(node) {
84 while (node.hasChildNodes()) {
85 node.firstChild.remove();
89 addLoadEvent(testClone);
90 addLoadEvent(SimpleTest.finish);
94 <div id=
"content" style=
"display: none">
95 <script class=
"testbody" type=
"text/javascript">
97 testNode = fun.call(document,
"content");
98 // Needs incremental XML parser
99 isnot(testNode, null,
"Should have node here");