| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {getFaviconForPageURL} from 'chrome://resources/js/icon.js'; |
| |
| export const SUBDOMAIN_SPECIFIER = '*.'; |
| |
| /** |
| * Returns a favicon url for a given site. |
| */ |
| export function getFaviconUrl(site: string): string { |
| // Use 'http' as the scheme if `site` has a wildcard scheme. |
| let faviconUrl = |
| site.startsWith('*://') ? site.replace('*://', 'http://') : site; |
| |
| // if `site` ends in a wildcard path, trim it. |
| if (faviconUrl.endsWith('/*')) { |
| faviconUrl = faviconUrl.substring(0, faviconUrl.length - 2); |
| } |
| |
| return getFaviconForPageURL( |
| faviconUrl, /*isSyncedUrlForHistoryUi=*/ false, |
| /*remoteIconUrlForUma=*/ '', /*size=*/ 20); |
| } |
| |
| /** |
| * Returns if the given site matches all of its subdomains. |
| */ |
| export function matchesSubdomains(site: string): boolean { |
| // Sites that match all subdomains for a given host will specify "*.<host>". |
| // Given how sites are specified as origins for user specified sites and how |
| // extension host permissions are specified, it should be safe to assume |
| // that "*." will only be used to match subdomains. |
| return site.includes(SUBDOMAIN_SPECIFIER); |
| } |