82 lines
2.3 KiB
JavaScript
82 lines
2.3 KiB
JavaScript
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
/* vim: set sts=2 sw=2 et tw=80: */
|
|
"use strict";
|
|
|
|
function pngArrayBuffer(size) {
|
|
const canvas = document.createElementNS(
|
|
"http://www.w3.org/1999/xhtml",
|
|
"canvas"
|
|
);
|
|
canvas.height = canvas.width = size;
|
|
const ctx = canvas.getContext("2d");
|
|
ctx.fillStyle = "blue";
|
|
ctx.fillRect(0, 0, size, size);
|
|
return new Promise(resolve => {
|
|
canvas.toBlob(blob => {
|
|
const fileReader = new FileReader();
|
|
fileReader.onload = () => {
|
|
resolve(fileReader.result);
|
|
};
|
|
fileReader.readAsArrayBuffer(blob);
|
|
});
|
|
});
|
|
}
|
|
|
|
async function checkIconInView(view, name, findIcon) {
|
|
const manager = await open_manager(view);
|
|
const icon = findIcon(manager.document);
|
|
const size = Number(icon.src.match(/icon(\d+)\.png/)[1]);
|
|
is(
|
|
icon.clientWidth,
|
|
icon.clientHeight,
|
|
`The icon should be square in ${name}`
|
|
);
|
|
is(
|
|
size,
|
|
icon.clientWidth * window.devicePixelRatio,
|
|
`The correct icon size should have been chosen in ${name}`
|
|
);
|
|
await close_manager(manager);
|
|
}
|
|
|
|
add_task(async function test_addon_icon() {
|
|
// This test loads an extension with a variety of icon sizes, and checks that the
|
|
// fitting one is chosen. If this fails it's because you changed the icon size in
|
|
// about:addons but didn't update some AddonManager.getPreferredIconURL call.
|
|
const id = "@test-addon-icon";
|
|
const icons = {};
|
|
const files = {};
|
|
const file = await pngArrayBuffer(256);
|
|
for (let size = 1; size <= 256; ++size) {
|
|
let fileName = `icon${size}.png`;
|
|
icons[size] = fileName;
|
|
files[fileName] = file;
|
|
}
|
|
const extensionDefinition = {
|
|
useAddonManager: "temporary",
|
|
manifest: {
|
|
browser_specific_settings: {
|
|
gecko: { id },
|
|
},
|
|
icons,
|
|
},
|
|
files,
|
|
};
|
|
|
|
const extension = ExtensionTestUtils.loadExtension(extensionDefinition);
|
|
await extension.startup();
|
|
|
|
await checkIconInView("addons://list/extension", "list", doc => {
|
|
return getAddonCard(doc.defaultView, id).querySelector(".addon-icon");
|
|
});
|
|
|
|
await checkIconInView(
|
|
"addons://detail/" + encodeURIComponent(id),
|
|
"details",
|
|
doc => {
|
|
return getAddonCard(doc.defaultView, id).querySelector(".addon-icon");
|
|
}
|
|
);
|
|
|
|
await extension.unload();
|
|
});
|