| "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; |
| } |
| } |
| }); |