blob: bab83b444fda07da95c7ab33ed3d016405f94162 [file] [log] [blame]
<!DOCTYPE html>
<script src="portal-harness.js"></script>
<body>
<script>
function messageFrameAndAwaitResponse(frame, message) {
return new Promise((resolve) => {
window.onmessage = (e) => {
resolve(e.data);
};
frame.contentWindow.postMessage(message, '*');
});
}
function innerFrameUrl(crossSite) {
return (crossSite ?
'https://{{hosts[alt][www]}}:{{ports[https][0]}}' : '') +
'/portals/history/resources/inner-iframe.html'
}
async function runTestIFrameSrcInPortal(crossSite) {
assert(history.length == 1, 'Initial history length');
let iframe = document.createElement('iframe');
iframe.src = innerFrameUrl(crossSite);
await new Promise((resolve) => {
iframe.onload = resolve;
document.body.appendChild(iframe);
});
let frameHistoryLength =
await messageFrameAndAwaitResponse(iframe, 'reportHistoryLength');
assert(history.length == 1, 'History length unchanged when iframe added');
assert(frameHistoryLength == 1, 'History length in iframe when added');
iframe.src = iframe.src + '#test';
frameHistoryLength =
await messageFrameAndAwaitResponse(iframe, 'reportHistoryLength');
assert(
history.length == 1, 'History length unchanged when iframe src set');
assert(
frameHistoryLength == 1,
'History length in iframe unchanged when iframe src set');
}
function testIFrameSrcInPortal() {
return runTestIFrameSrcInPortal(false);
}
function testCrossSiteIFrameSrcInPortal() {
return runTestIFrameSrcInPortal(true);
}
async function runTestIFrameNavInPortal(crossSite) {
assert(history.length == 1, 'Initial history length');
let iframe = document.createElement('iframe');
iframe.src = innerFrameUrl(crossSite);
await new Promise((resolve) => {
iframe.onload = resolve;
document.body.appendChild(iframe);
});
await messageFrameAndAwaitResponse(iframe, 'navigate');
let frameHistoryLength =
await messageFrameAndAwaitResponse(iframe, 'reportHistoryLength');
assert(
history.length == 1, 'History length unchanged when iframe navigates');
assert(
frameHistoryLength == 1,
'History length in iframe unchanged when iframe navigates');
}
function testIFrameNavInPortal() {
return runTestIFrameNavInPortal(false);
}
function testCrossSiteIFrameNavInPortal() {
return runTestIFrameNavInPortal(true);
}
</script>
</body>