blob: bc938dd9a35b842460ad87a10c6fb09f162964ac [file] [log] [blame]
<!-- webkit-test-runner [ UsesBackForwardCache=true ] -->
<!DOCTYPE html>
<html>
<body>
<p>This tests that pageshow event is fired before the focus elements are reset when a document in the page cache is restored.</p>
<div id="result"></div>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
let newWindow;
function start() {
result.textContent = 'Running...';
newWindow = window.open(URL.createObjectURL(newPage));
}
const newPage = new Blob([`<!DOCTYPE html>
<html>
<body>
<p>hello, this is a test.</p>
<form autocomplete="off"><output id="output"></output></form>
<script>
output.value = 'foo';
onload = () => opener.postMessage({step: 'opened'}, '*');
onmessage = () => {
let pageShowed = false;
document.addEventListener('DOMSubtreeModified', () => opener.postMessage({step: 'check', pageShowed}, '*'), {once: true});
window.addEventListener('pageshow', () => pageShowed = true);
opener.postMessage({step: 'ready'}, '*');
}
</scr` + `ipt>
</body>
</html>`], {'type': 'text/html'});
const secondPage = new Blob([`<!DOCTYPE html>
<html>
<body onload="opener.postMessage({step: 'navigated'}, '*')">
<p>second page.</p>
</body>
</html>`], {'type': 'text/html'});
onmessage = (event) => {
switch (event.data.step) {
case 'opened':
newWindow.postMessage('getready', '*');
break;
case 'ready':
newWindow.location = URL.createObjectURL(secondPage);
break;
case 'navigated':
newWindow.history.back();
break;
case 'check':
result.textContent = event.data.pageShowed ? 'PASS' : 'FAIL';
newWindow.close();
if (window.testRunner)
testRunner.notifyDone();
break;
}
}
if (window.testRunner)
start();
else
document.write('<button onclick="start()">Start</button>');
</script>
</body>
</html>