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