chromium support
Release Firefox and Chromium extensions / Package and attach browser extensions (release) Successful in 54s

This commit is contained in:
2026-08-30 21:00:05 +02:00
parent 0b1e567781
commit df16075421
14 changed files with 350 additions and 57 deletions
+57 -4
View File
@@ -4,12 +4,14 @@ const test = require("node:test");
const assert = require("node:assert/strict");
const { createBackgroundController } = require("../background.js");
function makeBrowser(initialStorage = {}) {
function makeBrowser(initialStorage = {}, initialSessionStorage = {}) {
let messageListener;
let removedListener;
const broadcasts = [];
const stored = { ...initialStorage };
const sessionStored = { ...initialSessionStorage };
const storageWrites = [];
const sessionWrites = [];
const api = {
runtime: {
onMessage: {
@@ -27,6 +29,15 @@ function makeBrowser(initialStorage = {}) {
storageWrites.push({ ...values });
Object.assign(stored, values);
}
},
session: {
async get(key) {
return { [key]: sessionStored[key] };
},
async set(values) {
sessionWrites.push(structuredClone(values));
Object.assign(sessionStored, structuredClone(values));
}
}
},
tabs: {
@@ -45,13 +56,24 @@ function makeBrowser(initialStorage = {}) {
return {
api,
broadcasts,
sessionStored,
sessionWrites,
stored,
storageWrites,
send(message, sender = {}) {
return messageListener(message, sender);
return new Promise((resolve) => {
let responded = false;
const keepChannelOpen = messageListener(message, sender, (response) => {
responded = true;
resolve(response);
});
if (!keepChannelOpen && !responded) {
resolve(undefined);
}
});
},
remove(tabId) {
removedListener(tabId);
return removedListener(tabId);
}
};
}
@@ -91,10 +113,41 @@ test("owns absolute state per tab and supplies it to new frames", async () => {
{ enabled: false, fontStyle: "round" }
);
fake.remove(17);
await fake.remove(17);
assert.equal(controller.tabStates.has(17), false);
});
test("restores tab state after an MV3 background worker restart", async () => {
const firstWorker = makeBrowser();
createBackgroundController(firstWorker.api);
await firstWorker.send({
type: "glagolify:set-tab-enabled",
tabId: 23,
enabled: true
});
assert.deepEqual(firstWorker.sessionStored, {
glagolifyTabStates: { 23: true }
});
const restartedWorker = makeBrowser({}, firstWorker.sessionStored);
createBackgroundController(restartedWorker.api);
assert.deepEqual(
await restartedWorker.send(
{ type: "glagolify:document-ready" },
{ tab: { id: 23 } }
),
{ enabled: true, fontStyle: "round" }
);
assert.deepEqual(
await restartedWorker.send({
type: "glagolify:get-tab-state",
tabId: 23
}),
{ enabled: true, available: true, fontStyle: "round" }
);
});
test("keeps states isolated between tabs and reports protected tabs", async () => {
const fake = makeBrowser();
createBackgroundController(fake.api);