diff options
Diffstat (limited to 'packages/taler-wallet-webextension/src/platform/chrome.ts')
-rw-r--r-- | packages/taler-wallet-webextension/src/platform/chrome.ts | 111 |
1 files changed, 70 insertions, 41 deletions
diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts b/packages/taler-wallet-webextension/src/platform/chrome.ts index ee071347a..056351e3f 100644 --- a/packages/taler-wallet-webextension/src/platform/chrome.ts +++ b/packages/taler-wallet-webextension/src/platform/chrome.ts @@ -53,7 +53,7 @@ const api: BackgroundPlatformAPI & ForegroundPlatformAPI = { redirectTabToWalletPage, registerAllIncomingConnections, registerOnInstalled, - listenToAllChannels: listenToAllChannels as any, + listenToAllChannels , registerReloadOnNewVersion, sendMessageToAllChannels, openNewURLFromPopup, @@ -61,6 +61,8 @@ const api: BackgroundPlatformAPI & ForegroundPlatformAPI = { useServiceWorkerAsBackgroundProcess, keepAlive, listenNetworkConnectionState, + setAlertedIcon, + setNormalIcon, }; export default api; @@ -69,7 +71,7 @@ const logger = new Logger("chrome.ts"); const WALLET_STORAGE_KEY = "wallet-settings"; -function jsonParseOrDefault(unparsed: any, def: any) { +function jsonParseOrDefault(unparsed: string, def: unknown) { if (!unparsed) return def; try { return JSON.parse(unparsed); @@ -85,7 +87,7 @@ async function getSettingsFromStorage(): Promise<Settings> { return jsonParseOrDefault(settings, defaultSettings); } -function keepAlive(callback: any): void { +function keepAlive(callback: () => void): void { if (extensionIsManifestV3()) { chrome.alarms.create("wallet-worker", { periodInMinutes: 1 }); @@ -103,7 +105,7 @@ function isFirefox(): boolean { } export function containsClipboardPermissions(): Promise<boolean> { - return new Promise((res, rej) => { + return new Promise((res) => { res(false); // chrome.permissions.contains({ permissions: ["clipboardRead"] }, (resp) => { // const le = chrome.runtime.lastError?.message; @@ -116,7 +118,7 @@ export function containsClipboardPermissions(): Promise<boolean> { } export async function requestClipboardPermissions(): Promise<boolean> { - return new Promise((res, rej) => { + return new Promise((res) => { res(false); // chrome.permissions.request({ permissions: ["clipboardRead"] }, (resp) => { // const le = chrome.runtime.lastError?.message; @@ -129,7 +131,7 @@ export async function requestClipboardPermissions(): Promise<boolean> { } export function removeClipboardPermissions(): Promise<boolean> { - return new Promise((res, rej) => { + return new Promise((res) => { res(true); // chrome.permissions.remove({ permissions: ["clipboardRead"] }, (resp) => { // const le = chrome.runtime.lastError?.message; @@ -154,7 +156,7 @@ function getPermissionsApi(): CrossBrowserPermissionsApi { * @param callback function to be called */ function notifyWhenAppIsReady(): Promise<void> { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { if (extensionIsManifestV3()) { resolve(); } else { @@ -221,6 +223,13 @@ function openWalletURIFromPopup(uri: TalerUri): void { )}`, ); break; + case TalerUriAction.AddExchange: + url = chrome.runtime.getURL( + `static/wallet.html#/cta/add/exchange?talerUri=${encodeURIComponent( + talerUri, + )}`, + ); + break; case TalerUriAction.DevExperiment: logger.warn(`taler://dev-experiment URIs are not allowed in headers`); return; @@ -269,7 +278,7 @@ async function sendMessageToBackground< nextMessageIndex = (nextMessageIndex + 1) % (Number.MAX_SAFE_INTEGER - 100); const messageWithId = { ...message, id: `id_${nextMessageIndex}` }; - return new Promise<any>((resolve, reject) => { + return new Promise<MessageResponse>((resolve, reject) => { logger.trace("send operation to the wallet background", message); let timedout = false; const timerId = setTimeout(() => { @@ -300,7 +309,7 @@ async function sendMessageToBackground< * To be used by the foreground */ let notificationPort: chrome.runtime.Port | undefined; -function listenToWalletBackground(listener: (m: any) => void): () => void { +function listenToWalletBackground(listener: (message: MessageFromBackend) => void): () => void { if (notificationPort === undefined) { notificationPort = chrome.runtime.connect({ name: "notifications" }); } @@ -362,7 +371,7 @@ function registerAllIncomingConnections(): void { notification: { type: ExtensionNotificationType.SettingsChange, currentValue: jsonParseOrDefault( - event[WALLET_STORAGE_KEY], + event[WALLET_STORAGE_KEY].newValue, defaultSettings, ), }, @@ -408,12 +417,12 @@ function registerReloadOnNewVersion(): void { }); } -async function redirectCurrentTabToWalletPage(page: string): Promise<void> { - let queryOptions = { active: true, lastFocusedWindow: true }; - let [tab] = await chrome.tabs.query(queryOptions); +// async function redirectCurrentTabToWalletPage(page: string): Promise<void> { +// let queryOptions = { active: true, lastFocusedWindow: true }; +// let [tab] = await chrome.tabs.query(queryOptions); - return redirectTabToWalletPage(tab.id!, page); -} +// return redirectTabToWalletPage(tab.id!, page); +// } async function redirectTabToWalletPage( tabId: number, @@ -474,26 +483,26 @@ function setAlertedIcon(): void { interface OffscreenCanvasRenderingContext2D extends CanvasState, - CanvasTransform, - CanvasCompositing, - CanvasImageSmoothing, - CanvasFillStrokeStyles, - CanvasShadowStyles, - CanvasFilters, - CanvasRect, - CanvasDrawPath, - CanvasUserInterface, - CanvasText, - CanvasDrawImage, - CanvasImageData, - CanvasPathDrawingStyles, - CanvasTextDrawingStyles, - CanvasPath { + CanvasTransform, + CanvasCompositing, + CanvasImageSmoothing, + CanvasFillStrokeStyles, + CanvasShadowStyles, + CanvasFilters, + CanvasRect, + CanvasDrawPath, + CanvasUserInterface, + CanvasText, + CanvasDrawImage, + CanvasImageData, + CanvasPathDrawingStyles, + CanvasTextDrawingStyles, + CanvasPath { readonly canvas: OffscreenCanvas; } declare const OffscreenCanvasRenderingContext2D: { prototype: OffscreenCanvasRenderingContext2D; - new (): OffscreenCanvasRenderingContext2D; + new(): OffscreenCanvasRenderingContext2D; }; interface OffscreenCanvas extends EventTarget { @@ -506,7 +515,7 @@ interface OffscreenCanvas extends EventTarget { } declare const OffscreenCanvas: { prototype: OffscreenCanvas; - new (width: number, height: number): OffscreenCanvas; + new(width: number, height: number): OffscreenCanvas; }; function createCanvas(size: number): OffscreenCanvas { @@ -659,7 +668,7 @@ async function findTalerUriInTab(tabId: number): Promise<string | undefined> { return; } } else { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { //manifest v2 chrome.tabs.executeScript( tabId, @@ -685,9 +694,9 @@ async function findTalerUriInTab(tabId: number): Promise<string | undefined> { } } -async function timeout(ms: number): Promise<void> { - return new Promise((resolve) => setTimeout(resolve, ms)); -} +// async function timeout(ms: number): Promise<void> { +// return new Promise((resolve) => setTimeout(resolve, ms)); +// } async function findTalerUriInClipboard(): Promise<string | undefined> { //FIXME: add clipboard feature // try { @@ -723,15 +732,35 @@ function listenNetworkConnectionState( function notifyOnline() { notify("on"); } - notify(window.navigator.onLine ? "on" : "off"); - window.addEventListener("offline", notifyOffline); - window.addEventListener("online", notifyOnline); + function notifyChange() { + if (nav.onLine) { + notifyOnline(); + } else { + notifyOnline(); + } + } + notify(navigator.onLine ? "on" : "off"); + + const nav: any = navigator; + if (typeof nav.connection !== "undefined") { + nav.connection.addEventListener("change", notifyChange); + } + if (typeof window !== "undefined") { + window.addEventListener("offline", notifyOffline); + window.addEventListener("online", notifyOnline); + } return () => { - window.removeEventListener("offline", notifyOffline); - window.removeEventListener("online", notifyOnline); + if (typeof nav.connection !== "undefined") { + nav.connection.removeEventListener("change", notifyChange); + } + if (typeof window !== "undefined") { + window.removeEventListener("offline", notifyOffline); + window.removeEventListener("online", notifyOnline); + } }; } + function runningOnPrivateMode(): boolean { return chrome.extension.inIncognitoContext; } |