// META: global=window,worker
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: script=/service-workers/service-worker/resources/test-helpers.sub.js
// META: timeout=long

'use strict';

// https://w3c.github.io/payment-handler/

idl_test(
  ['payment-handler'],
  ['service-workers', 'html', 'dom'],
  async (idl_array, t) => {
    const isWindow = self.GLOBAL.isWindow();
    const isServiceWorker = 'ServiceWorkerGlobalScope' in self;
    const hasRegistration = isServiceWorker || isWindow;

    if (hasRegistration) {
      idl_array.add_objects({
        ServiceWorkerRegistration: ['registration'],
        PaymentManager: ['paymentManager'],
      });
    }
    if (isServiceWorker) {
      idl_array.add_objects({
        ServiceWorkerGlobalScope: ['self'],
        CanMakePaymentEvent: ['new CanMakePaymentEvent("type")'],
        PaymentRequestEvent: ['new PaymentRequestEvent("type")'],
      })
    }

    if (isWindow) {
      const scope = '/service-workers/service-worker/resources/';
      const reg = await service_worker_unregister_and_register(
        t, '/service-workers/service-worker/resources/empty-worker.js', scope);
      self.registration = reg;
      await wait_for_state(t, reg.installing, "activated");
      add_completion_callback(() => reg.unregister());
    }
    if (hasRegistration) {
      self.paymentManager = self.registration.paymentManager;
    }
  }
);
