From bc817a638d4ddfff0d5f05b51453c6ca790b24ec Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 16 Jan 2022 17:54:48 -0300 Subject: #7120 manifest v3: first iteration working new permission needed: scripting chrome.browserAction -> chrome.action webRequestBlocking is not possible anymore chrome.extension.getUrl -> chrome.runtime.getUrl new serviceWorkerHttpLib: using fetch new serviceWorkerCryptoWorkerFactory: using syncCryptoImpl few other minor changes still missing some other changes like migrating setTimeout to chrome.alarms api --- .../taler-wallet-webextension/src/wxBackend.ts | 71 ++++++++++++++-------- 1 file changed, 44 insertions(+), 27 deletions(-) (limited to 'packages/taler-wallet-webextension/src/wxBackend.ts') diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts b/packages/taler-wallet-webextension/src/wxBackend.ts index 10889f781..412f33f12 100644 --- a/packages/taler-wallet-webextension/src/wxBackend.ts +++ b/packages/taler-wallet-webextension/src/wxBackend.ts @@ -23,18 +23,6 @@ /** * Imports. */ -import { isFirefox, getPermissionsApi } from "./compat"; -import { extendedPermissions } from "./permissions"; -import { - OpenedPromise, - openPromise, - openTalerDatabase, - makeErrorDetails, - deleteTalerDatabase, - DbAccess, - WalletStoresV1, - Wallet, -} from "@gnu-taler/taler-wallet-core"; import { classifyTalerUri, CoreApiResponse, @@ -42,10 +30,19 @@ import { NotificationType, TalerErrorCode, TalerUriType, - WalletDiagnostics, + WalletDiagnostics } from "@gnu-taler/taler-util"; -import { BrowserHttpLib } from "./browserHttpLib"; +import { + DbAccess, deleteTalerDatabase, makeErrorDetails, OpenedPromise, + openPromise, + openTalerDatabase, Wallet, WalletStoresV1 +} from "@gnu-taler/taler-wallet-core"; import { BrowserCryptoWorkerFactory } from "./browserCryptoWorkerFactory"; +import { BrowserHttpLib } from "./browserHttpLib"; +import { getPermissionsApi, isFirefox } from "./compat"; +import { extendedPermissions } from "./permissions"; +import { SynchronousCryptoWorkerFactory } from "./serviceWorkerCryptoWorkerFactory.js"; +import { ServiceWorkerHttpLib } from "./serviceWorkerHttpLib"; /** * Currently active wallet instance. Might be unloaded and @@ -188,10 +185,10 @@ function getTab(tabId: number): Promise { }); } -function setBadgeText(options: chrome.browserAction.BadgeTextDetails): void { +function setBadgeText(options: chrome.action.BadgeTextDetails): void { // not supported by all browsers ... - if (chrome && chrome.browserAction && chrome.browserAction.setBadgeText) { - chrome.browserAction.setBadgeText(options); + if (chrome && chrome.action && chrome.action.setBadgeText) { + chrome.action.setBadgeText(options); } else { console.warn("can't set badge text, not supported", options); } @@ -214,7 +211,7 @@ function makeSyncWalletRedirect( oldUrl: string, params?: { [name: string]: string | undefined }, ): Record { - const innerUrl = new URL(chrome.extension.getURL(url)); + const innerUrl = new URL(chrome.runtime.getURL(url)); if (params) { const hParams = Object.keys(params) .map((k) => `${k}=${params[k]}`) @@ -256,12 +253,22 @@ async function reinitWallet(): Promise { walletInit.reject(e); return; } - const http = new BrowserHttpLib(); + let httpLib; + let cryptoWorker; + + if (chrome.runtime.getManifest().manifest_version === 3) { + httpLib = new ServiceWorkerHttpLib() + cryptoWorker = new SynchronousCryptoWorkerFactory(); + } else { + httpLib = new BrowserHttpLib() + cryptoWorker = new BrowserCryptoWorkerFactory() + } + console.log("setting wallet"); const wallet = await Wallet.create( currentDatabase, - http, - new BrowserCryptoWorkerFactory(), + httpLib, + cryptoWorker, ); try { await wallet.handleCoreApiRequest("initWallet", "native-init", {}); @@ -284,7 +291,9 @@ async function reinitWallet(): Promise { console.log("error during wallet task loop", e); }); // Useful for debugging in the background page. - (window as any).talerWallet = wallet; + if (typeof window !== "undefined") { + (window as any).talerWallet = wallet; + } currentWallet = wallet; walletInit.resolve(); } @@ -295,8 +304,8 @@ try { chrome.runtime.onInstalled.addListener((details) => { console.log("onInstalled with reason", details.reason); if (details.reason === "install") { - const url = chrome.extension.getURL("/static/wallet.html#/welcome"); - chrome.tabs.create({ active: true, url: url }); + const url = chrome.runtime.getURL("/static/wallet.html#/welcome"); + chrome.tabs.create({ active: true, url }); } }); } catch (e) { @@ -387,6 +396,10 @@ function headerListener( } function setupHeaderListener(): void { + if (chrome.runtime.getManifest().manifest_version === 3) { + console.error("cannot block request on manfest v3") + return + } console.log("setting up header listener"); // Handlers for catching HTTP requests getPermissionsApi().contains(extendedPermissions, (result: boolean) => { @@ -427,12 +440,14 @@ export async function wxMain(): Promise { console.log("update available:", details); chrome.runtime.reload(); }); - reinitWallet(); + const afterWalletIsInitialized = reinitWallet(); // Handlers for messages coming directly from the content // script on the page chrome.runtime.onMessage.addListener((req, sender, sendResponse) => { - dispatch(req, sender, sendResponse); + afterWalletIsInitialized.then(() => { + dispatch(req, sender, sendResponse); + }) return true; }); @@ -447,7 +462,9 @@ export async function wxMain(): Promise { }); try { - setupHeaderListener(); + if (chrome.runtime.getManifest().manifest_version === 2) { + setupHeaderListener(); + } } catch (e) { console.log(e); } -- cgit v1.2.3