forked from mirrors/gecko-dev
This is slightly complicated by the fact that the editor code wants to be able to set this from the content process, so we really need separate BrowsingContext and WindowContext flags, the latter of which can be set by the owning process. Differential Revision: https://phabricator.services.mozilla.com/D114899
44 lines
1 KiB
JavaScript
44 lines
1 KiB
JavaScript
"use strict";
|
|
var EXPORTED_SYMBOLS = ["AllowJavascriptChild"];
|
|
|
|
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;
|
|
}
|
|
}
|