/** * A payment handler that opens a window and allows the user to trigger * different types of promise rejections for testing error propagation. */ let resolver = null; let rejecter = null; let activeMethodName = null; self.addEventListener('canmakepayment', event => { event.respondWith(true); }); self.addEventListener('message', msgEvent => { if (!resolver || !rejecter) return; if (msgEvent.data === 'success') { resolver({ methodName: activeMethodName, details: {status: 'success'}, }); } else if (msgEvent.data === 'reject-operation-error') { rejecter(new DOMException('Reject with OperationError', 'OperationError')); } else if (msgEvent.data === 'reject-syntax-error') { rejecter(new DOMException('Reject with SyntaxError', 'SyntaxError')); } else { return; // Message not for us. } resolver = null; rejecter = null; activeMethodName = null; }); self.addEventListener('paymentrequest', event => { activeMethodName = event.methodData[0].supportedMethods; event.respondWith(new Promise((resolve, reject) => { resolver = resolve; rejecter = reject; event.openWindow('payment-app/reject-errors.html').catch(err => { resolver = null; rejecter = null; activeMethodName = null; reject(err); }); })); });