fix: declare and ship toolbar icons, so neither browser renders a puzzle piece (closes #371)
Neither manifest declared any icons, so both browsers showed a generic puzzle-piece -- the first thing seen on every browser start, and how a user tells a real extension from a look-alike. Both manifests now declare 16/32/48/128, and the PNGs ship inside each browser archive rather than being left at dist/ root, which is the trap that made a naive zip incomplete before. build.js reads which icons to copy from each manifest's own icons block, so the manifest is the single source of truth and a declared-but-absent size fails the build rather than shipping a dangling reference; the packager's reference-resolver covers them independently. Manifest values are constrained before being joined into a path. The artwork is original, generated from geometry rather than traced or fetched.
This commit was merged in pull request #376.
This commit is contained in:
@@ -90,6 +90,26 @@ describe("archive self-containment", () => {
|
||||
);
|
||||
});
|
||||
|
||||
// Toolbar icons are the other file the manifest names and no bundler
|
||||
// emits, so an archive built without them would carry a manifest whose
|
||||
// "icons" resolve to nothing and a browser would fall back to a generic
|
||||
// placeholder without saying so.
|
||||
test("a manifest naming an icon that is not in the archive fails", () => {
|
||||
const { members, read } = archiveOf({
|
||||
"manifest.json": JSON.stringify({
|
||||
...MINIMAL_MANIFEST,
|
||||
icons: { 16: "icons/icon16.png", 128: "icons/icon128.png" },
|
||||
}),
|
||||
"src/popup/index.html": "<html></html>",
|
||||
"src/popup/index.js": "//",
|
||||
"src/background/index.js": "//",
|
||||
"icons/icon16.png": "PNG",
|
||||
});
|
||||
expect(() => checkSelfContained("chrome", members, read)).toThrow(
|
||||
/would not be self-contained.*icons\/icon128\.png/s,
|
||||
);
|
||||
});
|
||||
|
||||
test("an archive with no manifest.json at its root fails", () => {
|
||||
const { members, read } = archiveOf({ "src/popup/index.js": "//" });
|
||||
expect(() => checkSelfContained("chrome", members, read)).toThrow(
|
||||
|
||||
Reference in New Issue
Block a user