103 lines
2.5 KiB
HTML
103 lines
2.5 KiB
HTML
<!-- webkit-test-runner [ UsesBackForwardCache=true ] -->
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<body>
|
|
<p>This tests that pageshow event is fired before the object element loads when a document in the page cache is restored.</p>
|
|
<div id="result"></div>
|
|
<script>
|
|
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
testRunner.setCanOpenWindows();
|
|
internals.settings.setBackForwardCacheSupportsPlugins(true);
|
|
}
|
|
|
|
let newWindow;
|
|
function start() {
|
|
result.textContent = 'Running...';
|
|
newWindow = window.open(URL.createObjectURL(newPage));
|
|
}
|
|
|
|
const newPage = new Blob([`<!DOCTYPE html>
|
|
<html>
|
|
<body>
|
|
<p>This is new page.</p>
|
|
<iframe id="iframe2"></iframe>
|
|
<iframe id="iframe1"></iframe>
|
|
<script>
|
|
window.pageShowed = false;
|
|
|
|
iframe2.onload = () => {
|
|
opener.postMessage({step: 'opened'}, '*');
|
|
}
|
|
onmessage = () => {
|
|
opener.postMessage({step: 'ready'}, '*');
|
|
}
|
|
|
|
iframe1.contentDocument.body.innerHTML = '<span>hello</span>';
|
|
iframe2.src = URL.createObjectURL(opener.subframePage);
|
|
|
|
</scr` + `ipt>
|
|
</body>
|
|
</html>`], {'type': 'text/html'});
|
|
|
|
window.subframePage = new Blob([`<!DOCTYPE html>
|
|
<html>
|
|
<body>
|
|
<object id="object1"></object>
|
|
<script>
|
|
window.addEventListener('pagehide', () => {
|
|
const object1 = window.object1;
|
|
object1.remove();
|
|
document.body.appendChild(object1);
|
|
object1.addEventListener('beforeload', () => {
|
|
top.opener.postMessage({step: 'check', pageShowed: !!top.iframe1.contentDocument.body.firstChild.offsetHeight}, '*');
|
|
}, {once: true});
|
|
});
|
|
</sc` + `ript>
|
|
</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'});
|
|
|
|
let isLastStep = false;
|
|
onmessage = (event) => {
|
|
if (isLastStep && event.data.step != 'check')
|
|
return;
|
|
switch (event.data.step) {
|
|
case 'opened':
|
|
newWindow.postMessage('getready', '*');
|
|
break;
|
|
case 'ready':
|
|
newWindow.location = URL.createObjectURL(secondPage);
|
|
break;
|
|
case 'navigated':
|
|
isLastStep = true;
|
|
newWindow.history.back();
|
|
break;
|
|
case 'check':
|
|
result.textContent = event.data.pageShowed ? 'PASS' : 'FAIL';
|
|
newWindow.close();
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (window.testRunner)
|
|
window.onload = start;
|
|
else
|
|
document.write('<button onclick="start()">Start</button>');
|
|
|
|
setTimeout(() => testRunner.notifyDone(), 3000);
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|