Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
"use strict";
// This test checks color sanitization in various situations
add_task(async function test_sanitization_invalid() {
// This test checks that invalid values are sanitized
let extension = ExtensionTestUtils.loadExtension({
manifest: {
theme: {
colors: {
frame: ACCENT_COLOR,
tab_background_text: TEXT_COLOR,
bookmark_text: "ntimsfavoriteblue",
},
},
},
});
await extension.startup();
let navbar = document.querySelector("#nav-bar");
Assert.equal(
window.getComputedStyle(navbar).color,
"rgb(0, 0, 0)",
"All invalid values should always compute to black."
);
await extension.unload();
});
add_task(async function test_sanitization_css_variables() {
// This test checks that CSS variables are sanitized
let extension = ExtensionTestUtils.loadExtension({
manifest: {
theme: {
colors: {
frame: ACCENT_COLOR,
tab_background_text: TEXT_COLOR,
bookmark_text: "var(--arrowpanel-dimmed)",
},
},
},
});
await extension.startup();
let navbar = document.querySelector("#nav-bar");
Assert.equal(
window.getComputedStyle(navbar).color,
"rgb(0, 0, 0)",
"All CSS variables should always compute to black."
);
await extension.unload();
});
add_task(async function test_sanitization_important() {
// This test checks that the sanitizer cannot be fooled with !important
let stylesheetAttr = `href="data:text/css,*{color:red!important}" type="text/css"`;
let stylesheet = document.createProcessingInstruction(
"xml-stylesheet",
stylesheetAttr
);
let load = BrowserTestUtils.waitForEvent(stylesheet, "load");
document.insertBefore(stylesheet, document.documentElement);
await load;
let extension = ExtensionTestUtils.loadExtension({
manifest: {
theme: {
colors: {
frame: ACCENT_COLOR,
tab_background_text: TEXT_COLOR,
bookmark_text: "green",
},
},
},
});
await extension.startup();
let navbar = document.querySelector("#nav-bar");
Assert.equal(
window.getComputedStyle(navbar).color,
"rgb(255, 0, 0)",
"Sheet applies"
);
stylesheet.remove();
Assert.equal(
window.getComputedStyle(navbar).color,
"rgb(0, 128, 0)",
"Shouldn't be able to fool the color sanitizer with !important"
);
await extension.unload();
});
add_task(async function test_sanitization_transparent() {
// This test checks whether transparent values are applied properly
let extension = ExtensionTestUtils.loadExtension({
manifest: {
theme: {
colors: {
frame: ACCENT_COLOR,
tab_background_text: TEXT_COLOR,
toolbar_top_separator: "transparent",
},
},
},
});
await extension.startup();
let navbar = document.querySelector("#nav-bar");
Assert.equal(
window.getComputedStyle(navbar).borderTopColor,
"rgba(0, 0, 0, 0)",
"Top separator should be transparent"
);
await extension.unload();
});
add_task(async function test_sanitization_transparent_frame_color() {
// This test checks whether transparent frame color falls back to white.
let extension = ExtensionTestUtils.loadExtension({
manifest: {
theme: {
colors: {
frame: "transparent",
tab_background_text: TEXT_COLOR,
},
},
},
});
await extension.startup();
Assert.equal(
getToolboxBackgroundColor(),
"rgb(255, 255, 255)",
"Accent color should be white"
);
await extension.unload();
});
add_task(
async function test_sanitization_transparent_tab_background_text_color() {
// This test checks whether transparent textcolor falls back to black.
let extension = ExtensionTestUtils.loadExtension({
manifest: {
theme: {
colors: {
frame: ACCENT_COLOR,
tab_background_text: "transparent",
},
},
},
});
await extension.startup();
let docEl = document.documentElement;
Assert.equal(
window.getComputedStyle(docEl).color,
"rgb(0, 0, 0)",
"Text color should be black"
);
await extension.unload();
}
);