Switch to eslint and fix issues

This commit is contained in:
hensm
2021-04-26 05:36:55 +01:00
parent 2d0fa4c844
commit d478742c4b
100 changed files with 1537 additions and 608 deletions

View File

@@ -26,15 +26,14 @@ export interface Shim {
}
// tslint:disable-next-line:new-parens
export default new class ShimManager {
private activeShims = new Set<Shim>();
public async init () {
public async init() {
await this.initStatusListeners();
}
public getShim (tabId: number, frameId?: number) {
public getShim(tabId: number, frameId?: number) {
for (const activeShim of this.activeShims) {
if (activeShim.contentTabId === tabId) {
if (frameId && activeShim.contentFrameId !== frameId) {
@@ -46,7 +45,7 @@ export default new class ShimManager {
}
}
public async createShim (port: AnyPort) {
public async createShim(port: AnyPort) {
const shim = await (port instanceof MessagePort
? this.createShimFromBackground(port)
: this.createShimFromContent(port));
@@ -59,7 +58,7 @@ export default new class ShimManager {
this.activeShims.add(shim);
}
private async createShimFromBackground (
private async createShimFromBackground(
contentPort: MessagePort): Promise<Shim> {
const shim: Shim = {
@@ -83,7 +82,7 @@ export default new class ShimManager {
return shim;
}
private async createShimFromContent (
private async createShimFromContent(
contentPort: Port): Promise<Shim> {
if (contentPort.sender?.tab?.id === undefined
@@ -138,7 +137,7 @@ export default new class ShimManager {
return shim;
}
private async handleContentMessage (shim: Shim, message: Message) {
private async handleContentMessage(shim: Shim, message: Message) {
const [ destination ] = message.subject.split(":");
if (destination === "bridge") {
shim.bridgePort.postMessage(message);
@@ -164,8 +163,6 @@ export default new class ShimManager {
throw logger.error("Shim associated with content sender missing tab/frame ID");
}
const contentTab = await browser.tabs.get(shim.contentTabId);
try {
const selection =
await ReceiverSelectorManager.getSelection(
@@ -231,8 +228,8 @@ export default new class ShimManager {
}
/**
* TODO: If we're closing a selector, make sure it's the
* same one that caused the session creation.
* TODO: If we're closing a selector, make sure it's the same
* one that caused the session creation.
*/
case "main:sessionCreated": {
const selector = await ReceiverSelectorManager.getSelector();
@@ -248,7 +245,7 @@ export default new class ShimManager {
}
}
private async initStatusListeners () {
private async initStatusListeners() {
StatusManager.addEventListener("serviceUp", ev => {
for (const shim of this.activeShims) {
shim.contentPort.postMessage({

View File

@@ -14,14 +14,13 @@ interface EventMap {
"statusUpdate": { id: string, status: ReceiverStatus };
}
// tslint:disable-next-line:new-parens
export default new class StatusManager
extends TypedEventTarget<EventMap> {
private bridgePort: (Port | null) = null;
private receivers = new Map<string, Receiver>();
constructor () {
constructor() {
super();
// Bind listeners
@@ -29,13 +28,13 @@ export default new class StatusManager
this.onBridgePortDisconnect = this.onBridgePortDisconnect.bind(this);
}
public async init () {
public async init() {
if (!this.bridgePort) {
this.bridgePort = await this.createBridgePort();
}
}
public *getReceivers () {
public *getReceivers() {
for (const [, receiver ] of this.receivers) {
if (receiver.status && receiver.status.application
&& receiver.status.volume) {
@@ -44,7 +43,7 @@ export default new class StatusManager
}
}
public async stopReceiverApp (receiver: Receiver) {
public async stopReceiverApp(receiver: Receiver) {
if (!this.bridgePort) {
return;
}
@@ -55,7 +54,7 @@ export default new class StatusManager
});
}
private async createBridgePort () {
private async createBridgePort() {
const bridgePort = await bridge.connect();
bridgePort.onMessage.addListener(this.onBridgePortMessage);
bridgePort.onDisconnect.addListener(this.onBridgePortDisconnect);
@@ -74,7 +73,7 @@ export default new class StatusManager
* Handles incoming bridge status messages, manages the
* receiver list, and dispatches events.
*/
private onBridgePortMessage (message: Message) {
private onBridgePortMessage(message: Message) {
switch (message.subject) {
case "main:serviceUp": {
const { data: receiver } = message;
@@ -136,7 +135,7 @@ export default new class StatusManager
* triggered again and the timer is reset for another 10
* seconds.
*/
private onBridgePortDisconnect () {
private onBridgePortDisconnect() {
for (const [, receiver] of this.receivers) {
const serviceDownEvent = new CustomEvent("serviceDown", {
detail: { id: receiver.id }

View File

@@ -49,12 +49,12 @@ browser.runtime.onInstalled.addListener(async details => {
* Sets up media overlay content script and handles toggling
* on options change.
*/
async function initMediaOverlay () {
async function initMediaOverlay() {
logger.info("init (media overlay)");
let contentScript: browser.contentScripts.RegisteredContentScript;
async function registerMediaOverlayContentScript () {
async function registerMediaOverlayContentScript() {
if (!(await options.get("mediaOverlayEnabled"))) {
return;
}
@@ -71,7 +71,7 @@ async function initMediaOverlay () {
}
}
async function unregisterMediaOverlayContentScript () {
async function unregisterMediaOverlayContentScript() {
await contentScript?.unregister();
}
@@ -95,7 +95,7 @@ async function initMediaOverlay () {
* with the current version of the extension. If not, triggers
* a notification with the appropriate info.
*/
async function notifyBridgeCompat () {
async function notifyBridgeCompat() {
logger.info("checking for bridge...");
let info: BridgeInfo;
@@ -136,7 +136,7 @@ async function notifyBridgeCompat () {
let isInitialized = false;
async function init () {
async function init() {
if (isInitialized) {
return;
}
@@ -193,7 +193,7 @@ async function init () {
*/
messaging.onConnect.addListener(async port => {
if (port.name === "shim") {
ShimManager.createShim(port as any);
ShimManager.createShim(port);
}
});
}

View File

@@ -4,7 +4,7 @@ import loadSender from "../lib/loadSender";
import logger from "../lib/logger";
import options from "../lib/options";
import { getMediaTypesForPageUrl, stringify } from "../lib/utils";
import { stringify } from "../lib/utils";
import { ReceiverSelectionActionType
, ReceiverSelectorMediaType } from "./receiverSelector";
@@ -33,7 +33,7 @@ let menuIdWhitelistRecommended: MenuId;
const whitelistChildMenuPatterns = new Map<MenuId, string>();
export async function initMenus () {
export async function initMenus() {
logger.info("init (menus)");
const opts = await options.getAll();
@@ -98,9 +98,6 @@ browser.menus.onClicked.addListener(async (info, tab) => {
throw logger.error("Menu handler page URL not found.");
}
const availableMediaTypes = getMediaTypesForPageUrl(info.pageUrl);
switch (info.menuItemId) {
case menuIdCast: {
const selection = await ReceiverSelectorManager.getSelection(

View File

@@ -20,20 +20,20 @@ const _ = browser.i18n.getMessage;
// TODO: Figure out lifetime properly
export default class NativeReceiverSelector extends ReceiverSelector {
private bridgePort: (Port | null) = null;
private wasReceiverSelected: boolean = false;
private wasReceiverSelected = false;
#isOpen = false;
constructor () {
constructor() {
super();
this.onBridgePortMessage = this.onBridgePortMessage.bind(this);
}
get isOpen () {
get isOpen() {
return this.#isOpen;
}
public async open (
public async open(
receivers: Receiver[]
, defaultMediaType: ReceiverSelectorMediaType
, availableMediaTypes: ReceiverSelectorMediaType
@@ -86,11 +86,11 @@ export default class NativeReceiverSelector extends ReceiverSelector {
this.#isOpen = true;
}
public update (): void {
public update(): void {
// TODO: Implement this
}
public close (): void {
public close(): void {
if (this.bridgePort) {
this.bridgePort.postMessage({
subject: "bridge:closeReceiverSelector"
@@ -100,7 +100,7 @@ export default class NativeReceiverSelector extends ReceiverSelector {
this.#isOpen = false;
}
private async onBridgePortMessage (message: Message) {
private async onBridgePortMessage(message: Message) {
switch (message.subject) {
case "main:receiverSelector/selected": {
this.wasReceiverSelected = true;

View File

@@ -24,13 +24,13 @@ export default class PopupReceiverSelector extends ReceiverSelector {
private defaultMediaType?: ReceiverSelectorMediaType;
private availableMediaTypes?: ReceiverSelectorMediaType;
private wasReceiverSelected: boolean = false;
private wasReceiverSelected = false;
private appId?: string;
#isOpen = false;
constructor () {
constructor() {
super();
// Bind methods to pass to addListener
@@ -48,11 +48,11 @@ export default class PopupReceiverSelector extends ReceiverSelector {
messaging.onConnect.addListener(this.onConnect);
}
get isOpen () {
get isOpen() {
return this.#isOpen;
}
public async open (
public async open(
receivers: Receiver[]
, defaultMediaType: ReceiverSelectorMediaType
, availableMediaTypes: ReceiverSelectorMediaType
@@ -115,7 +115,7 @@ export default class PopupReceiverSelector extends ReceiverSelector {
}
}
public update (receivers: Receiver[]) {
public update(receivers: Receiver[]) {
this.receivers = receivers;
this.messagePort?.postMessage({
subject: "popup:update"
@@ -125,7 +125,7 @@ export default class PopupReceiverSelector extends ReceiverSelector {
});
}
public async close (): Promise<void> {
public async close(): Promise<void> {
if (this.windowId) {
await browser.windows.remove(this.windowId);
}
@@ -138,7 +138,7 @@ export default class PopupReceiverSelector extends ReceiverSelector {
}
}
private onConnect (port: Port) {
private onConnect(port: Port) {
browser.history.deleteUrl({ url: POPUP_URL });
if (port.name !== "popup") {
@@ -181,7 +181,7 @@ export default class PopupReceiverSelector extends ReceiverSelector {
/**
* Handles popup messages.
*/
private onPopupMessage (message: Message) {
private onPopupMessage(message: Message) {
switch (message.subject) {
case "receiverSelector:selected": {
this.wasReceiverSelected = true;
@@ -206,7 +206,7 @@ export default class PopupReceiverSelector extends ReceiverSelector {
* Handles cancellation state where the popup window is closed
* before a receiver is selected.
*/
private onWindowsRemoved (windowId: number) {
private onWindowsRemoved(windowId: number) {
// Only care about popup window
if (windowId !== this.windowId) {
return;
@@ -234,7 +234,7 @@ export default class PopupReceiverSelector extends ReceiverSelector {
* into focus. Doesn't apply if no window is focused
* `WINDOW_ID_NONE` or if the popup window is re-focused.
*/
private onWindowsFocusChanged (windowId: number) {
private onWindowsFocusChanged(windowId: number) {
if (windowId !== browser.windows.WINDOW_ID_NONE
&& windowId !== this.windowId) {

View File

@@ -18,7 +18,7 @@ import NativeReceiverSelector from "./NativeReceiverSelector";
import PopupReceiverSelector from "./PopupReceiverSelector";
async function createSelector () {
async function createSelector() {
const type = await options.get("receiverSelectorType");
const platformInfo = await browser.runtime.getPlatformInfo();
@@ -33,7 +33,7 @@ async function createSelector () {
let sharedSelector: ReceiverSelector;
async function getSelector () {
async function getSelector() {
if (!sharedSelector) {
try {
sharedSelector = await createSelector();
@@ -56,7 +56,7 @@ async function getSelector () {
* - Resolves to null if the selection is cancelled.
* - Rejects if the selection fails.
*/
async function getSelection (
async function getSelection(
contextTabId: number
, contextFrameId = 0
, withMediaSender = false)
@@ -119,7 +119,7 @@ async function getSelection (
sharedSelector = await createSelector();
function onReceiverChange () {
function onReceiverChange() {
sharedSelector.update(Array.from(StatusManager.getReceivers()));
}
@@ -136,7 +136,7 @@ async function getSelection (
type EvParamsType =
Parameters<typeof sharedSelector.addEventListener>[0];
function storeListener<T> (type: EvParamsType, fn: T) {
function storeListener<T>(type: EvParamsType, fn: T) {
if (type === "selected") {
onSelected = fn;
} else if (type === "cancelled") {
@@ -150,7 +150,7 @@ async function getSelection (
return fn;
}
function removeListeners () {
function removeListeners() {
sharedSelector.removeEventListener("selected", onSelected);
sharedSelector.removeEventListener("cancelled", onCancelled);
sharedSelector.removeEventListener("error", onError);

View File

@@ -26,7 +26,7 @@ let platform: string;
let chromeUserAgent: string | undefined;
let chromeUserAgentHybrid: string | undefined;
export async function initWhitelist () {
export async function initWhitelist() {
logger.info("init (whitelist)");
if (!platform) {
@@ -66,7 +66,7 @@ export async function initWhitelist () {
* as Chrome, so we should rewrite the User-Agent header
* to reflect this on whitelisted sites.
*/
async function onWhitelistedBeforeSendHeaders (
async function onWhitelistedBeforeSendHeaders(
details: OnBeforeSendHeadersDetails) {
if (!details.requestHeaders) {
@@ -100,7 +100,7 @@ export async function initWhitelist () {
* players on other origins (like CDN domains) when the
* main site is whitelisted.
*/
function onWhitelistedChildBeforeSendHeaders (
function onWhitelistedChildBeforeSendHeaders(
details: OnBeforeSendHeadersDetails) {
if (!details.requestHeaders || !details.frameAncestors) {
@@ -137,7 +137,7 @@ function onWhitelistedChildBeforeSendHeaders (
* We can redirect this and inject our own script to setup
* the API shim.
*/
async function onBeforeCastSDKRequest (details: OnBeforeRequestDetails) {
async function onBeforeCastSDKRequest(details: OnBeforeRequestDetails) {
if (!details.originUrl) {
return {};
}
@@ -183,7 +183,7 @@ async function onBeforeCastSDKRequest (details: OnBeforeRequestDetails) {
}
async function registerUserAgentWhitelist () {
async function registerUserAgentWhitelist() {
const { userAgentWhitelist
, userAgentWhitelistEnabled } = await options.getAll();
@@ -209,7 +209,7 @@ async function registerUserAgentWhitelist () {
, [ "blocking", "requestHeaders" ]);
}
function unregisterUserAgentWhitelist () {
function unregisterUserAgentWhitelist() {
originUrlCache.length = 0;
browser.webRequest.onBeforeSendHeaders