"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 { getReceiverSelectorManager , ReceiverSelectorManagerType , ReceiverSelectorMediaType , ReceiverSelectorSelectedEvent } from "./receiverSelectorManager"; import { Message, Receiver } from "./types"; import { ReceiverStatusMessage , ServiceDownMessage , ServiceUpMessage } from "./messageTypes"; 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 createMenus(); }); 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 createMenus () { const opts = await options.getAll(); /** * If options aren't set or menus have already been * created, return. */ if (!opts || mirrorCastMenuId || mediaCastMenuId) { return; } if (opts.localMediaEnabled) { mediaCastTargetUrlPatterns.add(LOCAL_MEDIA_URL_PATTERN); } //