зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1646016 fix app compat data for locales if they are not version specific r=robwu
Differential Revision: https://phabricator.services.mozilla.com/D87520
This commit is contained in:
Родитель
1dd1c165fb
Коммит
735332e1fa
|
@ -25,7 +25,6 @@ XPCOMUtils.defineLazyModuleGetters(this, {
|
|||
AddonManagerPrivate: "resource://gre/modules/AddonManager.jsm",
|
||||
AddonRepository: "resource://gre/modules/addons/AddonRepository.jsm",
|
||||
AddonSettings: "resource://gre/modules/addons/AddonSettings.jsm",
|
||||
AppConstants: "resource://gre/modules/AppConstants.jsm",
|
||||
DeferredTask: "resource://gre/modules/DeferredTask.jsm",
|
||||
ExtensionUtils: "resource://gre/modules/ExtensionUtils.jsm",
|
||||
FileUtils: "resource://gre/modules/FileUtils.jsm",
|
||||
|
@ -795,7 +794,7 @@ AddonWrapper = class {
|
|||
}
|
||||
|
||||
get __AddonInternal__() {
|
||||
return AppConstants.DEBUG ? addonFor(this) : undefined;
|
||||
return addonFor(this);
|
||||
}
|
||||
|
||||
get seen() {
|
||||
|
@ -3013,6 +3012,16 @@ this.XPIDatabaseReconcile = {
|
|||
aOldAddon.signedDate === undefined &&
|
||||
(aOldAddon.signedState || checkSigning);
|
||||
|
||||
// If maxVersion was inadvertently updated for a locale, force a reload
|
||||
// from the manifest. See Bug 1646016 for details.
|
||||
if (
|
||||
!aReloadMetadata &&
|
||||
aOldAddon.type === "locale" &&
|
||||
aOldAddon.matchingTargetApplication
|
||||
) {
|
||||
aReloadMetadata = aOldAddon.matchingTargetApplication.maxVersion === "*";
|
||||
}
|
||||
|
||||
let manifest = null;
|
||||
if (checkSigning || aReloadMetadata || signedDateMissing) {
|
||||
try {
|
||||
|
@ -3040,7 +3049,6 @@ this.XPIDatabaseReconcile = {
|
|||
if (aReloadMetadata) {
|
||||
// Avoid re-reading these properties from manifest,
|
||||
// use existing addon instead.
|
||||
// TODO - consider re-scanning for targetApplications.
|
||||
let remove = [
|
||||
"syncGUID",
|
||||
"foreignInstall",
|
||||
|
@ -3051,10 +3059,14 @@ this.XPIDatabaseReconcile = {
|
|||
"applyBackgroundUpdates",
|
||||
"sourceURI",
|
||||
"releaseNotesURI",
|
||||
"targetApplications",
|
||||
"installTelemetryInfo",
|
||||
];
|
||||
|
||||
// TODO - consider re-scanning for targetApplications for other addon types.
|
||||
if (aOldAddon.type !== "locale") {
|
||||
remove.push("targetApplications");
|
||||
}
|
||||
|
||||
let props = PROP_JSON_FIELDS.filter(a => !remove.includes(a));
|
||||
copyProperties(manifest, props, aOldAddon);
|
||||
}
|
||||
|
|
|
@ -479,3 +479,47 @@ add_task(async function test_staged_langpack_for_app_update_not_found() {
|
|||
await promiseShutdownManager();
|
||||
Services.locale.requestedLocales = originalLocales;
|
||||
});
|
||||
|
||||
/**
|
||||
* This test verifies that a compat update with an invalid max_version
|
||||
* will be disabled, at least allowing Firefox to startup without failures.
|
||||
*/
|
||||
add_task(async function test_staged_langpack_compat_startup() {
|
||||
let originalLocales = Services.locale.requestedLocales;
|
||||
|
||||
await promiseStartupManager("58");
|
||||
let [, { addon }] = await Promise.all([
|
||||
promiseLangpackStartup(),
|
||||
AddonTestUtils.promiseInstallXPI(ADDONS.langpack_1),
|
||||
]);
|
||||
Assert.ok(addon.isActive);
|
||||
await promiseLocaleChanged(["und"]);
|
||||
|
||||
// Mimick a compatibility update
|
||||
let compatUpdate = {
|
||||
targetApplications: [
|
||||
{
|
||||
id: "toolkit@mozilla.org",
|
||||
minVersion: "58",
|
||||
maxVersion: "*",
|
||||
},
|
||||
],
|
||||
};
|
||||
addon.__AddonInternal__.applyCompatibilityUpdate(compatUpdate);
|
||||
|
||||
await promiseRestartManager("59");
|
||||
|
||||
addon = await promiseAddonByID(ID);
|
||||
Assert.ok(!addon.isActive, "addon is not active after upgrade");
|
||||
ok(!addon.isCompatible, "compatibility update fixed");
|
||||
|
||||
await promiseRestartManager("58");
|
||||
|
||||
addon = await promiseAddonByID(ID);
|
||||
Assert.ok(addon.isActive, "addon is active after downgrade");
|
||||
ok(addon.isCompatible, "compatibility update fixed");
|
||||
|
||||
await addon.uninstall();
|
||||
await promiseShutdownManager();
|
||||
Services.locale.requestedLocales = originalLocales;
|
||||
});
|
||||
|
|
Загрузка…
Ссылка в новой задаче