diff --git a/browser/base/content/sanitize.js b/browser/base/content/sanitize.js index 77b68155adc3..3efcdfbc4efc 100644 --- a/browser/base/content/sanitize.js +++ b/browser/base/content/sanitize.js @@ -342,13 +342,24 @@ Sanitizer.prototype = { siteSettings: { clear: function () { + // Clear site-specific permissions like "Allow this site to open popups" var pm = Components.classes["@mozilla.org/permissionmanager;1"] .getService(Components.interfaces.nsIPermissionManager); pm.removeAll(); + // Clear site-specific settings like page-zoom level var cps = Components.classes["@mozilla.org/content-pref/service;1"] .getService(Components.interfaces.nsIContentPrefService); cps.removeGroupedPrefs(); + + // Clear "Never remember passwords for this site", which is not handled by + // the permission manager + var pwmgr = Components.classes["@mozilla.org/login-manager;1"] + .getService(Components.interfaces.nsILoginManager); + var hosts = pwmgr.getAllDisabledHosts({}) + for each (var host in hosts) { + pwmgr.setLoginSavingEnabled(host, true); + } }, get canClear() diff --git a/browser/base/content/test/Makefile.in b/browser/base/content/test/Makefile.in index 841dcfa523b8..797890faa7b3 100644 --- a/browser/base/content/test/Makefile.in +++ b/browser/base/content/test/Makefile.in @@ -88,6 +88,7 @@ _BROWSER_FILES = browser_bug321000.js \ browser_bug422590.js \ browser_sanitize-sitepermissions.js \ browser_bug356571.js \ + browser_sanitize-passwordDisabledHosts.js \ $(NULL) ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) diff --git a/browser/base/content/test/browser_sanitize-passwordDisabledHosts.js b/browser/base/content/test/browser_sanitize-passwordDisabledHosts.js new file mode 100644 index 000000000000..c90f5a90ce9e --- /dev/null +++ b/browser/base/content/test/browser_sanitize-passwordDisabledHosts.js @@ -0,0 +1,42 @@ +// Bug 474792 - Clear "Never remember passwords for this site" when +// clearing site-specific settings in Clear Recent History dialog + +Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader) + .loadSubScript("chrome://browser/content/sanitize.js"); + +function test() { + + var pwmgr = Components.classes["@mozilla.org/login-manager;1"] + .getService(Components.interfaces.nsILoginManager); + + // Add a disabled host + pwmgr.setLoginSavingEnabled("http://example.com", false); + + // Sanity check + is(pwmgr.getLoginSavingEnabled("http://example.com"), false, + "example.com should be disabled for password saving since we haven't cleared that yet."); + + // Set up the sanitizer to just clear siteSettings + let s = new Sanitizer(); + s.ignoreTimespan = false; + s.prefDomain = "privacy.cpd."; + var itemPrefs = Cc["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefService) + .getBranch(s.prefDomain); + itemPrefs.setBoolPref("history", false); + itemPrefs.setBoolPref("downloads", false); + itemPrefs.setBoolPref("cache", false); + itemPrefs.setBoolPref("cookies", false); + itemPrefs.setBoolPref("formdata", false); + itemPrefs.setBoolPref("offlineApps", false); + itemPrefs.setBoolPref("passwords", false); + itemPrefs.setBoolPref("sessions", false); + itemPrefs.setBoolPref("siteSettings", true); + + // Clear it + s.sanitize(); + + // Make sure it's gone + is(pwmgr.getLoginSavingEnabled("http://example.com"), true, + "example.com should be enabled for password saving again now that we've cleared."); +}