| <!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> |