Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { GeckoViewActorChild } from "resource://gre/modules/GeckoViewActorChild.sys.mjs";
export class GeckoViewPrompterChild extends GeckoViewActorChild {
constructor() {
super();
this._prompts = new Map();
}
dismissPrompt(prompt) {
this.eventDispatcher.sendRequest({
type: "GeckoView:Prompt:Dismiss",
id: prompt.id,
});
this.unregisterPrompt(prompt);
}
updatePrompt(message) {
this.eventDispatcher.sendRequest({
type: "GeckoView:Prompt:Update",
prompt: message,
});
}
unregisterPrompt(prompt) {
this._prompts.delete(prompt.id);
this.sendAsyncMessage("UnregisterPrompt", {
id: prompt.id,
});
}
prompt(prompt, message) {
this._prompts.set(prompt.id, prompt);
this.sendAsyncMessage("RegisterPrompt", {
id: prompt.id,
promptType: prompt.getPromptType(),
});
// We intentionally do not await here as we want to fire NotifyPromptShow
// immediately rather than waiting until the user accepts/dismisses the
// prompt.
const result = this.eventDispatcher.sendRequestForResult({
type: "GeckoView:Prompt",
prompt: message,
});
this.sendAsyncMessage("NotifyPromptShow", {
id: prompt.id,
});
return result;
}
/**
* Handles the message coming from GeckoViewPrompterParent.
*
* @param {string} message.name The subject of the message.
* @param {object} message.data The data of the message.
*/
async receiveMessage({ name, data }) {
const prompt = this._prompts.get(data.id);
if (!prompt) {
// Unknown prompt, probably for a different child actor.
return;
}
switch (name) {
case "GetPromptText": {
// eslint-disable-next-line consistent-return
return prompt.getPromptText();
}
case "GetInputText": {
// eslint-disable-next-line consistent-return
return prompt.getInputText();
}
case "SetInputText": {
prompt.setInputText(data.text);
break;
}
case "AcceptPrompt": {
prompt.accept();
break;
}
case "DismissPrompt": {
prompt.dismiss();
break;
}
default: {
break;
}
}
}
}
const { debug, warn } = GeckoViewPrompterChild.initLogging("Prompter");