| <!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 testImmediateUpdate({ textContent: testName }) { |
| promise_test(async t => { |
| const response = await getPaymentResponse({ requestPayerName: true }); |
| const eventPromise = new Promise((resolve, reject) => { |
| response.addEventListener( |
| "payerdetailchange", |
| ev => { |
| // Forces updateWith() to be run in the next event loop tick so that |
| // [[waitForUpdate]] is already true when it runs. |
| t.step_timeout(() => { |
| try { |
| ev.updateWith({}); |
| resolve(); // This is bad. |
| } catch (err) { |
| reject(err); // this is good. |
| } |
| }); |
| }, |
| { once: true } |
| ); |
| }); |
| |
| const retryPromise = response.retry({ |
| payer: { name: "Change me!" }, |
| }); |
| await promise_rejects_dom( |
| t, |
| "InvalidStateError", |
| eventPromise, |
| "The event loop already spun, so [[waitForUpdate]] is now true" |
| ); |
| await retryPromise; |
| await response.complete("success"); |
| }, testName.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="testImmediateUpdate(this);"> |
| updateWith() must be called immediately, otherwise must throw 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> |