async function getIconCache(scripts) {
  // data uri for own icon to load it instantly in Chrome when there are many images
  const toGet = [`${ICON_PREFIX}38.png`];
  const toPrime = [];
  const res = {};
  for (let { custom, meta } of scripts) {
    let icon = custom.icon || meta.icon;
    if (isValidHttpUrl(icon)) {
      icon = custom.pathMap[icon] || icon;
      toGet.push(icon);
      if (!storageCacheHas(S_CACHE_PRE + icon)) toPrime.push(icon);
    }
  }
  if (toPrime.length) {
    await storage[S_CACHE].getMulti(toPrime);
  }
  for (let i = 0, d, url; i < toGet.length; i++) {
    url = toGet[i];
    d = getImageData(url);
    if (!isObject(d) || !i && (d = await d)) {
      res[url] = d;
    }
  }
  return res;
}
Returns only own icon and the already cached icons.
The rest are prefetched in background and will be used by loadScriptIcon.
@param {VMScript[]} scripts
@return {Promise<{}>}