test_taskbarTabs_utils.js (2484B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 ChromeUtils.defineESModuleGetters(this, { 7 MockRegistrar: "resource://testing-common/MockRegistrar.sys.mjs", 8 sinon: "resource://testing-common/Sinon.sys.mjs", 9 TaskbarTabsUtils: "resource:///modules/taskbartabs/TaskbarTabsUtils.sys.mjs", 10 }); 11 12 const kPngFile = do_get_file("favicon-normal16.png"); 13 const kSvgFile = do_get_file("icon.svg"); 14 const kSvgUri = Services.io.newFileURI(kSvgFile); 15 16 let gDefaultFaviconUri = kSvgUri; 17 18 let gMockFaviconService = { 19 QueryInterface: ChromeUtils.generateQI(["nsIFaviconService"]), 20 getFaviconForPage: sinon.stub(), 21 get defaultFavicon() { 22 return gDefaultFaviconUri; 23 }, 24 }; 25 let gDefaultFaviconSpy = sinon.spy(gMockFaviconService, "defaultFavicon", [ 26 "get", 27 ]); 28 29 MockRegistrar.register( 30 "@mozilla.org/browser/favicon-service;1", 31 gMockFaviconService 32 ); 33 34 let gPngBytes; 35 36 add_setup(async () => { 37 const pngArray = await IOUtils.read(kPngFile.path); 38 gPngBytes = pngArray.buffer; 39 }); 40 41 add_task(async function test_favicon_default_fallback() { 42 const uri = Services.io.newURI("https://www.example.com"); 43 44 gMockFaviconService.getFaviconForPage.callsFake(async () => { 45 return { rawData: gPngBytes, mimeType: "image/png" }; 46 }); 47 await TaskbarTabsUtils.getFavicon(uri); 48 ok( 49 gDefaultFaviconSpy.get.notCalled, 50 "Fallback to default favicon should not occur for valid raster favicon data." 51 ); 52 53 gMockFaviconService.getFaviconForPage.callsFake(async () => { 54 return { 55 dataURI: Services.io.newFileURI(kSvgFile), 56 mimeType: "image/svg+xml", 57 }; 58 }); 59 await TaskbarTabsUtils.getFavicon(uri); 60 ok( 61 gDefaultFaviconSpy.get.notCalled, 62 "Fallback to default favicon should not occur for valid vector favicon data." 63 ); 64 65 gMockFaviconService.getFaviconForPage.callsFake(async () => { 66 return { rawData: null, mimeType: "image/png" }; 67 }); 68 await TaskbarTabsUtils.getFavicon(uri); 69 ok( 70 gDefaultFaviconSpy.get.called, 71 "Fallback to default favicon should occur for invalid favicon data." 72 ); 73 74 gMockFaviconService.getFaviconForPage.callsFake(async () => { 75 return null; 76 }); 77 gDefaultFaviconUri = Services.io.newURI("https://www.example.com"); 78 await rejects( 79 TaskbarTabsUtils.getFavicon(uri), 80 /Scheme "https" is not supported for creating a Taskbar Tab icon, URI should be local/, 81 "Network URI for the default favicon should have thrown." 82 ); 83 });