summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/storage-access-api/resources/embedded_forwarder.js
diff options
context:
space:
mode:
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.js50
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;
+ }
+ }
+});