blob: 438001804acdaca21410ce0d367a8208cac60aff [file] [log] [blame]
<!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 shippingOption attribute</title>
<link rel="help" href="">
<link rel="help" href="">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
setup({ explicit_done: true, explicit_timeout: true });
const validMethod = Object.freeze({ supportedMethods: "basic-card" });
const applePayMethod = {
supportedMethods: "",
data: {
version: 3,
merchantIdentifier: "",
countryCode: "US",
merchantCapabilities: ["supports3DS"],
supportedNetworks: ["visa"],
const validMethods = Object.freeze([validMethod, applePayMethod]);
const validAmount = Object.freeze({ currency: "USD", value: "5.00" });
const validTotal = Object.freeze({
label: "label",
amount: validAmount,
const validDetails = Object.freeze({ total: validTotal });
const validShippingOption1 = Object.freeze({
id: "valid-1",
label: "PICK ME!",
amount: validAmount,
selected: false,
const validShippingOption2 = Object.freeze({
id: "initially-selected",
label: "Valid shipping option 2",
amount: validAmount,
selected: true,
const requestShipping = Object.freeze({
requestShipping: true,
function testShippingOptionChanged() {
promise_test(async t => {
const detailsWithShippingOptions = Object.assign({}, validDetails, {
shippingOptions: [validShippingOption1, validShippingOption2],
const request = new PaymentRequest(
"Must be 'initially-selected', as the selected member is true"
const listenerPromise = new Promise(resolve => {
request.addEventListener("shippingoptionchange", () => {
const handlerPromise = new Promise(resolve => {
request.onshippingoptionchange = () => {
}); => err);
const results = await Promise.all([listenerPromise, handlerPromise]);
results.every(result => result === "valid-1"),
"Expected valid-1 as the shippingOption"
await request.abort();
<h2>PaymentRequest shippingOption 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, select "PICK ME!" as the shipping option.
<button onclick="testShippingOptionChanged()">
When the shipping option is manually changed, request.shippingOption represents the user's choice.
If you find a buggy test, please <a href="">file a bug</a>
and tag one of the <a href="">suggested reviewers</a>.