browser/components/preferences/in-content/security.js

Wed, 31 Dec 2014 13:27:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 13:27:57 +0100
branch
TOR_BUG_3246
changeset 6
8bccb770b82d
permissions
-rw-r--r--

Ignore runtime configuration files generated during quality assurance.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     3  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
     7 var gSecurityPane = {
     8   _pane: null,
    10   /**
    11    * Initializes master password UI.
    12    */
    13   init: function ()
    14   {
    15     this._pane = document.getElementById("paneSecurity");
    16     this._initMasterPasswordUI();
    17   },
    19   // ADD-ONS
    21   /*
    22    * Preferences:
    23    *
    24    * xpinstall.whitelist.required
    25    * - true if a site must be added to a site whitelist before extensions
    26    *   provided by the site may be installed from it, false if the extension
    27    *   may be directly installed after a confirmation dialog
    28    */
    30   /**
    31    * Enables/disables the add-ons Exceptions button depending on whether
    32    * or not add-on installation warnings are displayed.
    33    */
    34   readWarnAddonInstall: function ()
    35   {
    36     var warn = document.getElementById("xpinstall.whitelist.required");
    37     var exceptions = document.getElementById("addonExceptions");
    39     exceptions.disabled = !warn.value;
    41     // don't override the preference value
    42     return undefined;
    43   },
    45   /**
    46    * Displays the exceptions lists for add-on installation warnings.
    47    */
    48   showAddonExceptions: function ()
    49   {
    50     var bundlePrefs = document.getElementById("bundlePreferences");
    52     var params = this._addonParams;
    53     if (!params.windowTitle || !params.introText) {
    54       params.windowTitle = bundlePrefs.getString("addons_permissions_title");
    55       params.introText = bundlePrefs.getString("addonspermissionstext");
    56     }
    58     openDialog("chrome://browser/content/preferences/permissions.xul",
    59                "Browser:Permissions",
    60                "modal=yes",
    61                params);
    62   },
    64   /**
    65    * Parameters for the add-on install permissions dialog.
    66    */
    67   _addonParams:
    68     {
    69       blockVisible: false,
    70       sessionVisible: false,
    71       allowVisible: true,
    72       prefilledHost: "",
    73       permissionType: "install"
    74     },
    76   // PASSWORDS
    78   /*
    79    * Preferences:
    80    *
    81    * signon.rememberSignons
    82    * - true if passwords are remembered, false otherwise
    83    */
    85   /**
    86    * Enables/disables the Exceptions button used to configure sites where
    87    * passwords are never saved. When browser is set to start in Private
    88    * Browsing mode, the "Remember passwords" UI is useless, so we disable it.
    89    */
    90   readSavePasswords: function ()
    91   {
    92     var pref = document.getElementById("signon.rememberSignons");
    93     var excepts = document.getElementById("passwordExceptions");
    95     if (PrivateBrowsingUtils.permanentPrivateBrowsing) {
    96       document.getElementById("savePasswords").disabled = true;
    97       excepts.disabled = true;
    98       return false;
    99     } else {
   100       excepts.disabled = !pref.value;
   101       // don't override pref value in UI
   102       return undefined;
   103     }
   104   },
   106   /**
   107    * Displays a dialog in which the user can view and modify the list of sites
   108    * where passwords are never saved.
   109    */
   110   showPasswordExceptions: function ()
   111   {
   112     openDialog("chrome://passwordmgr/content/passwordManagerExceptions.xul",
   113                "Toolkit:PasswordManagerExceptions",
   114                "modal=yes",
   115                null);
   116   },
   118   /**
   119    * Initializes master password UI: the "use master password" checkbox, selects
   120    * the master password button to show, and enables/disables it as necessary.
   121    * The master password is controlled by various bits of NSS functionality, so
   122    * the UI for it can't be controlled by the normal preference bindings.
   123    */
   124   _initMasterPasswordUI: function ()
   125   {
   126     var noMP = !this._masterPasswordSet();
   128     var button = document.getElementById("changeMasterPassword");
   129     button.disabled = noMP;
   131     var checkbox = document.getElementById("useMasterPassword");
   132     checkbox.checked = !noMP;
   133   },
   135   /**
   136    * Returns true if the user has a master password set and false otherwise.
   137    */
   138   _masterPasswordSet: function ()
   139   {
   140     var secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"].
   141                    getService(Ci.nsIPKCS11ModuleDB);
   142     var slot = secmodDB.findSlotByName("");
   143     if (slot) {
   144       var status = slot.status;
   145       var hasMP = status != Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED &&
   146                   status != Ci.nsIPKCS11Slot.SLOT_READY;
   147       return hasMP;
   148     } else {
   149       // XXX I have no bloody idea what this means
   150       return false;
   151     }
   152   },
   154   /**
   155    * Enables/disables the master password button depending on the state of the
   156    * "use master password" checkbox, and prompts for master password removal if
   157    * one is set.
   158    */
   159   updateMasterPasswordButton: function ()
   160   {
   161     var checkbox = document.getElementById("useMasterPassword");
   162     var button = document.getElementById("changeMasterPassword");
   163     button.disabled = !checkbox.checked;
   165     // unchecking the checkbox should try to immediately remove the master
   166     // password, because it's impossible to non-destructively remove the master
   167     // password used to encrypt all the passwords without providing it (by
   168     // design), and it would be extremely odd to pop up that dialog when the
   169     // user closes the prefwindow and saves his settings
   170     if (!checkbox.checked)
   171       this._removeMasterPassword();
   172     else
   173       this.changeMasterPassword();
   175     this._initMasterPasswordUI();
   176   },
   178   /**
   179    * Displays the "remove master password" dialog to allow the user to remove
   180    * the current master password.  When the dialog is dismissed, master password
   181    * UI is automatically updated.
   182    */
   183   _removeMasterPassword: function ()
   184   {
   185     var secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"].
   186                    getService(Ci.nsIPKCS11ModuleDB);
   187     if (secmodDB.isFIPSEnabled) {
   188       var promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"].
   189                           getService(Ci.nsIPromptService);
   190       var bundle = document.getElementById("bundlePreferences");
   191       promptService.alert(window,
   192                           bundle.getString("pw_change_failed_title"),
   193                           bundle.getString("pw_change2empty_in_fips_mode"));
   194     }
   195     else {
   196       openDialog("chrome://mozapps/content/preferences/removemp.xul",
   197                  "Toolkit:RemoveMasterPassword", "modal=yes", null);
   198     }
   199     this._initMasterPasswordUI();
   200   },
   202   /**
   203    * Displays a dialog in which the master password may be changed.
   204    */
   205   changeMasterPassword: function ()
   206   {
   207     openDialog("chrome://mozapps/content/preferences/changemp.xul",
   208                "Toolkit:ChangeMasterPassword", "modal=yes", null);
   209     this._initMasterPasswordUI();
   210   },
   212   /**
   213    * Shows the sites where the user has saved passwords and the associated login
   214    * information.
   215    */
   216   showPasswords: function ()
   217   {
   218     openDialog("chrome://passwordmgr/content/passwordManager.xul",
   219                "Toolkit:PasswordManager",
   220                "modal=yes", null);
   221   }
   223 };

mercurial