browser_favicon_empty_data.js (3262B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const { ImageTestUtils } = ChromeUtils.importESModule( 7 "resource://testing-common/ImageTestUtils.sys.mjs" 8 ); 9 10 const TEST_ROOT = 11 "http://mochi.test:8888/browser/browser/base/content/test/favicons/"; 12 13 const PAGE_URL = TEST_ROOT + "blank.html"; 14 const ICON_URL = TEST_ROOT + "file_bug970276_favicon1.ico"; 15 const ICON_DATAURI = 16 "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABx0lEQVQ4T6WSMWsbQRCFP4EEKqTCBAwJpFkV+QGbStUh0igolVAjUohgzpUrBQ5cyFiFYCEuU/hQ4cJVVCblFfcDsj8gzZUJXGMEVwouzGrvYqGEBPJgudnZeW/e7F6D/0SjjjxWq1W5Xq85yTLQmvF4TL/fJwiCo1pBndxut+VgMABruQUsoIHYx4KbND0Scpu7u/vy7GzGu93OkYTwDLjScG3hO5AoRZ7nFEVxLNBsNkv5ikDVXZSshR/ACI2ZKKy1RFnG+SPnDSEvl0sWiwUfdztCf3DNvnPohaq8iMtYUz9OoyzLstvt8qIouNWg7b6gIghE7Km/E1kCqTFK/XLw5PLyoPuVjwUvgW+dDsPhkE+bjcs5J1rjHPR6PfdsIiBLCG8eiYjgZx+/iiIekgRtrRNxDpIkYTQa8b4oHEkOxKoQBVXui7+XkyjCJIZQh3sHrVaLdrvNTVEczC6k16enPM9z1GSCUgplEmJtubi4ZzZ726jvQP62eRAcWBeBc2/bGHPw/hXqZBRFZWIMX/3e3bwG86DIsuy3ZEF9kKZpOZ/PCa11Y1Tdxfpms/m7QAURSoPAxR86HabTKXEcH9VV+OPBv+In4P+u1zGvpjQAAAAASUVORK5CYII="; 17 18 const EMPTY_PAGE_URL = TEST_ROOT + "file_favicon_empty.html"; 19 const EMPTY_ICON_URL = "about:blank"; 20 21 add_task(async function () { 22 await BrowserTestUtils.withNewTab( 23 { gBrowser, url: PAGE_URL }, 24 async browser => { 25 let iconBox = gBrowser 26 .getTabForBrowser(browser) 27 .querySelector(".tab-icon-image"); 28 await addContentLinkForIconUrl(ICON_URL, browser); 29 await ImageTestUtils.assertEqualImage( 30 window, 31 browser.mIconURL, 32 ICON_DATAURI, 33 "Favicon is correctly set." 34 ); 35 36 // Give some time to ensure the icon is rendered. 37 /* eslint-disable mozilla/no-arbitrary-setTimeout */ 38 await new Promise(resolve => setTimeout(resolve, 200)); 39 let firstIconShotDataURL = TestUtils.screenshotArea(iconBox, window); 40 41 let browserLoaded = BrowserTestUtils.browserLoaded( 42 browser, 43 false, 44 EMPTY_PAGE_URL 45 ); 46 BrowserTestUtils.startLoadingURIString(browser, EMPTY_PAGE_URL); 47 let iconChanged = waitForFavicon(browser, EMPTY_ICON_URL); 48 await Promise.all([browserLoaded, iconChanged]); 49 Assert.equal(browser.mIconURL, EMPTY_ICON_URL, "Favicon was changed."); 50 51 // Give some time to ensure the icon is rendered. 52 /* eslint-disable mozilla/no-arbitrary-setTimeout */ 53 await new Promise(resolve => setTimeout(resolve, 200)); 54 let secondIconShotDataURL = TestUtils.screenshotArea(iconBox, window); 55 56 Assert.notEqual( 57 firstIconShotDataURL, 58 secondIconShotDataURL, 59 "Check the first icon didn't persist as the second one is invalid" 60 ); 61 } 62 ); 63 }); 64 65 async function addContentLinkForIconUrl(url, browser) { 66 let iconChanged = waitForFavicon(browser, url); 67 info("Adding <link> to: " + url); 68 await ContentTask.spawn(browser, url, href => { 69 let doc = content.document; 70 let head = doc.head; 71 let link = doc.createElement("link"); 72 link.rel = "icon"; 73 link.href = href; 74 link.type = "image/png"; 75 head.appendChild(link); 76 }); 77 info("Awaiting icon change event for:" + url); 78 await iconChanged; 79 }