browser_favicon_svg.js (1948B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 const { ImageTestUtils } = ChromeUtils.importESModule( 5 "resource://testing-common/ImageTestUtils.sys.mjs" 6 ); 7 8 const TEST_ROOT = 9 "http://mochi.test:8888/browser/browser/base/content/test/favicons/"; 10 11 const PAGE_URL = TEST_ROOT + "file_favicon_svg.html"; 12 const SVG_URL = TEST_ROOT + "file_favicon.svg"; 13 const SVG_DATA_URL = `data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iIC8+Cjwvc3ZnPgo=`; 14 15 add_task(async function () { 16 await SpecialPowers.pushPrefEnv({ 17 set: [["browser.tabs.remoteSVGIconDecoding", true]], 18 }); 19 20 await BrowserTestUtils.withNewTab( 21 { gBrowser, url: PAGE_URL, waitForLoad: false }, 22 async browser => { 23 await waitForFavicon(browser, SVG_URL); 24 is(browser.mIconURL, SVG_DATA_URL, "Got the SVG data URL"); 25 26 let tabIconImg = gBrowser 27 .getTabForBrowser(browser) 28 .querySelector(".tab-icon-image"); 29 30 let expectedParams = new URLSearchParams({ 31 url: SVG_DATA_URL, 32 width: 16, 33 height: 16, 34 }); 35 36 is( 37 tabIconImg.src, 38 "moz-remote-image://?" + expectedParams, 39 "Image was loaded with the moz-remote-image: protocol" 40 ); 41 42 if (!tabIconImg.complete) { 43 info("Awaiting tab-icon-image load"); 44 await new Promise(resolve => 45 tabIconImg.addEventListener("load", resolve, { once: true }) 46 ); 47 } 48 49 let screenshotDataURL = TestUtils.screenshotArea(tabIconImg, window); 50 await ImageTestUtils.assertEqualImage( 51 window, 52 screenshotDataURL, 53 "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHElEQVQ4T2NkaGD4z0ABYBw1YNSAUQPAYBgYAACDTRgBSE6IpwAAAABJRU5ErkJggg==", 54 "Got green favicon" 55 ); 56 } 57 ); 58 });