/* 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 */ var { ContextualIdentityService } = ChromeUtils.import( "resource://gre/modules/ContextualIdentityService.jsm" ); const defaultContainerIcon = "fingerprint"; const defaultContainerColor = "blue"; let gContainersPane = { init() { this._list = document.getElementById("containersView"); document .getElementById("backContainersLink") .addEventListener("click", function(event) { if (event.button == 0) { gotoPref("general"); } }); 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.setAttribute("width", 24); userContextIcon.setAttribute("height", 24); userContextIcon.classList.add("identity-icon-" + container.icon); userContextIcon.classList.add("identity-color-" + container.color); outer.appendChild(userContextIcon); let label = document.createXULElement("label"); label.setAttribute("flex", 1); label.setAttribute("crop", "end"); label.textContent = ContextualIdentityService.getUserContextLabel( container.userContextId ); outer.appendChild(label); let containerButtons = document.createXULElement("hbox"); containerButtons.className = "container-buttons"; containerButtons.setAttribute("flex", 1); containerButtons.setAttribute("align", "right"); item.appendChild(containerButtons); let prefsButton = document.createXULElement("button"); prefsButton.setAttribute( "oncommand", "gContainersPane.onPreferenceCommand(event.originalTarget)" ); prefsButton.setAttribute("value", container.userContextId); document.l10n.setAttributes(prefsButton, "containers-preferences-button"); containerButtons.appendChild(prefsButton); let removeButton = document.createXULElement("button"); removeButton.setAttribute( "oncommand", "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/containers.xul", null, params ); }, };