Bug 1612174 - [remote] Emit "init" lifecycleEvent when readyState is "loading" r=remote-protocol-reviewers,whimboo

Evaluating `document.open` + `write` + `close` triggers the `readyState`
to change to "loading". Puppeteer, for example, relies on a seeing an
"init" life cycle event in that case for their `Page.setContent` method.

Also move "Page.loadEventFired" to be triggered by an actual "load"
instead of "pagehide", which we don't see after a `document.write`.

Differential Revision: https://phabricator.services.mozilla.com/D67702

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Maja Frydrychowicz 2020-03-24 07:46:37 +00:00
Родитель 2ef4e466f8
Коммит 7ecfb52ab1
1 изменённых файлов: 37 добавлений и 4 удалений

Просмотреть файл

@ -62,12 +62,24 @@ class Page extends ContentProcessDomain {
this.enabled = true;
this.contextObserver.on("frame-navigated", this._onFrameNavigated);
this.chromeEventHandler.addEventListener("DOMContentLoaded", this, {
this.chromeEventHandler.addEventListener("readystatechange", this, {
mozSystemGroup: true,
capture: true,
});
this.chromeEventHandler.addEventListener("pagehide", this, {
mozSystemGroup: true,
});
this.chromeEventHandler.addEventListener("unload", this, {
mozSystemGroup: true,
capture: true,
});
this.chromeEventHandler.addEventListener("DOMContentLoaded", this, {
mozSystemGroup: true,
});
this.chromeEventHandler.addEventListener("load", this, {
mozSystemGroup: true,
capture: true,
});
this.chromeEventHandler.addEventListener("pageshow", this, {
mozSystemGroup: true,
});
@ -78,12 +90,24 @@ class Page extends ContentProcessDomain {
if (this.enabled) {
this.contextObserver.off("frame-navigated", this._onFrameNavigated);
this.chromeEventHandler.removeEventListener("DOMContentLoaded", this, {
this.chromeEventHandler.removeEventListener("readystatechange", this, {
mozSystemGroup: true,
capture: true,
});
this.chromeEventHandler.removeEventListener("pagehide", this, {
mozSystemGroup: true,
});
this.chromeEventHandler.removeEventListener("unload", this, {
mozSystemGroup: true,
capture: true,
});
this.chromeEventHandler.removeEventListener("DOMContentLoaded", this, {
mozSystemGroup: true,
});
this.chromeEventHandler.removeEventListener("load", this, {
mozSystemGroup: true,
capture: true,
});
this.chromeEventHandler.removeEventListener("pageshow", this, {
mozSystemGroup: true,
});
@ -279,7 +303,7 @@ class Page extends ContentProcessDomain {
}
break;
case "pageshow":
case "load":
this.emit("Page.loadEventFired", { timestamp });
if (!isFrame) {
this.emitLifecycleEvent(
@ -293,8 +317,17 @@ class Page extends ContentProcessDomain {
// XXX this should most likely be sent differently
this.emit("Page.navigatedWithinDocument", { frameId, url });
this.emit("Page.frameStoppedLoading", { frameId });
break;
case "readystatechange":
if (this.content.document.readState === "loading") {
this.emitLifecycleEvent(
frameId,
/* loaderId */ null,
"init",
timestamp
);
}
}
}