Files
sousa-gecko/testing/web-platform/tests/web-based-payment-handler/app-reject-errors.js
T
Stephen McGruer 140f18c2ac Bug 2029837 [wpt PR 59002] - Payment Handler: Add test for OperationError propagation, a=testonly
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
2026-04-28 18:14:44 +00:00

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