aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-09-09 14:07:54 +0200
committerFlorian Dold <florian.dold@gmail.com>2016-09-09 14:11:55 +0200
commit7352b62aab893a55e761ad2d8ea3cbc3834f760e (patch)
tree36c9402a46242ab93ad69456f833db63198b8411
parenta164ea91838b0dd2506acbd67e1b3720abaa7e01 (diff)
downloadwallet-core-7352b62aab893a55e761ad2d8ea3cbc3834f760e.tar.xz
Make JSless payments work.
-rw-r--r--content_scripts/notify.ts41
-rw-r--r--lib/wallet/wxMessaging.ts10
2 files changed, 22 insertions, 29 deletions
diff --git a/content_scripts/notify.ts b/content_scripts/notify.ts
index ad77a1e37..1d31c929a 100644
--- a/content_scripts/notify.ts
+++ b/content_scripts/notify.ts
@@ -46,7 +46,7 @@ namespace TalerNotify {
}
var contract_request = new XMLHttpRequest();
- console.log("downloading contract from '" + url + "'")
+ console.log("downloading contract from '" + url + "'");
contract_request.open("GET", url, true);
contract_request.onload = function (e) {
if (contract_request.readyState == 4) {
@@ -76,6 +76,9 @@ namespace TalerNotify {
/**
* Wallet-internal version of executeContract, used for 402 payments.
+ *
+ * Even though we're inside a content script, we send events to the dom
+ * to avoid code duplication.
*/
function internalExecuteContract(contractHash: string, payUrl: string,
offerUrl: string) {
@@ -86,25 +89,13 @@ namespace TalerNotify {
* synchronous error message (such as an alert) or leave the page.
*/
function handleFailedPayment(status) {
- let timeoutHandle = null;
- function err() {
- alert("Payment failed: Unexpected status code for $pay_url: " + status);
- }
- function onResp() {
- if (timeoutHandle != null) {
- clearTimeout(timeoutHandle);
- timeoutHandle = null;
- }
- err();
- }
- function onTimeout() {
- timeoutHandle = null;
- err();
- }
- let eve = new CustomEvent('taler-payment-failed', {detail: {}});
- document.dispatchEvent(eve);
- document.addEventListener("taler-payment-failed-ok", onResp, false);
- timeoutHandle = setTimeout(onTimeout, 200);
+ const msg = {
+ type: "payment-failed",
+ detail: {},
+ };
+ chrome.runtime.sendMessage(msg, (resp) => {
+ alert("payment failed");
+ });
}
@@ -157,7 +148,7 @@ namespace TalerNotify {
};
document.addEventListener("taler-notify-payment", handleResponse, false);
- let eve = new CustomEvent('taler-fetch-payment', {detail: detail});
+ let eve = new CustomEvent('taler-execute-contract', {detail: detail});
document.dispatchEvent(eve);
}
@@ -187,14 +178,14 @@ namespace TalerNotify {
}
});
- console.log(resp);
- if (resp.type === "fetch") {
+
+ if (resp && resp.type === "fetch") {
console.log("it's fetch");
internalOfferContractFrom(resp.contractUrl);
document.documentElement.style.visibility = "hidden";
- } else if (resp.type === "execute") {
+ } else if (resp && resp.type === "execute") {
console.log("it's execute");
document.documentElement.style.visibility = "hidden";
internalExecuteContract(resp.contractHash, resp.payUrl, resp.offerUrl);
@@ -333,7 +324,7 @@ namespace TalerNotify {
console.log("got resp");
console.dir(resp);
if (!resp.success) {
- console.log("got event detial:");
+ console.log("got event detail:");
console.dir(e.detail);
if (e.detail.offering_url) {
console.log("offering url", e.detail.offering_url);
diff --git a/lib/wallet/wxMessaging.ts b/lib/wallet/wxMessaging.ts
index 95dcb929a..3ab56af71 100644
--- a/lib/wallet/wxMessaging.ts
+++ b/lib/wallet/wxMessaging.ts
@@ -54,7 +54,9 @@ function makeHandlers(db: IDBDatabase,
return exportDb(db);
},
["ping"]: function(detail, sender) {
- return Promise.resolve(paymentRequestCache[sender.tab.id]);
+ let info = paymentRequestCookies[sender.tab.id];
+ delete paymentRequestCookies[sender.tab.id];
+ return Promise.resolve(info);
},
["reset"]: function(detail, sender) {
if (db) {
@@ -240,7 +242,7 @@ class ChromeNotifier implements Notifier {
/**
* Mapping from tab ID to payment information (if any).
*/
-let paymentRequestCache = {};
+let paymentRequestCookies = {};
function handleHttpPayment(headerList: chrome.webRequest.HttpHeader[],
url: string, tabId: number): any {
@@ -251,7 +253,7 @@ function handleHttpPayment(headerList: chrome.webRequest.HttpHeader[],
const contractUrl = headers["x-taler-contract-url"];
if (contractUrl !== undefined) {
- paymentRequestCache[tabId] = {type: "fetch", contractUrl};
+ paymentRequestCookies[tabId] = {type: "fetch", contractUrl};
return;
}
@@ -266,7 +268,7 @@ function handleHttpPayment(headerList: chrome.webRequest.HttpHeader[],
// Offer URL is optional
const offerUrl = headers["x-taler-offer-url"];
- paymentRequestCache[tabId] = {
+ paymentRequestCookies[tabId] = {
type: "execute",
offerUrl,
payUrl,