forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			224 lines
		
	
	
	
		
			7.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
	
		
			7.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 | 
						|
/* 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/. */
 | 
						|
 | 
						|
Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
 | 
						|
 | 
						|
var gSecurityPane = {
 | 
						|
  _pane: null,
 | 
						|
 | 
						|
  /**
 | 
						|
   * Initializes master password UI.
 | 
						|
   */
 | 
						|
  init: function ()
 | 
						|
  {
 | 
						|
    this._pane = document.getElementById("paneSecurity");
 | 
						|
    this._initMasterPasswordUI();
 | 
						|
  },
 | 
						|
 | 
						|
  // ADD-ONS
 | 
						|
 | 
						|
  /*
 | 
						|
   * Preferences:
 | 
						|
   *
 | 
						|
   * xpinstall.whitelist.required
 | 
						|
   * - true if a site must be added to a site whitelist before extensions
 | 
						|
   *   provided by the site may be installed from it, false if the extension
 | 
						|
   *   may be directly installed after a confirmation dialog
 | 
						|
   */
 | 
						|
 | 
						|
  /**
 | 
						|
   * Enables/disables the add-ons Exceptions button depending on whether
 | 
						|
   * or not add-on installation warnings are displayed.
 | 
						|
   */
 | 
						|
  readWarnAddonInstall: function ()
 | 
						|
  {
 | 
						|
    var warn = document.getElementById("xpinstall.whitelist.required");
 | 
						|
    var exceptions = document.getElementById("addonExceptions");
 | 
						|
 | 
						|
    exceptions.disabled = !warn.value;
 | 
						|
 | 
						|
    // don't override the preference value
 | 
						|
    return undefined;
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Displays the exceptions lists for add-on installation warnings.
 | 
						|
   */
 | 
						|
  showAddonExceptions: function ()
 | 
						|
  {
 | 
						|
    var bundlePrefs = document.getElementById("bundlePreferences");
 | 
						|
 | 
						|
    var params = this._addonParams;
 | 
						|
    if (!params.windowTitle || !params.introText) {
 | 
						|
      params.windowTitle = bundlePrefs.getString("addons_permissions_title");
 | 
						|
      params.introText = bundlePrefs.getString("addonspermissionstext");
 | 
						|
    }
 | 
						|
 | 
						|
    document.documentElement.openWindow("Browser:Permissions",
 | 
						|
                                        "chrome://browser/content/preferences/permissions.xul",
 | 
						|
                                        "", params);
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Parameters for the add-on install permissions dialog.
 | 
						|
   */
 | 
						|
  _addonParams:
 | 
						|
    {
 | 
						|
      blockVisible: false,
 | 
						|
      sessionVisible: false,
 | 
						|
      allowVisible: true,
 | 
						|
      prefilledHost: "",
 | 
						|
      permissionType: "install"
 | 
						|
    },
 | 
						|
 | 
						|
  // PASSWORDS
 | 
						|
 | 
						|
  /*
 | 
						|
   * Preferences:
 | 
						|
   *
 | 
						|
   * signon.rememberSignons
 | 
						|
   * - true if passwords are remembered, false otherwise
 | 
						|
   */
 | 
						|
 | 
						|
  /**
 | 
						|
   * Enables/disables the Exceptions button used to configure sites where
 | 
						|
   * passwords are never saved. When browser is set to start in Private
 | 
						|
   * Browsing mode, the "Remember passwords" UI is useless, so we disable it.
 | 
						|
   */
 | 
						|
  readSavePasswords: function ()
 | 
						|
  {
 | 
						|
    var pref = document.getElementById("signon.rememberSignons");
 | 
						|
    var excepts = document.getElementById("passwordExceptions");
 | 
						|
 | 
						|
    if (PrivateBrowsingUtils.permanentPrivateBrowsing) {
 | 
						|
      document.getElementById("savePasswords").disabled = true;
 | 
						|
      excepts.disabled = true;
 | 
						|
      return false;
 | 
						|
    } else {
 | 
						|
      excepts.disabled = !pref.value;
 | 
						|
      // don't override pref value in UI
 | 
						|
      return undefined;
 | 
						|
    }
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Displays a dialog in which the user can view and modify the list of sites
 | 
						|
   * where passwords are never saved.
 | 
						|
   */
 | 
						|
  showPasswordExceptions: function ()
 | 
						|
  {
 | 
						|
    document.documentElement.openWindow("Toolkit:PasswordManagerExceptions",
 | 
						|
                                        "chrome://passwordmgr/content/passwordManagerExceptions.xul",
 | 
						|
                                        "", null);
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Initializes master password UI: the "use master password" checkbox, selects
 | 
						|
   * the master password button to show, and enables/disables it as necessary.
 | 
						|
   * The master password is controlled by various bits of NSS functionality, so
 | 
						|
   * the UI for it can't be controlled by the normal preference bindings.
 | 
						|
   */
 | 
						|
  _initMasterPasswordUI: function ()
 | 
						|
  {
 | 
						|
    var noMP = !this._masterPasswordSet();
 | 
						|
 | 
						|
    var button = document.getElementById("changeMasterPassword");
 | 
						|
    button.disabled = noMP;
 | 
						|
 | 
						|
    var checkbox = document.getElementById("useMasterPassword");
 | 
						|
    checkbox.checked = !noMP;
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns true if the user has a master password set and false otherwise.
 | 
						|
   */
 | 
						|
  _masterPasswordSet: function ()
 | 
						|
  {
 | 
						|
    const Cc = Components.classes, Ci = Components.interfaces;
 | 
						|
    var secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"].
 | 
						|
                   getService(Ci.nsIPKCS11ModuleDB);
 | 
						|
    var slot = secmodDB.findSlotByName("");
 | 
						|
    if (slot) {
 | 
						|
      var status = slot.status;
 | 
						|
      var hasMP = status != Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED &&
 | 
						|
                  status != Ci.nsIPKCS11Slot.SLOT_READY;
 | 
						|
      return hasMP;
 | 
						|
    } else {
 | 
						|
      // XXX I have no bloody idea what this means
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Enables/disables the master password button depending on the state of the
 | 
						|
   * "use master password" checkbox, and prompts for master password removal if
 | 
						|
   * one is set.
 | 
						|
   */
 | 
						|
  updateMasterPasswordButton: function ()
 | 
						|
  {
 | 
						|
    var checkbox = document.getElementById("useMasterPassword");
 | 
						|
    var button = document.getElementById("changeMasterPassword");
 | 
						|
    button.disabled = !checkbox.checked;
 | 
						|
 | 
						|
    // unchecking the checkbox should try to immediately remove the master
 | 
						|
    // password, because it's impossible to non-destructively remove the master
 | 
						|
    // password used to encrypt all the passwords without providing it (by
 | 
						|
    // design), and it would be extremely odd to pop up that dialog when the
 | 
						|
    // user closes the prefwindow and saves his settings
 | 
						|
    if (!checkbox.checked)
 | 
						|
      this._removeMasterPassword();
 | 
						|
    else
 | 
						|
      this.changeMasterPassword();
 | 
						|
 | 
						|
    this._initMasterPasswordUI();
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Displays the "remove master password" dialog to allow the user to remove
 | 
						|
   * the current master password.  When the dialog is dismissed, master password
 | 
						|
   * UI is automatically updated.
 | 
						|
   */
 | 
						|
  _removeMasterPassword: function ()
 | 
						|
  {
 | 
						|
    const Cc = Components.classes, Ci = Components.interfaces;
 | 
						|
    var secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"].
 | 
						|
                   getService(Ci.nsIPKCS11ModuleDB);
 | 
						|
    if (secmodDB.isFIPSEnabled) {
 | 
						|
      var promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"].
 | 
						|
                          getService(Ci.nsIPromptService);
 | 
						|
      var bundle = document.getElementById("bundlePreferences");
 | 
						|
      promptService.alert(window,
 | 
						|
                          bundle.getString("pw_change_failed_title"),
 | 
						|
                          bundle.getString("pw_change2empty_in_fips_mode"));
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      document.documentElement.openSubDialog("chrome://mozapps/content/preferences/removemp.xul",
 | 
						|
                                             "", null);
 | 
						|
    }
 | 
						|
    this._initMasterPasswordUI();
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Displays a dialog in which the master password may be changed.
 | 
						|
   */
 | 
						|
  changeMasterPassword: function ()
 | 
						|
  {
 | 
						|
    document.documentElement.openSubDialog("chrome://mozapps/content/preferences/changemp.xul",
 | 
						|
                                           "", null);
 | 
						|
    this._initMasterPasswordUI();
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Shows the sites where the user has saved passwords and the associated login
 | 
						|
   * information.
 | 
						|
   */
 | 
						|
  showPasswords: function ()
 | 
						|
  {
 | 
						|
    document.documentElement.openWindow("Toolkit:PasswordManager",
 | 
						|
                                        "chrome://passwordmgr/content/passwordManager.xul",
 | 
						|
                                        "", null);
 | 
						|
  }
 | 
						|
 | 
						|
};
 |