text: /*
   * Copyright 2018 The Chromium Authors. All rights reserved.
   * Use of this source code is governed by a BSD-style license that can be
   * found in the LICENSE file.
   */
  
  /* global PaymentRequest:false */
  /* eslint-disable valid-jsdoc */
  
  /**
   * Initializes the payment request object.
   */
  function buildPaymentRequest() {
    if (!window.PaymentRequest) {
      throw new Error('Payment Request API not available.');
    }
  
    var supportedInstruments = [
      {
        supportedMethods: 'basic-card',
      },
    ];
  
    var details = {
      total: {
        label: 'Donation',
        amount: {
          currency: 'USD',
          value: '1.00',
          pending: true,
        },
      },
    };
  
    return new PaymentRequest(supportedInstruments, details);
  }
  
  /**
   * Calls PaymentRequest.show() without a promise.
   */
  function buyWithNoPromise() { // eslint-disable-line no-unused-vars
    try {
      request = buildPaymentRequest();
      print('The final donation amount is USD $1.00.');
      request.show()
          .then(function(resp) {
            resp.complete('success')
                .then(function() {
                  print(JSON.stringify(resp, undefined, 2));
                })
                .catch(function(err) {
                  print(err);
                });
          })
          .catch(function(err) {
            print(err);
          });
    } catch (err) {
      print(err);
    }
  }
  
  /**
   * Calls PaymentRequest.show() with a promise that resolves.
   */
  function buyWithResolvingPromise() { // eslint-disable-line no-unused-vars
    try {
      var request = buildPaymentRequest();
      print('The initial donation amount is USD $1.00.');
      request
          .show(new Promise(function(resolve) {
            print('Calculating the final donation amount...');
            window.setTimeout(function() {
              print('Final donation amount is USD $0.99.');
              var details = {
                total: {
                  label: 'Donation',
                  amount: {
                    currency: 'USD',
                    value: '0.99',
                  },
                },
              };
  
              resolve(details);
            }, 5000); // 5 seconds
          }))
          .then(function(instrumentResponse) {
            instrumentResponse.complete('success');
          })
          .catch(function(err) {
            print(err);
          });
    } catch (err) {
      print(err);
    }
  }
  
  /**
   * Calls PaymentRequest.show() with a promise that rejects.
   */
  function buyWithRejectingPromise() { // eslint-disable-line no-unused-vars
    try {
      var request = buildPaymentRequest();
      print('The initial donation amount is USD $1.00.');
      request
          .show(new Promise(function(resolve, reject) {
            print('Calculating the final donation amount...');
            window.setTimeout(function() {
              reject('Unable to calculate final donation amount.');
            }, 5000); // 5 seconds
          }))
          .then(function(instrumentResponse) {
            instrumentResponse.complete('success');
          })
          .catch(function(err) {
            print(err);
          });
    } catch (err) {
      print(err);
    }
  }
  