Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Errors
- This test failed 59 times in the preceding 30 days. quicksearch this test
- Manifest: browser/base/content/test/favicons/browser.toml
/* Any copyright is dedicated to the Public Domain.
const { ImageTestUtils } = ChromeUtils.importESModule(
);
const TEST_ROOT =
const PAGE_URL = TEST_ROOT + "file_favicon_svg.html";
const SVG_URL = TEST_ROOT + "file_favicon.svg";
const SVG_DATA_URL = `data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8c3R5bGU+CiAgICA6cm9vdCB7IGNvbG9yLXNjaGVtZTogbGlnaHQgZGFyazsgfQogICAgcmVjdCB7IGZpbGw6IGxpZ2h0LWRhcmsoZ3JlZW4sIGJsdWUpOyB9CiAgPC9zdHlsZT4KICA8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgLz4KPC9zdmc+Cg==`;
const LIGHT_PNG_GREEN = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHElEQVQ4T2NkaGD4z0ABYBw1YNSAUQPAYBgYAACDTRgBSE6IpwAAAABJRU5ErkJggg==`;
const DARK_PNG_BLUE = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGklEQVR42mNkYPj/n4ECwDhqwKgBowYMFwMAhfQf8VdPb2UAAAAASUVORK5CYII= `;
async function testIconImage(browser, tabIconImg, dark) {
let expectedParams = new URLSearchParams({
url: SVG_DATA_URL,
colorScheme: dark ? "dark" : "light",
contentParentId:
browser.browsingContext.currentWindowGlobal.contentParentId,
width: 16,
height: 16,
});
is(
tabIconImg.src,
"moz-remote-image://?" + expectedParams,
"Image was loaded with the right moz-remote-image: URL"
);
if (!tabIconImg.complete) {
info("Awaiting tab-icon-image load");
await new Promise(resolve =>
tabIconImg.addEventListener("load", resolve, { once: true })
);
}
let screenshotDataURL = TestUtils.screenshotArea(tabIconImg, window);
await ImageTestUtils.assertEqualImage(
window,
screenshotDataURL,
dark ? DARK_PNG_BLUE : LIGHT_PNG_GREEN,
`Got ${dark ? "blue" : "green"} favicon`
);
}
add_task(async function () {
await SpecialPowers.pushPrefEnv({
set: [
["browser.tabs.remoteSVGIconDecoding", true],
["ui.systemUsesDarkTheme", 0],
],
});
await BrowserTestUtils.withNewTab(
{ gBrowser, url: PAGE_URL, waitForLoad: false },
async browser => {
await waitForFavicon(browser, SVG_URL);
is(browser.mIconURL, SVG_DATA_URL, "Got the SVG data URL");
let tabIconImg = gBrowser
.getTabForBrowser(browser)
.querySelector(".tab-icon-image");
await testIconImage(browser, tabIconImg, false);
info("Switching to dark mode");
let prefersColorSchemeChange = new Promise(resolve =>
window
.matchMedia("(prefers-color-scheme: dark)")
.addEventListener("change", resolve, { once: true })
);
await SpecialPowers.pushPrefEnv({
set: [["ui.systemUsesDarkTheme", 1]],
});
info("Waiting for prefers-color-scheme change");
await prefersColorSchemeChange;
await testIconImage(browser, tabIconImg, true);
}
);
});