diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /browser/components/preferences/containers.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | browser/components/preferences/containers.js | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/browser/components/preferences/containers.js b/browser/components/preferences/containers.js new file mode 100644 index 0000000000..80d1ec7cc3 --- /dev/null +++ b/browser/components/preferences/containers.js @@ -0,0 +1,151 @@ +/* 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-globals-from preferences.js */ + +const defaultContainerIcon = "fingerprint"; +const defaultContainerColor = "blue"; + +let gContainersPane = { + init() { + this._list = document.getElementById("containersView"); + + document + .getElementById("backContainersButton") + .addEventListener("command", function () { + gotoPref("general"); + }); + + document + .getElementById("containersAdd") + .addEventListener("command", function () { + gContainersPane.onAddButtonCommand(); + }); + + this._rebuildView(); + }, + + _rebuildView() { + const containers = ContextualIdentityService.getPublicIdentities(); + while (this._list.firstChild) { + this._list.firstChild.remove(); + } + for (let container of containers) { + let item = document.createXULElement("richlistitem"); + + let outer = document.createXULElement("hbox"); + outer.setAttribute("flex", 1); + outer.setAttribute("align", "center"); + item.appendChild(outer); + + let userContextIcon = document.createXULElement("hbox"); + userContextIcon.className = "userContext-icon"; + userContextIcon.classList.add("userContext-icon-inprefs"); + userContextIcon.classList.add("identity-icon-" + container.icon); + userContextIcon.classList.add("identity-color-" + container.color); + outer.appendChild(userContextIcon); + + let label = document.createXULElement("label"); + label.className = "userContext-label-inprefs"; + label.setAttribute("flex", 1); + let containerName = ContextualIdentityService.getUserContextLabel( + container.userContextId + ); + label.textContent = containerName; + label.setAttribute("tooltiptext", containerName); + outer.appendChild(label); + + let containerButtons = document.createXULElement("hbox"); + containerButtons.className = "container-buttons"; + item.appendChild(containerButtons); + + let prefsButton = document.createXULElement("button"); + prefsButton.addEventListener("command", function (event) { + gContainersPane.onPreferenceCommand(event.originalTarget); + }); + prefsButton.setAttribute("value", container.userContextId); + document.l10n.setAttributes(prefsButton, "containers-settings-button"); + containerButtons.appendChild(prefsButton); + + let removeButton = document.createXULElement("button"); + removeButton.addEventListener("command", function (event) { + gContainersPane.onRemoveCommand(event.originalTarget); + }); + removeButton.setAttribute("value", container.userContextId); + document.l10n.setAttributes(removeButton, "containers-remove-button"); + containerButtons.appendChild(removeButton); + + this._list.appendChild(item); + } + }, + + async onRemoveCommand(button) { + let userContextId = parseInt(button.getAttribute("value"), 10); + + let count = ContextualIdentityService.countContainerTabs(userContextId); + if (count > 0) { + let [title, message, okButton, cancelButton] = + await document.l10n.formatValues([ + { id: "containers-remove-alert-title" }, + { id: "containers-remove-alert-msg", args: { count } }, + { id: "containers-remove-ok-button" }, + { id: "containers-remove-cancel-button" }, + ]); + + let buttonFlags = + Ci.nsIPrompt.BUTTON_TITLE_IS_STRING * Ci.nsIPrompt.BUTTON_POS_0 + + Ci.nsIPrompt.BUTTON_TITLE_IS_STRING * Ci.nsIPrompt.BUTTON_POS_1; + + let rv = Services.prompt.confirmEx( + window, + title, + message, + buttonFlags, + okButton, + cancelButton, + null, + null, + {} + ); + if (rv != 0) { + return; + } + + await ContextualIdentityService.closeContainerTabs(userContextId); + } + + ContextualIdentityService.remove(userContextId); + this._rebuildView(); + }, + + onPreferenceCommand(button) { + this.openPreferenceDialog(button.getAttribute("value")); + }, + + onAddButtonCommand(button) { + this.openPreferenceDialog(null); + }, + + openPreferenceDialog(userContextId) { + let identity = { + name: "", + icon: defaultContainerIcon, + color: defaultContainerColor, + }; + if (userContextId) { + identity = + ContextualIdentityService.getPublicIdentityFromId(userContextId); + identity.name = ContextualIdentityService.getUserContextLabel( + identity.userContextId + ); + } + + const params = { userContextId, identity }; + gSubDialog.open( + "chrome://browser/content/preferences/dialogs/containers.xhtml", + undefined, + params + ); + }, +}; |