69 lines
2.1 KiB
HTML
69 lines
2.1 KiB
HTML
<html>
|
|
<head>
|
|
<title>GC test 10</title>
|
|
<script>
|
|
function print(message, color)
|
|
{
|
|
var paragraph = document.createElement("div");
|
|
paragraph.appendChild(document.createTextNode(message));
|
|
paragraph.style.fontFamily = "monospace";
|
|
if (color)
|
|
paragraph.style.color = color;
|
|
document.getElementById("console").appendChild(paragraph);
|
|
}
|
|
|
|
var threshold = 5;
|
|
|
|
function test()
|
|
{
|
|
if (window.testRunner)
|
|
testRunner.dumpAsText();
|
|
|
|
if (window.GCController)
|
|
{
|
|
global = window.frames.myframe.location.reload; // Eagerly construct these properties so they don't influence test outcome.
|
|
|
|
GCController.collect();
|
|
var before = GCController.getJSObjectCount();
|
|
|
|
window.frames.myframe.location.reload(true);
|
|
window.frames.myframe.location.reload(true);
|
|
window.frames.myframe.location.reload(true);
|
|
|
|
GCController.collect();
|
|
var after = GCController.getJSObjectCount();
|
|
|
|
// Unfortunately we cannot do a strict check here because there is still very minor (3) JS object increase,
|
|
// likely due to temporary JS objects being created during further execution of this test function.
|
|
// However, the iframe document leaking everything has an addition of ~25 objects every
|
|
// refresh, so it still is an accurate test.
|
|
if (after > (before + threshold))
|
|
{
|
|
print("FAIL: " + before + " objects before refresh, " + after + " objects after refresh.", "red");
|
|
}
|
|
else
|
|
{
|
|
print("PASS: Refresh did not leak JS objects.", "green");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
print("WARNING: Test cannot run if GCController does not exist. Thus it only runs from the test interface.", "red");
|
|
}
|
|
}
|
|
|
|
</script>
|
|
</head>
|
|
|
|
<body style="color: black" onload="test()">
|
|
<p>This page tests to make sure that the refresh of a page which holds a document reference in its DOM wrapper tree
|
|
does not leak all of its associated JS objects.</p>
|
|
<p>If the test passes, you'll see a single 'PASS' message below.</p>
|
|
<hr>
|
|
|
|
<div id='console'></div>
|
|
|
|
<iframe name="myframe" id="myframe" src="resources/gc-10-frame.html">
|
|
</body>
|
|
</html>
|