Source code

Revision control

Other Tools

<!DOCTYPE html>
<!-- Copyright © 2017 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<meta charset="utf-8">
<title>Test for PaymentRequest shippingAddress attribute</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
setup({ explicit_done: true, explicit_timeout: true });
const applePay = Object.freeze({
supportedMethods: "",
data: {
version: 3,
merchantIdentifier: "",
countryCode: "US",
merchantCapabilities: ["supports3DS"],
supportedNetworks: ["visa"],
const validMethod = Object.freeze({ supportedMethods: "basic-card" });
const validMethods = Object.freeze([validMethod, applePay]);
const validAmount = Object.freeze({ currency: "USD", value: "5.00" });
const validTotal = Object.freeze({
label: "label",
amount: validAmount,
const validShippingOption = Object.freeze({
id: "valid",
label: "Shipping Option",
amount: validAmount,
selected: false,
const validDetails = Object.freeze({
total: validTotal,
shippingOptions: [validShippingOption],
const requestShipping = Object.freeze({
requestShipping: true,
function testShippingAddressChange() {
promise_test(async t => {
const request = new PaymentRequest(
"request.shippingAddress must initially be null"
const listenerPromise = new Promise(resolve => {
request.addEventListener("shippingaddresschange", () => {
const handlerPromise = new Promise(resolve => {
request.onshippingaddresschange = () => {
}); => err);
const results = await Promise.all([listenerPromise, handlerPromise]);
results.forEach(obj => {
assert_true(obj instanceof PaymentAddress,
"Expected instance of PaymentAddress");
assert_equals(obj.organization, "", "organization should be redacted");
assert_equals(, "", "phone should be redacted");
assert_equals(obj.recipient, "", "recipient should be redacted");
assert_equals(obj.addressLine.length, 0, "addressLine should be redacted");
await request.abort();
<h2>PaymentRequest shippingAddress attribute</h2>
Click on each button in sequence from top to bottom without refreshing the page.
Each button will bring up the Payment Request UI window.
When the payment sheet is presented, enter or select a shipping address.
<button onclick="testShippingAddressChange()">
When the shipping address is manually changed, request.shippingAddress is a PaymentAddress.
If you find a buggy test, please <a href="">file a bug</a>
and tag one of the <a href="">suggested reviewers</a>.