The connection prompt will allow users to accept or refuse the incoming connection. With a checkbox they can decide to remember this choice until the browser is closed. Differential Revision: https://phabricator.services.mozilla.com/D314052
106 lines
2.7 KiB
JavaScript
106 lines
2.7 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/. */
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineLazyGetter(
|
|
lazy,
|
|
"l10n",
|
|
() => new Localization(["locales-preview/remote-agent.ftl"])
|
|
);
|
|
|
|
const PREF_CONNECTION_PROMPT_ENABLED =
|
|
"remote.experimental.dynamicstart.prompt.enabled";
|
|
|
|
/**
|
|
* Possible outcomes of a connection prompt.
|
|
*
|
|
* @enum {string}
|
|
*/
|
|
export const ConnectionPromptResult = {
|
|
ALLOW: "allow",
|
|
DENY: "deny",
|
|
};
|
|
|
|
/**
|
|
* Prompt displayed when creating WebDriver (Classic or BiDi) sessions unrelated
|
|
* to browser automation.
|
|
*
|
|
* Allows the user to accept or deny the connection and also to save the
|
|
* decision for the lifetime of the browser.
|
|
*/
|
|
class ConnectionPromptClass {
|
|
// Decision remembered for the whole browser session. Either null, or one of
|
|
// the ConnectionPromptResult values.
|
|
#rememberedDecision;
|
|
|
|
constructor() {
|
|
this.#rememberedDecision = null;
|
|
}
|
|
|
|
async #showPrompt() {
|
|
const [title, message, allowLabel, denyLabel, checkboxLabel] =
|
|
await lazy.l10n.formatValues([
|
|
"remote-agent-connection-prompt-title",
|
|
"remote-agent-connection-prompt-message",
|
|
"remote-agent-connection-prompt-allow-button",
|
|
"remote-agent-connection-prompt-deny-button",
|
|
"remote-agent-connection-prompt-remember-checkbox",
|
|
]);
|
|
|
|
const prompts = Services.prompt;
|
|
const flags =
|
|
// use allowLabel for BUTTON_POS_0
|
|
(prompts.BUTTON_TITLE_IS_STRING * prompts.BUTTON_POS_0) |
|
|
// use denyLabel for BUTTON_POS_1
|
|
(prompts.BUTTON_TITLE_IS_STRING * prompts.BUTTON_POS_1) |
|
|
// Deny/BUTTON_POS_1 is the default.
|
|
prompts.BUTTON_POS_1_DEFAULT;
|
|
|
|
const checkbox = { value: false };
|
|
const buttonClicked = prompts.confirmEx(
|
|
null,
|
|
title,
|
|
message,
|
|
flags,
|
|
allowLabel, // BUTTON_POS_0
|
|
denyLabel, // BUTTON_POS_1 (default)
|
|
null,
|
|
checkboxLabel,
|
|
checkbox
|
|
);
|
|
|
|
const decision =
|
|
buttonClicked === 0
|
|
? ConnectionPromptResult.ALLOW
|
|
: ConnectionPromptResult.DENY;
|
|
|
|
if (checkbox.value) {
|
|
this.#rememberedDecision = decision;
|
|
}
|
|
|
|
return decision;
|
|
}
|
|
|
|
/**
|
|
* Ask the user to accept a new connection.
|
|
*
|
|
* @returns {string}
|
|
* One of the ConnectionPromptResult values.
|
|
*/
|
|
async show() {
|
|
if (!Services.prefs.getBoolPref(PREF_CONNECTION_PROMPT_ENABLED, true)) {
|
|
return ConnectionPromptResult.ALLOW;
|
|
}
|
|
|
|
if (this.#rememberedDecision !== null) {
|
|
return this.#rememberedDecision;
|
|
}
|
|
|
|
return this.#showPrompt();
|
|
}
|
|
}
|
|
|
|
export const ConnectionPrompt = new ConnectionPromptClass();
|