"use strict"; import getBridgeInfo from "./lib/getBridgeInfo"; import messageRouter from "./lib/messageRouter"; import defaultOptions, { Options } from "./defaultOptions"; import { getChromeUserAgent } from "./lib/userAgents"; import { getWindowCenteredProps } from "./lib/utils"; import { Message } from "./types"; import semver from "semver"; const _ = browser.i18n.getMessage; browser.runtime.onInstalled.addListener(async details => { switch (details.reason) { // Set default options case "install": { await browser.storage.sync.set({ options: defaultOptions }); break; } // Set newly added options case "update": { const { options: existingOptions } = await browser.storage.sync.get("options"); const newOptions: Partial = {}; // Find options not already in storage for (const [ key, val ] of Object.entries(defaultOptions)) { if (!existingOptions.hasOwnProperty(key)) { (newOptions as any)[key] = val; } } // Update storage with default values of new options await browser.storage.sync.set({ options: { ...existingOptions , ...newOptions } }); break; } } // Call after default options have been set createMenus(); }); // Menu IDs let mirrorCastMenuId: string | number; let mediaCastMenuId: string | number; const mediaCastTargetUrlPatterns = new Set([ "http://*/*" , "https://*/*" ]); const LOCAL_MEDIA_URL_PATTERN = "file://*/*"; async function createMenus () { const { options } = await browser.storage.sync.get("options"); /** * If options aren't set or menus have already been * created, return. */ if (!options || mirrorCastMenuId || mediaCastMenuId) { return; } if (options.localMediaEnabled) { mediaCastTargetUrlPatterns.add(LOCAL_MEDIA_URL_PATTERN); } //