summaryrefslogtreecommitdiffstats
path: root/mobile/android/chrome/content/MasterPassword.js
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/chrome/content/MasterPassword.js')
-rw-r--r--mobile/android/chrome/content/MasterPassword.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/mobile/android/chrome/content/MasterPassword.js b/mobile/android/chrome/content/MasterPassword.js
new file mode 100644
index 000000000..d85fa928d
--- /dev/null
+++ b/mobile/android/chrome/content/MasterPassword.js
@@ -0,0 +1,67 @@
+/* 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/. */
+"use strict";
+
+XPCOMUtils.defineLazyModuleGetter(this, "Snackbars", "resource://gre/modules/Snackbars.jsm");
+
+var MasterPassword = {
+ pref: "privacy.masterpassword.enabled",
+ _tokenName: "",
+
+ get _secModuleDB() {
+ delete this._secModuleDB;
+ return this._secModuleDB = Cc["@mozilla.org/security/pkcs11moduledb;1"].getService(Ci.nsIPKCS11ModuleDB);
+ },
+
+ get _pk11DB() {
+ delete this._pk11DB;
+ return this._pk11DB = Cc["@mozilla.org/security/pk11tokendb;1"].getService(Ci.nsIPK11TokenDB);
+ },
+
+ get enabled() {
+ let slot = this._secModuleDB.findSlotByName(this._tokenName);
+ if (slot) {
+ let status = slot.status;
+ return status != Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED && status != Ci.nsIPKCS11Slot.SLOT_READY;
+ }
+ return false;
+ },
+
+ setPassword: function setPassword(aPassword) {
+ try {
+ let status;
+ let slot = this._secModuleDB.findSlotByName(this._tokenName);
+ if (slot)
+ status = slot.status;
+ else
+ return false;
+
+ let token = this._pk11DB.findTokenByName(this._tokenName);
+
+ if (status == Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED)
+ token.initPassword(aPassword);
+ else if (status == Ci.nsIPKCS11Slot.SLOT_READY)
+ token.changePassword("", aPassword);
+
+ return true;
+ } catch(e) {
+ dump("MasterPassword.setPassword: " + e);
+ }
+ return false;
+ },
+
+ removePassword: function removePassword(aOldPassword) {
+ try {
+ let token = this._pk11DB.getInternalKeyToken();
+ if (token.checkPassword(aOldPassword)) {
+ token.changePassword(aOldPassword, "");
+ return true;
+ }
+ } catch(e) {
+ dump("MasterPassword.removePassword: " + e + "\n");
+ }
+ Snackbars.show(Strings.browser.GetStringFromName("masterPassword.incorrect"), Snackbars.LENGTH_LONG);
+ return false;
+ }
+};