| /* |
| * Copyright 2020 The Chromium Authors |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| /** |
| * Launches a payment handler, waits for the payment handler to issue a payment |
| * method change event with 'status': 'ready for abort' (as, for example, done |
| * in abort_repsonder_app.js), then aborts it. |
| * @param {string} method - The payment method identifier to use. |
| * @param {boolean} abortResponse - Whether the app should be abortable. |
| * @return {string} - Either 'Abort completed' or an error message. |
| */ |
| async function launchAndAbort(method, abortResponse) { |
| try { |
| const details = { |
| total: {label: 'TEST', amount: {currency: 'USD', value: '0.01'}}, |
| }; |
| const request = new PaymentRequest( |
| [{supportedMethods: method, data: {abortResponse}}], details); |
| const eventPromise = new Promise((resolveEventPromise) => { |
| request.addEventListener('paymentmethodchange', (event) => { |
| event.updateWith(details); |
| resolveEventPromise(event); |
| }); |
| }); |
| const showRejectPromise = new Promise((resolveShowRejectPromise) => { |
| request.show().catch(resolveShowRejectPromise); |
| }); |
| const event = await eventPromise; |
| if (event.methodDetails.status !== 'ready for abort') { |
| return event.methodDetails.status; |
| } |
| await request.abort(); |
| await showRejectPromise; |
| return 'Abort completed'; |
| } catch (e) { |
| return e.message; |
| } |
| } |