handling service worker waiting phase
This commit is contained in:
parent
9641299d6c
commit
37690dd22c
@ -445,8 +445,8 @@ async function downloadExchangeKeysInfo(
|
||||
codecForExchangeKeysJson(),
|
||||
);
|
||||
|
||||
logger.info("received /keys response");
|
||||
logger.info(`${j2s(exchangeKeysJsonUnchecked)}`);
|
||||
logger.trace("received /keys response");
|
||||
logger.trace(`${j2s(exchangeKeysJsonUnchecked)}`);
|
||||
|
||||
if (exchangeKeysJsonUnchecked.denoms.length === 0) {
|
||||
throw TalerError.fromDetail(
|
||||
|
@ -54,6 +54,6 @@
|
||||
"default_popup": "static/popup.html"
|
||||
},
|
||||
"background": {
|
||||
"service_worker": "dist/background.js"
|
||||
"service_worker": "service_worker.js"
|
||||
}
|
||||
}
|
@ -32,8 +32,8 @@ zipfile="taler-wallet-webextension-${vers_manifest}.zip"
|
||||
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
jq '. | .name = "GNU Taler Wallet" ' manifest-v3.json > $TEMP_DIR/manifest.json
|
||||
cp -r dist static $TEMP_DIR
|
||||
(cd $TEMP_DIR && zip -q -r "$zipfile" dist static manifest.json)
|
||||
cp -r dist static service_worker.js $TEMP_DIR
|
||||
(cd $TEMP_DIR && zip -q -r "$zipfile" dist static manifest.json service_worker.js)
|
||||
mkdir -p extension/v3
|
||||
mv "$TEMP_DIR/$zipfile" ./extension/v3/
|
||||
rm -rf $TEMP_DIR
|
||||
|
@ -9,7 +9,7 @@
|
||||
"private": false,
|
||||
"scripts": {
|
||||
"clean": "rimraf dist lib tsconfig.tsbuildinfo",
|
||||
"test": "mocha --enable-source-maps 'dist/**/*.test.js'",
|
||||
"test": "pnpm compile && mocha --enable-source-maps 'dist/**/*.test.js'",
|
||||
"test:coverage": "nyc pnpm test",
|
||||
"compile": "tsc && ./build-fast-with-linaria.mjs",
|
||||
"dev": "./dev.mjs",
|
||||
|
11
packages/taler-wallet-webextension/service_worker.js
Normal file
11
packages/taler-wallet-webextension/service_worker.js
Normal file
@ -0,0 +1,11 @@
|
||||
/* eslint-disable no-undef */
|
||||
/**
|
||||
* Wrapper to catch any initialization error and show it in the logs
|
||||
*/
|
||||
try {
|
||||
importScripts("dist/background.js");
|
||||
self.skipWaiting();
|
||||
console.log("SERVICE WORKER init: ok");
|
||||
} catch (e) {
|
||||
console.error("SERVICE WORKER failed:", e);
|
||||
}
|
@ -117,7 +117,7 @@ export async function removeHostPermissions(): Promise<boolean> {
|
||||
if ("webRequest" in chrome) {
|
||||
chrome.webRequest.handlerBehaviorChanged(() => {
|
||||
if (chrome.runtime.lastError) {
|
||||
console.error(JSON.stringify(chrome.runtime.lastError));
|
||||
logger.error(JSON.stringify(chrome.runtime.lastError));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -138,7 +138,6 @@ export async function removeHostPermissions(): Promise<boolean> {
|
||||
}
|
||||
|
||||
function addPermissionsListener(callback: (p: Permissions, lastError?: string) => void): void {
|
||||
console.log("addPermissionListener is not supported for Firefox");
|
||||
chrome.permissions.onAdded.addListener((perm: Permissions) => {
|
||||
const lastError = chrome.runtime.lastError?.message;
|
||||
callback(perm, lastError)
|
||||
@ -182,7 +181,7 @@ function openWalletURIFromPopup(talerUri: string): void {
|
||||
url = chrome.runtime.getURL(`static/wallet.html#/cta/refund?talerRefundUri=${talerUri}`);
|
||||
break;
|
||||
default:
|
||||
console.warn(
|
||||
logger.warn(
|
||||
"Response with HTTP 402 has Taler header, but header value is not a taler:// URI.",
|
||||
);
|
||||
return;
|
||||
@ -211,6 +210,7 @@ function openWalletPageFromPopup(page: string): void {
|
||||
|
||||
async function sendMessageToWalletBackground(operation: string, payload: any): Promise<any> {
|
||||
return new Promise<any>((resolve, reject) => {
|
||||
logger.trace("send operation to the wallet background", operation)
|
||||
chrome.runtime.sendMessage({ operation, payload, id: "(none)" }, (resp) => {
|
||||
if (chrome.runtime.lastError) {
|
||||
reject(chrome.runtime.lastError.message)
|
||||
@ -245,7 +245,7 @@ function sendMessageToAllChannels(message: MessageFromBackend): void {
|
||||
try {
|
||||
notif.postMessage(message);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
logger.error("error posting a message", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -275,7 +275,7 @@ function registerReloadOnNewVersion(): void {
|
||||
// Explicitly unload the extension page as soon as an update is available,
|
||||
// so the update gets installed as soon as possible.
|
||||
chrome.runtime.onUpdateAvailable.addListener((details) => {
|
||||
console.log("update available:", details);
|
||||
logger.info("update available:", details);
|
||||
chrome.runtime.reload();
|
||||
});
|
||||
|
||||
@ -286,7 +286,7 @@ function redirectTabToWalletPage(
|
||||
page: string,
|
||||
): void {
|
||||
const url = chrome.runtime.getURL(`/static/wallet.html#${page}`);
|
||||
console.log("redirecting tabId: ", tabId, " to: ", url);
|
||||
logger.trace("redirecting tabId: ", tabId, " to: ", url);
|
||||
chrome.tabs.update(tabId, { url });
|
||||
}
|
||||
|
||||
@ -301,13 +301,13 @@ function getWalletVersion(): WalletVersion {
|
||||
}
|
||||
|
||||
function registerTalerHeaderListener(callback: (tabId: number, url: string) => void): void {
|
||||
console.log("setting up header listener");
|
||||
logger.trace("setting up header listener");
|
||||
|
||||
function headerListener(
|
||||
details: chrome.webRequest.WebResponseHeadersDetails,
|
||||
): void {
|
||||
if (chrome.runtime.lastError) {
|
||||
console.error(JSON.stringify(chrome.runtime.lastError));
|
||||
logger.error(JSON.stringify(chrome.runtime.lastError));
|
||||
return;
|
||||
}
|
||||
if (
|
||||
@ -350,7 +350,7 @@ function registerTalerHeaderListener(callback: (tabId: number, url: string) => v
|
||||
//notify the browser about this change, this operation is expensive
|
||||
chrome?.webRequest?.handlerBehaviorChanged(() => {
|
||||
if (chrome.runtime.lastError) {
|
||||
console.error(JSON.stringify(chrome.runtime.lastError));
|
||||
logger.error(JSON.stringify(chrome.runtime.lastError));
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -473,7 +473,6 @@ async function registerIconChangeOnTalerContent(): Promise<void> {
|
||||
logger.info("tab updated", tabId, info);
|
||||
if (info.status !== "complete") return;
|
||||
const uri = await findTalerUriInTab(tabId);
|
||||
console.log("urio", uri)
|
||||
if (uri) {
|
||||
setAlertedIcon()
|
||||
} else {
|
||||
@ -483,9 +482,7 @@ async function registerIconChangeOnTalerContent(): Promise<void> {
|
||||
});
|
||||
chrome.tabs.onActivated.addListener(async ({ tabId }: chrome.tabs.TabActiveInfo) => {
|
||||
if (tabId < 0) return;
|
||||
logger.info("tab activated", tabId);
|
||||
const uri = await findTalerUriInTab(tabId);
|
||||
console.log("urio", uri)
|
||||
if (uri) {
|
||||
setAlertedIcon()
|
||||
} else {
|
||||
@ -565,7 +562,7 @@ async function findTalerUriInTab(tabId: number): Promise<string | undefined> {
|
||||
},
|
||||
(result) => {
|
||||
if (chrome.runtime.lastError) {
|
||||
console.error(JSON.stringify(chrome.runtime.lastError));
|
||||
logger.error(JSON.stringify(chrome.runtime.lastError));
|
||||
resolve(undefined);
|
||||
return;
|
||||
}
|
||||
|
@ -121,6 +121,7 @@ async function dispatch(
|
||||
};
|
||||
};
|
||||
|
||||
try {
|
||||
switch (req.operation) {
|
||||
case "wxGetDiagnostics": {
|
||||
r = wrapResponse(await getDiagnostics());
|
||||
@ -181,9 +182,9 @@ async function dispatch(
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
sendResponse(r);
|
||||
} catch (e) {
|
||||
logger.error(`Error sending operation: ${req.operation}`, e)
|
||||
// might fail if tab disconnected
|
||||
}
|
||||
}
|
||||
@ -231,7 +232,7 @@ async function reinitWallet(): Promise<void> {
|
||||
});
|
||||
|
||||
platform.keepAlive(() => {
|
||||
wallet.runTaskLoop().catch((e) => {
|
||||
return wallet.runTaskLoop().catch((e) => {
|
||||
logger.error("error during wallet task loop", e);
|
||||
});
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user