| <!doctype html> |
| <meta charset=utf-8> |
| <title>Dispatching PaymentRequestUpdateEvent for "payerdetailschange"</title> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script src="helpers.js"></script> |
| <script> |
| function runTest(button) { |
| button.disabled = true; |
| promise_test(async t => { |
| const response = await getPaymentResponse({ requestPayerName: true }); |
| const eventPromise = new Promise((_, reject) => { |
| response.addEventListener("payerdetailchange", ev => { |
| // [[waitForUpdate]] becomes true... |
| ev.updateWith({}); |
| // So calling it again throws "InvalidStateError". |
| try { |
| ev.updateWith({}); |
| } catch (err) { |
| reject(err); |
| } |
| }); |
| }); |
| await response.retry({ |
| payer: { name: "Change me!" }, |
| }); |
| await promise_rejects_dom(t, "InvalidStateError", eventPromise); |
| await response.complete("success"); |
| }, button.textContent.trim()); |
| } |
| </script> |
| <h2>Handling PaymentResponse.prototype.onpayerdetailchange events</h2> |
| <p> |
| The test brings up the Payment Request UI window. |
| When shown the payment sheet, use any details and hit pay. |
| </p> |
| <p> |
| When asked to retry the payment: |
| </p> |
| <ol> |
| <li> |
| <p> |
| Change payer's name to anything. |
| </p> |
| <button onclick="runTest(this);"> |
| Calling PaymentRequestUpdateEvent updateWith() twice throws an "InvalidStateError". |
| </button> |
| </li> |
| <li> |
| <button onclick="done();">DONE!</button> |
| </li> |
| </ol> |
| <small> |
| If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a> |
| and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">owners</a>. |
| </small> |