function fullVersionOf(browser) {
  let fallbackVersionString = '';
  // If we are reasonably certain now that the browser we are on has the
  // fullVersionList high-entropy hint, then we can skip computing the fallback
  // value as we won't end up using it.
  if (!hasFullVersionList()) {
    fallbackVersionString = getFullVersionFromUserAgentString(browser);
  }
  // Silk has the UACH API surface, but currently does not identify itself in
  // the userAgentData.brands array. Fallback to using userAgent string version
  // for Silk.
  const useUach = browser !== Brand.SILK && useUserAgentDataBrand(true);
  if (useUach) {
    const data = util.getUserAgentData();
    // Operate under the assumption that the low-entropy and high-entropy lists
    // of brand/version pairs contain an identical set of brands. Therefore, if
    // the low-entropy list doesn't contain the given brand, return undefined.
    if (!data.brands.find(({brand}) => brand === browser)) {
      return undefined;
    }
  } else if (fallbackVersionString === '') {
    return undefined;
  }
  return new HighEntropyBrandVersion(browser, useUach, fallbackVersionString);
}
Returns an object that provides access to the full version string of the
current browser -- or undefined, based on whether the current browser matches
the requested browser brand. Note that the full version string is a
high-entropy value, and must be asynchronously loaded before it can be
accessed synchronously.
@param {!AllBrandsInternal} browser The brand whose version should be
    returned.
@return {!AsyncValue<!Version>|undefined} An object that can be used
    to get or load the full version string as a high-entropy value, or
undefined if the current browser doesn't match the given brand.