94 lines
2.5 KiB
JavaScript
94 lines
2.5 KiB
JavaScript
/* 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");
|