"use strict"; import semver from "semver"; import defaultOptions, { Options } from "./defaultOptions"; import getBridgeInfo from "./lib/getBridgeInfo"; import messageRouter from "./lib/messageRouter"; import nativeMessaging from "./lib/nativeMessaging"; import options from "./lib/options"; import { getChromeUserAgent } from "./lib/userAgents"; import { getWindowCenteredProps } from "./lib/utils"; import { getReceiverSelector , ReceiverSelectorMediaType , ReceiverSelectorSelectedEvent , ReceiverSelectorType } from "./receiver_selectors"; import { Message, Receiver } from "./types"; import { ReceiverStatusMessage , ServiceDownMessage , ServiceUpMessage } from "./messageTypes"; import { CAST_FRAMEWORK_LOADER_SCRIPT_URL , CAST_LOADER_SCRIPT_URL } from "./endpoints"; const _ = browser.i18n.getMessage; browser.runtime.onInstalled.addListener(async details => { switch (details.reason) { // Set default options case "install": { await options.setAll(defaultOptions); break; } // Set newly added options case "update": { await options.update(defaultOptions); break; } } // Call after default options have been set init(); }); type MenuId = string | number; // Menu IDs let mirrorCastMenuId: MenuId; let mediaCastMenuId: MenuId; let whitelistMenuId: MenuId; let whitelistRecommendedMenuId: MenuId; const whitelistMenuMap = new Map(); const mediaCastTargetUrlPatterns = new Set([ "http://*/*" , "https://*/*" ]); const LOCAL_MEDIA_URL_PATTERN = "file://*/*"; async function initCreateMenus (opts: Options) { // If menus have already been created, return. if (mirrorCastMenuId || mediaCastMenuId || whitelistMenuId || whitelistRecommendedMenuId) { return; } /** * If local media casting is enabled, allow the media cast * menu item to appear on file URIs. */ if (opts.localMediaEnabled) { mediaCastTargetUrlPatterns.add(LOCAL_MEDIA_URL_PATTERN); } //