tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });