tor-browser

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

browser_ManifestIcons_browserFetchIcon.js (2069B)


      1 "use strict";
      2 
      3 Services.prefs.setBoolPref("dom.manifest.enabled", true);
      4 
      5 const { ManifestIcons } = ChromeUtils.importESModule(
      6  "resource://gre/modules/ManifestIcons.sys.mjs"
      7 );
      8 const { ManifestObtainer } = ChromeUtils.importESModule(
      9  "resource://gre/modules/ManifestObtainer.sys.mjs"
     10 );
     11 
     12 const defaultURL = new URL(
     13  "https://example.org/browser/dom/manifest/test/resource.sjs"
     14 );
     15 defaultURL.searchParams.set("Content-Type", "application/manifest+json");
     16 
     17 const manifestMock = JSON.stringify({
     18  icons: [
     19    {
     20      sizes: "50x50",
     21      src: "red-50.png?Content-type=image/png",
     22    },
     23    {
     24      sizes: "150x150",
     25      src: "blue-150.png?Content-type=image/png",
     26    },
     27  ],
     28 });
     29 
     30 function makeTestURL() {
     31  const url = new URL(defaultURL);
     32  const body = `<link rel="manifest" href='${defaultURL}&body=${manifestMock}'>`;
     33  url.searchParams.set("Content-Type", "text/html; charset=utf-8");
     34  url.searchParams.set("body", encodeURIComponent(body));
     35  return url.href;
     36 }
     37 
     38 function getIconColor(icon) {
     39  return new Promise((resolve, reject) => {
     40    const canvas = content.document.createElement("canvas");
     41    const ctx = canvas.getContext("2d");
     42    const image = new content.Image();
     43    image.onload = function () {
     44      ctx.drawImage(image, 0, 0);
     45      resolve(ctx.getImageData(1, 1, 1, 1).data);
     46    };
     47    image.onerror = function () {
     48      reject(new Error("could not create image"));
     49    };
     50    image.src = icon;
     51  });
     52 }
     53 
     54 add_task(async function () {
     55  const tabOptions = { gBrowser, url: makeTestURL() };
     56  await BrowserTestUtils.withNewTab(tabOptions, async function (browser) {
     57    const manifest = await ManifestObtainer.browserObtainManifest(browser);
     58    let icon = await ManifestIcons.browserFetchIcon(browser, manifest, 25);
     59    let color = await SpecialPowers.spawn(browser, [icon], getIconColor);
     60    is(color[0], 255, "Fetched red icon");
     61 
     62    icon = await ManifestIcons.browserFetchIcon(browser, manifest, 500);
     63    color = await SpecialPowers.spawn(browser, [icon], getIconColor);
     64    is(color[2], 255, "Fetched blue icon");
     65  });
     66 });