Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
/* globals browser, module, onMessageFromTab */
let currentVersion = browser.runtime.getManifest().version;
function isUpdateWanted(update) {
if (!update) {
return false;
}
if (!update?.version || (!update?.interventions && !update.shims)) {
console.error(
"Received invalid WebCompat interventions update from Remote Settings",
update
);
return false;
}
if (!this.isNewerVersion(update.version, currentVersion)) {
console.error(
"Ignoring latest WebCompat Remote Settings update",
update.version,
"<=",
currentVersion
);
return false;
}
return true;
}
function isNewerVersion(a_raw, b_raw) {
function num(n) {
const i = parseInt(n);
return isNaN(i) ? 0 : i;
}
const a_comp = a_raw.split(".");
const b_comp = b_raw.split(".");
const a = [num(a_comp[0]), num(a_comp[1]), num(a_comp[2]), num(a_comp[3])];
const b = [num(b_comp[0]), num(b_comp[1]), num(b_comp[2]), num(b_comp[3])];
for (let i = 0; i < 4; ++i) {
if (a[i] > b[i]) {
return true;
}
if (a[i] < b[i]) {
return false;
}
}
return false;
}
function listenForRemoteSettingsUpdates(interventions, shims) {
browser.remoteSettings.onRemoteSettingsUpdate.addListener(async update => {
if (!isUpdateWanted(update)) {
console.info(
"Ignoring older version of webcompat interventions",
update.version
);
return;
}
console.info("Received update to webcompat interventions", update.version);
currentVersion = update.version;
if (update.interventions) {
await interventions.onRemoteSettingsUpdate(update.interventions);
}
if (update.shims) {
await shims.onRemoteSettingsUpdate(update.shims);
}
});
window._downgradeForTesting = async () => {
currentVersion = browser.runtime.getManifest().version;
await interventions._resetToDefaultInterventions();
await shims._resetToDefaultShims();
};
}