export class AllowJavascriptChild extends JSWindowActorChild {
  async receiveMessage(msg) {
    switch (msg.name) {
      case "CheckScriptsAllowed":
        return this.checkScriptsAllowed();
      case "CheckFiredLoadEvent":
        return this.contentWindow.wrappedJSObject.gFiredOnload;
      case "CreateIframe":
        return this.createIframe(msg.data.url);
    }
    return null;
  }

  handleEvent(event) {
    if (event.type === "load") {
      this.sendAsyncMessage("LoadFired");
    }
  }

  checkScriptsAllowed() {
    let win = this.contentWindow;

    win.wrappedJSObject.gFiredOnclick = false;
    win.document.body.click();
    return win.wrappedJSObject.gFiredOnclick;
  }

  async createIframe(url) {
    let doc = this.contentWindow.document;

    let iframe = doc.createElement("iframe");
    iframe.src = url;
    doc.body.appendChild(iframe);

    await new Promise(resolve => {
      iframe.addEventListener("load", resolve, { once: true });
    });

    return iframe.browsingContext;
  }
}
