зеркало из https://github.com/mozilla/gecko-dev.git
Bug 628902: Don't include nonstandard add-on types in AMO metadata ping. r=Unfocused, a=sdwilsh
This commit is contained in:
Родитель
e637c01669
Коммит
e0feabee39
|
@ -49,6 +49,8 @@ Components.utils.import("resource://gre/modules/AddonManager.jsm");
|
|||
var EXPORTED_SYMBOLS = [ "AddonRepository" ];
|
||||
|
||||
const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled";
|
||||
const PREF_GETADDONS_CACHE_TYPES = "extensions.getAddons.cache.types";
|
||||
const PREF_GETADDONS_CACHE_ID_ENABLED = "extensions.%ID%.getAddons.cache.enabled"
|
||||
const PREF_GETADDONS_BROWSEADDONS = "extensions.getAddons.browseAddons";
|
||||
const PREF_GETADDONS_BYIDS = "extensions.getAddons.get.url";
|
||||
const PREF_GETADDONS_BROWSERECOMMENDED = "extensions.getAddons.recommended.browseURL";
|
||||
|
@ -59,6 +61,7 @@ const PREF_GETADDONS_GETSEARCHRESULTS = "extensions.getAddons.search.url";
|
|||
const XMLURI_PARSE_ERROR = "http://www.mozilla.org/newlayout/xml/parsererror.xml";
|
||||
|
||||
const API_VERSION = "1.5";
|
||||
const DEFAULT_CACHE_TYPES = "extension,theme,locale";
|
||||
|
||||
const KEY_PROFILEDIR = "ProfD";
|
||||
const FILE_DATABASE = "addons.sqlite";
|
||||
|
@ -133,6 +136,39 @@ function convertHTMLToPlainText(html) {
|
|||
return html;
|
||||
}
|
||||
|
||||
function getAddonsToCache(aIds, aCallback) {
|
||||
try {
|
||||
var types = Services.prefs.getCharPref(PREF_GETADDONS_CACHE_TYPES);
|
||||
}
|
||||
catch (e) { }
|
||||
if (!types)
|
||||
types = DEFAULT_CACHE_TYPES;
|
||||
|
||||
types = types.split(",");
|
||||
|
||||
AddonManager.getAddonsByIDs(aIds, function(aAddons) {
|
||||
let enabledIds = [];
|
||||
for (var i = 0; i < aIds.length; i++) {
|
||||
var preference = PREF_GETADDONS_CACHE_ID_ENABLED.replace("%ID%", aIds[i]);
|
||||
try {
|
||||
if (!Services.prefs.getBoolPref(preference))
|
||||
continue;
|
||||
} catch(e) {
|
||||
// If the preference doesn't exist caching is enabled by default
|
||||
}
|
||||
|
||||
// The add-ons manager may not know about this ID yet if it is a pending
|
||||
// install. In that case we'll just cache it regardless
|
||||
if (aAddons[i] && (types.indexOf(aAddons[i].type) == -1))
|
||||
continue;
|
||||
|
||||
enabledIds.push(aIds[i]);
|
||||
}
|
||||
|
||||
aCallback(enabledIds);
|
||||
});
|
||||
}
|
||||
|
||||
function AddonSearchResult(aId) {
|
||||
this.id = aId;
|
||||
}
|
||||
|
@ -545,8 +581,6 @@ var AddonRepository = {
|
|||
* The optional callback to call once complete
|
||||
*/
|
||||
repopulateCache: function(aIds, aCallback) {
|
||||
let self = this;
|
||||
|
||||
// Completely remove cache if caching is not enabled
|
||||
if (!this.cacheEnabled) {
|
||||
this._addons = null;
|
||||
|
@ -555,36 +589,28 @@ var AddonRepository = {
|
|||
return;
|
||||
}
|
||||
|
||||
let enabledIds = aIds.filter(function(aId) {
|
||||
let preference = "extensions." + aId + ".getAddons.cache.enabled";
|
||||
let enabled = true;
|
||||
try {
|
||||
enabled = Services.prefs.getBoolPref(preference);
|
||||
} catch(e) {
|
||||
// If pref doesn't exist, default to enabled = true
|
||||
let self = this;
|
||||
getAddonsToCache(aIds, function(aAddons) {
|
||||
// Completely remove cache if there are no add-ons to cache
|
||||
if (aAddons.length == 0) {
|
||||
this._addons = null;
|
||||
this._pendingCallbacks = null;
|
||||
AddonDatabase.delete(aCallback);
|
||||
return;
|
||||
}
|
||||
return enabled;
|
||||
});
|
||||
|
||||
// Completely remove cache if there are no add-ons to cache
|
||||
if (enabledIds.length == 0) {
|
||||
this._addons = null;
|
||||
this._pendingCallbacks = null;
|
||||
AddonDatabase.delete(aCallback);
|
||||
return;
|
||||
}
|
||||
|
||||
this.getAddonsByIDs(enabledIds, {
|
||||
searchSucceeded: function(aAddons) {
|
||||
self._addons = {};
|
||||
aAddons.forEach(function(aAddon) { self._addons[aAddon.id] = aAddon; });
|
||||
AddonDatabase.repopulate(aAddons, aCallback);
|
||||
},
|
||||
searchFailed: function() {
|
||||
WARN("Search failed when repopulating cache");
|
||||
if (aCallback)
|
||||
aCallback();
|
||||
}
|
||||
self.getAddonsByIDs(aAddons, {
|
||||
searchSucceeded: function(aAddons) {
|
||||
self._addons = {};
|
||||
aAddons.forEach(function(aAddon) { self._addons[aAddon.id] = aAddon; });
|
||||
AddonDatabase.repopulate(aAddons, aCallback);
|
||||
},
|
||||
searchFailed: function() {
|
||||
WARN("Search failed when repopulating cache");
|
||||
if (aCallback)
|
||||
aCallback();
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -605,35 +631,26 @@ var AddonRepository = {
|
|||
return;
|
||||
}
|
||||
|
||||
let enabledIds = aIds.filter(function(aId) {
|
||||
let preference = "extensions." + aId + ".getAddons.cache.enabled";
|
||||
let enabled = true;
|
||||
try {
|
||||
enabled = Services.prefs.getBoolPref(preference);
|
||||
} catch(e) {
|
||||
// If pref doesn't exist, default to enabled = true
|
||||
}
|
||||
return enabled;
|
||||
});
|
||||
|
||||
// If there are no add-ons to cache, act as if caching is disabled
|
||||
if (enabledIds.length == 0) {
|
||||
if (aCallback)
|
||||
aCallback();
|
||||
return;
|
||||
}
|
||||
|
||||
let self = this;
|
||||
this.getAddonsByIDs(enabledIds, {
|
||||
searchSucceeded: function(aAddons) {
|
||||
aAddons.forEach(function(aAddon) { self._addons[aAddon.id] = aAddon; });
|
||||
AddonDatabase.insertAddons(aAddons, aCallback);
|
||||
},
|
||||
searchFailed: function() {
|
||||
WARN("Search failed when adding add-ons to cache");
|
||||
getAddonsToCache(aIds, function(aAddons) {
|
||||
// If there are no add-ons to cache, act as if caching is disabled
|
||||
if (aAddons.length == 0) {
|
||||
if (aCallback)
|
||||
aCallback();
|
||||
return;
|
||||
}
|
||||
|
||||
self.getAddonsByIDs(aAddons, {
|
||||
searchSucceeded: function(aAddons) {
|
||||
aAddons.forEach(function(aAddon) { self._addons[aAddon.id] = aAddon; });
|
||||
AddonDatabase.insertAddons(aAddons, aCallback);
|
||||
},
|
||||
searchFailed: function() {
|
||||
WARN("Search failed when adding add-ons to cache");
|
||||
if (aCallback)
|
||||
aCallback();
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ const PORT = 4444;
|
|||
const BASE_URL = "http://localhost:" + PORT;
|
||||
|
||||
const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled";
|
||||
const PREF_GETADDONS_CACHE_TYPES = "extensions.getAddons.cache.types";
|
||||
const PREF_GETADDONS_BYIDS = "extensions.getAddons.get.url";
|
||||
const PREF_EM_AUTOUPDATE_DEFAULT = "extensions.update.autoUpdateDefault";
|
||||
const GETADDONS_RESULTS = BASE_URL + "/data/test_AddonRepository_cache.xml";
|
||||
|
@ -285,6 +286,59 @@ const WITH_CACHE = [{
|
|||
sourceURI: NetUtil.newURI(ADDON_FILES[2]).spec
|
||||
}];
|
||||
|
||||
// Expected add-ons when using cache
|
||||
const WITH_EXTENSION_CACHE = [{
|
||||
id: ADDON_IDS[0],
|
||||
type: "extension",
|
||||
name: "XPI Add-on 1",
|
||||
version: "1.1",
|
||||
creator: {
|
||||
name: "Repo Add-on 1 - Creator",
|
||||
url: BASE_URL + "/repo/1/creator.html"
|
||||
},
|
||||
developers: [{ name: "XPI Add-on 1 - First Developer" },
|
||||
{ name: "XPI Add-on 1 - Second Developer" }],
|
||||
translators: [{ name: "XPI Add-on 1 - First Translator" },
|
||||
{ name: "XPI Add-on 1 - Second Translator" }],
|
||||
contributors: [{ name: "XPI Add-on 1 - First Contributor" },
|
||||
{ name: "XPI Add-on 1 - Second Contributor" }],
|
||||
description: "XPI Add-on 1 - Description",
|
||||
fullDescription: "Repo Add-on 1 - Full Description & some extra",
|
||||
developerComments: "Repo Add-on 1\nDeveloper Comments",
|
||||
eula: "Repo Add-on 1 - EULA",
|
||||
iconURL: BASE_URL + "/xpi/1/icon.png",
|
||||
homepageURL: BASE_URL + "/xpi/1/homepage.html",
|
||||
supportURL: BASE_URL + "/repo/1/support.html",
|
||||
optionsURL: BASE_URL + "/xpi/1/options.html",
|
||||
aboutURL: BASE_URL + "/xpi/1/about.html",
|
||||
contributionURL: BASE_URL + "/repo/1/meetDevelopers.html",
|
||||
contributionAmount: "$11.11",
|
||||
averageRating: 1,
|
||||
reviewCount: 1111,
|
||||
reviewURL: BASE_URL + "/repo/1/review.html",
|
||||
totalDownloads: 2221,
|
||||
weeklyDownloads: 3331,
|
||||
dailyUsers: 4441,
|
||||
sourceURI: NetUtil.newURI(ADDON_FILES[0]).spec,
|
||||
repositoryStatus: 4
|
||||
}, {
|
||||
id: ADDON_IDS[1],
|
||||
type: "theme",
|
||||
name: "XPI Add-on 2",
|
||||
version: "1.2",
|
||||
sourceURI: NetUtil.newURI(ADDON_FILES[1]).spec
|
||||
}, {
|
||||
id: ADDON_IDS[2],
|
||||
type: "theme",
|
||||
name: "XPI Add-on 3",
|
||||
version: "1.3",
|
||||
get iconURL () {
|
||||
return get_subfile_uri(ADDON_IDS[2], "icon.png");
|
||||
},
|
||||
screenshots: [{ get url () { return get_subfile_uri(ADDON_IDS[2], "preview.png"); } }],
|
||||
sourceURI: NetUtil.newURI(ADDON_FILES[2]).spec
|
||||
}];
|
||||
|
||||
|
||||
/*
|
||||
* Trigger an AddonManager background update check
|
||||
|
@ -663,7 +717,19 @@ function run_test_16() {
|
|||
|
||||
AddonManager.getAddonsByIDs(ADDON_IDS, function(aAddons) {
|
||||
check_results(aAddons, WITH_CACHE);
|
||||
end_test();
|
||||
run_test_17();
|
||||
});
|
||||
}
|
||||
|
||||
// Tests that setting a list of types to cache works
|
||||
function run_test_17() {
|
||||
Services.prefs.setCharPref(PREF_GETADDONS_CACHE_TYPES, "foo,bar,extension,baz");
|
||||
|
||||
trigger_background_update(function() {
|
||||
AddonManager.getAddonsByIDs(ADDON_IDS, function(aAddons) {
|
||||
check_results(aAddons, WITH_EXTENSION_CACHE);
|
||||
end_test();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче