<!-- webkit-test-runner [ UsesBackForwardCache=true ] -->
<!DOCTYPE html>
<html>
<head>
<title>Show composited iframe contents when navigating back to page</title>
<link rel="stylesheet" href="resources/show-composited-iframe-on-back-button.css">
<script>
if (window.testRunner)
    testRunner.waitUntilDone();

onpageshow = (pageTransitionEvent) => {
    if (pageTransitionEvent.persisted) {
        if (window.testRunner)
            testRunner.notifyDone();
    }
}

onload = () => {
    setTimeout(() => {
        window.location = "../fast/history/resources/page-cache-helper.html";
    }, 0);
}

</script>
</head>
<body>
<p>This page has a composited iframe. When navigating to a new page and then back to this one, the iframe contents should show up.</p>
<p>To run this test manually, perform the following:</p>
<ol>
    <li>Click <a href="http://apple.com">here</a>.</li>
    <li>Click the back button in the browser.</li>
</ol>
<p>This test PASSED if a blue box is visible below. Otherwise, it FAILED.</p>
<iframe class="container" scrolling="no" src="resources/composited-subframe.html"></iframe>
</body>
</html>
