зеркало из https://github.com/mozilla/gecko-dev.git
Bug 520482: Firefox should be able to remember more than 8 lightweight themes. r=robstrong
This commit is contained in:
Родитель
a61bee38d1
Коммит
985329ce2c
|
@ -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);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче