Skip to content

Commit d6e42d6

Browse files
committed
Bug 1815339 - Change the method for knowing when the engine process is ready; r=nordzilla
Differential Revision: https://phabricator.services.mozilla.com/D192474
1 parent 0958e26 commit d6e42d6

File tree

4 files changed

+32
-36
lines changed

4 files changed

+32
-36
lines changed

toolkit/components/translations/actors/TranslationsEngineChild.sys.mjs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ export class TranslationsEngineChild extends JSWindowActorChild {
2727
this.#exportFunctions();
2828
}
2929

30+
handleEvent(event) {
31+
switch (event.type) {
32+
case "DOMContentLoaded":
33+
this.sendAsyncMessage("TranslationsEngine:Ready");
34+
break;
35+
}
36+
}
37+
3038
// eslint-disable-next-line consistent-return
3139
async receiveMessage({ name, data }) {
3240
switch (name) {

toolkit/components/translations/actors/TranslationsEngineParent.sys.mjs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ export class TranslationsEngineParent extends JSWindowActorParent {
2121

2222
async receiveMessage({ name, data }) {
2323
switch (name) {
24+
case "TranslationsEngine:Ready":
25+
if (!lazy.TranslationsParent.resolveEngine) {
26+
throw new Error(
27+
"Unable to find the resolve function for when the translations engine is ready."
28+
);
29+
}
30+
lazy.TranslationsParent.resolveEngine(this);
31+
return undefined;
2432
case "TranslationsEngine:RequestEnginePayload": {
2533
const { fromLanguage, toLanguage } = data;
2634
const payloadPromise =

toolkit/components/translations/actors/TranslationsParent.sys.mjs

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,13 @@ export class TranslationsParent extends JSWindowActorParent {
175175
*/
176176
languageState;
177177

178+
/**
179+
* Allows the TranslationsEngineParent to resolve an engine once it is ready.
180+
*
181+
* @type {null | () => TranslationsEngineParent}
182+
*/
183+
resolveEngine = null;
184+
178185
/**
179186
* The cached URI spec where the panel was first ever shown, as determined by the
180187
* browser.translations.panelShown pref.
@@ -425,6 +432,10 @@ export class TranslationsParent extends JSWindowActorParent {
425432
const chromeWindow = await hiddenFrame.get();
426433
const doc = chromeWindow.document;
427434

435+
const actorPromise = new Promise(resolve => {
436+
this.resolveEngine = resolve;
437+
});
438+
428439
const browser = doc.createXULElement("browser");
429440
browser.setAttribute("remote", "true");
430441
browser.setAttribute("remoteType", "web");
@@ -436,42 +447,8 @@ export class TranslationsParent extends JSWindowActorParent {
436447
);
437448
doc.documentElement.appendChild(browser);
438449

439-
// Wait for the translations engine to be loaded.
440-
await new Promise(resolve => {
441-
const listener = {
442-
QueryInterface: ChromeUtils.generateQI([
443-
"nsIWebProgressListener",
444-
"nsIWebProgressListener2",
445-
"nsISupportsWeakReference",
446-
]),
447-
448-
/**
449-
* @param {nsIWebProgress} _webProgress
450-
* @param {nsIRequest} request
451-
* @param {number} stateFlags
452-
* @param {nsresult} _status
453-
*/
454-
onStateChange(_webProgress, request, stateFlags, _status) {
455-
if (!request) {
456-
return;
457-
}
458-
if (
459-
stateFlags & Ci.nsIWebProgressListener.STATE_STOP &&
460-
stateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK
461-
) {
462-
browser.removeProgressListener(listener);
463-
resolve();
464-
}
465-
},
466-
};
467-
browser.addProgressListener(listener, Ci.nsIWebProgress.NOTIFY_STATE_ALL);
468-
});
469-
470-
const actor =
471-
browser.browsingContext.currentWindowGlobal.getActor(
472-
"TranslationsEngine"
473-
);
474-
450+
const actor = await actorPromise;
451+
this.resolveEngine = null;
475452
return { hiddenFrame, browser, actor };
476453
}
477454

toolkit/modules/ActorManagerParent.sys.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,9 @@ let JSWINDOWACTORS = {
552552
},
553553
child: {
554554
esModuleURI: "resource://gre/actors/TranslationsEngineChild.sys.mjs",
555+
events: {
556+
DOMContentLoaded: { createActor: true },
557+
},
555558
},
556559
includeChrome: true,
557560
matches: ["chrome://global/content/translations/translations-engine.html"],

0 commit comments

Comments
 (0)