summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2022-05-06 17:29:42 -0300
committerSebastian <sebasjm@gmail.com>2022-05-06 17:29:52 -0300
commit37690dd22c1c4cd63f3fa4b1d600b3da1cbae152 (patch)
treeca5760dc2e3e1640ce8c1a21fdca2e43765fedff /packages/taler-wallet-webextension/src
parent9641299d6cb82cbc60dd9f5863a76c751dcdfacd (diff)
downloadwallet-core-37690dd22c1c4cd63f3fa4b1d600b3da1cbae152.tar.gz
wallet-core-37690dd22c1c4cd63f3fa4b1d600b3da1cbae152.tar.bz2
wallet-core-37690dd22c1c4cd63f3fa4b1d600b3da1cbae152.zip
handling service worker waiting phase
Diffstat (limited to 'packages/taler-wallet-webextension/src')
-rw-r--r--packages/taler-wallet-webextension/src/platform/chrome.ts23
-rw-r--r--packages/taler-wallet-webextension/src/wxBackend.ts115
2 files changed, 68 insertions, 70 deletions
diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts b/packages/taler-wallet-webextension/src/platform/chrome.ts
index ef8904b77..e097baaa1 100644
--- a/packages/taler-wallet-webextension/src/platform/chrome.ts
+++ b/packages/taler-wallet-webextension/src/platform/chrome.ts
@@ -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;
}
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts b/packages/taler-wallet-webextension/src/wxBackend.ts
index f5483e807..532b28622 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -121,69 +121,70 @@ async function dispatch(
};
};
- switch (req.operation) {
- case "wxGetDiagnostics": {
- r = wrapResponse(await getDiagnostics());
- break;
- }
- case "reset-db": {
- await deleteTalerDatabase(indexedDB as any);
- r = wrapResponse(await reinitWallet());
- break;
- }
- case "run-gc": {
- logger.info("gc")
- const dump = await exportDb(currentDatabase!.idbHandle());
- await deleteTalerDatabase(indexedDB as any);
- logger.info("cleaned")
- await reinitWallet();
- logger.info("init")
- await importDb(currentDatabase!.idbHandle(), dump)
- logger.info("imported")
- r = wrapResponse({ result: true });
- break;
- }
- case "containsHeaderListener": {
- const res = await platform.containsTalerHeaderListener();
- r = wrapResponse({ newValue: res });
- break;
- }
- case "toggleHeaderListener": {
- const newVal = req.payload.value;
- logger.trace("new extended permissions value", newVal);
- if (newVal) {
- platform.registerTalerHeaderListener(parseTalerUriAndRedirect);
- r = wrapResponse({ newValue: true });
- } else {
- const rem = await platform.getPermissionsApi().removeHostPermissions();
- logger.trace("permissions removed:", rem);
- r = wrapResponse({ newVal: false });
+ try {
+ switch (req.operation) {
+ case "wxGetDiagnostics": {
+ r = wrapResponse(await getDiagnostics());
+ break;
}
- break;
- }
- default: {
- const w = currentWallet;
- if (!w) {
- r = {
- type: "error",
- id: req.id,
- operation: req.operation,
- error: makeErrorDetail(
- TalerErrorCode.WALLET_CORE_NOT_AVAILABLE,
- {},
- "wallet core not available",
- ),
- };
+ case "reset-db": {
+ await deleteTalerDatabase(indexedDB as any);
+ r = wrapResponse(await reinitWallet());
+ break;
+ }
+ case "run-gc": {
+ logger.info("gc")
+ const dump = await exportDb(currentDatabase!.idbHandle());
+ await deleteTalerDatabase(indexedDB as any);
+ logger.info("cleaned")
+ await reinitWallet();
+ logger.info("init")
+ await importDb(currentDatabase!.idbHandle(), dump)
+ logger.info("imported")
+ r = wrapResponse({ result: true });
+ break;
+ }
+ case "containsHeaderListener": {
+ const res = await platform.containsTalerHeaderListener();
+ r = wrapResponse({ newValue: res });
+ break;
+ }
+ case "toggleHeaderListener": {
+ const newVal = req.payload.value;
+ logger.trace("new extended permissions value", newVal);
+ if (newVal) {
+ platform.registerTalerHeaderListener(parseTalerUriAndRedirect);
+ r = wrapResponse({ newValue: true });
+ } else {
+ const rem = await platform.getPermissionsApi().removeHostPermissions();
+ logger.trace("permissions removed:", rem);
+ r = wrapResponse({ newVal: false });
+ }
+ break;
+ }
+ default: {
+ const w = currentWallet;
+ if (!w) {
+ r = {
+ type: "error",
+ id: req.id,
+ operation: req.operation,
+ error: makeErrorDetail(
+ TalerErrorCode.WALLET_CORE_NOT_AVAILABLE,
+ {},
+ "wallet core not available",
+ ),
+ };
+ break;
+ }
+ r = await w.handleCoreApiRequest(req.operation, req.id, req.payload);
break;
}
- r = await w.handleCoreApiRequest(req.operation, req.id, req.payload);
- break;
}
- }
- 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);
});
})