diff options
Diffstat (limited to 'testing/web-platform/tests/storage-access-api/resources/embedded_forwarder.js')
-rw-r--r-- | testing/web-platform/tests/storage-access-api/resources/embedded_forwarder.js | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/testing/web-platform/tests/storage-access-api/resources/embedded_forwarder.js b/testing/web-platform/tests/storage-access-api/resources/embedded_forwarder.js new file mode 100644 index 0000000000..c1e5e54443 --- /dev/null +++ b/testing/web-platform/tests/storage-access-api/resources/embedded_forwarder.js @@ -0,0 +1,50 @@ +"use strict"; + +test_driver.set_test_context(window.top); + +function waitForMessage(timestamp) { + return new Promise(resolve => { + const listener = (event) => { + if (!timestamp || event.data.timestamp == timestamp) { + window.removeEventListener("message", listener); + resolve(event.data); + } + }; + window.addEventListener("message", listener); + }); +} + +var iframe = document.createElement('iframe'); +const queryString = window.location.search; +const urlParams = new URLSearchParams(queryString); +iframe.src = urlParams.get("inner_url"); +document.body.appendChild(iframe); + +window.addEventListener("message", async (event) => { + function replyToParent(data) { + parent.postMessage( + {timestamp: event.data.timestamp, data}, "*"); + } + + if (!event.data["command"]) { + return; + } + + switch (event.data["command"]) { + case "navigate_child": + iframe.onload = () => replyToParent(event.data.url); + iframe.src = event.data.url; + break; + case "reload": + case "navigate": + iframe.contentWindow.postMessage({timestamp, ...event.data}, "*"); + break; + default:{ + const timestamp = event.data.timestamp; + const p = waitForMessage(timestamp); + iframe.contentWindow.postMessage({timestamp, ...event.data}, "*"); + replyToParent(await p.then(resp => resp.data)); + break; + } + } +}); |