aboutsummaryrefslogtreecommitdiff
path: root/src/webex/wxBackend.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2018-01-22 01:12:08 +0100
committerFlorian Dold <florian.dold@gmail.com>2018-01-22 01:12:08 +0100
commitae177549a5818e2698253ef17a11b1effbd66fdb (patch)
tree7ac7765d2af595b1d22367740d88a397b6b9868a /src/webex/wxBackend.ts
parent1671d9a508b803af31762bcd9508e70eb40e7b48 (diff)
downloadwallet-core-ae177549a5818e2698253ef17a11b1effbd66fdb.tar.xz
implement flicker-free refunds
Diffstat (limited to 'src/webex/wxBackend.ts')
-rw-r--r--src/webex/wxBackend.ts22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/webex/wxBackend.ts b/src/webex/wxBackend.ts
index 26b8ff2cf..98b543d28 100644
--- a/src/webex/wxBackend.ts
+++ b/src/webex/wxBackend.ts
@@ -292,6 +292,8 @@ function handleMessage(sender: MessageSender,
}
case "get-full-refund-fees":
return needsWallet().getFullRefundFees(detail.refundPermissions);
+ case "accept-refund":
+ return needsWallet().acceptRefund(detail.refundUrl);
case "get-tip-status": {
const tipToken = TipToken.checked(detail.tipToken);
return needsWallet().getTipStatus(tipToken);
@@ -430,8 +432,8 @@ async function talerPay(fields: any, url: string, tabId: number): Promise<string
}
if (fields.refund_url) {
console.log("processing refund");
- const hc = await w.acceptRefund(fields.refund_url);
- return chrome.extension.getURL(`/src/webex/pages/refund.html?contractTermsHash=${hc}`);
+ const uri = new URI(chrome.extension.getURL("/src/webex/pages/refund.html"));
+ return uri.query({ refundUrl: fields.refund_url }).href();
}
if (fields.tip) {
const uri = new URI(chrome.extension.getURL("/src/webex/pages/tip.html"));
@@ -507,10 +509,24 @@ function handleHttpPayment(headerList: chrome.webRequest.HttpHeader[], url: stri
return { redirectUrl: uri.href() };
}
+ // Synchronous fast path for refund
+ if (fields.refund_url) {
+ console.log("processing refund");
+ const uri = new URI(chrome.extension.getURL("/src/webex/pages/refund.html"));
+ uri.query({ refundUrl: fields.refund_url });
+ return { redirectUrl: uri.href };
+ }
+
// We need to do some asynchronous operation, we can't directly redirect
talerPay(fields, url, tabId).then((nextUrl) => {
if (nextUrl) {
- chrome.tabs.update(tabId, { url: nextUrl });
+ // We use chrome.tabs.executeScript instead of chrome.tabs.update
+ // because the latter is buggy when it does not execute in the same
+ // (micro-?)task as the header callback.
+ chrome.tabs.executeScript({
+ code: `document.location.href = decodeURIComponent("${encodeURI(nextUrl)}");`,
+ runAt: "document_start",
+ });
}
});