| <!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> |