Bug 520482: Firefox should be able to remember more than 8 lightweight themes. r=robstrong

This commit is contained in:
Dave Townsend 2010-07-26 18:31:10 -07:00
Родитель a61bee38d1
Коммит 985329ce2c
2 изменённых файлов: 129 добавлений и 3 удалений

Просмотреть файл

@ -47,7 +47,7 @@ const PREF_LWTHEME_TO_SELECT = "extensions.lwThemeToSelect";
const PREF_GENERAL_SKINS_SELECTEDSKIN = "general.skins.selectedSkin";
const ADDON_TYPE = "theme";
const MAX_USED_THEMES_COUNT = 8;
const DEFAULT_MAX_USED_THEMES_COUNT = 30;
const MAX_PREVIEW_SECONDS = 30;
@ -67,7 +67,8 @@ __defineGetter__("_prefs", function () {
delete this._prefs;
return this._prefs =
Cc["@mozilla.org/preferences-service;1"]
.getService(Ci.nsIPrefService).getBranch("lightweightThemes.");
.getService(Ci.nsIPrefService).getBranch("lightweightThemes.")
.QueryInterface(Ci.nsIPrefBranch2);
});
__defineGetter__("_observerService", function () {
@ -82,6 +83,22 @@ __defineGetter__("_ioService", function () {
Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
});
__defineGetter__("_maxUsedThemes", function() {
delete this._maxUsedThemes;
try {
this._maxUsedThemes = _prefs.getIntPref("maxUsedThemes");
}
catch (e) {
this._maxUsedThemes = DEFAULT_MAX_USED_THEMES_COUNT;
}
return this._maxUsedThemes;
});
__defineSetter__("_maxUsedThemes", function(aVal) {
delete this._maxUsedThemes;
return this._maxUsedThemes = aVal;
});
var LightweightThemeManager = {
get usedThemes () {
try {
@ -266,6 +283,15 @@ var LightweightThemeManager = {
this.themeChanged(null);
Services.prefs.clearUserPref(PREF_LWTHEME_TO_SELECT);
}
_prefs.addObserver("", _prefObserver, false);
},
/**
* Shuts down the provider.
*/
shutdown: function() {
_prefs.removeObserver("", _prefObserver);
},
/**
@ -646,7 +672,7 @@ function _makeURI(aURL, aBaseURI)
function _updateUsedThemes(aList) {
// Send uninstall events for all themes that need to be removed.
while (aList.length > MAX_USED_THEMES_COUNT) {
while (aList.length > _maxUsedThemes) {
let wrapper = new AddonWrapper(aList[aList.length - 1]);
AddonManagerPrivate.callAddonListeners("onUninstalling", wrapper, false);
aList.pop();
@ -673,6 +699,27 @@ var _previewTimerCallback = {
}
};
var _prefObserver = {
/**
* Called when any of the lightweightThemes preferences are changed.
* @see nsIObserver
*/
observe: function (aSubject, aTopic, aData) {
switch (aData) {
case "maxUsedThemes":
try {
_maxUsedThemes = _prefs.getIntPref(aData);
}
catch (e) {
_maxUsedThemes = DEFAULT_MAX_USED_THEMES_COUNT;
}
// Update the theme list to remove any themes over the number we keep
_updateUsedThemes(LightweightThemeManager.usedThemes);
break;
}
},
};
function _persistImages(aData) {
function onSuccess(key) function () {
let current = LightweightThemeManager.currentTheme;

Просмотреть файл

@ -6,6 +6,8 @@ const OPTIONAL = ["footerURL", "textcolor", "accentcolor", "iconURL",
"previewURL", "author", "description", "homepageURL",
"updateURL", "version"];
Components.utils.import("resource://gre/modules/Services.jsm");
function dummy(id) {
return {
id: id || Math.random().toString(),
@ -21,6 +23,8 @@ function run_test() {
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
startupManager();
Services.prefs.setIntPref("lightweightThemes.maxUsedThemes", 8);
var temp = {};
Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", temp);
do_check_eq(typeof temp.LightweightThemeManager, "object");
@ -432,4 +436,79 @@ function run_test() {
ltm.forgetUsedTheme("x1");
do_check_eq(ltm.usedThemes.length, 0);
do_check_eq(ltm.currentTheme, null);
Services.prefs.clearUserPref("lightweightThemes.maxUsedThemes");
ltm.currentTheme = dummy("x1");
ltm.currentTheme = dummy("x2");
ltm.currentTheme = dummy("x3");
ltm.currentTheme = dummy("x4");
ltm.currentTheme = dummy("x5");
ltm.currentTheme = dummy("x6");
ltm.currentTheme = dummy("x7");
ltm.currentTheme = dummy("x8");
ltm.currentTheme = dummy("x9");
ltm.currentTheme = dummy("x10");
ltm.currentTheme = dummy("x11");
ltm.currentTheme = dummy("x12");
ltm.currentTheme = dummy("x13");
ltm.currentTheme = dummy("x14");
ltm.currentTheme = dummy("x15");
ltm.currentTheme = dummy("x16");
ltm.currentTheme = dummy("x17");
ltm.currentTheme = dummy("x18");
ltm.currentTheme = dummy("x19");
ltm.currentTheme = dummy("x20");
ltm.currentTheme = dummy("x21");
ltm.currentTheme = dummy("x22");
ltm.currentTheme = dummy("x23");
ltm.currentTheme = dummy("x24");
ltm.currentTheme = dummy("x25");
ltm.currentTheme = dummy("x26");
ltm.currentTheme = dummy("x27");
ltm.currentTheme = dummy("x28");
ltm.currentTheme = dummy("x29");
ltm.currentTheme = dummy("x30");
do_check_eq(ltm.usedThemes.length, 30);
ltm.currentTheme = dummy("x31");
do_check_eq(ltm.usedThemes.length, 30);
do_check_eq(ltm.getUsedTheme("x1"), null);
Services.prefs.setIntPref("lightweightThemes.maxUsedThemes", 15);
do_check_eq(ltm.usedThemes.length, 15);
Services.prefs.setIntPref("lightweightThemes.maxUsedThemes", 32);
ltm.currentTheme = dummy("x1");
ltm.currentTheme = dummy("x2");
ltm.currentTheme = dummy("x3");
ltm.currentTheme = dummy("x4");
ltm.currentTheme = dummy("x5");
ltm.currentTheme = dummy("x6");
ltm.currentTheme = dummy("x7");
ltm.currentTheme = dummy("x8");
ltm.currentTheme = dummy("x9");
ltm.currentTheme = dummy("x10");
ltm.currentTheme = dummy("x11");
ltm.currentTheme = dummy("x12");
ltm.currentTheme = dummy("x13");
ltm.currentTheme = dummy("x14");
ltm.currentTheme = dummy("x15");
ltm.currentTheme = dummy("x16");
ltm.currentTheme = dummy("x32");
do_check_eq(ltm.usedThemes.length, 32);
ltm.currentTheme = dummy("x33");
do_check_eq(ltm.usedThemes.length, 32);
Services.prefs.clearUserPref("lightweightThemes.maxUsedThemes");
do_check_eq(ltm.usedThemes.length, 30);
}