diff --git a/mozilla/extensions/wallet/resources/content/pref-passwords.xul b/mozilla/extensions/wallet/resources/content/pref-passwords.xul
index 7b1b4a4e222..d3feb182e22 100644
--- a/mozilla/extensions/wallet/resources/content/pref-passwords.xul
+++ b/mozilla/extensions/wallet/resources/content/pref-passwords.xul
@@ -36,7 +36,7 @@
@@ -63,6 +63,23 @@
wallet.WALLET_InitReencryptCallback(window);
}
+ function encryptionTest() {
+ var checkbox = document.getElementById("encryptExpire");
+ var checked = checkbox.getAttribute("checked");
+
+ var wallet = Components.classes['@mozilla.org/wallet/wallet-service;1'];
+ wallet = wallet.getService();
+ wallet = wallet.QueryInterface(Components.interfaces.nsIWalletService);
+ try {
+ wallet.WALLET_Encrypt("dummy");
+ } catch (ex) {
+ // user could not supply master password, leave checkbox in original state
+ checkbox.setAttribute("checked", !checked);
+ return false;
+ }
+ return true;
+ }
+
]]>
@@ -87,11 +104,14 @@
&encryptDescription.label;
-
+
-
+
+
diff --git a/mozilla/extensions/wallet/resources/locale/en-US/pref-passwords.dtd b/mozilla/extensions/wallet/resources/locale/en-US/pref-passwords.dtd
index ce32922b270..80bd8b78d4d 100644
--- a/mozilla/extensions/wallet/resources/locale/en-US/pref-passwords.dtd
+++ b/mozilla/extensions/wallet/resources/locale/en-US/pref-passwords.dtd
@@ -12,3 +12,5 @@
+
+
diff --git a/mozilla/extensions/wallet/src/nsWalletService.cpp b/mozilla/extensions/wallet/src/nsWalletService.cpp
index a3e900b24db..5fad2e724be 100644
--- a/mozilla/extensions/wallet/src/nsWalletService.cpp
+++ b/mozilla/extensions/wallet/src/nsWalletService.cpp
@@ -272,6 +272,23 @@ nsWalletlibService::UnregisterProc(nsIComponentManager *aCompMgr,
return NS_OK;
}
+PRBool expireMasterPassword = PR_FALSE;
+#define expireMasterPasswordPref "signon.expireMasterPassword"
+
+MODULE_PRIVATE int PR_CALLBACK
+ExpireMasterPasswordPrefChanged(const char * newpref, void * data) {
+ nsresult rv;
+ nsCOMPtr prefs(do_GetService(NS_PREF_CONTRACTID, &rv));
+ if (NS_FAILED(prefs->GetBoolPref(expireMasterPasswordPref, &expireMasterPassword))) {
+ expireMasterPassword = PR_FALSE;
+ }
+ if (expireMasterPassword) {
+ PRBool status;
+ WLLT_ExpirePassword(&status);
+ }
+ return 0;
+}
+
nsresult nsWalletlibService::Init()
{
nsresult rv;
@@ -299,6 +316,13 @@ nsresult nsWalletlibService::Init()
else
NS_ASSERTION(PR_FALSE, "Could not get nsIDocumentLoader");
+ /* initialize the expire-master-password feature */
+ nsCOMPtr prefs(do_GetService(NS_PREF_CONTRACTID, &rv));
+ if (NS_SUCCEEDED(rv)) {
+ prefs->RegisterCallback(expireMasterPasswordPref, ExpireMasterPasswordPrefChanged, NULL);
+ prefs->GetBoolPref(expireMasterPasswordPref, &expireMasterPassword);
+ }
+
return NS_OK;
}
@@ -448,6 +472,10 @@ nsWalletlibService::OnStateChange(nsIWebProgress* aWebProgress,
}
}
}
+ if (expireMasterPassword) {
+ PRBool status;
+ WLLT_ExpirePassword(&status);
+ }
return rv;
}