<!-- webkit-test-runner [ UsesBackForwardCache=true ] -->
<head>
<script>
if (window.testRunner && window.internals) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
    internals.settings.setBackForwardCacheSupportsPlugins(true);
}

function pageShown() {
    if (event.persisted)
        setTimeout("testComplete()", 0);   
    else
        setTimeout("startTest()", 0);
}

function testComplete() {
    alert("Made it back!");
    if (window.testRunner)
        testRunner.notifyDone();
}

function startTest() {
    document.getElementById("ExamplePlugin").setAttribute("style", "display:none");
    window.location.href = 'resources/go-back.html';
}

</script>

<style>
    object { border-color: red; border-width: 2px; border-style:solid; }
</style>
</head>

<body onpageshow="pageShown();">
    
This test - assuming it will pass - does the following:<br>
1 - Has nested plugin elements<br>
2 - Leaves the page, and the page enters the page cache<br>
3 - Returns, pulling the page from the page cache<br>
4 - Doesn't crash<br>
<br>
If you're not running under DRT, you'll need to leave the page then return to it yourself.
<br>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>
<object>

<object type="application/x-webkit-test-netscape" width="500" height="375" id="ExamplePlugin">
    <img src="resources/apple.gif">
</object>

Some fallback text to force a renderer.

</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object><br><br>

(Yes, the extreme number of object elements are necessary to more reliably reproduce the crash.  Leave them.)
</body>
