tor-browser

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

head.js (2430B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 ChromeUtils.defineESModuleGetters(this, {
      5  LinkHandlerParent: "resource:///actors/LinkHandlerParent.sys.mjs",
      6  PlacesTestUtils: "resource://testing-common/PlacesTestUtils.sys.mjs",
      7  PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
      8 
      9  XPCShellContentUtils:
     10    "resource://testing-common/XPCShellContentUtils.sys.mjs",
     11 });
     12 
     13 // Clear the network cache between every test to make sure we get a stable state
     14 Services.cache2.clear();
     15 
     16 function waitForFaviconMessage(isTabIcon = undefined, expectedURL = undefined) {
     17  return new Promise((resolve, reject) => {
     18    let listener = (name, data) => {
     19      if (name != "SetIcon" && name != "SetFailedIcon") {
     20        return; // Ignore unhandled messages
     21      }
     22 
     23      // If requested filter out loads of the wrong kind of icon.
     24      if (isTabIcon != undefined && isTabIcon == data.isRichIcon) {
     25        return;
     26      }
     27 
     28      if (expectedURL && data.originalURL != expectedURL) {
     29        return;
     30      }
     31 
     32      LinkHandlerParent.removeListenerForTests(listener);
     33 
     34      if (name == "SetIcon") {
     35        resolve({
     36          iconURL: data.originalURL,
     37          isRichIcon: data.isRichIcon,
     38        });
     39      } else {
     40        reject({
     41          iconURL: data.originalURL,
     42          isRichIcon: data.isRichIcon,
     43        });
     44      }
     45    };
     46 
     47    LinkHandlerParent.addListenerForTests(listener);
     48  });
     49 }
     50 
     51 function waitForFavicon(browser, url) {
     52  return new Promise(resolve => {
     53    let listener = {
     54      onLinkIconAvailable(b, dataURI, iconURI) {
     55        if (b !== browser || iconURI != url) {
     56          return;
     57        }
     58 
     59        gBrowser.removeTabsProgressListener(listener);
     60        resolve();
     61      },
     62    };
     63 
     64    gBrowser.addTabsProgressListener(listener);
     65  });
     66 }
     67 
     68 function waitForLinkAvailable(browser) {
     69  let resolve, reject;
     70 
     71  let listener = {
     72    onLinkIconAvailable(b, dataURI, iconURI) {
     73      // Ignore icons for other browsers or empty icons.
     74      if (browser !== b || !iconURI) {
     75        return;
     76      }
     77 
     78      gBrowser.removeTabsProgressListener(listener);
     79      resolve(iconURI);
     80    },
     81  };
     82 
     83  let promise = new Promise((res, rej) => {
     84    resolve = res;
     85    reject = rej;
     86 
     87    gBrowser.addTabsProgressListener(listener);
     88  });
     89 
     90  promise.cancel = () => {
     91    gBrowser.removeTabsProgressListener(listener);
     92 
     93    reject();
     94  };
     95 
     96  return promise;
     97 }