blob: 421286d50009833f550fb81502dbdf22b6d31288 [file] [log] [blame]
<!-- webkit-test-runner [ enablePageCache=true ] -->
<html>
<body>
Test pageshow/pagehide event behavior when navigating away from a page with frames, putting the page in the page cache, then back to it.
<pre id="log"></pre>
</body>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
// We explicitly chain the loading of the subframes to ensure consistent test results between runs.
var didLoadSubframes = appendIframe("resources/pageshow-pagehide-subframe-cachable.html").then(() => appendIframe("resources/pageshow-pagehide-subframe-cachable-2.html"));
function appendIframe(url)
{
var promise = new Promise((resolve, reject) => {
var iframe = document.createElement("iframe");
iframe.onload = resolve;
iframe.src = url;
document.body.appendChild(iframe);
});
return promise;
}
function log(message)
{
// Logging to the console instead of the "log" DIV in the DOM because
// otherwise we trigger the assert mentioned at http://webkit.org/b/43152
// (since we log during pagehide)
console.log(message);
}
log("***Top level frame being parsed for the initial page load***");
window.onload = function(evt) {
log("Main frame window.onload");
}
window.onpageshow = function(evt) {
log("Main frame window.onpageshow" + ", target = " + evt.target + ", persisted = " + evt.persisted);
if (evt.persisted) {
if (window.testRunner)
testRunner.notifyDone();
} else {
log("***Navigating top-level frame to a page that will immediately navigate back to this one***");
didLoadSubframes.then(() => {
// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(() => { window.location.href = "data:text/html,<script>history.back();</scr" + "ipt>"; }, 0);
});
}
}
window.onpagehide = function(evt) {
log("Main frame window.onpagehide" + ", target = " + evt.target + ", persisted = " + evt.persisted);
}
</script>
</html>