chromium/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/navigating-across-documents/resources/wait-for-messages.js

// Asynchronous function that waits for the given number of messages to be
// received by `window`, then returns those messages.
function waitForMessages(numMessages) {
  return new Promise((resolve) => {
    const messages = [];

    window.addEventListener("message", function handler(evt) {
      messages.push(evt.data);
      if (messages.length == numMessages) {
        window.removeEventListener("message", handler);
        resolve(messages);
      }
    });
  });
}