summaryrefslogtreecommitdiffstats
path: root/browser/components/prompts
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /browser/components/prompts
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/components/prompts')
-rw-r--r--browser/components/prompts/PromptCollection.jsm201
-rw-r--r--browser/components/prompts/components.conf12
-rw-r--r--browser/components/prompts/moz.build14
3 files changed, 227 insertions, 0 deletions
diff --git a/browser/components/prompts/PromptCollection.jsm b/browser/components/prompts/PromptCollection.jsm
new file mode 100644
index 0000000000..ac042486ac
--- /dev/null
+++ b/browser/components/prompts/PromptCollection.jsm
@@ -0,0 +1,201 @@
+/* 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/. */
+
+"use strict";
+
+var EXPORTED_SYMBOLS = ["PromptCollection"];
+
+const { XPCOMUtils } = ChromeUtils.importESModule(
+ "resource://gre/modules/XPCOMUtils.sys.mjs"
+);
+
+/**
+ * Implements nsIPromptCollection
+ * @class PromptCollection
+ */
+class PromptCollection {
+ confirmRepost(browsingContext) {
+ let brandName;
+ try {
+ brandName = this.stringBundles.brand.GetStringFromName("brandShortName");
+ } catch (exception) {
+ // That's ok, we'll use a generic version of the prompt
+ }
+
+ let message;
+ let resendLabel;
+ try {
+ if (brandName) {
+ message = this.stringBundles.app.formatStringFromName(
+ "confirmRepostPrompt",
+ [brandName]
+ );
+ } else {
+ // Use a generic version of this prompt.
+ message = this.stringBundles.app.GetStringFromName(
+ "confirmRepostPrompt"
+ );
+ }
+ resendLabel = this.stringBundles.app.GetStringFromName(
+ "resendButton.label"
+ );
+ } catch (exception) {
+ Cu.reportError("Failed to get strings from appstrings.properties");
+ return false;
+ }
+
+ let contentViewer = browsingContext?.docShell?.contentViewer;
+ let modalType = contentViewer?.isTabModalPromptAllowed
+ ? Ci.nsIPromptService.MODAL_TYPE_CONTENT
+ : Ci.nsIPromptService.MODAL_TYPE_WINDOW;
+ let buttonFlags =
+ (Ci.nsIPromptService.BUTTON_TITLE_IS_STRING *
+ Ci.nsIPromptService.BUTTON_POS_0) |
+ (Ci.nsIPromptService.BUTTON_TITLE_CANCEL *
+ Ci.nsIPromptService.BUTTON_POS_1);
+ let buttonPressed = Services.prompt.confirmExBC(
+ browsingContext,
+ modalType,
+ null,
+ message,
+ buttonFlags,
+ resendLabel,
+ null,
+ null,
+ null,
+ {}
+ );
+
+ return buttonPressed === 0;
+ }
+
+ async asyncBeforeUnloadCheck(browsingContext) {
+ let title;
+ let message;
+ let leaveLabel;
+ let stayLabel;
+
+ try {
+ title = this.stringBundles.dom.GetStringFromName("OnBeforeUnloadTitle");
+ message = this.stringBundles.dom.GetStringFromName(
+ "OnBeforeUnloadMessage2"
+ );
+ leaveLabel = this.stringBundles.dom.GetStringFromName(
+ "OnBeforeUnloadLeaveButton"
+ );
+ stayLabel = this.stringBundles.dom.GetStringFromName(
+ "OnBeforeUnloadStayButton"
+ );
+ } catch (exception) {
+ Cu.reportError("Failed to get strings from dom.properties");
+ return false;
+ }
+
+ let contentViewer = browsingContext?.docShell?.contentViewer;
+
+ if (
+ (contentViewer && !contentViewer.isTabModalPromptAllowed) ||
+ !browsingContext.ancestorsAreCurrent
+ ) {
+ Cu.reportError("Can't prompt from inactive content viewer");
+ return true;
+ }
+
+ let buttonFlags =
+ Ci.nsIPromptService.BUTTON_POS_0_DEFAULT |
+ (Ci.nsIPromptService.BUTTON_TITLE_IS_STRING *
+ Ci.nsIPromptService.BUTTON_POS_0) |
+ (Ci.nsIPromptService.BUTTON_TITLE_IS_STRING *
+ Ci.nsIPromptService.BUTTON_POS_1);
+
+ let result = await Services.prompt.asyncConfirmEx(
+ browsingContext,
+ Services.prompt.MODAL_TYPE_CONTENT,
+ title,
+ message,
+ buttonFlags,
+ leaveLabel,
+ stayLabel,
+ null,
+ null,
+ false,
+ // Tell the prompt service that this is a permit unload prompt
+ // so that it can set the appropriate flag on the detail object
+ // of the events it dispatches.
+ { inPermitUnload: true }
+ );
+
+ return (
+ result.QueryInterface(Ci.nsIPropertyBag2).get("buttonNumClicked") == 0
+ );
+ }
+
+ confirmFolderUpload(browsingContext, directoryName) {
+ let title;
+ let message;
+ let acceptLabel;
+
+ try {
+ title = this.stringBundles.dom.GetStringFromName(
+ "FolderUploadPrompt.title"
+ );
+ message = this.stringBundles.dom.formatStringFromName(
+ "FolderUploadPrompt.message",
+ [directoryName]
+ );
+ acceptLabel = this.stringBundles.dom.GetStringFromName(
+ "FolderUploadPrompt.acceptButtonLabel"
+ );
+ } catch (exception) {
+ Cu.reportError("Failed to get strings from dom.properties");
+ return false;
+ }
+
+ let buttonFlags =
+ Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0 +
+ Services.prompt.BUTTON_TITLE_CANCEL * Services.prompt.BUTTON_POS_1 +
+ Services.prompt.BUTTON_POS_1_DEFAULT;
+
+ return (
+ Services.prompt.confirmExBC(
+ browsingContext,
+ Services.prompt.MODAL_TYPE_TAB,
+ title,
+ message,
+ buttonFlags,
+ acceptLabel,
+ null,
+ null,
+ null,
+ {}
+ ) === 0
+ );
+ }
+}
+
+const BUNDLES = {
+ dom: "chrome://global/locale/dom/dom.properties",
+ app: "chrome://global/locale/appstrings.properties",
+ brand: "chrome://branding/locale/brand.properties",
+};
+
+PromptCollection.prototype.stringBundles = {};
+
+for (const [bundleName, bundleUrl] of Object.entries(BUNDLES)) {
+ XPCOMUtils.defineLazyGetter(
+ PromptCollection.prototype.stringBundles,
+ bundleName,
+ function() {
+ let bundle = Services.strings.createBundle(bundleUrl);
+ if (!bundle) {
+ throw new Error("String bundle for dom not present!");
+ }
+ return bundle;
+ }
+ );
+}
+
+PromptCollection.prototype.QueryInterface = ChromeUtils.generateQI([
+ "nsIPromptCollection",
+]);
diff --git a/browser/components/prompts/components.conf b/browser/components/prompts/components.conf
new file mode 100644
index 0000000000..0c00e72d67
--- /dev/null
+++ b/browser/components/prompts/components.conf
@@ -0,0 +1,12 @@
+# 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/.
+
+Classes = [
+ {
+ 'cid': '{7913837c-9623-11ea-bb37-0242ac130002}',
+ 'contract_ids': ['@mozilla.org/embedcomp/prompt-collection;1'],
+ 'jsm': 'resource:///modules/PromptCollection.jsm',
+ 'constructor': 'PromptCollection',
+ },
+]
diff --git a/browser/components/prompts/moz.build b/browser/components/prompts/moz.build
new file mode 100644
index 0000000000..4c6d33af90
--- /dev/null
+++ b/browser/components/prompts/moz.build
@@ -0,0 +1,14 @@
+# 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/.
+
+with Files("**"):
+ BUG_COMPONENT = ("Toolkit", "Notifications and Alerts")
+
+EXTRA_JS_MODULES += [
+ "PromptCollection.jsm",
+]
+
+XPCOM_MANIFESTS += [
+ "components.conf",
+]