Automatic update from web-platform-tests Payment Handler: Add test for OperationError propagation (#59002) This change adds a new manual test to verify that if a web-based payment handler rejects the promise passed to respondWith with an OperationError, the original PaymentRequest.show() call also rejects with an OperationError. For other error types (like SyntaxError), show() should still reject with an AbortError. Spec: https://github.com/w3c/web-based-payment-handler/issues/428 -- wpt-commits: 5bc484399a7de139464d759716435537e368cc00 wpt-pr: 59002
49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
/**
|
|
* 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);
|
|
});
|
|
}));
|
|
});
|