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, exportFunction */
"use strict";
if (typeof browser === "undefined") {
window.alert = __webcompat_alert => {
window.postMessage({ __webcompat_alert }, location.origin);
};
} else {
window.hide_alerts_status = { blocked: [], allowed: [] };
const pendingEarlyAlerts = [];
let connected = false;
let alertsToHide;
const maybeAlert = msg => {
const lc = msg?.toLowerCase?.();
if (lc) {
for (const alertToHide of alertsToHide) {
if (lc.includes(alertToHide)) {
window.hide_alerts_status.blocked.push(lc);
return;
}
window.hide_alerts_status.allowed.push(lc);
}
}
alert(msg);
};
window.addEventListener(
"message",
({ data: { __webcompat_alert }, origin }) => {
if (!__webcompat_alert || origin !== location.origin) {
return;
}
if (connected) {
maybeAlert(__webcompat_alert);
} else {
pendingEarlyAlerts.push(__webcompat_alert);
}
}
);
window.metadata ??= new Promise(resolve => {
const port = browser.runtime.connect();
port.onMessage.addListener(metadata => {
resolve(metadata);
});
});
window.metadata.then(metadata => {
alertsToHide = metadata.alertsToHide;
connected = true;
pendingEarlyAlerts.forEach(maybeAlert);
});
}