1
0
Fork 0
firefox/toolkit/mozapps/extensions/test/xpcshell/test_webextension_icons.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

212 lines
4.9 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
const ID = "webextension1@tests.mozilla.org";
const profileDir = gProfD.clone();
profileDir.append("extensions");
profileDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
async function testSimpleIconsetParsing(manifest) {
await promiseWriteWebManifestForExtension(manifest, profileDir);
await promiseRestartManager();
let uri = do_get_addon_root_uri(profileDir, ID);
let addon = await promiseAddonByID(ID);
Assert.notEqual(addon, null);
function check_icons(addon_copy) {
deepEqual(addon_copy.icons, {
16: uri + "icon16.png",
32: uri + "icon32.png",
48: uri + "icon48.png",
64: uri + "icon64.png",
});
// iconURL should map to icons[48]
equal(addon.iconURL, uri + "icon48.png");
// AddonManager gets the correct icon sizes from addon.icons
equal(AddonManager.getPreferredIconURL(addon, 1), uri + "icon16.png");
equal(AddonManager.getPreferredIconURL(addon, 16), uri + "icon16.png");
equal(AddonManager.getPreferredIconURL(addon, 30), uri + "icon32.png");
equal(AddonManager.getPreferredIconURL(addon, 48), uri + "icon48.png");
equal(AddonManager.getPreferredIconURL(addon, 64), uri + "icon64.png");
equal(AddonManager.getPreferredIconURL(addon, 128), uri + "icon64.png");
}
check_icons(addon);
// check if icons are persisted through a restart
await promiseRestartManager();
addon = await promiseAddonByID(ID);
Assert.notEqual(addon, null);
check_icons(addon);
await addon.uninstall();
}
async function testRetinaIconsetParsing(manifest) {
await promiseWriteWebManifestForExtension(manifest, profileDir);
await promiseRestartManager();
let addon = await promiseAddonByID(ID);
Assert.notEqual(addon, null);
let uri = do_get_addon_root_uri(profileDir, ID);
// AddonManager displays larger icons for higher pixel density
equal(
AddonManager.getPreferredIconURL(addon, 32, {
devicePixelRatio: 2,
}),
uri + "icon64.png"
);
equal(
AddonManager.getPreferredIconURL(addon, 48, {
devicePixelRatio: 2,
}),
uri + "icon128.png"
);
equal(
AddonManager.getPreferredIconURL(addon, 64, {
devicePixelRatio: 2,
}),
uri + "icon128.png"
);
await addon.uninstall();
}
async function testNoIconsParsing(manifest) {
await promiseWriteWebManifestForExtension(manifest, profileDir);
await promiseRestartManager();
let addon = await promiseAddonByID(ID);
Assert.notEqual(addon, null);
deepEqual(addon.icons, {});
equal(addon.iconURL, null);
equal(AddonManager.getPreferredIconURL(addon, 128), null);
await addon.uninstall();
}
// Test simple icon set parsing
add_task(async function () {
await promiseStartupManager();
await testSimpleIconsetParsing({
name: "Web Extension Name",
version: "1.0",
manifest_version: 2,
browser_specific_settings: {
gecko: {
id: ID,
},
},
icons: {
16: "icon16.png",
32: "icon32.png",
48: "icon48.png",
64: "icon64.png",
},
});
// Now for theme-type extensions too.
await testSimpleIconsetParsing({
name: "Web Extension Name",
version: "1.0",
manifest_version: 2,
browser_specific_settings: {
gecko: {
id: ID,
},
},
icons: {
16: "icon16.png",
32: "icon32.png",
48: "icon48.png",
64: "icon64.png",
},
theme: { images: { theme_frame: "example.png" } },
});
});
// Test AddonManager.getPreferredIconURL for retina screen sizes
add_task(async function () {
await testRetinaIconsetParsing({
name: "Web Extension Name",
version: "1.0",
manifest_version: 2,
browser_specific_settings: {
gecko: {
id: ID,
},
},
icons: {
32: "icon32.png",
48: "icon48.png",
64: "icon64.png",
128: "icon128.png",
256: "icon256.png",
},
});
await testRetinaIconsetParsing({
name: "Web Extension Name",
version: "1.0",
manifest_version: 2,
browser_specific_settings: {
gecko: {
id: ID,
},
},
icons: {
32: "icon32.png",
48: "icon48.png",
64: "icon64.png",
128: "icon128.png",
256: "icon256.png",
},
theme: { images: { theme_frame: "example.png" } },
});
});
// Handles no icons gracefully
add_task(async function () {
await testNoIconsParsing({
name: "Web Extension Name",
version: "1.0",
manifest_version: 2,
browser_specific_settings: {
gecko: {
id: ID,
},
},
});
await testNoIconsParsing({
name: "Web Extension Name",
version: "1.0",
manifest_version: 2,
browser_specific_settings: {
gecko: {
id: ID,
},
},
theme: { images: { theme_frame: "example.png" } },
});
});