forked from mirrors/gecko-dev
		
	 691543ee89
			
		
	
	
		691543ee89
		
	
	
	
	
		
			
			Automatic changes by ESLint, except for manual corrections for .xml files. Differential Revision: https://phabricator.services.mozilla.com/D4439 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			128 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
	
		
			4.6 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-globals-from preferences.js */
 | |
| 
 | |
| ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
 | |
| 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.setAttribute("data-identity-icon", container.icon);
 | |
|       userContextIcon.setAttribute("data-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);
 | |
|   },
 | |
| 
 | |
| };
 |