<script src="/js-test-resources/js-test-pre.js"></script>
<script>

if (window.testRunner) {
	testRunner.waitUntilDone();
	testRunner.dumpAsText();
}

function loaded() {
	// If the garbage collection causes the image load to stop and therefore causes the load event to fire on the main frame, we failed.
	alert("FAIL: The load event fired");
	
	if (window.testRunner)
		testRunner.notifyDone();
}

</script>
<body onload="loaded();">

This has an object element representing an image.  That object element is wrapped in a div.  It removes the div, forces garbage collection, and makes sure that the window load event does not fire.  It also makes sure there is no crash.<br>
<div id="thediv">
<object type="image/gif" data="resources/slowimage.py">
</object>
</div>
</body>
<script>

function finished() {
	window.stop()
	if (window.testRunner)
		testRunner.notifyDone();
}

function forceGC() {
	gc();
	setTimeout("finished();", 0);
}

function removeTheDiv() {
	var element = window.document.getElementById("thediv");
	element.parentNode.removeChild(element);
	element = null;
	setTimeout("forceGC();", 0);
}

setTimeout("removeTheDiv();", 0);

</script>
