tor-browser

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

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 }