| /** | |
| * 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); | |
| }); | |
| })); | |
| }); |