52 lines
1.7 KiB
HTML
52 lines
1.7 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script>
|
|
function startTest() {
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
}
|
|
|
|
// Access all objects/properties that we're going to use later in the test so that JS
|
|
// allocations only happen when we expect.
|
|
var body = document.body;
|
|
body.removeChild;
|
|
var plugin = body.getElementsByTagName('embed')[0];
|
|
var testObject = plugin.testObject;
|
|
setTimeout;
|
|
|
|
testObject = null;
|
|
|
|
// Allocate a bunch of JS memory. This should cause testObject to be finalized, but it's
|
|
// destructor shouldn't run until the GCController.collect call we make later.
|
|
var array = new Array(10000);
|
|
for (var i = 0; i < 10000; ++i)
|
|
array[i] = new Object();
|
|
|
|
// Remove the plugin and wait for a little bit to ensure it has been unloaded (WebKit1
|
|
// on Windows unloads plugins after a delay).
|
|
body.removeChild(plugin);
|
|
setTimeout(finishTest, 250);
|
|
}
|
|
|
|
function finishTest() {
|
|
// Force a GC. If we don't crash here, we've passed the test.
|
|
if (window.GCController)
|
|
GCController.collect();
|
|
|
|
document.body.appendChild(document.createTextNode('PASSED'));
|
|
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
}
|
|
|
|
addEventListener('load', startTest, false);
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<p>This test will only work in DumpRenderTree/WebKitTestRunner.</p>
|
|
<embed type="application/x-webkit-test-netscape">
|
|
</body>
|
|
</html>
|