Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE html>
<meta charset="utf-8">
<title>Navigation Preload for same site iframe</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="../resources/test-helpers.sub.js"></script>
<body></body>
<script>
const SAME_SITE = get_host_info().HTTPS_REMOTE_ORIGIN;
const RESOURCES_DIR = "/service-workers/service-worker/navigation-preload/resources/";
/**
* This test is used for testing the NavigationPreload works in a same site iframe.
* The test scenario is
* 1. Create a same site iframe to register service worker and wait for it be activated
* 2. Create a same site iframe which be intercepted by the service worker.
* 3. Once the iframe is loaded, service worker should set the page through the preload response.
* And checking if the iframe's body content is expected.
* 4. Unregister the service worker.
* 5. remove created iframes.
*/
promise_test(async (t) => {
let resolver;
let checkValue = false;
window.onmessage = (e) => {
if (checkValue) {
assert_equals(e.data, "samesite");
checkValue = false;
}
resolver();
};
let helperIframe = document.createElement("iframe");
helperIframe.src = SAME_SITE + RESOURCES_DIR + "samesite-sw-helper.html";
document.body.appendChild(helperIframe);
await new Promise(resolve => {
resolver = resolve;
helperIframe.onload = async () => {
helperIframe.contentWindow.postMessage("Register", '*');
}
});
let sameSiteIframe = document.createElement("iframe");
sameSiteIframe.src = SAME_SITE + RESOURCES_DIR + "samesite-iframe.html";
document.body.appendChild(sameSiteIframe);
await new Promise(resolve => {
resolver = resolve;
sameSiteIframe.onload = async() => {
checkValue = true;
sameSiteIframe.contentWindow.postMessage("GetBody", '*')
}
});
await new Promise(resolve => {
resolver = resolve;
helperIframe.contentWindow.postMessage("Unregister", '*')
});
helperIframe.remove();
sameSiteIframe.remove();
});
</script>